RS-485的多机通信方案探究
Cortex—M054内部有4 KB的Data Flash给用户存储数据,故将节点的地址存入Flash中。当系统上电复位后,先从Flash中读出节点的地址,存入全局变量address中。当收到数据包之后,进行CRC校验,如果正确就接收,再根据协议解析地址地段,其值与address比较,以此判定此包是否属于自己。
自动地址识别模式是由芯片自动筛选地址,而此处需要软件判断。因此,地址长度可以由用户自己设定。
3.4.1 数据混乱
上述方法存在数据混乱的隐患。如果网关节点与终端节点通信过程都是用N个字节进行,那么不会出现数据紊乱问题。但若假设网关节点发送命令用N个字节,而终端节点向网关节点回复数据时,用M(M>N)个字节,此时总线上的其他终端节点都会收到这M个字节。此时,会认为是网关节点发出的,所以只解析前N个字节的数据,那么在FIFO中就剩下了(M—N)个字节,即此时FIFO中并不为空。若网关节点此时再与其他任意一个终端节点通信时,程序会默认先读出残留的(M—N)个字节数据,就会造成数据紊乱,网关节点再难与其他节点正常通信。
解决方法是在每次有数据进入FIFO中后,触发中断,将所有的数据都读出,而只解析前N个字节。因为在整个RS-485系统中,只有网关节点才能与终端节点通信,各个终端节点之间不可以通信,而网关节点与终端节点通信是N个字节。一次读空FIFO的目的就是清空FIFO中的无效数据。
3.4.2 改进型RS-485协议
RS-485通信的最大缺点就是主从式的通信方式,从机只有在收到主机的命令后才可以与之通信。而CAN总线的每个节点可以在任意时刻接收和发送数据,通过其仲裁体制,避免数据冲突,但是CAN总线的成本相对较高,对于实时性和安全性要求不高的场合,不适宜用CAN总线通信。
借鉴CSMA/CD协议,本文提出改进型的通信方式。设置全局变量nesting,如果进入一次RS-485中断,则nesting加1。在终端需要向网关节点发送数据时,置nesting为0,延迟(address×10)ms;如果总线上没有数据通信,nesting为0,此时节点可以主动向网关节点发送数据;否则,表示总线上繁忙,则继续延迟(address)ms。
尝试K次,K的大小根据用户需求设定。若此终端节点已经在网关节点的轮询范围之内,终端向网关发送的数据为紧急事件包,则K的值应该尽量小;若主动发送失败,可以等待节点被轮询之时,再将此数据发送出去。若此终端节点不在网关节点的轮询范围之内,是新加入的节点,则主动发送信息的目的是告诉网关,自己是新节点,需要加入总线系统中,此时K值应该尽量大,以保证新节点能够不在上位机的协助下,自动地加入总线系统中,提高系统的灵活性。终端发送流程图如5所示。
网关节点不能轮循完一遍之后,又立即进行下一次轮询。这样,总线上一直都会是忙碌状态。网关节点必须在轮询完一次之后,暂停L秒,这个空隙时间就是留给终端主动向网关发送数据。L不宜过大,否则会大大降低系统整体效率,L的选取与系统共有多少终端节点且每个终端节点与网关节点通信时间有关。
使用普通模式进行通信,优点是RS-485通信应用灵活,可以支持更多的节点挂载在总线上;可以改进RS-485通信方式,自动地址识别模式无法监听总线是否繁忙。缺点是各个节点的工作量增大,将频繁解析指令,系统整体效率降低。
结语
在使用RS-485方式通信时,选取哪种方式进行通信,需要根据不同场合而定。传统的自动地址识别模式,适用于严格的主从通信系统,可靠性高,系统整体效率高;而普通模式灵活性较好,但是系统整体效率会降低。所以,要因地制宜,选择当前场合最适合的方式。
- 物联网时代的计算机网络技术教学探究(08-10)
- 探究SaaS模式的特点及其效用(08-10)
- 网络系统安全接入认证方法探究(07-06)
- 大唐电信胖瘦可转型WLAN整体解决方案(03-14)
- 巨型无线城市天馈解决方案(06-01)
- TD-LTE/GSM共站部署技术(06-17)