【问题标题】:Connecting to local RSLinx Classic Single Node using OpcNetApi使用 OpcNetApi 连接到本地 RSLinx Classic 单节点
【发布时间】:2015-12-18 03:15:08
【问题描述】:

我的 C# OPC 客户端使用 OpcNetApi 和 OpcNetApi.Com,并与 RSLinx Classic Single Node 安装在同一台机器上

当在同一台机器上使用该版本时,我的客户端连接到 RSLinx 经典网关没有问题。

但是现在我们已经用单节点替换了网关,我收到了来自 OpcNetApi 的以下错误:

E_NETWORK_ERROR 无法连接到服务器。 内部异常:CoCReateInstanceEx:类未获得使用许可。

我已经仔细检查了所有 DCOM 配置,并且我正在使用标准连接代码:

fact = new OpcCom.Factory();
server = new Opc.Da.Server(fact, null);
url = new Opc.URL("opcda://localhost/RSLinx OPC Server");
server.Url = url;
server.Connect();

我也试过了:

server.Connect(url, new Opc.ConnectData(new System.Net.NetworkCredential()));

但两者都给我同样的错误。

所以,问题是:如何使用 OpcNetApi/OpcNetApi.Com 从在同一台机器上运行的客户端连接到本地 RSLinx Classic 单节点?

我们认为单节点意味着 OPC 通信被限制在一个设备上,这就是我们正在做的事情。 . .

请帮忙!

【问题讨论】:

    标签: automation opc


    【解决方案1】:

    谷歌搜索让我想到了这个问题。

    我的解决方案最终有点不同,所以我会添加这个答案,以防将来对某人有所帮助。

    尝试建立本地 OPC 连接失败:

    Create Instance Failed: 0x80040112
    

    问题似乎是对Connect 的调用未能识别出我们正在尝试建立本地连接,而是尝试建立远程连接:

    string computer = // get it from somewhere, perhaps getting "127.0.0.1" or "localhost"
    string server = "RSLinx OPC Server";
    var opcServer = new OpcServer();
    opcServer.Connect(computer, server);
    

    虽然它确实应该认识到这是一个本地连接,但它没有。因此解决方案是执行以下操作来调用仅用于本地连接的Connect 方法。

    string computer = // get it from somewhere, perhaps getting "127.0.0.1" or "localhost"
    string server = "RSLinx OPC Server";
    var opcServer = new OpcServer();
    if (computer == "127.0.0.1" || computer == "localhost")
    {
        opcServer.Connect(server);
    }
    else
    {
        opcServer.Connect(computer, server);
    }
    

    【讨论】:

      【解决方案2】:

      如果您在 64 位机器上,解决方案可能是强制您的 .NET 代码在 32 位进程中运行(例如,通过将项目的目标从 AnyCPU 切换到 x86,或使用 CORFLAGS 实用程序)。

      如果我没记错的话,RSLinx OPC 服务器是在(32 位)DLL 中实现的。当它们在本地调用时,该 DLL 期望在 OPC 客户端的进程内运行。当它检测到其他情况时,它认为它正在被远程使用(在 DCOM 提供的包装器进程中),并且当未获得远程使用许可时,会给出此错误。

      当 OPC 客户端是本地 64 位进程时,它无法加载 32 位 DLL,并且 DCOM 也会创建一个包装进程。可怜的 RSLinx 然后认为它远程运行......

      【讨论】:

      • 这很好用。感谢您提供这一重要信息!
      猜你喜欢
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多