本帖最后由 515192147 于 2025-3-21 09:54 编辑
这个 一定要 有 //NART(No automatic retransmission)报文自动重传功能
//=ENABLE;禁止报文自动重传,=DISABLE,发送失败,会自动重传,直到成功 !!!!!!!!!
//DISABLE代表的是使用自动重传的功能,ENABLE是代表不使用自动重传的功能
//发现在不使用自动重传的功能时,如果由于总线竞争导致发送失败,数据就丢掉了。
//所以在不是一应一答的环境中使用CAN的时候,建议开启自动重传功能。
也有可能是 负载太高,堵路了:
这个问题就好像:我一秒钟产生1Mbits的数据,不压缩的情况下,我如何通过波特率500kbps的链路把它发出去? 答案就是发不出去。 CAN总线上应当总会有空闲时间,让那些低优先级的报文能发出去。 如果始终发不出去,只是那些高优先级的报文就把总线负载干到了100%,只能说明你的系统设计有问题。 资源不足的问题,要么是升级系统,要么是砍需求。 提高CAN总线波特率,使用CAN FD,删掉一些不必要的节点和通信数据..... 这是你需要做的事情,CAN总线不操这个心。
下面是 我们在电厂的一个案例,整个系统基本没有丢包:
下图为1个大型电厂的温度采集系统,分2路CANWeb总线,每路带62个8路热电偶CNW_IO模块,共992个温度采集点,项目使用4片GD32F427VE、124片GD32F305RC芯片, 采集系统CAN总线冗余,网关模块冗余,通过2路冗余Profibus DP 送电厂DCS,数据刷新周期小于500毫秒。

项目源程序见:
https://bbs.21ic.com/icview-3335470-1-1.html
|