程序流程图
开始
│
├─> 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,第一字节将一直为0xFF
if ACAN.contents.FIdentifier == 0x100:
ACAN.contents.FData[0] = 0xff
def On_CANFD_pre_EVENT(OBJ, ACANFD):
# 报文ID为0x101,第一字节将一直为0xFF
if 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库