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应用程序还是比较容易的。

相关文章
|
3月前
|
Java Python
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
【9月更文挑战第18天】在 Python 中,虽无明确的 `interface` 关键字,但可通过约定实现类似功能。接口主要规定了需实现的方法,不提供具体实现。抽象基类(ABC)则通过 `@abstractmethod` 装饰器定义抽象方法,子类必须实现这些方法。使用抽象基类可使继承结构更清晰、规范,并确保子类遵循指定的方法实现。然而,其使用应根据实际需求决定,避免过度设计导致代码复杂。
|
6月前
|
XML JavaScript 前端开发
编程接口
**XML DOM 提供编程接口,将XML文档转换为节点对象树,通过JavaScript等语言操作。属性如 nodeName, nodeValue, parentNode, childNodes 和 attributes 访问节点详情。方法如 deleteNode 用于修改或删除节点。**
|
6月前
|
Java
接口基础知识
接口基础知识
32 1
|
前端开发 微服务
|
Java 编译器
接口的学习与总结
接口的学习与总结
|
C语言
C语言提高:接口的封装与设计
C语言提高:接口的封装与设计
230 0
C语言提高:接口的封装与设计
|
设计模式 关系型数据库 BI
面向对象——接口
面向对象——接口
331 0
面向对象——接口
|
机器学习/深度学习 API Python
python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略
python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略