0

特定のシリアルポートをリッスンし、受信中のデータを処理するプログラムを.NETで作成しました。com0com(ヌルモデムエミュレーター)を使用してテストプログラムを作成しましたが、プログラムは正常に機能していました。ハイパーターミナルでテストしたところ、うまく機能しているようでした。
ただし、ソフトウェアを元のデバイス(制御システムから受信した出力)とインターフェイスすると、受信したデータが文字化けしていました。特殊文字が含まれていました。同じデバイスをハイパーターミナルに接続すると、目的の出力が生成されました。ボーレート、パリティなどを変更しましたが、受信したデータは同じガベージ文字のセットでした。
SerialPortコンポーネントのDataReceivedイベントを使用し、次のコード行を使用してデータをキャプチャしました。

    文字列データ=portRecieve.ReadExisting();

誰かが私がどこを逃しているのか教えてもらえますか?現在の環境では、デバイスからの出力は、ポートで受信したものをすべて印刷するドットマトリックスプリンターに直接接続されています。プリンターは送信されているものをキャッチしているようですが、私のコードはキャッチできませんでした。
同様のシナリオに遭遇したことがある場合は、調査結果を共有してください。
ありがとう

4

3 に答える 3

2

どのように設定しましたか

SerialPort.DiscardNull
SerialPort.Encoding

また、受け取った特殊文字の例を示してください。

于 2009-10-11T15:51:31.103 に答える
1

データが文字化けして表示される理由として、次のことが考えられます。

  • 物理的な接続に問題がある場合は、(まったく何もないというよりもむしろ) ゴミが発生することがあります。リードを抜き差ししてみて、リードが正しいことを確認してください (たとえば、ヌルモデムが必要ですか?)。ハイパーターミナルをチェックインすることで、これをカバーしているように見えます。

  • ボーレート、ストップビット、パリティが正しくない場合 - これはカバーされているようです

  • データを文字列として受信しようとしています。プレーン テキストとして送信されない場合、またはエンコーディングが間違っている場合、簡単にゴミのように見える可能性があります。バイナリ受信を使用して、受信している生データを調べてみてください。これにより、データが単に間違っているのか、それとも .net 変換によって問題が発生しているのかがわかります - 仲介者を排除してください!

于 2009-10-11T18:20:07.837 に答える
0

デバイスがプリンタを特別なグラフィックモードに設定しているように聞こえます。その場合、プリンタに送信されるデータにエスケープシーケンスが含まれている可能性があります。エスケープ(27、0x1B)文字で見つめている文字シーケンス。この場合、コマンドの機能を確認するには、プリンタのマニュアルを参照する必要があります。または、インテリジェントなプリンタではなく、単純なASCII専用プリンタを使用するようにデバイスに指示できる場合があります。

于 2009-10-11T16:38:49.787 に答える