您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > CAPL语言学习文档
CAPL语言学习文档(一)CAPL简介CAPL全称为CommunicationAccessProgrammingLanguage。CAPL语言允许你编写单独的应用程序。比如说:当你添加新节点的时候,你要测试新添加的节点能否与以前的节点正常通信。在CAPL的帮助下就能够对系统环境进行仿真,也就是说能够仿真以前节点之间的数据通信,然后与新节点相连,就可以测试出新节点的功能性和可靠性,这也就是半实物仿真。通过CAPL你也能够对你网络上的数据通信进行分析优化,也能做一个网关程序——连接2种不同的总线,保证不同类型总线之间的数据通信。CAPL程序与数据库结合起来,通过调用数据库中的信号,消息,环境变量和实际测试环境联系起来,从而你能够实时监测总线上的数据通信;能够接受总线上的控制信息,使得模拟面板上的控件进行动作;也能够通过总线发出控制信息,控制外部环境动作,从而支持开发全仿真,半实物仿真,测试分析全实物系统3个仿真阶段,对节点的仿真很重要的地方就是准确的描述节点在总线上的动作。(二)CAPL功能编写解决问题的函数仿真控制设备仿真控制系统的环境执行测试和验证作为网关(三)CAPL特征基于事件建模的语言总线事件属性事件时间事件类似C语言友好的开发界面可用用户的动态连接库(四)CAPL编辑器CAPL程序在一个被划分为4个小窗口的浏览器窗口建立。左上角的窗格是浏览器树,包括所有CAN事件节点。右边的两个窗格是程序编辑窗口,其中上面的是全局变量编辑器,下面的是具体程序编辑窗口。最底下的窗格是消息窗口。当程序编好后,编译运行的结果会在消息窗口中显示,并指出该程序的路径,若运行有错,则会在指出哪行程序出错。(五)数据类型整型有符号:int(16bit),long(32bit)无符号:byte(8bit),word(16bit),dword(32bit)浮点数Float(64bit)Double(64bit)单个字符Char(8bit)定时器(timers)Timer(s)Mstimers(ms)这些数据类型在声明中已被初始化。整数和浮点数的用法跟其他程序设计语言相同。(六)全局变量的声明与初始化在浏览器中,全程变量的声明写在全局变量窗口的右上方。数据类型DWORD,LONG,WORD,INT,BYTE,CHAR的用法与在C语言中的用法近似。64位浮点数FLOAT和DOUBLE遵照IEEE标准。当编写一个定时器语句时产生一个定时器,当程序跳转到定时器运行语句时,开始执行定时器。与定时器相关的事件程序被唤醒。定时器的建立和取消通过关键字setTimer和cancelTimer执行。通过关键字将数据库中的消息定义成变量。变量在声明中被初始化。单一的符号和大括号{}形式都是允许的。除了定时器和省略补充的量,所有变量都被编译器初始化。消息变量DIR的发送方向通过发送请求(TXREQUEST)来初始化。CAPL语言允许数组(arrays,vectors,matrices)的声明,包括消息变量。局部变量在CAPL语言中是静态的(与C语言形成对比),这就是说要在程序开始时设定初值。假定变量进入程序的值是它们上次跳出程序时的值。Simpletypes:Intj,k=2;//j=0Doublef=17.5;MsTimert1;//NoinitializationInitializationofmessagevariables:Message100msg={dlc=4,word(0)=0x1234};Arrays:IntlookUpTable[3]={1,2,3};Chartext[12]=Helloworld;Intmatrix[2][2]={{11,12},{21,22}};(七)事件程序总线事件(onmessage{})Onmessage100{Write(“Message100”)}键盘事件(onkey{})Onkey‘a’{Write(“’a’pressed”);}时间事件(ontimer{})OntimerTime_1{Write(“timeelapsed”);}出错事件(onerrorFrome{})OnerrorFrame{If(ABS_NM_State){Switch(Error_Status){Case0:CountTx+=8;CountRx+=8;if((countTx127)||(countRx127)){Error_Status=1;//Error_Pass;}Break;环境变量事件(onenvVar{})OnenvvarSwitch{//declareaCANmessagetobetransmitteedMessageControllermsg;//Readoutthevalueoftheswitch//AssigntothesignalStopmsg.Stop=getvalue(this);//Outputthemessageonthebusoutput(msg);}(八)消息选择器你可以通过以下选择器控制CAN消息的收发:ID消息标识符Onmessage*{If(this.ID==0x600){Write(message0x600received;triggeringlogging...);Trigger();}}CAN通道编号Message0x100msg={dlc=2,word(0)=0x1234};Onkey'1'{Write(sendeviaCAN1);msg.CAN=1;Output(msg);}onkey'2'{write(sendeviaCAN2);msg.CAN=2;output(msg);}DLC数据编码长度onmessageOneByteMessage{if(this.DLC!=1){write(error:OneByteMessagehatDLC!=1);stop();}}DIRDirectionoftransmission,eventclassification;possiblevalues:RX,TX,TXREQUESTSelectorDIR(directionoftransmission)onmessage0x100{if(this.DIR==RX){write(message0x100received);}if(this.DIR==TX){write(message0x100sent);}}RTR远距离传输;可能值:0(noRTR),1(RTR)SelectorRTR(remotetransmissionrequest)//sendremoteframemessage0x100rmsg;rmsg.RTR=1;output(rmsg);TYPE与DIR和RTR相互作用产生有效值(TYPE=(RTR8)|DIR)message0x100resp_msg={dlc=2,word(0)=0x1234};onmessage0x100{if(this.TYPE==RXREMOTE){//remoteframe0x100receivedoutput(resp_msg);}}TIME指明时间,单位;10微秒SelectorTIME(timestampofmessageinunitsof10microseconds)constdwordsendDist=10000;//*10us=100msonmessageCP24TX{intdelta;dwordlastTime;delta=(this.TIME-lastTime-sendDist);//in10uslastTime=this.TIME;if(delta!=0){write(deviationofsenddistance:%dus,10*delta);}}MsgFlags表示接收和发送0x02表示在传输消息前传输缓冲器是空闲的0x04表示消息收发器主动接收消息0x08表示在highvoltage模式时消息被发送或接收0x10表示远程帧0x40表示发送(等同于DIR==TX)0x80发送请求(等同于DIR==TXREQUEST)SIMULATED表示通过仿真的CAPL节点发送消息;可能值:0(no),1(yes)SelectorSIMULATED(messagefromsimulatednode)OnmessageLightState{If(this.dir==RX){If(!this.SIMULATED){Write(messageLightStatereceivedfromrealsystem);}Putvalue(Bulb,this.OnOff);}Else{//write(messageLightStatereceivedasTX);}以下是能完成独立编码的DIR和RTR的表示方法:DIR:RX接收消息(DIR==RX)TX发送消息(DIR==TX)TXREQUEST发送请求(DIR==TXREQUEST)TYPE:RXREMOTE远程消息接收((DIR==RX)&&RTR)TXREMOTE远程消息发送((DIR==TX)&&RTR)TXREQUESTREMOTE发送请求远程消息发送请求((DIR==TXREQUEST)&&RTR)RXDATA数据消息接收((DIR==RX)&&!RTR)RXDATA数据消息发送((DIR==TX)&&!RTR)TXREQUESTDATA数据消息发送请求((DIR==TXREQUEST)&&!RTR)
本文标题:CAPL语言学习文档
链接地址:https://www.777doc.com/doc-7784339 .html