基于MODBUS协议的PC机和MSC-51单片机之间的通信外文翻译资料
2023-03-03 22:50:27
基于MODBUS协议的PC机和MSC-51单片机之间的通信
摘要:这篇文章讲述了一个可靠的方法去接收RTU(远方终端)方式的信息帧[12],它是通过使用MSCOMM控制,与在用VB6.0控制下的定时器相联系,这是根据信息的特征来确定的。 这种信息的开始与完成都是通过时间间隙长度来做记号的,它的长度一般是不会变的,而且用微机接收信息的过程通常都会被简短的描述一下。 此外,在这篇文章中也讲述了PC和MSC-51 SCM(单片机) 的连接是通过使用RS-485 网络连接通信的。
关键字:MODBUS(控制总线)协议; MSCOMM(微软商业) 控制; 串行通信
1 前言
目前,工业控制已经趋向集中控制和Mamp;C (测量和控制)的分配测量、MODBUS 作为现在在工业应用领域最广泛的网络适用协议,已经被广泛的使用在电力仪器和Mamp;C 系统使用一个PC作为主要装置,其他许多智能设备都是建立在微机的基础上,这样可以通过自己的从属装置串行端口和其他设备相互通信。主要装置和从属装置都是通过串行端口通信。在MODBUS Mamp;C系统中错误信息的传送模式是远方终端(RTU) . 在RTU 方式下,信息帧通常被默认间隔至少是3.5倍字符时间所分离.当帧的长度是可变的时,在分析了MODBUS协议和MSCOMM控制性能的基础上, 这篇文章还为PC和智能设备之间提供了一个非常有效的RTU通信方式,而且还包括了一些过程提示.
2 MODBUS协议的产生
少量公司在1979年被Schneider Automation 合并时,已经开展了MODBUS协议,当时在世界上这个协议已经变成了在工业领域最不相关的信息协议。 为了确定工业通信标准对外开放, Schneider Electric 已经在2004年4月将MODBUS版权交给了MODBUS-IDA. 瞄准了工业通信的进展, MODBUS-IDA是一个在2002年被MODBUS组织和IDA组织建立的非营利的组织. 在2004年的九月份,该协议已经被IEC使用作为PAS(公共利用特权).
MODBUS是一个合法的信息协议,定位在OSI模例的7级,是提供了”客户机/服务器”通信在装置连接在不同类型的总线上或网络上, 如TCP/IP , RS-232 , RS- 485 , MODBUS正偏差. 因此, 每种类型的装置都可以使用MODBUS 协议去进行一个远程的操作,甚至不同的公司产品.
MODBUS 协议规定了一个不管在什么总线上或网络上的简单信息帧结构. 它是这样描述的: 控制程序的过程是如何去询问其它装置的, 怎样去响应其它的询问和怎样去感知错误并注意. MODBUS 网络标准是使用RS-232 兼容性的串行接口界面. 它规定了引脚, 电缆, 信号比特,波特率和奇偶校验. 控制器可以将总线直接或通过MODBUS 装置和其他的主—从装置一一通信. 主要装置可以寻址一个从属装置, 或者引用一个广播信息给所有的从属装置. MODBUS 标准的网络使用二分之一上午传送类型的方式: ASCII方式, 或者远方终端方式. 为了和SCM通信,通常使用RTU 方式, 它的开始和结束都有一个默认间隙. 一个典型的RTU 帧由”从属寻址(1 ) , 功能代码(1 byte) , CRC(2 byte )”组成. MODBUS 协议需要控制器必须知道从属装置的寻址,而且能够根据调入寻址, 判别信息和响应.
3 PC 和MCS-51 SCM 通信的硬件连接
一个多路的异步串口通常由RS-485总线完成. 当这些连接在PC上的串口是RS-232的, SCM 上的接口是TTL水平. 因此,在PC和SCM 替换为RS-485 是必须有一个转接,这也是为了通信. 在TTL和RS-485之间的转换芯片是MAX485.
图A1.1 PC和SCM的连接
4用PC和MCS-51 单片机接受实现MODBUS远方终端信息帧
4.1 MODBUS 远方终端信息帧的定义
MODBUS 协议定义PDU 的三种类型, 它可以查询PDU(数据协议单元),响应PDU 和错误响应PDU . 但是实际的传输信息帧是ADU (应用数据单元) , ADU 就是MODBUS 协议在特定的总线或网络下,将驱动器字母分配给特定的逻辑磁盘驱动器. 在RS-485 总线下,一个典型的ADU是”寻址代码(1 bytes) PDU CRC校验(2 bytes)”
表A1 典型 RTU信息帧结构
表格1说明了典型的RTU 信息帧(没有开始间隔时间区段和结束间隔时间区) . RTU 信息开始必须至少有个3.5倍字节时间的默认间隔. 第一被连接的是从属装置, MODBUS 装置没有专门的寻址,只有从属装置才有寻址. 这种寻址在MODBUS 串口总线上必须是唯一的, 0 寻址就是作为广播寻址被保留. 所有从属装置指令必须能够识别广播寻址。 有个别的从属装置被分配寻址在1~247 范围之内。 当一个从属装置返回它的响应时,在信息编址区段置入它的寻址去让主要装置知道哪个从属装置做出了响应。 MODBUS 数据的功能代码区段是被定义在一个字节之内, 有效代码是在1~255之间。 当一个信息从一个客户程序发送到一个主机时,功能代码区段会告诉主机该做出什么样的反应。 功能代码“0”是无效的。 当主机对客户段做出反应时,它利用功能代码段去指示正常响应或一些中断响应。 作为一个正常响应,主机简单地应答原始的功能代码。 作为一个中断响应,主机通过PDU 的有效字节去返回原来的功能代码段。 在数据区段,两个字节的数据先发送高字节, 后发送低字节。 MODBUS 网络使用两种方法检查错误:奇偶校验必须用在每个字节里。 帧结构校验必须用在整个信息里。奇偶校验是定向于在RTU 方式中的每个字节。 其RTU 是由1个开始字节,8个数据字节, 1个奇偶校验完成字节和一个停止字节组成的。 被默认的奇偶校验必须适合于任何一个奇偶校验, 其目前是为了确定和其它的机子有最大程度的兼容性, 它时常也支持没有奇偶校验方式。没有奇偶校验的要两个终止字节。 在传送方式中有两种帧结构校验。 RTU或ASCII 在RTU方式中, 信息包括一个错误校验区段, 它是建立于CRC(循环冗余校验方法)的基础之上的。 通常当使用CRC校验时,也就不需要奇偶校验了。 CRC 字段是两个字节,包括一个16字节的二进制值。 CRC 值是通过传送装置计算的。 在CRC 收到信息的过程中,该装置还要重算,而且还要比较其计算值和在CRC 区段接收的实际值。 假如这两种值不相等,就有一个错误结果。 最后,该信息帧必须在默认间隔为1.5字符时间的情况下结束。
RTU 方式的CRC 检验多项式值是A001, CRC 的开始是通过第一个预加载的16字节的CRC寄存器完成的,该有效字节有零位置入MSB(最有效的字节),LSB 是摘取和检验。假如LSB 是一个1,则寄存器就是一个有预置值的互坼段。假如LSB 是一个0,没有互坼段使用,这种过程将会不断重复直到8个替换完成。最后一个替换结束以后,下一个8字节字符是寄存器当前容量下的互坼段(Exclusive Ored),而且过程不断重复,它自己的8个替换已经在上面描绘过。在所有信息字节被应用过以后,CRC寄存器最后的容量就是CRC的值。
4.2 用PC实现MODBUS RTU 方式
对于PC ,我们通过VB编程,用MSCOMM控制,MSCOMM 控制为异步串行通信提供了两种方法:轮询和事件驱动技术。事件驱动的实现是通过使用MSCOMM 控制ONCOMM事件。这种方法能够自动地检测到通信事件,而且能够开始进行一系列的串行中断服务子程序。这种中断只有当通信发生时才会产生。因此,当没有通信发生时,CPU能够做其他的事情。为了完成整个的功能,门限属性必须正确,当阈值等于N时,它意味着当存储器缓冲区接收到N字节时,ONCOMM 事件就会有所反应。因此,事件驱动对于接收不固定长度的信息帧是不理想的。换句话说,轮询的方法可以周期地读取寄存器缓冲标志去判断一个事件是否发生。当轮询完成时,它不需要硬件中断,而且不丢失任何数据或事件。但是这种轮询方法需要一步一步地接收或者发送信息不全的数据。考虑到各种方法的优点,这篇文章讲了一种方法是通过建立有定时器中断的轮询机构去接收MODBUS信息帧。正是因为发送信息的过程很简单,这里我们只讲述一下在PC中怎样去接收那些不固定长度的信息帧。
为了连续地观测串行口数据发送或接收状态,在同一时间里,整个过程在一个很大的范围内进行,它容许去交换对整个操作系统的控制权,这种技术也就确保当操作系统事件能够被响应时,应用程序集中到了它想要做的事件上。编程的关键就是当帧开始和结束时,怎样去发现应用程序监管的许多字节已接收到,而且当两个接收字节的时间间隔超过最大的计划发送信息帧所包涵的两个字节的时间间隔时,要接收每个字节时都要先复位计时器。定时器会产生一个中断事件而且置帧的结束标志位为“frame_end=True”,而且假如主要循环程序校验到帧结束标志时,它将停止计时。而且发送接收数据,使其给过程排列。正确的计时时间是在结束了帧之后的一个3.5字符默认间隔时间。主要程序如下:
Dim inAa() as Byte
Newcount=0
Oldcount=0
Do
Newcount=MSComm1.InBufferCount
If newcountlt;gt;oldcount Then
Timer1.Enabled=False
Timer1.Enabled=Ture
End If
If frame-end Then
Timer1.Enabled=False
Frame-end=False
inA=MSComm1 Input
inAa=inArsquo;saving the whole frame data
received into inAa array
MSComm1.InBufferCount=0
Newcount=0
Oldcount=0
Call dataprocess
End If
DoEvents
Loop Until 0
4.3 用SCM 实现MODBUS协议
和PC相比较,在SCM上实现MODBUS协议是会简单的多,因为SCM 能够明确地执行计时,而且还能够更精确地判断帧间隔。此外,装配语言的强大数据计算能力,能够使它更方便地计算CRC 的值。信息接收资料过程技术是在串行中断有最大的信息帧时间间隔之后,等待下一个数据字节。假如没有新的字节,帧将结束,而且程序跳出串行中断子程序。更详细的过程就不在这说了。
5 结束语
在世界上,MODBUS协议已经有了很多性能,例如,广阔的开放性和更完全的使用,过程简单,足够的容量和很高的可靠性。这种过程技术已经被用在一个很理智的存储器潮湿系统中,而且有很好的使用。就是有了MODBUS 的目标和普遍性,装置可以建立一个可靠的连接及和其它自动化Mamp;C系统的网络格式。
参考文献
[1] Electron engineering special editors Schneider iransfers MODBUS protocol, driving the industrial communication standard to be opened www.eetchina.com, April 2004(in Chinese)
[2] Modbus-IDA MODBUS Application Protocol Specification V1 a www. Modbus-IDA .org , June 4,2004
[3] Schneider Electric, MODBUS over Serial Line Specification amp; Implementation Guide V1.0 www. Modbus org, 2002.12
[4]Zhang Honking, Zhang Ningda, Zheng Yunping Use Mscomm Control Component to Implement Serial Communication under Visual Basic [J] control amp; Automation, 2002,12:67-68(in Chnese)
[5]Huang Xinyu, Du Min. Combining Event-driven Method with Poll Port Method in Serial Communication and Its Application [J] Automation amp;Instrumentation, 2003,Vol 18,No 6:70-72(in Chinese)
[6]Huang Ning, Fan Yixiang, Zhang Jun. Real
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[146433],资料为PDF文档或Word文档,PDF文档可免费转换为Word