《基于Modbus规约的智能仪表与PC机通信技术实现.docx》由会员分享,可在线阅读,更多相关《基于Modbus规约的智能仪表与PC机通信技术实现.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于Modbus规约的智能仪表与PC机通信技术实现基于Modbus规约的智能仪表与PC机通信技术实现ronggang导语:本文主要介绍ModbusRTU规约,及在VB6.0编程环境下通过RS-485串口实现主控台PC机与智能仪表间基与该规约通信的详细实现方法摘要:本文主要介绍ModbusRTU规约,及在VB6.0编程环境下通过RS-485串口实现主控台PC机与智能仪表间基与该规约通信的详细实现方法。关键词:ModbusRTU;通信协议;RS-485;CRC校验随着时代的进步,越来越多的企业开场向消费和管理自动化转变。各种智能仪表不断地应用到消费生活的各个领域。在工业控制方面,RS485总线由于
2、平衡差分传输特性具有的干扰性好、传输间隔远、有较大级连才能等特点,非常合适于组成工业级的多机通信系统。ModbusRTU规约是Modicon公司的注册商标,是目前国际智能化仪表普遍采用的主流通讯协议之一。在各个工业仪器仪表大量使用的今天,ModbusRTU协议和RS-485总线得到了最为广泛的应用。本文主要从应用的角度介绍在一个工业控制系统中,实现该技术的详细方案。2ModbusRTU通讯协议简介1ModbusRTU协议简介ModbusRTU通讯协议是Modicon公司的注册商标。采用主从问答方式工作,其标准已在国际互联网上公布,是目前国际智能化仪表普遍采用的主流通讯协议之一。目前,国内许多消
3、费商已在他们的产品和系统中遵循该协议标准。该协议有两种传输形式即RTU形式和ASCII形式。其中RTU形式信息帧中的8位数据包括两个4位16进制字符,相对于ASCII形式,RTU形式表达一样的信息需要较少的位数,且在一样通讯速率下具有更大的数据流量。因此通常情况下,一般工业智能仪器仪表都是采用RTU形式的Modbus规约。2Modbus通信格式当通讯命令由发送设备上位机发送至接收设备下位机时,符合相应地址码的下位机就会响应命令,并根据约定的通信协议读取信息、数据校验并且执行相应的功能操作。返回的帧构造包含地址码、功能码、数据和CRC校验码。3上下位机通信帧约定格式其中的仪表地址在使用的电压表中
4、是为一个字节定义的,所以最多到256个。下位机与上位机的通信波特率一般可自由设定,但必须保证上下机的通信波特率对应匹配。3上位机通信软件设计方案上位机的通信软件采用VB6.0的开发环境。在VB6.0中对串口进展编程可以使用Mscomm控件加快开发进度。该控件主要是为RS232的通用串口而设计。所以为了利用PC上现有的RS232接口,通常是使用RS232/485的转换器。这些转换器一般通过逻辑门电路控制RXD、TXD和GND三针信号,进而自动对半双工或者全双工的485串口进展控制。通过转换器,我们就可以像开发通用的RS232串口一样来快速开发基于RS485串口的上位机通信软件。1初始化程序设计在
5、初始化程序中,主要是设定好整个帧构造的命令数组、传输波特率、和一些必须的串口初始设定。详细的操作如下面代码讲明DimTcommand7AsByte开拓命令帧的帧长度数组MSComm.CommPort=1设定需要使用的串口,当然这里可以用输入方式灵敏设定。暂定为1#口MSComm.Settings=2400,n,8,1设定传输的波特率和校验方式MSComm.InBufferSize=1024开拓数据缓冲区MSComm.InputMode=comInputModeBinary设定为二进制的数据流方式MSComm.InputLen=0一次全部读入所需要的数据上面的代码一般都是串口初始化必须进展设定的
6、几个局部。根据个人需要可以在VB6.0中做一个初始化界面,对各个参数如波特率、使用串口等进展自由设定和更改,以进步初始化设定的灵敏性和通用性。2命令字发送命令字发送应该严格按照Modbus规约所设计的帧格式和上下位机在该规约根底上所定义的通信协议。参考表1的通信协议顺序,编写如下的VB代码来实现命令的发送。Tcommand0=addressaddress为设定的承受地址输入的变量Tcommand1=Val&h+03其他的通信协议,并计算CRC校验代码Tcommand6=CRC1Tcommand7=CRC0frmcontrol.MSComm.Output=Tcommand3上位机接收和数据处理根
7、据表2的回送通信协议,上位机解析所承受的数据,并进展必要的处理。一般而言从下位机发送上来的数据都是有一定的帧长度。十分是对于一些固化好的智能仪表。所以最好的方法是按照通信回送的帧长度,在上位机程序中分别开拓两个同样长度的数组。一个作为承受数组,用来一次性接收串口缓冲区中的数据;另一个为平安数组,用来复制接收数组中的数据并进展解析。这样可以进步整个系统的容错才能。LoopUntilfrmcontrol.MSComm.InBufferCount=9InByte=frmcontrol.MSComm.InputFori=0Tocount-1InSafeArrayi=InByteiNexti其代码中的i
8、nbyte就是接收数组,而InSafeArray就是我们再开拓的平安数组。4CRC校验的实现方法按照Modbus规约的校验方式,RTU形式的校验方式为CRC校验方式;而ASCII形式为LRC校验。一般的智能仪表多采用RTU的CRC校验方式。根据生成多项式的不同,CRC校验通常有以下几种:CRC12传6bit;CRC16美国标准,传8bit;CRCCCITT欧洲标准,传8bit;CRC32point-topoint同步传输中使用。目前仪表类比拟普遍的是CRC16的校验码。其生成多项式为X16+X15+X2+1。在算法实现上,我们可以先预置一个16位的存放器FFFF全1,然后把8位的2进制数据一个
9、字节与16位的CRC存放器低8位异或者,并把结果放回CRC存放器同时存放器内容右移,MSB补0,并检查移出的LSB。假如LSB为0那么继续右挪动,为1那么CRC存放器与多项式异或者。重复上面操作到一个8bit字节完成,再继续对下一个数据进展一样处理,直到所有数据完毕。这个时候CRC存放器中的数据就是我们所要的CRC码了。实当代码如下:CRC16Lo=&HFFCRC16Lo为CRC存放器低8位CRC16Hi=&HFFCRC16Hi为CRC存放器高8位CL=&H1CH=&HA0A001H是CRC16多项式代码Fori=0ToUBoundDataCRC16Lo=CRC16LoXorDatai每一个数
10、据与CRC存放器异或者Forindex=0To7UseHi=CRC16HiUseLo=CRC16LoCRC16Hi=CRC16Hi2CRC16Lo=CRC16Lo2右移一位IfUseHiAnd&H1=&H1Then假如高位字节最后一位是1的话CRC16Lo=CRC16LoOr&H80低位字节右移后前面补1EndIfIfUseLoAnd&H1=&H1Then假如LSB为1,那么与多项式进展异或者CRC16Hi=CRC16HiXorCHCRC16Lo=CRC16LoXorCLEndIfNextindexNexti4下位机工作系统设计简介下位机一般是使用固化好通信协议及工作指令的单片机。因为测控系统
11、多采用的是单发多收的通信机制,所以在下位机要允许用户预先设定本机的地址码,并且保证不能重复。此外,要注意通信波特率必须与上位机的波特率相匹配。在下位机软件开发中,要遵循Modbus规约的通信帧构造对上位机传输的命令进展解析:非呼叫对象应能及时重新恢复等待承受状态;响应呼叫的下位机要解析命令代码并进展相应的功能处理,对非法的命令操作要能回送报错信息。在详细的工程开发中,下位机多是采用各个厂家出品的基与Modbus规约的智能仪表。这样固然简化了我们开发的工作量,但是下位机的合理安排与设计能降低系统误码率、进步可靠性。因此是每个工业系统设计人员所不应该忽略的重要局部。在工业控制中,因为各种干扰源的存
12、在且一般下位机数量较大,要对RS485芯片选型有很认真的考虑。条件答应的话尽量选用抗电击和有较大级连驱动才能的芯片。理论上485芯片的级连才能至少32门,目前很多芯片厂家都能使工业级的级连数到达128以上。在实际应用中应该让系统具有一定的充裕度,一般级连数不能超过该器件满载的70。在选配RS232到RS485转换头的时候也应该尽量选用有源的转换器,以进步驱动才能和稳定性。此外,工业现场的降噪、隔离、布线、屏蔽等等措施的合理与否也会对最后系统的稳定产生影响。5完毕语作者在实际的测控系统工程开发中,通过VB6.0结合SQL数据库编程,开发了基于该通信协议的上位机的测控管理软件,并利用RS485总线
13、实现了对基于该规约的各种下位机的监控和数据处理。在消费活动自动化,通信协议标准化,信息沟通国际化的今天,充分利用现有的成熟而标准的通信协议能最大限度地节约开发本钱,降低开发风险,进步系统的兼容性和可移植性。ModbusRTU规约作为智能仪器仪表领域大量使用的国际化通信协议,必将得到更加普遍的推广和应用。6参考文献【1】VisualBasic6.0程序员指南;美Microsoft公司著;北京祈望电子出版社;1999.2;P922,P304394【2】实用VisualBasic6教程;美BobReselman,RichardPeasley著;清华大学出版社;2001.3;P489500【3】基于Modbus协议通信的设计与实现;潘洪跃;计量技术;2002.No4;P3536