OpcRcw.Comn.Package 2.0.4

OpcRcw.Comn

OPC Foundation COM 互操作通用接口库。提供 OPC 规范的 Runtime Callable Wrapper (RCW),用于 .NET 应用程序与 COM-based OPC 服务器的互操作。

功能特性

COM 互操作核心接口

  • IConnectionPoint - COM 连接点接口
  • IConnectionPointContainer - 连接点容器接口
  • IEnumConnectionPoints - 连接点枚举器
  • IEnumConnections - 连接枚举器

OPC 通用接口

  • IOPCCommon - OPC 服务器公共接口,提供基本的客户端/服务器交互功能
  • IOPCServerList - OPC 服务器列表接口,用于枚举本地或远程计算机上的 OPC 服务器
  • IOPCServerList2 - OPC 服务器列表接口 v2.0,提供更多服务器信息
  • IOPCShutdown - OPC 服务器关闭通知接口

枚举器接口

  • IOPCEnumGUID - GUID 枚举器
  • IEnumGUID - 标准 GUID 枚举接口
  • IEnumString - 字符串枚举器
  • IEnumUnknown - IUnknown 对象枚举器

数据结构

  • tagCONNECTDATA - 连接数据结构

安装

通过 NuGet 包管理器

dotnet add package OpcRcw.Comn

通过 Package Manager Console

Install-Package OpcRcw.Comn

使用示例

枚举本地 OPC 服务器

using OpcRcw.Comn;
using System;
using System.Runtime.InteropServices;

// 创建 OPC 服务器列表对象
Type serverListType = Type.GetTypeFromProgID("OPC.ServerList.1");
object serverListObj = Activator.CreateInstance(serverListType);
IOPCServerList serverList = (IOPCServerList)serverListObj;

// 枚举 OPC DA 服务器
Guid catid = new Guid("63D5F432-CFE4-11D1-B2C8-0060083BA1FB"); // CATID_OPCDAServer20
IOPCEnumGUID enumGuid;
serverList.EnumClassesOfCategories(
    1, 
    new Guid[] { catid }, 
    0, 
    null, 
    out enumGuid);

// 获取服务器 CLSID
Guid[] clsids = new Guid[100];
int fetched;
enumGuid.Next(100, clsids, out fetched);

// 获取服务器详细信息
for (int i = 0; i < fetched; i++)
{
    string progID, userType, verIndProgID;
    serverList.GetClassDetails(
        ref clsids[i],
        out progID,
        out userType,
        out verIndProgID);
        
    Console.WriteLine($"服务器: {userType}");
    Console.WriteLine($"ProgID: {progID}");
    Console.WriteLine($"CLSID: {clsids[i]}");
    Console.WriteLine();
}

// 释放资源
Marshal.ReleaseComObject(enumGuid);
Marshal.ReleaseComObject(serverList);

使用 IOPCCommon 接口

using OpcRcw.Comn;

// 假设已经创建了 OPC 服务器对象
IOPCCommon opcCommon = (IOPCCommon)opcServer;

// 设置客户端名称
opcCommon.SetClientName("MyOPCClient");

// 获取服务器的本地化 ID
int localeID;
opcCommon.GetLocaleID(out localeID);
Console.WriteLine($"服务器本地化 ID: {localeID}");

// 查询可用的本地化 ID
int count;
int[] localeIDs;
opcCommon.QueryAvailableLocaleIDs(out count, out localeIDs);
Console.WriteLine($"可用的本地化 ID 数量: {count}");

系统要求

  • .NET Framework 2.0 或更高版本
  • Windows 操作系统(因为 OPC 基于 COM/DCOM)
  • 已安装的 OPC 服务器(用于测试和运行)

注意事项

  1. COM 互操作要求

    • 必须在 Windows 平台上运行
    • 需要正确的 COM 注册和权限设置
    • 使用完 COM 对象后应使用 Marshal.ReleaseComObject 释放资源
  2. 线程模型

    • OPC 服务器通常使用单线程单元(STA)模型
    • 在 STA 线程中调用 COM 接口以避免跨线程问题
  3. DCOM 配置

    • 远程访问需要正确配置 DCOM 权限
    • 防火墙设置可能需要调整
  4. 依赖关系

    • 此库通常与 OpcRcw.Da 配合使用
    • 需要目标系统上安装相应的 OPC 服务器

相关项目

  • OpcRcw.Da - OPC DA (Data Access) 接口库
  • HL.OPC - HL 框架的高级 OPC 封装库
  • HL.AdsOPC - Beckhoff ADS OPC 实现
  • HL.S7OPC - Siemens S7 OPC 实现

技术规范

本库实现了 OPC Foundation 的以下规范:

  • OPC Common Definitions and Interfaces Specification
  • OPC Custom Interface Standard
  • 符合 OPC Foundation 标准

许可证

MIT License

Copyright © 2015 贵州慧联科技有限公司

技术支持

如有问题或建议,请联系技术支持团队或访问项目仓库。

Showing the top 20 packages that depend on OpcRcw.Comn.Package.

Packages Downloads
HL.OPC
通用 OPC DA 客户端组件,支持标准 OPC DA 2.0 协议。提供服务器连接、组管理、数据读写、变化订阅等功能。
0

初始版本发布

This package has no dependencies.

Version Downloads Last updated
2.0.4 0 08/19/2026