不過這些工業用產品,價格可是高的嚇人,如 MOXA 2 Serail Port Device Server 在露天拍賣的二手價是 2xxx-3xxx NTD,但 LinkIt 7688 兩千元可以買四片有找,還帶 Wi-Fi,CP 值簡直高到沒朋友!
當然這些產品的軟硬體完整度是 7688 沒法比的,不過正所謂「自己動手,豐衣足食」,讓筆者帶領大家繼續土砲 Serial to Ethernet/Wifi/Device Server,說不定這些業餘嗜好哪天會變成一門生意喔!?
1. socat
聰明的看倌們應該會發現,上次筆者介紹了 TCP Server to Serial(ser2net),但好像少了 Serial to TCP client?
這有什麼用途?例如永宏 PLC(可程式控制器) 可以經由 Serial Port 控制 Modbus RTU/ASCII device,同樣的工業人機(HMI)界面也可以透過 Serial Port 讀取各種 PLC, Meter, Remote IO...,以及各種形形色色的 Serial Device(所以才有人稱為 Serial to TCP/UDP 為 Device Server)。
那如果有了 Serial to TCP client 加上上次提到的 TCP Server to Serial,就可以實現無線自動化監控了!
從上圖得知我們還少了上圖左半邊,socat - Multipurpose relay 這隻小工具可以滿足我們的需求,也就是 Serial to TCP client,來看看怎麼做吧!
1.1 安裝 socat
7688 預設沒有安裝 socat,與 ser2net 一樣直接從 7688 下指令安裝:
1.2 socat 測試
以下命令將會開啟一個 Serial(UART1) to TCP client 通道,UART1 設定為:
- Baudrate: 115200bps
- Parity: even
- Data size: 7bits
- Stop bit: 1bit
socat /dev/ttyS1,raw,ignbrk=1,echo=0,echonl=0,opost=0,clocal=1,cread=1,crtscts=0,parenb=1,parodd=0,cstopb=0,csize=2,b115200 TCP:192.168.2.101:5566參數長到嚇死人,但有些參數是固定的,真正會需要修改的有:
- Parity
- none: parenb=0,parodd=0
- odd: parenb=1,parodd=1
- even: parenb=1,parodd=0
- Stop bit(s):
- 1 bit: cstopb=0
- 2 bits: cstopb=1
- Data size:
- 7 bits: csize=2
- 8 bits: csize=3
- Baudrate:
- b9600
- b19200
- b38400
- ...
- b115200
- TCP:IP_ADDRESS:LISTEN_PORT
這時候我們還需要一個 TCP server 協助我們測試,暫且先不用 ser2net,因為還不知道 socat 這邊有沒有正確設定,測試方式如下:
TCP server 有幾種選擇,Linux 上可以用 nc,Windows 上這裡用 MOXA PComm Lite 作為示範:
執行上面的測試命令 socat /dev/ttyS1,raw,ignbrk=1...,然後開啟 putty:
在 putty 上隨意敲擊一些字元後,應該會看到下面的畫面:
2. 綜合演練
設定步驟如下:
2.1 設定通訊參數
2.2 放置畫面元件
PLC Ladder 內容,很簡單的自保持線路,M0 = ON -> Y0 = ON,M1 = ON -> Y0 = OFF:
2.3 編譯->執行
3. 心得
socat 如果建立 TCP connection 失敗,就會直接結束程式,如果希望他 retry,請在命令最後加上 forever (socat /dev/ttyS1,raw,ignbrk=1,echo...,forever),另外如果由 TCP server 主動關閉 connection,forever 這個參數幫不上忙,不過寫點簡單的 shell script 即可解決:
#!/bin/sh #ser2tcpc.sh #!/bin/sh #ser2tcpc.sh while true; do socat /dev/ttyS1,raw,ignbrk=1,echo=0,echonl=0,opost=0,clocal=1,cread=1,crtscts=0,parenb=1,parodd=0,cstopb=0,csize=2,b115200 TCP:127.0.0.1:5566,forever done祝大家玩的愉快!
沒有留言:
張貼留言