31

Linux システムのシリアル ポートからデータを取得し、それを TCP/IP に変換してサーバーに送信する必要があります。これは難しいですか?基本的なプログラミングの経験はありますが、Linux の経験はあまりありません。これを行うオープンソースアプリケーションはありますか?

4

10 に答える 10

34

Linux でこれを行うためにプログラムを作成する必要はありません。netcatを介してシリアルポートをパイプするだけです:

netcat www.example.com port </dev/ttyS0 >/dev/ttyS0

アドレスとポート情報を置き換えるだけです。また、別のシリアル ポートを使用している可能性があります (つまり、/dev/ttyS0部品を変更します)。sttyまたはsetserialコマンドを使用して、シリアル ポートのパラメータ (ボー レート、パリティ、ストップ ビットなど) を変更できます。

于 2009-01-27T20:55:16.903 に答える
13

非常によく似た質問 (TCP/IP を介して Linux クライアントからサーバーのシリアル ポートを使用) を Google 検索で見つけたので、これは正確な元の質問に対する回答ではありませんが、コードの一部は元のポスターに役立つかもしれません、私は思います:

  • シリアル ポートを備えた Linux ボックスを TCP ポートでリッスンして、モデムを共有する: ser2net
  • 別の Linux ワークステーションからこの「共有」モデムを使用する: remtty
于 2009-08-10T23:41:51.160 に答える
8

socatを使用して、Serial-over-LAN (SOL) 接続を作成できます。ttyS を別のマシンに「転送」するために使用できるため、ローカルのものとして表示されるか、TCP/IP ポート経由でアクセスできます。

于 2010-07-05T06:57:51.003 に答える
6

必要なすべてのツールは、最新の 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インターフェイスしようとしているシリアル デバイスと一致するように を変更してください。

于 2014-01-29T07:56:40.527 に答える
2

私も同じ問題を抱えていました。

オープン ソース アプリケーションについてはよくわかりませんが、Linux 用のコマンド ライン シリアル オーバー イーサネットをテストしたところ、うまくいきました。

また、メイガーデン裁判官の指示にも感謝します。

于 2010-04-01T13:22:32.797 に答える
1

私は数日間この問題に苦しんでいます。

私にとっての問題は、 VirtualBox /Ubuntuに端を発しています。私のマシンにはたくさんの USB シリアル ポートがあります。それらの 1 つを VM に割り当てようとすると、それらすべてが破壊されました。つまり、ホストと他の VM は USB シリアル デバイスを使用できなくなりました。

私の解決策は、たまたまクローゼットにあるネットブックにスタンドアロンのシリアル サーバーをセットアップすることです。

ser2net を試してみたところ、シリアル ポートが接続されましたが、remtty は機能しませんでした。VM でポートを tty として取得する必要があります。

socat は完全に機能しました。

ここに良い指示があります:

socat を使用したリモート tty (TCP 経由の tty) の例

于 2011-06-16T18:58:03.750 に答える
0

あなたの質問はあまり明確ではないと思います。Linux のシリアル ポートに着信するデータを取得する方法については、いくつかの回答がありますが、問題はその逆ではないでしょうか?

Linux のシリアル ポートから出てくるデータをキャッチしてサーバーに送信する必要がある場合、このLantronix gizmoのような単純なシリアル プリント サーバーから始めて、これを実行できる小さなハードウェア ギズモがいくつかあります。

いいえ、ラントロニクスとは一切関係ありません。

于 2009-01-28T06:56:48.937 に答える
0

TCP からシリアルへの Systemd サービス

Linux マシンが systemd を実行している場合 (ほとんどの場合)、きちんとしたサービスを作成して、(USB) シリアル デバイスを TCP (telnet) 経由で利用できるようにすることができます。

セキュリティ警告: TCP 経由でシリアル デバイスを公開することは、セキュリティ リスクです。

この例では、次を使用しています。

  • TCP ポート5900
  • シリアルデバイス/dev/ttyUSB0(2回使用)
  • シリアル速度115200Bps

以下の例でこれらを編集できます。その他のオプションについては、 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
于 2022-02-18T12:32:34.667 に答える
-1

シリアル ポートからデータを取得するには、PerlまたはPythonが役立つ場合があります。サーバーにデータを送信するためのソリューションは、サーバーが (たとえば) HTTP アプリケーションまたは一般的なデータベースであれば簡単です。カスタム/独自の TCP アプリケーションの場合、ソリューションはそれほど簡単ではありません。

于 2009-01-27T20:17:08.527 に答える