随着嵌入式技术的发展,测控设备逐渐智能化。企业信息化需求在设备选型时一个必要条件就是设备要具有联网通信接口。RS232接口能够实现点对点的通信方式,但不能实现联网功能,且远距离传输性能抗干扰性差。RS485接口解决了此问题,其数据传输最高速率可达到10 Mbps,且接口采用平衡驱动器和差分接收器的组合,抗共模干扰能力强,抗噪性好,适合于远距离传输。RS485总线最大可以支持32个节点,通过特制芯片,最大可以支持400个节点,因此,RS485非常适合于分布式测控系统通信领域。但RS485只能代表通信的物理介质,数据的传输访问必须开发相应的程序。
CORTEX—M3是基于ARM7架构的处理器内核,采用哈佛架构,其功耗低,性价比高。在多机通信网的设计中,经过需求分析,提出并设计了一种基于CORTEX—M3的多机通信网络。设计中,CORTEX—M3用做系统终端,作为主机和从机。从机负责前端系统的各类数据测量,主机作为控制端,负责各从机测量信息的采集,并通过网络实现对从机的控制。在系统的设计中,网络传输接口采用RS485,根据通信网络特点,设计中自制了RS485多机通信协议,开发了基于CORTEX—M3处理器的通信接口程序,程序移植性好,可以移植到CORTEX—M3内核的通信网络当中。经过测试,系统通信性能良好,无数据丢失及网络死锁现象。
1 RS485介绍
RS-485标准是为弥补RS-232通信距离短、远距离通信的抗干扰性能差等缺点而产生的。RS-485标准只规定了平衡发送器和接收器的电特性,而没有规定接插件、传输电缆和应用层通信协议。
RS-485标准与RS-232不一样,数据信号采用差分传输方式,也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B,如图1所示。
图2中,RS485发送器中A、B之间的高电平是在+2~+6 V之间,表示正逻辑状态;低电平是在-2~-6 V之间,表示负逻辑状态。对于RS485接收端,当在A、B之间有大于+200 mV电压,输入为正逻辑电平;小于-200 mV,输入为负逻辑电平,如图3所示。图1中RS-485器件中有一个信号地,一般,各器件信号地可以连接在一起,或者不连接;器件中,另有一个“使能”控制信号端,用于控制RS485是作为发送端还是作为接收端。当使能端为高电平时,作为发送端,当为低电平时,作为接收端。RS485为半双工通信方式,同一时刻,器件只能作为发送端或接收端,软件设计总线仲裁中,通过“使能”信号控制。
图3 RS485接线器简图
2 RS485在系统中的应用
RS485多机通信中,各器件中的A点连接在一起,B点连接在一起,通过双绞线连接,所有RS485节点挂接在一对RS485总线上。由于RS485为半双工工作模式,同一时刻,网络中只允许一台RS485接口设备处于发送状态,否则,总线上的数据会混乱;此外,由于RS485缺乏硬件仲裁机制,通信中,无法通过硬件仲裁来释放及占有总线,在多机通信网络中,可以从软件角度考虑总线仲裁。而RS485标准没有规定应用层通信协议,在软件设计系统总线仲裁中,可以根据系统特性及功能,制定相应的应用通信层协议。
1)系统简述
系统中网络结构采用星形网络结构,网络拓扑图如图4所示。
系统中的网络结构由主控机(M0)、从机(S1、S2……)构成,均为嵌入式系统设备,内核为CORTEX—M3。本系统中所有的RS485终端设备为嵌入式设备,终端设备接口一致,直接通过双绞线连接。
主机负责测控系统的信息采集。控制信息发送;各从机负责及完成各种信息的测量及数据转换,并将测控信息发送给主机。系统采用星形拓扑结构,分支节点故障查找方便,由于接口简单,扩展性良好,中心节点通信软件协议较复杂,而各分支节点通信协议较简单。
2)RS485通信协议总线设计
通信协议的设计主要包括物理层和数据链路层:
物理层实现以下功能:
发送数据时,将数据链路层送来的数据按字节进行并串转换,增加起始位、奇偶校验位及停止位,然后将转换后的信号发送到物理信道上;接收数据时,从物理信道串行接收电平信号,然后进行电平转换、奇偶校验、串并转换,得到所接收的数据。
数据链路层实现以下功能:
数据链路层位于物理层和应用层之间,为应用层提供统一的接口函数,实现无差错的双向数据传输。数据链路层协议主要包括帧格式设计、传输速率设置、帧收发程序、字符串收发程序。
①串口驱动程序设计
STM32F103串口驱动程序的设计调用系统库函数,省去了很多底层函数的编写。帧格式设计、传输速率设置通过结构体InitType DefInit StruCture结构体赋并初始化完成;帧的发送及接收已有库函数USART_ReceiveData(USART_TypeDef*USARTx)及USART_SendData(USART_Type Def*USARTx,uint16_tData),通过这两个函数的应用,可以实现字符串的收和发程序,简化驱动程序开发。
在串口驱动程序设计中,需要注意的是:在接收及发送帧数据时,使能端的电平设置,因此收发程序不能直接使用stm32f中的库函数。据此,在串口驱动程序的设计中,重新编写了接收及发送字节函数。发送字节函数示例:
②通信协议设计
为了实现从机信息正确的接收,在设计过程中,根据系统特点,制定了相应的通信协议:人为认为每台从机有地址编码,例如,1号机地址为0x1,2号机地址为0x2,以此类推,此数据也代表了从机机号。从机全部作为接收端,等待接收命令。
第一步:所有从机处于接收等待状态;主机发送一帧数据表示地址,从机接收并判断是否为本机地址:是,则响应;否则,丢弃此帧数据,继续等待接收本机地址帧;
第二步:从机接收到本机地址帧后,发送一个握手应答数据给主机。此时,从机作为发送端,主机作为接收端。主机发送完地址帧后随即切换状态并等待接收握手应答数据。当接收到总线握手数据后,主机判断是不是所需要读取的机号的握手通信数据:是,则通信成功,读取从机发送信息;否则,重新开始地址发送;
第三步:从机发送总线握手信号后,随即发送数据给主机。数据发送结束后,恢复等待接受状态。
整个通信过程中,所有从机通信协议全部一致,从机接受地址信息并判断后,如果和本机地址相符,则发送数据给主机。
按照系统中制定的通信协议,主机和从机的软件设计流程图如图5一图7所示。
从机作为测控前端,实现系统测控和数据传送,其通讯受控于主机,因而从机接收数据采用中断方式,即从机一旦接收到主机的呼叫信号,立即进入接收中断与主机通信,其工作流程图如图6、7所示。
在整个系统中,主从机均可作为发送端和接收端。同一时刻,网络中只能有一个发送端,因此,在设计通信协议的时候,注意状态的切换;另根据RS485状态工作时序特点,需要设计好收发之间的延时,否则会出现数据丢失现象。发送时,使能端置“1”,延时1 ms左右,再发送有效数据,一帧数据发送完毕后再延时1 ms,使能端置“0”。这样总线在状态切换时,使之有一个稳定的工作状态。
3 结束语
系统使用RS485半双工收发器,实现了基于CORTEX—M3的多机通信网络的组建,主机利用顺序方式采集数据,实现了一主多从的通讯方式。主从机通过状态的切换,都可以扮演发送端及接收端的角色,本质上还是使用了半双工通信的特点,利用软件进行任务调度,最终实现了星形网络多机通信。本文设计的RS485通信协议可移植性强、稳定性高、易扩展,可以广泛应用于工业控制、现场总线、远程监控等领域。