web-dev-qa-db-ja.com

Linux環境でシリアルポートデータをTCP / IPに変換する

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

27
Doug

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

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

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

29
Judge Maygarden

私は非常によく似たものをGoogleで検索してこの質問に出くわしました(Linuxクライアントからサーバー上のシリアルポートをTCP/IP経由で使用する)ので、これは正確な元の質問に対する答えではありませんが、オリジナルのポスターに役立つかもしれません、私は思う:

  • シリアルポートを持つLinuxボックスをTCPポートでリッスンし、モデムを共有する: ser2net
  • 別のLinuxワークステーションからこの「共有」モデムを使用する: remtty
10
Andrew Y

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

8
Indie

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

4
Dwight Spencer

Netcatでサーバーのポートを開き、リスニングを開始します。

nc -lvp port number

そして、シリアルポートを読んでいるマシンで、rootとしてnetcatで送信します:

nc <IP address> portnumber < /dev/ttyACM0

サーバーにデータを保存する場合は、データをテキストファイルにリダイレクトできます。

最初に、データを保存するファイルを作成します。

touch data.txt

そして、データの保存を開始します

nc -lvp port number > data.txt
2
user3247282

私は数日前からこの問題に取り組んでいます。

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

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

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

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

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

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

1
Tereus Scott

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

0
Bash