Do-More 模擬器透過 Modbus TCP 與 Node-RED 整合
- 開啟 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 內安裝
node-red-contrib-modbus擴充套件。 - 拖曳 Modbus Read 或 Modbus Flex Getter 節點至畫布中。
- 雙擊節點設定 Server 參數(點擊鉛筆圖示新增 Modbus TCP 連線):
- 在讀取節點中設定對應的 FC(功能碼,例如
FC3讀取保持暫存器 MHR)與 Address / Quantity 進行數據擷取。
將 AutomationDirect Do-more PLC (透過 Do-more Designer 軟體設定) 的資料透過 Modbus TCP 輸出給 Node-RED 的 node-red-contrib-modbus 節點,最簡單的做法是將 Do-more 設定為 Modbus TCP 伺服器 (Server/Slave),而 Node-RED 作為客戶端 (Client/Master) 來主動輪詢 (Poll) 資料。
- 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"}}]


























沒有留言:
張貼留言