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

相关文章
|
缓存 Windows
Windows程序设计——LoadImage参数及其用法
Windows程序设计——LoadImage参数及其用法
826 0
|
12月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`<if>`、`<where>`、`<set>`、`<foreach>`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`<sql>`和`<include>`实现代码复用,优化维护效率。
1149 5
|
人工智能 算法 机器人
《探秘移动游戏的物理魔法:引擎应用与性能进阶指南》
物理引擎是移动游戏中实现真实感和趣味性的核心技术,通过模拟重力、碰撞、惯性等物理现象,增强沉浸感。在赛车游戏、解谜游戏等不同类型中,物理引擎发挥着独特作用,如《愤怒的小鸟》利用Box2D精准模拟碰撞效果。然而,移动设备性能有限,需优化物理模拟,包括控制物体数量、调整更新频率、简化模型等。未来,随着硬件升级和AI融合,物理引擎将实现更复杂的效果,如流体模拟和智能动态调整,同时工具的易用性提升也将助力开发者创造更精彩的游戏体验。
496 13
|
前端开发 Python
【前端验证】通用型顺序比对的uvm scoreboard组件编写
【前端验证】通用型顺序比对的uvm scoreboard组件编写
725 0
|
数据挖掘 数据处理 C#
WPF技术之DataGrid控件
WPF DataGrid是一种可以显示和编辑数据的界面控件。它可以作为表格形式展示数据,支持添加、删除、修改、排序和分组操作。
775 0
|
存储 监控 Java
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用(二)
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用
674 1
|
负载均衡 安全 Java
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用(一)
【C++ 并发 线程池】轻松掌握C++线程池:从底层原理到高级应用
2232 2
|
存储 安全 C++
Qt QList 详解:从底层原理到高级用法
Qt QList 详解:从底层原理到高级用法
2923 2
|
机器学习/深度学习 传感器 数据采集
使用Python实现深度学习模型:智能工业与工业4.0技术
【8月更文挑战第15天】 使用Python实现深度学习模型:智能工业与工业4.0技术
340 0
|
数据可视化 C#
WPF技术之TreeView控件
WPF TreeView控件是一个用于显示分层数据的控件,类似于文件浏览器中的目录结构。
461 0