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

发布者:RadiantGlow最新更新时间:2012-04-10 来源: 电子科技 关键字:ARM  Cortex-M3  MODBUS协议 手机看文章 扫描二维码
随时随地手机看文章

漏磁探伤作为非接触式的无损探伤技术,其具有检测速度快、灵敏度高、无需耦合剂、易于实现自动化等特点,是钢轨探伤技术的重点研究方向。为解决漏磁探伤研究中的实验仿真问题,研制了基于嵌入式系统的无损探伤试验仪,通过实现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所示。

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

在数据帧起始判定上,MODBUS RTU采用了如图1所示的时间标记方法,即相邻的两帧之间必须间隔至少为总线发送3.5个字符的时间,该时间称为T3.5。

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

在MODBUS数据帧中,功能码是指主节点对从节点的请求操作类型,常用的MODBUS功能码及其功能如表2所示。[page]

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

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。

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

在外设初始过程中,首先需要初始化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每次接收中断的响应函数中,软件按时间先后顺序将数据写入接收缓冲区内,即队列的入队操作。[page]

3.2 数据帧接收

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

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

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

3.3 数据帧处理

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

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

4 嵌入式变频调速系统

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

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

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

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

5 结束语

以STM32F103ZET6为核心的嵌入式系统,通过MAX3485与变频器F2000-G组成基于RS485的网络。软件部分介绍了MODBUS协议的特点及其组成,分析了MODBUS协议的实现原理,并结合嵌入式系统的工作特点实现了该协议的编程。基于MODBUS协议的嵌入式软件通过与F2000-G的通信实现了对机电试验装置的变频调速控制。实践表明,该系统性能可靠、通信稳定,满足了无损探伤试验仪在转速为40~1 400r·min-1范围内变频调速的控制需求。

关键字:ARM  Cortex-M3  MODBUS协议 引用地址:基于ARM Cortex-M3的MODBUS协议实现及其应用

上一篇:ARM及ZigBee技术实现智能家居控制器的设计
下一篇:基于ARM9的数控铣床系统设计方案

推荐阅读最新更新时间:2024-03-16 12:57

基于ARM11的无线视频监控系统
  1 引言   随着无线网络的普及,ARM 处理器运算的能力不断地增强以及计算机处理图像的技术不断地提高,基于ARM 的视频监控正越来越广泛的应用于学校,社区,酒店,网吧,医疗等各种各样地领域。传统的视频监控系统布线复杂,设备庞大,智能化低,以及软硬件资源得不到充分的发挥。而ARM 嵌入式系统的小型化、占用空间小、成本低廉、结构紧凑、支持无线网络等特点,使得利用S3C6410 的ARM11+linux系统构成各种各样的无线网络数字监控系统具有广泛的应用价值。   2 系统整体设计   2.1 硬件总体设计   本系统采用韩国三星公司ARM11 内核的S3C6410 作为微处理器,该款处理器体积小,尺寸仅相当于一个48mm
[单片机]
基于<font color='red'>ARM</font>11的无线视频监控系统
ARM架构之异常与中断
ARM920T架构中有7中运行模式: 1.用户模式(user) 2.快中断模式(fiq) 3.中断模式(irq) 4.超级用户模式(svc) 5.中止模式(abt) 6.系统模式(sys) 7.未定义模式(und) ARM在处理异常和中断的时候都会到中断向量表中寻找相对应的异常与中断处理程序地址,通过跳转指令去执行相关的异常与中断的处理程序。 在ARM检测到异常或中断时,系统会进入相对应的运行模式,如中断进入IRQ模式,具体进入什么中断可以通过读取CPSR寄存器的值来判断。在进入相关的运行模式中,各个模式都有自己专属的寄存器,不同于通用寄存器,这些是只有进入该模式才有的寄存器,所以在进入异常中断处理程序之前,要保存除了专用
[单片机]
<font color='red'>ARM</font>架构之异常与中断
ARM:创新可穿戴式装置酝酿无限商机
可穿戴装置无疑是今年科技产业界最红的话题之一,市场上已经出现各种智慧手表、健身腕带等等相关产品,而且参与厂商不乏Samsung、LG以及Sony等智慧型手机大品牌。不久前笔者有机会与正锁定可穿戴式装置市场的ARM行动部门行销经理 David Maidment 见面,他分享了对于此一新兴市场的几点看法。 问:ARM的技术将如何呈现在新一代的可穿戴式装置市场上? Maidment答:我们正在与各家原厂、晶片业者、服务供应商等寻求采用那技术的对象合作,主要锁定低功耗的ARM IP,包括Cortex M、Cortex A 系列处理器,Mali绘图处理器,以及可提供可穿戴式装置重要安全性功能的TrustZone技术。
[物联网]
linux-2.6.26内核中ARM中断实现详解
看了一些网络上关于linux中断实现的文章,感觉有一些写的非常好,在这里首先感谢他们的无私付出,然后也想再补充自己对一些问题的理解。先从函数注册引出问题吧。 一、中断注册方法 在linux内核中用于申请中断的函数是requeST_IRq(),函数原型在Kernel/irq/manage.c中定义: int request_irq(unsigned int irq, irq_handler_t handler, unsigned lONg irqflags, const char *devname, void *dev_id) irq是要申请的硬件中断号。 handler是向系统注册的中断处理函数,是一个回调函数,中断发
[单片机]
ARM aarch64汇编学习笔记(二):ARM DS-5模拟器安装和使用
工欲善其事,必先利其器。 使用Qemu 虽然可以进行模拟开发,但在Qemu调试汇编有一些困难。 DS-5 (即ARM Development Studio 5) ,是一款针对 ARM 支持的 Linux 和 Android 平台的全面的端到端软件开发工具套件。 DS-5 安装 从官网选择一个ARM DS-5版本进行下载 我选择的版本是5.26.2, 已经支持Arm v8了。 下载完成后,解压, 点击setup.exe 进行安装, 安装完成后需要添加license, 否则项目无法编译。 license添加完成后既可以正常使用。 ##使用DS-5 创建程序 首先新建一个空的C project, 输入project
[单片机]
<font color='red'>ARM</font> aarch64汇编学习笔记(二):<font color='red'>ARM</font> DS-5模拟器安装和使用
linux 2.6.32 在arm9(s3c2440)平台的移植
板子用的友善的mini2440, 起初按照光盘提供的手册, 照猫画虎,,,,,,,,,但是遇到各种问题, 很多未解决.....原因是还没理解每层目录的Makefile和Kconfig的关系, 以及在Kernel Configure菜单树中对应的选项, 以及对nand_flash设备的结构体的意义没搞清楚,~ so~ 在http://www.kernel.org/ 下载2.6.32的源代码. 编译器用的arm-linux-gcc 4.1.2 . 1 内核代码/uboot代码中中机器码的定义位置,在/root/linux-2.6.32/arch/arm/tools/mach-types 和 uboot/include/asm-
[单片机]
一种CCD微米级圆钢光电测径仪的研究设计
  摘要: 提出了线阵CCD微米级非接触式圆钢光电测径仪的设计方案,并以ARM微处理器和单片机为核心实现了设计;解决了传统圆钢测径方法接触式测量的局限问题,具有结构简单、小型化、非接触、精度高等特点。实验结果表明,该系统实现了CCD非接触式圆钢光电测径,测量结果准确、精度高、稳定性好,且可直接方便地显示测量结果。    引言   在钢铁工业生产中传统的圆钢测径方法有很多,如利用尺寸工具抽样检测、电磁式接触测量等。用尺寸工具测量,精度不够且速度很慢;用电磁式测量是接触式测量,测量比较麻烦且精度和速度也难以得到保证。CCD电荷耦合器件广泛应用于图像扫描、非接触式尺寸检测、位移测定条形码读出等光电探测和光电成像领域,具有自扫描、精度
[测试测量]
一种CCD微米级圆钢光电测径仪的研究设计
基于ARM7的蓝牙接入点的硬件系统结构和软件流程
  本文着重介绍了蓝牙接入点的硬件系统结构和软件流程,并针对在工业现场上使用蓝牙接入点将阀门、流量计、温度变送器等几个蓝牙设备连接到工业以太网中,实现了带蓝牙通信模块的工业设备和现有的有线网络的通信。   1引言   在工业现场中,由于有些环境比较恶劣,布线不方便等因素可以采用蓝牙无线通信技术来实现数据的通信。同时,工业现场中有很多以不同方式互连的设备,其中包括非智能化简单数据连接单元 (I/O)、智能化设备 (比如智能传感器、单回路控制器和 PLC)和监控系统 (作为 HMI使用,用于数据记录和监控 )等。这些设备大都是以各种不同的通信协议和媒介来互连的,其中有些就可以用蓝牙无线技术代替。本文以 AT91R40008为例,结
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved