Linux システムのシリアル ポートからデータを取得し、それを TCP/IP に変換してサーバーに送信する必要があります。これは難しいですか?基本的なプログラミングの経験はありますが、Linux の経験はあまりありません。これを行うオープンソースアプリケーションはありますか?
10 に答える
socatを使用して、Serial-over-LAN (SOL) 接続を作成できます。ttyS を別のマシンに「転送」するために使用できるため、ローカルのものとして表示されるか、TCP/IP ポート経由でアクセスできます。
必要なすべてのツールは、最新の Linux ディストリビューションのほとんどで既に利用可能です。
何人かが指摘しているように、netcat を介してシリアル データをパイプできます。ただし、接続があるたびに新しいインスタンスを再起動する必要があります。これを接続間で維持するには、次の構成を使用して xinetd サービスを作成できます。
service testservice
{
port = 5900
socket_type = stream
protocol = tcp
wait = yes
user = root
server = /usr/bin/netcat
server_args = "-l 5900 < /dev/ttyS0"
}
/dev/ttyS0
インターフェイスしようとしているシリアル デバイスと一致するように を変更してください。
私も同じ問題を抱えていました。
オープン ソース アプリケーションについてはよくわかりませんが、Linux 用のコマンド ライン シリアル オーバー イーサネットをテストしたところ、うまくいきました。
また、メイガーデン裁判官の指示にも感謝します。
私は数日間この問題に苦しんでいます。
私にとっての問題は、 VirtualBox /Ubuntuに端を発しています。私のマシンにはたくさんの USB シリアル ポートがあります。それらの 1 つを VM に割り当てようとすると、それらすべてが破壊されました。つまり、ホストと他の VM は USB シリアル デバイスを使用できなくなりました。
私の解決策は、たまたまクローゼットにあるネットブックにスタンドアロンのシリアル サーバーをセットアップすることです。
ser2net を試してみたところ、シリアル ポートが接続されましたが、remtty は機能しませんでした。VM でポートを tty として取得する必要があります。
socat は完全に機能しました。
ここに良い指示があります:
あなたの質問はあまり明確ではないと思います。Linux のシリアル ポートに着信するデータを取得する方法については、いくつかの回答がありますが、問題はその逆ではないでしょうか?
Linux のシリアル ポートから出てくるデータをキャッチしてサーバーに送信する必要がある場合、このLantronix gizmoのような単純なシリアル プリント サーバーから始めて、これを実行できる小さなハードウェア ギズモがいくつかあります。
いいえ、ラントロニクスとは一切関係ありません。
TCP からシリアルへの Systemd サービス
Linux マシンが systemd を実行している場合 (ほとんどの場合)、きちんとしたサービスを作成して、(USB) シリアル デバイスを TCP (telnet) 経由で利用できるようにすることができます。
セキュリティ警告: TCP 経由でシリアル デバイスを公開することは、セキュリティ リスクです。
この例では、次を使用しています。
- TCP ポート
5900
- シリアルデバイス
/dev/ttyUSB0
(2回使用) - シリアル速度
115200
Bps
以下の例でこれらを編集できます。その他のオプションについては、 sttyおよびnc (netcat)のマニュアルを確認してください。
以下のすべてのコマンドは、あなたが user であることを前提としていますroot
。実行していない場合:sudo su -
ディレクトリ/etc/systemd/system
はすでに存在している必要があります。そうでない場合、システムで Systemd が実行されていない可能性があります。
/etc/systemd/system/tcp2serial.service
次の内容でファイルを作成します。
[Unit]
Description=TCP to Serial
[Service]
TTYPath=/dev/ttyUSB0
ExecStartPre=/usr/bin/stty -F /dev/ttyUSB0 speed 115200
ExecStart=/usr/bin/nc -k -l 5900
StandardInput=tty
StandardOutput=tty
Restart=always
[Install]
WantedBy=default.target
ファイルを作成したら、実行systemctl start tcp2serial
してサービスを開始できます。
を使用して、同じネットワーク内の別の Linux コンピューターから接続できますtelnet [server] 5900
。telnet を終了するには、 Ctrl+]を押して入力しますquit
Enter
サービス ファイルを編集したら、次の 2 つのコマンドを実行します。
systemctl daemon-reload
systemctl restart tcp2serial
起動時にサービスを開始するには、次のコマンドを実行します。
systemctl enable tcp2serial