ModBUS协议通讯的应用.doc_第1页
ModBUS协议通讯的应用.doc_第2页
ModBUS协议通讯的应用.doc_第3页
ModBUS协议通讯的应用.doc_第4页
ModBUS协议通讯的应用.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

ModBUS协议通讯的应用淄博职业学院信息工程系 祝木田 师勇摘要: ModBUS协议具有侦错能力强、数据传输量大、实时性好等特点,因而成为目前自控领域使用非常广泛的通讯语言。本文通过一个应用实例介绍如何利用微机编程实现在线通讯ModBUS消息环的工作过程,在可视化语言环境下完成地址域、功能代码域、数据域的分配及CRC校验,从而实现计算机与远程控制单元数据传输。关键词:ModBUS协议、查询、回应、RTU模式、CRC校验。Abstract: ModBUS protocol have powerful data transmittability , detectability and realtime processing capability, so it had become a communication language that applicate widely in autocontrol field at present. This paper introduced a instance , how it realized a process about ModBUS structure of message loop and communication online, besides it created a frame which included address field ,option code field ,data field and CRC checking in visual programming environment, and send the frame to Remote Termimal Unit.Keyword: ModBUS protocol、query、reply、RTU mode、CRC check.引言在燃气蓄热式窑炉控制系统中,不仅需要将温度、压力、流量等模拟参数进行采集、计算控制输出至执行器,同时还应将火焰状态、电磁阀状态、换相阀状态进行采集,随时控制点火器点火,并进行周期性换相,换相周期会根据温度的不同而变化。面对众多参量的采集控制,需要建立时变系统和非线性系统的状态空间表达式进行复杂的多相关变量的运算,得到稳定输出以控制相关变量。事实上,取得大量数据,建立相应数据库,进行数据分析,单靠低端的数字控制设备难以完成。通常的做法是信号的数据采集、滤波、简单PID运算、输出量、及输出量的互锁由低端控制器完成。为了完成上述功能,我们采用ABB公司生产的PLC,配置如下:名称数量描述07KT511块50CPU,8DI,6DOXM06B52块Extension I/O,4AI,2AOXK08F11块Extension I/O,4DI,6DOPLC软件采用AC31 SOFTWARE,上位机程序用VB编制,实现与上位工控机通讯的过程中需要使用MODBUS协议。本文重点介绍其通讯实现的过程。一、 MODBUS简介MODBUS协议是应用于电子控制器的一种通讯语言。利用这个协议,控制器相互之间(例如485、232C等),控制器通过网络(例如以太网)和其他设备之间进行通讯。它定义了一种控制器能认识使用的消息结构,而不管它们是通过何种网络实现;描述的是控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦错并记录;制定了消息域格局和内容的公共格式。MODBUS通讯实现有两种传输模式(ASCII或RTU),ABB公司的50系列PLC产品采用的是RTU(远程终端单元)模式,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。1、代码系统: 8位二进制,十六进制数0.9,A.F 消息中的每个8位域都是一个两个十六进制字符组成每个字节的位 1个起始位 8个数据位,最小的有效位先发送 1个奇偶校验位,无校验则无 1个停止位(有校验时),2个Bit(无校验时)错误检测域 CRC(循环冗长检测)2、基于RS485的RTU模式MODBUS通讯格式为:地址 功能代码 数据数量 数据1 . 数据n CRC高字节 CRC低字节 它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。3、其查询回应周见下图:(1)查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。(2)回应 如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。二、 通讯的实现:1、 PLC端设置:07KT51在出厂时拥有默认设置:该中心单元为从设备,波特率为19200,1位停止位,8位数据位,无校验位。有关数据采集的端口、传输变量的物理地址的计算,功能代码的涵义,校验等等,在AC31说明书上已有了详尽的介绍,在此不复赘述。事实上,由于AC31对MODBUS的封装,使我们的通讯工作变的异常简单,有了通讯参数,调用通讯功能模块,无须进行通讯过程的代码描述。下面是一个取地址的例子:定义一个输出量O 62.15和内存变量M 232.01的地址为:O 62.15=4096+(16*62)+15=5103M 232.01=8192+(16*232)+1=11905当然,根据AC31提供的地址表进行推算,使过程显得更容易。2、 工控机的设置:(1)、进行端口的配置。端口采用MOXA公司生产的Transio 53智能型RS232与RS422/485双向转换器,充分利用其传输速率: 50 bps 921.6 Kps带宽,内建终端电阻的特性,保证长达1000米的通讯不受干扰。特别是当 2 个信号在 RS-422/485 端短接在一起时,具有电流过载保护功能;浪涌保护:(25 KV ESD ),光电隔离(2 KV)等特性,为系统长期可靠运行提供了硬件保障。软件利用VB 实现,在VB中通过Timer控件定时引用Mscomm控件实现串口通讯,利用窗体加载事件对其初始化:Private Sub From_Load( )Timer1.Enabled=TrueTimer1.Interval=500定时传输间隔为500毫秒Mscomm1.Commport=1通讯串口选择Com1Mscomm1.Settings=”19200,n,8,1”通讯参数设置Mscomm1.OutBufferSize=0清除缓冲区Mscomm1.InputMod=1采用二进制通讯End Sub(2)、Modbus的CRC校验:使用RTU模式,消息包括了一基于CRC方法的错误检测域。 CRC域是两个字节,包含一16位的二进制值,它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。CRC校验运算需要对位操作,根据Modbus的相关介绍用VC+做一个动态连接库函数checkCRC。CRC简单函数如下: unsigned short CRC16(puchMsg, usDataLen) unsigned char *puchMsg ; /* 要进行CRC校验的消息 */ unsigned short usDataLen ; /* 消息中字节数 */ unsigned char uchCRCHi = 0xFF ; /* 高CRC字节初始化 */ unsigned char uchCRCLo = 0xFF ; /* 低CRC 字节初始化 */ unsigned uIndex ; /* CRC循环中的索引 */ while (usDataLen-) /* 传输消息缓冲区 */ uIndex = uchCRCHi *puchMsg+ ; /* 计算CRC */ uchCRCHi = uchCRCLo auchCRCHiuIndex ; uchCRCLo = auchCRCLouIndex ; return (uchCRCHi 0 Then inbyte = MSComm1.Input n = UBound(inbyte) If n = 1 and inbyte(3)”03” Then 判断是否有有数据读取及功能代码是否含有错误 If inbyte(5) and 1 then 开关量位处理 If inbyte(5) and 2 then 开关量位处理 If inbyte(5) and 4 then 开关量位处理 End If End If Else 发送主设备查询消息 ReDim outbyte(6) outbyte(0) = addr1设备地址 outbyte(1) = option功能代码 outbyte(2) = 1数据量 outbyte(3) = data1数据以下是校验码outbyte(4) = left(W_checkCRC(add1 & add2 & option & “1” _ & & data1,2)outbyte(5) = Mid(W_checkCRC(add1 & add2 & option & “1” _& & data1,3,2) MSComm1.InBufferCount = 0 MSComm1.Output = outbyte End If End Sub三、 结束语ModBus协议在工业控制系统中已经应用十分广泛,但在多数系统中使用的是由专业供应商提供的组态软件,有时候使用组态软件提供的数据格式并不能达到要求,直接使用ModBus协议进行数据通讯是十分有用的。参考书目:1、AC31 SOFTWARE /lowvoltage 2、VB开发人员指南 Eric Brierley 1999-01 机械工业出版社作者

温馨提示

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

评论

0/150

提交评论