网络化仪器仪表协议客户端设计与实现

2015-09-16 23:07庞新法
现代电子技术 2015年18期
关键词:通信

庞新法

摘 要: 提出如何通过实现网络化仪器仪表间的通信来完成仪器间协同工作,从而最大程度地发挥网络化仪器测量系统的效率。为了实现网络化仪器间的通信,需将HiSLIP协议、虚拟仪器设计技术与网络化测控系统相结合,并利用HiSLIP协议的可靠连接以及高效数据传输特点,设计网络化仪器间的通信,从而给出协议客户端设计与实现。

关键词: 网络化仪器; HiSLIP协议; 通信; 网络化测控系统

中图分类号: TN911?34; TP312 文献标识码: A 文章编号: 1004?373X(2015)18?0122?03

Abstract: The way how to realize collaborative work of instruments by communication among the networked instruments is proposed to bring the efficiency of measurement system into play for networked instruments to the maximum extent. To achieve communication among networked instruments, it is necessary to combine the networked measurement and control system with HiSLIP protocol, design technology of virtual instrument, and design the communicationn among the networked instruments by utilizing the characteristics of reliable connection and high?efficiency data transmission of the HiSLIP protocol. The design and implementation of protocol client?side are presented.

Keywords: networked equipment; HiSLIP protocol; communication; networked measurement and control system

0 引 言

随着网络技术的广泛应用,仪器仪表已开始向计算机化、网络化、智能化方向发展,仪器网络化的发展趋势,使得其已经不再是孤立的、单独的设备,而是将测试技术、互联网技术、计算机技术结合在一起的网络仪器系统。但网络化仪器间难以进行协同工作,进而限制测量系统测量效率。为了实现网络化仪器间的通信,本文将HiSLIP协议、虚拟仪器设计技术与网络化测控系统相结合,利用HiSLIP协议的可靠连接以及高效数据传输特点,设计网络化仪器间的通信原理,并给出了协议客户端设计与实现。

仪器代理作为网络管理结构中的核心实体,存在于被管理的网络设备中,用来访问设备的运行状态,对设备参数进行配置,是被管设备与管理中心交互的中间接口。

HiSLIP协议客户端的功能主要划分为4部分:协议启动和前期准备;与服务器端建立连接;与服务器端的数据交互;容错处理.。客户端与服务器端的交互种类分为14类,通过这14类交互,完整实现协议所需要的功能,在进行交互说明时以“<消息类型> <控制码>

<消息参数> <数据长度> <数据>”的格式来表示消息。

1 协议启动

在控制端应用程序启动时,协议的客户端即开始启动,在启动过程中,向操作系统申请Socket套接字资源[1?2]。并进行端口绑定,协议规范中建议使用4880端口。对4880端口绑定完成后,即可向由VISA提供的仪器端的网络代理IP地址发起连接。

2 建立连接

HiSLIP协议连接的建立使用的是TCP机制,由客户端向服务器端发起2次TCP连接,分别是该协议的同步通道连接和异步通道连接。在建立好2个TCP连接之后,还需要检查服务器端仪器上加锁的情况,相互协商交互信息时的消息尺寸。为后续的数据和控制信息的交互提供服务。

2.1 建立连接使用到的消息类型序列

(1) 由客户端发起第1个TCP连接;

(2) 使用消息类型Initialize 进行同步通道连接初始化;在该消息中包含的数据有客户端协议版本;客户端厂商ID;子地址。消息格式为: <0>

(3) 发起第2个TCP连接;

(4) 使用消息类型AsyncInitialize 进行异步通道连接初始化,在该消息中包含由应用软件推送的SessionID(会话号)。格式为: <0> <0>。

2.2 对远端仪器进行锁操作的消息类型序列

(1) 首先通过AsyncLockInfo消息类型,来向远端服务器请求当前仪器资源上锁的情况,有服务器返回是否已经加锁、锁的类型以及锁的数目等消息。格式为:

<0> <0> <0>。

(2) 在查询后确认可以对远端仪器加锁时,使用消息类型AsyncLock来实现对远端仪器资源加锁和释放锁。在该消息中包含的数据有,请求加锁标志位和请求释放锁标志,等待加锁超时时间,锁信息描述等。加锁消息的格式为: <1=request>

;释放锁的消息格式为: <0 =release> <0>。

2.3 客户端和服务器协商发送消息的尺寸使用的消息序列

客户端通过AsyncMaximumMessageSize消息类型来告知服务器自己的能够接收的消息尺寸,该消息中包含由8 B无符号整形数据表示的消息尺寸信息。消息格式为: <0> <0> <8> <8?byte size>。

3 数据交互

数据交互是这个协议的核心部分,客户端在与服务器端建立连接后,使用Data和DataEND两种消息类型的消息发送数据。如果应用软件推送给客户端的数据,可以满足不超过最大消息长度的情况下,使用DataEND消息类型进行发送,如果超过了最大消息长度,则先使用Data消息类型进行发送若干,在剩余的数据不超过最大消息尺寸时,使用DataEND发送剩余的数据[3]。所以,所有的消息都是以DataEND消息类型实现数据的完整发送。通信双方交互时使用的消息类型序列如下:

客户端使用Data消息类型的消息来发送数据;消息中包含的数据有交付标志信息RMT?delivered,该消息的消息编号MessageID,消息长度以及由应用软件推送的数据。格式为:

客户端使用DataEND消息类型的消息来发送数据;消息中包含的其他信息与上一条中一致。格式为:

这部分代码如下:

void send_dataend(hislip_message *send_message,int message_id,int data_len)

{

strncpy(send_message?>prologue,"HS",2);

send_message?>type=DATA_END;

send_message?>parameter=message_id;

send_message?>control=0x00;

send_message?>data_len=htonlli((long long int)data_len);

}

void send_data(hislip_message *send_message,int message_id,int data_len)

{

strncpy(send_message?>prologue,"HS",2);

send_message?>type=DATA;

send_message?>parameter = message_id;

send_message?>control = 0x00;

send_message?>data_len=htonlli((long long int)data_len);

}

4 容错处理

容错处理是在连接未成功或者协议运行故障时的操作,以保证协议能够稳定实现相关功能。在协议的14类交互中,容错处理包含:致命错误及同步恢复交互(Fatal Error Detection and Synchronization Recovery);错误告知交互(Error Notification Transaction);中断交互

(Interrupted Transaction)。

致命错误及同步恢复交互[4],客户端和服务器端都会使用到,设置消息类型为FatalError,该消息包含的数据有错误码(ErrorCode)、数据长度和数据。消息格式为: <0> 。如果该消息由客户端发送给服务器端,在客户端发送完毕并关闭连接后,客户端再次向服务器端发起HiSLIP连接。如果发送该消息由服务器端发送给客户端,则直接关闭。

错误告知交互[5],客户端和服务器端双方都会使用到,使用的消息类型为Error,其他字段内容与“致命错误及同步恢复交互”中的一致,不同的是,双方不管哪一方收到这个消息,都不需要做出其他动作,消息格式为: <0>

中断交互,仅服务器端使用,在服务器部分进行说明,本文不在详述。

5 辅助处理交互

除了上述的交互过程,协议本身也定义了一些辅助的交互过程,能够实现附属功能,这些交互有:远程/本地控制交互(Remote Local Transaction);触发信息交互(Trigger Message);服务请求交互(Service Request);状态查询交互(Status Query Transaction);设备清除交互(Device Clear Transaction);厂商定义交互(Vendor Defined Transactions)。

远程/本地控制交互[6],为GPIB设备提供服务,客户端向服务器端发送数据时,使用到的消息类型为AsyncRemoteLocalControl,消息中包含的数据有控制码(request),消息ID。消息格式为: <0>。

触发信息交互[7],为了模拟GPIB设备组触发使用到的交互,客户端向服务器端发送消息时使用的消息类型为Trigger,消息中包含的数据主要有RTM交付标志,消息ID。消息格式为: <0>。

服务请求交互,是服务器使用交互,在服务器部分进行说明。

状态查询交互,是为了客户端查询服务器端的状态,返回的状态码(status),客户端发送给服务器进行状态查询时使用的消息类型为AsyncStatusQuery,消息中包含的数据有RTM交付标志,消息ID。消息格式为:

<0>。

设备清除交互,是为了清除通信的通道,由客户端向服务器端发起,客户端的消息序列如下:

客户端发送AsyncDeviceClear消息,消息中不包含其他数据,发送完消息后等待进程中的同步消息处理完成。消息格式为: <0> <0> <0>。

客户端发送DeviceClearComplete消息,消息中包含特征标志请求(featureRequest)。消息格式为: <0> <0>。

厂商定义交互,客户端和服务器端都可以发送这个消息,使用的消息类型为VendorDefined,消息中的数据都是任意数,消息格式为:

6 程序设计实现

根据上述设计过程以及各种交互的含义,时序关系,进行程序设计,程序实现使用C语言实现,程序中的模块主要有,通道建立初始化模块,数据接受模块,数据发送模块等。下面通过协议客户端的主要函数,说明程序设计中的功能实现:

static int client_initialize(void)

实现初始化客户端,初始化完成后,向服务器端发起的HiSLIP连接。

static int client_handle_async_message_size()

处理服务器端发送的协商双方发送的消息尺寸的请求消息。

static int client_recv_message_handle()

接收从服务器端发送过来的数据,并进行初步处理,对接收的数据包按照消息类型进行识别,识别后调用相关功能函数予以处理。

static int client_handle_async_lock()

处理服务器端发送的加锁和释放锁反馈。

void client_send_data()和void client_send_dataend()

实现向服务器端发送数据操作。

7 结 语

本文通过对协议客户端的详细设计,并在此基础上结合服务器端的设计及控制端和仪器网络代理的设计,实现了仪器间通信。在实验中通过示波器A和示波器B间的通信测试,证明本文提出的方案能够实现仪器与控制端、仪器和仪器的通信。

参考文献

[1] 王建新,隋美丽.Labwindows/CVI虚拟仪器测试技术及工程应用[M].北京:化学工业出版社,2011.

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

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

[4] ROBBINS A. Linux programming by example [M].北京:中国电力出版社,2006.

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

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

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

猜你喜欢
通信
基于数字化变电站SV报文通信可靠性问题研究
铁路光缆运营维护方式研究
多媒体融合通信与平台通信优化方案研究
基于“一级调度、两级运维”的通信管理体系研究①
简述计算机通信网络安全与防护策略
Android环境下主UI线程与子线程通信机制研究
无线自组网在野战防空通信系统中的应用
对数字微波通信技术的研究