网站标志
导航菜单
当前日期时间
当前时间:
购物车
购物车中有 0 件商品 去结算 我的订单
商品搜索
商品搜索:
文章正文
DCOM机制给OPC通讯带来的麻烦及解决办法
作者: 来源:中国机电工程网    发布于:2019-06-07 11:51:24    文字:【】【】【
近期在一个项目中调试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的服务
浏览 (31) | 评论 (0) | 评分(0) | 支持(0) | 反对(0) | 发布人: 来源:中国机电工程网
将本文加入收藏夹
新闻详情
脚注栏目
|
脚注信息
机电工程网(C) 2015-2020 All Rights Reserved.    联系我们