消息与信号
消息,数据容器
据标识 输的数据块(最多8字节)用符号描述
信号,实际使用的信息
号长度可能从1位到多字节
要物理单位, 需要转换单位对错误的描述用符号描述
CAPL编程
CAPL是CAN总线访问编程语言(C AN A ccess P rogramming L anguage ) 类C语言
应用于Vector CAN工具节点编程
基于事件建模的语言
总线事件
属性事件
时间事件
应用
(1)节点仿真
(2)网络仿真
(3)仿真控制系统的环境
(4)节点测试
(5)网关
CAPL程序对事件的响应
CAPL程序能够检测事件,并执行和事件相关的程序。检测的事件类型包括:程序开始执行事件程序停止执行事件键盘输入事件CAN消息的接收事件定时器超时事件图形面板输入事件(该项只在CANoe中应用)CAPL程序是基于事件程序的组合
CAPL 事件的基本类型
消息过程
on message123 //对消息123(dec)反应
on message0x123 //对消息123(hex)反应
on message MotorData//对消息MotorData(符号//名字)反应
on message CAN1.123 /*对CAN 通道1收到消息123反应*/
on message* //对所有消息反应
on message100-200 //对100-200间消息反应
键盘过程
on key…a?//按‘a’键反应
on key…?//按空格键反应
on key0x20 //按空格键反应
on key F1 //按F1键反应
on key Ctrl-F12 //按Ctrl + F12键反应
on key PageUP//按PageUp键反应
on key Home //按Home键反应
on key* //按所有键反应
时间过程
时间过程表示法:
on timer myTimer//对myTimer设定的时间到反应
定时器的申明
msTimer myTimer;//将myTimer申明ms为单位的变量
timer myTimer;//将myTimer申明s为单位的变量
定时器的设置
setTimer(myTimer,20);//将定时值设定为20ms,并启动
cancelTimer(myTimer);//停止定时器myTimer
环境变量过程
环境变量过程on envVar对环境变量值的改变产生反应
测量设置中的CAPL节点不会阻止环境变量在数据流图中的传输环境变量过程常用的函数:
getValue()//获取环境变量的值
putValue()//设置环境变量的值
可使用this在过程内部访问环境变量的值
数据类型
无符号整数
byte(1字节) word(2字节) dword(4字节) 有符号整数 int(2字节)
long(4字节) 浮点数 float(8字节) double(8字节)
CAN消息类型
message定时器类型timer(秒为单位)msTimer(毫秒为单位)单个字符char(1字节)消息的声明
消息申明的格式
Message0xA my_msg1;
Message100my_msg2;
Message EngineData my_msg3;
消息数据的索引
my_msg1.byte(0)//数据字节0
my_msg2.word(2)//从第2字节开始的一个字
my_msg3.EngSpeed/*如果使用了符号数据库,可使用信号符号名来索引消息中的信号*/
程序执行顺序
事件过程之间无关联,执行顺序由运行时间事件决定
事件过程通过全局变量和子程序决定
事件过程为一整体,不能被其它事件中断
针对消息的一些常用语句
常进行读写
if (this.id==100)
{…}//消息I D
常写的
msg.can=2;//消息所使用的CAN控制器编号
msg.dlc=8;//消息中包含的数据字节长度
常读的
dword t ; t=this.time;//消息的时标,单位是10us
if(this.dir!=RX) {return;}//消息
的收发特性
CAPL指令块
Counter=counter+1;
If(counter==256)
{
Counter=0;
Stop();
}
CAPL中输出文本
Int h=100;
Char ch=?a?;
Char s100[8]=”hundred”;
Write(“Hundred as a number:%d,%x”,h,h); Write(“Hundred as a string:%s,%x”,s100); Write(“Hundred as a number:%6.4g”,sqrt(2.0))处理信号:
On message 0x64
{
If(this.byte(2)=0xFF);
Write(“third byte of message is invalid”); }
On message MotorData
{
If(this.temperature.phys>=150);
Write(“warning:critical temperature”); }
传输信号