我使用 Vector 软件在 CANoe 中创建了一个测试自动化测试环境,对于大多数测试用例,我需要传输连续的消息。
例如。 Msg1.Signal1 = 1 持续 3 秒
和
Msg1.Signal1 = 4 持续 2 秒。
我浏览了帮助内容和一些在线可用的 pdf,并可以为此编写以下逻辑:
variables
{
message 0x555 msg1 ;
mstimer timer1; // define timer1
}
on message msg1
{
setTimer(timer1,3000); // initialize timer
}
on timer timer1
{
setTimer(timer1,3000); // reset timer
msg1.signal1 = 1; // change the data
output(msg1); // output message
}
但是程序的整个运行时间约为200ms,因此有3秒的时间没有传输消息。类似的代码已被重写,时间周期为 2 秒。有人可以告诉我代码有什么问题或者如何进一步实现这个目标吗?
提前致谢。 问候, 维韦克
这就能解决问题,在下面的示例中,您将使用两个独立的计时器,一个用于将信号设置为 4,另一个用于将其值更改为 1。
我添加了几个键盘事件,以便您可以轻松启动和停止切换过程。
variables
{
message 0x555 msg1 ;
mstimer timer1; // Timer1 defined in ms
mstimer timer2; // Timer2 defined in ms
}
on key '1'
{
// This event is called every time the key '1' is pressed
// This will START the whole signal toggling procedure
setTimer(timer1,3000);
}
on key '2'
{
// This event is called every time the key '2' is pressed
// This will STOP the whole signal toggling procedure
cancelTimer(timer1);
cancelTimer(timer2);
}
on timer timer1
{
msg1.signal1 = 1; // Set signal1 to 1
output(msg1); // Send the message over CAN
setTimer(timer2,3000); // Let the signal1 be 1 by 3 seconds
}
on timer timer2
{
msg1.signal1 = 4; // Set signal1 to 4
output(msg1); // Send the message over CAN
setTimer(timer1,2000); // Let the signal1 be 4 by 2 seconds
}