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

  • A+
所属分类:PLC

近期在一个项目中调试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的服务。

  • 营销微信
  • 报单询价扫一扫
  • weinxin
  • 技术微信
  • 技术问题扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: