Modbus协议在质量流量计组态软件中的应用



主设备的询捎a设£地址她址功能代码功能代码SS.据错误校骑从设备的应答消息Modbus协议建立的主设备查询格式:设备(或广播)地址、功能代码、所有要发送的数据、错误校验码。从设备回应消息也由Modbus协议构成,包括地址、功能代码、返回的数据和一错误检测域。如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将发回一错误消息。

  如为主-从设备查询响应循环。

  标准的Modbus协议使用两种模式进行通信:ASC和RTU,这两种模式在报文结构、功能代码上相同,仅错误校验方法不同。

  箝误校势|从设的应答作当控制器设为在Modbus网络上以ASC(美国标准信息交换代码)模式通信时,在消息中的每8Bit字节都作为两个ASC字符发送,主-从设备查询响应循环在ASC模式下,消息均以“:”(十六进制3A)开始,以回车换行(十六进制0D和0A)结束。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误,ASC模式通信要比RTU模式占用更多的空间,但编程、解码方便,ASC消息帧格式如下::2009―02―12的维护工作。

  开始地址功能码数据结束个字符<=>2个字。H2个字NN个字符::个字符::个字符(阿车行符)字节格式:消息中的每个ASC字符都是由一个十六进制字符组成。

  字节中位的组成:1个起始位,7个数据位,1个奇偶校验位(无校验则无),1个停止位(有校验时)或2个停止位(无校验时)。

  错误校验域,采用LRC校验(所有字节进行异或运算形成纵向冗余校验)当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信时,信息是以8位二进制方式传送的,这种方式的好处是在同等传输速率下,可以比ASC模式传送较多的信息,该模式在智能仪表、PLC、DCS上普遍采用。

  消息中的每个8位域都是个两个十六进制字符组成。

  字节中位的组成:1个起始位,8个数据位,1个奇偶校验位(无校验则无),1个停止位(有校验时)或2个停止位(无校验时)。

  错误校验域,采用CRC(循环冗余校验)3协议帧格式Modbus消息格式由地址、功能码、数据段、校验码等四部分组成,数据段内容根据主-从之间的关系可包括寄存器起始地址、寄存器数量、字节数、数据位等。主设备向从设备发送的请求称为主-从帧,由多个信息组成:从设备必须执行的功能代码,连续的或不连续的寄存器地址,要处理项的数目,域中实际数据等。

  例如,如果主设备需从设备中读取组保持寄存器的值(功能代码03),数据域需指定起始寄存器以及要读取的寄存器数量。如果主设备向从设备的一组寄存器写入信息(功能代码10十六进制),数据域则指明要写的起始寄存器地址以及要写的寄存器数量,数据域的字节数和要写入寄存器的数据等。下表是主设备查询从设备的消息格式:地址命令寄存器起始地址寄存淫数1 CRC校验码1字T二字3 2字筇从设备得到请求后向主设备发送的响应格式:其中“数据长度”就是“返回数据”域的字节个数,也就是请求消息中的“寄存器数量”乘以2的值3.1地址帧首的Address地址为智能仪表的轮询地址,范围为0-247,一般RS485接口仅支持0-32.这个字节表明仅拥有该地址的从设备返回信息,其他设备不应答,每个设备都要有惟一的地址,返回的信息均以各设备的地址码开始。

  3.2功能码信息帧的功能码可用两个字节表示,范围为1-255,功能码表示主机要求设备执行的操作种类,如03表示读保持寄存器数据,表1部分常见功能码的含义功能P5名称作用01取得组逻辑线阁的当前状悉<(5N/0Fn02读取轴入状态取梅一纽关tt入的当舫状态03生一个或多个保待寄存器中取傅当时的二进制值04读输入寄存器在一个成多个嫌入寄存器中取得当时的二进制值05强S单线强a―个还铒线at的通所伏态06执S单寄存路把只体二进值砚入一个保持寄存K15强S多线函3―W洼续逻辑线钿的嫌断16顸a;寄苻器把具体的二进邾值砚入一币连续的保待寄存器表2常见地址的操作类型硖射地址功能码地扯类沏存方式述oxxxkOJh15倪m巧直ON.OFFl.sxxx0:两敢输入读ON.OFF沣点指钭寄存器两个连读Ifi位寄存路嵌示Zsisxx04- 1C一个浮点致tl战格式u也)sxxx油入芾存器只该每个寄存腱表示个16也03,06,保持寄存S读……写每个寄存器衣示一个1C位fxxsx03. 16ASCN字符读。写每个哥存器表示两个ASCI 05表示修改某个线圈位,16表示修改设备地址等,此外,设备响应主机时,还用功能码指示设备的工作状态,用以表示响应是否正常,若出现错误,功能码位被置为1.表1是部分常见功能码的含义。

  3.3数据域数据域是请求和响应的主要内容,主机向设备请求读取寄存器内容时,数据域包括寄存器的起始地址以及读取的寄存器个数。

  寄存器是设备存放数据的地方,一个寄存器可存储2字节二进制数据或两个ASC字符,寄存器地址为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用于ASC模式的传输校验,校验范围是从地址到校验码之前的数据,连续异或后得出校验码。CRC用于RTU模式的传输校验,采用的是通信领域常用的CRC-16校验法,CRC长度为2字节,其中低位在前,高位在后,以下给出在VB下CRC校验码的生成例子:在函数的调用参数中:data为要进行校验的数据序列(自地址到校验码之前的数据),crcl为低位,crc2为高位。

  Fori=0Ton-1‘n为要生成CRC校验码的数据字节数,即传来的数组长度4常见读写操作4.1读保持寄存器实时采集和监控主要涉及读寄存器操作,如要采集流量计的瞬时流量,经查询艾默生质量流量计通信手册,得仪表中瞬时量的寄存器地址为20247-20248,共占用两个寄存器。地址的个数字2代表需使用功能码3进行读操作,将寄存器的地址减去1,即20247- 20248要改为20246-20247,在请求消息中寄存器实际首地址用246(十六进制F6)表示,本例设仪表站地址为1,则发送的请求帧为:地扯功能码寄存器地tiJ:寄器数里crc校验将上面8个16进制数,发到仪表上,就可从串口收到下列数据(可用“串口精灵”工具软件进行试验):码返回数据的字爷数第1宇节第2宇节第3宇节第4宇节CUC校狯码8542FB为4字节IEEE754格式浮点数,其结构为:1位符号位,8位指数位,23位尾数位,对此需进行规格化处理,得到仪表值为125.96.将4字节十六进制浮点数化为十进制数的子程序代码如下:EndFunction4.2写保持寄存器在实际工作中除读寄存器外,有时还需改动仪表参数,进行写寄存器操作。如要将从设备的轮询地址(PollAddress)改为4,4为根据处理得到的义原与层数的对应关系在文件中查找到两个词语的义原数组所对应的层数关系,按照对应的关系赋予不同的参数后按照上文中的公式进行计算,将结果存放在双变量sim中While(everysim!

  4结果与讨论经过大量实验,本次设计基本可以较准确的用数值的形式表示出两个中文词语的词义相似度,能够直观的反应出中文词语的相互关系,所得的结果和人的直观感觉基本一致,大体上达到了本次设计的目标。