组态软件中组件间通信的典型技术 (组态软件中组件的作用)

1 引言

组态软件作为用户可定制功能的软件平台工具,在各个行业和领域得到广泛应用。随着DCS及计算机控制技术的发展,组件化、分布式成为组态软件的基本特征。优秀的组态软件将其实时数据库、HMI、I/O服务器、数据服务器等主要部分设计成分别可独立运行的组件。这些组件可以同时运行在一台计算机内,也可以分布式地运行在不同的计算机内,通过网络实现组件间的通信。这种体系结构可以让用户灵活配置系统,合理分配各服务器的运算负荷。实现组件化带来了软件设计上的复杂性,特别是如何实现组件间的高效、实时、可靠通信成为一个关键问题。

2 组件间通信技术

组件间通信分为本地方式和远程方式。设计时可以考虑将本地方式作为远程方式的基础。实现本地通信也就实现了远程通信,因为可以将组件间交换的数据通过远程方式传送到目的机后,再通过本地方式与远程组件通信。

3 本地通信

组件间本地通信涉及进程间通信技术,本文基于微软Windows操作系统。Windows系统提供了丰富的进程间通信手段,本文介绍的方法是以Windows消息传递功能为基础,辅助内存文件映射和信号量技术。

该方法优点包括:实现简便、实时性高、移植性好、功能可控性好、可靠性易控、对系统环境适应能力强等。

本地通信采用C/S结构,主要问题是实现多个Client与Server之间快速、并发式的数据交换。下面结合实例进行说明。

假设Client和Server是采用该技术的客户端和服务器端程序,它们都是基于窗口的独立进程。每次进行数据交换时,Client向Server发送一个请求报文,Server收到请求报文后,再向Client回复一个应答报文,如此不断往复。由于可能有多个Client与同一Server同时进行快速数据交换,交互过程必须采用异步方式才能保证可靠性和并发性。

为方便起见,需要抽象一个专用于进程通信的中间件ICom以供各个Client同时调用。ICom提供3个最基本的接口:Open()、Send()和Receive()。

  • Open():初始化数据交换的内存映射文件、创建上行(Client到Server)和下行(Server到Client)通信的管道。
  • Send():根据指定的接收Client地址向Server发送报文。
  • Receive():从指定的发送Client地址接收报文。

使用ICom时,Client程序运行后首先调用Open()接口,然后根据接收Client地址调用Send()接口发送报文。Server程序运行后首先调用Open()接口,然后循环调用Receive()接口接收报文。当报文之间不再有数据交换时,Client和Server程序调用Close()接口关闭接口。

4 远程通信

远程通信基本思想是:在源Client和目的Client之间建立一个虚拟通信通道,并利用该通道实现数据交换。该虚拟通信通道实际是一个TCP/IP连接。如果源Client和目的Client不在同一网络中,则通过一个代理Server转发数据。

远程通信服务器端程序运行后,首先打开一个监听端口,等待客户端连接。客户端程序运行后,连接到指定的服务器监听端口,与服务器建立一个TCP/IP连接。连接建立后,客户端和服务器交换握手报文,然后转入数据交换状态。数据交换时,客户端和服务器从TCP/IP连接中分别读取和写入数据,通过内存映射文件实现数据通信。

5 结论

本文介绍的组件间通信技术基于Windows消息传递功能,辅以内存文件映射和信号量技术,具有实现简便、实时性高、移植性好等优点。该技术在组态软件组件间通信中得到广泛应用,可有效满足组件化分布式组态软件的通信需求。

本文原创来源:电气TV网,欢迎收藏本网址,收藏不迷路哦!

相关阅读

添加新评论