上海邑斯自动化科技有限公司
2023/6/6 10:29:07在工业现场调试中,IP 地址冲突是比较常见的问题,如何及时地发现 IP 地址存在冲突并快速地定位冲突设备的位置非常重要。通常,我们可以通过专业的软件扫描出冲突的设备,例如:PRONETA、TIA 博途等。
检测 IP 冲突信息
2.1.1 TIA 博途
如下图的例子,S7-1500 控制器连接了设备名称为 “io device_2” 的ET200SP,SCALANCE XC208 交换机也作为 PN 设备连接在了主 CPU。设备都直接连在交换机,形成星型的网络。
设备的参数信息如下图:
虽然 PROFINET 通信是基于 MAC 地址收发数据,但是在通信的连接建立过程中会使用 IP 建立通信关系,因此如果 PN 设备存在 IP 冲突,不会导致 PN 通信的中断,但是如果通信断了,重新连接就会受到影响。
如下图,如果 PN 设备的 IP 地址存在冲突,TIA 博途在线检查 CPU 的诊断缓冲区,我们可以知道 ”io device_2” 的 IP 地址存在冲突,但是不能知道冲突设备的信息和位置。
2.1.2 ARP 地址表
以太网数据在交换机上的转发是依靠 MAC 地址寻址的,因此在进行 IP 通信之前,设备都会通过 ARP 协议去探测设备的 MAC 地址,形成 IP 地址和 MAC 地址的对应表,这就是我们常说的 ARP 地址表。如果 IP 地址存在冲突,就会导致 ARP 地址表不断在不同的 MAC 地址间反复切换,导致通信的失败。PC 侧可以通过指令查询 ARP 地址表,如下图。
SIMATIC PLC 作为一个标准的以太网设备,同样存在 ARP 地址表,通过查看 CPU 的 ARP 表内容,我们就可以知道冲突的 IP 地址设备当前的 MAC 地址是什么,这样,此时冲突的设备的 MAC 地址就无处遁形了。
因此,如果在 PLC 程序中能够获得 PLC 的 ARP 地址表信息,冲突设备的 MAC 地址就知道了。借助 SNMP 的程序块,CPU 可以获得所有这些信息,只需要知道查询 ARP 地址表的 OID 即可。
注意,CPU 本体的以太网接口不能通过 SNMP 获得自己的信息,因此本例中,为 CPU 增加了一块 CP 卡,连接在同一网络中,通过 CP 卡 SNMP 收集 CPU 的信息。
2.1.3 SIMATIC PLC SNMP 查询ARP 地址表信息
设备的 ARP 地址表可以通用的 MIB-2 规范定义的 OID 中查询到,查询 CPU ARP 表中 IP 地址对应 MAC 地址的 OID 为:1.3.6.1.2.1.4.22.1.2.1.IP。
本例中 “io device_2” 的地址为192.168.0.1,因此在 CPU 中查询 ARP 的OID:1.3.6.1.2.1.4.22.1.2.1.192.168.0.1。
如下图,程序上分别调用“LSNMP_GET“指令,来查询 CPU 的 ARP地址表中192.168.0.1对应的 MAC 地址,返回的 MAC 地址会存储在”varBinding“ 定义好的 DB 中。注意,本例中在“connParam” 参数中定义的设备硬件标识符,应该是 CP 卡的标识符。
指令执行后,在”varBinding“ 定义好的 DB 中监控,可以看到 CPU 的 ARP 表中,192.168.0.1对应的 MAC 地址是 00.1B.1B.21.09.CD,对应上面的设备参数信息,我们可以知道当前的设备 MAC 地址就是 io device_2的 MAC 地址。
这时候,如果接入存在 IP 冲突的设备,再次查询 CPU 的 ARP 表中,192.168.0.1对应的 MAC 地址变成了是20.87.56.7F.34.8D,通过比较 MAC,可以知道 IP 地址存在冲突,冲突设备的 MAC 地址也就知道了。(注意,最好暂时移除 io device_2 去探测,如果两个设备同时存在,读到的数据有可能会反复切换,影响程序处理)。
在实际工程中,我们也对程序块做了重新的封装,方便最终的应用,如下图,简单地输入 CPU 的 IP 地址和需要查询的设备的 IP 地址,这个 IP 地址在 CPU ARP 表中的 MAC 地址就可以一目了然看到了。
2.1.4 SIMATIC PLC SNMP 定位 IP 冲突设备的位置
知道了冲突 IP 地址的 MAC 地址,下一步,我们需要根据 MAC 地址快速地定位它的位置,这就可以用到我们在《巧用SIMATIC PLC SNMP 库-判断网络拓扑》内容中介绍的通过 SNMP 查询交换机的 MAC 地址表的功能。
如下图,我们直接使用重新封装的指令块为大家展示一下效果,首先通过指令读取 CPU ARP 表中192.168.0.1的对应的 MAC 地址,然后通过读取交换机的 MAC 地址表来获得设备连接在哪个端口。
正常情况下,指令执行后,就可以查询交换机 MAC 地址表,设备连接在交换机的哪个端口就知道了,下图中,读取到的192.168.0.1的 MAC 地址是00.1B.1B.21.09.CD,对照参数表知道,这个 MAC 地址就是 io device_2的 MAC 地址,连接在交换机的 P7 口。
当网络存在 IP 冲突时,我们移除 io device_2,再次指令执行后,读取到的192.168.0.1的 MAC 地址变成了20.87.56.7F.34.8D,连接在交换机的 P4 口。
这样,通过两个 SNMP 指令的配合使用,我们知道了冲突 IP 的设备的信息,并且能够快速地找到这个设备。
结语
SNMP 协议可以查询、更改网络设备的状态,不同的 MIB 库也为实际应用定义了很多有用的信息。作为最终用户,我们只要知道 OID,就可以获得这些信息,为网络的维护、诊断提供了有力的帮助。
SIMATIC PLC SNMP 库,随着版本的不断升级,性能上也有不断的提高,通过指令块的灵活使用,SIMATIC PLC 的网络通信功能如虎添翼,为自动化工程师提供了更多的网络诊断手段,我们后续也会继续开发相关的应用,扩展思路,期望能够成为大家工程中的有效工具