对于HART协议的层次结构我们在前面介绍了物理层和数据链路层。这次的文章中,我们来对它的消息结构进行一下具体的描述。希望大家都能够了解这方面的知识。并且掌握它的帧结构。
消息结构
如下所示,一条消息包括源地址、目的地址和一个校验位。每一个应答消息中包括现场设备状态,用于确保持续通讯的顺畅进行。数据位可有可无,视具体情况而定。一般每秒种可以传输2~3条消息。
PREAMBLE START ADDRCOM BCNT STATUS DATA PARITY
序文 定界符 地址 命令号 数据长度 响应码 数据字节 奇偶校验
HART协议5.0版本以前版本的设备一般采用“短结构”,单一的现场设备如果只利用4~20 mA电流信号进行测量时,从设备的地址都是0;否则,对于多设备而言,从设备的地址是从1~15,这种短结构的地址采用“随选”的方法,随机分配1~15中的一个。HART协议5.0版本推出了“长结构”,这种格式的从设备地址具有独一无二性,如同每个网卡中物理地址一样,全世界范围内都没有重复,一般占5个地址字节中的38位。这38位地址信息包含了生产厂家的代码、设备型号码和设备识别码。这种格式减少了误传输和误接收的可能性。现在大多数主机设备既能支持长结构又兼容短结构,当从机的应答信号中没有“唯一”标识码时,HART协议5.0版本及其以上的版本提供的0号命令,就可以用于短帧中的设备地址识别。也就是说,主机将根据应答信号中是否具有“惟一”标识码来决定结构格式为“长”还是“短”。
一般消息帧的组成,其中:
(1)PREAMBLE导言字节,一般是5~20个FF十六进制字节。他实际上是同步信号,各通讯设备可以据此略做调整,保证信息的同步。在开始通讯的时候,使用的是20个FF导言,从机应答0信号时将告之主机他“希望”接收几个字节的导言,另外主机也可以用59号命令告诉从机应答时应用几位导言。
(2)START起始字节,他将告之使用的结构为“长”还是“短”、消息源、是否是“突发”模式消息。主机到从机为短结构时,起始位为02,长帧时为82。从机到主机的短结构值为06,长结构值为86。而为“突发”模式的短结构值为01,长结构为81。一般设备进行通讯接收到2个FF字节后,就将侦听起始位。
(3)ADDR地址字节,他包含了主机地址和从机地址,如前所述,短结构中占1字节,长结构中占5字节。无论长结构还是短结构,因为HART协议中允许2个主机存在,所以我们用首字节的最高位来进行区分,值为1表示第一主机地址,第二主机用0表示。“突发”模式是特例,0,1值将交替出现,也就是说,在该模式下,赋予2个主机的机会均等。次高位为1表示为“突发”模式,短结构用首字节的0~4位表示值为0~15的从机地址,第5,6位赋0;而长结构用后6位表示从机的生产厂商的代码,第2个字节表示从机设备型号代码,后3~5个字节表示从机的设备序列号,构成“唯一”标志码。
MA |
BM |
0 |
0 |
SA |
SA |
SA |
SA |
短帧地址结构
另外,长结构的低38位如果都是0的话表示的是广播地址,即消息发送给所有的设备。
(4)COM命令字节,他的范围为253个,用HEX的0~FD表示。31,127,254,255为预留值。
(5)BCNT数据总长度,他的值表示的是BCNT下一个字节到最后(不包括校验字节)的字节数。接收设备用他可以鉴别出校验字节,也可以知道消息的结束。因为规定数据最多为25字节,所以他的值是从0~27。
(6)STATUS状态字节,他也叫做“响应码”,顾名思义,他只存在于从机响应主机消息的时候,用2字节表示。他将报告通讯中的错误、接收命令的状态(如:设备忙、无法识别命令等)和从机的操作状态。
如果我们在通讯过程中发现了错误,首字节的最高位(第7位)将置1,其余的7位将汇报出错误的细节,而第2个字节全为0。否则,当首字节的最高位为0时,表示通讯正常,其余的7位表示命令响应情况,第2个字节表示场设备状态的信息。
UART发现的通讯错误一般有:奇偶校验、溢出和结构错误等。命令响应码可以有128个,表示错误和警告,他们可以是单一的意义,也可以有多种意义,我们通过特殊命令进行定义、规定。现场设备状态信息用来表示故障和非正常操作模式。
(7)在HART协议的帧结构中,DATA数据字节,首先我想说明的是并非所有的命令和响应都包含数据字节,他最多不超过25字节(随着通讯速度的提高,正在要求放宽这一标准)。数据的形式可以是无符号的整数(可以是8,16,24,32 b),浮点数(用IEEE754单精浮点格式)或ASCII字符串,还有预先制定的单位数据列表。具体的数据个数根据不同的命令而定。
(8)CHK奇偶校验,方式是纵向奇偶校验,从起始字节开始到奇偶校验前一个字节为止。另外,每一个字节都有1位的校验位,这两者的结合可以检测出3位的突发错误。