HART协议命令详解:轻松掌握工业现场的“数字语言”
哈特 操作命令在应用层运行,包括通用命令、标准命令和特殊命令。
我通用命令的范围是 0 到 30。
- 0,11:设备标识(制造商、设备类型、版本)
- 1、2、3:读取测量值
- 6:写入HART地址
- 12、13、17、18:读取和写入用户输入的文本信息
- 14、15:读取设备信息(传感器序列号、传感器量程上限/下限、报警操作、量程、传输结构)
- 16、19:读取和写入最终装配编号
二、通用命令的范围是 32 到 126。
标准命令集涵盖 32 到 126 个代码,提供设备的大部分功能。但是,代码 123 和 126 并非公开代码——它们是制造商特定的代码,用于在生产过程中输入唯一的设备标识符,最终用户通常不会修改这些代码。这些代码也可用于直接内存读/写操作。
- 33、61、110:读取测量值
- 34-37、44、47:设置运行变量(范围、时间限制、PV值、传输函数)
- 38:重置“结构变更”标志
- 39:EPROM 控制
- 40-42:对话框功能(固定当前模式、自检、复位)
- 43、45、46:模拟输入/输出整流
- 48:检查外围设备状态
- 49:写入传感器序列号
- 50-56:传输变量
- 57、58:单元信息(标志、描述、数据)
- 59:填写所需的序号
- 60、62-70:使用复合模拟输出
- 107-109:连拍模式控制
三、常用重要命令简介
0,11 命令用于识别现场设备,这些设备可以使用长结构或短结构进行标记。命令 0 的响应包含不同设备的标识符。主机随后生成不同的标志,为后续的长结构命令做好准备。在 HART 4.0 及更早版本中,传输类型代码由两个字节组成:一个字节用于制造商代码,另一个字节用于设备类型代码,但这两个字节可以省略。从 HART 5.0 开始,需要使用扩展代码来表示设备信息,ID 号取代了最后的管道编号。
主机通常使用命令 0 发起通信,并分配一个可选地址 0,然后扫描地址 1 到 15。对于符合 HART 5.0 及更高标准的设备,主机可以使用命令 11,其中包含一个全零的广播地址和命令标志作为有效载荷,等待具有匹配标志的从设备响应。已确认的命令 11 的功能与命令 0 完全相同。
HART指令分析
示例 1:主从关系
| FF | FF | FF | FF | FF | 82 | A6 | 06 | 公元前 | 61 | 4E | 01 | 00 | B0 |
以上显示的是从主机发送到从设备的一条消息。现在,让我们详细分析一下这条消息。
①“FF FF FF FF FF”表示前五个字节,用作前导字节。
② “82”是起始字节,表示从主机发送到从机的长结构消息。
③ 五字节序列“A6 06 BC 61 4E”是一个地址字节,它转换为以下二进制表示:

第一个字节(A6)的最高有效位(MSB)设置为 1,表示主机。
第二位(LSB)为 0,表示非突发模式。
序列“100110”包含:38(制造商代码),来自罗斯蒙特;06(设备型号代码),对应3051C型号;以及12345678(设备序列号),作为唯一标识符。第四个字节中的“01”是命令字节,指定执行命令1以读取PV值。
⑤ “00”表示数据长度。在本例中,没有数据,因此值为0。
⑥“B0”是校验字节
例二:从奴隶到主人
| FF FF FF FF | 86 | A6 06 BC 61 4E | 01 | 07 | 00 00 | 06 | 40 B0 00 00 | 45 |
以上展示了从从设备向主设备发送的消息。此示例与示例 1 基本相同,区别在于数据长度不再为零。现在让我们详细解释一下这条消息。
①“FF FF FF FF FF”表示前五个字节,用作前导字节。
② 字节“86”是起始字节,表示从从设备向主设备发送的长结构消息。
③ 五字节序列“A6 06 BC 61 4E”是一个地址字节,它转换为以下二进制表示:

第一个字节(A6)的最高有效位(MSB)设置为 1,表示主机。第二个字节(LSB)为 0,表示非突发模式。序列“100110”包含:38(制造商代码),来自罗斯蒙特;06(设备型号代码),对应 3051C 型号;以及 12345678(设备序列号),作为唯一标识符。第四个字节中的“01”是命令字节,指定命令 1 以读取 PV 值。
⑤“07”表示数据长度,值为7,表示数据由7个字节组成。
⑥“00 00”是一个状态位,表示从设备对主设备的响应消息是正确的。
⑦“06”是数据单位,值为6,表示单位PSI。
⑧ 四字节值“40 B0 00 00”表示一个浮点数,具体来说是 5.5。
⑨ “45”是校验字节。
例 3:突发模式
| FF FF FF FF | 81 | A6 06 BC 61 4E | 01 | 07 | 00 00 | 06 | 40 B0 00 00 | 42 |
以上消息以突发模式发送。以下是消息的详细描述。
①“FF FF FF FF FF”表示前五个字节,用作前导字节。
②“81”表示长期结构模式的突然出现。
③ 五字节序列“A6 06 BC 61 4E”是一个地址字节,它转换为以下二进制表示:

第一个字节(A6)的最高有效位(MSB)设置为 1,表示主机。第二个字节(LSB)为 0,表示非突发模式。序列“100110”包含:38(制造商代码),来自罗斯蒙特;06(设备型号代码),对应 3051C 型号;以及 12345678(设备序列号),作为唯一标识符。第四个字节中的“01”是命令字节,指定命令 1 以读取 PV 值。
⑤“07”表示数据长度,值为7,表示数据由7个字节组成。
⑥“00 00”是一个状态位,表示从设备对主设备的响应消息是正确的。
⑦“06”是数据单位,值为6,表示单位PSI。
⑧ 四字节值“40 B0 00 00”表示一个浮点数,具体来说是 5.5。
⑨ “42”是校验字节。
四、标准 HART 协议命令格式
- 读取设备信息的命令格式如下:

例如,要发送读取设备序列号的命令,请使用序列 FF FF FF FF FF 02 80 00 00 82。命令详情如下表所示:
| 序言 | FF FF FF FF |
| 分隔符 | 02 |
| 地址 | 80 |
| 命令 | 00 |
| 数据长度 | 00 |
| 校验位 | 82 |
返回的命令格式如下:

例如,返回的数据为 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 |
| 分隔符 | 06 |
| 地址 | 80 |
| 命令 | 00 |
| 数据长度 | 0E |
| 数据 | 00 40 FE 50 7F 06 05 01 01 08 00 6B 73 3A |
| 校验位 | 30 |
数据 50 是该设备的制造商 ID,7F 是其传感器类型,6B 73 3A 是其序列号。
- 读取设备的动态变量
命令格式如下:

例如,要发送命令从设备读取动态变量,请使用以下命令序列:FF FF FF FF FF FF FF FF FF 82 50 7F 6B 73 3A 03 00 8C。命令注释如下表所示:
| 序言 | FF FF FF FF |
| 分隔符 | 82 |
| 制造商 ID | 50 |
| 传感器类型 | 7楼 |
| 设备序列号 | 6B 73 3A |
| 命令 | 03 |
| 数据长度 | 00 |
| 校验位 | 8C |
返回的命令格式如下:

例如,返回的数据为 FF FF FF FF FF 86 50 7F 6B 73 3A 0 3 1A 00 00 41 40 00 00 49 42 44 CE 10 39 41 47 CE D0 3D 44 4F CE 10 20 41 9F D7 0A E8。此数据返回的命令注释如下表所示:
| 序言 | FF FF FF FF |
| 分隔符 | 82 |
| 制造商 ID | 50 |
| 传感器类型 | 7楼 |
| 设备序列号 | 6B 73 3A |
| 命令 | 03 |
| 数据长度 | 1A |
| 数据 | 00 00 41 40 00 00 49 42 44 CE 10 39 41 47 CE D0 3D 44 4F CE 10 20 41 9F D7 0A |
| 校验位 | E8 |
返回的数据含义和转换值如下表所示:
| 含义 | 指令代码 | 转换值 |
| 当前的 | 41 40 00 00 | 12 |
| 即时送达 | 公元42年44月10日 | 49.2 |
| 每百 | 41 47 CE D0 | 12.49 |
| 累积流量 | 44 4F CE 10 | 831.22 |
| 温度 | 41 9F D7 0A | 19.98 |










