微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 基于ARM Cortex-M3的MODBUS协议实现及其应用

基于ARM Cortex-M3的MODBUS协议实现及其应用

时间:06-24 来源:电子科技 吴寅华 赵敏 点击:

对交流电机的运动控制。因此本文中变频调速系统为基于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每次接收中断的响应函数中,软件按时间先后顺序将数据写入接收缓冲区内,即队列的入队操作。

  3.2数据帧接收

  在发送完请求帧后,STM32F103ZET6通过GPIO操作总线的收/发使能端,将RS485总线由发送状态改为监听状态。在监听过程中SMT32F1-03ZET6完成变频器F2000-G应答帧的接收。

  由于MODBUSRTU应答帧判定采取了时间标记法,因此本程序中使用了TM2作为触发器进行时间管理。在接收过程中,USART3每次接收中断对TM2进行复位操作以避免TIM2的溢出中断;而当总线空闲了3.5个字符的发送时间后,TM2由于缺少USART3的复位,将产生溢出中断,在中断响应中完成关闭USART3结束数据通信和置应答帧接收完成标志位的操作。这种时间标记的程序均在后台中断中完成,主程序只需查询接收完成标志位即可。

  另一方面,由于从节点F2000-G可能存在着超时、无应答等通信故障,这就需要主节点STM32F103ZET6进行超时检测。在STM32F103ZE6中,SysTick作为系统定时器,在芯片启动后就以后台方式运行,按ms计时并实时更新系统时间。因此在MODBUSRTU的超时判断中,主程序可以利用该时钟,循环地查询当前时刻,并和发送完请求帧的起始时刻比较,若阈值时间200ms内仍然未收到请求帧,则认为通信失败,返回应答超时码。

  3.3数据帧处理

  在完成数据帧正确接收的基础上,STM32F0103ZET6必须进行应答帧处理,即MODBUS协议帧的解码。系统从接收缓冲区中读取应答帧。首先提取ADU进行地址码和CRC校验码的判定;其次,再从PDU中提取ADU进行数据长度、功能码、数据码的判定;最后,如果校验失败则返回相应的校验失败码,若校验成功,则继续从ADU/PDU中提取的数据进行处理,完成变频调速的各种功能操作。最终,整个协议实现的软件流程如图3所示。

4嵌入式变频调速系统

利用MODBUS协议,STM32F103ZET6可按照F2000-G提供的各种功能实现变频调速的功能,例如目标频率设置和变频控制等。常用功能命令的地址及其参数功能如表3所示。

  在实际应用中,STM32F103ZET6通过HMI接口实现人机交互,根据用户输入实现对交流电机的变频调速操作。例如,欲启动电机进行无损探伤试验时,程序对F2000-G的2000H处寄存器写入状态字0001H,启动电机正转运行。通信记录如下,主节点STM32F103ZET6启动变频器发送:01062000000143CA;如果从节点F2000-G操作正常则应答:01062000000143CA。

  当STM32F103ZET6正确读取完应答帧,并通过校验后,即可判断变频器已成功启动交流电机,机械试验系统开始运行并逐步加速到目标转速。

  5结束语

以STM32F103ZET6为核心的嵌入式系统,通过MAX3485与变频器F2000-G组成基于RS485的网络。软件部分介绍了MODBUS协议的特点及其组成,分析了MODBUS协议的实现原理,并结合嵌入式系统的工作特点实现了该协议的编程。基于MODBUS协议的嵌入式软件通过与F2000-G的通信实现了对机电试验装置的变频调速

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top