Modbus协议在多机系统开发中的应用

发布者:小星星龙猫最新更新时间:2014-10-17 来源: dzsc关键字:Modbus协议  多机系统  CPU模块 手机看文章 扫描二维码
随时随地手机看文章

  1 引言

  在自控装置和电力系统微机综合保护以及其它工业自动化控制领域,微控制器的应用越来越 广泛,其装置的复杂性也越来越高。为了解决其开发对象实时多任务性的要求,单CPU、单个开发 的模式将被多个、多类型CPU 和多人协同开发的模式所代替,在这新的开发模式中,面临一个新 问题——在实施信息交互的过程中如何将实现CPU 之间信息交互的软硬件标准化,这是关系到 该模式能否成功实施的关键。在众多的通信方式中,基于UART 的RS-485 串行通信模式以其连 线简捷、高可靠性以及可带动多CPU 的能力而被广泛采用。在软件通信协议的选择上,Modbus 协议由于其通用、成熟的调试软件,为用户使用提供了诸多优势。因此,在开发新型电动机综合 保护装置的过程中,采用RS-485 串行通信方式和Modbus 通信协议,实现了多CPU 之间的数据和 控制命令的信息交互。为了增强串行通信的高效、协调性,笔者在通信机制的软硬件结构上采取 了很多措施,并取得了很好的效果。在调试系统通信阶段,使用了各CPU 模块先与Modbus 标准 测试软件通信,之后再互相联调的方法,大大提高了协同开发的效率。实践证明,该设计思想简化 了系统的结构,大大提高了装置的运行效率和可靠性。

  2 电动机综合保护装置的特点

  电动机综合保护装置除综合保护功能以外,兼有测量、远动和通信的功能;大屏幕的汉字液 晶显示,可以实现友好的人机界面;利用CAN 总线,与监控主机进行通信,从而构成分级分散式的 变电站综合自动化系统的子系统。由于装置需要实现多任务,为了优化系统功能, 采用了多CPU 的系统结构设计方法。其中一个CPU 负责定时采样脉冲发送;主CPU 模块负责数据处理、电量计算、故障判断和开关操作;而板模块上CPU 负责人机交互,并实现与主保护模块和监控主机的通 信任务。各个CPU 模块有明确的任务分工,研制时也容易实现多人协同开发。在整个构成中,串 行通信沟通了主CPU 和面板CPU,使人机交互成为可能,因而有着重要的地位。建立合理的通信 机制则是串行通信部分的核心的所在,它决定着通信的协调性和系统开发后期调试的效率。

  3 通信机制介绍

  3.1 通信机制硬件设计

  本系统通信机制的提出以高效、可靠为目的。RS-485 为半双工结构,现场中比全双工往往更接 近于实用,在此采用只有2 条信号线的简易型连接。系统接口电路图由图1 所示,主保护模块上 的8051 单片机输出的TTL 逻辑电平通过光电隔离后,由MAX485 芯片转换为RS-495 电平,再由面 板模块上的MAX485 芯片转换为TTL 逻辑电平,由8031 单片机读取。在8051 单片机一侧,使用并 行输入输出口2 的一位P2.7 对MAX 输入使能端RE、输出使能端DE 进行控制。由图1 可知,当P2.7 输出高电平时,RE 使能,单片机一侧接收数据;当P2.7 输出低电平时,DE 使能,单片机一侧发送数 据。这样,避免了盲目发送造成的数据叠加丢失现象,通信质量高,通信速度也能得到保证。


  3.2 通信协议

  为了保证保护装置中两个模块之间能够正确地传递数据,必须有一套关于信息传输的模 式、数据格式和内容等的规定,即规约或通信协议。由于没有现成的较成熟的调试软件,主 CPU 模块基本是黑匣子,系统联调时的困难较多且难以克服。因此,采用了当前流行的 Modbus 通信协议,并结合本装置的特点加以简化,从而实现了模块间的通信,事实证明效果 很好。Modbus 的通信方式为主从方式,主方首先向从方发送通信请求指令,从方根据请求 指令中的功能码向主方发回数据。每个从方都有自己独立的地址,主方所发的请求帧和从方 所发的应答帧都是以从方地址开头的。从方只读发给自己的指令,对以其他从方地址开头的 报文不作应答,它是通过8051 的串行口工作方式2 或方式3 来实现的,这种一问一答的通 信模式,大大提高了通信的正确率,本文装置中采用了Modbus 的RTU 传送方式。

  4 提高通信可靠性的措施

  Modbus 报文末的两个字节为校验字节,RTU 方式通信采用CRC-16 位循环码冗余校验, 它的编译码设备比较简单,误判概率很低,可通过计算法和编程法实现,几种方法如下:

  4.1 基本算法(人工笔算)

  以CRC16-CCITT 为例进行说明,CRC 校验码为16 位,生成多项式17 位。假如数据流为 4 字节:BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0];

  数据流左移16 位,相当于扩大256×256 倍,再除以生成多项式0x11021,进行不借位的除 法运算(相当于按位异或),所得的余数就是CRC 校验码。 发送时的数据流为6 字节:BYTE[3]、BYTE[2]、BYTE[1]、BYTE[0]、CRC[1]、CRC[0]。[page]

  4.2 计算机算法1(比特型算法)

  1)将扩大后的数据流(6 字节)高16 位(BYTE[3]、BYTE[2])放入长度为16 的寄存器;

  2)如果寄存器的首位为1,将寄存器左移1 位(寄存器的最低位从下一个字节获得),再与生成多项式的简记式异或;否则仅将寄存器左移1 位(寄存器的最低位从下一个字节获得);

  3)重复第2 步,直到数据流(6 字节)全部移入寄存器;

  4)寄存器中的值则为CRC 校验码CRC[1]、CRC[0]。

  4.3 计算机算法2(字节型算法)(256^n 表示256 的n 次方)

  把按字节排列的数据流表示成数学多项式,设数据流为BYTE[n]BYTE[n-1]BYTE[n-2] ...BYTE[1]BYTE[0],表示成数学表达式

  BYTE[n]×256^n+BYTE[n-1]×256^(n-1)+ ...+BYTE[1]*256+BYTE[0],在这里+表示为异或运算。设生成多项式为G17(17bit),则CRC 码为CRC16。

  CRC16=(BYTE[n]×256^n+BYTE[n-1]×256^(n-1)+...+BYTE[1]×256+BYTE[0])×25

  6^2/G17,即数据流左移16 位,再除以生成多项式G17。

  经过推导可知,BYTE[n-1]字节的CRC 校验码等于上一字节CRC 校验码Y[n]的高8位(YH8[n])与本字节BYTE[n-1]异或结果。

  字节型算法如下:

  1)CRC 寄存器组初始化为全"0"(0x0000)。

  2)CRC 寄存器组向左移8 位,并保存到CRC 寄存器组。

  3)原CRC 寄存器组高8 位(右移8 位)与数据字节进行异或运算,得出一个指向值表的索引。

  4)索引所指的表值与CRC 寄存器组做异或运算。

  5)数据指针加1,如果数据没有全部处理完,则重复步骤2)。

  6)得出CRC。

  5 提高通信效率的措施

  5.1 将通信的接收和发送两个任务独立

  8051 单片机可以使用中断的方法通过串行口发送和接收数据,串行口控制器SCON 可 以初始化、可以位寻址,当串行口发生中断请求时,SCON 低两位能锁存发送中断和接收中 断,当CPU 向串行口的发送数据缓冲器SUBF 写入一个数据或字符时(指令MOV SUBF, A),发送器就开始发送,当发送完一帧数据后,由硬件置“1”TI 标志,表示串行口正在向 CPU 请求中断,请求发送下一帧数据。同样,若串行口接受器允许接收,当接收器接收到 一帧数据,置“1”RI 标志,表示串行口正在向CPU 请求中断,请求CPU 到接收数据缓冲器 读取数据。

  5.2 缩短中断时间

  由于设计软件结构时使用了多个中断,为了保证程序的可靠运行,减少不同任务相互冲 突的机率,在编制软件时尽可能简练各种中断的任务,缩短中断执行时间。在通信中断子程序 中,进入中断后执行必要的任务,如:清串行口控制寄存器中相应的状态位,将刚接收到的字 符或需要发送的字符从缓冲区内读出或写入缓冲区,已接收或发送字符数增1 等,之后便立 即退出中断。其它任务如判断帧的有效性、对接收帧命令(遥测、遥控命令)的应答,准备 发送帧等,都放在主程序中完成。

  5.3 有效地判断帧结束,防止通信停滞

  利用单独的软件定时器,来判断一帧接收报文结束,可以防止若报文接收不完整,该帧通 信任务无法结束而影响下一帧的接收。由于一帧报文中字节与字节之间的时间间隔和帧与帧 之间的时间间隔相比要小得多,因此每当接收一个新字节,就启动软件定时器开始计时,定时 器的时间设定为帧与帧的最小时间间隔。波特率不同,该时间间隔也不同。若不到预定的时间内又接收到下一个字节,则说明一帧报文未结束,定时器重新计时;若定时器顺利计数到预 定时间,就会触发相应的中断号,在该定时器中断子程序中设定帧结束标志字节,表明一帧报 文接收完毕。当主程序内检测到一帧报文接收完毕后,会通过核查从方地址及循环冗余校验 字节是否正确来判断该帧的有效性。若确定接收到的是一帧发送给已方的正确报文,则会根 据报文内的功能码对该帧命令进行相应的处理,并准备发送帧,当从方接收报文不正确时发 回出错帧,如果从方收到的报文校验不正确,可采取不作应答的方式,主方若在规定时间内 未收到从方的应答报文时,将重发请求报文;若多次未收到从方应答报文,则报通讯故障。

  5.4 通信速率的确定

  由于所用的装置都在同一机箱内,模块与模块之间的间距很短,而Modbus 是基于RS485 的长距离通信,可以不考虑距离对通信波特率的影响,并且由于采用主从式通信模式,不会出 现线路堵塞现象。因此从通信效率来看,只要不超过模块所使用芯片对最高波特率的限制, 则设定的波特率越高,信息交互越快,通信效率也越高,由于设定通信双方波特率完全一致, 可以使接收端对每一个数据位的采样都发生在位周期的中点,从而实现可靠通信。

  5.5 合理的调试方法

  调试时先将各个CPU 模块分别通RS485/RS232 数据转化模块与微机进行通信测试,成 功后再进行模块间联调,大大提高了联调的效率。在调试各模块与微机通信的过程中,微机 使用Modbus 调试软件,模仿主方的通信过程,主动向从方索要信息,整个接收、发送过程 都是透明的、清晰的,从而使得模块中存在的问题得以及时解决;联调时,利用总线监控软 件观察双方的数据,及时地发现问题和解决问题。

  6 本文的创新点

  第一,本文在保护装置中的采用Modbus 这种通用的工业标准,所需的工具软件可以直 接从相关网站获得,不需知识产权方面的花费;第二,保护装置实施多任务化,利用Modbus 协议创建了CPU 模块间合理的联调机制,大大提高了系统协同开发的效率。

关键字:Modbus协议  多机系统  CPU模块 引用地址:Modbus协议在多机系统开发中的应用

上一篇:太阳能发电系统控制板的研发
下一篇:基于数控设备WEB服务网关的软硬件设计

推荐阅读最新更新时间:2024-03-16 13:43

基于Modbus协议实现单片与PLC之间的通讯
1 引言 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机 作为其核心控制器,以实现实时快速处理。 PLC和单片机结合不仅可以提 PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以 Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2 Modbus通讯协议 Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信
[应用]
STM8单片串口同时识别自定义协议和Modbus协议
  在单片机开发中,串口是最常用的和外界交换数据的渠道,要使用串口,那必不可少的就是通信协议,通信协议就是单片机和外界通信的语言,要想正常和其他设备正常交流,首先语言必须相通。   在实际开发过程中由于各种原因,导致很多时候单片机和外界其他设备协议不兼容,在使用的时候就比较麻烦。比如单片机要和两个设备通信,但是这两个设备的通信协议的不一样,在使用时单片机就必须使用两个串口分别和两个设备通信。如果这两个设备同时使用时还不感觉到资源浪费,如果每次只接一个设备,那么另一个串口也不能作为其他功能使用,还得留着备用。这样的话单片机的资源就被白白浪费掉了。于是想着能不能在一个串口上支持两个协议,让单片机自动去识别接收到的数据使用的是哪个协
[单片机]
STM8单片<font color='red'>机</font>串口同时识别自定义协议和<font color='red'>Modbus协议</font>
单片通信系统稳定性的研究
概 述 单片机在当今的仪表及工业测控设备上应用非常广泛。其功能强大、外围接口电路简单,在构成分布式系统时,其优越性更显突出。在分布式系统中,分机常采用多机通信方式,由于RS-485(以下简称485)通信接口的传输距离远,连线少,所以被认为是一种很好的通信模式。然而,在实际应用过程中,若使用不当,485接口会出现很多问题:首先是器件经常损坏,有时对电源进行几次连续的开关机操作之后,通信电路就会失控;再有,在通信过程中,数据传输经常出现误码,而且误码率很高。在系统调试过程中,有两次记录可以证明这一点,记录如表1所列。 表1 调试记录 序号 1 2 3 4 5 6 7 8 9 10 发送 1
[单片机]
单片<font color='red'>机</font><font color='red'>多</font><font color='red'>机</font>通信<font color='red'>系统</font>稳定性的研究
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

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

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