:三菱QnA PLC接入以太網(wǎng)與Modbus TCP通信配置)
簡介手冊圍繞無錫北辰BCNet-QnA以太網(wǎng)通信處理器展開面向需要實現(xiàn)三菱QnA系列PLC設(shè)備信息化改造的電氣與自動化工程師詳細(xì)說明如何通過該模塊將PLC編程口接入以太網(wǎng)以低成本滿足生產(chǎn)監(jiān)控、數(shù)據(jù)采集及遠(yuǎn)程維護(hù)需求。資源共1個PDF文件壓縮包大小2.55MB內(nèi)容按章節(jié)組織涵蓋產(chǎn)品概述、功能應(yīng)用、硬件接口、指示燈說明、快速起步等模塊便于對照查閱。已有692人下載學(xué)習(xí)是現(xiàn)場常用的參考資料。讀者可借此掌握BCNet-QnA的安裝接線、Web參數(shù)配置以及MELSOFT、MC3E幀、ModbusTCP和OPC等多種通信方式的啟用方法手冊還介紹了與組態(tài)王、KepWare OPC等上位機(jī)軟件集成、實現(xiàn)程序上下載與運(yùn)行監(jiān)視的典型應(yīng)用對構(gòu)建SCADA系統(tǒng)和遠(yuǎn)程設(shè)備維護(hù)均有直接參考價值。1. 把 QnA 老 PLC 拉進(jìn)以太網(wǎng)BCNet-QnA 到底是個什么角色如果你是干設(shè)備數(shù)據(jù)采集或者產(chǎn)線改造的工程師大概率遇到過這種局面現(xiàn)場用的還是三菱 QnA 系列的 PLCCPU 本體不帶以太網(wǎng)口上位機(jī)要讀數(shù)據(jù)只能走串口要不加一塊昂貴的以太網(wǎng)模塊要不就用 USB-RS422 線在現(xiàn)場蹲著。BCNet-QnA 就是針對這個場景做的一只“外置網(wǎng)卡”它插在 PLC 的編程口上把串行協(xié)議翻譯成以太網(wǎng)報文讓上位機(jī)可以用 Modbus TCP 或 MC 協(xié)議直接讀寫軟元件。你不需要改 PLC 程序不需要動原有控制邏輯模塊相當(dāng)于在編程口和交換機(jī)之間加了一個透明的協(xié)議轉(zhuǎn)換層。這篇文章要講的就是拿到這塊模塊之后怎么選型、接線、配置、調(diào)通上位機(jī)通信以及那些手冊里不會明寫、但現(xiàn)場遲早會撞上的坑。2. 認(rèn)識 BCNet-QnA 的硬件接口、指示燈和撥碼開關(guān)是先決條件2.1 模塊側(cè)面那幾個口分別接什么BCNet-QnA 的外觀通常是一個帶導(dǎo)軌卡扣的塑殼小盒子體積和一個巴掌差不多大。它最核心的接口有三個靠近 PLC 一側(cè)的串口連接 QnA CPU 的編程口常見是圓頭或 DB25具體隨型號配線不同而有差異、另一側(cè)的 RJ45 網(wǎng)口、以及一組供電端子。供電一般支持 DC 9 到 24V現(xiàn)場最常見的就是拿一個 24V 開關(guān)電源引兩條線過來。模塊上還有指示燈至少能看到電源燈和通信狀態(tài)燈有的型號還帶以太網(wǎng)鏈接狀態(tài)燈。我第一次用這模塊的時候沒看燈的說明結(jié)果把調(diào)試口接成了網(wǎng)口指示燈一臉迷惑地全亮折騰半天才發(fā)現(xiàn)是自己線插錯了位置。2.2 撥碼開關(guān)決定 IP 地址IP 查找器不是萬能的拿到的模塊默認(rèn) IP 一般是 192.168.1.x 之類的固定網(wǎng)段具體值要看標(biāo)簽或手冊。如果你要改 IP常見的做法有兩種一種是模塊側(cè)面有一組撥碼開關(guān)低位撥碼直接決定 IP 地址的末段另一種是通過專用的 IP 查找工具在電腦端掃描并修改。撥碼開關(guān)這種設(shè)計在工業(yè)模塊里很常見好處是不用裝軟件就能改地址壞處是容易撥錯位?,F(xiàn)場最容易出現(xiàn)的情況是模塊插上電電腦用 IP 查找器掃了半天掃不到查來查去最后發(fā)現(xiàn)是撥碼開關(guān)把網(wǎng)段撥到了別的段電腦和模塊不在一個網(wǎng)段當(dāng)然掃不到。我自己的習(xí)慣是收到模塊后第一件事斷電把撥碼狀態(tài)撥到和電腦同一個網(wǎng)段對應(yīng)的位置上電后再用查找器確認(rèn)一次記錄下出廠 IP 和當(dāng)前 IP貼條寫在外殼上。2.3 恢復(fù)出廠和固件升級換模塊時的后悔藥模塊側(cè)面一般會有復(fù)位孔或恢復(fù)出廠設(shè)置按鈕說明書里會寫怎么操作。恢復(fù)出廠設(shè)置會把 IP、站號、波特率這些全部回到默認(rèn)值。如果是固件升級一般是通過網(wǎng)口進(jìn) Web 配置頁面或者專用工具來刷固件。需要特別注意固件升級過程中絕對不能斷電否則模塊可能變成磚?,F(xiàn)場換模塊的時候如果你之前保存過配置文件新模塊直接導(dǎo)入設(shè)置就行比從頭配置省很多事。配置文件建議維護(hù)工程師在調(diào)試通過后第一時間導(dǎo)出備份這比貼紙條管用得多。3. 把 BCNet-QnA 接進(jìn) QnA 系統(tǒng)布線、串口參數(shù)和與 PLC 的首次握手3.1 接線階段的幾個硬要求電源、編程口轉(zhuǎn)接線和地線給模塊供電之前先確認(rèn)電壓極性電源端子上面有標(biāo) 24V 和 GND接反了輕則不工作重則燒內(nèi)部保護(hù)元件這個真不是嚇唬人。常見做法是用 PLC 旁邊的 24V 開關(guān)電源取電但要注意這路輸出有沒有被其他負(fù)載占滿模塊的工作電流不大但如果現(xiàn)場電源紋波很大還是建議單獨(dú)拿一路出來供電。串口側(cè)要用模塊自帶的編程口轉(zhuǎn)接線一頭插 PLC 編程口一頭插模塊串口。轉(zhuǎn)接線不是普通的串口延長線里面是做過針腳定義的用錯了針腳定義會出現(xiàn)通信超時。接好線后如果 PLC 是已經(jīng)跑著的模塊插上就能從編程口取到信號但有些老款 CPU 的編程口協(xié)議是要在 PLC 側(cè)做使能的這點(diǎn)可以看 CPU 的手冊確認(rèn)但大部分 QnA 系列默認(rèn)是開放的。3.2 串口參數(shù)波特率、協(xié)議模式和站號要對齊BCNet-QnA 作為協(xié)議轉(zhuǎn)換模塊串口側(cè)要和 PLC 的編程口通信PLC 編程口波特率一般是由 PLC 參數(shù)決定的。模塊側(cè)也有對應(yīng)的波特率設(shè)置。常見做法是模塊出廠默認(rèn)和 QnA 編程口默認(rèn)一致但如果你不知道當(dāng)前 PLC 編程口被改過什么參數(shù)最穩(wěn)妥的辦法是用編程線連一次 PLC讀一下 PLC 參數(shù)里的通信設(shè)置。另外協(xié)議模式要選對QnA 系列和 A 系列的編程口協(xié)議有一些區(qū)別手冊里會提示你選 QnA 模式還是兼容模式選錯了模塊能看到數(shù)據(jù)但解析會出問題。站號也一樣單機(jī)直連時站號通常設(shè)置成 0 或 1 問題不大但如果你打算并聯(lián)多臺 PLC每臺模塊的站號必須唯一。表BCNet-QnA 串口側(cè)參數(shù)與 PLC 側(cè)參數(shù)對照參數(shù)項PLC 側(cè)QnA 編程口默認(rèn)模塊側(cè)推薦設(shè)置說明波特率9600/19200 等與 PLC 側(cè)一致不一致會大量通信超時協(xié)議模式QnA 協(xié)議QnA 模式選錯會出現(xiàn)幀錯誤數(shù)據(jù)位/停止位8/1 等與 PLC 側(cè)一致一般跟隨默認(rèn)即可站號CPU 站號與 PLC 站號一致多站并聯(lián)時必須唯一3.3 用編程軟件走一遍在線直讀驗證模塊對 PLC 是透明的配置完參數(shù)、連好網(wǎng)線之后下一步要先做一次“模塊透明性檢驗”把電腦接到交換機(jī)上用 GX Developer 或 GX Works2 新建一個工程通信設(shè)置里選擇以太網(wǎng)連接填上模塊的 IP 地址然后嘗試上載 PLC 程序。如果能把程序讀上來說明模塊的串口側(cè)和 PLC 的編程口已經(jīng)打通了相當(dāng)于模塊已經(jīng)在透明轉(zhuǎn)發(fā)編程協(xié)議這是最直接的驗證方法。讀上來的過程中你可以觀察模塊的通信指示燈是不是在閃爍。如果閃爍頻率很密集說明數(shù)據(jù)在走如果燈根本不亮大概率是串口沒通回到 3.1 和 3.2 去排查接線和參數(shù)。編程軟件直讀成功之后上位機(jī)的采集就好辦了。4. 上位機(jī)通信實操M(fèi)odbus TCP 映射和用 Python 驗證讀寫4.1 學(xué)會看軟元件映射表D 寄存器、M 繼電器怎么對應(yīng) Modbus 地址BCNet-QnA 上電以后它自己相當(dāng)于一個 Modbus TCP 從站設(shè)備。上位機(jī)發(fā) Modbus 請求模塊把請求翻譯成 QnA 協(xié)議去讀寫 PLC 的軟元件。這是這個模塊最實用的地方因為上位機(jī)組態(tài)軟件一般自帶 Modbus TCP 驅(qū)動你不需要專門去寫 MC 協(xié)議底層。但問題是每個軟元件要映射到 Modbus 地址的哪個區(qū)間必須查模塊手冊里的映射表。常見做法是 D 寄存器映射到保持寄存器區(qū)也就是 4xxxx 區(qū)間M 繼電器映射到線圈區(qū)X 輸入和 Y 輸出映射到離散輸入和線圈區(qū)。偏移地址的起點(diǎn)是多少、是按字還是按位編址不同廠商模塊的約定有差異這一點(diǎn)上偷懶不看手冊純靠猜十有八九要翻車。我見過有人把 D100 當(dāng)成 Modbus 地址 100 來讀結(jié)果數(shù)據(jù)全是亂的后來對著手冊才發(fā)現(xiàn)地址要加偏移。表BCNet-QnA 常見的軟元件映射參考具體偏移以手冊為準(zhǔn)PLC 軟元件Modbus 功能碼Modbus 地址區(qū)間說明D 寄存器03 讀保持寄存器 / 06 寫單個寄存器04xxxx 區(qū)域按具體偏移規(guī)則掉電保持型寄存器要注意寫入影響M 繼電器01 讀線圈 / 05 寫單個線圈0xxxx 區(qū)域?qū)懢€圈注意置位/復(fù)位語義X 輸入02 讀離散輸入1xxxx 區(qū)域只讀Y 輸出01 讀線圈 / 05 寫線圈0xxxx 區(qū)域可寫但會影響控制邏輯4.2 用 Python 快速驗證腳本、報文和超時參數(shù)設(shè)置拿到模塊并連上 PLC 之后我建議先用一個十幾行的 Python 腳本驗證通信比直接在組態(tài)軟件里配半天更快暴露問題。下面是我常用的測試方法基于 pyModbus 庫。from pymodbus.client import ModbusTcpClient PLC_IP 192.168.1.10 # BCNet-QnA 模塊的 IP 地址 PLC_PORT 502 # Modbus TCP 默認(rèn)端口 UNIT_ID 0 # 模塊設(shè)置的站號通常填 0 或 1 client ModbusTcpClient(PLC_IP, portPLC_PORT, timeout1) client.close() # 先斷開便于逐條測試 client ModbusTcpClient(PLC_IP, portPLC_PORT, timeout1) if not client.connect(): print(連接失敗檢查 IP 和網(wǎng)線) else: # 讀 D100 開始的 10 個保持寄存器 resp client.read_holding_registers(100, 10, unitUNIT_ID) if not resp.isError(): print(D100~D109 的值:, resp.registers) else: print(讀取出錯,, resp) # 寫 D200 為 1234 wr client.write_register(200, 1234, unitUNIT_ID) print(寫入指令已發(fā)送,, wr) client.close()這段腳本的邏輯是先創(chuàng)建一個 Modbus TCP 客戶端指定模塊的 IP 和端口然后發(fā)起保持寄存器讀取請求。讀的功能碼是 03對應(yīng)上面的映射表地址 100 是映射關(guān)系中的偏移地址具體對應(yīng) PLC 是 D 多少要查模塊手冊。timeout 參數(shù)建議不要設(shè)得太短模塊內(nèi)部要做協(xié)議轉(zhuǎn)換響應(yīng)時間比直接連 PLC 的網(wǎng)口模塊要慢一些設(shè)為 1 秒比較穩(wěn)。寫寄存器用 06 功能碼注意這里只能寫單個寄存器批量寫要用寫多個寄存器功能碼。另外 unit ID 必須和模塊上設(shè)置的站號一致如果模塊站號是 0 而這里填 1很多從站會直接忽略請求表現(xiàn)出來就是超時無響應(yīng)。4.3 如果不用 ModbusQnA MC 協(xié)議的報文頭結(jié)構(gòu)也可以自己拼有些上位機(jī)不走 Modbus而是要直接走三菱 MC 協(xié)議尤其是對接某些老系統(tǒng)的時候。這種情況下你需要知道 MC 協(xié)議的報文結(jié)構(gòu)幀頭、網(wǎng)絡(luò)號、PC 號、站號、命令、子命令、起始軟元件地址和軟元件點(diǎn)數(shù)。這些字段在模塊的手冊里有詳細(xì)說明模塊只負(fù)責(zé)透傳這些幀到 PLC 側(cè)并返回響應(yīng)。如果你要自己拼報文建議先用抓包軟件看一次模塊和上位機(jī)的完整對話搞清楚響應(yīng)幀的每個字節(jié)含義再在自己的程序里按幀格式組包。這個方案比 Modbus 更底層一些調(diào)試起來也更費(fèi)勁但很多時候老系統(tǒng)只認(rèn)這種協(xié)議你只能順著它來。5. BCNet-QnA 避坑指南五個真實踩坑記錄5.1 IP 查找器掃不到設(shè)備PING 也 PING 不通現(xiàn)象模塊上電網(wǎng)線插好電腦和模塊直連IP 查找器界面是空的PING 模塊 IP 提示超時。原因有三個排查方向一是電腦網(wǎng)卡沒找到網(wǎng)段手動設(shè)一個同段地址即可二是撥碼開關(guān)把模塊 IP 地址設(shè)到了別的網(wǎng)段三是網(wǎng)線本身故障有些現(xiàn)場網(wǎng)線水晶頭壓得不好插上去燈亮但鏈路不穩(wěn)。解決先用一根已知完好的網(wǎng)線直連把電腦網(wǎng)卡 IP 手動設(shè)為模塊同網(wǎng)段如 192.168.1.100確認(rèn)物理鏈路后再試 IP 查找器。如果還不行看模塊供電指示燈是否正常不正常就量電源電壓。做過這四步還掃不到再考慮恢復(fù)出廠設(shè)置。這個流程基本能覆蓋九成找不到設(shè)備的情況。5.2 Modbus 能讀但寫入沒反應(yīng)現(xiàn)象上位機(jī)正常讀取 D 寄存器數(shù)據(jù)顯示和 PLC 實際值一致但一旦寫入某個寄存器PLC 里的值完全不變也不報錯。原因一般有三種一是寫入的地址雖然沒報錯但不在映射表對應(yīng)的可寫區(qū)間模塊把這次寫入解析到了保留地址上二是 PLC 里對應(yīng)軟元件是只讀的比如某些特殊功能寄存器三是使用的是 06 功能碼寫單個寄存器但目標(biāo)寄存器在映射表里需要按 16 功能碼才能正常寫入。解決對照手冊查地址映射表確認(rèn)目標(biāo)地址的對應(yīng)關(guān)系把寫單個改成寫多個功能碼再試一次同時用編程軟件打開實時監(jiān)控看一眼 PLC 側(cè)的軟元件值是否變化。如果還是不行用抓包軟件看模塊返回的響應(yīng)幀里有沒有異常碼這是判斷問題出在模塊還是出在 PLC 側(cè)的最直接手段。5.3 通信時通時斷丟包到讓人懷疑人生現(xiàn)象上位機(jī)輪詢一段時間后會間歇性無響應(yīng)重連之后又恢復(fù)抓包發(fā)現(xiàn)有的請求幀根本沒被模塊響應(yīng)。排查下來的高概率原因有四個供電電壓不穩(wěn)定、網(wǎng)線質(zhì)量差或水晶頭接觸不良、交換機(jī)端口協(xié)商問題、模塊串口側(cè)和 PLC 通信偶發(fā)超時導(dǎo)致狀態(tài)機(jī)卡住。解決電源單獨(dú)拉一路有萬用表就實測模塊供電端子電壓換屏蔽網(wǎng)線并重新壓水晶頭交換機(jī)端口強(qiáng)制百兆全雙工把上位機(jī)的請求間隔調(diào)大比如從 50ms 改到 200ms。工業(yè)以太網(wǎng)上寧可慢一點(diǎn)也要穩(wěn)輪詢間隔太激進(jìn)很容易把模塊的狀態(tài)機(jī)推到異常狀態(tài)這跟上位機(jī)往 PLC 里塞太多請求導(dǎo)致通信擁堵是一個道理。5.4 接上模塊之后PLC 的編程下載變慢或干脆連不上現(xiàn)象模塊已經(jīng)正常接入了上位機(jī)也能采集數(shù)據(jù)了但工程師再用編程軟件連 PLC 在線時程序上載偶爾中斷下載程序時多次超時。原因在于模塊是插在編程口上的PLC 的編程口同時服務(wù)模塊透傳和真正的編程器訪問兩者在搶通信資源。如果上位機(jī)的輪詢周期非常短編程口就一直被占用編程軟件自然擠不進(jìn)去。解決調(diào)試程序的時候暫時關(guān)掉上位機(jī)的輪詢或者把采集服務(wù)停掉如果是兩班倒產(chǎn)線不能停把輪詢周期拉長到 500ms 以上給編程通信留窗口。這個現(xiàn)象不是模塊壞了是資源爭用理解了這一點(diǎn)就不會白折騰半天找網(wǎng)絡(luò)原因。5.5 多臺并聯(lián)時站號設(shè)重數(shù)據(jù)互相串現(xiàn)象產(chǎn)線上并聯(lián)了幾臺 BCNet-QnA上位機(jī)按不同 IP 分別輪詢結(jié)果 A 站讀上來的數(shù)據(jù)偶爾是 B 站的而且偶爾還全部超時。原因兩臺模塊的站號被設(shè)成了同一個值上位機(jī)請求 A 時兩個模塊都認(rèn)為自己該響應(yīng)結(jié)果是沖突的報文回復(fù)把通信攪亂了。解決給每臺模塊做一個編號表在模塊配置里寫入唯一的站號同時把 PLC 的實際站號核對一遍確保模塊站號、上位機(jī)請求的 unit ID、PLC 站號三者一致。多臺并聯(lián)的時候建議在標(biāo)注標(biāo)簽上寫明 IP、站號、對應(yīng) PLC 設(shè)備名這個習(xí)慣能省下大量排查時間。6. 把 BCNet-QnA 用得更穩(wěn)輪詢節(jié)奏、抓包驗證和固件備份6.1 輪詢周期與超時參數(shù)怎么搭配更合理模塊做協(xié)議轉(zhuǎn)換是有內(nèi)部處理時間的不是 PLC 直接響應(yīng)以太網(wǎng)報文。所以上位機(jī)輪詢周期低于 100ms 時很容易把模塊的通信緩沖占滿。我一般建議在項目里把這些參數(shù)作為一個模板固定下來輪詢周期不低于 200ms超時時間設(shè)在 500ms 到 1 秒之間連續(xù)失敗 3 次才判定通信中斷。這樣設(shè)置的邏輯是QnA 老 PLC 本身掃描周期就在幾十毫秒量級網(wǎng)絡(luò)采集并不需要微妙級響應(yīng)速度穩(wěn)定比速度重要得多。表Modbus TCP 輪詢參數(shù)推薦模板參數(shù)項推薦值說明輪詢周期≥200ms給模塊留足協(xié)議轉(zhuǎn)換時間請求超時500ms~1s避免偶發(fā)慢響應(yīng)導(dǎo)致誤判連續(xù)失敗判定閾值3 次過濾瞬時抖動單包讀取寄存器數(shù)≤60 個字減少大包被交換機(jī)丟棄的概率6.2 用抓包驗證模塊的真實響應(yīng)時間如果你對現(xiàn)場通信質(zhì)量有疑慮抓包是最直接的驗證手段。在電腦上裝 Wireshark過濾器寫tcp.port 502然后觸發(fā)一次上位機(jī)讀操作??纯蛻舳税l(fā)出請求到收到響應(yīng)之間的時間差這個時間差就是模塊的實際響應(yīng)時間。如果平均在 20ms 到 50ms說明模塊和 PLC 之間通信很健康如果經(jīng)常跑到 200ms 以上就要檢查串口側(cè)通信是否偶發(fā)重傳。抓包還能看出來是否有多臺設(shè)備在同時響應(yīng)同一個 unit ID這能幫你快速確認(rèn)站號沖突的問題。6.3 固件與配置備份換模塊不焦慮模塊調(diào)試通過之后一定先把配置導(dǎo)出到本地文件。不同型號的導(dǎo)出方式不同有的是 Web 頁面下載有的是專用工具備份。換模塊的時候把備份文件導(dǎo)入新模塊再核對一遍 IP 和站號基本就能直接上線。我自己吃過虧一臺模塊運(yùn)行兩年后壞了換備件時才發(fā)現(xiàn)當(dāng)時的 IP 和站號沒有記錄翻遍手機(jī)的現(xiàn)場照片才找到一張帶標(biāo)簽的模糊截圖。后來凡是經(jīng)手這類協(xié)議轉(zhuǎn)換模塊我都要求現(xiàn)場必須做配置備份并把設(shè)備標(biāo)簽貼在模塊側(cè)面。這是最土但最管用的習(xí)慣。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取