CarMaker入门第五课-CarMaker for Simulink模块
本节课将介绍如何基于CarMaker用于Simulink联合仿真开发算法与验证用到的模块。
CarMaker入门课程传送门【CarMaker入门第四课-CarMaker与Simulink联合仿真】
CarSim入门课程传送门【CarSim仿真快速入门(十三)—驾驶员模型(2)】
CarSim从入门到精通视频传送门【CarSim从入门到精通视频】
CarMaker for Simulink块集可以在Simulink库浏览器中的块集和工具箱下找到。可以双击CarMaker for Simulink或简单地输入
>> CarMaker4SL
在Matlab命令窗口中:
CarMaker子系统中的CarMaker for Simulink块直接送入并运行,固定步长为1ms,与模型的其他部分无关。
CarMaker for Simulink块不具有Simulink意义上的连续状态。它们有内部状态变量,但这些状态变量是使用CarMaker内部求解器集成的,与Simulink无关。
CarMaker for Simulink仿真模型由一个子系统组成,该子系统包含一个个区块链。当Simulink执行CarMaker时,CarMaker区块链的所有区块必须按顺序精确执行一次。不允许涉及CarMaker的各个区块的代数循环。
用Simulink块替换现有的CarMaker功能有两种可能。
- 覆盖信号
- 使用特殊参数禁用不需要的CarMaker内部功能 不建议这样做。
- 替换、删除或重新排序CarMaker块
Sync_In和Sync_Out端口是CarMakerfor Simulink的一个重要概念。
- 它们保证了CarMaker块的正确执行顺序。
- 它们让用户准确地选择在什么时候用读CM Dict或写CM Dict块访问CarMaker字典变量。例如,这样就可以读取变量的最新值(而不是上一个周期计算的值),或者在CarMaker内部计算出变量的值后才超载。
在下面,将介绍CarMaker for Simulink库中最重要的元素。
CarMaker GUI块用于将Simulink模型连接到正在运行的CarMaker GUI进程。如果没有检测到正在运行的进程,它将提示用户打开一个新的CarMakerGUI,并手动重新连接未检测到的CarMaker GUI或取消连接尝试。
双击CarMaker GUI块也可以用来切换模型。
例如,在Matlab中已加载多个模型的情况下,激活某个模型。当点击CarMaker GUI中的Start按钮时,激活的模型就是要模拟的模型。还请注意,必须通过GUI以这种方式启动仿真。
读取CM Dict块读取CarMaker字典中的一个变量,并在该块的输出端口上提供它的策值,该变量不需要用模型中的Define CM Dict块来定义,任何现有的字典变量都可以读取。变量不需要用模型中的DefineCM Dict块来定义,任何现有的字典变量都可以被读取。
图 6.2 读取CMDict块参数对话框
在块的参数对话框中输入变量的名称。在模型中,该名称将显示在块的符号内。
当一个不存在的字典变量被定义为读取CM Dict块的参数时,Simulink将在仿真开始时报告以下错误。
变量'abcde'不在字典中。
一个Simulink模型可以在CarMaker字典中定义自己的变量,因为可能会有一些信号要用IPGControl监控或使用直接变量访问。此外,只有在CarMaker字典中定义的信号才能保存为CarMaker仿真结果文件的一部分。
Def CM Dict块定义了CarMaker字典中的变量。
当在Simulink模型中定义一个字典变量时,建议在其名称前加上模型的名称或其他方便的缩写。这使得使用 CarMaker GUI 或 IPGControl 等工具更容易识别字典中的模型变量。
例子: 在名为MyModel的Simulink模型中定义的字典变量xyz应该被命名为MyModel.xyz或MM.xyz。
重要的是不要用已经在其他地方定义的Define CM Dict块来定义一个字典变量。目前在这种情况下不会发出错误信息。
在参数对话框中输入变量的名称。在模型中,该名称将在块的符号中显示。
变量也可以被赋予一个单位。推荐使用这个单位,但也是可选的。IPGControl提供了一个CarMaker中使用的单位列表。指定一个单位可以作为变量的一种文档,并允许IPGControl将其与同一单位的其他字典变量显示在一个轴上。
如果变量的值是严格的单调的,随着时间的推移而增加,则应选择Strictly monotone复选框。同样,这也是像IPGControl这样的工具可以用来正确显示数值的信息。
变量的类型可以根据用户的需求和变量的取值范围来选择。可能的类型有浮点类型和整数类型。当有疑问时,建议使用Double。
对于离散变量(任何整数类型),其值从0开始,并且有一个合理的低上限(例如,一个指示灯要么开要么关),指定变量的离散状态数可能是有意义的。对于指示灯来说,会有两个离散值(0=off,1=on)。同样,这个信息主要是为IPGControl服务的,它以一种特殊的、节省空间的方式显示具有有限状态数的变量。在这个字段中指定一个0的值意味着没有特殊的状态信息。对于Double和Float类型,该字段的值被忽略。
当CarMaker for Simulink已经启动,但在第一次模拟运行之前,CarMaker字典还不知道将在模型中定义任何额外的字典变量。为了使CarMaker for Simulink在启动时知道这些变量,可以在模型目录(src_cm4sl文件夹)中创建一个名为startup.dict的文件,描述变量的属性。
该文件为ASCII格式,可以包含空行、以哈希标签开头的注释行和定义字典变量的行。每个包含变量定义的行都由五列组成,用制表符和空格分隔。
- 第1列:变量的名称
- 第2列:变量的单位。减号(-)表示变量没有单位。单位仅用于显示目的,在IPGControl等工具中。CarMaker for Simulink内部使用SI单位,不会自动转换单位。
- 第3列:变量类型。允许使用以下类型(及其对应的C型)。
double double
float float
ulongunsigned long
longsigned long
ushortunsigned short
shortsigned short
ucharunsigned char
charsigned char
- 第4栏:声明数量。
- 第5栏:特殊属性。同样,这些只是为了显示的目的。如果变量是单调且递增的,用户必须指定 "M",否则为"-"。
例子: