CANoe工程通过控件改变报文信号值的两种方法
1、目的
在CANoe上制作面板控件,用于改变0x311报文的发送内容(车速值大小);该报文是ABS这个网络节点的发送报文,报文中的信号定义如下:
2、操作方法
2.1、直接将面板控件关联上DBC中的报文信号
1、创建控件,并将控件关联上要操作的报文信号。
在控件属性的”Symbol Fliter”选择为”Signal”;在”Symbol”中选择具体要关联的报文信号(例子中即关联上0x311这个报文中表示车速值的信号;注意CANoe工程要先关联上DBC文件)。如下:
2、创建节点。
在CANoe工程的”Simulation Setup”界面,右击”Node”,选择”Insert Network Node”。如下:
3、将节点关联上DBC文件中的节点及添加dll文件。
右击我们前面创建的节点,选择”Configuration”,在”Common”界面下的”Network node”中设置其对应的是DBC文件中的哪个节点(例子中我们选择的是DBC中的ABS节点,注意CANoe工程中要先关联上DBC文件)。
在”Components”中添加来自C:\Program Files\Vector CANoe 9.0\Exec32的CANoeILNLVector.dll(该路径是以Win7为例)
经过前面三个步骤,当我们运行工程时;ABS这个节点(我们在第3步选择关联的节点)上的发送报文就会自动按照其在DBC上定义的进行发送了;不需像接下来要介绍的那种方法再去通过CAPL编程去进行报文的发送操作。且其发送类型(周期/事件)、周期发送的时间等都完全由DBC文件中定义,即我们只需配置好DBC文件即可。此时,当我们通过控件改变关联上的报文信号时,则对应发送出来的报文也会跟着对应改变。
另外,若我们想要发送的报文处于多个DBC的节点中,则只需在”Simulation Setup”界面多创建几个网络节点(第2步的操作);再添加dll文件和对应关联上不同的DBC节点即可(第3步的操作)。
2.2、利用环境变量和CAPL编程完成
通过关联环境变量,当操作面板时对应改变该环境变量;再在CAPL编程中获取该环境变量值,赋给对应报文信号;再将报文发送出去。
1、在DBC文件上创建要用于关联的环境变量。
通过”CANdb++ Editor”软件打开DBC文件,右击”Environment variables”进行环境变量的新建;对应输入环境变量名和数据类型;设置其范围、初始值。如下:
2、创建控件,并将控件关联上要操作的环境变量。
在控件属性的”Symbol Fliter”选择为” Environment variable”;在”Symbol”中选择具体要关联的环境变量。如下:
3、创建节点
在CANoe工程的”Simulation Setup”界面,右击”Node”,选择”Insert Network Node”。如下:
4、在节点上新建CAPL工程
在上一步新建的节点处,点击铅笔形状的图标;输入CAPL程序名字,保存为.can后缀文件。如下:
5、进行CAPL编程,进行环境变量的获取及报文发送工作
在上一步打开的CAPL编程界面,通过”@”调出我们第一步在DBC文件中定义的环境变量;将该环境变量的值赋给要对应的报文变量;并通过”output()”函数将该报文发送出去。对于报文的发送周期即是我们调用该函数的时间,一般是在CAPL程序中定义一个定时器事件来操作的。代码如下:
variables
{
msTimer Timer1;
}
on start
{
setTimer(Timer1,20);
}
on timer Timer1 /*定义定时器事件,进行报文发送*/
{
setTimer(Timer1,20);
TxMsg_ABS1_ESP1();
}
void TxMsg_ABS1_ESP1(void) /*车速信息发送,0x311,20ms周期*/
{
message ABS1_ESP1 msg;
msg.ABS_ESP_VehicleSpeedVSOSig = (@VehicleSpdData)/0.05625;
msg.ABS_ESP_VehSOSigValidData = @VehicleSignelValid;
output(msg);
}
3、总结
当我们需要制作面板控件进行交互时(通过操作面板去改变报文的信号值);可以直接关联上要操作的报文信号值,但注意需在创建的节点处添加上"CANoeILNLVector.dll"这个文件;也可以通过创建环境变量,并通过CAPL编程去操作实现。但比较这两种方法,前者会方便得多,避免了在DBC上对环境变量的创建及CAPL的编程。