那如果要把這些裝置連上 Wi-Fi/Ethernet,按照上一集的作法,豈不是一百種通訊協議寫一百次程式?這種作法顯然會搞死人,有沒有什麼方法可以不用弄的自己雞毛鴨血?今天就來公開不用寫程式,利用 7688 直接把裝置連上 Wi-Fi/Ethernet 的秘奧義。
1. ser2net
1.1 什麼是 ser2net?
ser2net 是一個 TCP server,他會把從 TCP client 送來的資料重導到 Serial Port(如 /dev/ttyS1),從名稱也可以猜到他的用途 ser2net - serial to network:
1.2 安裝 ser2net
這次不需要再用到 7688 SDK,請照下方直接從 7688 安裝 ser2net:root@mt7688:/# opkg update root@mt7688:/# opkg install ser2net編輯 /etc/ser2net.conf,今天我們要來測試的裝置是 Fatek B1z PLC,他的通訊參數是 115200bps,parity:even,stop bit:1,data bits:7。注意下方是兩列:
5566:raw:30:/dev/ttyS1:115200 EVEN 1STOPBIT 7DATABITS LOCAL -RTSCTS (空白列)測試一下,-d 代表以 debug mode 執行:
以 Windows telnet client 測試是否連線成功:
成功畫面:
失敗畫面:
如果測試失敗,請檢查 ser2net 顯示的錯誤訊息,或是在底下留言。
這道料理還差一味 TCP client,也就是我們下面要介紹的 com0com + com2tcp。
2. com0com
2.1 什麼是 com0com?
com0com 是個神奇的開源軟體, 他能在 Windows 上模擬出兩個不存在的 COM Port,這兩個 COM Port 就如同 Null Modem 一樣對接(下圖是簡化過的 null modem):這樣有什麼用途?等等我們就會看到
2.2 安裝 com0com
這可能是本文最麻煩的部份,因為 com0com 是 kernel mode driver,而 Windows 預設(Windows 7 之前的版本沒試過)不允許安裝沒有簽章的 driver,有三個解決方法:- 以管理者權限(Run as Administrator)打開 console,執行以下兩道指令後重開機
- bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS
- bcdedit -set TESTSIGNING ON
- 自行編譯 com0com
- 安裝有簽章過的 2.2.2
1. 會降低電腦防護,2. 太麻煩了還要去弄套開發環境,所以筆者選 3.,以筆者的環境 Windows 7 64bit 家用版來說沒什麼問題。
2.2.1 安裝步驟
Step 1.
用瀏覽器打開 https://sourceforge.net/projects/com0com/files/com0com/2.2.2.0/ ,選擇 com0com-2.2.2.0-x64-fre-signed.zip。下載解開後執行 setup.exe
Step 2.
安裝完畢後執行 Setup:將名稱修改成 COM15, COM16,如果這兩個 COM Port 在你的電腦上已經被用掉了,可以改成其他的如 COM151, COM152,只要不重複就好,但個人不建議用 COM1-COM10,因為有可能會與真的 COM Port 衝突:
打開裝置管理員檢查:
2.3 com0com 測試
打開兩個 putty,分別開啟 COM15 與 COM16,然後隨便敲擊一些字元:3. com2tcp
在 hub4com 裡有兩個 batch file:
- com2tcp.bat
- com2tcp-rfc2217.bat
這兩個批次檔會進行以下動作:
- 開啟 com0com 建立的虛擬 COM Port
- 建立 TCP client 然後連線到 TCP server(ser2net)
- 把虛擬 COM Port 取得的資料與 TCP server 交換
但這次我們不會用到 com2tcp-rfc2217.bat,前面提到的 ser2net 也支援 RFC2217,不過筆者沒有實驗成功,時好時壞,筆者研判可能是 RFC2217 內某些控制協議干擾通訊。
再說,我們希望 ser2net 從 TCP client 收到什麼資料就傳什麼給 7688 ttyS1,把傳輸效能極大化。
連線架構:
上圖中的「?」就是我們要用來測試的軟體。下面是筆者的 com2tcp.bat 測試參數:
com2tcp --ignore-dsr --baud 115200 --data 7 --parity e --stop 1 \\.\COM16 192.168.2.105 5566
見證奇蹟的時刻來臨了!
4. 測試 1: WinProLadder
WinProLadder 是 Fatek 提供給 user 編輯 Ladder 的軟件,不知道 Ladder 是什麼沒關係,結果比較重要:
Step 1.
Step 2.
Step 3.
喔喔喔!成功了,進入監控畫面!(請點圖放大)
改變狀態看看 (M0 off -> on)
成功改變 PLC 輸出!
甚至直接以 TCP 連線也行(請先關閉 com2tcp):
5. 測試 2: OPC Server
這裡使用 Kepware OPC Server 進行測試,去 Kepware 官網註冊後即可下載試用版:
(因為 Kepware 不支援 Fatek B1z,這裡改用 Mitsubishi FX1S)
各位知道這代表什麼嗎?如果 OPC server 也能這樣玩,那代表我們可以用 SCADA(例如 LabView) 搭建複雜的控制網路了!
6. 心得
看起來用這招就好了,那上一集是在騙點閱數嗎?其實這種方法有幾個缺點:
- 傳輸沒有最佳化:因為 ser2net 與 com2tcp 並不知道你在傳什麼,他們只是左手拿到資料就往右手丟,這會造成傳輸的碎片化,也有可能讓一些敏感的裝置認為兩個 byte 間的間隔太長,於是認定為 timeout。以 Modbus Ascii 為例,com2tcp 不會知道應該等看到 CR LF 再整包送出去。
- 相容性較差:筆者另外實驗了台達 HMI,北爾 PWS,力誠 HMI 的線上模擬。台達是完全不行(本來還對這個國際大廠寄予厚望),北爾時好時壞,反倒是小廠力誠居然可行,真的蠻意外的。
- 無法支援多個 TCP client:不像 Modbus Gateway 可以同時被多個 Modbus Master(TCP Client) 存取。
沒有留言:
張貼留言