我正在用Simulink建立HIL / SIL测试,该测试从车辆上测试车辆控制单元(VCU)。该VCU通过J1939 CAN网络与配电模块(PDM)进行通信。 PDM处理开关和执行器的输入和输出,并将信息放置在CAN总线上。然后,VCU知道从连接的传感器看到的PDM。反过来,VCU将有关PDM如何控制连接的执行器的信息放在CAN总线上。
我的笔记本电脑通过Vector适配器和Simulink连接到同一CAN总线。
要测试VCU,我需要模仿PDM并将消息发送到VCU,就像我是PDM一样。然后,VCU必须采取正确的措施并相应地控制实际的PDM。
很明显,如果我只是模仿PDM,则我的消息将干扰从实际PDM发送的消息。因此,基本上,我需要PDM关闭并仅收听。我为PDM发言。但是,PDM无法配置为仅侦听模式,因此我必须拦截其发送的所有消息,以使它们永远不会到达VCU。
我的想法是,当PDM开始发送时,我会检测(通过观察所有消息的仲裁字段),并在仲裁字段中拉低一点。它认识到我的“消息”优先于自身的消息,并且会停止传输。好像CAN总线总是忙于为PDM腾出空间。这将关闭PDM,而不会引发错误。但是欢迎其他建议。
那么(怎么)可以在MATLAB / Simulink或单独的CAN控制器中拦截J1939 CAN消息?
答案 0 :(得分:2)
这是一个想法,如何实现您要寻找的东西。但是,您需要一些额外的硬件。
这是粗略的轮廓:
can0
和can1
。can0
can1
连接到原始CAN总线,其中还包括您的笔记本电脑和VCU can1
上的所有传入CAN帧转发到can0
接口can0
中进入的CAN帧,然后不将其转发到can1
示例,如何实现这样的CAN网关:
can0
和can1
之间转发流量。您的原始想法:
我认为您的设想在技术上是可行的,但可能还有其他缺点。
又一个想法:
如果您能够改编VCU的软件,请以不消耗PDM的CAN帧,而是使用不同的CAN-ID来使用笔记本电脑的CAN帧的方式更改它消息。为此,您将不得不更改dbc文件。