一种MODBUS协议实现方法
扫描二维码
随时随地手机看文章
摘要:针对变频器通信应用,介绍了MODBUS协议的特点及其组成;设计了RS485电路接口;并以ARMCortex-M3微控制器为核心,设计了MODBUS协议的实现方案。针对变频器F2000-G开发了嵌入式系统.实现变频调速功能,应用于无损检测试验仪。软件部分介绍了MODBUS协议的特点及其组成,分析了MODBUS协议的实现原理,并结合嵌入式系统的工作特点实现了该协议的编程。基于MODBUS协议的嵌入式软件通过与F2000-G的通信实现了对机电试验装置的变频调速控制。实践表明,该系统性能可靠、通信稳定,满足了无损探伤试验仪在转速为40~1 400r·min-1范围内变频调速的控制需求。
漏磁探伤作为非接触式的无损探伤技术,其具有检测速度快、灵敏度高、无需耦合剂、易于实现自动化等特点,是钢轨探伤技术的重点研究方向。为解决漏磁探伤研究中的实验仿真问题,研制了基于嵌入式系统的无损探伤试验仪,通过实现MODBUS协议与变频器通信,以此驱动交流电机与机械试验装置,完成运动控制并进行无损探伤试验。
针对无损探伤试验仪中变频器通信问题,依据MODBUS协议规定,利用RealView MDK开发了基于ARM Cortex-M3微控制器的嵌入式软件,实现了与变频器的MODBUS通信,完成变频调速的运动控制功能。
1 MODBUS协议
1.1 MODBOS协议简介
MODBUS是Gould Ine注册的通讯协议商标,该协议具有纠错能力强、数据传输量大、实时性好等特点,是工业自动控制领域使用较广泛的通讯语言,目前已成为我国工业自动化领域的一种国家标准。
MODBUS协议定义了一个控制器能识别的消息结构,它描述了控制器请求访问和应答回应其他设备的过程,以及错误检测和记录的规范,制定了报文字段和内容的公共格式。MODBUS属于应用层报文传输协议,其通信结构为一对多的主从查询模式,即主从Master-Slave模式。MODBUS网络上可以有多个从节点,但有且只能有一个主节点,主节点按照通信协议对从节点发出请求操作,从设备收到主节点的请求后,做出相应的响应再向主节点回复应答消息。
1.2 MODBOS协议组成
MODBUS协议具有两种传输模式:ASCII模式和RTU模式。ASCII模式中数据以ASCH字符码表示,通过冒号、回车字符判定数据帧的起始和结束,采用IRC数据检验;RTU模式中数据以非压缩BCD码表示,通过时间标记实现数据帧起始判定,采用CRC数据校验,具有数据吞吐量高、传输稳定、通信效率高的优点。
由于变频调速系统的安全性能要求较高,所以选择通信效率高、时间管理严格的RTU传输模式。在协议帧组成上,MODBUS定义了一个基本的,与通信层无关数据协议单元PDU(Protocol Data Unit),并通过在PDU上添加地址、校验等附加域定义了应用数据单元ADU(ApplicaTIon Data Unit),形成完整的数据帧,MODBUS RTU数据帧组成如表1所示。
在数据帧起始判定上,MODBUS RTU采用了如图1所示的时间标记方法,即相邻的两帧之间必须间隔至少为总线发送3.5个字符的时间,该时间称为T3.5。
在MODBUS数据帧中,功能码是指主节点对从节点的请求操作类型,常用的MODBUS功能码及其功能如表2所示。
MODBUS RTU采用循环冗余校验码CRC(Cyclic Redundancy Check)是一种被广泛采用的多项式编码,编码简单且误判概率很低,在串行通信、以太网、MPEG解码等通信领域中得到了广泛应用。在通信过程中,发送方用待发送数据除以一个收发双方约定的生成多项式,将得到余数作为CRC校验多项式,附加在待发送数据尾部作为一个整体发送给接收方。接收方将收到的数据同样除以生成多项式,若余数为零刚传输正常,若余数不为零则传输出错。
2 电路连接及硬件参数
在无损探伤试验仪中,选用基于ARM Cortex-M3内核的STM32F103ZET6微控制器作为处理核心,而变频器采用了烟台惠丰公司的F2000-G矢量变频酪。STM32F103ZET6通过基于MAX3485的RS485链路与F2000-G相连,按照MODBUS协议与之通信,实现变频调速的控制功能。RS485接口电路如图2所示,STM32F103ZET6的USART3的Uart3Rx、Uart3Tx连接到MAX3485的RO、DI以进行RS232的数据收发;STM32F103ZET6的GPI01以I /O模式与MAX3485的接收使能端RE、发送使能端DE相连,对RS485半双工总线的通信方向进行统一控制;而MAX3485的差分信号端A、B则通过插座与F2000-G相连,同时为保证通信质量,消除总线上的信号反射,需在RS485网络终端的差分总线间串联50Ω的电阻R1。
在外设初始过程中,首先需要初始化USART3,按照F2000-G要求,采用的通信参数为:波特率9600kb·s-1,8位数据位,2位停止位,无奇偶校验;其次,还需初始化STM32F103ZET6的GPI01为输出模式,以此控制RS485的通信方向;再次,由于MODBUS RTU采用时间标记的方式进行协议帧的起始判定,所以使用STM32F103ZET6的定时器TIM2用以判定数据帧的结束,而MODBUS RTU中T3.5在工程应用通常取4个字符发送时间,因此设置TIM2的溢出时间为3ms;最后,为处理可能的总线延迟等通信故障,本文使用了系统定时器SysTIck作超时判定,综合考虑到变频器动作时间、通信延迟等因素,超时判定的时间阈值取200ms。
3 MODBUS协议实现
在变频调速系统中,STM32F103ZET6作为主节点负责变频调速系统的功能控制,而变频器F2000-G作为MODBUS从节点负责响应主节点的请求,完成对交流电机的运动控制。因此本文中变频调速系统为基于MODBUS协议的主节点程序实现,MODBUS协议主要分为3部分:数据帧发送,数据帧接收和数据帧处理。
3.1 数据帧发送
发送数据时,必须将请求操作封装成标准的MODBUS协议帧才能成功进行发送,即MODBUS协议的编码。由前所述,数据协议单元PDU包括功能码和数据码,PDU的封装可以归纳为将操作类型和操作参数作为参数封装成PDU。构建PDU之后,在数据帧头部加入从机的地址,再将CR-C16校验值写入数据帧尾部即构成完整的应用数据单元ADU。
MODBUS中使用CRC16作为冗余校验,按照循环冗余检验算法,使用标准16位生成多项式,可对任意长度的信息字段校验出一个16位的校验码。其程序流程可描述如下:
(1)初始化一个16位寄存器,所有位进行置1。
(2)该16位寄存器与待校验数据串中第1Byte的数据进行异或,结果存回该寄存器。
(3)该16位寄存器右移一位。
(4)若该寄存器右移移出位为1,则与校验多项式0A001H异或,否则重复步骤3。
(5)重复步骤3和步骤4直到该Byte的8位数据均处理完毕。
(6)取数据串中下一个数据与该16位数据进行异或结果存回寄存器。
(7)重复步骤3~步骤6,直到待校验数据串中所有的字节数据均处理完毕。
(8)该16位寄存器中数据即CRC16的最终校验结果,加至数据帧末端。
因为STM32F103ZET6芯片内USART3无硬件FIFO的特点,所以需要软件上使用队列的数据结构作为发送缓冲和接收缓冲,以此进行串行口的收发任务。因此,在工作模式上USART3的发送采用查询式发送,一次性将发送缓冲区中的数据依次循环地发送出去,即队列的出队操作;而其接收模式为中断式,在USART3每次接收中断的响应函数中,软件按时间先后顺序将数据写入接收缓冲区内,即队列的入队操作。