网络化仪器仪表协议服务器端设计与实现
2015-01-29庞新法
庞新法
(陕西省委党校科技教研部 陕西 西安 710061)
通过对传统网络设备的定义进行扩展,将仪器仪表纳入网络管理的范畴,使得其已经不再是孤立的、单独的设备,而是将测试技术、互联网技术、计算机技术结合在一起的网络仪器系统。但网络化仪器间难以进行协同工作,进而限制测量系统测量效率。为了实现网络化仪器间的通信,本文将HiSLIP协议、虚拟仪器设计技术与网络化测控系统相结合,利用HiSLIP协议,设计网络化仪器间的通信原理,并给出了协议服务器端设计与实现。
协议的服务器端主要实现与仪器端的连接,并且实现为远端控制软件提供连接、数据传输等服务,和协议的客户端配套实现通信通道的建立。服务器端程序,主要完成等待连接建立,连接建立,数据传输,和容错处理等。
HiSLIP[1]协议服务器端的设计是与客户端相对应,其功能也分为以下几部分:协议启动及前期准备;等待客户端发起连接;与客户端进行数据交互;容错处理等。客户端的14个交互,在服务器端程序中均一一对应,使用的消息类型会部分不同。
1 服务器端总体设计
根据IVI规范,仪器端的HiSLIP协议服务器端执行流程如图1所示,启动后,在同一个端口(4880)上创建两个TCP连接,分别作为同步通道和异步通道。在同步通道上可双向发送字符型命令,代理将数据按照HiSLIP的帧格式封装,并交由下层TCP协议。
协议启动时,申请套接口并绑定4880端口,启动端口侦听,若有连接请求则查询是否超过最大连接数,如果超过则拒绝请求,否则建立连接。建立连接成功后,创建子进程,并将父进程的链接信息复制一份给子进程,完成后,即可进行数据的传输。父进程会查询是否有关闭连接的请求,如果有则关闭连接,如果没有则继续侦听端口。
2 协议启动
服务器端协议启动,和客户端基本一致,申请Socket并进行端口4880绑定,之后等待客户端发起连接。通过执行函数intserver_initialize来实现协议启动的准备工作。
3 连接建立
根据协议要求,服务器端需要配合客户端完成两次连接的建立,按建立的前后顺序,第一次是同步通道,第二次是异步通道[2-3]。
图1 服务器端的协议流程Fig.1 The agreement process on the server side
3.1 建立连接过程中需要使用的消息类型序列
在接收到客户端Initialize消息后,向客户端发送消息类型为InitializeResponse的消息,其中包含的数据有,是否是重叠模式(overlap-mode),服务器协议版本,以及会话 ID,此时第一个连接即同步通道建立完成。消息格式为,
在接收到客户端AsyncInitialize消息后,服务器端向客户端发送消息类型为AsyncInitializeResponse的消息,其中包含的额数据只有服务器端程序的厂商号(server-vendorID)。此时,第二个连接即异步通道建立完成。消息格式为,
3.2 对远端仪器进行锁操作的消息类型序列
首先接收到AsyncLockInfo消息类型,服务器返回消息AsyncLockInfoResponse,其中包含已经授权的锁个数和锁类型等信息。格式为,
接收到AsyncLock消息时,使用消息AsyncLockResponse告知客户端,加锁成功还是失败,或者释放锁成功还是失败。在该消息中包含的数据有,请求加锁标志位和请求释放锁标志,等待加锁超时时间,锁信息描述等。加锁时发送给客户端的消息的格式为,
3.3 服务器端响应客户端的消息尺寸使用的消息序列
收到客户端AsyncMaximumMessageSize消息后,服务器端通过消息AsyncMaximumMessageSizeResponse来向客户端告知服务器端可以接受的最大消息尺寸,该消息中包含由8字节无符号整形数据表示的消息尺寸信息。消息格式为,
通过 执行函数 staticinthandle_initialize_response(hislip_message*recv_message,char*send_buf,int*send_len)处理客户端发起同步通道连接时服务器端的响应过程。
通过执行函数staticinthandle_async_initialize_response(hislip_message*recv_message,char*send_buf,int*send_len)处理客户端发起异步通道连接时服务器端的响应过程。
第一,社区服刑人员的主观因素。一是存在文化程度差异,量表的表述不能完全理解,工作人员若协助解释则会形成暗示,影响测量效果;二是量表题量多且为客观题,社区服刑人员为节省时间随意填写,造成无效量表过多;三是多数社区服刑人员对心理常识知之甚少,都是“心盲”,主观配合程度差。
通过执行函数staticinthandle_async_message_size(hislip_message*recv_message,char*send_buf,int*send_len) 向客户端发送服务器端能够接受的消息最大尺寸。
4 数据交互
数据交互[4-5]部分与客户端相对应,同样使用两种消息类型Data和DataEND,这两种消息类型的消息使用方法与客户端一致,即仪器获取的数据发送给客户端,服务器端使用Data或DataEND消息进行发送[7],如果可以满足不超过最大消息长度的情况下,使用DataEND消息类型进行发送,如果超过了最大消息长度,则先使用Data消息类型进行发送若干,在剩余的数据不超过最大消息尺寸时,使用DataEND发送完剩余的数据。
在发送消息的内容上与客户端有所区别,服务器端使用的消息中不包含交付标志,消息中的其他内容和客户端发送给服务器端的一致,包含消息ID,数据长度及数据。消息格式为,<0>
5 容错处理
服务器端的容错处理有:致命错误及同步恢复交互;错误告知交互;中断交互。这些主要是配合客户端保证整个协议能够稳定有序运行,与客户端的容错处理能够一一对应,这里不再赘述。
6 程序设计实现
根据上述设计过程以及各种交互的含义,时序关系,进行程序设计[6-7],程序实现使用C语言实现,运行在Linux系统之上,程序中的模块[8-9]主要有,通道建立初始化模块,数据接收模块,数据发送模块等。
通过协议服务器端源代码中的一些功能函数介绍,说明协议服务器端的执行过程如下。
实现初始化服务器端,初始化完成后,等待客户端的HiSLIP连接。
staticinthandle_async_message_size()
处理客户端发送的协商双方发送的消息尺寸的请求消息。
staticintrecv_message_handle()
接收从客户端发送过来的数据,并进行初步处理,对接收的数据包按照消息类型进行识别,识别后调用相关功能函数予以处理。
staticintcommunicate_device()
实现协议与设备的直接通信,在Linux下仪器设备,被抽象成设备文件,这里的与设备通信实质上是协议在VFS下对文件的操作。
staticinthandle_async_lock()
处理客户端发送的给设备资源加锁和释放锁的操作。
void send_data()和 void send_dataend()
实现向客户端发送数据操作。
7 结束语
本文通过对协议服务器端的详细设计,并在此基础上结合客户端的设计及控制端和仪器网络代理的设计,实现了仪器间通信。在局域网环境下,通过示波器A和示波器B间的通信测试,证明本文提出的方案能够实现仪器与控制端、仪器和仪器的通信。
[1]LXI HiSLIPTest Procedures[EB/OL].(2011-10-20).http://www.ivifoundation.org
[2]吴念,强彦.UNIX网络程序设计[M].北京.科学出版社,2011.
[3]余成波,王士彬,李洪兵.网络化仪器技术与实现[M].北京:清华大学出版社,2010.
[4]林玉池.测量控制与仪器仪表前沿技术及发展趋势[M].天津:天津大学出版社,2005.
[5]董永清.Linux C编程实战[M].北京:人民邮电出版社,2008.
[6]宋宝华.Linux设备驱动开发详解[M].北京.人民邮电出版社,2008.
[7]陈莉君,康华.Linux操作系统原理与应用[M].北京.清华大学出版社,2006.
[8]李宥谋,刘钊远,马博.嵌入式系统开发[M].北京.清华大学出版社,2011.
[9]夏亚君,黄缙华,顾博川,等.运行服务总线综合评价方法与评测工具研究[J].陕西电力,2014(12):21-25.XIA Ya-jun, HUANG Jin-hua, GU Bo-chuan, et al.Comprehensive evaluation method and evaluation tool for operation service bus[J].Shaanxi Electric Power,2014(12):21-25.