CANoe:CAN报文发送前的字节预处理(applILTxPending函数)


一、applILTxPending函数

1、applILTxPending与output(msg) 相比较的优势是什么?
applILTxPending不用定义多条报文及其他报文参数,更适合周期发送数据库的报文,可以自由选择需要发送的报文,周期、发送类型;
1、applILTxPending与IG节点 相比较的优势是什么?
applILTxPending可以动态更改字节的内容,IG节点不行,且无法做逻辑处理;

1)applILTxPending函数的作用:对指定CANID的报文进行字节的预处理
2)applILTxPending函数的说明:可以对每一帧报文的特定字节做数据操作处理
(applILTxPending函数通常用于计算滚动的Checksum和Counter上,对字节的处理非常方便)
3)applILTxPending函数的参数解析:
在这里插入图片描述

二、applILTxPending函数用法

1)操作流程
在这里插入图片描述

2)CAPL脚本

variables
{
	 byte cntr; //定义变量
}

dword applILTxPending (long aId, dword aDlc, byte data[])
{
//每发出一帧报文前,就会调用一次applILTxPending函数;
    if(aId == 100)//当CANid = 100的时候;
    {
	    data[0] = data[0] & 0xf0  | cntr; //将cntr值放到低4位,cntr不超过15;
	    Chks_Chkscal(data,cntr); //调用一个函数计算Chks,并给其余字节赋值;
	    if(cntr++ >=15)     //发送每一帧cntr都会加1;
	    {
	     cntr = 0; 
	    }
	    
	 if(aId == 200)//当CANid = 200的时候;
    {
	    data[0] = data[0] & 0xf0  | cntr; //将cntr值放到低4位,cntr不超过15;
	    Chks_Chksca2(data,cntr); //调用一个函数计算Chks,并给其余字节赋值;
	    if(cntr++ >=15)     //发送每一帧cntr都会加1;
	    {
	     cntr = 0; 
	    }
//执行之后就开始发出报文;	    
    }
    
void Chks_Chkscal(byte data[],byte cntr)
 {
  //直接给字节赋值或者添加算法;
    data[1] = data[0] + 1;
    data[2] = 0x1;
    data[3] = 0x2;
    data[4] = 0x2;
    data[5] = 0x3;
    data[6] = 0x4;
    data[7] = 0x5;
 }
void Chks_Chksca2(byte data[],byte cntr)
 {
  //直接给字节赋值或者添加算法;
    data[1] = data[0] + 2;
    data[2] = 0x1;
    data[3] = 0x2;
    data[4] = 0x2;
    data[5] = 0x3;
    data[6] = 0x4;
    data[7] = 0x5;
 }

综上,就是简单的applILTxPending的用法;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自动驾驶simulation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值