HART协议的应用层是基于命令的。通信中的命令行决定了消息的内容。
命令号是一个固定字节。
1.1 命令号
协议支持单字节命令号(0-255)和两个字节的扩展命令号(255-65535)。
命令0-255使用命令域表示命令号;命令256-65535包含0x31和数据域的两字节的扩展命令号。下表表示了命令号的划分:
1)通用命令。所有HART兼容设备都必须支持的命令。所有的通用命令都必须按协议规范实现;
2)常见命令。适用于大多数设备的命令。设备尽可能的支持。如果使用了常见命令,必须按协议规范实现;
以前38 48是常见命令,现在是通用命令,所有设备都需要支持。
3)非公开命令。工厂生产一种现场设备时使用的命令。只用于生产时使用,现场不可以使用。
4)无线命令。无线HART设备必须支持的命令。
5)设备系列命令。
6)设备特殊命令。制造商根据现场设备需要而定义的命令。
1.2 命令要求
命令设计的规范。HART协议规定的命令肯定是已经满足了以下要求,在进行厂商自定义命令设计时,需要遵守以下几点。
1.2.1 同步/异步要求
HART命令必须被设计为同步的,且为无状态的。意思是主从设备理解当前消息不需要知道上一条消息是什么。
1.2.2 命令操作
page31
HART命令必须只执行以下一种操作:
1)读。从现场设备中读取数据。
2)写。写入数据到现场设备。
3)命令设备执行某种动作。
1.2.3 索引命令
通过索引命令可以得到一个数据数组。要求必须数据的数量和类型一致,在请求和响应中的数据字节域以相同的顺序排列。
1.2.4 多事务处理命令
为了增加设备特定命令的数量,多事务处理命令允许请求和响应的数据域包含一个子命令号,用于当一个现场设备的设备特殊命令编号用完的情况
1.3 命令状态字节
主设备发送命令后,从设备必须回复命令状态字节作为反馈。所有的从设备响应必须使用数据域的前两个字节返回两个命令状态字节。第一个字节包含通信状态或响应码,第二个字节包含现场设备状态。
如果通信或者命令错误,则不返回响应数据字节。
1.3.1 命令状态
第一个字节是与响应码复用的,只有当发生通信错误时才使用。发生通信错误时,字节的首位必须设置为1.
1.3.2 响应码
未发生通信错误时,则回复响应码。响应码表示设备执行命令的状态,字节的首位必须设置为0.使用0-127的枚举值表示不同的响应码。
1.3.3 现场设备状态
表示当前设备运行的状态,与命令执行结果无关。即使发生通信错误,这个字节也需要有意义。