主要记录对HART7.1官方协议文档的阅读学习与代码实现。HCF_LIT-18是一个现场设备规范模板,其中在参考文档部分列举了相关文档:
应该先看SPEC-12,但是这个文档没找到。对于编写程序而言,物理层也可以先不看,我们先看SPEC-99,应用层的命令规范,这个文档是所有其他HART应用层规范文档的基础。
当前关注的是有线HART协议,FSK,物理层为4~20mA环路;数据链路层为二进制,字节,令牌传递方式,主从协议。物理层有专门的HART芯片实现,暂时无需关注。应用层是命令组织形式,事先定义好的数据类型和应用功能。
允许使用的数字类型:单精度/双精度浮点数、整型、无符号整型;
字符串使用Packed-ASCII 或者 ISO Latin-1传输;
Common Tables Specification中有对数据类型使用的举例。
本文档指定了所有HART命令的规则,并分配命令编号(例如Universal命令、Common命令、DeviceFamily命令)。规范定义了命令的行为。制造商开发的特定于某设备的命令应该符合这个规范。
从设备向主设备的反馈包含:设备健康信息;命令执行结果反馈;通信错误探测(数据链路层)
本文档主要规定:
1)数据传输格式
2)所有现场设备的修订规则
3)不同命令的编码分配(Universal命令、Common命令、DeviceFamily命令、Devicce-Specific命令)
4)所有HART命令的构造要求
5)所有命令需要返响应返回的命令状态字节
6)现场设备变量的使用
7)主设备识别现场设备和管理HART网络的流程
1.数据类型
HART协议支持的数据类型如下:
1)使用SO Latin-1或Packed-ASCII 格式的字符串
2)Date
3)Time
4)单精度或双精度浮点数
5)有符号整型
6)无符号整型
7)使用枚举或者比特图的 Table Based Data
多字节数据传输时由MSB开始,LSB结束。
所有数据项的长度是固定的。
1.1 字符串格式
参考:https://blog.csdn.net/weixin_53403301/article/details/130367350
字符串格式支持两种:ISO Latin-1 和 Packed-ASCII
字符串是固定长度。
1.1.1 Packed ASCII
压缩ASCII是一个HART协议特定使用的6 bit的字符代码,是ASCII码的子集。四个字符是3字节,Packed ASCII必须是3字节的倍数,末尾用空格填充。例如4个空格为:0x82 0x08, 0x20。
未初始化的Packed ASCII字符串为“?”字符,四个问号字符为:0xFF 0xFF 0xFF
1.1.2 ISO Latin-1
https://blog.csdn.net/heimabuhei/article/details/78668557
1.2 Dates
date使用三个8bit二进制无符号整型表示,分别是日,月,年-1900。传输顺序为日,月,年。
1.3 Time
time使用一个无符号的32位整型表示,最小可表示1/32毫秒。
1.4 浮点数
所有设备都必须支持单精度浮点数。符合IEEE754的规定。
先传符号位,再传指数,最后传有效数字。
有四个特殊值,正无穷,负无穷,NaN,Denormalized。
见下表
1.4.1 Normalized numbers
Normalized numbers表示浮点数格式最大最小值之间的值,这个值可以直接用于计算或与一个HART现场设备通信。
1.4.2 Denormalized numbers
IEEE标准允许向下溢出时平滑过渡。非0可以通过逐渐损失精度接近0。Denormalized numbers的指数部分为0,有效数字的整数部分为0,小数部分不为0。
1.4.3 0
指数部分和有效数字部分都为0。
1.4.4 无穷
指数部分为最大值255,有效数字整数和小数部分都为0,使用符号位区分正无穷和负无穷。
1.4.5 NaN
指数部分为最大值255,有效数字整数部分为0,小数部分不为0使用符号位区分正负。
Non=Signaling NaN 是由于一个计算结果没有数学解释生成的,Signaling NaN允许定义特殊的数据。例如一些命令规范用于并表示现场设备不支持某个数据类型。
1.5 无符号整数
1.6 有符号整数
可以是1到24位。
1.7 查找表格式
使用table时,数据含义需要事先定义。table可以用枚举或比特图编码。