1

我是 CAPL 脚本的初学者。我正在编写一个脚本来发送带有帧 id (PID) 的 8 字节消息。当我在独木舟中运行脚本时,ECU 没有给出响应。设置和数据库中的所有内容都是正确的。脚本有问题。下面是脚本。

/*@!Encoding:1252*/
variables
{
   linmessage 0x11  Request;
   linmessage 0x25  Response;
   linmessage 0x01  Initiate_wake_up;

   byte WakeUpFrame = 0x3E;
   byte Request_Header = 0x11;
   byte Response_Header = 0x25;
}



void Util_SendHeader(byte frameID)
{
   Request.MsgChannel = 1;
   Request.ID = frameID;
   Request.RTR=1;  
   output(Request); 
}



void Wake_Up_Frame()
{
   Util_SendHeader (WakeUpFrame);
   Request.byte(0)=0x00;
   Request.byte(1)=0x00;
   Request.byte(2)=0x00;
   Request.byte(3)=0x00;
   Request.byte(4)=0x00;
   Request.byte(5)=0x00;
   Request.byte(6)=0x00;
   Request.byte(7)=0x00;
   Request.rtr=0;
   output(Request);  
}

on key 'q'
{
   Wake_Up_Frame();
   Request.byte(0) = 0x00;
   Request.byte(1) = 0x0A;
   Request.byte(2) = 0x00;
   Request.byte(3) = 0x00;
   Request.byte(4) = 0x00;
   Request.byte(5) = 0x00;
   Request.byte(6) = 0x00;
   Request.byte(7) = 0x00;
   Util_SendHeader (Request_Header);
   Request.rtr=0;
   output(Request);
   Util_SendHeader (Response_Header);
}

请帮我。

4

1 回答 1

0

要发送 LIN 消息,output()需要两次调用:第一次调用.rtr=0和第二次调用.rtr=1

第一个调度消息数据以进行传输。第二个触发传输。

如果某个外部主机在 LIN 总线上发送消息头而不是第二个output(),并且头 ID 与预定消息的 ID 匹配,则该工具将传输消息(充当从机)。

要接收来自从站的消息,只output()需要第二个。它将在 LIN 总线上传输消息头。任何准备好匹配消息(相同 ID)的从站将传输消息数据。

于 2017-09-28T22:17:15.557 回答