CAN 报文信号编码规则 intel & motorola

当一个信号的数据长度不超过 1 个字节(8 位)时,Intel 与 Motorola 两种格式的

编码结果没有什么不同,完全一样。当信号的数据长度超过 1 个字节(8 位)时,两者的编码结果出现 了明显的不同

1. 信号的高位,即最能表达信号特性的因子,比如:车速信号 500km/h 按照给定的公 式,转换成十六进制数为 0x6A5,因为 6 代表的数量级最大(162),那么其中 6 就 是其信号的高位。

2. 信号的低位,即最不能表达信号特性的因子,比如:车速信号 500km/h 按照给定的公式,转换成十六进制数为 0x6A5,因为 5 代表的数量级最小(160),那么其中 5 就是其信号的低位。

3. 信号的起始位,一般来讲,主机厂在定义整车 CAN 总线通信矩阵时,其每一个信号都从其最低位开始填写,这样也符合使用习惯。所以信号的起始位就是信号的最低位。这也与 CANoe 中 CANdb++的定义 Startbit 含义一致。

Intel 格式

当一个信号的数据长度超过1 个字节(8 位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节

(LSB)的低位。这样,信号的起始位就是低字节的低位

 

CAN报文 <wbr>Intel <wbr>格式与Motorola <wbr>格式的区别

Motorola 格式

当一个信号的数据长度超过 1 个字节(8 位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节

(LSB)的低位。这样,信号的起始位就是高字节的低位.

信号的起始位就是低字节的低位

CAN报文 <wbr>Intel <wbr>格式与Motorola <wbr>格式的区别

 

Motorola 格式

当一个信号的数据长度超过 1 个字节(8 位)或者数据长度不超过一个字节但是采用跨字节方式实

现时,该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节

(LSB)的低位。这样,信号的起始位就是高字节的低位.

CAN报文 <wbr>Intel <wbr>格式与Motorola <wbr>格式的区别

 

 

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的CAPL脚本示例,用于在CANscope上监控CAN1和CAN2的报文周期: ``` variables { long can1MessageCount = 0; //定义CAN1收到的报文数量 long can1LastTimestamp = 0; //定义CAN1上一个报文的时间戳 long can2MessageCount = 0; //定义CAN2收到的报文数量 long can2LastTimestamp = 0; //定义CAN2上一个报文的时间戳 } on message CAN1::ID { //统计CAN1收到的报文数量 can1MessageCount++; //计算CAN1报文周期 if(can1LastTimestamp != 0) { long period = this.timestamp - can1LastTimestamp; CanSetScopeValue(1, can1MessageCount, period); } //更新CAN1上一个报文的时间戳 can1LastTimestamp = this.timestamp; } on message CAN2::ID { //统计CAN2收到的报文数量 can2MessageCount++; //计算CAN2报文周期 if(can2LastTimestamp != 0) { long period = this.timestamp - can2LastTimestamp; CanSetScopeValue(2, can2MessageCount, period); } //更新CAN2上一个报文的时间戳 can2LastTimestamp = this.timestamp; } ``` 在这个示例中,我们使用了 `on message` 事件来捕获CAN1和CAN2总线上的报文。在事件处理程序中,我们分别增加了计数器用于统计收到的报文数量,并计算了每个报文的周期。我们使用 `this.timestamp` 访问当前报文的时间戳,并分别用 `can1LastTimestamp` 和 `can2LastTimestamp` 变量来记录上一个报文的时间戳。最后,我们使用 `CanSetScopeValue()` 函数将报文周期数据添加到CANscope中。 请注意,这个示例假设您已经在CANscope中设置了两个名称分别为“CAN1周期”和“CAN2周期”的变量。如果您使用了不同的SCOPE变量名称,需要相应地修改脚本中的 `CanSetScopeValue()` 函数调用。 请根据您的实际需求进行修改。需要注意的是,具体的实现可能需要使用不同的报文ID和报文数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值