电工学习网

 找回密码
 立即注册
电工学习网 电工学习网 技术文库 plc OPC 查看内容

DCOM机制给OPC通讯带来的麻烦及解决办法

2014-10-17 16:45| 编辑:电工学习网| 查看: 10333| 评论: 0|原作者: 董维康|来自: 自动化网社区

      近期在一个项目中调试opc通讯时遇到如下现象,我估计也有不少的同学遇到类似现象。
       场景如下:在一台Windows 7的计算机上安装了某国产组态软件,组态软件以OPCServer方式对外提供数据,组态软件的程序都是带界面的程序,OPCServer程序在操作系统中只能运行一个进程实例;同时在此计算机安装某国外软件的OPCClient程序,用于采集组态软件OPCServer的数据,OPCClient程序是标准的Windows 服务。
       现象描述如下:
1)如果带界面的OPCServer软件已经通过当前登录账户运行起来,然后OPCClient以Windows服务方式运行,这种情况下OPCClient无法与OPCServer通讯。
2)如果带界面的OPCServer软件未先运行,OPCClient以Windows服务方式运行后通过System账户将组态软件的OPCServer运行起来,这种情况下OPCClient可以与OPCServer通讯。
3)如果而带界面的OPCServer软件被Windows服务方式的OPCClient以System账户运行起来后,这时如使用其他带界面的OPCClient程序访问此OPCServer,发现无法通讯;
       总结一下这类情况就是:
       对于桌面方式运行且只允许一个实例运行的OPCServer软件,如果OPCServer程序和OPCClient程序都是以非SYSTEM账户或都是以SYSTEM账户运行,那么可以通讯;如果一个是非SYSTEM账户;另外一个是SYSTEM账户,那么不能通讯。
       遭遇这种现象主要是由于OPC的采用的COM机制导致的,COM机制这里就不说了,当OPCClient运行后,就和目标OPCServer进行通讯,在操作系统允许的空间中检测OPCServer是否存在和是否运行,如果发现OPCServer在运行,就与OPCServer通讯,如果OPCServer未运行,就通知操作系统的COM协调器将目标OPCServer运行起来。在上面描述的现象中,如果带界面的OPCServer软件已经通过当前登录账户运行起来,而OPCClient以Windows服务方式运行在SYSTEM账户的空间,那么OPCClient就未能检测到OPCServer已经运行,于是OPCClient就让COM协调器在本空间中运行OPCServer,但OPCServer运行时,又检测到自己在当前登录账户的空间已经启动了,因此就拒绝再次运行。所以就发生了Windows 服务方式的OPCClient和带界面的OPCServer无法通讯的问题。
       如何解决此类问题呢?按照如下步骤操作一下,基本可以解决Windows 服务方式的OPCClient和带界面的OPCServer无法通讯的问题。
1. 运行“控制面板”下“管理工具”下的“服务”,找到Windows 服务方式的OPCClient。选中服务的名称并双击,在弹出的面板上切换到登录。将登录身份修改为此账户,填入指定账户的名称和密码,点“确定”按钮即可。

2. 重启OPCClient的服务。

看过《DCOM机制给OPC通讯带来的麻烦及解决办法》的人还看了以下文章:

发表评论

最新评论

||电工学习网 ( )

GMT+8, 2021-6-25 03:26

Powered by © 2011-2021 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部