当前位置: 首页 > news >正文

Canoe CAPL编程

文章目录

  • CAPL 简介
  • CAPL的程序结构
  • CAPL的数据类型
    • 1. 无符号整数
    • 2. 有符号整数
    • 3. 有符号整数
    • 4. CAN消息类型
    • 5. 定时器类型
    • 6. 变量定义
  • on message xxx 中 this相关方法
  • 公共方法
    • 1. output(msgName) 从程序块输出message(形式1)或errorframe(形式2)。
    • 2. applILTxPending 在message发送之前更改数据
  • $ 和 @ 的区别
  • 如何切换 ECU加载的 .can 文件

CAPL 简介

CAPL(Communication Access Programming Language)是一种用于汽车电子领域的编程语言,主要用于开发和测试汽车电子控制单元(ECU)之间的通信协议。它是由 Vector Informatik 公司开发的,专门为汽车网络设计,例如 CAN(Controller Area Network)、LIN(Local Interconnect Network)、FlexRay 和 Ethernet 等网络。
在汽车软件开发过程中,CAPL 用于创建测试脚本,模拟 ECU 的行为,对通信系统进行功能验证和故障注入测试等。例如,在汽车的动力系统控制单元(PCU)和车身控制单元(BCU)之间的 CAN 通信测试中,可以使用 CAPL 编写测试脚本来检查信号传输是否正确、消息是否按时发送和接收等。

在CANoe工程的”Simulation Setup”界面下的左侧的网络节点中,点击铅笔形状的图标,进入CAPL编辑界面(若当前节点还没有创建对应的CAPL程序,则此时会先提示输入CAPL程序名,并保存为.can后缀的文件)
在这里插入图片描述

CAPL的程序结构

如下,一个完整的CAPL程序的结构包含了头文件、全局变量、事件函数、自定义函数;当然不是每个因素都要有,视具体程序功能确定。
请添加图片描述

CAPL的数据类型

1. 无符号整数

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

2. 有符号整数

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

3. 有符号整数

  • float(8 字节)
  • double(8 字节)

4. CAN消息类型

  • message

5. 定时器类型

  • timer (秒为单位)
  • msTimer (毫秒为单位)

6. 变量定义

// 一种方式
message 0x431 msg1;//将报文0x431定义为变量msg1// 一种方式
message VoiceStatus msg;         /*将工程中dbc中定义的VoiceStatus这条报文取名为msg*/// 一种方式
message * msg;//先声明报文,暂时没有ID
msg.can = 1;//将这条报文设置为通道1
msg.id = 0x23;//报文ID为0x23
//msg.name = "mymsg";//报文名称是只读的
msg.dlc = 8;//报文长度
msg.byte(0) = 0x10;//报文第0个字节的内容
output(msg);//发送报文

on message xxx 中 this相关方法

this.byte(x);x可以是0-7
this.Word(x);x可以是0-6
this.DWord(x);x可以是0-4
this.QWord(x);x只能是0
this.id;报文ID
this.DLC;报文长度
this.can;报文所在通道
this.dir;报文方向是 接收还是发送
this.time;报文时间戳(单位10us)
this.simulated;报文是否由仿真节点发送,0:不是,1:是
this.FDF;FD报文格式标志位,0:CAN,1:CANFD

公共方法

1. output(msgName) 从程序块输出message(形式1)或errorframe(形式2)。

在这里插入图片描述

2. applILTxPending 在message发送之前更改数据

dword applILTxPending(long aId, dword aDlc, byte data[]);

  • aId:message ID
  • aDLC:要发送消息的数据字节数组的长度。
  • data:数据字节数组,包含要发送的字节。字节可以随意更改。
  • 返回值:
    • 0:阻止使用提供的aId发送消息
    • 1:使用提供的aId发送消息
// Calculation of a checksum and a message counter 示例:
dword applILTxPending (long aId, dword aDlc, byte data[])
{dword i;byte xor;/* Message 0x1A0 contains a XOR checksum in Byte 0. It will/* be calculated from the other data bytes of the message.*/if(aId == 0x1A0){// calculatexor = 0x00;for(i = 1; i < aDlc; ++i) {xor = xor ^ data[i];}// set the new checksumdata[0] = xor;}/* Message 0x1A1 contains a 4-Bit message counter in/* the first 4 Bits of Byte 0.*/if(aId == 0x1A1){// get the old valuei = data[0] & 0x0F;// incrementi++;i = i % 16;//set the new message counterdata[0] = i & 0x0F;}return 1; // don't prevent sending of the message
}

在CANoe交互层(CANoe IL)向总线发送消息之前,可以选择调用此回调。在此回调中,可以阻止消息的发送或更改消息的数据。

$ 和 @ 的区别

  • 一般来说,前面带$的就是message 中的 signal。
  • 一般来说,前面带@的就是系统变量。

如何切换 ECU加载的 .can 文件

在这里插入图片描述
在这里插入图片描述


http://www.mrgr.cn/news/80542.html

相关文章:

  • C++ day8——模版
  • python文字转语音
  • unittest测试框架
  • 【前端】JavaScript 中的 map() 方法:高级解析与应用
  • 【软件工程】简答题系列(一)(山东大学·软院考试专属)
  • 关于QMessageBox的一些使用总结和避坑指南
  • 2012年西部数学奥林匹克试题(几何)
  • ASR-LLM-TTS 实时语音对话助手:语音识别、大模型对话、声音生成
  • 算法题(7):n进制乘法表
  • kubeadm_k8s_v1.31高可用部署教程
  • DATA-HUB 安装与启动:
  • vertx idea快速使用
  • Qt WORD/PDF(二)使用 QtPdfium库实现 PDF操作、打印等
  • 生产环境迁移——harbor篇
  • VCU--新能源汽车VCU电控开发
  • linux ibus rime 中文输入法,快速设置为:默认简体 (****)
  • k8s控制器
  • [创业之路-198]:华为的成立发展与新中国的建立与发展路径的相似性比较
  • Windows系统VSCode 搭建ESP-IDF环境
  • 【Vue.js 3.0】provide 、inject 函数详解
  • 单步调试Android Framework——App冷启动
  • SAM大模型实践(一)
  • HCIA-Access V2.5_4_1_1路由协议基础_IP路由表
  • 车牌识别之二:车牌OCR识别(包含全部免费的数据集、源码和模型下载)
  • Chinese-Clip实现以文搜图和以图搜图
  • Qt WORD/PDF(四)使用 QAxObject 对 Word 替换(QWidget)