巧用 SIMATIC PLC SNMP 庫查詢 IP 地址沖突
在工業(yè)現(xiàn)場調(diào)試中,IP 地址沖突是比較常見的問題,如何及時地發(fā)現(xiàn) IP 地址存在沖突并快速地定位沖突設備的位置非常重要。通常,我們可以通過專業(yè)的軟件掃描出沖突的設備,例如:PRONETA、TIA 博途等。
檢測 IP 沖突信息
2.1.1 TIA 博途
如下圖的例子,S7-1500 控制器連接了設備名稱為 “io device_2" 的ET200SP,SCALANCE XC208 交換機也作為 PN 設備連接在了主 CPU。設備都直接連在交換機,形成星型的網(wǎng)絡。
設備的參數(shù)信息如下圖:
雖然 PROFINET 通信是基于 MAC 地址收發(fā)數(shù)據(jù),但是在通信的連接建立過程中會使用 IP 建立通信關系,因此如果 PN 設備存在 IP 沖突,不會導致 PN 通信的中斷,但是如果通信斷了,重新連接就會受到影響。
如下圖,如果 PN 設備的 IP 地址存在沖突,TIA 博途在線檢查 CPU 的診斷緩沖區(qū),我們可以知道 "io device_2" 的 IP 地址存在沖突,但是不能知道沖突設備的信息和位置。
2.1.2 ARP 地址表
以太網(wǎng)數(shù)據(jù)在交換機上的轉發(fā)是依靠 MAC 地址尋址的,因此在進行 IP 通信之前,設備都會通過 ARP 協(xié)議去探測設備的 MAC 地址,形成 IP 地址和 MAC 地址的對應表,這就是我們常說的 ARP 地址表。如果 IP 地址存在沖突,就會導致 ARP 地址表不斷在不同的 MAC 地址間反復切換,導致通信的失敗。PC 側可以通過指令查詢 ARP 地址表,如下圖。
SIMATIC PLC 作為一個標準的以太網(wǎng)設備,同樣存在 ARP 地址表,通過查看 CPU 的 ARP 表內(nèi)容,我們就可以知道沖突的 IP 地址設備當前的 MAC 地址是什么,這樣,此時沖突的設備的 MAC 地址就無處遁形了。
因此,如果在 PLC 程序中能夠獲得 PLC 的 ARP 地址表信息,沖突設備的 MAC 地址就知道了。借助 SNMP 的程序塊,CPU 可以獲得所有這些信息,只需要知道查詢 ARP 地址表的 OID 即可。
注意,CPU 本體的以太網(wǎng)接口不能通過 SNMP 獲得自己的信息,因此本例中,為 CPU 增加了一塊 CP 卡,連接在同一網(wǎng)絡中,通過 CP 卡 SNMP 收集 CPU 的信息。
2.1.3 SIMATIC PLC SNMP 查詢ARP 地址表信息
設備的 ARP 地址表可以通用的 MIB-2 規(guī)范定義的 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。
如下圖,程序上分別調(diào)用“LSNMP_GET“指令,來查詢 CPU 的 ARP地址表中192.168.0.1對應的 MAC 地址,返回的 MAC 地址會存儲在"varBinding“ 定義好的 DB 中。注意,本例中在“connParam" 參數(shù)中定義的設備硬件標識符,應該是 CP 卡的標識符。
指令執(zhí)行后,在"varBinding“ 定義好的 DB 中監(jiān)控,可以看到 CPU 的 ARP 表中,192.168.0.1對應的 MAC 地址是 00.1B.1B.21.09.CD,對應上面的設備參數(shù)信息,我們可以知道當前的設備 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 去探測,如果兩個設備同時存在,讀到的數(shù)據(jù)有可能會反復切換,影響程序處理)。
在實際工程中,我們也對程序塊做了重新的封裝,方便最終的應用,如下圖,簡單地輸入 CPU 的 IP 地址和需要查詢的設備的 IP 地址,這個 IP 地址在 CPU ARP 表中的 MAC 地址就可以一目了然看到了。
2.1.4 SIMATIC PLC SNMP 定位 IP 沖突設備的位置
知道了沖突 IP 地址的 MAC 地址,下一步,我們需要根據(jù) MAC 地址快速地定位它的位置,這就可以用到我們在《巧用SIMATIC PLC SNMP 庫-判斷網(wǎng)絡拓撲》內(nèi)容中介紹的通過 SNMP 查詢交換機的 MAC 地址表的功能。
如下圖,我們直接使用重新封裝的指令塊為大家展示一下效果,首先通過指令讀取 CPU ARP 表中192.168.0.1的對應的 MAC 地址,然后通過讀取交換機的 MAC 地址表來獲得設備連接在哪個端口。
正常情況下,指令執(zhí)行后,就可以查詢交換機 MAC 地址表,設備連接在交換機的哪個端口就知道了,下圖中,讀取到的192.168.0.1的 MAC 地址是00.1B.1B.21.09.CD,對照參數(shù)表知道,這個 MAC 地址就是 io device_2的 MAC 地址,連接在交換機的 P7 口。
當網(wǎng)絡存在 IP 沖突時,我們移除 io device_2,再次指令執(zhí)行后,讀取到的192.168.0.1的 MAC 地址變成了20.87.56.7F.34.8D,連接在交換機的 P4 口。
這樣,通過兩個 SNMP 指令的配合使用,我們知道了沖突 IP 的設備的信息,并且能夠快速地找到這個設備。
結語
SNMP 協(xié)議可以查詢、更改網(wǎng)絡設備的狀態(tài),不同的 MIB 庫也為實際應用定義了很多有用的信息。作為最終用戶,我們只要知道 OID,就可以獲得這些信息,為網(wǎng)絡的維護、診斷提供了有力的幫助。
SIMATIC PLC SNMP 庫,隨著版本的不斷升級,性能上也有不斷的提高,通過指令塊的靈活使用,SIMATIC PLC 的網(wǎng)絡通信功能如虎添翼,為自動化工程師提供了更多的網(wǎng)絡診斷手段,我們后續(xù)也會繼續(xù)開發(fā)相關的應用,擴展思路,期望能夠成為大家工程中的有效工具