当前位置:首页 期刊杂志

一种通用网络通信模块的设计及应用

时间:2024-07-28

(哈尔滨工业大学航天学院,黑龙江 哈尔滨 150001)

0 引言

在工业自动化检测系统中,为了实现对现场作业的远程监控,大量的现场传感器数据和状态信息需要通过网络传输给远程监控站;监控站发出的控制指令也需要通过网络发送给现场控制站,进行远程控制。因此,网络通信在工业自动化检测系统中有着广泛的应用。为了实现现场控制站和远程监控站之间的数据快速、高效和可靠传输,需要针对具体的应用场合设计相应的网络通信模块,不同的检测系统需要设计不同的网络通信模块。这无疑加大了工作量,增加了检测系统软件开发的周期[1]。现有的一些网络通信模块在数据传输效率和可靠性方面均存在问题,如数据丢失和传输错误等[2]。

本文设计了一种通用网络通信模块,能实现两种通信协议,可在多种自动化检测系统中实现网络数据的远程传输。将该网络通信模块在电池极板厚度检测系统中进行实际测试,测试结果表明,该网络通信模块能适应不同应用背景需要,保证数据高效可靠传输。

1 通信协议的制定

通信协议是客户端与服务器进行会话的语言,因此它必须承载双方都能识别的通信信息,实现二者之间的信息交互。网络通信中最主要的工作是制定合理的通信协议,以便使客户端与服务器之间通过简洁、清晰和明确的语言实现顺畅的通信功能[3]。

网络数据的交互通常是按照数据帧的形式发送的。数据帧可以分为可扩展标记语言(extensible markup language,XML)形式和二进制形式。XML形式的数据帧每个字符均采用ASCII编码,这使得传输相同数据量的数据时占用的空间大,通信效率低;而二进制形式的数据帧则将数据按字节发送。因此,在相同的数据帧长度条件下,后者能携带更多的数据信息,通信效率高。

XML通过使用一系列简单的标记符对数据进行描述,而这些标记符可以用简便的方式来建立[4]。XML形式的网络通信协议的格式设计如下[5]。

……

二进制方式的网络通信,数据以字节为单位传输,一帧数据帧包含帧头、帧类型、数据字节数、数据部分、校验字节和帧尾。帧头和帧尾表示一帧数据的开始和结束,帧类型表示该数据帧的含义和用途。数据字节部分表示该数据帧携带的数据字节数。此外,为防止数据在发送和接收过程中由于网络异常导致的传输错误,设置了校验字节。通过在数据帧发送时填充检验字节、接收时检验校验字节,防止数据传输错误。在数据帧中,有效信息是数据部分,数据部分的含义依赖于网络通信应用的具体场合,由用户指定。在实际制定通信协议时,可以将帧头字节、帧尾字节、需要用到的帧类型、数据字节数、帧类型数、是否有校验字节等信息写入配置文件,供网络通信模块读取。

2 网络通信模块设计

本文运用面向对象的思想设计网络通信模块。首先,需要了解功能性需求,进行需求分析。网络通信模块统一建模语言(unified modeling language,UML)用例图如图1所示。各用例之间的关系为包含关系。

图1 网络通信模块UML用例图

网络通信模块设计步骤如下。

首先,完成网络消息数据的接收。在客户端服务器模式下,一个服务器可以连接多个客户端。为了将来自不同客户端的网络数据区分开,需要为每一个连接上的客户端创建一个存储单元,称为消息受体类。消息受体类的一个对象对应一个连接的客户端。当该客户端连接时,创建消息受体;客户端断开时,销毁消息受体。而对客户端而言,由于客户端只能接收服务器的消息,因此只需要一个消息受体即可。

其次,建立和维护消息队列。在服务器端,由于同时接收不同客户端(用IP地址和端口号标志)的网络消息,需要从不同客户端对应的消息受体中取出消息进行解析后再放到消息队列中。服务器消息队列的每一条消息不仅包含了消息类型和消息内容,也包含了该消息的源IP地址和源端口号。在客户端,消息队列仅存放其所连接的服务器发送的消息类型和消息内容,不再存放服务器的IP地址和端口号。存储在消息队列中的网络消息由上层模块取出并进行数据处理或其他动作。

最后,完成网络消息的封装和解析。在数据的发送端,需要对发送的数据按照指定的网络协议进行封装,然后发送到网络中;在数据的接收端,收到的数据需要按照网络通信协议进行解析,提取出消息体、消息类型、消息子类型和数据。在模块设计时,通过消息文本封装和解析类实现消息的封装和解析,实现消息提取、消息解析和消息打包等功能[6]。

3 网络消息的打包

在数据的发送端,需要将待发送的数据按照上述通信协议进行打包,封装成数据帧。合理的打包方式可以大大缓解网络通信的负荷量。通信协议的打包方式一般可以分为固定长度打包和动态长度打包两种方式。这两种方式具体介绍如下。

固定长度打包方式对于协议的解析来说比较方便,按照固定的位置获取相应的信息即可,但是,包的长度要以最长的那条协议为基准。这使得每条协议的传输都要占用最大的网络通信量,大大增加了网络通信的负荷压力,而且不具备通用性。

动态长度打包方式能够根据当前所需的协议长度进行打包,可以占用最少的空间,大大缓解了网络通信的负荷压力。但是对于协议的解析比较麻烦,必须根据协议的格式对每个协议包进行动态解析,从而也就具备了通用性[7]。

综合考虑,采用动态打包方式,在保证模块通用性的同时,提高网络通信的效率。

可扩展标记语言(XML)通信协议的数据帧打包流程图如图2所示,打包的过程主要是将数据转化为字符串的过程。首先,加入数据帧头和帧尾标志符;然后,在它们中间加入消息类型、子类型标志符,并设置消息参数;最后,填充数据部分,数据的含义用数据头标志符和数据尾标志符表示。

图2 XML协议网络消息打包流程图

二进制协议的消息打包流程为:加入帧头数据,添加帧类型和数据字节数,填充数据部分;根据协议中有无校验字节填写校验字节,添加帧尾字节。这样即完成网络数据打包操作。

4 网络消息的解析

客户端或者服务器收到对方发来的消息包后,除明白对方要传达的信息外,还必须对网络消息进行解析。

XML协议的网络消息解析的主要步骤如下:首先,从消息受体中提取一条完整的消息;然后,进行消息格式转化;最后,提取出消息类型、子类型、消息内容等信息,并存入消息队列。

XML协议网络消息解析流程如图3所示。

图3 XML协议网络消息解析流程图

在服务器端,来自不同客户端的网络消息分别存储在与之对应的消息受体里。在该消息受体里,定义了一个原始消息队列。由于TCP/IP协议的数据分片、网络拥塞和路由差异等,使得同一个消息包可能分几次到达,也可能造成消息包的丢失,因此,在从消息受体里读取一条完整的消息时,需要考虑如下情况[8-9]。

① 存在有效的消息包头标志符,但是不存在消息包尾标志符。这可能是消息包在传输过程中丢失了部分内容或者是消息包分成了两条网络消息进行传输。判断是哪种情况需要接着从原始消息队列中读取下一条信息。将读取的下一条信息和前一条不存在消息包尾标志符的信息合并,然后对合并后的消息信息进行解析,直到根据协议格式找到有效的消息包。

② 存在有效的消息包尾标志符,但是不存在消息包头标志符。这说明该条消息不是完整的消息包,因此不对此条信息进行进一步处理,直接从消息队列中删除即可,接着读取下一条信息并进行解析。

③ 既存在有效的消息包头标志符,又存在有效的消息包尾标志符。此时还需根据协议内容判断该消息包实际的大小是否等于协议中指定的大小。若不相等,说明在传输过程中消息包的部分内容已经丢失,直接抛弃该消息包,继续等待新消息的到来。

④ 如果不存在上述情况,则接收该数据包并存入消息受体;并根据通信协议对收到的数据包内容进行进一步解析,从消息体中解析出消息类型、子类型和数据部分。

二进制协议的消息解析,也需要进行同样的处理,即从消息受体中提取出一条完整的消息并实现消息的解析。二进制协议网络消息解析流程图如图4所示。流程简要说明如下。

首先,检查消息受体中的数据字节数是否大于帧头字节数,如果字节数不足,则停止解析,继续接收新的数据。如果帧头解析正确,则检查帧类型是否为给定的帧类型。如果帧类型未定义,则擦除消息受体中的一个字节的数据,并重新寻找帧头字节。如果帧类型合法,则根据协议中的数据帧长度字节指定的数据字节数接收数据,并接收校验字节和帧尾字节。如果校验字节出错或帧尾出错,则擦除消息受体中的一个字节的数据后重新寻找帧头字节。如果检查无误,则完成一帧数据的解析,将帧类型、数据字节数、数据部分、客户端IP地址和端口号组合成消息对象,压入消息队列,由上层程序取出作进一步处理。

在二进制协议的网络消息解析过程中,一旦出现错误,则擦除消息受体中的一个字节的数据,然后从帧头开始重新解析,这样最大限度地降低了数据帧的丢失。同时,通过设置检验字节和帧头帧尾字节,以较小的附加传输代价保证了数据传输的可靠性[10]。

图4 二进制协议网络消息解析流程图

5 网络通信模块的测试

在激光厚度检测系统中,需要对现场电池极板厚度进行远程实时监控,并实时调整涂布机刮刀位置,以保证涂布厚度的均匀性[11]。为此,需要设置现场服务器和远程客户端,通过网络对现场生产状况进行远程监控[12]。

现场控制站将激光传感器厚度数据发送给服务器,服务器将数据打包后发送给客户端。客户端进行数据处理,显示测量结果,并将处理后的厚度信息发送给现场服务器进行存储。

在制定好通信协议后,基于上述网络通信模块,编写了上层程序,从而在客户端实现了数据的处理和显示,在服务器端实现了数据存储。

实际测试表明,运用该网络通信模块能实现可靠的网络数据传输,保证了网络数据传输的有效性和可靠性。

6 结束语

本文基于C++ Builder的开发环境设计了一种通用的网络通信模块,在XML和二进制不同数据传输方式下,实现了网络通信协议的制定、数据的打包和解析算法,并在电池极板涂布厚度检测系统中加以测试。该模块具有以下优点。

① 在检测系统中运用该模块时,上层程序只需要制定具体的通信协议即可实现网络数据传输,不需要考虑底层数据传输格式。

② 通用性好。能用于不同功能需求的自动化检测系统中,大大降低了软件开发的周期和难度。

③ 数据传输可靠,丢包率小。该网络通信模块能保证客户端和服务器数据可靠传输,以较小的丢包率实现双方数据交互,在工业自动化检测系统中有着广泛的应用。

[1] 张明杰.远程视频监控系统中网络通信模块的设计[J].工矿自动化,2009(1):88-89.

[2] 徐爱华,全书海.Socket网络通信及其在电梯监控系统中的应用[J].武汉理工大学学报,2006,28(11):56-57.

[3] 汪水华.基于C++ Builder的网络数据传输软件的开发[J].交通与计算机,2003,21(2):77-79.

[4] 习博,方彦军.工业以太网中网络通信技术的研究[J].微计算机信息,2005,21(2):147-149.

[5] Anthony L A.Using XML transactions to perform closed-loop diagnostics in network centric support environments[J].Autotestcon,2005,28(4):707-713.

[6] Frantisek B.Optimizing client-server communication for remote spatial database access[D].Washington:University of Maryland,2005.

[7] 朱蓉.基于TCP/IP协议的网络通信模式的实现[J].嘉兴学院学报,2006,18(3):80-81.

[8] 束长宝,于照,张继勇.基于TCP/IP的网络通信及其应用[J].网络与通信,2006,22(12):157-158.

[9] 蔡敬坤.高精度激光在线式厚度系统上位机软件开发[D].哈尔滨:哈尔滨工业大学,2011.

[10]蒋年德,方志国.基于Visual C++的Windows网络通信程序设计[J].计算机与现代化,2003(5):30-31.

[11]Babadzhanova L S.Gauges for determining the thickness of thin coatings and their measurement by the method of superimposed profilograph[J].Measurement Techniques,2003,46(4):332-336.

[12]Wang Wei,Dong Zaili,Liu Changyou.The method research of non-contact thickness measurement of transparent object with free-form surface[J].Intelligent Control and Automation,2004,5(12):3837-3841.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!