admin 管理员组

文章数量: 1087139


2024年3月13日发(作者:mfc findwindow)

维普资讯

机电工程2002年第l9卷第6期 Mechanical&Electrical Engineering Magazine Vo1.19 No.6 2002 

使用命名管道(NPFS)技术进行生产过程监控 

艾欣,张光新,周泽魁 

(浙江大学工业控制技术国家重点实验室,浙江杭州 310027) 

摘要:阐述了常见的几种实现远程监控的通信方法,着重介绍了命名管道这种方法,并结合实际 

应用证实了其可靠性。 

关键词:命名管道;网络通信;NPFS;多线程 

中图分类号:TP29 文献标识码:A 文章编号:1001—4551(2002)06—0043—03 

Appficafion of Named Pipes in Remote Process Control 

AI Xin,ZHANG Guang.xin,ZHOU Ze.kui 

(National lab.ofIndustrial Control Technology,Zhejiang University,Hangzhou 310027) 

Abstract:This paper introduces several methods of network communication,mainly expands some details of named pipes fries sys— 

tem(NPFS),using a example to proved the stabihty f othis method. 

Key words:named pipes;NPFS;network communication;mnltithreadig n

1引言 

之间或在跨越整个网络的不同进程之间,协助进行 

随着计算机广泛应用,许多企业都在其内部构 

建了属于自己的厂域网络系统,并且对控制软件提 

出了远程监控实时生产数据的要求,这就要求提供 

消息的传输。邮槽不要求对T℃P/IP或者IPC这样 

的基层网络传送协议有着非常深入的了解。由于邮 

槽是围绕一个广播通信体系设计出来的,所以当然 

不能指望能通过它实现数据的“可靠”传输。然而, 

在某些特殊类型的网络构成环境中,假如对数据传 

个简单可靠的服务器/客户模型,以现场的工控机 

为服务器,其他网络内的计算机可以有选择的对其 

感兴趣的数据进行监控,例如温度/压力曲线、实时 

流量等等。许多客户不仅仅需要实时读取的数据, 

还需要从硬盘上读取一些存盘数据。另外由于工厂 

在不断发展,故可能有更多的客户机要求得到数据 

访问,即在服务器/客户系统构建好之后仍然会有客 

户不断加入,而这些客户的IP地址是未知的。这需 

要使用对IP硬件地址不敏感的通信方法来建立局 

域网系统。 

输的可靠性要求不高,那么邮槽忍让是一种非常有 

价值的技术。但是需要注意的是,在Windows NT以 

及Windows 2000中数据报的格式不能超过424字 

节,故如果在发送或者接受方的主机中任何一方使 

用了以上操作系统,只能获得所有字节中的前424 

个,该技术的另外一个缺点是数据报发送是一种非 

面向连接的,故其可靠性并不能满足较高的要求。 

2.2使用Winsock API函数进行通信 

2常见网络通信方法 

目前常采用邮槽、Socket、命名管道和NetBIOS 

协议以及其他协议和网络硬件等多种编程方法实现 

网络的数据传输,其中最受人们欢迎的方法是采用 

Socket、命名管道和NetBIOS协议进行编程。 

Winsock是一种广泛应用的通信编程接口,它可 

以通过参数的设置选择可靠的面向连接或无连接的 

网络通信模式。常用的编程模式分别为:客户/服务 

器模式;点对点连接;远程过程调用(RPC)等3种, 

也可以有选择的进行IP、ATM地址多播,实现多点 

2.1邮槽方法(Mailslot) 

通过邮槽,客户机进程可将消息传送或广播给 

通信。其缺点是编程较其他方法复杂,另外要实现 

多播时如果远程计算机地址更改或者增加播放为原 

有多播地址范围之外的,就要修改IP地址或者更改 

个或多个服务器进程。在同一计算机的不同进程 

收稿日期:2002—09—18 

作者简介:艾欣(1979一),男,重庆人,浙江大学信息学院控制系硕士研究生,主要研究方向为:检测技术和自动化装置。 

维普资讯

Mechanical&Elcterical Engineering lMa ̄zine Vo1.19 No.6 2002 机电工程2002年第l9卷第6期 

设置。最后,在不同的协议之下的定址方法是不相 

同的,增加了编程的复杂性。 

2.3使用NetBIOS接口编程 

(1)使用WaitNamedPipe等候一个命名管道可供 

自己使用; 

(2)使用CreateFile函数建立同服务器的连接; 

(3)若连接成功,调用ReadFile,WriteFile函数进 

行管道读与写操作; 

(4)调用CloseHandle函数关闭管道句柄。 

当服务器进程调用CreateNamedPipe函数创建 

NetBIOS同时提供了面向连接和无连接两种模 

式。与Winsock接口相比,NetBIOS接口的一项重要 

优点在于:它提供了一种统一的名字解析及注册方 

法。对一个NetBIOS来说,它只需要一个NetBIOS名 

字便可工作,Winsock则不同,假如它利用了不同的 

条命名管道时,服务器进程为所建立的命名管道 

协议,那么每种协议的定址方案都要考虑到。尽管 

NetBIOS接口功能非常强大,但可惜的是,由于问世 

提供一个名字,其他进程无论是本地的还是远程的, 

均可以使用该管道与那些建立管道的进程通信。一 

较早,它在功能上存在着诸多限制,已不适合现在的 

需要,除了少数点对点的通信还在使用外,一般都不 

太使用。 

2.4命名管道(NPFS)方法 

NPFS是首先在UNIX SYSTEM上实现的一种进 

程间通信机制。因为采用先进先出的方式来写/读 

数据,又被称之为FIFO。这种进程间通信机制在 

Microsoft Windows系列操作系统中被称为命名管道, 

因为其编程简捷,操作简单,而且不依附于具体协 

议,支持可靠的、单向或者双向数据通信。其通信程 

序适用范围更广、通用性更强,便于移植且能适应于 

网络升级。因此,利用命名管道,结合Win32中多线 

程编程实现Win32组网环境下的实时数据通信,是 

当前网络通信应用的热门课题,它还有一个突出的 

优点就是能直接使用Windows NT或Windows2000的 

安全机制,这是其他网络技术均不具备的一项好处。 

3使用命名管道进行网络通信 

3.1创建服务器及客户机 

命名管道是由应用程序指定的唯一名字的单向 

或双向管道进程通过名字而不是句柄访问命名管 

道。在使用命名管道的应用程序中,设计两类进程: 

服务器进程和客户进程。命名管道操作,如图1所 

示。其操作步骤说明如下: 

服务方: 

(1)使用CreateNamedPipe函数创建命名管道; 

(2)调用ConnectNamedPiPe函数等待客户连接, 

服务方在等待连接时,可以阻塞方式或查询方式; 

(3)若连接成功,调用ReadFile,WriteFile函数进 

行管道读/写操作; 

(4)使用DisconnectNamedPipe函数关闭命名管 

道连接; 

(5)调用CloseHandle函数关闭管道句柄。 

客户方: 

个服务器进程能为同样的命名管道建立任意数量的 

实例,一个命名管道所有的实例共享同样的管道名 

字。但每个实例有自己的命名管道缓冲区和句柄, 

且每个实例为客户服务器通信提供了一个分离的管 

道线。当一个客户进程调用CreateFile或Cal1. 

NamePipe并提供存在的命名管道的名字时,Win32 

系统建立客户进程与管道实例的连接。这样,在 

Win32系统中,由于多线程的支持,使上面的操作和 

编程应用于网络实时数据通信成为可能。由于实时 

数据往往被网上多个客户进程所共享,服务器进程 

必须为每个管道的实例使用单独的线程,服务于各 

个管道实例的线程读取各自管道的请求,使每个线 

程为一个客户服务,实现多个客户进程与服务器进 

程之间的实时数据传输通信。 

服务器方 客户方 

图1命名管道操作过程 

3.2模式问题 

它提供了两种基本通信模式:字节模式和消息 

模式。在字节模式中,消息以一个连续的字节流的 

形式,在服务器与客户机之间流动。这意味着,对客 

户机应用和服务器应用来说,在任何一个特定的时 

间段内,它们不能准确知道有多少字节从管道中读 

入或者写入。在一方写入某个数量的字节,并不表 

示在另一方会读出等量数据。这样一来,客户机和 

服务器在传输数据的时候,便不必关心数据的内容。 

而在消息模式中,客户机和服务器泽通过一系列不 

连续的数据单位,进行数据的收发。每次在管道上 

维普资讯

机电工程2002年第19卷第6期 Mechar cal&Electrical Engineering Magazine Vo1.19 No.6 2OO2 

发出一条消息后,它必须作为一条完整的消息读出。 

3.3安全问题 

证,故在客户机上必须以分配的帐号登陆才能进行 

数据访问,并且只能访问已经建立的管道中的数据 

(如果是“安全模拟”则可以访问到服务器的所有资 

源),较好的实现了对数据的保护和安全的分级。不 

NPFS的一个突出优点就是能够使用Windows 

NT(2000)自带的安全机制,从而能更好的保障数据 

的安全,这就需要操作系统赋予应用程序设置访问 

控制列表的权利,通过API函数InitializeSe— 

用像使用其他方法要自定义安全模式。 

(2)由于采用命名管道,管道名直接写入服务 

器/客户机程序中,故无需像Winsock所组建的网络 

curityDescriptor设置一个安全描述,然后把它的值赋 

给一个空的授权访问控制列表,并在创建管道时使 

用这个列表,就可以达到保证服务器端数据安全的 

作用。相应的在客户机上就必须使用对应的帐号才 

能得到访问许可。 

3.4平台和性能问题 

(1)CreateNamedPipe函数中管道名不能作为子 

通信那样要根据客户机的 地址更改设置。 

(3)系统构成简单可靠,减轻了维护及升级的 

负担。 

质量管理f I生产报表f f优化数据库f客户移 

{ 

{ 

工控机(服务器) 

{ 

{ 

{ 一 tem。 

目录使用,如果已经创建了“\.Pipe\MyPipes”管 

道,就不能再创建诸如“\.Pipe\MyPies\Pipe1”这 p

工控机(服务器) 

{ { 

l PLC2 I 

MPI 

样一个管道; 

(2)命名管道的写操作限制在64kb之内,如果 

试图用一个大于64|d)的缓冲区写入,则函数会返回 

FALSE,而GetLastError调用则会返回ERROR— 

MORE—DATA; 

回} 

l 

{ 

} 

l PLC3 I 

} 

} 

l 被控对象(检测仪表、执行器等) 

图2远程监控系统 

5结论 

(3)单台工作站最多只能建立49个命名管道, 

如果服务器应用创建了49个以上的直接命名管道, 

那么在远程计算机上,一个客户机最多只能建立前 

在Win32环境下编程实现网络通信的方法很 

多,各有自身的特点,相对于别的编程方法来说,命 

名管道编程简单、灵活,方便。而且可以使用Win. 

dow NT以及Windows2000自带的安全机制,保证了 

数据的安全性。可广泛应用于Windows系列组网环 

面的49个命名管道连接,多余的只好忽略; 

(4)如果一台客户机是使用本地系统帐号运行 

而不是网络帐号,则无法打开在Windows NT或Win. 

dows2000上创建的命名管道,返回错误“拒绝访问”。 

境下的网络通信,是通信协议中不可少的一种方法, 

其实现实时数据通信的方案已经在啤酒生产自动化 

中得到了验证。 

参考文献 

[1]Anthony Jones,Jim Ohlund[关].Windows网络编程技术 

[M].北京:机械工业出版社,1999.11. 

[2]Kris Jamesa Ken cope.Intemet Programming[M].北京:电 

子工业出版社,1996. 

4实际应用 

目前,命名管道技术已在浙江某酒厂发酵车间 

成功构建远程监控系统,系统构成,如图2所示。监 

控系统以现场的2台工控机作为服务器(Windows 

NT),局域网上任选计算机作为客户机对实时生产 

数据进行监控和远程查询温度曲线、操作/报警记录 

等历史数据。可以满足质量管理、生产报表和其他 

统计等功能。并且还为今后建立生产过程全局优化 

所需的数据库系统奠定了基础,经实践证明使用命 

名管道方法完全可以满足用户要求。系统的主要特 

点可以归纳为: 

[3]Hedbom Lindskog.Analysis of the Security of Windows NT, 

1999. 

[4] 范春晓,等.在WINDOWS NT上实现远程进程间同步的 

种方法[J].北方工业大学学报,1998,(3):68—73. 

(1)因为服务器指定了“验证”级别的安全验 


本文标签: 管道 命名 数据