Hart 协议

        由于现阶段在一仪表公司,仪表的需求,接触到Hart。竟发现这一国外的工业标准,在国内的资料少得可怜。PS:起码想在网上搜到所有资料是相当困难的。以下就近些时间来收集到的一些资料作适当整理,贴出来。一是记录,二是给需要的人。

        第一天拿到Hart模块时,看起来就像是24L01无线模块似的小东西,对其毫无概念,细细品读 Hart简介 <提取码 63b8>,好吧,现如今的分享略显的难了一些。工作中多用同步盘,个人先用的360网盘,还算顺手,资料多在于此,就不换了。  回到正题,先是大概了解下Hart是什么东西,HART(Highway Addressable Remote Transducer),可寻址远程传感器高速通道的开放通信协议,Hart协议比较大的特点在于支持模拟信号和数字信号同时传递。

        接下来便是深入Hart协议。其实看协议的时候简直就是一头雾水,跟本不知道是什么东西,先是看了Hart的通信格式,<这里确实花了不少时间>,先后几次回过头来看,都有收获,下面是我整合得比较完整一版:

首先定义字节的概念,在HART中,发送一个字节需要11位二进制数据,第一位起始位,第二到九位共八位是要发送的数据,第十位是校验位<奇校验>,第十一位是停止位。如下图所示:

Hart 协议_第1张图片

 

PREAMBLE    START     ADDR     COM       BCNT          STATUS    DATA        PARITY
       序文         定界符      地址        命令号      数据长度      响应码       数据字节     奇偶校验

以上便是一个完整的Hart通信数据帧格式,其中Status(通信状态)只有在从机对主机通信时才会加入的。

  1. PREAMBLE 前导字符,作为通信同步的需要,是5到20个字节的0XFF,通常采用5个字节;

  2. START 起始字节符,将告之使用的结构为“长”还是“短”,消息源是否是“突发”模式消息。主机到从机为短结构时,起始位为 0X02,长帧时为 0X82。从机到主机的短结构值为 0X06,长结构值为0X86。而为“突发”模式的短结构值为 0X01,长结构为 0X81。一般设备进行通讯接收到 2 个0XFF 字节后,就将侦听起始位。

  3. ADDR 地址字符,包含了主机地址和从机地址,短结构中占 1 字节,长结构中占 5 字节。无论长结构还是短结构,因为 HART 协议中允许 2 个主机存在,所以我们用首字节的最高位来进行区分,值为 1 表示第一主机地址,第二主机用 0 表示,“突发”模式是特例,0,1 值将交替出现,也就是说,在该模式下,赋予 2 个主机的机会均等。次高位为 1 表示为“突发”模式,短结构用首字节的 0~4 位表示值为 0~15 的从机地址,第 5,6 位赋 0;而长结构用后 6 位表示从机的生产厂商的代码,第 2 个字节表示从机设备型号代码,后 3~5 个字节表示从机的设备序列号,构成"唯一"标志码。

    MA <1>         BM <2>                <3~8>                <9~16>                   <17~40>
    主机地址         突发模式               厂商代码               仪表类型代码            仪表序列号
    另外,长结构的低 38 位如果都是 0 的话表示的是广播地址,即消息发送给所有的设备。

  4. COM 命令字节,范围为 253 个,用 HEX 的 0~FD 表示。31,127,254,255 为预留值。PS:一开始对此处提到的命令很困惑,就在心里发问,每个命令都什么含义?所有的厂家都支持么?终于,在一篇名为HCF_SPEC 99官方文档中找到Hart 协议_第2张图片那么剩下的去找对应文档就好了。此处依然放出  HART协议文档 <提取码 00d9>。这个过程中更加明确官方文档的重要性!要强迫自己看英文原版的文档,这样才更会有收获!

  5. BCNT 数据总长度,它的值表示的是 BCNT 下一个字节到最后(不包括校验字节)的字节数,其实说了这么多,无非是因为从机回传的数据中多了一个状态码,明确也是要算在数据长度的。接收设备用他可以鉴别出校验字节,也可以知道消息的结束。因为规定数据最多为 25 字节,所以它的值是从 0~27。

  6. STATUS 状态字节,也叫做“响应码”,顾名思义,只存在于从机响应主机消息的时候,用 2 字节表示。他将报告通讯中的错误、接收命令的状态(如:设备忙、无法识别命令等)和从机的操作状态。        如果我们在通讯过程中发现了错误,首字节的最高位(第 7 位)将置 1,其余的 7 位将汇报出错误的细节,而第 2 个字节全为 0。否则,当首字节的最高位为 0 时,表示通讯正常,其余的 7 位表示命令响应情况,第 2 个字节表示场设备状态的信息。UART 发现的通讯错误一般有:奇偶校验、溢出和结构错误等。命令响应码可以有 128 个,表示错误和警告,他们可以是单一的意义,也可以有多种意义,我们通过特殊命令进行定义、规定。现场设备状态信息用来表示故障和非正常操作模式。此处依然是一个专门的文档来叙述  HCF_SPEC_307 。

  7. DATA 数据字节,首先需说明的是并非所有的命令和响应都包含数据字节,它最多不超过 25 字节(随着通讯速度的提高,正在要求放宽这一标准)。数据的形式可以是无符号的整数(可以是8,16,24,32 b),浮点数(用 IEEE754 单精浮点格式)或 ASCII 字符串,还有预先制定的单位数据列表。具体的数据个数根据不同的命令而定!此处查阅官方文档  HCF_SPEC_183<数据格式表> 此中数据量相当大  HCF_SPEC 99  HCF_SPEC 127  HCF_SPEC-151;

  8. CHK 奇偶校验,方式是纵向奇偶校验,从起始字节开始到奇偶校验前一个字节为止。另外,每一个字节都有 1 位的校验位,为奇校验,这两者的结合可以检测出 3 位的突发错误。

好了,通信格式说得差不多,开始一些实战。

 例:

主机到从机
        FF   FF   FF   FF   FF   82   A6   06   BC   61   4E   01   00   B0
上面是主机到从机发送的一条消息。前 5 个字节值都为 FF,显然他是前导字节。接着的 82 起始字节,表示主机到从机发出的长结构的消息。
后 5 个字节 “A6,06,BC,61,4E”是地址字节化为二进制表示如下:
A6                   06                  BC                   61                      4E
1010  0110     0000 0110     1011 1100       0110 0001         0100 1110
可见首字节 A6 的最高位为 1 表示主机,次高位为 0 表示非突发模式,后面的 38 位二进制数表示设备的惟一标号:“100110”是生产厂家代码,值为 38,是 Rosemount 公司的代码;后一字节 06 是设备型号代码,06 代表的型号是3051C;后面的 3 个字节是设备识别号,本例中的值为 12345678;再接下来的 01 是命令字节,表示 1 号命令,该命令的返回内容可在文档资料中找到 HCF_SPEC 127,即读取 PV 值,后面的 00 是表示数据的长度;本例中无数据,值为 0;最后是校验字节 B0;

从机到主机
FF   FF   FF   FF   FF   86   A6   06   BC   61   4E   01   07   00   00   06   40   B0   00   00   45
上面表示的是从机到主机的一条消息。本例大部分与上例相似,不同的是数据字节不再为 0,其中的 06 表示单位 PSI;后面的 4 个字节是用浮点数表示的值 为 5.5。并且由于本例是由从机到主机的应答消息,所以存在着状态位,即本例中的“00  00”,表示“OK”。

突发模式 

FF 81 53 03 1A 00 41 27 41 39 42 06 BF 39 41 D4
FF 03 60 3F 3F 47 06 95
FF 04 A0 A0 60 60 00
FF E6 00 00 00 00 00
FF D7

上面是突发模式发出的一条消息。第 1 个字节 81 表示突发的长结构模式,与前例中相似的地方不再介绍。注意到状态字节“00 60”后的字节“41   3F   A0   00”,他表示的是当前的电流值,是IEEE754格式的浮点数,计算后是 11.9766;后面的 27 表示单位 mA,像后面的 39 表示“%”一样。数据字节中的"42   47   60   00","BF   06   60   00","41   95   00   00”分别表示"SV","TV","FV"表示方法与 PV 相同。经过解释后的消息可以表示为:“LBTXS/RdAllPv/026/0060/11.9766/mA/11.9766/%/49.8438/psi/-0.524902/%/18.625”。 所有的数据格式在文档资料Common Tables HCF_SPEC 183中。附命令3——属于通用命令,可在HCF_SPEC_127中查找

Hart 协议_第3张图片

IEEE754

Hart 协议_第4张图片

Hart 协议_第5张图片

看文档HCF_SPEC_099中的描述似乎相当复杂,其实呢也简单的,不过就是浮点数的另一记录方法罢了,此处如看不懂可自行查阅,资料甚多,在此不多缀述。

你可能感兴趣的:(通信,remote,工业标准,Hart,仪器仪表)