2026年8月8日 星期六

Do-More 模擬器透過 Modbus TCP 與 Node-RED 整合

Do-More 模擬器透過 Modbus TCP 與 Node-RED 整合

在 Do-more Designer 中設定 Modbus 伺服器
  • 開啟 Do-more Designer 專案,前往 Project -> System Configuration -> Ethernet Ports。 
  • 勾選 Modbus TCP Server,並確認監聽連接埠(Default Port)為 502 [1]
  • 確保你的 PLC 內部資料(例如 D 暫存器或 C 記憶位元)有對應對齊到 Modbus 的記憶體區塊。Do-more 內建對應的 Modbus 區域包含:
    • MHR (Modbus Holding Registers, 功能碼 FC03 / FC06 / FC16)
    • MC (Modbus Coils, 功能碼 FC01 / FC05 / FC15)
    • MIR (Modbus Input Registers, 功能碼 FC04)
    • MI (Modbus Inputs, 功能碼 FC02) 
在 Node-RED 中設定 Modbus 節點
  • 在 Node-RED 內安裝 node-red-contrib-modbus 擴充套件。 
  • 拖曳 Modbus ReadModbus Flex Getter 節點至畫布中。 
  • 雙擊節點設定 Server 參數(點擊鉛筆圖示新增 Modbus TCP 連線):
    • Type: Modbus TCP
    • Host: 輸入你的 Do-more PLC 的 IP 位址
    • Port: 502
    • Unit-ID: 通常設為 1 (或對應 PLC 設定) [1, 2]
  • 在讀取節點中設定對應的 FC(功能碼,例如 FC3 讀取保持暫存器 MHR)與 Address / Quantity 進行數據擷取。  

 


將 AutomationDirect Do-more PLC (透過 Do-more Designer 軟體設定) 的資料透過 Modbus TCP 輸出給 Node-REDnode-red-contrib-modbus 節點,最簡單的做法是將 Do-more 設定為 Modbus TCP 伺服器 (Server/Slave),而 Node-RED 作為客戶端 (Client/Master) 來主動輪詢 (Poll) 資料


























1-Based 與 0-Based 的位址位移 (Offset)
  • Do-more 內部與某些傳統 PLC 說明書會使用 1-based 定址(例如將 MHR0 稱為 40001)。
  • Node-RED 預設使用 0-based 定址。因此在 Node-RED 的 Address 欄位中,請直接輸入 0 來代表第一個暫存器,不需要加上 40001。
  • 如果發現讀出來的資料錯位了一個位置(例如讀 MHR1 卻讀到 MHR0),請嘗試將 Node-RED 的 Address 加 1 或減 1


node-red程式

[{"id":"281052bfc8430391","type":"modbus-read","z":"940df9f68ff5f5f7","name":"","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"showWarnings":true,"unitid":"255","dataType":"Coil","adr":"0","quantity":"8","rate":"3000","rateUnit":"ms","delayOnStart":false,"enableDeformedMessages":false,"startDelayTime":"","server":"03e72e7fd9537ba2","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"x":390,"y":440,"wires":[["01a0a871b0013f8d"],[]]},{"id":"01a0a871b0013f8d","type":"debug","z":"940df9f68ff5f5f7","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":580,"y":380,"wires":[]},{"id":"72834d90122f8f0c","type":"modbus-read","z":"940df9f68ff5f5f7","name":"","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"showWarnings":true,"unitid":"255","dataType":"HoldingRegister","adr":"0","quantity":"8","rate":"3000","rateUnit":"ms","delayOnStart":false,"enableDeformedMessages":false,"startDelayTime":"","server":"03e72e7fd9537ba2","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"x":390,"y":320,"wires":[["01a0a871b0013f8d"],[]]},{"id":"03e72e7fd9537ba2","type":"modbus-client","name":"modbus-Do-more","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"failureLogEnabled":true,"tcpHost":"127.0.0.1","tcpPort":502,"tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":9600,"serialDatabits":8,"serialStopbits":1,"serialParity":"none","serialConnectionDelay":100,"serialAsciiResponseStartDelimiter":"0x3A","unit_id":255,"commandDelay":1,"clientTimeout":1000,"reconnectOnTimeout":true,"reconnectTimeout":2000,"parallelUnitIdsAllowed":true,"showErrors":false,"showWarnings":true,"showLogs":true},{"id":"b27db4c7f57e309d","type":"global-config","env":[],"modules":{"node-red-contrib-modbus":"5.60.1"}}]

沒有留言:

張貼留言

Node-RED 寫入到 Do-more PLC

Node-RED 寫入到 Do-more PLC 要將資料從 Node-RED 寫入到 Do-more PLC ,最標準且穩定的做法是讓 Node-RED 扮演 Modbus TCP 客戶端(Client),使用 modbus-write 節點,將資料寫入 Do-more ...