• OPCEnum作用&OPC常见通讯问题


    目录

    1 OPCEnum作用

    1.1 检索server列表

    1.2 检索失败原因

    1.3 是否可以没有OPCEnum

    2 OPC通讯常见问题

    2.1 不能浏览OPCServer列表

    2.2不能连接远程OPC Server

    2.3 数据显示Bad

    2.4 OPC通讯错误码


    1 OPCEnum作用

    你知道OPCEnum有什么用吗?看完本文你就对OPCEnum有了全新的认识。OPC官方说明文档

    1.1 检索server列表

    我们在用OPCClient进行OPC通讯调试时,可以很方便地获取到本地或远程的OPC Server列表,这归功于OPCEnum的功劳。

    http://api1.wangxinzhihui.com:88/upload/0862266f-1df8-11ee/67ad60e5ee2943f40bca.png

    下面,我们把OPCEunm禁止掉。

    http://api1.wangxinzhihui.com:88/upload/0862266f-1df8-11ee/39de1d6c5675aa77dfaa.png

    再点击“Refresh List”,这时,就无法获取到OPCServer列表。

    http://api1.wangxinzhihui.com:88/upload/0862266f-1df8-11ee/9a26979d82d3d12e9439.png

    通过以上的操作,我们可以看到OPCENUM的作用就是枚举本地或远程服务器上OPC Server列表,最终的目的是获取OPC Server的ProgID,以创建OPCServer对象,实现OPC通讯。

    1.2 检索失败原因

    下面,我们对不能浏览OPCServer列表的原因进行总结。

    1.未发现OPCEnum服务:如果Windows服务列表中未发现OPCEnum服务,可通过以下办法解决:

           1)检查OpcEnum.exe是否在System32目录下,在CMD中执行以下命令

                       C:\Windows\System32\OpcEnum.exe /regserver

           2)检查OpcEnum.exe是否在SysWOW64目录下,则在CMD中执行以下命令

                       C:\Windows\SysWOW64\OpcEnum.exe /regserver

           3)没有发现OpcEnum.exe,安装OPC Core Components Redistributable,可登录网信智汇(wangxinzhihui.com)下载。

           4)安装OPC Server仿真软件,软件包含了OPC DA组件包。如DSxPOpcSimulator、Matrikon OPC Server Simulation。

    2.OPCEnum服务被禁止:设置OPCEnum服务为手动或自动状态。

    3.匿名访问权限没有设置:需要在Windows COM安全设置中添加匿名访问权限。

    http://api1.wangxinzhihui.com:88/upload/0862266f-1df8-11ee/e571eec95f463e8c2027.png

    1.3 是否可以没有OPCEnum

      最后1个问题,没有OPCEnum,是否还能进行OPC通讯?答案是肯定的。

          1)通过远程注册表的方式,同样可以获取本地或远程的OPC服务器列表,只是处于安全考虑,Remote Registry服务通常被禁止。

          2)对于Linux系统,既没有OPCEnum,也没有Remote Registry,那么怎么创建OPC通讯?我们知道OPCEnum的目的是获取OPC Server的CLSID,然后转换成ProgID,创建OPCServer对象。所以,我们只要提供OPCServer的CLSID给Linux的OPCClient同样可以实现与OPCServer的通讯。OPCServer的CLSID可以在OPC服务器上注册表里查找。

    2 OPC通讯常见问题

    2.1 不能浏览OPCServer列表

    可能的原因有:

    1、未发现OPCEnum服务:如果Windows服务列表中未发现OPCEnum服务,可通过以下办法解决:

           a)检查OpcEnum.exe是否在System32目录下,在CMD中执行以下命令

                   C:\Windows\System32\OpcEnum.exe /regserver

           b)检查OpcEnum.exe是否在SysWOW64目录下,则在CMD中执行以下命令

                   C:\Windows\SysWOW64\OpcEnum.exe /regserver

           c)没有发现OpcEnum.exe,安装OPC Core Components Redistributable,可登录网信智汇(wangxinzhihui.com)下载。

           d)安装OPC Server仿真软件,软件包含了OPC DA组件包。如DSxPOpcSimulator、Matrikon OPC Server Simulation。

    2.OPCEnum服务被禁止:设置OPCEnum服务为手动或自动状态。

    3.匿名访问权限没有设置:需要在Windows COM安全设置中添加匿名访问权限。

    http://api1.wangxinzhihui.com:88/upload/7a3c3628-1ecb-11ee/8a254e009c28793bdbd5.png

    4.OPCClient采用搜索注册表的方式来枚举OPC服务器,则应该启用Remote Registry服务。

    5.OPC Server未注册或注册表信息丢失。

    2.2不能连接远程OPC Server

       1.显示“RPC服务器不可用”:基本上是网络不通的问题,检查网络、防火墙。

    http://api1.wangxinzhihui.com:88/upload/7a3c3628-1ecb-11ee/a14e731f073db17f9e1a.png

       2.显示“CoCreateInstance:系统找不到指定的文件”:检查OPC Server程序文件是否存在。

    http://api1.wangxinzhihui.com:88/upload/7a3c3628-1ecb-11ee/95d7ea668981717a1281.png

       3.Windwos服务方式运行的OPC Server未启动,检查并启动。

       4. 用户身份认证的问题:显示错误码0x00000005,原因是在远程的计算机身份认证没有通过。 身份认证是 Windows系统比较用户名和密码,如果是不能识别的用户,就会立即拒绝访问。造成身份验证失败的原因有:

       a)用户账户在远程计算机上不存在: 如果试图从的一个域访问另一个域时,需要建立域间的信任关系,或者添加用户到所有的域。如果使用的是工作组,就需要添加用户到远程的计算机,如果使用单域系统就不存在这个问题。

       b)用户密码不对

       c)关闭简单文件共享Simple File Sharing):简单文件共享会去掉远程访问计算机的用户名和密码,导致用户不能被正确认证。

    5.访问控制列表问题:错误码为0x80070005,DCOM配置问题。系统检查用户账户是否有启动或者访问OPC Server 的权限. 这是利用访问控制列表(ACL)来完成的。对于每个应用程序的ACL 包括了用户账户的信息,哪些用户被被允许或者拒绝对具有特定操作权限。检查DCOM配置。

    6. DCOM默认模拟级别问题:错误码为0x80070005。DCOM默认模拟级别应为“标识”,不能为“匿名”。

    7. OPC Server 身份识别的问题:错误码为0x80070005,DCOM配置问题。检查DCOM配置。

       a)交互式用户:是当前登录到运行 COM 服务器的计算机的用户。 如果标识设置为交互式用户,则如果服务器将其类工厂注册为多用途,则所有客户端都使用相同的服务器实例。这个账户是当前登陆此计算机且驻留在OPC Server的计算机上,也就是必须有账户登录,否则不能启动OPC Server,当此用户注销时,OPC Server就会关闭。如果服务器具有图形用户界面 (GUI) 客户端需要查看,则应使用交互式用户作为服务器的标识。

       b)启动用户:这是应用程序标识的默认设置。 OPC Server以访问的用户认证,操作系统会为每个访问的用户创建一个实例,这样会有三个问题出现:

               若OPC Server只允许一个用户访问时,当系统中已经有了一个实例,再有其它用户就无法访问。

               若是OPC Server允许多个用户访问时,那么带来的问题是随着不同用户的访问,就会打开多个实例,这样就会占用更多的计算机的资源。

               另外的一个问题是硬件的抢占,如串口,当一个使用了,其它的用户就无法再使用。

       此外,客户端不会看到服务器显示的任何 GUI。

       c)指定用户: OPC Server以指定的用户账户认证,这种情况需要在OPC Server的计算机上存在着要指定的账户,而且对于OPC Client必须知道此用户。否则无法访问。这种方式下,每个客户端都会与服务器的同一实例通信。 如果服务器具有 GUI,则不应选择此标识;如果这样做,用户将无法看到用户界面。

       d)系统账户(仅用于服务):OPC Server以操作系统账户认证,对于工作组还是域,系统账户都能被识别,也不需要有用户登陆。但OPC server必须以服务的方式启动。

    2.3 数据显示Bad

    1、数据源头为Bad

    2、OPC Client与OPC Server时间差太大

    2.4 OPC通讯错误码

    错误代码

    错误描述

    0x80004005

    未指明的错误

    0x8000401A

    由于配置的标识不正确,无法启动服务器进程。检查用户名和密码。

    0x80010108

    调用的对象与客户端断开连接。重新初始化OPC服务器连接。

    0x8001FFFF

    设备连接数量超过OPCserver支持的连接量,需要重启电脑即可

    0x80040004

    没有connection ID相应的连接

    0x80040005

    需要运行对象执行相应的操作

    0x80040007

    未初始化对象

    0x80040154

    未注册的OPC Server,或者OPC Server需要的组件没有注册

    0x80040155

    接口未注册,OPC服务器不支持正试图连接到的接口

    0x80040200

    DCOM安全问题,通常发生在客户端。此错误通常发生在尝试为异步I/O指定回调地址。

    0x80040202

    无法连接错误,通常发生在调用订阅。可能是OPCPROXY.DLL不同版本造成。

    0x80070002

    系统找不到指定的文件。重新安装您的软件。

    0x80070005

    拒绝访问,检查DCOM配置

    0x8007000E

    内存不足,无法完成请求的操作。每当服务器需要分配内存以完成请求的操作时,都可能发生这种情况。

    0x80070057

    参数不正确。OPC服务器拒绝了您的请求

    0x8007041D

    Windows服务未在允许的时间范围内启动。可能是初始化问题

    0x800705B4

    超时返回

    0x800706BA

    RPC服务器不可用

    0x800706BF

    远程过程调用失败且未执行

    0x800706EA

    RPC服务器上浮点下溢

    0x80070725

    RPC存根版本不兼容

    0x80070776

    无法创建与通知接收器的连接, 错误原因:解析计算机名称时出现问题。 解决方案:可以通过指定服务器的IP地址而不是指定计算机名来解决此问题

    0x80080005

    非常见消息,检查OPC的事件日志

  • 相关阅读:
    数据结构和算法——基于Java——4.1栈(数组实现栈、链表实现栈)
    交换机和路由器技术-22-OSPF动态路由协议
    游戏设计模式专栏(七):在Cocos游戏开发中运用桥接模式
    注解学习总结
    linux上离线安装Python的paramiko模块
    你适合做自动化测试吗?
    Spring Aop 源码 (三) (执行过程)
    【 Git 和 SVN 的区别】
    CSS和JS基础学习
    Spring Boot项目中JPA操作视图会改变原表吗?
  • 原文地址:https://blog.csdn.net/h4241778/article/details/132886835