CAPL 脚本 - CAN C 通信(停止从 DBC 传输一条消息)
CAPL Scripting - CAN C communication (Stop transmitting one message from DBC)
我正在编写一个 CAPL 脚本,该脚本必须允许所有消息在 CAN C 通道上传输并停止传输来自数据库文件的特定消息。
谁能帮助我使用 method/function/code?
据我所知,实现此目的的唯一方法是禁用任何消息的自动传输(例如通过 IG 或网络 IL)并在计时器回调中从您的 CAPL 脚本手动传输所有消息。传输可以使用 output
函数完成,并且根据您定义的任何条件,您可以选择不为任何应该被阻止的消息调用 output
。
您的问题含糊不清,但我假设您要从一个 CAN 通道转到另一个。例如,CAN C 到 CAN D(或 CAN 3 到 CAN 4),你可以这样做:
on message CAN3.0x7FF // This would be that one ID that stops at some point
{
message CAN4.0x7FF msg;
msg = this;
// Assuming you are receiving on CAN 3, and looking to transmit on CAN 4
if(this.dir == rx)
{
// Declare a global variable that sets to 1 when you want it to stop
if(MSG_STOP == 0)
output(msg);
}
}
on message CAN3.*
{
message CAN4.* msg;
msg = this;
if (this.dir == rx)
{
output (msg);
}
}
如果您在仿真中使用交互层 (IL),并且正确配置了 DBC 文件循环时间,则有一些 CAPL 函数可用于故障注入,这将允许您有选择地 start/stop 传输某些消息:
on sysvar Sys_m0x461_Send {
/**********************************************************
* FAULT INJECTION Enable/Disable Msg Sending
**********************************************************/
if (@this) {
ILFaultInjectionEnableMsg(Message0x461fromDBC);
}
else {
ILFaultInjectionDisableMsg(Message0x461fromDBC);
}
}
在示例中,如果系统变量(可以链接到面板控件,例如复选框)等于“1”,则消息将按照 DBC 中的定义进行传输,否则消息发送将停止。
我正在编写一个 CAPL 脚本,该脚本必须允许所有消息在 CAN C 通道上传输并停止传输来自数据库文件的特定消息。 谁能帮助我使用 method/function/code?
据我所知,实现此目的的唯一方法是禁用任何消息的自动传输(例如通过 IG 或网络 IL)并在计时器回调中从您的 CAPL 脚本手动传输所有消息。传输可以使用 output
函数完成,并且根据您定义的任何条件,您可以选择不为任何应该被阻止的消息调用 output
。
您的问题含糊不清,但我假设您要从一个 CAN 通道转到另一个。例如,CAN C 到 CAN D(或 CAN 3 到 CAN 4),你可以这样做:
on message CAN3.0x7FF // This would be that one ID that stops at some point
{
message CAN4.0x7FF msg;
msg = this;
// Assuming you are receiving on CAN 3, and looking to transmit on CAN 4
if(this.dir == rx)
{
// Declare a global variable that sets to 1 when you want it to stop
if(MSG_STOP == 0)
output(msg);
}
}
on message CAN3.*
{
message CAN4.* msg;
msg = this;
if (this.dir == rx)
{
output (msg);
}
}
如果您在仿真中使用交互层 (IL),并且正确配置了 DBC 文件循环时间,则有一些 CAPL 函数可用于故障注入,这将允许您有选择地 start/stop 传输某些消息:
on sysvar Sys_m0x461_Send {
/**********************************************************
* FAULT INJECTION Enable/Disable Msg Sending
**********************************************************/
if (@this) {
ILFaultInjectionEnableMsg(Message0x461fromDBC);
}
else {
ILFaultInjectionDisableMsg(Message0x461fromDBC);
}
}
在示例中,如果系统变量(可以链接到面板控件,例如复选框)等于“1”,则消息将按照 DBC 中的定义进行传输,否则消息发送将停止。