新功能发布—TSMaster的MATLAB自动化控制模块

2023-11-22 10:40

本文主要是介绍新功能发布—TSMaster的MATLAB自动化控制模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

今天我们继续来介绍TSMaster新功能—MATLAB自动化控制模块。该模块提供了大量用于MBD开发的小工具。还包含了这个可以将c代码自动转化为stateflow代码的程序。

一、MATLAB的自动化对象

> 首先点击连接,连接到matlab的自动化对象,需要启动matlab的主程序,一旦连上之后,matlab程序就可以实时被TSMaster软件来控制。那么我们点击之后可以看到连接按钮变灰,然后断开连接按钮变成高亮,那么这个时候就可以通过我们的软件来控制matlab程序了。

> 然后我们可以点击这个c代码转stateflow,点击解析,会实现一个逻辑树,然后再点击生成代码。这个时候我们就可以看到,我们的示例代码就可以自动转换成stateflow代码,该功能可以迅速的将已有的C代码的逻辑一键转换成完全等价的stateflow的逻辑,从而提高MBD的开发效率。那么转化完成的效果就是这样,双击chart1展开之后就可以看到跟刚才的c脚本完全对应的stateflow的逻辑。

 

二、SIL和HIL环境的自动构建 

只要我们拥有可以生成代码的Simulink的仿真模型,就可以通过此模块来实现该模型在TSMaster环境中的实时运行。从而让我们的算法可以在软件设计的前期就可以参与到HIL和SIL的实时仿真中来,同时有了小程序的加持,我们还可以对算法进行细致入微的调试、监控,甚至将二进制文件发布给其他的用户,进行联合仿真,那么具体如何实现呢?

> 我们还是从0开始,举一个例子来说明:首先我们切换到第一个页面,SIL and HIL页面,可以看到这个页面有4个步骤,按照这4个步骤顺序执行,就可以迅速搭建一个HIL环境。那么第一步是算法模型的配置,他给了两个输入,一个是我们的小程序的名称,第二个是Simulink模型文件。对于第一个输入,只要给我们的新构建的小程序起个名字就可以了,比如说这个默认的Model1,我们输入之后点击最右边的绿色的勾,它的作用就是判断Model1是否存在。如果不存在就创建一个,如果存在就使用这个Model1。

> 这样可以将我们新的算法集成到我们现有的小程序中,在这里就需要填入现有的小程序的模型名称,也就是从中可以选择我们的小程序名称。那么这一步成功之后,就来到了Simulink模型文件的设置过程。在此我们需要找一个Simulink的实例程序进行讲解,我们首先打开Simulink,在Simulink的启动页会有很多的实例。我们找一个比如展开这个stateflow,里面有空白图、简单图分层图等等。我们选择这个分层图,就打开了一个名为untitled的模型,我们看到这个模型,包含了一个run和一个cooldown。这两个大的状态run了30秒之后,会冷却 5秒,然后5秒之后继续run,从此循环往复,而在这个run的过程中,是每隔1秒就让输出在10和1之间切换,这就是当前stateflow的简单逻辑。

 

> 我们按esc返回到顶层,可以看到这个模型只有一个输出,我们加一个示波器来看看波形。按F5运行,当然这个运行需要将当前的工作目录切换掉,我们可以选择随便一个目录比如说新建个文件夹,然后我们回到刚才的模型按F5运行成功,那么打开示波器我们可以看到输出和我们之前的推断是完全吻合的。也就是运行了30秒之后休息5秒,然后继续运行。我们将这个模型另存为simple,接下来将这个示波器删除,并且添加一个out接口,将这个模型配置成可以代码生成的模型,随后我们就要配置一下代码生成的细节。

 

> 我们进入模型的设置,点击代码生成,首先要将这个grt改为ert.tlc。因为目标的环境是嵌入式环境,同时勾选仅生成代码,然后展开代码生成,进入到模板中,将“生成示例主程序”的勾去掉,这样就不会自动生成main函数。因为这个main函数的文件往往是不会用的。至此配置完成。我们点击保存并且关闭这个模型。

 

三、MATLAB控制模块 

> 接下来就回到matlab控制模块中,选择Simulink模型文件,点击绿色的箭头按钮,选中我们刚才的simple.slx,那么可以看到前两步过了之后步骤1就算执行完成。接下来就到了cache文件夹和codegen文件夹的设定,那么留空就表示生成到默认的位置。我们可以将这两个位置改掉,还是点击绿色的按钮,然后可以选择我们的cache文件夹,我们可以新建一个cache,并且选择这个文件夹,那么cache文件夹就已经设置成功。接下来就是codegen,还是一样,我们可以在cache旁边建一个codegen,点击选择,那么这两个文件夹也就设置完毕。

> 然后就到了代码生成的环节。我们只要点击启动Simulink代码生成,等待代码生成完毕就可以了。那么生成的代码就会存放到刚才设定的codegen这个文件夹中。第一次生成会耗费一点时间,我们需要耐心的等待。那么Simulink的执行过程是同步的,而且比较慢,所以TSMaster可能会报警。现在我们可以看到代码生成已经完成。

 

> 那么接下去就是自动复制已生成的代码到我们的小程序的代码库里面,点击之后可以显示已copy6个文件,那么接下去第二步就已经完成。也就是代码生成的过程已经成功实现,再往下就是代码集成。代码集成目的就是将算法给调用起来,我们点击编辑小程序的源码按钮,打开Model1这个小程序,我们首先看一下属性,然后点击代码库的路径,可以看到simple.c和.h文件以及其他的一些用到的头文件。打开这两个文件,首先我们看一下simple.h文件,那么这个文件是一个接口文件,可以看到这里面有三个函数,初始化step和terminate函数,我们需要分别将这三个函数的调用拷贝到Model1小程序里面。首先就是要用这个simple.h头文件。

 

> 我们回到小程序,点击全局定义#include,"simple.h"。那么接下来就是COPY。我们双击这个simple初始化,然后到小程序的初始化事件中,粘贴然后再copy  step到我们的小程序的step函数中,粘贴然后就是terminate,回到我们小程序的停止事件,同样粘贴,这样就实现了函数调用。那么需要注意的就是step函数的周期了,默认周期是5毫秒,但模型中肯定不是。我们首先还是打开这个simple.slx,然后我们到模型的属性看一下这个模型的相关的求解器的属性。它是定步长,并且步长是0.1秒,那么0.1秒在TSMaster里面就是100毫秒,双击step函数,将周期改为100,那么接下来我们需要观测一下out1这个信号。

 

> 我们可以直接在变量点右键,添加变量,输入我们这个out1,那么就新建了一个out1的变量,然后我们就需要在代码里找到这个变量,那么可以看到这个extern,这里写的是outports,那就是simple y这个变量,它有一个成员叫out1,就是我们需要用到的变量,我们可以在这里写下out1.set,把刚才这个out1拷贝过来,这样就实现了变量的赋值。那么小程序就算编写完毕。

 

四、执行HIL和SIL的仿真 

> 在此我们可以直接点击运行仿真,那么我们的算法模型其实就已经实时的在运行,这个时候如果需要观测信号,首先要启动我们的TSMaster的仿真,然后我们可以打开一个观测窗口,比如说图形,打开之后我们可以点右键添加系统变量,通过内部变量,找到model 1的out 1这个变量,然后我们可以修改他的范围,比如说改成1—15  -1—15,那么就可以看到这个图形的显示跟我们刚才看到的Simulink示波器画面是完全一样的。

> 这个信号是可以设成竖线显示,这样就更符合这个信号代表的逻辑含义,那么这个out1的信号是实时刷新的,这就意味着我们可以通过总线接口将此算法模型接入到整车网络,可以与实际的控制器进行互动,那么以上就是matlab控制模块进行HIL的简单的方法。

 

 

这篇关于新功能发布—TSMaster的MATLAB自动化控制模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/409563

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.