結論
簡單粗暴來說,大致上可以分成 2 種
1. 要把 Modbus RTU/ASCII 轉成 Modbus TCP/IP,選 MGate
2. 其他的無協議串列通訊轉 Ethernet,選 NPort
* 個別專案的架構和設定,請尋求專業廠商的諮詢和建議,以免因小失大
差異
如果只是要把 Modbus RTU 的裝置要轉 Ethernet 的話,其實 NPort 和 MGate 都可以用。
MGate 會轉換 Protocol,會把 Modbus RTU 的封包格式,轉換成 Modbus TCP 的封包格式。
NPort 則是把串列的資料,整串包成符合 TCP/IP 的格式封包。以 Modbus RTU 來說,會轉換成 Modbus RTU Over TCP/IP 格式。
Modbus RTU Over TCP/IP 和 Modbus TCP/IP 的封包格式不一樣。最明顯是差異是 Modbus RTU、 有 CRC 校驗碼,Modbus TCP/IP 沒有 CRC 校驗碼。
小火龍要飛有 2 種方式。一個是進化成噴火龍,另一個是搭飛機。Modbus RTU Over TCP/IP 就是小火龍搭飛機,同樣飛起來了,但本質還是小火龍 (Modbus RTU)。
封包分析
用 Wireshark 分別監測 Modbus RTU Over TCP 和 Modbus TCP 的網路封包。
分析 Modbus TCP/IP 封包
硬體架構
操作方式
- 在 PC 上用 Radzio! Modbus Master Simulator 軟體 (設定 Modbus TCP 模式) 讀取 PLC D0 - D1 位址的數值。
- 在讀取數值的過程中,同時開啟 Wireshark 來監視網路封包。
PC 和 PLC 的參數設定
- DVP PLC
IP : 192.168.127.122
ID : 7
PORT : 502
D0 : Holding Register, Function Code 03, Address 01
D1 : Holding Register, Function Code 03, Address 02 - PC
IP : 192.168.127.15
分析 Wireshark 的封包
Wireshark 的會顯示並分類 Modbus TCP 的相關資料
[詢問] Modbus TCP/IP
07 : PLC ID
03 : Holding Register Function Code
00 00 : D0 Address
00 02 : Length (D0, D1)
*Modbus TCP 無 CRC
[回答] Modbus TCP/IP
07 : PLC ID
03 : Holding Register Function Code
04 : Length (4 Byte)
00 4C : DATA1 (D0 Value = 16#004C = 10#76)
00 01 : DATA2 (D1 Value = 16#0001 = 10#1)
*Modbus TCP 無 CRC
分析 Modbus RTU Over TCP/IP 封包
硬體架構
操作方式
- 在 PC 上用 Radzio! Modbus Master Simulator 軟體 (設定 Modbus RTU Over TCP/IP 模式) 讀取 PLC D0 - D9 位址的數值。
- 在讀取數值的過程中,同時開啟 Wireshark 來監視網路封包。
PC , NPort, PLC 的參數設定
- DVP PLC
ID : 7
Baud Rate : 9600
Data Bits : 8
Parity : NONE
Stop Bit : 1
D0 - D9 : Holding Register, Function Code 03, Address 01–09 - NPort
IP : 192.168.127.254
Operation Mode : TCP Server Mode
Local TCP Port : 4001 - PC
IP : 192.168.127.15
分析 Wireshark 的封包
Wireshark 的顯示資料如下:
[詢問] Modbus RTU Over TCP
03 : PLC ID
03 : Holding Register Function Code
00 00 : D0 Address
00 0A : Length (D0 — D9)
C4 2F : CRC
[回答] Modbus RTU Over TCP
03 : PLC ID
03 : Holding Register Function Code
14 : Length (16#14 = 10#20, 20 Byte)
25 58 : DATA1 (D0 Value = 16#2558 = 10#9560)
00 01 : DATA2 (D1 Value = 16#0001 = 10#1)
00 02 : DATA3 (D2 Value = 16#0002 = 10#2)
00 03 : DATA4 (D3 Value = 16#0003 = 10#3)
00 04 : DATA5 (D4 Value = 16#0004 = 10#4)
00 05 : DATA6 (D5 Value = 16#0005 = 10#5)
00 06 : DATA7 (D6 Value = 16#0006 = 10#6)
00 00 : DATA8 (D7 Value = 16#0000 = 10#0)
00 00 : DATA9 (D8 Value = 16#0000 = 10#0)
00 00 : DATA10 (D9 Value = 16#0000 = 10#0)
D8 73 : CRC
參考資料
MOXA Website Product FAQ
- 我能在主机上对 NPort 服务器使用 Ping 和 Telnet 命令,但 TCP 客户端程序无法连接 NPort 服务器。这是为什么?
- How can I configure my NPort 5450 to send data from its serial port 1 to serial port 2?
技術文件
- moxa-tcp-server-mode-for-nport-tech-note-v1.0
- moxa-tcp-client-mode-for-nport-tech-note-v1.0