文档库 最新最全的文档下载
当前位置:文档库 › CAPL编程简介

CAPL编程简介

CAPL编程简介
CAPL编程简介

消息与信号

消息,数据容器

据标识 输的数据块(最多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”); }

传输信号

相关文档