您的位置:首页 > 理论基础 > 计算机网络

工业通信:同一计算机上的OPC-Client如何与多个网络OPC-Server通讯?

2017-02-28 10:19 357 查看
链接

标签: 让匿名用户方式可访问 固定的用户名和密码 批处理文件 opc隧道软件 opc通讯配置文档 分类: 现场总线工业以太网物联网

【问题背景】

一个生产信息化的项目,需要从现场的各个控制子系统获取数据,每个控制子系统都提供了OPC-Server,前期调试中,单独的已经都能和各个控制子系统的OPC-Server通讯,获取到需要的数据了。但由于前期方案设计时,基于成本的考虑加上每个系统需要采集的测点很少,并未采用一个子系统一台接口机的方案。而现在到了具体的实施阶段,才发现不是一件容易的事情。

【在一台接口机上同时访问多个远程OPC-Server数据时遇到的问题】

1、各个子系统提供OPC-Server的计算机由不同的自动化集成商实施,也是不同的部门在管理和维护,难以让所有的OPC-Server计算机都使用相同的用户名密码。2、各个子系统提供OPC-Server的计算机操作系统也不一样,从Windows 2000到Window 7,各个版本都存在,很难都配置为允许匿名方式访问远程OPC-Server。3、好不容易将能统一用户名密码的几个OPC-Server统一了,结果又遭遇了子系统的电脑重装和操作系统密码被修改的事情,能通讯的也变得不能通讯了。那么,有啥好招能解决这个现场的OPC通讯问题不?每个子系统单独配置一台接口机或者网关不就OK了?可这个项目总金额本身就较低,原来做方案时就为了节省成本,加上每个子系统需要的数据不多,因此才采用一台接口机增加4块网卡同时采集3~5个OPC-Server的方案,如变成一对一的方案,采购接口机的5~6万人民币从哪里出来?那么,每台OPC-Server计算机上增加一个OPC隧道软件不就绕开远程OPC需要用户登录验证的机制了吗?此方法甲方给否定了,说各个子系统都是不同的部门在维护,你在人家系统的计算机上安装你的软件,万一出现了死机或者系统故障问题,谁来承担这个责任?让子系统OPC-Server所在的计算机的操作系统都使用相同用户名和密码难实现,一对一采集又增加成本,在每台OPC-Server上安装OPC隧道软件也不行(至少这个现场的甲方不允许),那还有其他可行方案吗?

【用一台PC同时访问多个远程OPC-Server数据的其他可行方案】

这里将各种可行的办法整理汇总如下:1、允许工程师去配置OPC-Server计算机的,最好将OPC-Server的DCOM都配置为交互访问方式,根据操作系统的情况,将XP,2003配置让匿名用户方式可访问。其他操作系统则在系统中添加固定的用户名和密码,同时在安全策略中设定此用户只能用户远程访问,而不能用户桌面登录。2、不允许工程师去配置OPC-Server计算机的,现场子系统应该会有原厂家人员进行配置,可与现场子系统的原厂家人员沟通,按照办法1中的方式进行配置。3、考虑到子系统的电脑不知道啥时候会被重装,一定要给甲方的系统维护人员留下详细的OPC通讯配置文档,以备不时之需。考虑到大多数的甲方维护人员是不会看这个苦涩的技术文档,最好将OPC通讯配置作出一个批处理文件,然后告诉维护人员,如果以后重装了,只需要在子系统的OPC-Server的电脑上运行一下这个批处理就好了。这种方式,大多数的甲方维护人员都会乐意接受的。

【脚本源代码】

————————–脚本开始———————-

@echo off

::此脚本只支持自动配置Windows XP/2003系统上的OPCServer

TITLE 自动配置Windows XP/2003系统指定OPCServer的DCOM。

::—————————-定义变量信息开始———————————————

::定义OPCServer的名称

set OPCServerName=Matrikon.OPC.Simulation.1

::定义OPCServer的进程名称,此进程的绝对路径

set OPCServerProcess=D:\OPCSim\OPCSim.exe

::定义远程访问OPCServer的用户名和密码

set newuser=opcuser

set newuserpwd=opcuser

::———————–定义变量信息结束——————-

::————————————选择菜单——————————————

color 0A

:top

ECHO ==================================================================

echo [b]********************************************************[/b]

echo OPCServer的名称: %OPCServerName%

echo OPCServer的进程名称及路径: %OPCServerProcess%

echo [b]********************************************************[/b]

echo 新添加的用户名称: %newuser%

echo 新添加的用户密码: %newuserpwd%

echo [b]********************************************************[/b]

ECHO ==================================================================

ECHO 核对上面的信息是否正确,准确无误按任意键继续。

ECHO 如果有误,输入x键并回车或直接关闭窗口,重新定义脚本中变量后再次运行。

ECHO ─────────────────────────────────

ECHO.

ECHO 1. 按回车键继续

ECHO 2. 按x键并回车后编辑脚本

ECHO.

:cho

SET Choice=

SET /P Choice=选择:

rem 设定变量”Choice”为用户输入的字符

IF NOT “%Choice%”==”” SET Choice=%Choice:~0,1%

rem 如果输入大于1位,取第1位,比如输入132,则返回值为1

ECHO.

IF /I “%Choice%” NEQ “x” GOTO gogogo

IF /I “%Choice%” EQU “x” GOTO endx

rem 为避免出现返回值为空或含空格而导致程序异常,需在变量外另加双引号

rem 注意,IF语句需要双等于号

ECHO 选择无效,请重新输入

ECHO.

GOTO top

pause

::——————————美丽的分割线—————————

:gogogo

echo 开始配置OPCServer

echo 1)配置本地计算机的安全策略及启用guest用户

echo 在OPCServer服务器添加指定用户使远程计算机可以通过此用户访问OPCServer

::在OPCServer服务器添加指定用户和密码

net user %newuser% %newuserpwd% /add /passwordchg:no /expires:never

::指定新增加的用户是激活状态

net user %newuser% /active:yes

::将新增加的用户添加到管理员组中

net localgroup Administrators %newuser% /add

echo 2)配置本地计算机的安全策略及启用guest用户及设置新增加用户只能远程访问

::启用来宾用户

@net user guest /ACTIVE:YES

::设置来宾用户密码为空

@net user guest “”

::生成安全策略配置文件

echo [Unicode]>opc.inf

echo Unicode=yes>>opc.inf

echo [System Access]>>opc.inf

::用户密码永不过期

echo MinimumPasswordAge = 0>>opc.inf

echo MaximumPasswordAge = -1>>opc.inf

echo [Registry Values]>>opc.inf

::远程访问此计算机时的身份强制都是来宾用户

echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,1>>opc.inf

::允许远程访问此计算机时的用户密码是空

echo MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse=4,1>>opc.inf

echo [Privilege Rights]>>opc.inf

::生成安全策略配置文件

echo SeDenyNetworkLogonRight = >>opc.inf

::禁止本地桌面登录的用户列表

echo SeDenyInteractiveLogonRight = SUPPORT_388945a0,%newuser%,Guest>>opc.inf

echo [Version]>>opc.inf

echo signature=”CHICAGO”>>opc.inf

echo Revision=1>>opc.inf

::使用secedit程序将本地计算机的安全策略配置文件导入当前系统

@secedit /configure /db opc.sdb /cfg opc.inf /log opc.log /quiet

@gpupdate /force

@ping 127.0.0.1 -n 1 >nul

::使用secedit程序将本地计算机的安全策略配置文件导入当前系统

@secedit /configure /db opc.sdb /cfg opc.inf /log opc.log /quiet

@gpupdate /force

del /Q opc.* 2>nul

@ping 127.0.0.1 -n 3 >nul

echo 3)配置DCOM为everyone可以访问

echo Windows Registry Editor Version 5.00 >>opc.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole] >>opc.reg

echo “DefaultLaunchPermission”=hex:01,00,04,80,70,00,00,00,80,00,00,00,00,00,00,00,\ >>opc.reg

echo 14,00,00,00,02,00,5c,00,04,00,00,00,00,00,18,00,1f,00,00,00,01,02,00,00,00,\ >>opc.reg

echo 00,00,05,20,00,00,00,20,02,00,00,00,00,14,00,1f,00,00,00,01,01,00,00,00,00,\ >>opc.reg

echo 00,01,00,00,00,00,00,00,14,00,1f,00,00,00,01,01,00,00,00,00,00,05,04,00,00,\ >>opc.reg

echo 00,00,00,14,00,1f,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00,01,02,00,00,\ >>opc.reg

echo 00,00,00,05,20,00,00,00,20,02,00,00,01,02,00,00,00,00,00,05,20,00,00,00,20,\ >>opc.reg

echo 02,00,00 >>opc.reg

echo “MachineLaunchRestriction”=hex:01,00,04,80,48,00,00,00,58,00,00,00,00,00,00,00,\ >>opc.reg

echo 14,00,00,00,02,00,34,00,02,00,00,00,00,00,18,00,1f,00,00,00,01,02,00,00,00,\ >>opc.reg

echo 00,00,05,20,00,00,00,20,02,00,00,00,00,14,00,1f,00,00,00,01,01,00,00,00,00,\ >>opc.reg

echo 00,01,00,00,00,00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00,01,02,00,\ >>opc.reg

echo 00,00,00,00,05,20,00,00,00,20,02,00,00 >>opc.reg

echo “MachineAccessRestriction”=hex:01,00,04,80,44,00,00,00,54,00,00,00,00,00,00,00,\ >>opc.reg

echo 14,00,00,00,02,00,30,00,02,00,00,00,00,00,14,00,07,00,00,00,01,01,00,00,00,\ >>opc.reg

echo 00,00,05,07,00,00,00,00,00,14,00,07,00,00,00,01,01,00,00,00,00,00,01,00,00,\ >>opc.reg

echo 00,00,01,02,00,00,00,00,00,05,20,00,00,00,20,02,00,00,01,02,00,00,00,00,00,\ >>opc.reg

echo 05,20,00,00,00,20,02,00,00 >>opc.reg

echo “EnableDCOM”=”Y” >>opc.reg

echo “DefaultAccessPermission”=hex:01,00,04,80,58,00,00,00,68,00,00,00,00,00,00,00,\ >>opc.reg

echo 14,00,00,00,02,00,44,00,03,00,00,00,00,00,14,00,07,00,00,00,01,01,00,00,00,\ >>opc.reg

echo 00,00,01,00,00,00,00,00,00,14,00,07,00,00,00,01,01,00,00,00,00,00,05,0a,00,\ >>opc.reg

echo 00,00,00,00,14,00,07,00,00,00,01,01,00,00,00,00,00,05,12,00,00,00,01,02,00,\ >>opc.reg

echo 00,00,00,00,05,20,00,00,00,20,02,00,00,01,02,00,00,00,00,00,05,20,00,00,00,\ >>opc.reg

echo 20,02,00,00 >>opc.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\AppCompat] >>opc.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\AppCompat\ActivationSecurityCheckExemptionList] >>opc.reg

echo “{A50398B8-9075-4FBF-A7A1-456BF21937AD}”=”1” >>opc.reg

echo “{AD65A69D-3831-40D7-9629-9B0B50A93843}”=”1” >>opc.reg

echo “{0040D221-54A1-11D1-9DE0-006097042D69}”=”1” >>opc.reg

echo “{2A6D72F1-6E7E-4702-B99C-E40D3DED33C3}”=”1” >>opc.reg

echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\NONREDIST] >>opc.reg

echo “System.EnterpriseServices.Thunk.dll”=”” >>opc.reg

@regedit /s opc.reg

echo 4)对本机的OPC Server进行配置

echo 对本机的OPC Server进行配置,请前面填写正确的OPC Server名称

::下面这句不要动

echo %OPCServerName%>�%\OPCname.txt

@ping 127.0.0.1 -n 2 >nul

for /F “tokens=*” %%a in (OPCname.txt) do for /F “skip=4 tokens=3” %%b IN (‘reg query “HKEY_CLASSES_ROOT\%%a\CLSID”’) DO @echo %%b & reg add “HKEY_CLASSES_ROOT\AppID\%%b” /v “RunAs” /t REG_SZ /d “Interactive User” /f & reg add “HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\%%b” /v “RunAs” /t REG_SZ /d “Interactive User” /f

echo 5)加OPC相关程序到Windows 防火墙

netsh firewall set allowedprogram C:\WINDOWS\system32\Opcenum.exe opcenum enable

netsh firewall set allowedprogram %OPCServerProcess% opcserver enable

netsh firewall set portopening TCP 135 DCOM ENABLE

@ping 127.0.0.1 -n 1 >nul

del /Q OPCname.txt

del /Q opc.reg

:end

pause & exit

:endx

start notepad.exe �%_OPCServer_DCOM配置脚本.cmd

exit
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: