前段时间做了一部分有线HART的解析,整理了一下基本的帧结构,在此做个笔记HART帧结构:[cpp]view plain copy1.|-------------------------------------------------------------------|2.| PREAMBLE[5..20] | START | ADDR | COM | BCNT | STATUS | DATA | CHK |3.|-------------------------------------------------------------------|4.5.6.FF FF FF FF FF 82 A6 06 B2 BF 01 0F 00 211. PREAMBLE引导码, 一般是5..20个0xFF, 他是一组同步传输的同步信号, 用以保证信息的同步.在开始通讯的时候,使用的是20个FF引导码, 从机应答0信号时将告之主机他“希望”接收几个字节的引导码, 另外主机也可以用59号命令告诉从机应答时应用几位引导码.2. START(1Byte)起始字节, 说明结构为“长”还是“短”, 消息源, 是否是“突发”模式消息.[cpp]view plain copy1.0x02: 主机到从机的短帧2.0x82: 主机到从机的长帧3.0x06:从机到主机的短帧4.0x86: 从机到主机的长帧5.0x01: 突发模式的短帧6.0x81: 突发模式的长帧一般设备进行通讯接收到2个FF字节后, 就表示数据位的接收已经同步, 就将侦听起始位.3. ADDR(1/5Bytes)地址字节, 他包含了主机地址和从机地址, 短结构中占1字节, 长结构中占5字节.不论长短帧结构, HART协议中允许2个主机存在, 所以我们用首字节的最高位来进行区分,值为1表示第一主机地址, 第二主机用0表示.“突发”模式是特例, 0,1值将交替出现, 也就是说, 在该模式下, 赋予2个主机的机会均等.次高位为1表示为“突发”模式, 短结构用首字节的0~4位表示值为0~15的从机地址, 第5,6位赋0.长结构用后6位表示从机的生产厂商的代码, 第2个字节表示从机设备型号代码,后3~5个字节表示从机的设备序列号, 构成“唯一”标志码.MA: 主机地址BM: 突发模式0 0SA 从SA机SA 地SA 址短帧地址结构另外,长结构的低38位如果都是0的话表示的是广播地址,即消息发送给所有的设备。
4. COM(1Byte)命令字节, 范围为253个, 用HEX的0~FD表示. 31,127,254,255为预留值。
5. BCNT(1Byte)数据总长度,他的值表示的是BCNT下一个字节到最后(不包括校验字节)的字节数.接收设备用他可以鉴别出校验字节, 也可以知道消息的结束.因为规定数据最多为25字节, 所以他的值是从0~27。
6. STATUS(2Bytes)状态字节, 他也叫做“响应码”,顾名思义, 他只存在于从机响应主机消息的时候, 用2字节表示.他将报告通讯中的错误\接收命令的状态(如:设备忙、无法识别命令等)和从机的操作状态。
如果我们在通讯过程中发现了错误, 首字节的最高位(第7位)将置1,其余的7位将汇报出错误的细节,而第2个字节全为0.否则,当首字节的最高位为0时,表示通讯正常,其余的7位表示命令响应情况,第2个字节表示场设备状态的信息。
UART发现的通讯错误一般有:奇偶校验、溢出和结构错误等。
命令响应码可以有128个, 表示错误和警告, 他们可以是单一的意义, 也可以有多种意义,我们通过特殊命令进行定义、规定.现场设备状态信息用来表示故障和非正常操作模式。
7. DATA(BCNT-2)数据字节,首先我想说明的是并非所有的命令和响应都包含数据字节,他最多不超过25字节(随着通讯速度的提高,正在要求放宽这一标准)。
数据的形式可以是无符号的整数(可以是8,16,24,32 b),浮点数(用IEEE754单精浮点格式)或ASCII字符串,还有预先制定的单位数据列表。
具体的数据个数根据不同的命令而定。
8. CHK(1Byte)奇偶校验,方式是纵向奇偶校验,从起始字节开始到奇偶校验前一个字节为止。
另外,每一个字节都有1位的校验位,这两者的结合可以检测出3位的突发错误。
下面是几组实际通讯中抓包的示例:FF FF FF FF FF0280 // addr000082FF FF FF FF FF FF0680000E00 40FE 26 19 06 05 05 02 A0 00 91 F4 A5FE 26 19 06 05 05 02 A0 00 91 F4 A56D上面是主机到从机发送的一条消息。
前5个字节值都为FF,显然他是导言字节。
接着的82起始字节,表示主机到从机发出的长结构的消息。
后5个字节“A6,可见首字节A6的最高位为1表示主机,次高位为0表示非突发模式,后面的38 b表示设备的惟一标号:“100110”是生产厂家代码,值为38,是Rosemount公司的代码;后一字节06是设备型号代码,06代表的型号是3051C;后面的3个字节是设备识别号,本例中的值为12345678;再接下来的01是命令字节,表示1号命令,即读取PV值后面的00是表示数据的长度;本例中无数据,值为0;最HART协议的从机到主机的例子,表示的是从机到主机的一条消息。
本例大部分与例1相似,不同的是数据字节不再为0,其中的06表示单位PSI;后面的4个字节是用浮点数表示的值,为5.5。
并且由于本例是由从机到主机的应答消息,上面是突发模式HART协议发出的一条消息。
第1个字节81表示突发的长结构模式,与前例中相似的地方我们不再介绍。
注意到状态字节“00 60”后的字节“41 3FA000”,他表示的是当前的电流值,计算后是11.976 6;后面的27表示单位mA,像后面的39表示“%”一样。
数据字节中的“42 47 60 00”,“BF06 60 00”,“41 95 0000”分别表示“SV”,“TV”,“FV”表示方法与PV相同。
经过解释后的消息可以表示为:“LBTXS/RdAllPv/026/0060/11.9766/mA/11.9766/%/49.8438/psi/-0.524902/%/18.625/D4”。
-------------------------------华丽的分割线------------------------------------------FF FF FF FF FF FF 02 80 00 00 82以上就是一段单片机首先要跟设备发送的命令,接下来我们来解析一下FF FF FF FF FF 02 80 00 00 82先导码短指令地址0 命令0 0个数据异或校验位第一条指令是所有支持hart协议的设备都要懂得先导码:就是一段命令的开始,一般都是5个FF指令码:此处02表示的是告诉设备我现在发送过去的是一条短指令当然还有其他的指令结构:主机到从机为短结构时,起始位为02,长帧时为82。
从机到主机的短结构值为06,长结构值为86“突发”模式的短结构值为01,长结构为81• 1• 2• 3• 4 地址码:包含了主机地址和从机地址短指令时:地址码由一个字节表示(如80),其结构为一般我们不用到突发模式,这里的80表示的就是(主机1—-设备地址(0))长指令时:地址码由5个字节表示,其结构为命令码:如00表示的是命令0,这里的命令设备能够识别从而做出相应的响应数据个数码:表示的是再次之后的第一个数——最后一个(不包括校验位)的个数,这一位很重要,在编程的时候,我们经常用这个来调用数值响应吗:只存在于从机—主机的过程中(从机对主机的响应)校验码:此码主要是用来确保传输没有问题用的,采用的是异或校验(自己可以去百度一下异或校验的意思)(这一位都是根据前面的数值锁确定的)各种码都讲了一遍,现在我贴上几张自己试验获得的码,大家可以对着分析一下:FF FF FF FF FF 82 A6 06 63 56 BA 01 00 ACFF FF FF FF FF 82 A6 06 63 56 BA 02 00 AFHART协议1.1 简介现代工业生产中存在着多种不同的主机和现场设备,要想很好地使用他们,完善的通讯协议是必须的。
HART协议最初是由美国Rosemount公司开发,已应用了多年。
HART协议使用FSK技术,在4~20mA信号过程量上叠加一个频率信号,成功地把模拟信号和数字信号双向同时通讯,而不互相干扰。
HART协议参照了国际标准化组织的开放性互连模型,使用OSI标准的物理层、数据链路层、应用层。
HART协议规定了传输的物理形式、消息结构、数据格式和一系列操作命令,是一种主从协议。
当通讯模式为“问答式”的时候,一个现场设备只做出被要求的应答。
HART协议允许系统中存在2个主机(比如说,一个用于系统控制,另一个用于HART通信的手操仪),如果不需要模拟信号,多点系统中的一对电缆线上最多可以连接15个从设备。
1.2 物理层物理层规定了信号的传输方法、传输介质。
采用Bell202标准的FSK频移键控信号,在低频的4~20mA模拟信号上叠加一个频率数字信号进行双向数字通信。
数字信号的幅度为0.5mA,数据传输率为1200bps,1200Hz代表逻辑“1”,2200Hz代表逻辑“0”。
数字信号波形如下图所示:1.3 数据链路层数据链路层规定HART协议帧的格式,可寻址范围0~15,“0”时,处于4~20mA及数字信号点对点模式,现场仪表与两个数字通信主设备(也称作通信设备或主设备)之间采用特定的串行通信,主设备包括PC机或控制室系统和手持通信器。
单站操作中,主变量(过程变量)可以以模拟形式输出,也可以以数字通信方式读出,以数字方式读出时,轮询地址始终为0。
也就是说,单站模式时数字信号和4~20mA模拟信号同时有效。
“1~15”处于全数字通信状态,工作在点对多点模式,通信模式有“问答”式、“突发”式(点对点、自动连续地发送信息)。
按问答方式工作时的数据更新速率为2~3次/s,按突发方式工作时的数据更新速率为3~4次/s。
在本质安全要求下,只使用一个电源,至多能连接15台现场仪表,每个现场设备可有256个变量,每个信息最大可包含4个变量。
这就是所谓的多点(多站)操作模式。
这种工作方式尤其适用于远程监控,如管道系统和油罐储存场地。
采用多点模式,4~20mA的模拟输出信号不再有效(输出设在4mA使功耗最小,主要是为变送器供电,各个现场装置并联连接),系统以数字通信方式依次读取并联到一对传输线上的多台现场仪表的测量值(或其它数据)。