OPC DCOM的设置是实现跨网络OPC通信的基础,现有的一些OPC DCOM配置教程虽然讲解了如何配置DCOM,但没有讲清楚为什么要这么做,而且各个教程涉及的配置方法也不尽相同。
为了彻底搞清楚OPC DCOM的配置过程,我重新做了两台机器的系统,一台是Windows 7 32位,一台是Windows 10 64位,并且重零开始完整的测试了正常运行OPC DCOM所需的最少的配置条件,并进而测试了如何在不关闭Windows防火墙,不切换专用用户(一般的教程都需要在OPC客户端和OPC服务器的计算机上使用同一个用户账户登录)。不敢独享成果,拿出来和各位专业人士商榷。
本文为原创文章,请勿抄袭。谢谢
如何顺利的配置OPC相关的DCOM?首先需要了解OPC DA的工作模式及相关程序(组件、服务)以及Windows的DCOM组件工作机制,然后才能正确的配置OPC DCOM。
所谓的正确配置DCOM,不仅仅是能完成客户端与服务器的通信,而是要求能够确保Windows系统的安全,还包括灵活运用Windows账户,而不是非得需要在服务器和客户端计算机上使用同一个账户。另外,也无需关闭Windows防火墙就能实现OPC DCOM通信。
当Client和Server在同一台计算机时,首先,Client向OpeEnum组件(CLSID: {13486D51-4821-11D2-A494-3CB306C10000})发起查询本机已注册的所有OPC服务器(包括2.0标准(GUID : {63D5F431-CFE4-11D1-B2C8-0060083BA1FB})的及1.0标准(GUID : {63D5F430-CFE4-11d1-B2C8-0060083BA1FB})的服务器。OpcEnum组件负责返回所有已注册的OPC服务器信息。
第二步,OPC Client获取已注册OPC服务器信息后,确定需要连接的OPC服务器,并通过ConnectionPoint接口及AdviseSink接口获取服务器的各种配置信息、数据项(Tag)实时数据及其它通知(如服务器关闭)。
OPC Slient和Server安装在不同的计算机上,如果需要实现Client和Serve的互联互通,Client和Server所在计算机必须安装有标准的OPC DA组件,并完成系统注册。标准的OPC DA组件包括:
首先,OPC客户端软件访问OPC服务器所在计算机上注册的OPCEnum.exe,查询服务器所在计算机上已注册的所有OPC服务器。OpcEnum组件负责返回所有已注册的OPC服务器信息。
第二步,OPC Client获取已注册OPC服务器信息后,确定需要连接的OPC服务器,并通过ConnectionPoint接口及AdviseSink接口获取服务器的各种配置信息、数据项(Tag)实时数据及其它通知(如服务器关闭)。
在简单了解OPC客户端与服务器的通讯过程后,可以得出一个结论,无论是在同一台计算机还是不同的计算机,OPC客户端和服务器之间的通讯主要涉及三个部分:OPC Client、OPCEnum.exe和OPC Server。
下面以Windows 7 32位版本为例,说明OPC DCOM的配置过程。
本节所介绍内容,均通过Windows 10及Windows 7的测试。
为了简化介绍如何建立OPC DCOM通讯的过程,先不考虑防火墙的问题,在建立好DCOM通讯后,在考虑防火墙。所以首先需要禁止Windows 防火墙的功能。关闭Windows防火墙,按如下步骤操作:控制面板 -> 系统和安全 -> Windows防火墙,按下图操作关闭“家庭或工作(专用)网路位置”及“公用网路位置”防火墙。
为了完成网路中两台计算机的互相访问,必须保证在OPC客户端和OPC服务器上有同样用户名并且密码非空的用户账户。
在OPC客户端和OPC服务器所在的计算机操作系统中添加同样的用户,注意:
• 该账户必须有相同的账户用户名和密码;
• 使用Windows域时, 用户账户是由域控制器来同步;
• • 使用多域时,需要作域间的信任或者添加本地用户到受影响的计算机上。
Windows 7添加用户步骤如下:控制面板 -> 系统和安全 -> 管理工具 -> 计算机管理 -> 本地用户和组。
图表 4 本地用户和组
鼠标左键双击左侧树结构中的“本地用户和组”,然后选择“用户”节点。
图表 5 用户
然后选择“操作” -> “新用户”菜单,在新用户对话框中输入用户名和密码,如下图所示。
图表 6 添加新用户
填写完成后,按“创建”按钮,即完成添加用户账户。注意:在OPC客户端和OPC服务器计算机上要创建相同用户名和密码的用户!
本步骤需要在OPC客户端及OPC服务器所在计算机上进行设置。以Windows 7为例,说明设置本地安全策略步骤如下:控制面板 -> 管理工具 -> 本地安全策略,或点击Windows 开始按钮,在“搜索程序和文件”对话框中输入 “secpol.msc”。
图表 7 本地安全策略
在“本地安全策略”对话框中,展开(鼠标左键双击)左侧“本地策略” -> “安全选项”项,在右侧的列表框中,找到“网路访问:本地账户的共享和安全模型”,将其更改为“经典 – 对本地用户进行身份验证,不改变其本来身份”。
图表 8 本地安全策略 – 安全选项
图表 9 本地账户的共享和安全模型属性
OPC客户端及OPC服务器所在计算机系统的DCOM设置影响着Windows的DCOM的应用,包括OPC的应用,由于OPC客户端没有自己的DCOM的设置,所以它受缺省DCOM的配置的影响,因此需要作必要的改变。
系统默认的组件服务通用属性如下面(Windows 10的截图,Windows 7相同)
图表 10 系统组件服务通用属性 - 默认属性
图表 11 系统组件服务通用属性 - 访问权限-安全限制
图表 12 系统组件服务通用属性 - 访问权限-默认值
图表 13 系统组件服务通用属性 - 启动和激活权限-安全限制
图表 14 系统组件服务通用属性 - 启动和激活权限-默认值
1. 点击Windows的开始按钮,在“搜索程序和文件”对话框中输入:dcomcnfg,并回车。
2. 在弹出的“组件服务”对话框中。展开左侧“控制台根节点”,展开到“我的电脑”。鼠标右键选择“我的电脑”,在弹出菜单中选择“属性”。
图表 15 DCOM通用属性设置
3. 在弹出的“我的电脑属性”页中,选择“默认属性”页,按下图设置。有一些设置教程的这一步和下面的OPC Server设置均将默认身份验证级别设置为“无”,但为了确保网络通讯的安全性,而且已经在客户端和服务器的计算机上建立了相同的用户,因此,还是设置为“连接”比较好
图表 16 我的电脑默认属性
4. 选择默认协议,确保“面向连接的TCP/IP”协议存在于“DCOM协议”中。
图表 17 默认协议
5. 选择“COM 安全”页,分别如图选择“访问权限”和“启动和激活权限”的“编辑限制”和“编辑默认值”按钮。
图表 18 COM安全
6. “访问权限” – “编辑限制”对话框
确保Everyone、opcuser和ANONYMOUS LOGON三个用户都被添加到“组或用户名”列表中,并且上述三个用户的“本地访问”和“远程访问”都被允许。
图表 19 访问权限 - 编辑限制
7. “访问权限” – “默认访问权限”
确保SYSTEM、opcuser都被添加到“组或用户名”列表中,并且上述账户的本地访问”和“远程访问”都被允许。
图表 20 访问限制 - 编辑默认值
8. “启动和激活权限”- “编辑限制”
确保Everyone、opcuser用户被添加到“组和用户名”列表中,并且“本地启动”、“远程启动”、“本地激活”和“远程激活”都被允许。
图表 21 启动和激活权限 - 编辑限制
9. “启动和激活权限”- “编辑默认值”
确保opcuser、INTERACTIVE和SYSTEM用户被添加到“组和用户名”列表中,并且“本地启动”、“远程启动”、“本地激活”和“远程激活”都被允许。
图表 22 启动和激活权限 - 编辑默认值
经过上述步骤,组件服务的通用属性就设置好了。记住,OPC客户端和OPC服务器所在的计算机都需要设置。
点击Windows的开始按钮,在“搜索程序和文件”对话框中输入:dcomcnfg,并回车。
在弹出的“组件服务”对话框中。展开左侧“控制台根节点”,展开到“DCOM配置”。然后在右侧的DCOM组件列表中找到需要配置的OPC Server,鼠标右键选择该服务器,然后选“属性”。
图表 23 组件服务
分别按下面的设置,设置OPC Server。
1. OPC Server常规属性
图表 24 OPC Server 常规属性
2. OPC Server位置属性
图表 25 OPC Server位置属性
3. OPC Server安全属性
其中,配置权限选择自定义,并且不需要修改。
图表 26 OPC Server安全属性
4. OPC Server终结点属性
图表 27 OPC Server终结点属性
5. OPC Server标识属性
OPC Server标识属性通常设置为“交互式用户”即可。
图表 28 OPC Server标识属性
这几个选项的含义及作用如下:
交互式用户:这个账户是当前登陆此计算机的用户账户,也就是说必须有账户登陆,否则不能启动OPC 服务器,当此用户注销时,OPC Server就会关闭;
启动用户:OPC 服务器以访问的用户认证,操作系统会为每个访问的用户创建一个实例,这样会有三个问题出现,若OPC Server只允许一个用户访问时,当系统中已经有了一个实例,再有其它用户就无法访问。若是OPC Server允许多个用户访问时,那么带来的问题是随着不同用户的访问,就会打开多个实例,这样就会占用更多的计算机的资源。另外的一个问题是硬件的抢占,如串口,当一个使用了,其它的用户就无法再使用。因此通常不使用此选项。
下列用户:OPC Server以指定的用户账户认证,这种情况需要在OPC Server的计算机上存在着要指定的账户,而且对于OPC Client必须知道此用户。否则无法访问。
系统账户(仅用于服务):OPC Server以操作系统账户认证,对于工作组还是域,系统账户都能被识别,也不需要有用户登陆。但OPC server必须以服务的方式启动。
OPCEnum的设置和OPC Server的设置基本相同,只有“标识”属性不同,可参照下图设置。
图表 29 OPCEnum设置 – 标识01
有的系统在这一步无法设置Interactive User账户,那就将用户设置为opcuser。
图表 30 OPCEnum设置 - 标识 02
经过3.2 至 3.4 的设置后,OPC客户端和服务器就能够实现跨网络的互联互通了。但此时还存在两个问题,一是Windows防火墙还处于关闭状态,这会带来潜在的安全问题。二是OPC客户端和OPC服务器所在的Windows操作系统必须以相同的用户账户登录,这种登录模式可以满足账户敏感度不高的应用环境,但对企业及应用,例如混合了MRP、ERP等应用的环境,各计算机的Windows平台都使用一个账户登录是不能满足应用及安全需求的。
第3章介绍如何解决这两个问题。
按照第二节的教程设置好OPC DCOM后,跨网络的OPC访问就能实现了,但此时,Windows防火墙是关闭的,这肯定会带来安全隐患,因此,最好还是打开Windows防火墙。
但打开Windows防火墙后,如果不做任何设置,OPC的访问就会被防火墙阻隔。按照下面的步骤设置Windows防火墙的入、出站规则,即可实现OPC网络访问的正常化。
选择控制面板 -> 系统和安全 –> Windows防火墙 -> 高级设置。然后选择“入站规则”。
图表 31 Windows防火墙高级设置
鼠标右键选择“入站规则”,然后先择“新建规则”。
图表 32 Windows防火墙入站规则 - 规则类型
图表 33 Windows防火墙入站规则 - 程序
在Windows 10 64位系统中,OpcEnum.exe位于Windows/SysWOW64路径下。
图表 34 Windows防火墙入站规则 - 操作
图表 35 Windows防火墙入站规则 - 配置文件
图表 36 Windows防火墙入站规则 - 名称
OPC服务器和OPC客户端参考OPCEnum的设置过程设置入站规则即可。
OPCEnum、OPC服务器和OPC客户端的出站规则与入站规则类似,在此不再重复。需要注意的是,在“新建出站规则向导”中“操作”页面,一定要选择“允许连接”。
设置完成入站规则和出站规则后,在Windows防火墙打开状态下,也可以实现OPC客户端与OPC服务器的跨网络访问,并且能够保证对应的计算机在网络上的安全性。
在3.2节中提到,如果要实现跨网络的OPC通讯,最简单的办法就是在OPC客户端和OPC服务器所在的计算机上设置相同的账户(同样的用户名和同样的密码),但这也带来一个问题,一些其它的企业级应用,如ERP等,可能会有同样的对登录账户的需求,而在企业所有的网络计算机上设置并使用相同的用户账户登录是不现实的,同时也会有潜在的安全问题。下面给出解决办法。
在OPC客户端所在的计算机上,选择控制面板 -> 用户账户和家庭安全,然后选择“凭据管理器”。如下图所示。
图表 37 Windows凭据管理器
然后选择“添加Windows凭据”。
图表 38 添加Windows凭据
在“添加Windows凭据对话框”中,输入用于连接OPC服务器的网络地址、用户名、密码。
此时需注意,如果在连接OPC服务器时,使用的是IP地址,则在Internet地址栏目中就应该填写IP地址,如果使用的是计算机名,则填写计算机名,或者干脆两种凭据都加上。如下图。
图表 39 Windows凭据 - IP地址
图表 40 Windows凭据最终状态
添加完Windows凭据后,即使使用其它用户账户登录Windows,也能实现和OPC服务器的通讯。