capl:事件型语言
定时器代码
数据类型
capl运算符(一)
capl运算符(二)
逻辑非:两个条件同时成立则为真(1),否则为假(0).
逻辑与:只有一个条件成立则为真。
逻辑或: 后面的条件成立,为1,结果值则为0.
capl运算符(三)
补码表示法
注意:相当于对0进行减法,-1-1-8=-10,其中1为2的0次方,8为2的3次方。
capl中的事件
on message事件
必须有dbc数据库,才能进行this.信号名
on signal和on signal_update事件
练习1:发送id为0x400-0x7FF的报文
/*@!Encoding:936*/
includes
{
}variables
{message 0x123 myMessage; // 声明一个message类型的变量,用于发送CAN报文
}// 定义一个函数用于发送指定ID范围的报文
void sendMessagesInRange(dword startId, dword endId, byte byte0, byte byte1, byte byte2, byte byte3, byte byte4, byte byte5, byte byte6, byte byte7)
{dword id;for (id = startId; id <= endId; id++){myMessage.id = id;myMessage.dlc = 8;myMessage.byte(0) = byte0;myMessage.byte(1) = byte1;myMessage.byte(2) = byte2;myMessage.byte(3) = byte3;myMessage.byte(4) = byte4;myMessage.byte(5) = byte5;myMessage.byte(6) = byte6;myMessage.byte(7) = byte7;output(myMessage);}
}on start
{// 这里可以放置启动时需要执行的代码
}on key 'a' // 当大写字母A被按下时
{sendMessagesInRange(0x00, 0x437, 0x03, 0x06, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00);
}on key 'b' // 当大写字母B被按下时
{sendMessagesInRange(0x437, 0x4FF, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00);
}on key 'c' // 当大写字母C被按下时
{sendMessagesInRange(0x600, 0x7FF, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00);
}
on key 'd' // 当大写字母C被按下时
{sendMessagesInRange(0x600, 0x6FF, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00);
}