HART通讯浅谈

发布时间:2015/2/26 10:34:55

HART协议简介及应用

现代工业生产中存在着多种不同的主机和现场设备,要想很好地使用他们,完善的通讯协议是必须的。HART协议最初是由美国Rosemount公司开发已应用了多年HART协议使用FSK技术4~20mA信号过程量上叠加一个频率信号,成功地把模拟信号和数字信号双向同时通讯,而不互相干扰。HART协议参照了国际标准化组织的开放性互连模型,使用OSI标准的物理层、数据链路层、应用层HART协议规定了传输的物理形式、消息结构、数据格式和一系列操作命令,是一种主从协议。当通讯模式为问答式的时候,一个现场设备只做出被要求的应答。HART协议允许系统中存在2个主机(比如说,一个用于系统控制,另一个用于HART通信的手操仪),如果不需要模拟信号,多点系统中的一对电缆线上最多可以连接15个从设备。 

 

物理层 
物理层规定了信号的传输方法、传输介质。采用Bell202标准的FSK频移键控信号,在低频的420mA模拟信号上叠 加一个频率数字信号进行双向数字通信。数字信号的幅度为0 . 5 m A,数据传输率为1200bps1200Hz代表逻辑12200Hz代表逻辑0 

 

数据链路层

数据链路层规定HART协议帧的格式,可寻址范围015“0”时,处于420mA及数字信号点对点模式,现场仪表与两个数字通信主设备(也称作通信设备或主设备)之间采用特定的串行通信,主设备包括PC机或控制室系统和手持通信器。单站操作中,主变量(过程变量)可以以模拟形式输出,也可以以数字通信方式读出,以数字方式读出时,轮询地址始终为0。也就是说,单站模式时数字信号和420mA模拟信号同时有效。 “115”处于全数字通信状态,工作在点对多点模式,通信模式有问答式、突发(点对点、自动连续地发送信息)。按问答方式工作时的数据更新速率为23次/s,按突发方式工作时的数据更新速率为34次/s。在本质安全要求下,只使用一个电源,至多能连接15台现场仪表,每个现场设备可有256个变量,每个信息可包含4个变量。这就是所谓的多点(多站)操作模式。这种工作方式尤其适用于远程监控,如管道系统和油罐储存场地。采用多点模式,420mA的模拟输出信号不再有效(输出设在4mA使功耗,主要是为变送器供电,各个现场装置并联连接 ),系统以数字通信方式依次读取并联到一对传输线上的多台现场仪表的测量值(或其它数据)。如果以这种方式构成控制系统,可以显著地降低现场布线的费用和减少主设备输入接口电路,这对于控制系统有重要价值。 HART协议根据冗余检错码信息,采用自动重复请求发送机制,消除由于线路噪声或其他干扰引起的数据误码,实现数据无差错传送。能利用总线供电,可满足本质安全防爆要求。HART协议信息帧的格式如下图所示。 HART协议的帧格式以8位为一个字节进行编码,对每个字节加上一个起始位、一个奇偶校验位和一个停止位以串行方式进行传输。通常采用UART(通用异步接收/发送器)来完成字节的传输。由于数据的有无和长短不恒定,所以HART数据的长度不能超过25个字节。  消息结构
如下所示,一条消息包括源地址、目的地址和一个校验位。每一个应答消息中包括现场设备状态,用于确保持续通讯的顺畅进行。数据位可有可无,视具体情况而定。一般每秒种可以传输23条消息。 PREAMBLE START ADDR COM BCNT STATUS DATA PARITY 序文 定界符 地址 命令号 数据长度 响应码 数据字节 奇偶校验
HART50以前版本的设备一般采用短结构,单一的现场设备如果只利用420 mA电流信号进行测量时,从设备的地址都是0;否则,对于多设备而言,从设备的地址是从115,这种短结构的地址采用随选的方法,随机分配115中的一个。HART50版本推出了长结构,这种格式的从设备地址具有性,如同每个网卡中物理地址一样,全世界范围内都没有重复,一般占5个地址字节中的38位。这38位地址信息包含了生产厂家的代码、设备型号码和设备识别码。这种格式减少了误传输和误接收的可能性。现在大多数主机设备既能支持长结构又兼容短结构,当从机的应答信号中没有标识码时,HART50及其以上的版本提供的0号命令,就可以用于短帧中的设备地址识别。也就是说,主机将根据应答信号中是否具有惟一标识码来决定结构格式为还是 一般消息帧的组成,其中:
1PREAMBLE 导言字节,一般是520FF十六进制字节。他实际上是同步信号,各通讯设备可以据此略做调整,保证信息的同步。在开始通讯的时候,使用的是20FF导言,从机应答0信号时将告之主机他希望接收几个字节的导言,另外主机也可以用59号命令告诉从机应答时应用几位导言。
2START 起始字节,他将告之使用的结构为还是、消息源、是否是突发模式消息。主机到从机为短结构时,起始位为02,长帧时为82。从机到主机的短结构值为06,长结构值为86。而为突发模式的短结构值为01,长结构为81。一般设备进行通讯接收到2FF字节后,就将侦听起始位。
3ADDR 地址字节,他包含了主机地址和从机地址,如前所述,短结构中占1字节,长结构中占5字节。无论长结构还是短结构,因为HART协议中允许2个主机存在,所以我们用首字节的位来进行区分,值为1表示主机地址,第二主机用0表示。突发模式是特例,01值将交替出现,也就是说,在该模式下,赋予2个主机的机会均等。次高位为1表示为突发模式,短结构用首字节的04位表示值为015的从机地址,第56位赋0;而长结构用后6位表示从机的生产厂商的代码,第2个字节表示从机设备型号代码,后35个字节表示从机的设备序列号,构成标志码。 MA 主机地址 BM 突发模式 0 0 SASASASA        另外,长结构的低38位如果都是0的话表示的是广播地址,即消息发送给所有的设备。
4COM 命令字节,他的范围为253个,用HEX0FD表示。31127254255为预留值。
5BCNT 数据总长度,他的值表示的是BCNT下一个字节到(不包括校验字节)的字节数。接收设备用他可以鉴别出校验字节,也可以知道消息的结束。因为规定数据最多为25字节,所以他的值是从027
6STATUS 状态字节,他也叫做响应码,顾名思义,他只存在于从机响应主机消息的时候,用2字节表示。他将通讯中的错误、接收命令的状态(如:设备忙、无法识别命令等)和从机的操作状态。
如果我们在通讯过程中发现了错误,首字节的位(第7位)将置1,其余的7位将汇报出错误的细节,而第2个字节全为0。否则,当首字节的位为0时,表示通讯正常,其余的7位表示命令响应情况,第2个字节表示场设备状态的信息。
UART发现的通讯错误一般有:奇偶校验、溢出和结构错误等。命令响应码可以有128个,表示错误和警告,他们可以是单一的意义,也可以有多种意义,我们通过特殊命令进行定义、规定。现场设备状态信息用来表示故障和非正常操作模式。
7DATA 数据字节,首先我想说明的是并非所有的命令和响应都包含数据字节,他最多不超过25字节(随着通讯速度的提高,正在要求放宽这一标准)。数据的形式可以是无符号的整数(可以是8162432 b),浮点数(用IEEE754单精浮点格式)或ASCII字符串,还有预先制定的单位数据列表。具体的数据个数根据不同的命令而定。
8CHK 奇偶校验,方式是纵向奇偶校验,从起始字节开始到奇偶校验前一个字节为止。另外,每一个字节都有1位的校验位,这两者的结合可以检测出3位的突发错误。

 

应用层操作命令处于应用层,包括通用命令、普通命令和特殊命令。    
通用命令通用命令是所有现场装置都配备的包括
 1) 读制造商码和设备类型 2) 读变量PV和单位 3) 读当前输出和百分量程 4) 读取多达4个预先定义的动态变量 5) 读或写8字符标签16字符描述符日期 6) 读或写32字符信息 7) 读变送器量程单位阻尼时间常数 8) 读传感器编号和极限 9) 读或写最终安装数 10) 写登录地址 常用命令常用命令提供的功能是大部分但不是全部现场装置都配备的包括 1) 4个动态变量之一 2) 写阻尼时间常数 3) 写变送器量程 4) 校准置零置间隔 5) 设置固定的输出电流 6) 执行自检 7) 执行主站复位 8) 调整PV零点 9) PV单位 10) 调整DAC零点于增益 11) 写变换函数平方根/线性 12) 写传感器编号 13) 读或写动态变量用途专用命令专用命令提供分别对特殊的现场装置适用的功能包括 1) 读或写低流量截止值 2) 起动停止或取消累积器 3) 读或写密度校准系数 4) 选择变量 5) 读或写结构材料信息 6) 调整传感器校准值 通用命令的范围从030011:设备识别(厂商、设备类型、版本) 123:读测量值 6:置随选地址 12131718:读、写用户输入文本信息 1415:读设备信息(传感器序列号,传感限,报警操作,范围,传输结构) 1619:读、写最终装配号

 

普通命令是从32126,提供了大多数设备的功能命令。
普通命令中的123126号命令并非公共的,他们专用于生产厂家在生产设备时输入设备的特殊信息,一般用户是不会改动的,像设备识别号之类。也可以用于直接读、写存储器。 3361110:读测量值 34374447:设置操作变量(范围、时限、PV值、传输功能) 38:复位结构变化标志 39EPROM控制 4042:对话功能(固定电流模式、自测、复位) 434546:模拟输入、输出整流 48:读附设备的状态 49:写传感器序列号 5056:用传输变量 5758:单元信息(标志、描述、数据) 59:写所需导言号 606270:使用复合模拟输出 107109:突发模式控制 

 

特殊命令的范围是从128253他提供给现场设备专用的功能。早先的设备特殊命令常常将设备型号码作为数据中的第1个字节,以保证命令传输给正确的设备。在HART50版本之后,由于惟一标识码的使用,就省略掉了这步骤。用户若要使用不同设备的特殊命令时可以参照厂家提供的设备文档。


常用重要命令介绍
011: 用于识别现场设备。我们知道无论采用长结构还是短结构都可以标识现场设备,应答0号命令的信息中就包含了对不同设备的标识;然后,主机建立不同的标志,为随后的长结构命令做准备。在HART40版本及以前,传输类型码分为2字节:一个是生产厂商代码,另一个是设备类型代码。而两个字节还可以节略。到了HART50版本就必须使用扩充的代码表示设备信息,还用ID号代替了最终流水线号。
一个主机通常以0号命令开始通讯,赋予随选地址0,然后扫描115地址,看谁期待操作,显然由于HART50版本后的设备,主机可以使用11号命令,再带一个全0的广播地址,外加命令中的标志作为数据,等待着具有相同标志的从机响应,而应答的11号命令等同于0号命令。
23: 用于读取不同形式中的测量变量。命令23中有以mA为单位的电流值,电流值只有在设定输出范围内才可以作为主参量PV,而在其他时候,像复用模式、输出量可变、饱和或设备错误都不能如此使用。尽管PV和其他动态变量不受设定输出范围的限制,但是却必须受限于传感设备。
6: 用于随选地址的设定。设定为0,该设备就在点到点的模式工作,产生模拟输出信号;设61定为115,设备就工作在多点模式中,输出电流值固定为4 mA
1219: 用于读、写一系列设备信息。HART40版本及以前使用4号和5号命令实现此功能。 数据格式
如果传送的命令不成功,那么响应中就不包含数据。然而响应值是从现场设备内存中取出的,是一个近似值。数据所占的字节和格式视不同的命令而定,具体的规则可以查询相关的资料。 


看实例了解HART消息结构例1:主机到从机 FFFFFFFFFF82A606BC614E0100B0上面是主机到从机发送的一条消息。前5个字节值都为FF,显然它是导言字节。接着的82起始字节,表示主机到从机发出的长结构的消息。后5个字节 “A606BC614E”是地址字节化为二进制表示如下: A6 06 BC 61 4E 1010 0110 0000 0110 1011 1100 0110 0001 0100 1110 可见首字节A6的位为1表示主机,次高位为0表示非突发模式,后面的38 b表示设备的惟一标号: “100110”是生产厂家代码,值为38,是Rosemount公司的代码;后一字节06是设备型号代码,06代表的型号是3051C;后面的3个字节是设备识别号,本例中的值为12345678;再接下来的01是命令字节,表示1号命令,即读取PV值后面的00是表示数据的长度;本例中无数据,值为0;是校验字节B0 2:从机到主机FF FF FF FF FF 86 A6 06 BC 61 4E 01 07 00 00 06 40 B0 00 00 45 上面表示的是从机到主机的一条消息。本例大部分与例1相似,不同的是数据字节不再为0,其中的06表示单位PSI;后面的4个字节是用浮点数表示的值, 55。并且由于本例是由从机到主机的应答消息,所以存在着状态位,即本例中的“00 00”,表示“OK” 3:突发模式FF FF FF FF FF 81 53 03 04 E6 D7 03 1A 00 60 41 3F A0 00 27 41 3F A0 00 39 42 47 60 00 06 BF 06 60 00 39 41 95 00 00 D4 上面是突发模式发出的一条消息。第1个字节81表示突发的长结构模式,与前例中相似的地方我们不再介绍。注意到状态字节“00 60”后的字节“41 3FA000”,他表示的是当前的电流值,计算后是11976 6;后面的27表示单位mA,像后面的39表示一样。数据字节中的“42 47 60 00”“BF06 60 00”“41 95 0000”分别表示“SV”“TV”“FV”表示方法与PV相同。
经过解释后的消息可以表示为:“LBTXSRdAllPv0260060119766mA119766/%/498438psi/-0524902/%/18625D4” HART协议适配器的应用请将检测好的HART协议适配器按照说明连接好,并确定适配器处于工作状态。按照说明启动串口调试程序或者由上位机发送相关的命令进行数据的转换,客户端可以将采集的数据进行分析,计算得到有用的数值。在这里我们以K-TEK公司型号为AT100HART协议的液位计为例进行详细说明。 命令及命令的格式标准的HART协议命令格式如下表所示 读设备序号命令格式说明如 

起始位

序文

定界符

地址

命令

数据长度

校验位

结束符

 

由于要确保待发的命令完整的发送,我们特意在标准命令格式序文前加了一个起始位23和在校验位后加了一个结束符40 例如:发送读取设备序号命令 23 FF FF FF FF FF 02 80 00 00 82 40命令注解如下表所示

起始位

23

序文

FF FF FF FF FF

定界符

02

地址

80

命令

00

数据长度

00

校验位

82

结束符

40

 

返回的命令格式如下表所示:

序文

定界符

地址

命令

数据长度

数据 

校验位 

 

返回的数据为FF FF FF FF FF 06 80 00 0E 00 40 FE 50 7F 06 05 01 01 08 00 6B 73 3A 30返回数据命令注解如下表所示 

序文 ff ff ff ff ff

定界符06

地址 80

命令 00

数据长度0E

数据00 40 FE 50 7F 06 05 01 01 08 00 6B 73 3A

校验位30


返回数据6B 73 3A就是这台设备的序号。起始位和结束符只在发送命令时做确定命令的完整发送,它不改变命令本身,更不会影响数据的转换。 发送读取液位计动态变量命令命令格式说明如下表所示 

AT10082 90 7F固定

6B 73 3A设备序号

03为命令

 返回的数据为FF FF FF FF FF 86 90 7F 6B 73 3A 03 15 00 40 40 D4 E0 00 2D 3E 09 1C 2D 2D 3E 92 E3 9E 20 41 D4 B2 B8 01返回数据命令注解如下所示: 

电流40 D4 E0 00

液位3E 09 1C 2D

界面3E 92 E3 9E

温度41 D4 B2 B8

 

返回数据计算经过反复实验和推理论证而推导出了基于HART协议数据的计算公式。下面以电流和液位为例加以说明。电流值的计算: dlH=((parseddataHart[13] + parseddataHart[12] * 256.0 +(parseddataHart[11] & 127) * 65536.0))/8388608.0 +1; dlD=(((parseddataHart[10]*1) & 127) * 256 + ((parseddataHart[11]*1) & 128)) / 128 - 127; 液位值的计算: ywH=((parseddataHart[18] + parseddataHart[17] * 256.0 +(parseddataHart[16] & 127) * 65536.0))/8388608.0 +1; ywD=(((parseddataHart[15]*1) & 127) * 256 + ((parseddataHart[16]*1) & 128)) / 128 - 127; 启动串口调试程序或者由上位机发送相关的命令进行数据转换,客户端可以将采集的数据进行分析,计算得到有用的数值。将计算所得的数据送到相应的存储区,客户可以根据自己的需要来处理这些数据。也可以根据自己的需要来提取有用的数据量,具体的读取命令,请参阅相关的技术书籍或向HART仪表厂商和经销商获取仪表专用协议。操作系统及上位机组态软件只要支持RS-232便可以轻松实现与HART仪表的通讯。此HART协议适配器的转换是全透明的,它只处理HART信号与串口信号的互相转换问题,工作在应用层,只针对符合HART协议的产品,与具体的供货商无关,读取命令和数据也没有任何关系及影响。