当前位置: 首页 > news >正文

TSMASTER二次开发:TSMaster_On_Event_Demo.py解析

源码下载

程序流程图

开始

├─> 1.导入模块
│   ├─> time
│   ├─> TSMasterAPI (全部)
│   ├─> TSEnum (全部及特定枚举)
│   ├─> TSStruct (全部)
│   ├─> TSCallback (全部)
│   ├─> __init__ (全部)
│   └─> TSAPI (全部)

├─> 2.定义回调函数
│   ├─> On_CAN_EVENT
│   ├─> On_CANFD_EVENT
│   ├─> On_CAN_pre_EVENT
│   └─> On_CANFD_pre_EVENT

├─> 3.创建函数指针
│   ├─> OnCANevent = TCANQueueEvent_Win32(On_CAN_EVENT)
│   ├─> OnCANFDevent = TCANFDQueueEvent_Win32(On_CANFD_EVENT)
│   ├─> OnCANpreEVENT = TCANQueueEvent_Win32(On_CAN_pre_EVENT)
│   └─> OnCANFDpreEVENT = TCANFDQueueEvent_Win32(On_CANFD_pre_EVENT)

├─> 初始化TSMaster库
│   └─> initialize_lib_tsmaster("TSMaster_demo".encode("utf8"))

├─> 配置通道
│   ├─> 设置CAN通道数: tsapp_set_can_channel_count(1)
│   └─> 设置LIN通道数: tsapp_set_lin_channel_count(0)

├─> 设置硬件映射
│   └─> tsapp_set_mapping_verbose(...) 将TC1014的1通道绑定至软件1通道

├─> 配置CANFD控制器
│   └─> tsapp_configure_baudrate_canfd(...) 设置波特率等参数

├─> 连接硬件
│   ├─> tsapp_connect()
│   │   ├─> 成功
│   │   │   └─> 注册回调事件
│   │   │       ├─> tsapp_register_event_can()
│   │   │       ├─> tsapp_register_event_canfd()
│   │   │       ├─> tsapp_register_pretx_event_can()
│   │   │       └─> tsapp_register_pretx_event_canfd()
│   │   └─> 失败
│   │       └─> 打印失败信息

├─> 发送报文
│   ├─> 创建CAN报文对象 TCAN1
│   ├─> 异步发送CAN报文: tsapp_transmit_can_async(TCAN1)
│   ├─> 添加CAN周期报文: tsapp_add_cyclic_msg_can(TCAN1, 10)
│   ├─> 创建CANFD报文对象 TCANFD1
│   ├─> 异步发送CANFD报文: tsapp_transmit_canfd_async(TCANFD1)
│   └─> 添加CANFD周期报文: tsapp_add_cyclic_msg_canfd(TCANFD1, 10)

├─> 等待2秒: time.sleep(2)

├─> 删除周期报文: tsapp_delete_cyclic_msgs()

├─> 断开连接: tsapp_disconnect()

└─> 释放库资源: finalize_lib_tsmaster()
结束

# 1. 导入必要的模块和类
import time
from TSMasterAPI import *
#import libTOSUN
from TSEnum import *
from TSEnum import _TLIBApplicationChannelType
from TSEnum import _TLIBBusToolDeviceType
from TSEnum import _TLIB_TS_Device_Sub_Type
from TSEnum import _TLIBCANFDControllerType
from TSEnum import _TLIBCANFDControllerMode
from TSStruct import *
from TSCallback import *
from __init__ import *
from TSAPI import *# 2. 定义回调函数 - 用于处理CAN和CANFD相关事件
# 回调函数 CAN发送接收事件
def On_CAN_EVENT(OBJ, ACAN):print("can_id:", ACAN.contents.FIdentifier, "can报文时间", ACAN.contents.FTimeUs / 1000000)# 回调函数 CANFD发送接收事件
def On_CANFD_EVENT(OBJ, ACANFD):if ACANFD.contents.FFDProperties == 1:print("canfd_id:", ACANFD.contents.FIdentifier, "canfd报文时间", ACANFD.contents.FTimeUs / 1000000)# 预发送事件 CAN预发送事件
def On_CAN_pre_EVENT(OBJ, ACAN):# 报文ID为0x100,第一字节将一直为0xFFif ACAN.contents.FIdentifier == 0x100:ACAN.contents.FData[0] = 0xffdef On_CANFD_pre_EVENT(OBJ, ACANFD):# 报文ID为0x101,第一字节将一直为0xFFif ACANFD.contents.FIdentifier == 0x101:ACANFD.contents.FData[0] = 0xff# 3.创建函数指针#
# 函数指针
OnCANevent = TCANQueueEvent_Win32(On_CAN_EVENT)
OnCANFDevent = TCANFDQueueEvent_Win32(On_CANFD_EVENT)
OnCANpreEVENT = TCANQueueEvent_Win32(On_CAN_pre_EVENT)
OnCANFDpreEVENT = TCANFDQueueEvent_Win32(On_CANFD_pre_EVENT)#4. 初始化TSMaster库# 初始化函数,调用TsMaster.dll 必须先调用初始化函数,否则其他函数无法使用
initialize_lib_tsmaster("TSMaster_demo".encode("utf8"))#5.配置通道
# 设置CAN通道
tsapp_set_can_channel_count(1)
# 设置LIN通道数 默认为0  但是还是建议调用函数来设置LIN通道为0
tsapp_set_lin_channel_count(0)#6.设置硬件映射
# 此处将TC1016的1通道绑定至软件1通道
# tosun其他硬件只需修改第6个参数,找到对应型号即可
tsapp_set_mapping_verbose("TSMaster_demo".encode("utf8"), _TLIBApplicationChannelType.APP_CAN,CHANNEL_INDEX.CHN1,"TC1014".encode("utf8"), _TLIBBusToolDeviceType.TS_USB_DEVICE,_TLIB_TS_Device_Sub_Type.TC1014,0, CHANNEL_INDEX.CHN1, True)# 设置1通道波特率
tsapp_configure_baudrate_canfd(CHANNEL_INDEX.CHN1, 500, 2000, _TLIBCANFDControllerType.lfdtISOCAN,_TLIBCANFDControllerMode.lfdmNormal, True)
obj1 = c_int32(0)
obj2 = c_int32(0)
obj3 = c_int32(0)
obj4 = c_int32(0)#7.连接硬件
if 0 == tsapp_connect():print("successful")# 注册回调事件 接收发送事件  预发送事件if 0 == tsapp_register_event_can(obj1, OnCANevent) and 0 == tsapp_register_event_canfd(obj2, OnCANFDevent) and \0 == tsapp_register_pretx_event_can(obj3,OnCANpreEVENT) and 0 == tsapp_register_pretx_event_canfd(obj4,OnCANFDpreEVENT):print("回调事件注册成功")else:print("回调事件注册失败")#8. 发送报文
TCAN1 = TLIBCAN(FIdentifier=0x100, FData=[0, 1, 2, 3, 4, 5, 6, 7])
# 发送CAN报文 (单帧发送 周期发送)
tsapp_transmit_can_async(TCAN1)
tsapp_add_cyclic_msg_can(TCAN1, 10)# 发送CANFD报文 (单帧发送 周期发送)
TCANFD1 = TLIBCANFD(FIdentifier=0x101, FData=[0, 1, 2, 3, 4, 5, 6, 7])
tsapp_transmit_canfd_async(TCANFD1)
tsapp_add_cyclic_msg_canfd(TCANFD1, 10)time.sleep(2)#等待2秒tsapp_delete_cyclic_msgs()#删除周期发送的报文
tsapp_disconnect()#断开连接
finalize_lib_tsmaster()#释放TSMaster库

http://www.dtcms.com/a/323682.html

相关文章:

  • 深度学习之张量
  • ros2 单线程与多线程
  • MySQL相关概念和易错知识点(4)(分组查询、连接查询、合并查询、子查询)
  • M8-11 RFID模块通过RS485转Profinet网关与PLC通信的配置指南
  • springboot 2.4跨域变化和swagger结合的问题
  • 智能的本质
  • 递归---记忆化搜索
  • 前端Web在Vue中的知识详解
  • 【MySQL】事务的基本概念
  • 智慧物流仓储分拣:陌讯多模态识别方案让准确率↑29.3% 实战解析
  • js零基础入门
  • 零基础-动手学深度学习-10.1. 注意力提示
  • vs2022编译Activemq
  • AnyDesk远程工具免费版,v9.5.110绿色便携版,秒连远程桌面,剪贴板同步超实用
  • 网络管理实战
  • B.10.01.6-DDD领域驱动设计:从理论到落地的完整指南
  • 【LLM实战|langgraph】langgrpah基础
  • WD5030A 芯片,24V降12V,输出电流15A,高度集成实现高效能与低成本的完美平衡
  • 如何免费配置各类AI API_Key?(附接入后测试)
  • 创建一个django项目
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(15):文法+单词第5回
  • 生产环境某业务服务JVM调优总结
  • DAY35打卡
  • [IOMMU]面向芯片/SoC验证工程的IOMMU全景速览
  • FMS 2025存储峰会获奖技术全景解读
  • 【linux基础】Linux命令提示符解析与操作指南
  • c++ 容器vector基础
  • 北斗变形监测技术应用与案例解析
  • RK3568 U盘/TF卡镜像更新
  • Mysql笔记-系统变量\用户变量管理