基于Modbus规约的智能仪表与PC机通信技术实现.doc_第1页
基于Modbus规约的智能仪表与PC机通信技术实现.doc_第2页
基于Modbus规约的智能仪表与PC机通信技术实现.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Modbus规约的智能仪表与PC机通信技术实现2007-01-28来源:西部工控网浏览:828 摘 要:本文主要介绍Modbus RTU规约,及VB6.0编程环境下RS-485串口实现主控台PC机与智能仪表间基与该规约通信具体实现方法。 关键词:Modbus RTU;通信协议;RS-485;CRC校验 一、引言 时代进步,越来越多企业开始向生产和管理自动化转变。各种智能仪表不断应用到生产生活各个领域。工业控制方面,RS485总线平衡差分传输特性具有干扰性好、传输距离远 、有较大级连能力等特点,非常适合于组成工业级多机通信系统。ModBus RTU规约是Modicon公司注册商标,是目前国际智能化仪表普遍采用主流通讯协议之一。各个工业仪器仪表大量使用今天,Modbus RTU协议和RS-485总线到了最为广泛应用。本文主要从应用角度介绍一个工业控制系统中,实现该技术具体方案。二、Modbus RTU 通讯协议简介1、Modbus RTU协议简介 ModBus RTU通讯协议是Modicon公司注册商标。采用主从问答方式工作,其规范已国际互联网上公布,是目前国际智能化仪表普遍采用主流通讯协议之一。目前,国内许多生产商已他们产品和系统中遵循该协议标准。该协议有两种传输模式即RTU模式和ASCII模式。其中RTU模式信息帧中8位数据包括两个4位16进制字符,相ASCII模式,RTU模式表达相同信息需要较少位数,且相同通讯速率下具有更大数据流量。通常情况下,一般工业智能仪器仪表都是采用RTU模式Modbus规约。2、Modbus 通信格式数据格式: 址码 功能码 数据区 错误校检数据长度: 1字节 1字节 N字节 16位CRC码 当通讯命令由发送设备(上位机)发送至接收设备(下位机)时,符合相应址码下位机就会响应命令,并约定通信协议读取信息、数据校验执行相应功能操作。返回帧结构包含址码、功能码、数据以及CRC校验码。3、上下位机通信帧约定格式 其中仪表址使用电压表中是为一个字节定义,最多到256个。下位机与上位机通信波特率一般可自由设定,但必须保证上下机通信波特率对应匹配。三、上位机通信软件设计方案 上位机通信软件采用VB6.0开发环境。VB6.0中对串口进行编程可以使用Mscomm控件加快开发进度。该控件主为RS232通用串口而设计。利用PC上现有RS232接口,通常是使用RS232/485转换器。这些转换器一般逻辑门电路控制RXD、TXD和GND三针信号,自动对半双工或全双工485串口进行控制。转换器,我们就可以像开发通用RS232串口一样来快速开发基于RS485串口上位机通信软件。1、初始化程序设计 初始化程序中,主设定好整个帧结构命令数组、传输波特率、以及一些必须串口初始设定。具体操作如下面代码说明Dim Tcommand(7) As Byte 开辟命令帧帧长度数组MSComm.CommPort = 1 设定需要使用串口,当然这里可以用输入方式灵活设定。暂定为1口MSComm.Settings=2400,n,8,1 设定传输波特率和校验方式MSComm.InBufferSize = 1024 开辟数据缓冲区MSComm.InputMode =comInputModeBinary 设定为二进制数据流方式MSComm.InputLen = 0 一次全部读入所需要数据 上面代码一般都是串口初始化必须进行设定几个部分。个人需要可以VB6.0中做一个初始化界面,对各个参数(如波特率、使用串口等)进行自由设定和更改,以提高初始化设定灵活性和通用性。2、命令字发送 命令字发送应该严格Modbus规约所设计帧格式和上下位机该规约基础上所定义通信协议。参考表1通信协议顺序,编写如下VB代码来实现命令发送。Tcommand (0) = address address为设定接受址输入变量Tcommand (1) = Val(&h + 03) (其他通信协议,并计算CRC校验代码)Tcommand (6) = CRC(1)Tcommand (7) = CRC(0)frmcontrol.MSComm.Output = Tcommand3、上位机接收和数据处理 表2回送通信协议,上位机解析所接受数据,并进行必要处理。一般而言从下位机发送上来数据都是有一定帧长度。特别是一些固化好智能仪表。最好方法是通信回送帧长度,上位机程序中分别开辟两个同样长度数组。一个作为接受数组,用来一次性接收串口缓冲区中数据;另一个为安全数组,用来复制接收数组中数据并进行解析。这样可以提高整个系统容错能力。LoopUntil frmcontrol.MSComm.InBufferCount = 9InByte = frmcontrol.MSComm.InputFor i = 0 To (count - 1)InSafeArray(i) = InByte(i)Next i 其代码中inbyte()就是接收数组,而InSafeArray()就是我们再开辟安全数组。4、CRC校验实现方法 Modbus规约校验方式,RTU模式校验方式为CRC校验方式;而ASCII模式为LRC校验。一般智能仪表多采用RTUCRC校验方式。生成多项式不同,CRC校验通常有以下几种:CRC12 (传6bit);CRC16(美国标准,传8bit);CRCCCITT(欧洲标准,传8bit);CRC32(point-topoint同步传输中使用) 。目前仪表类比较普遍是CRC16校验码。其生成多项式为X16+X15+X2+1。算法实现上,我们可以先预置一个16位寄存器FFFF(全1),然后把8位2进制数据(一个字节)与16位CRC寄存器低8位异或,并把结果放回CRC寄存器同时寄存器内容右移,MSB补0,并检查移出LSB。LSB为0则继续右移动,为1则CRC寄存器与多项式异或。重复上面操作到一个8bit字节完成,再继续对下一个数据进行相同处理,直到所有数据结束。这个时候CRC寄存器中数据就是我们所要CRC码了。实现代码如下:CRC16Lo = &HFF CRC16Lo为CRC寄存器低8位CRC16Hi = &HFF CRC16Hi为CRC寄存器高8位CL = &H1CH = &HA0 A001 H 是CRC16多项式代码For i = 0 To UBound(Data)CRC16Lo = CRC16Lo Xor Data(i) 每一个数据与CRC寄存器异或For index = 0 To 7UseHi = CRC16HiUseLo = CRC16LoCRC16Hi = CRC16Hi 2CRC16Lo = CRC16Lo 2 右移一位If (UseHi And &H1) = &H1) Then 高位字节最后一位是1话CRC16Lo = CRC16Lo Or &H80 低位字节右移后前面补1End IfIf (UseLo And &H1) = &H1) Then LSB 为1,则与多项式进行异或CRC16Hi = CRC16Hi Xor CHCRC16Lo = CRC16Lo Xor CLEnd IfNext indexNext i四、下位机工作系统设计简介 下位机一般是使用固化好通信协议及工作指令单片机。测控系统多采用是单发多收通信机制,下位机要允许用户预先设定本机址码,保证不能重复。此外,要注意通信波特率必须与上位机波特率相匹配。下位机软件开发中,要遵循Modbus规约通信帧结构对上位机传输命令进行解析:非呼叫对象应能及时重新恢复等待接受状态;响应呼叫下位机要解析命令代码并进行相应功能处理,对非法命令操作要能回送报错信息。 具体工程开发中,下位机多是采用各个厂家出品基与Modbus规约智能仪表。这样简化了我们开发工作量,下位机合理安排与设计能降低系统误码率、提高可靠性。是每个工业系统设计人员所不应该忽略重要部分。工业控制中,各种干扰源存且一般下位机数量较大,要对RS485芯片选型有很认真考虑。条件许可话尽量选用抗电击和有较大级连驱动能力芯片。理论上485芯片级连能力至少32门,目前很多芯片厂家都能使工业级级连数达到128以上。实际应用中应该让系统具有一定富余度,一般级连数不能超过该器件满载70。选配RS232到RS485转换头时候也应该尽量选用有源转换器,以提高驱动能力和稳定性。此外,工业现场降噪、隔离、布线、屏蔽等等措施合理与否也会对最后系统稳定产生影响。五、结束语 作者实际测控系统项目开发中,VB6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论