【Simulink建模】电源档位模型搭建
本文使用Matlab R2020b Simulink从零开始构建电源档位模型。
1. 需求分析
电源档位需求规范如下:
当ACC_SW=0,IG1_SW=0时,电源档位KeyState为KEY_OFF档(KeyState=0)。
当ACC_SW=1,IG1_SW=0时,电源档位KeyState为KEY_ACC档(KeyState=1)。
当ACC_SW=1,IG1_SW=1时,电源档位KeyState为KEY_ON档(KeyState=2)。
当ACC_SW=0,IG1_SW=1时,电源档位KeyState为KEY_START档(KeyState=3)。
ACC_SW,IG1_SW为硬线输入,接口为Get_bool_ACC_SW(),Get_bool_IG1_SW()。
KeyState为电源档位状态报文输出,接口为Set_uint8_KeyState()。
KEY_OFF、KEY_ACC、KEY_ON、KEY_START为软件中定义的常量。
2. 模型搭建
2.1 打开Matlab,调整Matlab工作路径至模型存放路径
“注意”:工作路径避免存在中文路径,这里仅做演示。
3.1 打开Simulink,新建空白模型
3.2 保存模型,并命名为KeyState
3.3 修改模型配置
修改模型配置,适配代码生成;
参考:Simulink代码生成常用配置项及脚本修改
运行cfg_Simulink.m,一键修改Model Configuration;
3.4 使用Library Browser库添加Stateflow-Chart,命名为KeyStateChk
也可以双击模型空白地方,输入chart在下拉框中选择Chart,添加Stateflow-Chart。
3.5 修改Chart语言为C语言
双击新建的Chart,在Chart根界面中右键,选择Properties…,在新的界面中中Action Language选择为C。
3.6 根据需求绘制模型
KeyState默认值为KEY_OFF,当逻辑满足时执行不同功能;
3.7 修改数据类型
单击MODELING->Symbols Pane,调出Symbols窗口,在该窗口修改各数据的类型及默认值;
ACC_SW、IG1_SW:输入,boolean;
KeyState:输出,uint8
KEY_OFF:常量,uint8,0
KEY_ACC:常量,uint8,1
KEY_ON:常量,uint8,2
KEY_START:常量,uint8,3
3.8 添加输入输出Port
Simulink空白处双击,输入in1,选择In1添加输入Port;
Simulink空白处双击,输入Out1,选择Out1添加输出Port;
将输入输出Port与Char的输入输出连接;(使用In1与Out1连接时会自动更名为Chart输入输出名称)
3.9 建立数据字典
点击MODELING->Model Explorer,在Model Explorer界面中新建数据字典,并命名为KeyState;
使用Excel创建输入输出信号,并生成数据字典;
参考:Simulink 从Excel自动生成数据字典
运行CreateSldd.m,一键修改生成数据字典;
3.10 模型与数据字典关联
在模型空白处右键,选择Model Properties;
在Model Properties中,External Data业中选择数据字典并关联;
在模型迁移线上添加信号;
选中已添加信号的迁移线,右键选择Properties;
在弹出Signal Properties界面中,勾选Signal name must resolve to Simulink signal object;
修改完成如下图
3.11 生成代码
修改完成后,使用快捷键Ctrl+B生成代码;
在工作路径下生成了KeyState_ert_rtw文件夹,文件夹内时生成的代码,主要是五个文件:KeyState.c、KeyState.h、KeyState_private.h、KeyState_types.h、rtwtypes.h;
3. 代码集成
由于输入输出信号为外部信号,需要声明输入输出接口函数;
在模型配置中配置了Custom Code,包含signal_api.h头文件;
需要在signal_api.h头文件中声明模型中使用的Get_bool_ACC_SW()、Get_bool_IG1_SW()、Set_uint8_KeyState(uint8 data)函数,随后集成代码就可以编译通过;