HART协议数据格式和消息结构的举例分析

HART协议数据格式和消息结构的举例分析

 前面的文章中,我们对HART协议的消息格式的具体内容进行了分析。那么很多朋友还没有完全掌握,为了让大家对这部分知识有一个清晰的思路。下面我们来对HART协议的数据格式以及消息结构的内容进行一下举例分析。

  HART协议数据格式

  如果传送的命令不成功,那么响应中就不包含数据。然而响应值是从现场设备内存中取出的,是一个近似值。数据所占的字节和格式视不同的命令而定,具体的规则可以查询相关的资料。

  看实例了解HART协议消息结构

  例1:主机到从机  (0号命令 读取设备序号)

   
FFFFFFFFFF82A606BC614E0100B0

    上面是主机到从机发送的一条消息。前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 b表示设备的惟一标号:“100110”是生产厂家代码,值为38,是Rosemount公司的代码;后一字节06是设备型号代码,06代表的型号是3051C;后面的3个字节是设备识别号,本例中的值为12345678;再接下来的01是命令字节,表示1号命令,即读取PV值后面的00是表示数据的长度;本例中无数据,值为0;最后是校验字节B0。

    例2:从机到主机

   
FF FF FF FF FF86A6 06 BC 61 4E010700 0006 40 B0 00 0045

    HART协议的从机到主机的例子,表示的是从机到主机的一条消息。本例大部分与例1相似,不同的是数据字节不再为0,其中的06表示单位PSI;后面的4个字节是用浮点数表示的值, 为5.5。并且由于本例是由从机到主机的应答消息,所以存在着状态位,即本例中的00 00表示OK。

    例3:突发模式

   
FF FF FF FF FF8153 03 04 E6 D7031A00 6041 3F A0 002741 3F A0 003942 47 60 0006BF 06 60 003941 95 0000D4

    上面是突发模式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”。

#include "use.h" #include "Ver.H" #include #include #include #include "include.h" /******************************************************************* 1、菜单中这几个参数项需要读出和修改: P1中的:L,H,E,dr,P P2中的:Ed,SF,bo 一共7个参数项; ---这7个参数项不知道用什么命令来进行读写? 请你帮助考虑一下。 2、HART命令中,有如下命令应该要用到: ⑴ 0#命令---读标识码 (好像是个广播命令) ⑵ 3#命令---读主变量电流(测量值) ⑶ 6#命令---置随选地址(确定工作模式) ⑷ 15#命令---读主变量输出信息(上下限值) ⑸ 40#命令---进入/退出电流模式 ⑹ 41#命令---执行设备自检 ⑺ 42#命令---执行设备复位 ******************************************************************/ //前面的4个地址是固定的,后面一个是可以改的!用MP1.ADR 代替了! //#define adr0 0x02 //#define adr1 0x23 //#define adr2 0x34 //#define adr3 0x45 //#define MAX_0xff 5 //前导符的个数! //#define HART_VER 5 // 版本 //---------------------------------------------------------------------------------- //static unsigned char fHART_LONG_ADR=0; //=0 短地址标至;=1 是长地址! //static unsigned char cnt_0xff=MAX_0xff; //主机发送0XFF的个数,从机回复添加相同的个数 ! //************************************************************************** extern unsigned char cnt_0xff; //主机发送0XFF的个数,从机回复添加相同的个数 ! extern unsigned char fHART_LONG_ADR; //=0 短地址标至;=1 是长地址! //--------------------------------------------------------------------------------------------- unsigned char HART_Get_FF(unsigned char *p){ memset(p,0xff,cnt_0xff); return cnt_0xff;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值