车载测试CAPL编程:报文发送(1)
目录
CAPL中报文的数据类型
- 核心关键字:
Message
是CAPL语言中的关键字,用于声明报文类型的变量。 - 概念理解:可将
Message
视为一种数据类型,每个具体的报文(如通过ID或DBC报文名定义的)是该类型的实例。
报文变量的定义方法
CAPL中定义报文变量有两种常见方式:
1. 基于报文ID定义
- 语法:
Message 0xID 变量名;
0xID
:报文ID,推荐使用16进制(以0x
开头),也支持十进制。变量名
:自定义的变量名称。
- 示例:
Message 0x1a5 Message1; // 定义ID为0x1a5的报文变量Message1
2. 基于DBC文件中的报文名定义(下期详解)
- 前提:项目已加载DBC文件。
- 语法:
Message 报文名 变量名;
- 说明:若DBC文件中存在该报文,可直接使用报文名定义,更便捷(下期视频详细讲解)。
报文赋值方式
定义报文变量后,需为其赋值(设置DLC和数据域),有两种赋值方式:
1. 声明后赋值
- 步骤:先声明变量,再通过选择器为DLC和数据域赋值。
- 示例:
Message 0x1a5 Message1; // 声明变量 Message1.DLC = 8; // 设置数据长度为8字节 Message1.Byte0 = 0xC7; // 第0字节赋值0xC7 Message1.Byte1 = 0x95; // 第1字节赋值0x95 Message1.Byte2 = 0x3F; // 第2字节赋值0x3F Message1.Byte3 = 0x6B; // 第3字节赋值0x6B
- 说明:未显式赋值的字节默认填充为0。
2. 声明时赋值
- 语法:声明变量时,通过花括号
{}
直接初始化DLC和数据域。 - 示例:
Message 0x2B6 Message2 = { DLC=4, // 数据长度为4字节 Byte0=0x2D, // 第0字节赋值0x2D Byte1=0x3F // 第1字节赋值0x3F };
发送报文:output函数
- 作用:调用CAPL内置函数
output()
将报文发送到总线(虚拟总线或物理总线)。 - 语法:
output(报文变量名);
- 示例:
output(Message1); // 发送Message1报文 output(Message2); // 发送Message2报文
- 效果:按一次触发键(如键盘A键),可发送一次报文,在CANoe的Trace面板中可观察到发送的报文。
数据填充的不同选择器
除了 Byte
选择器(单个字节赋值),还可使用 Word
选择器(双字节赋值):
1. Byte选择器(单个字节)
- 语法:
报文变量名.ByteN = 0xXX;
(N为字节索引,从0开始)。 - 示例:
Message1.Byte0 = 0xC7;
(为第0字节赋值0xC7)。
2. Word选择器(双字节)
- 语法:
报文变量名.WordN = 0xXXXX;
(N为双字节块索引,从0开始,每个Word覆盖2个字节)。 - 字节顺序:16进制值的低位字节对应低索引字节,高位字节对应高索引字节。
- 示例:
Message3.Word0 = 0x95C7; // Word0覆盖Byte0和Byte1,结果:Byte0=0xC7,Byte1=0x95 Message3.Word1 = 0x6B3F; // Word1覆盖Byte2和Byte3,结果:Byte2=0x3F,Byte3=0x6B
- 效果:与
Byte0=0xC7; Byte1=0x95; Byte2=0x3F; Byte3=0x6B;
等效。
- 示例:
下期预告:基于DBC文件的报文发送
- 场景:若DBC文件中已定义目标报文,可直接使用报文名定义变量,无需手动设置DLC和数据字节,操作更简洁。
- 说明:下期视频将详细讲解如何结合DBC文件发送报文。
AI 总结
本期视频主要讲解了CAPL中报文发送的基础方法:
- 报文定义:通过
Message
关键字,使用报文ID声明变量(如Message 0x1a5 Message1;
)。 - 报文赋值:支持声明后赋值(设置
DLC
和ByteN
)或声明时初始化(花括号内赋值)。 - 发送函数:通过
output(报文变量名)
将报文发送到总线。 - 数据填充:可使用
Byte
(单字节)或Word
(双字节,注意字节顺序)选择器填充数据域。
下期将介绍基于DBC文件的报文发送,进一步简化操作。