在使用CANoe的过程中,我们不可避免的会跟Message打交道。对于一个初学者了来说,message有什么属性,我们要怎么用好这个message在实现自动化的过程中还是很重要的。

  1. .can 定义接收帧的传输通道或通道。具体的使用例子如下。例子定义了message 0x100的通道为CAN 1.
message 0x100 msg = {dlc = 2, word(0) = 0x1234};

on key '1' {
  write("sende via CAN 1");
  msg.CAN = 1;
  output(msg);
}

  1. .ID 定义了Message的ID 编号。如何使用ID 编号见例子。例子中说明了,当我们收到Message ID 为0x600的时候,write窗口打印一行文字并进入trigger()函数。
on message * {
  if (this.ID == 0x600) {
    write("message 0x600 received; triggering logging...");
    trigger();
  }
}

  1. .name 我们只有读取的权限,并不能对message的名称进行更改,因为name属性已经被数据库定义好且只有读取的权限。

  2. .DIR 定义传输方向。可能存在的值为Rx,Tx,TXREQUEST。其中TXREQUEST并不明白是一种怎样的传输类型,所以无法展开。使用的例子如下。例子中定义,如果0x100的DIR属性是RX,则打印message 0x100 received;如果0x100的DIR属性是TX,则打印message 0x100 sent。

on message 0x100 {
  if (this.DIR == Rx) {
    write("message 0x100 received");
  }
  if (this.DIR == Tx) {
    write("message 0x100 sent");
  }
}

这里通过查阅资料找到对于三种状态的描述
在这里插入图片描述

  1. .RTR 定义了远程传输请求的状态。可能存在的状态时0(无远程传输请求)和1(远程传输请求)。使用例子如下。
message 0x100 rmsg;
rmsg.RTR = 1;
output(rmsg);
  1. .type DIR和RTR结合使用可进行有效评估。具体的评估方法为: (TYPE = (RTR << 8) | DIR )。使用的例子如下。
message 0x100 resp_msg = {dlc = 2, word(0) = 0x1234};

on message 0x100 {
  if (this.TYPE == RXREMOTE) {
    // remote frame 0x100 received
    output(resp_msg);
  }
}

关于Type具体存在哪些情况,请看下面的说明。
在这里插入图片描述

  1. .dlc 定义了message的长度。具体的使用例子如下。但是因为现在协议的不同,所以每种协议下的dlc属性是不一样的。例如CAN的数据长度就为8 bytes,CAN FD的数据长度为64 bytes。

在这里插入图片描述

on message OneByteMessage {
  if (this.DLC != 1) {
    write("error: OneByteMessage has DLC != 1");
    stop();
  }
}

Logo

一站式 AI 云服务平台

更多推荐