COM接口编程

简介: COM接口编程

COM标准包括规范和实现两大部分。规范部分定义了组件和组件之间通信的机制,这些规范不依赖于任何于任何特定的语言和操作系统;COM标准的实现部分是COM库,COM库为COM规范的具体实现提供了一些核心服务。COM的主要特性如下。

(1)COM采用客户/服务器模型。调用COM对象者称为客户,被调用者称为服务器;有的COM对象在自己被调用的同时,也会调用其他的COM对象,因而兼有客户和服务器的双重身份。

(2)语言无关性。COM规范不依赖于任何特定的语言。因此COM客户程序和COM服务器可以用完全不同的语言开发。这样使利用C++,Visual Basic,以及Excel中作为宏使用的应用程序的VBA等不同语言所开发的程序可以相互连接。之所以具有这样的特性,主要是因为对象与客户程序之间的交互采用的是二进制代码级的标准。

(3)进程透明性。COM对象在实现时可以有两种进程模型:进程内对象和进程外对象。如果是进程内对象,则其运行在客户进程空间内;如果是进程外对象,则其运行在同一机器上的另一个进程空间内或者在进程机器的进程空间内。进程模型的区别对于客户来说是透明的。一般来说,进程内模型的效率高,但是,如果组件不稳定会危及客户进程;相反,进程外模型稳定性好,但效率低。

(4)应用程序级可重用性。由于COM标准是建立在二进制代码级之上的,对COM对象的调用仅仅是通过接口来实现,因此,COM标准实现了对象在应用程序级而非源代码级的可重用性。

(5)不同版本兼容性好。与过去DLL的版本管理非常困难的问题相比,COM技术可以提供不同版本的COM服务器和COM客户程序之间的最大的兼容性。

(6)作为COM技术扩展的分布式COM技术,更可以使COM组件分布在不同的计算机上,并通过网络互相连接并互相交换数据。所以对于COM客户程序来说,同样像连接本地计算机上的COM服务器一样,去连接远程计算机上的COM服务器,当然通信的速度不太一样,但是重要的是不必对服务器程序进行修正就可以在网络上自由构成


基于OPC的客户机/服务器数据交换模型

COM技术的出现为控制设备和控制管理系统之间的数据交换简单化提供了技术基础。但是如果不提供一个工业标准化的COM接口,各个控制设备厂家开发的COM组件之间的相互连接仍然是不可能的。

OPC DA规范描述了OPC服务器需要实现的COM对象及其接口。OPC DA客户可以连接由一个或多个硬件设备供应商开发的OPC服务器,如图4.4所示。开发商提供的代码决定了每一个OPC服务器访问的设备和数据,以及服务器物理上如何访问数据的详细内容。服务器按进程模型可划分为进程内和进程外两种。其中进程外服务器和客户运行在不同的进程中,服务器和客户间采用本地过程调用和远程过程调用的方法通过代理、占位进行进程之间的通信。DCOM把COM的技术扩展到网络,支持不同的计算机上服务器与客户之间的相互通信。这些计算机可以在局域网内,也可以在广域网上,甚至可以通过Internet进行连接。所有底层网络协议的细节由DCOM负责处理,可以很方便地开发适合分布式环境下的客户机/服务器程序。采用该规范后,制造厂商、用户和系统集成商都可以实现各自的好处,具体表现在以下几方面。

bbbabe7ab02046c8bb5f1fbb6d4963d1.png

(1)设备开发者:

可以使设备驱动程序开发更加简单,即只要开发一套OPC服务器即可,而不是为不同的客户程序开发不同的设备驱动程序。这样它们可以更加专注于设备自身的开发,当设备升级时,只要修改OPC服务器的底层接口就可以。采用该规范后,设备开发者可以从驱动程序的开发中解放出来。


(2)系统集成商:

可以从繁杂的应用程序接口中解脱出来,更加专注于应用程序功能的开发和实现,而且应用程序的升级也更加容易,不再受制于设备驱动程序。


(3)用户:可以选用各种各样的商业软件包,使得系统构成的成本大为降低,性能更加优化。同时可以更加容易地实现由不同供应厂商提供的设备来构成混合的工业控制系统。

随着基于OPC标准的控制组件的推广和普及,不仅使控制系统的功能的增减和组件的置换更加简单,而且使过程数据的访问也变得容易。例如,符合OPC规范的过程控制程序可以直接和数据分析软件包或电子表格应用程序连接,从而为实现先进控制功能和管控一体化的实现创造基础。例如,在化工企业广泛采用集散控制系统,但在集散控制系统上开发一些先进控制算法或应用比较困难,因此,可以利用OPC技术,编写一个OPC客户程序来实现先进控制功能,该客户程序与DCS通过OPC接口实时交换数据。COM的编程比较困难,需要较多的计算机知识。对于OPC服务器开发者来说,对COM的理解和掌握是必不可少的。但是对于用户来说,利用VB(Visual Basic)或者VBA(VB Applet)开发OPC应用程序还是比较容易的。

相关文章
|
6月前
|
安全 Java 数据安全/隐私保护
|
1月前
|
存储 设计模式 Java
为什么我们在程序开发设计中要基于接口而非实现编程?
为什么我们在程序开发设计中要基于接口而非实现编程?
57 1
|
5月前
|
XML JavaScript 前端开发
编程接口
**XML DOM 提供编程接口,将XML文档转换为节点对象树,通过JavaScript等语言操作。属性如 nodeName, nodeValue, parentNode, childNodes 和 attributes 访问节点详情。方法如 deleteNode 用于修改或删除节点。**
|
5月前
|
Java
接口基础知识
接口基础知识
23 1
|
6月前
|
Java 数据安全/隐私保护
Java面向对象编程:封装技术详解
Java面向对象编程:封装技术详解
76 0
|
6月前
|
Java
Java面向对象编程,如何定义一个接口并在类中实现它?
Java面向对象编程,如何定义一个接口并在类中实现它?
101 1
|
前端开发 微服务
|
Java 编译器
接口的学习与总结
接口的学习与总结
|
Java
Java面向对象基础2——封装
简单来说,封装就是正确地设计对象的属性。要注意的是,对象代表什么,就封装对应的数据,并提供数据的对应行为
106 0
Java面向对象基础2——封装