问题描述
我是 CAPL 编程的新手。 如何将属于一个 CAN 通道的一个 PDU 的信号路由到另一个 CAN 通道。 谁能建议我怎么做?
解决方法
如果我理解得很好,您正在尝试做一个网关模块,在该模块中您将从一个频道接收消息,并且您必须将接收到的消息发送到另一个频道。 请试试这段代码,可能对你有帮助。
variables
{
message 0x123 Chanl1 =
{
ID = 0x111;
DLC = 8,CAN = 1,};
message 0x123 Chanl2 =
{
ID = 0x111;
DLC = 8,CAN = 2;
};
}
on message *
{
if((this.ID == 0x111) && (this.CAN == 1)) // 0x111 is your channel1 id
{
chanl2.byte(0) = this.byte(0);
chanl2.byte(1) = this.byte(1);
chanl2.byte(7) = this.byte(7);
chanl2.id = 0x111;
output(chanl2);
}
}
,
声明系统变量:
-
isPDUGoingToBeSent
- 值更改将触发事件on sysvar sysvar::isPDUGoingToBeSent
-
some_signal_sysvar
将接收到的信号值写入系统变量,并触发另一个事件。
on PDU ReceivedPDU
{
@sysvar::some_signal_sysvar = $ReceivedPDU::signal_name;
@sysvar::isPDUGoingToBeSent = 1;
}
在触发事件时检查是否已设置 sysvar 并发送 PDU。
on sysvar sysvar::isPDUGoingToBeSent
{
if(@this)
{
pdu PDU_FROM_DB mirrored_pdu;
mirrored_pdu.some_signal = @sysvar::some_signal_sysvar;
triggerPDU(mirrored_pdu);
}
}