CAPL 脚本模拟整车环境实现CAN收发监控

 

文章概述:

1:CANOE工具及CAPL脚本的基本使用;

2:功能实现;

 

一:CANOE工具及CAPL脚本的基本使用

在嵌入式行业中,基本都会使用CANOE工具去收发报文,那么如何基于CANOE工具实现自动化功能呢? 如你所料可以基于 -CAPL- 脚本实现CANOE的自动化。

在我基于CAPL脚本实现某一功能的过程中,较大一部分时间花在CAPL脚本的基本使用上,直接使用示例都无法运行,经过一番挣扎后终于搞定,那么下面将以我遇到的问题展开分析:

       1.1>加 载 DBC文件:接触过CANOE工具的应该都知道“Simulation Setup”这个界面,在database处右击添加DBC文件;【解析文件】

       1.2>添加节点:插入网络节点【Insert Network node】;

CAPL 脚本模拟整车环境实现CAN收发监控_第1张图片

        由于我在调试过程中选择插入 test CAPL node,导致一系列的问题,所以在此强调一定是“Network node”

       1.3>网络节点属性配置:右击Configuration

CAPL 脚本模拟整车环境实现CAN收发监控_第2张图片

         此处主要关联DBC文件中配置的CAN 节点以及绑定该节点的CAPL脚本文件; 

        1.4>编写-编译-加载运行脚本文件:点击按钮即可开始编写自己的CAPL脚本了,编写完成后需点击编译,直至编译完成后加载至该节点;点击CANOE的运行按钮,该节点的脚本将自动执行;

CAPL 脚本模拟整车环境实现CAN收发监控_第3张图片

 

二:功能实现

功能设计思路如下:

         1:整车环境模型搭建

         2:实时监控XXX节点的发送帧

         3:模拟节点发送CAN帧,观测xxx节点能否正常接收

         4:实时监控总线负载率

         5:界面化编程

2.1:整车环境模型搭建

由于整车环境与实验室环境存在很大的差异,导致实验室环境下测试结论在整车环境下是不可靠的,为避免整车CAN异常,很有必要模拟整车环境验证当前节点CAN是否符合设计预期;

CAPL 脚本模拟整车环境实现CAN收发监控_第4张图片

 

注意:由于以上各节点绑定DBC中的节点,模型会自动按照DBC中配置发送相应帧,如果涉及该帧的相关功能验证,建议点击按钮disable CAN 帧;

 

2.2:实时监控XXX节点的发送帧

如果想监控xxx节点,首先新增测试节点,编写相应CAPL脚本自动接收总线上CAN数据,并做Checksum,Rollingcounter,Timeout校验,观测整车环境下有无丢帧等异常情况;CAPL编程:建议直接参考手册,很完善的资料

On message *
{
Switch(this.id)
{
Case 0x123:
{
Timeout校验;
Checksum校验;
Rollingcounter校验;
}break;
Case 0x124:
{
Timeout校验;
Checksum校验;
Rollingcounter校验;

}break;
Default :break;
}
}

具体Checksum,Rollingcounter,Timeout校验的策略很多,此处便不多加赘述;

 

2.3 模拟节点发送CAN帧,观测xxx节点能否正常接收

按照帧周期触发定时器向总线推送该数据,如果此帧属于关键帧,那么需按照Checksum及RollCnt策略实时更新数据,观测在整车环境能否正常接收报文;

setTimer(timer_xxx,xxx.GenMsgCycleTime):按照DBC配置周期设置定时器;

On timer timer_xxx

{

Xxx.y1= random(100);

Xxx.y2= random(100);

Xxx.rollingcounter = RollCnt;

Xxx.Checksum = Checksum;

Output(Xxx);

setTimer(timer_xxx,xxx.GenMsgCycleTime);

}

 

2.4:实时监控总线负载率

直接调用相应接口函数即可:

Busload = canGetBusLoad( channel);

 

2.5:界面化编程

2.5.1:搭建视图层:Panel Designer:拖拉控件

 

CAPL 脚本模拟整车环境实现CAN收发监控_第5张图片

 

2.5.2:视图层与database绑定

每个控件都需要右击绑定属性:基本是attach signal /attach environment ;

Attach signal :将该控件绑定总线上的该信号,该控件实时反馈总线上该信号的数值,capl脚本中不需要额外的配置;

Attach environment :将该控件绑定一个环境变量,在capl脚本中就可基于此环境变量进行相应的动作、事件【putvalue,getValue】;那么问题来了,这个环境变量如何配置?

具体配置见下图,需在DBC文件中新增该环境变量,并设置类型,权限,单位,table等值;注意:此环境变量不必与DBC中的信号进行关联;

CAPL 脚本模拟整车环境实现CAN收发监控_第6张图片

 

2.5.3:数值的更新、获取

由上推断:控件绑定了环境变量,但是环境变量却没有与DBC中的信号进行关联,那么如何需要获取、更新该数值呢?

在CAPL脚本视图中控件数值变更会触发一个事件,再基于getValue接口获取视图中的数值;

On envvar 环境变量

{

   Zzz = getvalue(环境变量);

Putvalue(环境变量,3);

}

 

你可能感兴趣的:(脚本工具)