Automation 独木舟中的连续信息传输

Automation 独木舟中的连续信息传输,automation,embedded,serial-communication,capl,Automation,Embedded,Serial Communication,Capl,我已经使用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); // initializ

我已经使用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秒。有人能告诉我代码出了什么问题,或者如何进一步实现这个目标吗

提前谢谢。 当做
Vivek

这将达到目的,在下面的示例中,您将使用两个独立的计时器,一个用于将信号设置为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
}

消息msg1上的
可以删除。我怀疑你用错了环境。(你必须点击红色按钮才能开始模拟)。亲爱的用户2225104,你是对的,点击红色按钮后模拟开始,但“on message msg1”是一个事件,每当msg1消息在总线上输出时,就会执行“on message msg1”事件。我想
on message msg1
意味着如果msg1正在传入。但是如果您的CAN筛选器打开,您可能会收到您发送的消息…最好尝试使用交互式生成器块查看您尝试执行的操作的外观。要设置计时器,您可能需要添加一些on start()内容。请参阅并搜索“启动时”。不知道是否还需要那种神秘的
@
东西。我上次用那东西已经好几年了。(第36页)亲爱的Jonas,我尝试在我的环境中运行相同的代码,但不起作用。我需要一些关于上述代码的澄清:1。在ontimer1事件中,我们将timer2设置为3秒,但这并不意味着timer2将设置为3秒,timer1设置为2秒。因为on timer的语法是:setTimer(msTimer t,long duration);礼貌:CAPL帮助。我尝试过自定义代码,但也没有成功。嗨,Vivek,调用setTimer(myTimer,duration)意味着myTimer过期时间将设置为duration,换句话说,在接下来的duration秒数内(对于msTimer类型,则为毫秒数),将调用计时器myTimer上的
事件。上面示例背后的想法是在时间事件timer1和timer2之间连续切换。嗨,Jonas,感谢您对计时器命令的评论,我对类似主题有一个问题,即消息的并行传输:例如,如果我们想模拟ex:if msg1.signal1=1 5秒(CAN消息)传输msg2.signal2=4持续3秒(LIN消息)。我已经用适当的检查点验证了我的代码,但无法在CAnoe的图形窗口中显示它,你们知道为什么会发生这种情况吗?关于VivekHi Vivek,假设您有适当的通信,图形窗口设置正确,并且测量设置中没有特殊的过滤器,我认为在这样的窗口中可视化信号没有任何问题。我建议您首先在跟踪窗口中检查数据传输。关于LIN消息,请记住这是一个主从协议,当您的模拟节点不是主节点时,应特别小心。嗨,Jonas,感谢知识传授,我不得不在CAPL浏览器中介绍更多概念。通过对我的配置进行一些修改,问题得到了解决,一位同事帮了我一把。