自适应地检索 CAN 通道的 sysVar BusLoad
Retrieving sysVar BusLoad for CAN channel adaptively
我正在为测试创建程序节点。该测试需要了解被测 CAN 通道的总线负载。除了检索相应通道的 sysVar 总线负载外,该测试几乎是完全自主的。我想这样做,以便我可以像这样检索 BusLoad 值:
正确的方法:
on message *{
BusLoad = @_Statistics::CAN1::Busload;
}
我想要的:
on message *{
BusLoad = @_Statistics::this.msgChannel::Busload;
}
我对 CAPL 非常陌生,所以任何帮助都将不胜感激,我不确定这是否可行。
谢谢! :)
你可能会想到这样的事情:
on message *{
switch (this.can)
{
case 1:
BusLoad = @_Statistics::CAN1::Busload;
break;
case 2:
BusLoad = @_Statistics::CAN2::Busload;
break;
case 3:
BusLoad = @_Statistics::CAN3::Busload;
break;
// and so on
default:
// what happens on default
break;
}
}
您可以通过名称访问系统变量。
试试这个(无法测试这个,我现在不在我的独木舟上):
on message * {
char buffer[100], format[] = "CAN%d::Busload";
snprintf(buffer, elcount(buffer), format, this.CAN);
BusLoad = sysGetVariableInt("_Statistics", buffer);
}
sysGetVariableInt
允许将系统变量的名称指定为字符串。使用 snprintf
您可以 assemble 使用频道号的字符串。
我正在为测试创建程序节点。该测试需要了解被测 CAN 通道的总线负载。除了检索相应通道的 sysVar 总线负载外,该测试几乎是完全自主的。我想这样做,以便我可以像这样检索 BusLoad 值:
正确的方法:
on message *{
BusLoad = @_Statistics::CAN1::Busload;
}
我想要的:
on message *{
BusLoad = @_Statistics::this.msgChannel::Busload;
}
我对 CAPL 非常陌生,所以任何帮助都将不胜感激,我不确定这是否可行。
谢谢! :)
你可能会想到这样的事情:
on message *{
switch (this.can)
{
case 1:
BusLoad = @_Statistics::CAN1::Busload;
break;
case 2:
BusLoad = @_Statistics::CAN2::Busload;
break;
case 3:
BusLoad = @_Statistics::CAN3::Busload;
break;
// and so on
default:
// what happens on default
break;
}
}
您可以通过名称访问系统变量。
试试这个(无法测试这个,我现在不在我的独木舟上):
on message * {
char buffer[100], format[] = "CAN%d::Busload";
snprintf(buffer, elcount(buffer), format, this.CAN);
BusLoad = sysGetVariableInt("_Statistics", buffer);
}
sysGetVariableInt
允许将系统变量的名称指定为字符串。使用 snprintf
您可以 assemble 使用频道号的字符串。