网站首页 > 资源文章 正文
前言
这篇文章比较长,是我多年工作经验的一个总结。我做了10年的工业自动化,做过很多PLC、DCS系统,也做过很多的工业通讯。我也写过不少opc、modbus等协议的通讯代码。我相信我这篇文章很有现实指导意义。如果觉得文章太长没有时间看,可以先收藏,以后有时间了再看。
OPC DA通讯过程与排错
下面的我会按照opc da通讯连接过程,说明一下在连接过程中可能出现的通讯问题。列表的顺序就是opc da建立通讯连接的顺序。
- OPC Client查询(枚举)OPC Server
OPC Client连接OPC Server分两种情况:连接本地OPC Server和连接远程OPC Server。
当OPC Client连接本地OPC Server时(OPC Client和OPC Server在同一台电脑),OPC Client可以通过OPCEnum.exe枚举到本地已经注册的OPC Server,OPC Client也可以通过注册表查找本地的OPC Server。
当OPC Client连接远程OPC Server时(OPC Server与OPC Client不在同一台电脑),情况将变得复杂。在windows操作系统中,RPC(Remote Procedure Call)是通过135端口进行通讯的。OPC Client枚举远程电脑上的OPC Server时,要调用远程电脑上的OPCEnum.exe。这就涉及到了防护墙和DCOM配置。如果有以下问题,那么OPC Client无法枚举到OPC Server:
- 网络故障。OPC Client和OPC Server之间网络无法到达,肯定是无法建立通讯的,RPC的底层还是TCP/IP,网络不通那么就无法建立TCP/IP连接,也就不可能正常通讯。检测网络是否可达,常用的命令是ping。如果检测到网络不通,那么需要排查网络问题。
注意:ping是有一定的欺骗性的。ping是通的代表网络可达。ping不通不代表网络不可达。因为防火墙可能会阻止ICMP回应。当ping不通时,要通过其他的方式配合确定网络是否可达,比如端口开放检测工具。
- 防火墙(硬件防火墙或者系统自带的软件防火墙)阻挡了135端口。
测试端口是不是通,常用的工具有telnet、nmap、tcping。在工作中,这三个工具我都会用。但是就检测端口来说,我更喜欢tcping这个工具,简单又直观。nmap过于强大,所以就会比较复杂。telnet又过于简陋。tcping工具的官方站点:https://www.elifulkerson.com/projects/tcping.php。tcping的使用非常简单,就像ping工具一样。下图是tcping最简单的用法,tcping 后面跟随两个参数,第一个参数为目的ip,也就是OPC Server所在电脑的IP地址。第二个参数为端口号,下图我测试的是135端口。下图的测试结果表示192.168.56.1的135端口是通的。
如果检测到135端口不通,那么应该去排查硬件防火墙或者windows防火墙。windows防火墙应该开放TCP135端口。网络中的硬件防火墙(如果有的话)也应该允许OPC Client和OPC Server之间的135端口互访。
- DCOM配置错误。
网络上不少DCOM配置的教程。基本上就是将administrators、everyone、anonymous、sytem、interactive、network几个账户添加到COM安全配置中。以后有时间我会再写一个DCOM配置的文章。我目前经常使用的是脚本,我自己写的一个DCOM配置脚本,因为我比较懒,实在是不想总是鼠标点来点去的。这里是脚本的地址:https://gitee.com/Zer0Day/opc-da-dcom-script
- 安全策略问题。
不同版本的windows,默认安全策略是不同的。应该尽量让OPC Client和OPC Server的安全策略相同。尤其是“网络访问:本地账户共享和安全模型”,直接影响账户的验证方式。有些OPC Server,需要开启Guest才能正常通讯。最容易导致问题的就是下面三图选中的选项。
- OPCEnum没有注册或者被删除
这个就安装opc 运行环境吧。
- OPCEnum的用户标识错误。
默认情况下,windows7以后的系统中,OPCEnum是注册为windows服务的,并且已经集成到windows系统中。安装一个全新的系统,默认就安装了OPCEnum服务。已经被注册为服务的DCOM组件,强烈建议将标识设置为“系统账户(仅用于服务)”。尽量不要选择“下列用户”,更不建议将OPCEnum反注册以后设置为“交互式用户”。网络上有很多文章说要把OPCEnum的标识设置为“交互式用户”,甚至有很多文章为了把OPCEnum的标识设置为“交互式用户”,不惜把OPCEnum反注册以后再重新注册。我的建议是:没事别动系统服务。
- OPC Client和OPC Server用户名密码不同。OPC Client和OPC Server要有相同的用户名和密码,否则将无法正常通讯。
- OPC Client 连接OPC Server
经过第一步枚举以后,如果OPC Client能枚举到OPC Server,那么一定能连接上OPC Server吗?答案是不一定。导致能枚举到OPC Server而无法连接OPC Server的问题非常多。最常见的原因有以下点:
- DCOM配置错误。
要仔细检查一下DCOM的配置有没有问题,有没有遗漏。另外DCOM配置以后通常需要重启电脑。
- 标识错误。
这个问题和上面的OPCEnum标识错误一样的。OPC Server可能以COM方式注册,也可能以服务方式注册。如果OPC Server是以服务方式注册的,那么标识尽量选择“系统账户(仅用于服务)”。如果OPC Server是以COM方式注册的,那么尽量选择“交互式用户”。
- OPC Server无法正常启动/运行。
OPC Server通常都是依赖数据源的,一般数据源是DCS系统或者组态软件之类的。可能因为依赖关系导致OPC Server无法启动。或者因为安装配置错误,导致OPC Server无法启动。也可能是因为其他的原因导致OPC Server处于假死状态。
- 创建数据点
在创建数据点的过程中可能无法遍历OPC Item的情况。也就是列出OPC Serve的点时出错或者无法显示。这个通常是因为OPC Server自身的原因导致的。如果只是无法列出点,但是能在OPC Client创建点,也能读取,那么这个问题可以不予理会。如果无法在OPC Client创建点,那么需要检查OPC Server。
一般来说OPC Server都是依赖其他数据源的。出现无法列出OPC Item的情况,很可能是OPC Server无法读取数据源或者是因为依赖的数据源没有启动、启动顺序不对等原因造成的。通常重启软件或者电脑能解决问题。
- 读写OPC Item
终于来到了读写这一步。理论上,上面的每一步都走通了,读写数据应该是水到渠成吧?然而,这一步不出问题还好,出了问题就是非常头大的问题。有些问题非常奇怪,让人都无从下手。我列一个我遇到过的问题:
- 可以同步读取,无法异步读取/订阅。
这个问题困扰了我很久,有好几天找不到原因。同步通讯时,是客户端发起请求,服务端响应。而异步通讯时,客户端订阅了一些点,服务端会在未来某个时刻连接客户端发送数据。也就是说OPC Client侧135端口要打开,DCOM要配置正确,安全策略要配置正确,双方的用户名和密码也要正确。这样才能保证OPC Server能正常的发送数据给OPC Client。以上任何一个有问题都会导致OPC Server无法将订阅数据发送给OPC Client。我当时遇到的问题就是因为安全策略导致的。
- 上一篇: 服务器出现“应关闭不需要的系统服务”提示,怎么办?
- 下一篇: 如何保护自己的电脑,关闭危险端口(二)
猜你喜欢
- 2024-10-27 网络安全工程师演示:黑客是如何使用Nmap网络扫描工具的?
- 2024-10-27 关闭445 135 138 139端口,预防比特币勒索病毒
- 2024-10-27 关于有效防范比特币勒索软件病毒攻击减少损失的方法
- 2024-10-27 黑客攻防 I 如何阻止黑客进行网络攻击「第3期」
- 2024-10-27 命令行创建IP安全策略(IPSEC),让系统更安全
- 2024-10-27 Petya 病毒来袭千万别不当回事,最全应急措施汇总转转转
- 2024-10-27 蠕虫病毒“Worm/Sharp”通过“永恒之蓝”漏洞在全网传播
- 2024-10-27 系统加固之Windows操作系统加固(windows加固有哪些方面)
- 2024-10-27 如何设置系统防止黑客入侵(怎样设置系统防止黑客攻击)
- 2024-10-27 黑客常见攻击方式之端口攻击(黑客如何通过端口攻击电脑)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)