彭伟伟
(武汉城市职业学院 电子信息工程学院,湖北 武汉 430064)
基于PIC微控制器的RS-485/Modbus总线系统设计与实现
彭伟伟
(武汉城市职业学院 电子信息工程学院,湖北 武汉 430064)
针对工业控制领域的热点现场总线RS-485/Modbus,分析其典型的RTU通信模式报文协议,基于PIC微控制器与MAX487收发器设计具体的报文处理程序流程,所编写的系统程序通过了主机与多个从机之间的数据传输与显示测试,为Modbus现场总线系统的开发设计提供重要参考.
PIC;RS-485/Modbus;MAX487;现场总线;系统设计;仿真测试
现场总线已成为工业控制领域技术发展的重要热点,1979年由Modicon公司推出的总线协议Modbus,由于协议简单、易于布署、性价比高、可靠性强等优点,在工业自动化领域获得了越来越广泛的应用,已成为应用于控制器的一种通用语言和通用工业标准,不同厂商生产的控制设备通过Modbus标准可以连成工业网络,进行集中监控.
Modbus是一个应用层报文传输协议. 串行链路上的Modbus系统可以使用不同的物理接口作为其物理层标准,最常用的接口是基于RS-485的两线制接口,通信距离可达1200m左右. RS-485仅对电气特征作出了规定,在RS-485网络中通信时,需要对数据格式、传送速度、传送步骤及纠错方式等内容作统一规定. Modbus协议要求网络中的每个从机必须有自己的唯一地址,能识别发给自己的消息,并能决定执行何种动作. Modbus通信为主从式(Master/Slave Architecture),总线中只能有一个主机控制整个网络,主机可以主动发出命令,从机收到呼叫本机命令时才能回应,从机彼此之间不能直接进行通信,需要交换数据时必须经过主机间接实现. 网络中各从机的唯一地址或编号范围为1~247(0x01~0xF7),其中地址0(0x00)用作网络广播地址,所有从机均可识别该地址.
Modbus网络中的控制器可配置为两种通信模式:ASCII与RTU(Remote Terminal Unit). 网络通信以帧作为一个完整的单位传送数据. 图1给出了本文讨论的RTU通信模式的帧序列与帧格式示意图.
图1 RTU帧序列与帧格式示意图
RTU通信模式的消息帧以连续的字节流传输,该模式没有专门的启始和结束标识符. 如图1所示,消息发送至少要以3.5个字符时间( T1-T2-T3-T4)的停顿间隔开始,至少以3.5个字符的停顿时间结束,大于
3.5 个字符时间表明一个报文结束或一个新报文开始. RTU模式传输的第一个数据字段(1字节)是设备地址,一个数据帧中首先发送的设备地址将被所有工作站接收到,每个工作站都将判断该地址是否与本机地址匹配,匹配者将继续接收后续字节,不匹配者将重新开始等待下一新消息帧.
在接收一帧数据过程中,如果在该数据帧结束之前遇到超过1.5个字符时间的停顿间隔,这表明字节间隔时间超时,接收设备将清空接收缓冲(将接收缓冲索引归0),并假定下一字节是新消息帧第一字节(即地址字节).
一帧数据全部接收完毕之后,为判断该数据是否存在错误,还需要进行CRC-16-IBM校验,校验的生成多项式为:G(x) = X16+ X15+ X2+ 1,如果校验通过则表明数据传输正确,可以进行下一步的数据处理或显示输出. 否则,系统将抛弃接收到的数据,等待在下一循环中重发数据或立即请求重发.
图2给出了本文所设计的Modbus总线系统通信测试电路,主机控制器为PIC16F877A,4个从机控制器为PIC16F688,各从机可通过软件预设或外部拨码开关设定自身的唯一地址. 通过拨码开关将各从机地址设为0x01~0x04. 主机与所有从机之间通过收发器MAX487进行RS-485通信.
图2 基于PIC与RS-485的Modbus总线系统测试电路
图2中MAX487构成的半双工网络支持多点数据通信,拓扑结构采用终端匹配的总线型结构. 电路中DE、RE引脚连接在一起,高电平时使能发送,低电平时使能接收. MAX487采用平衡发送和差分接收方式实现通信,发送端将串口的TTL电平信号转换成差分信号由A、B两路输出,接收端再将差分信号还原成TTL电平信号. 传输线通常使用双绞线,且采用差分方式传输,具有很强的抗共模干扰能力.
测试电路中主机将向各从机发送其AN0通道A/D转换命令(功能码),各从机将本机A/D转换数据分别发送给主机,主机将各从机的A/D值换算为模拟电压值(0.00~5.00V)刷新显示在液晶显示屏上.
Modbus RTU通信模式的描述较为简单,但其具体实现却比较复杂,为了清晰的描绘整个算法实现过程,图3给出了网络中主机的Modbus RTU模式报文处理流程,其中虚线仅用于表示变量标识的改变将影响箭头所指向区域的判断及运行分支.
图3 主机Modbus RTU通信模式报文处理流程图
在Modbus RTU通信模式下,设计协议数据处理程序需要解决定时问题、数据发送/接收问题及CRC校验处理问题,下面对这三个问题逐一进行分析:
1) 1.5/3.5字符的字节间隔定时与帧间隔定时问题:TIMER1溢出中断函数设计.
定时控制涉及RTU模式下的数据帧与帧之间的界定问题以及帧内字节间的界定问题. 本文用PIC微控制器的TIMER1定时器来控制和标识RTU帧中1.5字符时间间隔(数据字节间隔)和3.5字符时间间隔(帧间隔),系统拟配置的波特率为19200bps,每比特时间为:1/19200 ≈ 52ms,系统定义的每字符占用的比特数为1+8+2 (1个起始位,2个停止位),故每字符时间为11×52=572ms.
为实现两种类型的定时控制,系统启用了TIMER1定时器溢出中断;为处理字节接收问题,系统启用了串口接收中断. 由于串口接收中断是在接收1个字符后才判断时间间隔,因此定义1.5字符时间与3.5字符时间时应分别增加了1个字符时间,于是有帧间隔时间与帧内字节间隔时间分别为:572×(3.5 + 1) ≈ 2574ms,572×(1.5 + 1) ≈ 1430 ms. 另外,为避免从机过长时间没有响应而阻塞系统,主程序还启用TIMER0进行10ms的从机超时定时.
2) 数据发送/接收程序设计:串口发送函数与串口接收中断函数设计.
数据帧的发送操作很容易处理,所组织的一帧数据可以直接通过PIC的串行端口输出. 数据接收则相对复杂很多,承担这一工作的串口接收中断函数不是简单的读取串口数据字节并保存到RAM缓冲区,其更重要的工作是与TIMER1定时器溢出中断配合,根据中断控制的两种类型的定时操作,判断当前接收的是一帧数据的开始还是结束,是否是一个数据帧内的连续字节,字节间是否超时等. 处理程序应根据判断结果,将数据保存到正确的缓冲位置. 如遇异常,应复位RAM缓冲索引(相当于清空缓冲),并按指定的定时类型重置定时器,例如重设“帧”定时操作为:Set_TIMER1(FRAME_SPAN).
3) 数据校验:CRC-16-IBM循环冗余校验算法设计.
RTU通信模式中每一数据帧最后2字节是CRC-16-IBM校验码,在读取一帧中的所有N个数据字节以后,可令所有字节全部参与CRC16校验,如果所得结果等于0x0000,则认为数据传输正确,否则判定为传输出错,也可以仅令前N-2个字节参与CRC16校验,所得结果如果和数据缓冲内最后两字节对应相等,同样可以判定数据传输正确. 设计CRC16校验算法时,可选择串行移位校验算法、全字节查表法、半字节查表算法等.
对于测试电路中四个从机的报文处理设计,两个中断函数(定时器溢出中断/串口接收中断)与主机基本相同,但从机的主程序内没有从机扫描循环,它在main函数的主循环之前初始化相关配置,并开中断,然后在主循环内等待由串口中断置位的接收成功标识(Recv_OK),在该标识置位后,它首先对所接收的主机数据帧进行CRC-16校验,通过检验后,再根据指定的功能码进行相应操作. 本文指定的功能码为:ADC_REQ(请求A/D转换),从机将启动A/D转换获取本机AN0通道的A/D值(2字节),然后再向主机发送数据帧,包括本地地址、功能码、2字节A/D值、2字节CRC校验码.
本节仅列出定时器设置宏定义、主机定时器溢出中断与主机串口接收中断函数、CRC16校验函数. 其中:F_T1为当前定时类型标识,值为0时表示帧定时,为1表示字节定时. T_FRAME与T_BYTE分别为帧及字节定时到达标识符(值为1时表示到达). 限于篇幅,本节略去了其他部分程序.
通过分析RS-485/Modbus总线系统典型的RTU通信模式报文协议,基于PIC微控制器与RS-485收发器MAX487,设计了报文协议处理程序流程,基于HI-TECH PICC编译器编写的C程序在主机与从机上通过了运行测试,取得了理想的运行效果,为RS-485/Modbus系统开发提供了重要参考.
[1] 文小玲, 余 飞, 卢圣文. 基于Modbus协议的串口通信软件设计[J]. 湖南工业大学学报, 2008, 22(6): 100-102.
[2] 张 桓, 赵树忠. 基于Modbus协议的单片机与触摸屏通讯系统设计[J]. 河北理工大学学报: 自然科学版, 2010, 32(4): 82-87.
[3] 张丹红, 刘 波. 基于RS-485总线的多电机同步控制系统研究[J]. 计算机技术与发展, 2010, 19(9): 228-231.
[4] 罗 勇, 贾建华, 黄俊杰. 利用PIC单片机和Max1480进行数据采集的通讯[J]. 自动化与仪表, 2007(4): 39-44.
[5] 汪献忠, 刘 巍, 吕运朋. 基于Modbus 协议的工业智能通讯模块的设计[J]. 仪表技术与传感器, 2006(6): 47-49.
[6] 朱小超, 徐雪春. 基于Modbus协议的上位机与单片机通信的实现与仿真[J] 仪表技术与传感器, 2011(6): 65-68.
(责任编辑:饶 超)
RS-485/Modbus Bus System Design and Implementation Based on PIC Micro Controller
PENG Wei
(School of Electronic and Information Engineering, Wuhan City Vocational College, Wuhan 430064, China)
Aiming at the hotspot of field bus RS-485/Modbus in the domain of industrial control, it analyzes and studies its typical RTU mode of communication message protocol. Based on PIC micro controller and MAX487 transceiver, it designs a specific message processing procedures. The system program passes the data transmission and display test between the master and a number of slavers, and it provides an important reference for the development and design of Modbus field bus system.
PIC; RS-485/Modbus; MAX487; Field bus; System design; Simulation test
TP368.2;TP274+.2
A
1009-2854(2012)02-0017-04
2011-11-15
彭 伟(1972— ) , 男, 湖北武汉人, 武汉城市职业学院电子信息工程学院副教授.