高效图形化编程与建模平台-Glink
Glink是Ganzlab环境中专门用于MBD的应用程序:
Glink是一个基于模型的图形化编程环境,可以通过拖、拉、拽的方式进行快速建模搭建。Glink还支持混合系统(连续和离散模型)建模和仿真控制的工具,并包含多种求解器类型,如LSodar、RK45、隐式RK45、ODE23、BDF-Newton等。我们目前在Glink环境中已经继承了约300个基础功能模块及100个工具箱模块用以搭建控制系统。Glink基础工具箱包括连续使用系统、非线性系统、信号处理、注释块等。
案例展示
下面以一个电动副驾驶侧车窗控制逻辑为例,以Ganzlab/Glink作为MBD建模和代码生成工具进行AUTOSAR的应用层软件组件开发流程进行演示。
其中使用到的硬件包括:S32K144开发板,J-link代码下载器,UsbCan分析仪,如下图所示:
1. 首先在Autosar Authoring Tool(AAT)软件中,进行SWC框架创建,输出对应的PWL.arxml文件。根据功能需求文档描述,确认SWC的接口:
2.在AAT软件中输出对应的arxml文件:PWL.arxml
3.在Ganzlab环境中,使用脚本导入PWL.arxml文件:
执行上述脚本后,会自动打开Glink建模环境,并生成对应的SWC模型框架
自动生成的SWC模型框架
此时模型的子系统内部仍为空:
自动生成的SWC子系统内部
4.根据功能需要,进行内部逻辑建模:
搭建好的SWC模型内部
该模型主要包含两个子系统逻辑判断(Logic)和仲裁(Arbitrator):
其中逻辑模块包含三个状态机,根据对应的输入信号进行逻辑判断,分别输出一个信号给到后面的仲裁模块:
逻辑判断子系统(Logic)
Glink专门为状态机的仿真开发了状态机编辑器模块(GFSM)以及对应的状态机代码生成功能:
以WinLiftEnCtrl状态机为例:
初始状态默认进入Disable状态,并使升窗能信号WinLiftEnSt为DISENABLE;
当上电信号K15_IG为K15_IG_ON时,进入enable状态,并使WinLiftEnSt为ENABLE;
当上电信号K15_IG为K15_IG_OFF时,进入CHECKTIME状态,接收到PEPS_RKEST信号为RKE_lock时或计时器变量超过动作延时时间时,转移到Disalbe状态,并使WinLiftEnSt为DISENABLE;
具体状态机如下图所示
WinLiftEnCtrl
·其中K15_IG(上电信号),PEPS_RKEST(遥控状态)和WinEnDelayTimPrm(车窗动作延迟信号)分别为三个输入信号,WinLiftEnSt(升窗使能)作为输出信号。
·DISENALBE,ENALBE,K15_OFF,K15_ON和RKE_lock作为常量。
·WinDelayCut作为内部变量。
对应的该状态机中所用到的datamodel如下图所示:
用同样方式定义另外两个状态机,AutoWinCtrl和FRWinManualCtrl:
AutoWinCtrl状态机模型
FRWinManualCtrl状态机模型
最后一个状态机为仲裁模块,使用真值表的形式进行定义:
Arbitrator状态机
动作真值表
在确认每个模块测试无误后,我们将整体模块打包为超级块形式,并利用AUTOSAR code generator生成应用层文件:
将模型打包为超级块
在工具中选择Autosar Code Geneartion
在弹出的对话框中选择相应的文件输出路径,生成对应的应用层代码文件:
应用层代码文件
下一步,将生成的代码文件放入S32k144的应用层文件夹Appl对应的Source文件夹和Include文件夹中:
S32k144项目文件夹
使用IAR工具将代码编译并上传到S32K144开发板中。
下面通过TSMaster进行输入CAN信号的设置和输出CAN信号的观测。
手动控制车窗情况:
当KI_15_IG==ON,PassWinSws为MANUAL_UP时,副车窗输出升窗动作:PassWin_Up=ACTIVE,BD1_St_PDWinMove=MOVING_UP
当KI_15_IG==ON,PassWinSws为MANUAL_DOWN时,副车窗输出降窗动作:PassWin_Down=ACTIVE,BD1_St_PDWinMove=MOVING_DOWN
遥控控制车窗情况: