《基于VB的分布式监控系统Modbus通讯设计与实现.docx》由会员分享,可在线阅读,更多相关《基于VB的分布式监控系统Modbus通讯设计与实现.docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于VB的分布式监控系统Modbus通讯设计与实现基于VB的分布式监控系统Modbus通讯设计与实现消费的DYZB-101A型低压智能综合保护器。由于本系统的智能电子设备通讯是通过RS485总线的,因此采用特征阻抗为120的屏蔽双绞线连接。PC机一般没有RS485接口,但都有RS232串行接口,因此采用一个RS232/485转换器,可将RS232串行接口直接转换成RS485接口,再通过RS485总线与智能仪表相连。在串行通讯中,主要借助VB开发平台下的MSComm、Timer控件来设计。其中智能仪表对所检测的电力系统进展在线检测,检测电网的电流、电压、视在功率、启动次数、运行时间、频率等状态信
2、息。PC机通过网络可以实现对仪表的数据读取、诊断、测试、参数更新等,轻松实现遥测、遥信、遥控。align=center图1监控系统构造图Fig.1Thestructureofmonitoringsystem/align3Modbus通讯协议简介Modbus协议是MODICON公司开发推行的通讯协议,已经成为一种广泛应用于工业自动化控制器上的标准通讯协议。通过该协议,不同厂商消费的控制设备可以进展工业网络互联,进而实现集散控制2。Modbus协议采用主从工作方式,允许一台主机和多台从机通讯,每台从机地址由用户设定,地址范围为1-255。通讯采用命令/应答方式,每一种命令帧都对应一个应答帧。命令帧
3、由主机发出,所有从机都将收到报文,但只有被寻址的从机才会响应相应命令,返回相应的应答帧。图2是一个完好的主从查询-回应周期。align=center图2主从查询-回应周期表Fig.2Theperiodictableofmastersalvequery-response/align3.1Modbus协议通讯形式Modbus通讯协议有两种传送方式:RTU方式和ASCII方式,两种方式如下所示:ASCII形式:当控制器设为在Modbus网络上以ASCII美国标准信息交换代码形式通讯,在消息中的每个8Bit字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可到达1秒而不产生错误。
4、RTU形式:当控制器设为在Modbus网络上以RTU远程终端单元形式通讯,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:相对于ASCII形式,RTU形式表达一样的信息需要较少的位数,且在一样通讯速率下具有更大的数据流量。因此通常情况下,一般工业智能仪器仪表都是采用RTU形式的Modbus规约。本文采用的是ModbusRTU形式。3.2ModbusRTU消息帧格式使用RTU形式时,消息发送至少要以3.5个字符时间的停顿间隔开场如表1中的T1-T2-T3-T4所示。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0-9,A-F。网络设备不断侦测网络总线,当
5、第一个域地址域接收到,每个设备都进展解码以判定是否发给自己。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的完毕。一个新的消息可在此停顿后开场3。整个消息帧必须作为一连续的流传输。假如在帧完成之前有超过3.5个字符时间的停顿时间,接收设备将刷新不完好的消息并假定下一字节是一个新消息的地址域。同样地,假如一个新消息在小于3.5个字符时间内接着前一消息开场,接收的设备将以为它是前一消息的延续。这将导致一个错误,由于在最后的CRC域的值不可能是正确的。一典型的RTU形式的消息构造如表1所示。表1RTU形式的消息帧构造Tab.1ThemessageframestructureofRT
6、Umode3.3Modbus根本规那么1所有RS485通讯回路都应遵照主/从方式,按照这种方式,数据可以在一台主机如PC机和多台从机如DYZB-101A之间传递,从机数目应限制在32个以内。2主机初始化和控制在RS485通讯回路上传递的所有信息。3任何一次通讯都不能从从机开场。4在RS485回路上的所有通讯都以“信息帧方式传递。5假如主机或者从机接收到含有未知命令的信息帧,那么不予以响应。主机为主动通讯方式,通讯开场后主机依次查询各从机并等待从机的应答,主机发出某一询问码后,必须在一段时间内接收到对应从机的应答。当通讯命令发送至仪表时,符合相应的地址码的设备接收通讯的命令,读取信息,假如没有出
7、错,那么执行相应的任务,然后把执行结果返送给主机。返送的信息中包括地址码,执行动作的功能码,执行动作后的数据以及错误校验码CRC或者LRC。假如出错就不发送任何信息。假如主机在规定的接收时间内没有收到对应从机的任何有效的应答,那么可以以为该从机通讯故障,从下一个从机继续询问。4主机通讯软件设计DYZB-101A型低压智能综合保护器适用于沟通400V低压电力系统,作为低压电动机的保护、检测设备。该智能仪表中的数据信息主要分为动态信息、查询信息和控制信息。动态信息包括电流、电压、功率等信息;查询信息包括启动次数、运行时间、开关状态、报警等信息;控制信息包括对时、启动、设置参数等信息。上位机监控系统
8、在获取智能仪表中的各类信息时,主要是采用轮巡的方式,由于不同的数据信息对实时性的要求不同,因此上位机可针对各类不同的数据信息进展周期性轮巡和非周期性轮巡,其中周期性轮巡可根据实际需要设置不同的轮巡周期。本文将以对智能仪表中实时性要求较高的动态信息为例来讨论上位机通讯软件的实现4。4.1MSComm控件与串行通讯RS232/485转换器将RS232信号转换成RS485信号进展传输。对于主机来讲,通讯软件就是对RS232串行通讯端口进展编程。主机通讯软件采用Windows环境下的VB6.0进展编程。Windows操纵系统在底层实现了和串行通讯有关的很多复杂的工作,它自动将所有接收到的字符放到接收缓
9、冲区中,而所有发送的字符也都进入发送缓冲区中。程序可读取接收缓冲区的数据,或向发送缓冲区发送数据。VB6.0是微软公司开发的一种可视化编程工具,具有界面友好、编程方便、简单易行等特点。VB6.0与Windows系统有着非常完美的接口,可据以设计系统的内建及外挂控件更是诸多。同时,VB6.0还提供了一个非常方便的通讯控件MSComm。应用程序嵌入MSComm控件,通过MSComm控件提供的事件驱动或者查询方式来进展串行通讯治理5,6。编写RS485网络通讯程序很少用事件驱动方式,而多采用查询方式。本程序使用的方法对常用的查询方式进展了简化,不用检测CommEvent属性值,节省了程序运行时间。4
10、.2编程要点4.2.1实现校验主机发送查询命令或者接收从机应答数据时,校验码的计算是通过调用函数fun_SerialCRC实现的。函数fun_SerialCRC放在程序模块中。CRC校验的软件实现有两种方法:一种为计算法;另一种为查表法。计算法就是根据CRC校验码的产生原理来设计程序的。其优点就是:模块代码少,修改灵敏,可移植性好。其缺点就是:计算量大。而查表法的优缺点正好与计算法相反,由于对于固定字节CRC校验计算的多项式因子,其CRC值是固定的,因此,采用查表法可以简化计算经过、节省应答时间、进步通讯效率。本文采用的是查表法,程序流程图如图3所示。align=center图3CRC16查表
11、法实现流程图Fig.3TheflowchartofCRC16tablelookup/align4.2.2实现周期性轮巡发送为了保证主机不断地将查询命令下到达各个从机,程序使用一个定时器控件Timer1,将Timer控件的间隔属性设置为100ms,在定时器的Timer事件经过中写入主机向一台从机发送查询信息的子程序SendPackage。这样每隔100ms调用一次子程序,主机向一台从机完成一次命令发送。假如有十台从机,这样依次每隔100ms便查询一台从机,1s钟就可以实现对十台从机的轮巡。假如主机是对各个从机的同一个数据信息进展查询,查询信息帧的命令内容是完全一样的,除从机地址码不同外,其格式根
12、本一样。发送命令子程序流程图如图4所示。align=center图4发送命令子程序流程图Fig.4Thesubroutineflowchartofsendingcommand/align4.2.3实现50ms时限在发送命令的经过中,程序利用Timer1控件定时,中断后通过调用信息发送子函数实现主机对各个从机的轮巡查询。在子函数中,程序利用Output属性发送查询命令,之后,不用检测CommEvent属性值,而是启动另一个定时器控件Timer2间隔属性设置为10ms,直接利用Input属性从接收缓冲区读取字符串,每隔10ms读取一次,循环接收从机应答字符串,直至到达最大时限50ms。该定时器事件
13、是程序的核心,它不仅实现了50ms接收时限,而且在这里对接收到的响应数据帧进展有效性判别和应答。该段程序流程图如图5所示。align=center图5定时器Timer2事件经过流程图Fig.5TheeventprocessflowchartofTimer2/align图中,REVOK处理mbEvent所代表的事件;mbEvent=0正常接收并进展数据解析;mbEvent=1地址错误;mbEvent=2功能码错误;mbEvent=3CRC16校验错误;i循环变量。4.2.4平安数组实现循环接收主机接收从机的响应数据时,通过启动定时器Timer2,每隔10ms对输入缓冲区中的数据进展一次读取,直至
14、最大时限50ms,实现了循环接收输入缓冲区中的数据。根据下位机的回送的数据信息,上位机解析所接收的数据,并进展必要的处理。一般而言从下位机发送的数据都有一定的帧长度,十分是对于一些固化好的智能仪表。因此最好的方法是按照通讯回送的帧长度,在上位机程序中分别开拓两个数组。一个为平安数组,设为动态数组,用来循环接收串口缓冲区中的数据;另一个作为接收数组,长度为回送数据帧长度,用来复制接收平安数组中的数据并进展解析。这样可以进步整个系统的容错才能。详细代码写在定时器事件中如下:Diminputbuf14AsByte接收数组DiminputsafebufAsByte平安数组DimaAsIntegerDi
15、mindexAsIntegera=0PrivateSubTimer2_TimerInputsafebuf=MSComm1.Input将输入缓冲区中的数据放入平安数组中Forindex=LBoundinputsafebufToUBoundinputsafebufinputbufindex+a=inputsafebufindexNextindex将平安数组中的数据放入接收数组中a=UBoundinputsafebuf+a+1循环变量,实现循环接收EndSub代码中的inputbuf为接收数组,而inputsafebuf就是另外开拓的平安数组。4.3窗体载入事件经过窗体载入事件Form_Load在程
16、序刚开场时被调用,负责设置通讯端口参数,启动定时器Timer1。主要程序代码如下:PraviteForm_LoadMSComm.CommPort=1设定需要使用的串口,当然这里可以用输入方式灵敏设定。暂定1号端口MSComm.Settings=“9600,n,8,1设定传输的波特率和校验方式MSComm.InputLen=0一次全部读入所需要的数据MSComm.InputMode=comInputModeBinary设定为二进制的数据流方式MSComm1.Portopen=True翻开通讯串口Timer1.Interval=100设定定时器1定时值为100msTimer1.Enable=Tru
17、e启动定时器1Timer2.Interval=10设定定时器2定时值为10msTimer2.Enable=False关闭定时器2EndSub4.4定时器Timer1事件经过此事件会在每1个属性值的间隔内前已设定为100ms被调用一次,完成主机和从机之间的周期性轮巡通讯。主要程序代码如下:DimjAsIntergerDimnAsIntergerj=0PraviteTimer1_Timerj=j+1n=jIfj=10Thenj=0周期性轮巡SendPackagen调用与n号从机通讯的子程序EndSub在本监控系统中,RS485总线上连有10台低压智能综合保护器,所选用的传输波特率为9600bps,
18、保护器中的动态信息数据可以在PC机上实现每隔1s更新一次。对于保护器中的其他数据信息,发送与接收数据帧最大不超过60byte,因此,该通讯软件完全可以知足传输经过中的稳定性、可靠性和准确性。但在实际通讯的经过中,可根据工业现场的详细情况调整传输波特率和轮巡周期的长度。本文设计的通讯软件已应用于低压配电监控系统中,理论证实本系统可以正常运行,上位机与下位机的通讯稳定可靠,软件使用方便,实现了对综合保护器DYZB-101A的智能化控制,有效地降低了工业现场的故障发生率。本通讯协议和通讯软件也有一定的通用性,提供了一个对于工厂、电厂、工业监控系统简单实用的通讯软件。1范逸之.VisualBasic与分布式监控系统M.北京:清华大学出版社,20022马骅,张国勋.Modbus通讯协议在液位监测系统中的应用J.邢台职业技术学院学报,2004,213:36-383李喜东,刘涛,刘刚.Modbus-RTU串行通讯协议在工业现场的应用J.自动化技术与应用,2005,247:37-404DYZB-101A型低压智能综合保护器使用讲明书.天津东泰科技开展有限公司,20045范逸之,陈立元.VisualBasic与RS-232串行通讯控制M.北京:清华大学出版社,2002:54-1106李湘江.VisualBasic串行通讯技术J.电气传动自动化,2004,206:9-11