v2.2.0β7 から、socat を利用した TCP/UDP ↔ Serial 変換サービスを追加しました。
利用できるモードは下記となります。
/etc/default/socat ファイルを編集します。
ttyO1=yes ttyO1_MODE=SERVER ttyO1_PROTO=TCP ttyO1_LCLPORT=54321 ttyO1_DSTADDR= ttyO1_DSTPORT= ttyO1_WAIT=60 ttyO1_KEEPCNT=3 ttyO1_KEEPIDLE=30 ttyO1_KEEPINTVL=30 ttyO1_SNDTIMEO=10 ttyO1_CORK=0 ttyO1_BAUD=115200 ttyO1_CHAR=8 ttyO1_STOP=1 ttyO1_PARITY=NONE ttyO1_RTSCTS=yes ttyO1_TIME=1 ttyO1_MIN=255 #tyO1=yes|no #ttyO1_MODE=SERVER|CLIENT #ttyO1_PROTO=TCP|UDP #ttyO1_LCLPORT=54321 #ttyO1_DSTADDR= #ttyO1_DSTPORT= #ttyO1_WAIT=60 #ttyO1_KEEPCNT=3 #ttyO1_KEEPIDLE=30 #ttyO1_KEEPINTVL=30 #ttyO1_SNDTIMEO=10 #ttyO1_CORK=1|0 #ttyO1_BAUD=921600|460800|230400|115200|57600|38400|19200|9600|4800|2400|1200 #ttyO1_CHAR=8|7 #ttyO1_STOP=1|2 #ttyO1_PARITY=NONE #ttyO1_RTSCTS=yes #ttyO1_TIME=1 #ttyO1_MIN=10
各項目の設定の内容は、下表のとおりとなります(x は 0/1)。
Key | Info | Default | Notes |
---|---|---|---|
ttyOx | 使用する / しない | no | socat 機能利用有無 (yes / no) |
ttyOx_MODE | 動作モード指定 | - | SERVER / CLIENT |
ttyOx_PROTO | TCP / UDP 選択 | - | TCP / UDP |
ttyOx_LCLPORT | ローカルポート番号 | - | SERVER および CLIENT(UDP) |
ttyOx_DSTADDR | 接続先アドレス | - | CLIENT mode のみ |
ttyOx_DSTPORT | 接続先ポート番号 | - | CLIENT mode のみ |
ttyOx_WAIT | 接続失敗時 再接続待ち時間 [s] | 60 | TCP CLIENT mode のみ |
ttyOx_KEEPCNT | Keepalive count | 3 | TCP mode のみ |
ttyOx_KEEPIDLE | Keepalive send idle time [s] | 30 | TCP mode のみ |
ttyOx_KEEPINTVL | Keepalive send interval [s] | 30 | TCP mode のみ |
ttyOx_SNDTIMEO | 送信タイムアウト時間 [s] | 10 | TCP mode のみ1) |
ttyOx_CORK | socket option “TCP_CORK” 有効/無効 | 1 | TCP mode のみ |
ttyOx_BAUD | UART Baudrate | 115200 | 921600 / 460800 / 230400 / 115200 / 57600 / 38400 / 19200 / 9600 / 4800 / 2400 / 12002) |
ttyOx_CHAR | UART Character bits | 8 | 8 / 7 |
ttyOx_STOP | UART Stop bits | 1 | 1 / 2 |
ttyOx_PARITY | UART Parity | NONE | NONE / EVEN / ODD |
ttyOx_RTSCTS | UART Hardware flow control | yes | yes / no |
ttyOx_TIME | Termios option (VTIME) | 1 | |
ttyOx_MIN | Termios option (VMIN) | 10 |
Termios VTIME, VMIN について: termios.c_cc の VMIN VTIME について(メモ) - 壊れたメガネ ホッチキスの達人の意識の高いブログ。
WAIT, KEEPCNT, KEEPIDLE, KEEPINTVL, SNDTIMEO オプションは、v2.2.2α1 からのサポートとなります。
CORK オプション3)は、v2.4.3β1 からのサポートとなります。
TCP で待ち受け、シリアルポートとの間を中継するモードです。
設定が必要な項目は下記のとおりです。
Key | Value | Notes |
---|---|---|
ttyOx | yes | |
ttyOx_MODE | SERVER | |
ttyOx_PROTO | TCP | |
ttyOx_LCLPORT | ポート番号 (bind) | |
UART 関係は全て設定が必要です |
UDP で待ち受け、シリアルポートとの間を中継するモードです。
設定が必要な項目は下記のとおりです。
Key | Value | Notes |
---|---|---|
ttyOx | yes | |
ttyOx_MODE | SERVER | |
ttyOx_PROTO | UDP | |
ttyOx_LCLPORT | ポート番号 (bind) | |
UART 関係は全て設定が必要です |
指定されたアドレス:ポート番号に TCP で接続し、シリアルポートとの間を中継するモードです。
設定が必要な項目は下記のとおりです。
Key | Value | Notes |
---|---|---|
ttyOx | yes | |
ttyOx_MODE | CLIENT | |
ttyOx_PROTO | TCP | |
ttyOx_DSTADDR | 接続先アドレス | |
ttyOx_DSTPORT | 接続先ポート番号 | |
UART 関係は全て設定が必要です |
指定されたアドレス:ポート番号に UDP で接続し、シリアルポートとの間を中継するモードです。
設定が必要な項目は下記のとおりです。
Key | Value | Notes |
---|---|---|
ttyOx | yes | |
ttyOx_MODE | CLIENT | |
ttyOx_PROTO | UDP | |
ttyOx_LCLPORT | ポート番号 (bind) | 省略可 |
ttyOx_DSTADDR | 接続先アドレス | |
ttyOx_DSTPORT | 接続先ポート番号 | |
UART 関係は全て設定が必要です |
service コマンドで起動させます。次回起動時以降は、自動で起動されます。
user1@plum:~$ sudo service socat-ttyO1 start [sudo] password for user1: socat-ttyO1 start/running, process 2630 user1@plum:~$
2630 ? Ss 0:00 /bin/bash /usr/local/sbin/socat_server ttyO1 2632 ? S 0:00 \_ socat -d TCP-LISTEN:54321,reuseaddr,fork EXEC:"/usr/local/sbin/socat_child ttyO1 b115200,cs8,cstopb=0,crtscts=1,raw,echo=0,parenb=0,time=1,min=10",pty,echo=0
今回は、下記のように設定しました。
ttyO1=yes ttyO1_MODE=SERVER ttyO1_PROTO=TCP ttyO1_LCLPORT=54321 ttyO1_DSTADDR= ttyO1_DSTPORT= ttyO1_BAUD=115200 ttyO1_CHAR=8 ttyO1_STOP=1 ttyO1_PARITY=NONE ttyO1_RTSCTS=yes ttyO1_TIME=1 ttyO1_MIN=10
TCP Client mode では、socat 起動前にサーバ側が起動しているかどうかの確認を行います。
ポートが Open していない場合、Open するまでウェイトします。
Oct 28 14:24:26 plum socat_server: remote (192.168.253.49:54322) is closed. Oct 28 14:25:31 plum socat_server: remote (192.168.253.49:54322) is closed.
ポートが Open しているのを確認後、socat が起動されます。
Oct 28 14:27:36 plum socat_server: remote (192.168.253.49:54322) is OK. Oct 28 14:27:36 plum socat_server: cmdline: socat -d /dev/ttyO1,b115200,cs8,cstopb=0,crtscts=1,raw,echo=0,parenb=0,time=1,min=10 tcp:192.168.253.49:54322,keepalive,keepcnt=3,keepidle=30,keepintvl=30,setsockopt-int=6:18:10000
Kernel console および getty との衝突を避けるため、下記制限があります。
user1@plum:~$ cat /proc/cmdline ubi.mtd=0 mtdoops.mtddev=OOPS mtdoops.record_size=8192 zswap.enabled=1 root=AREA=0 console=ttyO0,115200 overlay=tmpfs overlay_driver=aufs rootdelay=1 user1@plum:~$
この例では、“ttyO0” では起動できません。
RS-232C のポートを RS-485 に変換して本機能を使う場合、この製品で動作しました4)。
1430円です。