Modbus协议在质量流量计组态软件中的应用.docx
- 文档编号:11854013
- 上传时间:2023-04-06
- 格式:DOCX
- 页数:12
- 大小:51.68KB
Modbus协议在质量流量计组态软件中的应用.docx
《Modbus协议在质量流量计组态软件中的应用.docx》由会员分享,可在线阅读,更多相关《Modbus协议在质量流量计组态软件中的应用.docx(12页珍藏版)》请在冰豆网上搜索。
Modbus协议在质量流量计组态软件中的应用
Modbus协议在质量流量计组态软件中的应用
1引言
Modbus协议由Modicon公司在1978年发明,是全球第一个真正用于工业现场的总线协议,Modbus具有开放,简单的重要特性,用户可以免费、放心地使用Modbus协议,不用交纳许可证费,也不会侵犯知识产权。
Modbus帧格式简单、紧凑,用户使用容易,厂商开发便利。
随着仪表和通信技术的发展,Modbus协议正向网络化发展,目前其于ModbusTCP/IP的通信正在工业以太网领域得到用户青睐。
Modbus由于得到众多仪表厂家的支持,在PLC、智能仪表上的成功应用,使其成为工业自动化领域的事实标准。
近年来,各仪表厂家纷纷采用该标准,生产支持Modbus协议的产品,如横河,艾默生,E+H,ABB等,尤其艾默生公司生产的流量仪表除保留HART协议外还向用户提供了基于Modbus协议的RS485通信接口,以支持远程通信。
我厂是石油化工企业,现场使用的大多是流量式仪表-质量流量计,其中支持Modbus协议占大多数,在生产实践中,我们根据有关技术文献,利用高级语言开发了非常实用的流量计组态软件,具备Modbus的基本功能,可完成标零,校准,修改流量系数,故障诊断等功能,还支持网络和数据存储,为仪表的调校和维护提供了快捷方便的工具。
2Modbus协议
Modbus协议在控制系统和设备之间采用类似短语的格式进行通信,所有发送的信息包均具有相同的格式。
Modbus采用主从工作方式:
主设备(Host)为智能终端或上位机,从设备(Slave)为多台遵守Modbus协议的智能仪表或变送器。
每台设备可由用户设定地址以实现访问操作,地址范围为0-247,其中0为广播地址,所有从设备都可识别但不响应。
Modbus要访问设备中的参数需要用户确定其参数的位置(地址),即读取、写入数据,需要明确该数据存放在哪个寄存器上。
Modbus手册向用户提供了设备中每个参数的具体位置,用户通过命令可以进行读、写有关“位”信息和“字节”信息。
Modbus协议建立的主设备查询格式:
设备(或广播)地址、功能代码、所有要发送的数据、错误校验码。
从设备回应消息也由Modbus协议构成,包括地址、功能代码、返回的数据和一错误检测域。
如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将发回一错误消息。
如图1为主-从设备查询响应循环。
标准的Modbus协议使用两种模式进行通信:
ASCII和RTU,这两种模式在报文结构、功能代码上相同,仅错误校验方法不同。
2.1ASCII模式
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信时,在消息中的每8Bit字节都作为两个ASCII字符发送,在ASCII模式下,消息均以“:
”(十六进制3A)开始,以回车换行(十六进制0D和0A)结束。
这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误,ASCII模式通信要比RTU模式占用更多的空间,但编程、解码方便,ASCII消息帧格式如下:
字节格式:
1)采用十六进制,ASCII字符0…9,A…F。
2)消息中的每个ASCII字符都是由一个十六进制字符组成。
3)字节中位的组成:
1个起始位,7个数据位,1个奇偶校验位(无校验则无),1个停止位(有校验时)或2个停止位(无校验时)。
4)错误校验域,采用LRC校验(所有字节进行异或运算形成纵向冗余校验)
2.2RTU(RemoteTerminalUnit)模式
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信时,信息是以8位二进制方式传送的,这种方式的最大好处是
在同等传输速率下,可以比ASCII模式传送较多的信息,该模式在智能仪表、PLC、DCS上普遍采用。
字节格式:
1)采用8位二进制,十六进制数0…9,A…F表示。
2)消息中的每个8位域都是一个两个十六进制字符组成。
3)字节中位的组成:
1个起始位,8个数据位,1个奇偶校验位(无校验则无),1个停止位(有校验时)或2个停止位(无校验时)。
4)错误校验域,采用CRC(循环冗余校验)
3协议帧格式
Modbus消息格式由地址、功能码、数据段、校验码等四部分组成,数据段内容根据主-从之间的关系可包括寄存器起始地址、寄存器数量、字节数、数据位等。
主设备向从设备发送的请求称为主-从帧,由多个信息组成:
从设备必须执行的功能代码,连续的或不连续的寄存器地址,要处理项的数目,域中实际数据等。
例如,如果主设备需从设备中读取一组保持寄存器的值(功能代码03),数据域需指定起始寄存器以及要读取的寄存器数量。
如果主设备向从设备的一组寄存器写入信息(功能代码10十六进制),数据域则指明要写的起始寄存器地址以及要写的寄存器数量,数据域的字节数和要写入寄存器的数据等。
下表是主设备查询从设备的消息格式:
从设备得到请求后向主设备发送的响应格式:
其中“数据长度”就是“返回数据”域的字节个数,也就是请求消息中的“寄存器数量”乘以2的值。
3.1地址
帧首的Address地址为智能仪表的轮询地址,范围为0-247,一般RS485接口仅支持0-32。
这个字节表明仅拥有该地址的从设备返回信息,其他设备不应答,每个设备都要有惟一的地址,返回的信息均以各设备的地址码开始。
3.2功能码
信息帧的功能码可用两个字节表示,范围为1-255,功能码表示主机要求设备执行的操作种类,如03表示读保持寄存器数据,05表示修改某个线圈位,16表示修改设备地址等,此外,设备响应主机时,还用功能码指示设备的工作状态,用以表示响应是否正常,若出现错误,功能码最高位被置为1。
表1是部分常见功能码的含义。
3.3数据域
数据域是请求和响应的主要内容,主机向设备请求读取寄存器内容时,数据域包括寄存器的起始地址以及读取的寄存器个数。
寄存器是设备存放数据的地方,一个寄存器可存储2字节二进制数据或两个ASCII字符,寄存器地址为16位,按高位在前低位在后排列,有关寄存器地址可查阅仪表通信手册。
设备回送响应的数据域包括数据长度、实际采集的数据,另外,当设备出现异常时,数据域存放的则是错误代码,根据错误代码软件可进行报警处理。
3.4寄存器地址
寄存器地址通常用5位十进制数表示,如20247,30120等,由于Modbus所有信息地址均是以0为起始位置的,第一个寄存器的地址就是0,故其余地址均要减去1,例如:
保持寄存器40001的地址就是0000,其中4是表示要对保持寄存器进行操作,20108的寄存器地址就是108-1=107,转成十六进制就是006B。
表2是常见地址的操作类型。
3.5校验码
为避免误码保证通信的可靠性,标准的MODBUS协议有两种数据校验方法:
LRC(纵向冗余校验)和CRC(循环冗余校验)。
LRC用于ASCII模式的传输校验,校验范围是从地址到校验码之前的数据,连续异或后得出校验码。
CRC用于RTU模式的传输校验,采用的是通信领域常用的CRC-16校验法,CRC长度为2字节,其中低位在前,高位在后,以下给出在VB下CRC校验码的生成例子:
在函数的调用参数中:
data为要进行校验的数据序列(自地址到校验码之前的数据),crc1为低位,crc2为高位。
PublicSubMake_CRC(data()AsByte,ByValnAsInteger,crc1AsByte,crc2AsByte)
'计算CRC校验码
DimcrcAsLong
DimiAsInteger
DimjAsInteger
DimcarryAsInteger
crc=&HFFFF‘初始化
Fori=0Ton–1‘n为要生成CRC校验码的数据字节数,即传来的数组长度
crc=crcXordata(i)
Forj=1To8‘处理每个字节的每一位
crc=crcAnd&H2FFFF
IfcrcAnd&H1Then
carry=1
Else
carry=0
EndIf
crc=Int(crc/2)
Ifcarry<>0Then
crc=crcXor&HA001
EndIf
Nextj
Nexti
crc=crcAnd&H4FFFF
crc=crcAnd&H2FFFF
crc1=crcAnd&HFF‘取得CRC码低位
crc2=(crcAnd&HFF00)/256‘取得CRC码高位
EndSub
4常见读写操作
4.1读保持寄存器
实时采集和监控主要涉及读寄存器操作,如要采集流量计的瞬时流量,经查询艾默生质量流量计通信手册,得仪表中瞬时量的寄存器地址为20247-20248,共占用两个寄存器。
地址的第一个数字2代表需使用功能码3进行读操作,将寄存器的地址减去1,即20247-20248要改为20246-20247,在请求消息中寄存器实际首地址用246(十六进制F6)表示,本例设仪表站地址为1,则发送的请求帧为:
将上面8个16进制数,发到仪表上,就可从串口收到下列数据(可用“串口精灵”工具软件进行试验):
返回的数据EB8542FB为4字节IEEE754格式浮点数,其结构为:
1位符号位,8位指数位,23位尾数位,对此需进行规格化处理,得到仪表值为125.96。
将4字节十六进制浮点数化为十进制数的子程序代码如下:
‘dat()数组中存放4字节待转化的十六进制数,函数返回十进制数。
如将上面返回的数据进行转换,需赋值:
dat(0)=&HEB,dat
(1)=&H85,dat
(2)=&H42,dat(3)=&HFB。
PrivateFunctionIEEE2float(dat()AsByte)Assingle
DimaAsSingle
DimbAsSingle
a=(dat
(1)+dat(0)*256+(dat(3)And127)*65536)/8388608+1
b=((dat
(2)And&H7F)*256+(dat(3)And&H80))/128-127
Ifa=1.25Andb=128Thenieee2float=0
Ifa<>1.25Andb<>128Then
IEEE2float=a*(2^b)
EndIf
Ifdat
(2)And128Then
IEEE2float=-IEEE2float‘符号位为1则为负数
EndIf
EndFunction
4.2写保持寄存器
在实际工作中除读寄存器外,有时还需改动仪表参数,进行写寄存器操作。
如要将从设备的轮询地址(PollAddress)改为4,4为整数占用两个字节,需用一个寄存器,经查其寄存器的起始地址为40047,4表示对保持寄存器操作,写操作的功能号为16,寄存器地址减去1为46(十六进制2E),则向从设备发送如下命令,则可完成将从设备的地址改成4的操作,其发送消息格式如下:
4.3程序设计
在软件开发过程中,考虑到现有组态软件大多支持VB脚本程序,采用了VisualBasic6。
0程序设计语言,其中通信模块利用Mscomm32。
ocx控件实现,由于支持的属性和方法较多,编程方便,被用户普遍采用。
主程序主要由串口初始化,设置波特率,发送请求,等待响应,处理串口数据等模块组成。
在编程中需注意因ModbusRTU是基于二进制的,发送和返回消息中都包含了大于127的编码,故需设置Mscomm的属性为二进制,即在程序中设置:
MSComm1。
InputMode=comInputModeBinary。
5结束语
企业ERP、MES的实施,对过程控制层仪表的通信提出了更高的要求,其目的是可连续7×24小时、实时性的采集现场数据,了解工艺状况,跟踪产品质量。
与此同时,对仪表的监控、维护和管理将更加严格,本文讨论的流量计组态软件的使用可减轻仪表技术人员的劳动强度,方便操作和生产,对其他基于Modbus通信协议的设备也有重要参考价值。
通讯协议
数据查询(功能号2)
上位机发送命令:
[设备地址][命令号][00][01][00][02][CRC低8位][CRC高8位]
意义如下:
A、设备地址:
模块自带的ID地址。
B、命令号:
0x02。
C、CRC校验,读取个数高8位、低8位。
举例:
查询1#模块数据:
[01][02][00][01][00][02][A8][0B]
模块回复:
[01][02][04][0C][00][11][4C][FE][00]
模块响应格式:
[设备地址][数据长度][数据1][数据2][CRC低8位][CRC高8位]
上例查询回复中:
01表地址1,02表共有两个数据,第一个数据为0C00折成10进制即为:
3072,因模块分辨率为0.01,该值需除以100,即实际温度值为30.72度,同理:
114C为湿度值,十进制数据为:
4428,湿度值为4428
为方便查询:
1-5#查询的命令为:
查询1#模块命令(十六进制):
010200010002A8B
查询2#模块命令(十六进制):
020200010002A838
查询3#模块命令(十六进制):
030200010002A9E9
查询4#模块命令(十六进制):
040200010002A85E
MODBUS-RTU通讯协议简介
1.1Modbus协议简述
ACRXXXE系列仪表使用的是Modbus-RTU通讯协议,MODBUS协议详细定义了校验码、数据序列等,这些都是特定数据交换的必要内容。
MODBUS协议在一根通讯线上使用主从应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。
首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机。
Modbus协议只允许在主机(PC,PLC等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。
1.2查询—回应周期
1.2.1查询
查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。
例如功能代码03是要求从设备读保持寄存器并返回它们的内容。
数据段必须包含要告之从设备的信息:
从何寄存器开始读及要读的寄存器数量。
错误检测域为从设备提供了一种验证消息内容是否正确的方法。
1.2.2回应
如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。
数据段包括了从设备收集的数据:
如寄存器值或状态。
如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。
错误检测域允许主设备确认消息内容是否可用。
1.3传输方式
传输方式是指一个数据帧内一系列独立的数据结构以及用于传输数据的有限规则,下面定义了与Modbus协议–RTU方式相兼容的传输方式。
每个字节的位:
·1个起始位
·8个数据位,最小的有效位先发送
·无奇偶校验位
·1个停止位
错误检测(Errorchecking):
CRC(循环冗余校验)
1.4协议
当数据帧到达终端设备时,它通过一个简单的“端口”进入被寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。
返回的响应数据中包含了以下内容:
终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。
发生任何错误都不会有成功的响应,或者返回一个错误指示帧。
1.4.1数据帧格式
AddressFunctionDataCheck
8-Bits8-BitsNx8-Bits16-Bits
1.4.2地址(Address)域
地址域在帧的开始部分,由一个字节(8位二进制码)组成,十进制为0~255,在我们的系统中只使用1~247,其它地址保留。
这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。
每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应包含了该地址的查询。
当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通信。
1.4.3功能(Function)域
功能域代码告诉了被寻址到的终端执行何种功能。
下表列出了该系列仪表用到的功能码,以及它们的意义和功能。
代码意义行为
03读数据寄存器获得一个或多个寄存器的当前二进制值
16预置多寄存器设定二进制值到一系列多寄存器中(不对ACRXXXE开放)
1.4.4数据(Data)域
数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。
这些数据的内容可能是数值、参考地址或者设置值。
例如:
功能域码告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同内容而有所不同。
1.4.5错误校验(Check)域
该域允许主机和终端检查传输过程中的错误。
有时,由于电噪声和其它干扰,一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的安全性和效率,错误校验使用了16位循环冗余的方法(CRC16)。
1.5错误检测的方法
错误校验(CRC)域占用两个字节,包含了一个16位的二进制值。
CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。
CRC运算时,首先将一个16位的寄存器预置为全1,然后连续把数据帧中的每个字节中的8位与该寄存器的当前值进行运算,仅仅每个字节的8个数据位参与生成CRC,起始位和终止位以及可能使用的奇偶位都不影响CRC。
在生成CRC时,每个字节的8位与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值(0A001H)进行一次异或运算,如果最低位为0,不作任何处理。
上述处理重复进行,直到执行完了8次移位操作,当最后一位(第8位)移完以后,下一个8位字节与寄存器的当前值进行异或运算,同样进行上述的另一个8次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是CRC值。
生成一个CRC的流程为:
1预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。
2把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。
3将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。
4如果最低位为0:
重复第三步(下一次移位);如果最低位为1:
将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。
5重复第三步和第四步直到8次移位。
这样处理完了一个完整的八位。
6重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。
7最终CRC寄存器的值就是CRC的值。
此外还有一种利用预设的表格计算CRC的方法,它的主要特点是计算速度快,但是表格需要较大的存储空间,该方法此处不再赘述,请参阅相关资料。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Modbus 协议 质量 流量计 组态 软件 中的 应用