CAN 总线系列讲座第十讲——如何监测 CAN 网络节点的工作状态1 问题的引出在 CAN 总线研发项目的具体应用中,有的项目相对比较简单,不需要运用CAN 总线的应用层协议来开发,在网络节点的状态监控方面,需要实时诊断其是处于正常通讯状态还是故障状态。2 只有 2 个节点的简单 CAN 总线网络例如:一个 CAN 总线网络中只有主节点和 1 个子节点。主节点子节点图 1 2 个节点构成的简单 CAN 总线网络这时,主节点可以通过 2 种方式诊断子节点是处于正常通讯状态还是故障状态。方式一:主节点中设置一个定时器,例如 2s 时间间隔主节点向子节点发送一次询问(可以单独询问子节点的状态,也可以令子节点上传数据),设定 0.5s钟时间限制,如果 0.5s 钟内没有收到子节点的应答,就判定子节点故障,主节点可以通过蜂鸣器、显示屏、LED 等报警;同样的,子节点设定6s 钟时间限制,如果 6s 钟内没有收到主节点的询问,就判定主节点故障,同样子节点可以通过蜂鸣器、显示屏、LED 等报警。方式二:主节点在有人值守的情况下,例如煤矿风机运转状态的监控,主节点一般是有人值守的计算机(主节点通过 USB、串口、PCI 连接在计算机上),此时可以不用再通过嵌入式系统判定主节点是否工作正常了。可以让子节点定时(例如 0.5s 钟)向主节点发送一组数据帧,在主节点上设定 1s 钟时间限制,如果 1s 钟内没有收到子节点的应答,就判定子节点故障。此处 0.5s 钟向主节点发送的一组数据帧就是我们常说的“心跳信息”——就像人的心脏跳动一样,证明子节点还“活着”。设置“心跳信息”有个技巧,让子节点发送的数据帧中的一个字节内容要有所变化,例如:数据流传输方向:子节点主节点目标地址(主节点地址)数据帧内容(数据长度 3)第一次0X28A0X000XAA0XBB第二次0X28A0X010XAA0XBB第三次0X28A0X000XAA0XBB第四次0X28A0X010XAA0XBB第五次0X28A0X000XAA0XBB数据帧内容中的第 1 个字节是 0X00 和 0X01 交替出现,假如都是保持 0X00不变会有什么麻烦呢?目标地址(主节点地址)数据帧内容(数据长度 3)第一次0X28A0X000XAA0XBB第二次0X28A0X000XAA0XBB第三次0X28A0X000XAA0XBB第四次0X28A0X000XAA0XBB第五次0X28A0X000XAA0XBB如果某一段时间内 CAN 总线网络上没有其他的数据传输,只有这些内容不变的“心跳信息”占满整个显示屏,那么就不容易让人及时判定子节点出现故障了,有“视觉疲劳”。所以,使用“心跳信息”...