状态机原理在MODBUS协议实现中的应用
- 格式:doc
- 大小:39.50 KB
- 文档页数:9
状态机原理在MODBUS协议实现中的应用摘要:以基于MODBUS协议的耐电压试验仪上位机监控软件的设计为例,针对MODBUS协议报文结构的特性,研究一种将有限状态机原理应用于报文接收的设计方法,并通过实例验证该方法的可行性。
该方法的使用优化了程序结构,提高了传输数据的可靠性。
关键词:MODBUS协议;有限状态机;耐电压试验仪耐电压性能是电气装置和电工绝缘材料的重要性能指标,是国家强制检测的。
耐电压试验仪是进行该性能测试的仪器。
本试验仪采用PC机加嵌入式实时控制系统的两级控制结构,通过隔离的RS-232接口,利用MODBUS协议实现信息交换。
鉴于PC端监控程序具有状态机的特征,将有限状态机(Finite State Machine,简称FSM)原理的程序设计方法应用于MODBUS协议的实现过程。
1MODBUS协议耐电压试验仪使用MODBUS协议进行信息交换,为实现和校验方便,选用ASCII码报文格式,每个字节传送一位用ASCII码表示的十六进制信息,报文格式如表1。
表1ASCLL报文的基本格式起始符地址功能码数据域校验符结束符内容3AHSAHSALFCHFCL Data1Data2…DatanLRCHLRCL0DH0AH字符数122N22ASCII消息帧使用LRC校验方式,LRC校验码的产生方法:除起始符外,在校验符之前所有字符的字节和。
在发送端,将该和的每半个字节十六进制信息转换成一个对应的ASCII码进行发送。
在接收端,从起始符开始,对所接收字符逐一检验,直到校验符,计算生成对应的LRC码,将其与接收到的LRC信息相比较,如错误,则丢弃该帧。
2状态机原理在MODBUS协议中的应用耐电压试验仪的两级控制结构通过MOUBUS协议实现信息交换,为了提高其数据传输的可靠性,将状态机原理应用于MOUBUS协议数据帧的接收过程。
设备在接收数据帧的过程中,由于数据帧的传输时间间隔短,且物理线缆在传输中存在干扰,有可能在接收端得到不完整或者具有错误字符的数据帧。
为了提高数据传输可靠性,除奇偶校验、报文校验字校验外,对每个字符还进行合法性的检验。
在上位机软件的设计中,为了对字符进行合法检验,建立一个合法字符库,只有包含在该库中的字符才是合法的,其它则是非法字符。
该库包括了系统的各类报文(包括联机报文、命令报文以及参数报文等)的合法字符,在字符检验过程中,通过遍历该字符库,来对字符进行合法检验。
数据帧的接收过程描述如下:以起始符状态作为初始状态,从起始符开始进行合法性检验,如当前字符合法,转下一个状态,并在该状态下等待下一个字符的读入;否则,转回初始状态。
直到检测到结束符的读入,对该帧的接收任务才算完成。
此时,根据有限状态机原理,把每读入一个字符当成一个输入事件,把判断其合法性作为转移条件,当中间某一状态不符合条件(即为非法字符)的时候,则使其返回初始状态。
系统中的各类报文按照功能码的不同设定其状态值。
现在以耐电压试验仪的一段联机报文为例,介绍其设计方法,它是嵌入式控制器端向上位机监控软件发送的联机请求报文。
联机报文如表2所示。
表2联机报文序号123456含义起始符目标地址功能编码数据域校验字结束符数值3AH30H32H34H34H30H31H30H联机请求3CH2DH‘-‘LRCHLRCL0DH0AH字符数1B2B2B2B1B1B1B2B2B总字符14在设计中,每个接收的数据帧都看作一个输入字符串,从第一个字符开始,逐一检验,根据当前状态、输入字符以及转移条件决定下一个状态。
在程序设计的过程中,每接收一个字符,就把字符值赋给r。
将判断该变量的合法性作为判断条件。
结合上述的联机报文,状态转移如图1所示。
图1状态转移图把上面的每一个状态按顺序分别看做s1、s2、……s14,则其状态转移表如表3所示。
表3状态转移表序号现态状态转移条件次态0s1r=3AHs2r≠3AHs11s2r=30Hs3r≠30Hs12s3r=32Hs4r≠32Hs13s4r=34Hs5r≠34Hs14s5r=34Hs6r≠34Hs15s6r=30Hs7r≠30Hs16s7r=31Hs8r≠31Hs17s8r=30Hs9r≠30Hs18s9r=3CHs10r≠3CHs19s10r=2DHs11r≠2DHs110s11r=43Hs12r≠43Hs111s12r=34Hs13r≠34Hs112s13r=0DHs14r≠0DHs113s14r=0AH—r≠0AHs1利用有限状态机原理描述的检验程序,程序结构简单,易读性高。
该项目是采用开发工具VC++6.0实现的,通过switch()语句来对状态进行选择,利用一个整型变量com_s来描述状态,初始化状态为0。
当一字符被判断为合法,则将其赋给一个用来临时存放报文的字节数组temp[com_i],com_i为整型变量,初始化为0。
其它状态根据状态转移需要进行设定。
程序流程如图2所示。
图2程序流程图主要程序实现如下:switch(com_s){case 0:if (r==0x3A){temp[com_i]=r;com_s=1;com_i++;}else{com_s=0;com_i=0;}break;case 1:if (r==0x30){temp[com_i]=r;com_s=2;com_i++;}else{com_s=0;com_i=0;}break;case 2:……case n:if (r==0x0A) {temp[com_i]=r;com_s=0;com_i=0;}else{com_s=0;com_i=0;}break;}通过以上设计,更好地解决了数据在传输过程中受干扰而出现错误的问题,并提高了数据的可靠性,使上位机监控软件运行更加稳定。
利用状态机原理设计的程序,结构清晰,易于维护。
3实验测试鉴于上位机监控软件是利用有限状态机原理实现接收数据帧的检验,故可通过其数据接收的正确性验证基于状态机原理的数据检验程序设计的可行性。
在该软件中,当其能够与嵌入式控制器正常联机,且能够把接收到的数据通过解析实时显示在界面上,则证明该方法的可行性。
耐电压试验仪的通信流程如图3所示。
图3通信流程在此,通过串口调试助手软件在其中一台PC机上运行,模拟嵌入式控制器的报文发送流程。
具体实现过程如下:①将两台PC相连,一台运行串口调试助手软件,另一台运行本软件;②设置各自的串口参数,使两者通过串口能够正常地通信;③在串口调试助手软件端手工发送正确的联机报文(当软件对联机报文检验成功后,会自动发送应答报文,并激活工具栏正方形标志);④在上位机监控软件中,设置好基本参数,发送控制命令(即命令报文);⑤在串口助手软件端按照一定时延发送几个不同的参数报文,观察测试结果。
测试结果如图4所示,软件的工具栏联机标志位已经激活,证明对联机报文的检验正确。
并且,在文本框的电压、电流数据正常显示以及绘图工作区的电压、电流曲线正常绘制,证明对参数报文的检验也通过了。
综上所述,证明了状态机原理应用在数据帧接收的检验过程是可行的。
图4软件运行界面4结束语本文以耐电压试验仪上位机监控软件检验数据帧的程序设计为例,介绍了有限状态机原理在实现MODBUS协议中的应用,并通过实例加以验证。
状态机原理也可应用于其它网络协议的实现,以提高了数据的可靠性,优化程序结构,增强软件的可维护性。
参考文献:[1]朱小襄.ModBus通信协议及编程[J].电子工程师,2005(7).[2]朱懿,蒋念平.ModBus协议在工业控制系统中的应用[J].微计算机信息,2006(10).[3]蒋宗礼,姜守旭.形式语言与自动机理论[M].北京:清华大学出版社,2003.[4]陈占海,蒋存波,刘艳军.有限状态自动机在数控系统串口通讯中的应用[J].桂林工学院学报,2005(增).[5]金红,蒋存波,陈小琴.基于有限状态自动机原理的孔中心定位程序[J].计算机工程与应用,2007(4).[6]陈铭,蒋存波.基于微处理器的绝缘材料耐电压试验仪的设计[J].工业控制计算机,2009(2).[7]李亚洲.基于串口通信的单片机日志系统设计[J].工业控制计算机,2009(11).(责任编辑:周晓辉)The Application of Finite AutomationPrinciple inthe Implementation of MODBUS ProtocolAbstract:This article takes the design of withstand voltage tester’s PC monitoring software based on MODBUS protocol as an example, it discusses a design method which uses finite state machine theory to message received based on the characteristics of MODBUS protocol packet’s structure ,and proves the feasibility of the method. The method optimizes the structure of program and improves the reliability of data transmission.Key Words: MODBUS Protocol; Finite State Machine; Withstand Voltage Tester。