http://m.henanjusheng.com 2026-07-21 10:24 廣州市微嵌計算機科技有限公司
做工業(yè)自動化的,遲早會遇到一個需求:把PLC里的數(shù)據(jù)讀到工控機上,或者反過來從工控機寫數(shù)據(jù)到PLC。
這個需求看著簡單,但方案選錯了,后面維護起來特別痛苦。通信不穩(wěn)定、數(shù)據(jù)延遲高、不同品牌PLC要寫不同驅(qū)動、現(xiàn)場加一臺設(shè)備就要改一次程序。這些問題在項目初期都看不出來,等系統(tǒng)跑起來才發(fā)現(xiàn)全是坑。
今天就把目前主流的三種PLC與工控機數(shù)據(jù)交互方案掰開揉碎了對比一下,看完你大概就知道自己的項目該選哪種了。
## 方案一:OPC UA
OPC UA現(xiàn)在幾乎是工業(yè)通信的"標準答案"了。西門子、羅克韋爾、三菱、施耐德,主流PLC品牌基本都支持。
**工作原理:** PLC端跑一個OPC UA Server,暴露數(shù)據(jù)點。工控機端跑一個OPC UA Client,訂閱需要的數(shù)據(jù)點。Server在數(shù)據(jù)變化時主動推送給Client,不需要Client輪詢。
**優(yōu)勢:**
跨品牌兼容是最大的賣點。不管你底下用的是西門子S7-1500還是羅克韋爾CompactLogix,OPC UA對外暴露的接口是統(tǒng)一的。工控機端的程序不需要針對不同品牌寫不同驅(qū)動。
安全機制完善。OPC UA支持用戶認證、加密傳輸、簽名校驗。工業(yè)網(wǎng)絡(luò)安全這塊,OPC UA是目前做得最好的協(xié)議。
數(shù)據(jù)模型豐富。OPC UA不光傳數(shù)據(jù),還傳數(shù)據(jù)的語義信息。一個溫度值,OPC UA告訴你它叫"反應(yīng)釜溫度",單位是攝氏度,量程是多少??蛻舳瞬挥糜簿幋a這些信息。
**劣勢:**
實現(xiàn)復(fù)雜。PLC端配OPC UA Server不簡單,要定義節(jié)點、配置地址映射、設(shè)置安全策略。工控機端也要找靠譜的OPC UA客戶端庫,開源的有些坑不少。
資源占用大。OPC UA協(xié)議棧比較重,對PLC的CPU和內(nèi)存有要求。低端PLC跑不動OPC UA Server,或者只能跑簡化版。
延遲方面,OPC UA在正常情況下延遲可以控制在幾十毫秒。但如果數(shù)據(jù)量大,訂閱的點位多,服務(wù)端的處理能力會成瓶頸。我測過西門子S7-1500,2000個點的情況下,數(shù)據(jù)更新延遲大概50到100毫秒。
**適用場景:** 多品牌PLC混用、對安全性要求高、需要標準化數(shù)據(jù)模型的中大型項目。
## 方案二:Modbus TCP
Modbus是最老牌的工業(yè)通信協(xié)議了,雖然年頭長,但到現(xiàn)在還是用得最多的協(xié)議之一。
**工作原理:** 工控機作為Master,PLC作為Slave。Master發(fā)請求讀取或?qū)懭霐?shù)據(jù),Slave回應(yīng)。本質(zhì)上是一個請求-應(yīng)答模式。
**優(yōu)勢:**
簡單。Modbus協(xié)議本身極其簡單,幾十行代碼就能實現(xiàn)一個基本的通信功能。網(wǎng)上各種語言的Modbus庫滿天飛,隨便找一個就能用。
幾乎所有設(shè)備都支持。PLC、變頻器、儀表、網(wǎng)關(guān),不支持Modbus的工業(yè)設(shè)備幾乎找不到。而且Modbus TCP走以太網(wǎng),不需要額外的通信模塊。
資源占用小。Modbus協(xié)議幀開銷很小,對PLC性能幾乎沒要求。最便宜的小PLC也能跑。
**劣勢:**
輪詢模式是最大的痛點。Modbus是Master主動請求,Slave被動回應(yīng)。你想知道某個寄存器變了沒有,只能不停地去讀它。1秒讀一次?那變化到讀取之間最壞就有1秒延遲。想快點?10毫秒讀一次?那你每秒要發(fā)100個請求,PLC的連接數(shù)和處理能力扛不住。
不支持事件通知。Slave端數(shù)據(jù)變了不會主動告訴你,你只能盲輪詢。
安全基本沒有。Modbus協(xié)議本身不帶任何認證和加密。在工業(yè)內(nèi)網(wǎng)里用用還行,一旦暴露到外網(wǎng)就是裸奔。
跨品牌也不完全兼容。雖然協(xié)議標準是統(tǒng)一的,但不同品牌PLC的寄存器地址映射不同。西門子的VW100和施耐德的MW100,地址一樣但含義可能完全不同。換PLC就得改映射表。
**適用場景:** 單一品牌PLC、數(shù)據(jù)量不大、對延遲要求不高、快速開發(fā)驗證的小型項目。
## 方案三:MQTT
MQTT本來是物聯(lián)網(wǎng)協(xié)議,但這兩年在工業(yè)領(lǐng)域用得越來越多。
**工作原理:** PLC端或者邊緣網(wǎng)關(guān)作為MQTT Publisher,把數(shù)據(jù)發(fā)布到MQTT Broker。工控機作為Subscriber訂閱感興趣的主題。Broker負責消息路由。
**優(yōu)勢:**
發(fā)布訂閱模式天然支持事件驅(qū)動。數(shù)據(jù)變了才發(fā),不輪詢,網(wǎng)絡(luò)和CPU開銷都小。這一點比Modbus強太多了。
跨網(wǎng)絡(luò)能力強。MQTT天然為不穩(wěn)定的網(wǎng)絡(luò)設(shè)計,有QoS(服務(wù)質(zhì)量)級別保證。斷線重連、消息緩存這些機制都內(nèi)置了。如果工控機部署在云端,PLC在工廠里,中間通過互聯(lián)網(wǎng)連接,MQTT是三個方案里最穩(wěn)的。
擴展性好。加一臺設(shè)備就加一個Publisher,工控機訂閱新主題就行。不用像Modbus那樣改輪詢列表,也不用像OPC UA那樣重新配置Server節(jié)點。
**劣勢:**
需要額外的Broker。你要么自己搭一個Mosquitto或者EMQX,要么用云服務(wù)。增加了一個組件就意味著多一個故障點和維護成本。
工業(yè)語義弱。MQTT只管傳輸,不管數(shù)據(jù)是什么。你發(fā)一個JSON過來,里面{"temp": 35.2},接收端不知道這個temp是哪個設(shè)備的什么溫度。語義層要自己在應(yīng)用層解決。
PLC原生支持差。大部分PLC不直接支持MQTT,需要中間加一個協(xié)議轉(zhuǎn)換網(wǎng)關(guān)。這個網(wǎng)關(guān)把PLC的Modbus或OPC UA數(shù)據(jù)轉(zhuǎn)成MQTT發(fā)出去。多一層轉(zhuǎn)換就多一層延遲和故障可能。
延遲方面,在本地局域網(wǎng)內(nèi),MQTT的延遲跟OPC UA差不多,幾十毫秒級別。但經(jīng)過Broker轉(zhuǎn)發(fā),如果Broker性能不行或者網(wǎng)絡(luò)條件差,延遲會明顯增大。
**適用場景:** 分布式部署、跨網(wǎng)絡(luò)數(shù)據(jù)采集、設(shè)備數(shù)量多且會動態(tài)增減的物聯(lián)網(wǎng)項目。
## 三種方案橫向?qū)Ρ?/p>
| 對比維度 | OPC UA | Modbus TCP | MQTT |
|---------|--------|-----------|------|
| 通信模式 | 訂閱/推送 | 輪詢/請求應(yīng)答 | 發(fā)布/訂閱 |
| 跨品牌兼容 | 好 | 一般 | 好 |
| 安全性 | 強 | 無 | 中等 |
| 實現(xiàn)復(fù)雜度 | 高 | 低 | 中 |
| 事件驅(qū)動 | 是 | 否 | 是 |
| PLC原生支持 | 中高端支持 | 幾乎全支持 | 需網(wǎng)關(guān) |
| 資源占用 | 大 | 小 | 中 |
| 典型延遲 | 50-100ms | 10-100ms(取決于輪詢間隔) | 50-200ms |
## 怎么選
說幾句實在的。
如果你的項目就一臺PLC、一臺工控機、同在一個機柜里、不需要安全認證、數(shù)據(jù)點不超過幾百個,直接用Modbus TCP。別想太多,最簡單的方案就是最好的方案。
如果你的現(xiàn)場有多個品牌的PLC,或者對數(shù)據(jù)安全性有要求,或者后期可能接入MES/SCADA系統(tǒng),選OPC UA。前期配置工作量大一點,但后面擴展和維護省心很多。
如果你的工控機不在現(xiàn)場,部署在云端或者異地,需要通過互聯(lián)網(wǎng)采集數(shù)據(jù),選MQTT。它對不穩(wěn)定網(wǎng)絡(luò)的適應(yīng)性是另外兩個比不了的。
混合方案也很常見。現(xiàn)場用OPC UA或Modbus采集PLC數(shù)據(jù),通過MQTT傳到云端。這種邊緣+云的兩層架構(gòu)在工業(yè)物聯(lián)網(wǎng)項目里越來越主流。
方案選型這東西,沒有最好只有最合適。先把需求摸清楚:幾臺設(shè)備、什么品牌、網(wǎng)絡(luò)環(huán)境怎樣、延遲要求多少、后期會不會擴展。這些問題想明白了,選哪個方案其實不難。