HiSLIP协议的原理及机制剖析
   来源:现代电子技术     2021年01月26日 06:14

庞新法

摘 要: 为了对HiSLIP协议的网络化仪器编程建立理论基础并方便编程,通过分析该协议的结构和功能、消息格式、交互过程以及标志,提出了语法规则,参数含义,编程过程,初始化连接,请求锁和释放锁,最大消息尺寸,传输数据请求,服务及状态请求,消息可用标志等,在局域网环境下,实现了两台示波器之间的通信,从而解决了测量系统中网络化仪器间难以协同工作,进而限制测量系统测量效率的问题。

关键词: 网络化仪器; HiSLIP协议; 通信; TCP连接

中图分类号: TN915.04?34; TP312 文献标识码: A 文章编号: 1004?373X(2015)17?0041?04

Analysis on principle and mechanism of HiSLIP protocol

PANG Xinfa

(Department of Science and Technology Teaching?Research, Shaanxi Province Party School of the CPC, Xian 710061, China)

Abstract: The aim in this paper is to establish theoretical foundation for network instrument program of HiSLIP protocol and program conveniently. By analyzing the protocol′s structure, function, message format, interaction process and logo, the interaction process of HiSLIP protocol is proposed, which consists of grammar rules, parameters meaning, programming process, initializing connection, request and release locks, maximum message size, data transmission request, service and status requests, and message available marks. The communication between two oscilloscopes was realized in LAN environment. The problem that it is hard to work collaboratively among network instruments in measurement system was solved, and the efficiency of measurement system was improved.

Keywords: network instrument; HiSLIP protocol; communication; TCP connection

LXI(LAN eXtensions for Instrumentation)标准是测量仪器在网络化过程中与计算机网络结合的产物,促进了测量仪器在网络化过程中更好的发展。为了满足仪器在网络化过程中对高速传输数据和高效控制的需求,IVI联盟于2011年推出HiSLIP(High?Speed LAN Insturment Protocol)高速以太网仪器协议,专门用于仪器通信和仪器远程控制的协议,并将这个协议作为LXI标准的扩展功能进行发布。该协议能够很好地支持TCP/IP协议,可以为IPv4和IPv6提供服务,易于网络组网和扩展。

1 HiSLIP协议的结构

1.1 协议简述

HiSLIP[1]基于TCP的仪器控制协议,提供了与传统仪器相同的测试和测量功能。协议的主要功能有设备清除、仪器的本地/远程仪器状态控制、仪器的锁机制、仪器端到客户端的服务请求、消息结束机制、错误检测中断时的消息交换机制。该协议本身结构清晰,形式简单,易于实现,并支持虚拟仪器软件结构中的锁机制,便于仪器资源的控制与共享。

1.2 协议特点

HiSLIP协议的特点如下:

(1) 灵活的端口号。服务器端和客户端既可使用IANA分配的建议端口号4880,也可以使用双方约定的端口号。

(2) 创建两个TCP连接。两个连接一个作为同步通道,另一个作为异步通道,均采用既定格式传输消息。同步通道主要用于双方通信时传输文本形式的控制命令(如SCPI命令等);异步通道主要用于传输突发事务请求(如中断和错误等)。二者均由客户端发起建立连接。

(3) 支持两种不同的模式。为了实现对已有仪器的兼容性,协议需要支持重叠模式和同步模式。重叠模式[2?3],是指在客户端和服务器端之间,输入或者输出的数据消息或者触发消息可以任意缓存,而不需要等待前一个消息处理完毕。比如,相对独立的一串请求消息从客户端发送给服务器端,不需要每一个消息都处理完毕,服务器的响应消息按照接收消息顺序发送给客户端。由于服务器端和客户端的处理速度会有不同,因此在重叠模式下还要控制消息发送的速率。同步模式[4?5]与重叠模式在机制上相反,即每一次发送请求消息时,都需要等待上一个消息处理完毕,如果客户端处理出错时,协议自身产生中断操作清除之前发送的请求处理。

1.3 消息帧格式

HiSLIP帧格式[6]如图1所示,帧首部为16 B,分别是消息标志“HS”、类型码、控制码、消息参数、数据长度。帧尾部为数据字段,每帧消息的长度等于16加上数据长度。

(1) 每帧消息第一、第二字节内容固定不变。第一字节是“H” 的ASCII码值,第二字节是“S”的ASCII码值,用于判断收到的消息是否正确。如果不是“HS”,则说明在传输过程中发生了错误,应丢弃此消息。

(2) 消息类型(Message Type),大小为1 B,定义接收到的消息类型,用来对每一个HiSLIP协议的消息进行惟一识别。每一个消息类型,都在协议中确定了相应的含义,通过对消息类型的识别就可以对消息中的字段进行特定含义的解释。

(3) 控制码,大小为1 B,一般用于表示当前消息的响应参数,含义会根据消息类型的不同而不同。

(4) 消息参数,大小为4 B,在HiSLIP消息中有多种用途。

(5) 数据长度(Payload Length),占用8 B,标识数据字段中的字节数。

(6) 数据(Data),字节数不定,存放该消息所传递的数据信息。

1.4 消息分类

如表1所示,消息类型共26种。通信双方通过发送相关消息进行交互,用以协调双方的行为,达到数据传输等目的,完成协议功能。

其中,发送方C指协议客户端(Client),S指协议服务器端(Server),B指通信客户端和服务器端双方(Both);通道中的S指同步通道消息(Synchronous channel message),A指异步通道消息(Asynchronous channel message),B指服务器端和客户端都可发送;消息类型号,是指实际传输时对消息类型的逻辑编号。

2 HiSLIP协议交互过程

协议双方通过约定的格式和顺序发送特定消息类型的HiSLIP协议消息,协调通信双方行为,配合完成协议的功能,为应用软件和资源设备提供服务。在说明交互过程时,以“<消息类型><控制码><消息参数><数据长度><数据>”的格式表示HiSLIP消息,通过每一个功能交互,具体说明协议的语法、语义和同步特性。

2.1 初始化HiSLIP连接

初始化连接消息交互过程如图2所示。

(1) 在同步通道客户端向服务器端发起建立TCP连接。

(2) 客户端发送给服务器的初始化消息格式为: [<初始化>]<0><客户端协议版本及客户端厂商标识符> <客户端子网地址>。

(3) 服务器端发送给客户端的响应消息格式为:[<初始化响应>]<工作模式><服务器协议版本及设备会话号><0>。

(4) 在异步通道客户端发起建立第二次TCP连接。

(5) 客户端发送给服务器的异步通道初始化消息格式为:<异步初始化><0><设备会话号><0>。

(6) 服务器端发送给客户端的响应消息格式为:[<异步初始化响应>]<0><服务器端厂商标识符><0>。

2.2 请求锁和释放锁

加锁请求过程如图3所示。

(1) 客户端发送给服务器的加锁消息格式为:<异步锁请求><1=请求锁><超时时间><锁描述串长度><锁描述字符串>。超时时间,是客户端允许等待服务器端发送响应的等待时间,如果超时时间为0,说明是请求立即加锁操作。

(2) 服务器端发送给客户端的响应消息格式为:[<异步锁请求响应>]<0=加锁失败,1=加锁成功,3=错误><0><0>。

释放锁请求过程如图3所示。

(1) 客户端发送给服务器的释放锁消息格式为:[<异步锁请求>]<0=释放锁><消息编号><0>。消息编号是服务器端保存的已发送消息的编号。

(2) 服务器端发送给客户端的响应消息格式为:[<异步锁请求响应>]<1=释放独占锁成功,2=释放共享锁成功,3=错误><0><0>。

2.3 最大消息尺寸

为了防止消息尺寸过大造成接收方缓存溢出导致数据丢失,通信双方必须协商在同步通道上传输的最大消息尺寸,过程如图4所示。

(1) 客户端告知服务器端自己能够接收的最大消息尺寸。客户端发送给服务器的最大消息尺寸请求格式为:<最大消息尺寸请求><0><0><8><8>。

(2) 服务器端告知客户端服务器能够接收的最大消息尺寸。服务器端发送给客户端的响应消息格式为:<最大消息尺寸请求><0><0><8><8>。

说明:<数据>字段的8 B给出消息长度(无符号整数)。

2.4 传输数据请求

数据消息发送过程如图5所示。

客户端向服务器端发送消息:

(1) 客户端发送给服务器的数据消息格式为:<数据消息><交付标志><消息包编号><数据长度,单位是字节><数据内容>。

(2) 客户端发送给服务器的数据结束消息格式为:<数据结束消息><交付标志><消息编号><数据长度,单位是字节><数据内容>。

服务器端向客户端发送数据消息:

(1) 服务器端发送给客户端的数据消息格式为:[<数据消息><0><消息编号><数据长度,][单位是字节>][<数据内容>。]

(2) 服务器端发送给客户端的数据结束消息格式为:<数据结束消息><0><消息编号><数据长度,单位是字节><数据内容>。

客户端向服务器端发送数据时,如果要发送的数据量不超过最大消息尺寸,数据会通过“数据结束消息”一次性发给服务器端;否则,先通过“数据消息”发送若干,再通过“数据结束消息”把剩余部分(不大于最大消息尺寸)发送给服务器端。服务器端向客户端发送数据的机制与此类似,其方向相反。

交付标志,是服务器端进行维护并核实的一个标志,旨在保证服务器端的正常运行。

2.5 锁信息交互

锁信息交互的目的:在加锁前,客户端向服务器端发起锁信息请求,获取当前在仪器资源上连接的客户端数目以及仪器资源拥有的锁类型,消息序列如图6所示。

说明:授权的独占锁(exclusive?locks?granted),1表示独占锁被授权,0表示其他。

授权的独占锁数(Locks?granted),表示当执行AsyncLockInfo(请求锁信息)时,拥有锁的客户端数。

2.6 服务请求

服务请求消息交互的目的:服务器将自身的一些状态值,通过服务请求发送给客户端。本交互过程由服务器端主动向客户端发起服务请求,交互消息序列如图7所示。

说明:控制码部分,是一个8 b的状态值(status),用来表示服务器端运行的状态。

2.7 状态请求

状态请求消息交互的目的:客户端获取服务器端的状态值,交互过程消息序列如图8所示。

说明:控制码部分是一个8 b的状态值,用来表示服务器端运行的状态。

3 服务器端使用到的标志

3.1 交付标志和交付期待标志

为了保证双方协调一致工作,在正常交互时,服务器端需要维护(核实和设置)两个标志:交付标志(RTM?delivered)和交付期待标志(RTM?expected)。方法如下:

(1) 发送数据结束消息时,设置交付期待标志为“真”(True)。在接收到状态查询消息(AsyncStatusQuery)并且交付标志为“真”时,清空交付期待标志位。

(2) 接收到数据消息、 数据结束消息或触发消息时,如果交付期待标志和交付标志同为“真”(True)或同为“假”(False)时,则清空交付期待标志位(RTM?expected),否则产生错误报告。

3.2 消息可用标志

MAV(Message Available Bit)消息可用标志,表明来自服务器的消息是否可用。该比特位的设置及状态转换如图9所示。

MAV标志设置和转换说明:

在设备启动(Power?on)、设备清除(Device?clear)或者错误恢复(Error?recovery)时,设置MAV为“假”False。接收到消息类型为Data或者DataEND的HiSLIP消息时,把MAV从“假”(False)设置为“真”(True)。

在接收到消息类型为AsyncStatusQuery,Data,DataEND或者Trigger的HiSLIP消息,并且其中包含RTM?delivered时,设置MAV从“真”(True)到“假”(False)。

4 结 语

在网络化测量系统中借助于HiSLIP协议的高效性、实时性和可靠性,减少网络时延突发异常等对测控系统的影响,实现网络化仪器间通信,使仪器间协同工作,以提高网络化仪器测量系统的测量效率。另外,HiSLIP协议既支持IPv4也支持IPv6,具有良好的向后兼容性,便于网络化测量系统的扩展。

参考文献

[1] IVI Foundation. IVI?6.1: High?speed LAN instrument protocol (HiSLIP) [EB/OL]. [2011?05?25]. http://www.ivifoundation.org.

[2] 余成波,王士彬,李洪兵.网络化仪器技术与实现[M].北京:清华大学出版社,2010.

[3] 林玉池.测量控制与仪器仪表前沿技术及发展趋势[M].天津:天津大学出版社,2005.

[4] 董永清.Linux C编程实战[M].北京:人民邮电出版社,2008.

[5] 宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2008.

[6] 李宥谋,刘钊远,马博.嵌入式系统开发[M].北京:清华大学出版社,2011.

[7] 陈莉君,康华.Linux操作系统原理与应用[M].北京:清华大学出版社,2006.

消息 服务器端 文章