×
嵌入式 > 技术百科 > 详情

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

发布时间:2020-06-22 发布时间:
|

  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 模块间合理的联调机制,大大提高了系统协同开发的效率。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
无人机新突破:或将利用手机发射塔追踪无人机