CAPL编程基础

    xiaoxiao2022-07-13  225

    CAPL是CAN总线访问编程语言,在汽车电子开发中运行十分广泛,类似C语言,同时是基于事件建模的语言,事件类型包含三种:

    总线事件 属性事件 时间时间

    CAPL时间类型可以从一张表格清楚表示,图片素材来源网络

    和时间相关用法

    on timer myTimer //表示对myTimer设定的时间到反应

    msTimer myTimer; //声明了一个ms定时器,定时单位是毫秒 timer myTimer; //声明了一个以秒为单位的定时器;

    定时器设置:

    setTimer(myTimer,20); //将定时器设置为20ms,并启动myTimer函数里的动作一次

    setTimerCyclic(myTimer,1); //设置定时器myTimer为一个1s为周期的循环定时器;

    cancelTimer(myTimer); //停止定时器myTimer

    需要执行该时间时间的函数写法:

    myTimer { tester.dlc =8; tester.byte(0) = 0x02; tester.byte(1) = 0x10; tester.byte(2) = 0x03; tester.byte(3) = 0x00; tester.byte(4) = 0x00; tester.byte(5) = 0x00; tester.byte(6) = 0x00; tester.byte(7) = 0x00; output(tester); }

    消息键盘事件

    on message 0x7E0 //监测到0x7E0报文的反应

    on message UDSReqeust // 对UDSRequest反应

    on message CAN1.123 // 对CAN1通道收到报文123的反应

    on message * //对所有消息的反应

    on message 0x7E0-0x7E8 //对0x7E0-0x7E8 之间报文的反应

    on key‘F’ // 按键盘F时触发动作

    on key Ctrl-F1 //按Ctrl+F1 触发动作

    对于以上两种事件类型是常用到的功能,能满足绝大部分需求。

    CAPL中数据类型

    无符号

    byte (1个字节) word (2个字节) dword(4个字节)

    有符号

    int (2个字节) long (4个字节)

    浮点型

    float double 消息的申明

    message 0x7E0 i14229_extend;

    如果键盘时间出发送报文

    on key ‘a’ { i14229_extend.dlc = 8; //表示长度 i14229_extend.byte(0) = 0x02; //第0个 i14229_extend.byte(1) = 0x10; i14229_extend.byte(2) = 0x03; i14229_extend.byte(3) = 00; i14229_extend.byte(4) = 00; i14229_extend.byte(5) = 00; i14229_extend.byte(6) = 00; i14229_extend.byte(7) = 00; output(i14229_extend); //发送该报文 }

    如果接收到则作出反应并发出另一帧

    on message 0x7E8 { //extend session if((this.BYTE(1) == 0x50) || (this.BYTE(2) == 0x03)) { i14229_seca.dlc = 8; i14229_seca.byte(0) = 0x02; i14229_seca.byte(1) = 0x27; i14229_seca.byte(2) = 0x01; i14229_seca.byte(3) = 00; i14229_seca.byte(4) = 00; i14229_seca.byte(5) = 00; i14229_seca.byte(6) = 00; i14229_seca.byte(7) = 00; output(i14229_seca); } }

    CAPL完整结构

    通常可由三部分组成

    定义全局变量 事件过程 自定义函数块

    原文地址:https://zhuanlan.zhihu.com/p/66189196 lanwailan

    最新回复(0)