对于HART协议物理层和HART数据链路层的相关规范我们已经介绍过了。那么接下来我们将要对HART协议的服务内容进行一下讲解。通过下面的讲解,大家将会对整个HART协议的一些基本工作内容,服务流程有一个系统地掌握。
HART协议的服务
HART协议所提供的服务包括:
“至少一次” 可靠地在同等实体之间的交互服务。该服务的设计不提供双重检测。
可选择的,可靠的,同等实体之间提供端对端分段和双重检测的交互服务。
设备标志和设备组态的管理服务。
为实现服务而定义的原语分为两个部分,一部分在正常使用过程中与用户数据相关的称为用户原语;另一部分关于初始化协议,如建立地址,建立地址之间和同等实体之间唯一联系的原语称为管理原语。协议实现时必须支持以上提到的原语。
1 用户接口原语
HART协议支持三种数据传输服务。
传送(Transmit)服务用来提供送消息和接收响应的基本能力。在此不作详细分析。
传输(Transfer)服务使用每一个消息中一系列的域支持双重检测和消息分段。传输服务提供一种可靠的主-从设备之间双向消息传输。实现传输服务的用户接口原语功能是实现HART协议的重要任务之一。
循环服务提供重复广播数据的功能,是针对HART协议BURST模式的设备功能的实现。
这些服务由主设备初始化。从设备和burst模式设备用来作这些服务的回答者。
2 传输服务
传输服务用来支持可靠的数据连接以防止数据丢失或重复的应用(如上装/下载,块传送等)。由于HART链路层协议的主/从关系,传输服务的执行完全由主设备控制。从设备仅行使响应功能。传输服务帧包含了用来分段、双重检测/释放以及丢失帧检测的序列号区域。帧必须按顺序接收。传输服务的安装和控制都通过发送控制请求来实现。
有八条用户原语支持传输服务。其中四条用作控制,另四条在使用服务时用作数据传送。此外,某些参数是可选的,不必出现在所有的原语调用中。这些参数在原语定义中都由方括号(“[”,“]”)括起来。下面只分析4条数据传输原语。
Transfer.request(address,sequence no,[data]):本原语由主设备HART协议用户使用向给定地址上的从设备实体请求传输信息。主设备用户负责所有参数的合法性。协议应用者将在它的能力范围内对参数进行有限的合法性校验(例如地址超出范围)。
Transfer.indicate(address,sequence no,[data]):本原语由数据链路层激发,通知从设备HART协议用户从对等协议实体中收到了一条合法的传送消息。从设备用户可以接收随后的内容和可选的数据(如果有)。
Transfer.response(status,sequence,[data]):本原语由从设备用户执行,响应进入的transfer.indicate。这种机制用来立即返回先前指示的状态,并可由从设备向主设备返回可选的控制数据参数。
Transfer.confirm(local status,response code,sequence no,[data]):本原语向主设备协议用户返回先前的transfer.request的执行结果。***收到的从设备的响应(如果有)将与一个状态字一起返回。该状态说明了请求的成功或失败。local状态字节是主设备通讯任务的状态。序列号由从设备设置。
由上面可以看出,主设备HART协议用户,即上位机,主要涉及到的是request和confirm原语,而不用实现indicate和response原语。在实际的程序实现中,体现为一条主-从命令的发送和从设备返回的从-主的接收过程。