This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

三节点CAN通讯中,28335 eCAN挂死



大家好,小白又来问问题了。

我在做三节点CAN通讯(28335、PCANUSB、PLC),具体是电脑通过PCAN分别向28335和PLC发送包含数据请求指令的数据帧,两个节点之后返回数据给电脑。

因为28335返回的数据较多,所以由28335返回发送结束指令告知一轮数据反馈完毕。通过延时保证PLC完成数据发送时,先于28335发送结束指令。电脑收到发送结束指令后再请求下一轮数据。

首先三节点间任意两两通讯都经过调试,收发可靠。三点通讯中,PCAN与28335、PCAN与PLC各用两套独立的ID(PLC ID高于或低于28335都尝试过)。延时时间的设置不能保证总线不发生冲突,冲突的仲裁由CAN控制器自己完成。配有两个120欧终端电阻,波特率1M。

实际三点通讯的过程中,发现通讯在一段时间(可能几轮数据、或几秒、或几十秒,和延时设置有关)后会出现中断。重启电脑端程序,PLC能继续通讯,28335不行。

排查到28335发送结束指令时出错,CANES = 0x0090 0000 看了一下是位错误和填充错误,CANTEC有计数。各种长短的延时都试过,最终即使在28335发送结束指令处设断点,每次手动点击发送,也会出现发送错误。将PLC中CAN总线收发部分注释掉,依然会出错,下电PLC,通讯才正常(其实变成两两通讯了)。

这个问题困扰我很久,希望大家能帮助提些解决思路,谢谢。