[英]Send Message/ Inject a message with CAPL
我是 CANoe 的新手,也是 CAPL 语言的新手。 但是我想问你:如何在ECU的网络上用CAPL发送消息。 例如:我想发送一个十六进制数(这是一个 ECU 的问题),然后我想看到这个问题的响应。
我不知道我是否很清楚,但是,如果您有任何答案,我将不胜感激。
在 CAPL 中发送消息
您可以在任何事件上发送一条消息(或多条消息),例如按键、接收到另一条消息、接收到错误帧或定时器到期。 发送事件消息涉及创建事件过程、声明要发送的消息以及在事件过程中发送消息。 可以将消息声明为全局变量,以便可以在任何事件过程中访问它。 如消息对象部分所示,您可以在程序中声明消息的结构,也可以使用关联的数据库。 在此示例中,我们将在“全局变量”窗口中声明每个变量之一
variables
{
message EngineData msg1; // Defined in database
message 0x101 msg2; // Standard message 101 (hex)
message 0x105x msg3; // Extended message 105 (hex)
}
现在,要发送消息,我们只需要将其中一行放入事件过程中:
output(msg1);
output(msg2);
当然,我们也可以在发送前给消息添加数据。 EngineData 消息具有在数据库中定义的信号,但其他消息没有。 因此,我们必须使用两种不同的方法来向消息中添加数据。
msg1.EngSpeed.phys = 1000;
msg1.EngTemp.phys = 150;
msg1.IdleRunning = 1;
output(msg1);
msg2.DLC = 4; // Allocate 4 data bytes in msg2
msg2.byte(0) = 0x16; // First word is 16 hex
msg2.byte(1) = 7; // Second word is 7 decimal
output(msg2);
回应讯息
on message 0x101 // This is the identifier of your response
{
if(this.byte(0) == 0x16)
{
write("Response is the expected!");
}
}
要么
on message msg2 // This is the identifier of your response
{
if(this.byte(0) == 0x16)
{
write("Response is the expected!");
}
}
您可以使用如下所示,
variables
{
message BCMmsg01 msg_BCMmsg01; // declaration of message into a variable
}
on key 'z'
{
msg_BCMmsg01.C_AutoLockCmd = 3; // assign the value to the message
output(msg_BCMmsg01); //send the message to the CAN bus
}
希望我澄清了你的问题。 如果您需要更多说明,请告诉我。
Joe 展示了消息(在本例中为十六进制值)的发送方式。 如果要查看响应,则需要知道响应 ID(例如 0x62C)
on message 0x62C /* This is the identifier of your response */
{
if(this.byte(X) == 0xYY) { /* X is the byte of the response you are interested and Y the value of that byte*/
write("Response is the expected!");
}
我希望这回答了你的问题。
我还有另一个问题,例如上面的示例。 我想对通过“消息时”事件(收到消息时)起作用的CAPL进行编程,但是我不想将包含的字节与另一个值进行比较,我想将消息信息保存在环境或系统变量中。 这些变量如何定义? 以及如何保存收到的消息中的值?
谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.