前一篇文章已经对CANOE如何模拟主节点和从节点进行LIN通信做了简单的记录,修改主节点发送的指令需要修改LIN ISC模块里的Frames帧对应的signal。这样改起来比较麻烦且不直观,幸好CANOE提供了Panel designer这样的工具,我们可以利用它设计自己的上位机控制面板,通过面板不同的操作修改对应的系统变量,再通过CAPL脚本将环境变量赋值给LIN帧对应的signal,从而实现面板控制LIN帧中信号值。
本文简单记录实现创建CANOE面板控制主副驾座椅的通风加热功能。
一、创建系统变量
要实现panel面板的控件和LIN帧信号值进行绑定,需要用到系统变量。创建系统变量过程如下图所示:
其中NameSpace是命名空间,后续创建的系统变量都归属于该命名空间下。比如我创建了一个SeatType系统变量用来记录当前面板控制的是主驾还是副驾。如下图所示:
SeatType为int数据类型,最大值为1,关联了一个Value Table,点击红线圈的按钮可以看到SeatTypeList如下所示,可以在下图左边列表通过右键单击New创建新的Value Table:
为了控制通风加热我又创建了如下的系统变量:
其中FanOn用来控制风扇开关,关联的值为0和1;FanLevel用来控制风扇档位分别为高中低三档;加热类似。
二、设计Panel界面
点击菜单栏的Tools,选择Panel Designer,进入面板设计界面:
(1)首先我们添加一个组合框控件用来选择需要控制的座椅(主/副驾),在1红线圈的位置可以进行Toolbox和组件属性进行切换显示。需要注意的是SeatType这个控件需要关联到SeatType系统变量,在右边的属性Symbol中Filter选择Variable然后Symbol选择前面创建的SeatType系统变量。如下图2,3所示。
(2) 分别添加两个Combox组件用来选择通风和加热档位,并且分别绑定FanLevel和HeatLevel系统变量。
(3)分别添加两个Switch /Indicator开关控件用来控制通风和加热的开启和加热,并且分别关联FanOn和HeatOn系统变量。
开关关联的图片可以替换为自己制作的,图片一定要按下图的格式进行制作,每个图片由三个图标组成,第一图标是面板显示时显示的图片,第二和第三个是开关来回切换时显示的图片。
(4)保存设计好的面板为xvp文件。
三、CAPL脚本编写
经过上两步已经完成了面板的设计以及面板控件和系统变量的绑定,但是系统变量值的变化并没有关联到LIN帧信号变化。这部分工作需要在CAPL脚本里完成。CAPL语法就不多赘述了。
首先双击上图中红线圈的Master模拟节点,打开下图的CAPL编辑界面:
/*@!Encoding:936*/
includes
{}variables
{int frame_cnt = 0;
}//通风开关状态发生变化
on sysvar sysvar::SeatEcuCtrl::FanOn
{if(@this) {write("风扇开关ON"); if(@sysvar::SeatEcuCtrl::SeatType == 0) {//通风档位系统变量赋值给IBCM_MSG帧的DriverSeatVentilationControl_Request信号$IBCM_MSG::DriverSeatVentilationControl_Request = @sysvar::SeatEcuCtrl::FanLevel + 0x01;}else {$IBCM_MSG::PassengerSeatVentilationControl_Request = @sysvar::SeatEcuCtrl::FanLevel + 0x01;}}else {write("风扇开关OFF"); if(@sysvar::SeatEcuCtrl::SeatType == 0) {//通风档位系统变量赋值给IBCM_MSG帧的DriverSeatVentilationControl_Request信号$IBCM_MSG::DriverSeatVentilationControl_Request = 0x07;}else {$IBCM_MSG::PassengerSeatVentilationControl_Request = 0x07;}}
}//收到从节点反馈帧DR_Pneumatic_FB_MSG
on linFrame DR_Pneumatic_FB_MSG {frame_cnt++; write("frame cnt = %d", frame_cnt);
}
上诉代码中当FanOn系统变量发生改变时会触发on sysvar sysvar::SeatEcuCtrl::FanOn函数的调用,也就是当面板的风扇开关按钮点击的时候其关联的FanOn系统变量就会发生改变并触发该函数的调用,函数里面主要实现当ON的时候将风扇档位赋值给相应的帧信号,当为OFF的时候帧信号赋值为0x7。同时上诉代码还实现了监听从机节点反馈帧并进行计数的功能。
选择通风档位,点击风扇切换图标按钮,对应的LIN信号发生变化如下图所示:
至此通过CANOE面板来控制LIN信号的功能基本实现,特此记录下。