新功能发布文案,新功能发布策划
序
今天继续介绍TSMaster的新功能——MATLAB自动控制模块。这个模块为MBD开发提供了大量的小工具。还包括这个可以自动将C代码转换成stateflow代码的程序。
一、MATLAB的自动化对象
首先,点击Connect连接到matlab的automation对象。你需要启动matlab的主程序。一旦连接,matlab程序可以由TSMaster软件实时控制。然后,点击后,我们可以看到连接按钮变成灰色,然后断开按钮变亮。这时候就可以通过我们的软件来控制matlab程序了。
然后我们可以点击这个C代码转到stateflow,点击parse,就会实现一个逻辑树,然后点击生成代码。此时,我们可以看到我们的示例代码可以自动转换为stateflow代码。该功能可以一键快速将现有C代码的逻辑转换成完全等价的stateflow逻辑,从而提高MBD的开发效率。那么转换的效果是这样的。双击chart1展开后,可以看到与刚才C脚本完全对应的stateflow的逻辑。
二。自动构建银和HIL环境
只要我们有一个可以生成代码的Simulink仿真模型,就可以通过这个模块在TSMaster环境下实现这个模型的实时运行。这样我们的算法就可以在软件设计的早期参与HIL和SIL的实时仿真。同时,在小程序的加持下,我们可以对算法进行详细的调试和监控,甚至可以发布二进制文件给其他用户进行联合仿真。那么如何实现呢?
让我们从0开始。我们举个例子来说明:首先我们切换到第一页,SIL和HIL页,我们可以看到这一页有四个步骤。如果你遵循这四个步骤,你可以快速建立一个HIL环境。那么第一步就是算法模型的配置。他给了两个输入,一个是我们小程序的名字,第二个是Simulink模型文件。对于第一个输入,只需给我们新构建的applet命名,例如,这个默认的Model1。我们输入后,点击最右边的绿色勾号,它的作用是确定Model1是否存在。如果不存在,则创建一个,如果存在,则使用此模型1。
这样,我们的新算法可以集成到我们现有的小程序中。在这里,我们需要填写现有小程序的型号名称,即我们可以从中选择我们的小程序名称。然后,这一步成功后,Simulink模型文件的设置过程就来了。这里需要找一个Simulink的例子程序来说明。首先我们打开Simulink,在Simulink的启动页面会有很多例子。我们找一个,比如展开这个stateflow,里面有空白图,简单图,层次图等等。当我们选择这个层次图时,我们打开一个名为untitled的模型。我们看到这个模型,它包含运行和冷却。这两个大状态运行30秒后,会冷却5秒,5秒后继续运行,如此循环往复。在这个运行的过程中,每1秒钟输出在10和1之间切换,这就是当前stateflow的简单逻辑。
我们按esc返回顶层,可以看到这个模型只有一个输出。我们加个示波器看看波形。按F5运行。当然,这个操作需要切换当前工作目录。我们可以选择任何目录,例如,创建一个新的文件夹。然后我们将返回到上一个模型,并按F5键成功运行。然后我们打开示波器,可以看到输出和我们之前的推断完全一致。也就是跑完30秒,休息5秒,然后继续跑。我们先把这个模型存成简单的,然后删除这个示波器,增加一个out接口,把这个模型配置成可以生成代码的模型。然后我们将配置代码生成的细节。
让我们进入模型的设置,并单击code generation。首先我们要把这个grt改成ert.tlc因为目标环境是嵌入式环境,同时勾选只生成代码,然后展开代码生成,进入模板,去掉“生成示例主程序”复选框,这样主函数就不会自动生成了。因为这个主函数的文件往往是没用的。现在配置完成了。我们单击保存并关闭该模型。
三、MATLAB控制模块
接下来回到matlab控制模块,选择Simulink模型文件,点击绿色箭头按钮,选择我们刚才的simple.slx。然后,你可以看到,前两步过去后,步骤1就完成了。接下来,是时候设置缓存文件夹和codegen文件夹了,所以留空意味着生成到默认位置。我们可以更改这两个位置,或者单击绿色按钮,然后我们可以选择我们的缓存文件夹,我们可以创建一个新的缓存,并选择此文件夹,然后缓存文件夹已设置成功。接下来是codegen,同样,我们可以在cache旁边构建一个codegen,点击Select,然后两个文件夹就设置好了。
然后是代码生成的时间。我们只需点击开始Simulink代码生成,然后等待代码生成完成。然后生成的代码会保存在刚才设置的文件夹codegen中。第一代需要一点时间,我们需要耐心等待。那么Simulink的执行过程是同步且缓慢的,所以TSMaster可能会报警。现在我们可以看到代码生成已经完成。
然后下一步是将生成的代码自动复制到我们小程序的代码库中。点击后,可以显示6个已复制的文件。那么第二步已经完成了。也就是代码生成的过程已经成功实现,然后就是代码集成。代码集成的目的是调用算法。我们单击编辑applet源代码按钮打开applet Model1。首先,我们查看属性,然后单击代码库的路径。可以看到简单的. c和。h文件和其他头文件。打开这两个文件。首先,我们来看看simple.h文件。那么这个文件就是一个接口文件。可以看到里面有三个函数,分别是初始化step和terminate函数。我们需要将这三个函数的调用分别复制到Model1小程序中。首先要做的是使用这个简单的. h头文件。
让我们回到applet,点击全局定义#include, simple.h 。然后下一步就是复制。我们双击这个简单的初始化,然后到小程序的初始化事件,粘贴然后复制step到我们小程序的step函数中,粘贴然后终止,返回到我们小程序的stop事件,同样粘贴,这样就实现了函数调用。那么记录阶跃函数的周期是很重要的。默认周期为5ms,但肯定不在模型中。首先,我们打开这个simple.slx然后,我们去模型的属性,看一下这个模型的相关求解器的属性。它是固定步长的,步长是0.1秒,所以在TSMaster中0.1秒就是100毫秒。双击阶跃函数将周期更改为100。然后我们需要观察信号out1。
我们可以直接右击变量,添加一个变量,输入我们的out1,然后我们会创建一个新的out1变量,然后我们需要在代码中找到这个变量,这样我们就可以看到这个extern,就是简单y的变量,它有一个成员名为out1,这是我们需要使用的变量。我们可以在这里写出out1.set,复制刚才的out1,这样就实现了。然后小程序就写好了。
第四,对HIL和SIL进行了仿真。
在这里,我们可以直接点击运行模拟,那么我们的算法模型实际上是在实时运行。这时候如果需要观察信号,就要先启动我们TSMaster的模拟,然后才能打开一个观察窗口,比如图形。打开后,我们可以右键添加系统变量,通过内部变量找到模型1的变量out 1,然后就可以修改它的作用域了。比如改成1-15-1-15,那么你可以看到这个曲线图的显示和我们刚才看到的Simulink示波器的显示是一模一样的。
这个信号可以显示为竖线,更符合这个信号所代表的逻辑意义。然后这个out1信号被实时刷新,也就是说我们可以通过总线接口把这个算法模型连接到整车网络上,和实际的控制器进行交互。所以以上是通过matlab控制模块实现HIL的简单方法。
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。