overview前言
今天继续TSMaster工具箱系列第三章,如何用Python脚本调用自己编写的API函数。
一、安装小程序库
Install the applet library
打开TSMaster,拖入一个dbc文件,可以到TSMaster的安装目录去找这个文件,在Demo-Databases里面任意找一个,比如说CAN_FD_Powertrain,拖入之后就可以关闭这个数据库界面。
接下来选择硬件通道,1路CAN,随后打开总线仿真也就是rbs的界面,双击激活Engine节点。当剩余总线启动的时候,Engine节点就会往外发送自己的周期报文。
切换到自定义函数组,点击右键添加一个自定义函数,名称设置为control_rbs。函数的参数可以设置稍微复杂一些,比如第一个参数是激活标志,也就是const bool AEnable;第二个参数是附加信息,比如const pchar AInfo,这样就把函数的接口给定义好了,接下来实现这个函数。
首先可以打印出,用户希望看到的信息,也就是log(AInfo),接下来判断Enable标志,if(AEnable),如果是Enable那么就写com.can_rbs_start,否则就是stop,这样API就做好了。为了让其他的程序用到这个函数,需要将controller这个小程序安装到TSMaster中,成为小程序库。切换到属性页面,点击小程序库这个开关,首先编译,其次安装就结束了。此时就可以从TSMaster的任何位置,调用这个API。
二、自动化测试
Automated Testing
小程序库,有controller这个mp小程序,它有一个API函数。如何验证呢?可以打开一个自动化模块,选中入口点,回车,再双击NOP,到右侧,修改类型为API调用,再修改函数调用类型为小程序库函数,此时会弹出一个函数选择器,第一个函数就是我们刚才设计的control_rbs。选中该函数双击,在右侧填入参数,第一个是使然标志,填入true或者1都可以,第二个是需要打印的信息,比如start from automation module,随后按F9启动,会弹出提示信息。
在信息里面首先是打印的字符串,也就是start from automation module,其次是一个错误信息,提示在激活仿真引擎之前必须连接应用程序,也就是点击左上角的启动按钮。按照提示连接一下,这样仿真引擎才具备运行条件。
再切到自动化模块,按F9,程序立马执行成功。切到trace窗口,可以看到Engine节点的报文,再回到自动化模块,选中control_rbs这个命令,粘贴一个一模一样的函数调用,将新的函数调用改为禁止rbs,也就是这里填false,信息填入stop from automation module,再按一次F9,由于最后一次执行的步骤是禁止操作,trace窗口的报文,也就不再刷新,Engine节点已被禁止。因为总线仿真已经停止,此时自动化模块的测试工作就结束了。
三、启动窗体设计
Launch form design
打开工具箱的主界面,添加一个新的工具箱,点击工具栏上的“+”号按钮,输入新工具箱的名称:test,按回车,工具箱就创建完毕。注意该工具箱,默认位于当前工程文件夹的路径中,它会跟随当前的工程走,表格中,全局一栏的勾是取消勾选的状态。点击右侧的文件夹按钮,就可以看到我们的工具箱了。它确实是位于当前的工程路径下,这就意味着,当新建工程或是加载别的工程的时候,这个工具箱就找不到了。
倘若用户想创建一个永久的工具箱,让每个工程都可以使用这个工具箱的话,就需要开启全局工具箱模式。点击左上角的齿轮按钮,将鼠标放到上面会提示激活工程模式或者全局模式,那么默认是选中状态,表示工程模式激活,再点一次就激活全局模式。这个时候,再创建工具箱,所创建的工具箱就会被放到,TSMaster的安装目录上,而不会跟随工程。
我们来操作一下,点击新建按钮,输入global1,回车,可以看到新建的工具箱排在表格中靠后的位置,而且全局的勾,是选中的状态。打开文件夹,向上一级,还可以看到该工具箱所在的文件夹,还有系统自带的两个示例的工具箱。一个是控件的使用指南,另一个是原始的CAN报文发送窗口。接下来进入界面设计的环节,选中test工具箱,双击,进入到代码设计页面,点击工具栏上的窗体按钮,来启动窗体设计器。
在界面中添加两个按钮,一个是启动rbs一个是禁止rbs,选中Button1,按F11切换到属性页面,过滤器输入name,将名称改为btnStart,caption改为Start,选中Button2,caption改为Stop,将name改为btnStop,至此窗体设计结束。
四、编写按钮的事件代码
Write event code for the button
添加import,在添加之前,首先要转到小程序模块页面,在空白处点右键添加模块,选择controller小程序库,该步骤使得我们的controller小程序的API对于Python来说是可见的。再回到工具箱代码设计界面,来到代码的第二行,点击右键,选择插入模块import,再选择我们的controller,可以看到,controller已被导入。
为了获得更好的编程体验,可以使用VS Code,点击工具栏上的编辑按钮,打开VS Code,接下来来到UI创建结束的地方,也就是位于init函数中的下半部分,首先添加两个按钮的点击事件,按四个空格输入def on_start_click,在函数中调用controller的API,也就是controller。弹出代码的第一行就是我们的API,按回车。再敲一下左括号,可以看到两个参数提示信息,第一个填入True,第二个随意填写字符串,比如说start from Python,回车。再添加另一个函数def on stop_click,同样controller.control_rbs此时是禁止,所以是false,内容是stop from Python。
接下来关联两个事件,也就是self.btnStart.OnClick=on_start_click、self.btnStop.OnClick=on_stop_click,程序编写完毕,Ctrl+S保存。再切回TSMaster,点击代码的空白处,可以看到代码已经刷新到最新的状态。按F9启动,最后点击Start按钮,当然点击之前首先要连接应用程序,再点击Start,就可以看到Engine节点的报文都出现了,随后点击Stop按钮,Engine节点的报文就停止发送了。打开系统消息,就可以看到我们刚才打印的信息-start from Python和stop from Python。
本章内容我们可以得知,现有的小程序的API是可以轻松被Python程序调用的,这极大的丰富了我们的Python的函数库。