C#のWindowsシステム向けに書かれたサービスをLinuxに移植しようとしています.Windowsを完全に置き換えることを目指しています。ハードウェアはWindowsとLinuxの両方の環境で同じです。Linuxのシリアルポートから読み込むWindows C#コードを変更するには?
これまでのところ、私はMono-completeをインストールし、修正する必要があるビットを修正してNugetを探し、美容エラーだけでソフトウェアをコンパイルし、モノサービスで実行し、通信を確立しましたシリアルポートを使用します。
これは、物事がうまくいかないところです。
ポートを開くことができました。ポートにメッセージを送信して、適切な応答が得られました。シンボルは、単にソフトウェアによって読み込まれていないと私はタイムアウトを毎回打つよしかし
@記号 - 「猫の/ dev/ttyUSB0」私はポートからの適切な応答を見ています実行することにより
。
私は、 'COM1'(または必要なポート)の代わりにポート '/ dev/ttyUSB0'を開く以外は何も変更していません。
シリアルポートに書き込むことはできますが、読み込めないのはなぜですか?
私はビッグエンディアン/リトルエンディアンの問題かもしれないと思っていましたが、デバイスに信号を正しく送信しています( "M2" - 引用符は不要です)。
戻り通信もうまくいくように見える - cat/dev/ttyUSB0は、新しい行のそれぞれに返される一連の '@'記号を示しています。
ソフトウェアはこれを読んでいますが、代わりに応答待ちのタイムアウトに遭っています。
私はそれが改行の問題かもしれないのだろうかと疑問に思ったが、なぜWindowsシステム上でそのまま動作するのだろうか?そしてそれが完全に楽しく送信されるのはなぜですか(改行は現在明示的に '\ r \ n'に設定されている)
Linuxに固有の何かがありますか?
* termios * APIを使ってシリアルポートを設定していないので、あなたがプログラムを実行する前に以前に存在していたモードを利用することになります。基本的には、ASCIIテキスト(標準モード)の行を読むか、バイナリデータのバイトを読む(非標準モード)かを選択できます。 http://stackoverflow.com/questions/25996171/linux-blocking-vs-non-blocking-serial-read/26006680#26006680コメントには、Windows APIへのリンクがあります。 – sawdust
実際に問題は/ r/nであり、少なくとも私はまったく同じ問題を抱えていたため、ReadLineをデータイベントにアタッチしてReadBytesを使用するのではなく、このように動作させました。 – Gusman
また、デバイスのファイルから読み取ることができる場合は、常にストリームリーダーを使用できます; – Gusman