如何通過網路為 /dev/ttyUSB0 設置“USB 代理”?
我有一個被測設備 (DUT),我使用Power Analyzer Datalogger使用來自
/dev/ttyUSB0
.問題是 DUT 現在遠離我用來收集數據的工作站,但在同一個網路中,我需要使用第二台 PC,它通過 USB 直接連接到 Power Analyzer 作為一種 USB 代理和 ssh在“代理”機器的USB測量機上創建一種符號連結。
鑑於上圖,第 1 台 PC 如何訪問直接連接
/dev/ttyUSB0
的第 2台PC,以使從第 1台PC 讀取流的程序不會注意到差異?
socat
可能在這里工作。在第二台 PC
socat
上,您可以讓監聽數據/dev/ttyUSB0
並將其提供給 tcp 埠,例如:socat /dev/ttyUSB0,raw,echo=0 tcp-listen:8888,reuseaddr
然後在第一台 PC 上,您可以使用 socat 連接到第二台 PC,並在偽終端上
/dev/ttyVUSB0
為您的應用程序提供數據:socat PTY,raw,echo=0,link=/dev/ttyVUSB0 tcp:<ip_of_pc2>:8888
這未經測試並且
socat
支持許多選項,因此可能需要進行調整。
您可以使用
ser2net
和的組合socat
。例如,我有一個機器人通過串口連接到樹莓派。樹莓派已連接到我的本地網路(相當於您的第二台 PC)。我的筆記型電腦連接到同一個本地網路(相當於您的第一台 PC)。然後我使用 ser2net 從第二台 PC 通過 TCP 轉發串口,並socat
在第一台 PC 上使用創建代理串列設備文件。此設置也可能對您有用。建議的解決方案:
第 1 步:在您的第二台 PC 上安裝 ser2net 包(按照您的圖表)
sudo apt-get install ser2net
ser2net 偵聽 TCP 埠,並能夠通過 TCP 埠將數據傳送到串列埠和從串列埠傳出。您可以通過其配置文件設置要為其創建“代理”的串列埠
/etc/ser2net.conf
。步驟 2:在第二台 PC 中配置 ser2net
例如,如果您有一個
/dev/ttyACM0
以波特率連接的設備115200
並希望從 localhost 埠 3333 為其提供服務,那麼您可以將以下行添加到/etc/ser2net.conf
3333:raw:0:/dev/ttyACM0:115200,remctl
創建配置文件後,然後通過在第二台 PC 上執行來啟動 ser2net:
ser2net
或(如果它已經在執行,那麼只需按如下方式重新啟動它)
/etc/init.d/ser2net restart
這裡的一件重要的事情是 remctl 選項。它允許客戶端(圖中的第一台 PC)連接到設備並自由選擇串列連接選項。我認為從數據收集工作區的角度來看,串列通信是完全透明的。在此處查看更多詳細資訊。
第 3 步:在數據採集工作站(第 1 台 PC)上設置代理串列設備文件
(如果你沒有socat,那麼
sudo apt-get install socat
)最後,在第一台 PC 的終端中,
socat
創建一個代理串列埠,該埠將從 tcp 埠進行偵聽:
socat pty,link=$HOME/MyProxySerialPort,waitslave tcp:$ip:$port,forever,reuseaddr,keepalive
在此範例中
ip=<2nd-PC-IP-address>
和(或您在第二台 PC 上port=3333
設置時選擇的任何位置)。/etc/ser2net.conf
第 4 步:連接到 MyProxySerialPort
現在您應該能夠正常打開與位於
$HOME/MyProxySerialPort
第一台 PC 上的設備的串列連接。此部落格文章也包含有關此設置的更多資訊:http: //techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/