主界面
主界面工具栏主要用于编译和运行
程序可设计为周期执行和事件执行。
代码生成为编译时自动生成的代码,只读。
TSMaster头文件为系统内置文件,只读。
数据库头文件里面将导入的DBC文件进行解析,只读。
配置头文件可以导入小程序头文件
全局定义里面写全局定义的变量、函数等各种对象。
Step是主函数,利用它可以周期执行动作,可以修改调用的周期。
文档只是拿来说明,基本无用。
变量可以导入系统变量
定时器可以添加定时器进行计时
事件执行模块有:CAN收发事件、LIN收发事件、系统变量变化事件、定时器到时事件、程序启动停止事件、按键事件。
自定义函数可以自己写接口函数。
新建
打开
在外部导入mpc文件
把mp文件在工程路径里面D:\TSMaster\bin\Configuration\TOSUN\TSMaster\bin
保存
报文为mpc文件
编译和运行
调试
复杂工程调试的时候,可以在工具里面“生成VC++工程”,然后用VS打开,选择重新生成。
在VS里面运行的时候,如果想要在里面打断点,就要在对应的TSMaster小程序里面点击工具,运行最后编译。
重命名
一般默认名字都很难识别,需要重命名为自己能够识别的英文名。
点击这个可以重命名。
或者在属性对话框里面修改
头文件
代码生成:编译的时候会带出来,只读。不好的就是,如果出现错误,不能直接跳转到源代码里面去修改,而且不能做任何条件编译处理。
TSMaster头文件:软件自带头文件
数据库头文件:导入DBC的时候会带出来
配置头文件:导入新的头文件的时候要再这里声明
全局定义:相当于全局声明
Step函数:只能有一个,可选周期轮询。
文档:想写啥写啥,不写也行
C代码编辑器变量
变量有适用范围,这里要注意下。
在C代码编辑器里面添加的变量适用范围仅限于当前C代码编辑器,出了这个编辑器都用不了。
可以一个一个添加,也可以一整个列表添加,添加之后基本什么都不用写。其实就是系统变量,可以用来跟面板联动。
定义诸如浮点“v1”变量后,可针对变量作如下操作:
[1] 读取变量值: double d = v1.get();
[2] 给变量赋值: v1.set(12.34);
[3] 实时监控变量: 直接F9运行程序即可,在“变量”页面就可以看到此变量的实时值
[4] 实时监控系统变量: 在程序运行同时,还可在其他窗口例如图形窗口加载与这个变量关联的系统变量以查看其变化曲线
可以创建一个“变量变化事件”,通过变量变化就会进入。
定时器
定时器的设计比较鸡肋,要先在“定时器”里面添加个定时器,起个名字跟周期就行。然后“定时器触发事件”里面写上触发时候要处理的操作。
定时器开启timer5ms.start();
定时器关闭timer5ms.stop();
获取定时器周期get_interval();
设置定时器周期set_interval();最小为1ms
报文预发送
一般用来装载要发送的数据,打个log之类的。
报文发送
报文发送事件没什么用,还不如报文发送操作有用,所以这里说的是报文发送操作。
初始化报文
没有DBC文件
对着报文右键,选择“复制为C脚本”,选择“数据库信号方式”会比较全一些,就会有一个TCAN结构体定义的对象。
TCAN是个很有用的结构体,一般用在创建临时变量,能加载进所有发送报文里面,在TSMaster.h文件里面有定义,可以在里面放入需要发送的内容。
有DBC文件
导入DBC文件后,在函数选项卡中,可以看到DBC文件带出的报文,后面的_1代表的是通道1,想换通道得在导入DBC对话框里面改。
这样我们就可以用结构体TIC1_1来定义报文对象了。
要想改变特定的某个信号,对着报文下面的信号双击就能加入进脚本代码里面,如果赋值的话赋予的是物理值。
发送方式
TDiag_PhyReq_IVI_1是数据库头文件里面的类型,可以创建一个报文对象Diag_PhyReq_IVI_1
然后将报文对象初始化init、load_data传入TCAN对象的FData数据地址进去、就可以调用com.transmit_can_async(&报文结构体对象.FCAN)或者com.transmit_can_sync(&文结构体对象.FCAN,超时时间ms)来发送报文了。
com.transmit_can_async()是异步发送,com.transmit_can_sync()是同步发送,适用场景不同。
异步发送耗时短,不会被阻塞,它只管将报文内容推入硬件的发送缓冲区,并不关心发送是否成功,就继续往下运行,所以有个缺点,就是当需要发送的报文太多,超过硬件的发送缓冲区时,便会丢帧。
同步发送耗时长,需要等到报文发送成功有应答才会继续执行,否则将会阻塞。返回值为0的时候就是发送成功。
app.wait(0, "");是延迟毫秒函数和打印log
调用init_w_std_id设置CAN报文的ID和长度,CANFD和LIN类似。
也可以创建了CANMsg的变量,当做报文来使用。
赋值可以用set_data()
ACAN->FData[]可以访问发送报文的字节
.get()可以获取报文内容,返回值类型为TCAN。
.set()可以设置报文内容,入参类型为TCAN。
调用标准接口com.add_cyclic_message_can();把TCAN对象和通道放进去
报文接收
ACAN->FData[]可以直接访问接收到的报文的数据,但是执行一次FCAN.load_data就可以借助DBC把报文里面的信号给解析出来。
记录打印
调用log接口打印就行,跟printf用法一样
程序启动
一般要调用个app.connect();来映射通道
可以有多个程序启动事件
程序终止
调用app.terminate_application()可终止程序
内置接口
在函数对话框里面可以查到一些内置的标准接口。
这里举几个例子:
app.get_timestamp()获取当前时间戳
简单示例
如果安装在D盘的话,在D:\TSMaster\bin\Data\Demo\MiniProgram路径下面有具体示例,相对比较简单。