如何使用Capl在FlexRay中停止发送PDU

时间:2018-12-12 12:28:59

标签: capl

在我们的例子中,我有一个名为TEMP的FlexRay PDU,它在每个周期中都被填充,我想对该PDU进行超时,但它没有updatebit。

我有一个面板,可以在其中检查启用按钮,以决定是否应将其发送出去。

adsProfile() {
  this.navCtrl.push(AdsProfilePage, {Name :this.name,Address:this.address});
}

无论我将按钮设置为什么,PDU都会在每个循环中传输。

2 个答案:

答案 0 :(得分:0)

我自己不使用Vector CANoe或CANalyzer,并且几乎没有公共文档,因此我只能提供一些常规调试提示:

  • 您是否已检查@FR_namespace :: TEMP_Enablebutton是否具有预期值,即关闭按钮时它确实为假?您可以在frStartCycle上的if()之前添加write()来进行检查。
  • 这个问题看起来很相似:Sending Periodic CAN signals on button press using CAPL and CANalyzer-他们使用“在sysvar上”对按钮按下做出反应,也许您必须做类似的事情。即:对按钮的按下做出反应,设置一个环境变量,在“ on frStartCycle”中检查该变量
  • 由于没有太多公开文档,因此您也可以尝试在公司内部询问,您周围可能会有一些人可以为您提供帮助。

答案 1 :(得分:0)

FRUpdatePDU()不会发送PDU的另一个实例,它只是使用frPDU对象中的数据更新下一个迭代,因为我们正在谈论静态帧的PDU,一旦VN开始发送它,就无法停止它分别由PDU控制。 enter image description here

框架与PDU 框架是网络上的物理Flexray框架。 PDU是帧有效负载的一部分(或全部)的虚拟化。 打个比方:邮政卡车是FlexRay框架,其中的盒子是PDU。对于邮政服务(Flexray协议-OSI层1),重要的单位是卡车本身,而对于您(客户)来说,则是卡车中的箱子。您将永远不会对在盒子中运送好东西的卡车感兴趣,仅对内容本身感兴趣。

调用FrUpdatePDU()时,不仅开始发送PDU,而且还激活(发送非空帧)其插槽。 通过将下面的帧设置为非空帧,可以确保(在静态帧的情况下)自动从该点开始周期性地发送该帧,无论您要对PDU做什么(卡车仍在行驶,甚至如果您不想在其中发送邮件)。

解决方案: 我想您没有IL DLL可以为您提供帮助,因此您仅限于CANoe环境作为FlexRay IL常规功能提供的功能。

  1. 您需要标识承载PDU的帧。
  2. 您还需要使用frUpdateStatFrame()来操纵框架。

来自DBCofTEMPPDU的帧帧帧

在frStartCycle * {

if (@FR_namespace::TEMP_Enablebutton==1)

{

mframe.fr_flags=0x0;

frUpdateStatFrame(mframe);

TEMP_Pdu.byte(0xAA);

FrUpdatePDU(TEMP_Pdu, 1, 1));

}

else 

{

mframe.fr_flags=0x80;

frUpdateStatFrame(mframe);

}

}

因此,实际上您还需要修改框架。关于帧标志,请在“帮助”中签出frframe的定义。

enter image description here