信息与控制
Information and Control
1999年　第28卷　第4期　Vol.28　No.4　1999



工控软件设计中的复用技术研究
贾宏宇　施　仁

　　摘　要：本文通过分析工控软件设计的特点和发展趋势 ，指出采用软件复用技术是解决目前工控软件设计过程中效率低，重复劳动多，软件灵活性 差的一条很好的途径，并提出了一种全新的工控软件设计体系——部件化结构，作为工控软 件设计过程中复用技术的一种解决方案．
　　关键词：工控软件，复用，部件，包容件，被包容件
　　中图分类号：TP319　　　　　　文献标识码：B

RESEARCH ON THE REUSE TECHNOLOGY IN
INDUSTRY SOFTWARE DESI GN
JIA Hongyu SHI Ren
(Automatic Control Department, Xi'an Jiaotong University 710049) 
Abstract　By analyzing the characteristics and development tr end of the industry software design, this paper points out that reuse is the way to solve the problems of low efficiency, repetition and bad flexibility in indu stry software design. And it puts forward a new architecture, Component Architec ture, in industry software design as an answer to the reuse.
Key words　industry software, reuse, component, containing compo nent, contained component

1　前言
　　从首次开始采用计算机进行工业控制至今，特别是70年代中期集散控制系统（DCS）出现以 来，工控软件的设计取得了长足的进步，也先后出现了许多著名的工控软件，如Honeywell 、Yokogawa等各大DCS厂家开发的DCS配套软件[5,6,12]，Wonderware等公司开发的工业控制组态软件Intouch[1]等，然而一套功能完善的工控软件设计是自动控制 、计算机和通信（即3C）技术的融合，涉及的知识领域宽广，软件规模庞大，开发周期长， 上述软件产品虽然大多数性能优越，但终归各有千秋，没有任何一套软件在各方面都是最优的．国内工控软件的开发目前也比较多，大多数与工业控制有关的研究所、大专院校、公司企业都组 织人员进行过工控软件的研究与开发工作，其中虽然有不少出色的作品，然而同国外同类软 件相比，差距仍然很大，究其原因，我们不难发现，在工控软件的开发过程中存在有大量的 重复开发，甚至于同一个单位在接到不同的工控软件设计任务时都要从头开始，造成了人力 、物力资源的严重浪费，软件成本升高，市场竞争力削弱．本文的目的在于说明通过采用有 效的软件复用技术来解决目前这种工控软件设计过程中效率低，重复劳动多，软件灵活性差 的问题，并提出了一种切实可行的工控软件设计新体系—部件化结构，以实现跨越时间和 地域限制的高度形散神凝的高效软件复用，从而将国内甚至于国外的各种工控软件的优点大 范围地集成到一起，实现从手工编程到软件生产的转变，促进全面最优的工控软件的诞生．
2　软件复用的基本概念
　　软件复用始于60年代的软件危机．从软件工程的角度看，软件复用不是在程序执行期间重复调用某段源代码，也不是程序的重复运行或为了完成分布处理而进行的拷贝，软件复用指的是在开发新的软件系统时，对已有软件的重新使用，该软件可能是已存在的软件，也可能是专门设计的可重用组件[8]．
之所以可以进行软件复用，是由于软件本身具有在某种程度上的一致性和不变性[3]．如果软件不具有一致性，则很难进行分析和综合复用，也很难实现软件开发的自动化．而不变性指的是软件在演化过程中具有的相似性，对于软件的维护极为重要．
　　软件复用的关键是抽象[2]．抽象是指对可复用对象的提炼概括，即将对对象的基本操作和处理从语言、机器和其它环境细节中提炼出来，每一个抽象可以描述相关的可复用对象集，而每一相关的可复用对象集决定了一个对象．能否在软件工程中成功地应用某一种复用技术，取决于复用技术所具有的抽象层次．抽象层次越高，复用的可能性越大．整个软件复用的体系结构是一种非循环的有向图结构．
3　工控软件设计的特点与发展趋势
　　工控软件的设计，乍看起来千头万绪，涉及面过于宽广，有复杂的数据流向，有趋势、工位 等复杂的模块，有实时性、可靠性等严格要求，然而，通过仔细的分析，不难发现：一个完 整的工控软件不外乎由以下几个大的子系统，总控模块、数据输入输出模块、控制算法模块 和包括画面显示、报表打印、文件记录（报警记录、趋势记录等）等在内的人机接口模块所 构成，这些子系统之间的耦合作用全部集中于系统的实时数据库．由于这些子系统在各种类 型的工控软件中所体现出来的在很大程度上的一致性和不变性，奠定了它们的可抽象性从而 可复用性的基础．通过良好地定义这些子系统访问数据库的接口，我们完全可以将这些子系 统或将它们进一步细分以后形成的更小的子系统进行抽象，从而在工控软件的开发过程中加 以复用．
　　从工控软件设计的发展趋势来看，打破“孤岛”式的割据状态，实现系统的开放性、通 用性的呼声越来越高，各个公司、各个厂家生产的系统要求能够进行相互联结，相互通信． 如果能有一种技术，使得可以在一套系统中无缝地集成不同厂家按照某种一致的标准然而独 立地设计的功能模块，而且都不需要相互了解对方的实现，则上述问题自然迎刃而解．而软 件复用技术发展到今天，设计这样的系统已基本可以实现．下面就通过和目前已在工控软件 设计中使用的主要软件复用技术相对比来提出一套工控软件设计的新体系—部件化结构， 以期实现上面的理想系统．
4　目前工控软件设计中采用的复用技术形式
　　事实上，在目前的工控软件设计中，已有不少的软件复用技术在使用，从大的方面分，主要 表现为源代码复用和函数库复用两种形式．
4.1 源代码复用
这种形式的复用主要体现为在同一个单位内部采用函数、封装类的形式在源代码级进行复用．这种复用形式虽然可以在单位内部对软件系统的前后延续、缩短开发进程方面起到一 定的作用，而且在目前所采用的软件复用技术中占有相当大的比例，然而它存在有以下的比较大的缺点：首先是编程语言的障碍，为了复用该被复用对象，以后系统的设计必须采用与当初设计该被复用对象时相同的编程语言，无法做到编程语言的独立性，更无法做到分布式跨平台的软件复用；其次是通过复用生成新的系统时，必须经过编译，无法做到即插即用； 第三是被复用对象的版本控制完全由人来进行，无法做到版本的自动更新．
4.2 函数库复用
使用函数库（包括静态链接库和动态链接库）的形式进行复用比源代码复用有较大的改进， 由于库是一种二进制的形式，故可以做到一定程度上的语言无关性，然而静态链接库仍然解决不了分布式跨平台的复用和编译问题；动态链接库依旧在版本控制、对系统支撑平台的最少依赖性和软件升级方面存在有较大的技术问题．
5　部件化结构
　　针对上述复用技术的不足及当前软件技术的飞速发展，本文作者提出了一种全新的工控软件 设计体系——部件化结构，以求最大限度地进行软件复用和软件集成．这里所说的部件指的是通过经某种注册机制而使相互之间可以理解的标准接口，从而实现具有一定功能但封装了其实现的二进制功能模块．通过使用标准接口，保证各个部件之间在二进制代码级的相互兼容和可利用、互操作，就可以做到编程语言的无关性，对系统支撑平台的最少依赖性，以及分布式的跨平台应用；通过采用一定的注册机制，就可以解决软件升级时的版本控制问题； 只要接口保持不变，各个部件就可以单独升级而不需要在生成新系统时整体重新编译，生成 新系统可以采用搭积木似的无缝集成的方式来进行．因此，采用部件化结构可以很好地解决 目前工控软件设计中进行软件复用时所采用技术的不足与局限．
　　我们将构成部件化结构的部件分为两大类：包容件和被包容件．
　　被包容件指的是具有一定功能，可以经某种注册机制使其它部件了解其存在及功能，并通过定义良好的接口与其它部件进行通信和/或提供服务的二进制功能模块，例如报警处理部件、趋势记录部件等．
　　包容件指的是能够理解被包容件的注册信息，并通过被包容件暴露的接口使用被包容件的二进制功能模块，包容件主要用于实现我们通常所说的工控软件中的总控模块或框架．
　　由包容件和被包容件构成的部件化结构是一种客户/服务器（C/S）结构．由于部件在设计过程中相互独立，从而为它们的复用奠定了良好的基础，而且只要接口定义良好，不同厂家生产的部件完全可以无缝地集成在一起．
另一方面，按照部件在一个工控软件中所起作用的不同，可以将它们大体分为：工控软 件框架、数据采集服务器、数据采集客户端、控制算法、报警处理、趋势记录、报表管理等 ，在此基础上还可作进一步的细分，从而达到接口定义清晰，复用程度高的目的．
整个部件化结构的工控软件设计体系如图1所示.

图1　整个部件化结构的工程软件设计体系
　
6　目前可利用的开发环境
　　如果在以前提出采用部件化结构进行工控软件设计或许是纸上谈兵，然而随着软硬件技术发 展到今天，采用部件化结构已具备了实际的可行性．
目前大多数主流操作系统都在不同程度上，采用不同的技术支持部件化结构，并且操作 系统本身就包含有某种类型的部件化结构，例如Windows 95和Windows NT中的COM/DCOM，对 象管理组（OMG）制定的CORBA，用于Macintosh OS、Unix、OS/2中的跨平台OpenDOC，IBM提 出的SOM等，国内也有不少人在进行这方面的研究工作，北大的青鸟系统就是一个比较成功 的例子；另外，利用新型的基于虚机运行的面向对象程序设计语言JAVA进行JavaBeans的设 计也不容忽视，虽然Java目前运行速度比较慢，然而随着其性能的提高，速度问题可望得到 较好的解决，特别是将它用于诸如异地设计、异地制造等对于实时性要求不高的系统时可充 分发挥其多线程、跨平台和安全性等的特征．
利用上述的操作系统（包括建立于其上的虚机环境）及相应的开发工具，都可以采用部 件化结构进行工控软件的设计，随着这些系统的完善，采用部件化结构进行工控软件设计的 开发环境可望得到更好的提供．考虑到目前工控机中Windows操作系统安装比较普遍，本文 作者选择了COM/DCOM机制进行部件化的工控软件开发．
7　部件化体系的应用前景与展望
　　利用部件的二进制兼容性、平台独立性和网络透明性，可以很容易地将设计的部件用于各种 不同的场合，从而为设计分布式、跨地域的大型工控软件奠定了基础；采用部件化结构进行 工控软件设计，有利于形成全社会范围内的竞争与协作，使得各软件开发厂商充分发挥各自 的优势所在，如同目前的硬件生产厂商一样，有IC生产厂商，有系统集成厂商，构成一个新 系统，完全可以采用搭积木式的方式来进行，从而做到了最大程度的软件复用，大大促进整 个工控软件设计的全面发展；另外，采用部件化结构进行工控软件设计，可以在一个系统中 集成不同厂商生产的各种最优部件，从而使得整个系统最优或接近最优．
8　结束语
　　总的来说，我们希望部件是一个具有清晰的边界（接口）定义并通过该边界与外界环境（其 它部件）打交道的具有较强独立性的小自治系统，在作者最近开发的一个大型工控软件中， 我们采用了部件化结构并取得了阶段性的成果．需要说明的是，在我们的设计与开发过程中 ，我们深深地认识到将部件之间接口标准化的重要性，OPC标准\的推出，可以 说与此思路不谋而合，作者希望通过本文，与国内有兴趣于工控软件设计的同行加强联系、 合作，共同为推动我国工控软件的设计，制定对我国有现实指导意义的接口标准而努力．
作者简介：贾宏宇，26岁，博士研究生．研究领域为自动控制理论及应用，DCS、FCS、CIPS 以及异地监控系统的软件体系结构、设计方法、总体规划和仿真应用．
　　　　　施　仁，64岁，教授，博士生导师．研究领域为自动控制理论及应用，DCS、FCS、CIPS以及 异地监控系统的理论研究与开发．
作者单位：西安交通大学自动控制系　710049
参考文献
1　 北京希望电脑公司. Intouch人机接口应用生成程序 用户指南与参考手册 ，1992.2
2 Krueger C W. Software Reuse，ACM Computing Surveys，1992.6
3 Weber H. Uniformity and Invariance in Support of Reuse. IEEE Trans. On S E，1993, 18(7):2～7
4 张鑫主编. 计算机分散控制系统. 水利电力出版社，1993.10
5 黄步余主编. 分散控制系统在工业过程中的应用，中国石化出版社，1994.3
6 蒋显忠主编. 新型DCS-μXL工程技术实用指南，西北工业大学出版社，1994.4
7 Hafedh Mili,Fatma Mili, Ali Mili. Reusing Software: Issues and Researc h Directions. IEEE Trans. On SE 1995, 21(6)：528～561
8 杨芙清等. 软件复用. 软件学报, 1995, 6(9)：525～533
9 Microsoft Corporation. COM Specification（Microsoft White Paper），1995
10 OPC Taskforce. OPC Standard Ver.1.0，1996
11 Eric Tall, Mark Ginsburg. ActiveX开发人员指南. 机械工业出版社, 西蒙与舒斯特 国际出版公司，1997
12 Yokogawa Electric Corporation. CENTUM 1000 Production Control System. 1997
收稿日期:1998-09-29
