目录
你知道OPCEnum有什么用吗?看完本文你就对OPCEnum有了全新的认识。OPC官方说明文档
我们在用OPCClient进行OPC通讯调试时,可以很方便地获取到本地或远程的OPC Server列表,这归功于OPCEnum的功劳。
下面,我们把OPCEunm禁止掉。
再点击“Refresh List”,这时,就无法获取到OPCServer列表。
通过以上的操作,我们可以看到OPCENUM的作用就是枚举本地或远程服务器上OPC Server列表,最终的目的是获取OPC Server的ProgID,以创建OPCServer对象,实现OPC通讯。
下面,我们对不能浏览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安全设置中添加匿名访问权限。
最后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服务器上注册表里查找。
可能的原因有:
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安全设置中添加匿名访问权限。
4.OPCClient采用搜索注册表的方式来枚举OPC服务器,则应该启用Remote Registry服务。
5.OPC Server未注册或注册表信息丢失。
1.显示“RPC服务器不可用”:基本上是网络不通的问题,检查网络、防火墙。
2.显示“CoCreateInstance:系统找不到指定的文件”:检查OPC Server程序文件是否存在。
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必须以服务的方式启动。
1、数据源头为Bad
2、OPC Client与OPC Server时间差太大
错误代码 | 错误描述 |
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的事件日志 |