2017-02-11 20 views
1

私は、いくつかの異なるコマンドを受け入れる実験室機器と通信しようとしています。この機器では、キャリッジリターンを使用して終了します(改行なし)。シリアルポートのキャリッジリターン問題

RealTermを使用し、必要に応じて接続を設定すると、ASCIIコマンドの1つとCR文字を送信できます。装置は正しい応答を提供する。私はそれを送信するたびので

しかし、.NETのSerialPortオブジェクトを使用する場合は、C#で\rように思えるが、必ずしも正しくない、私の楽器は、プリンタのタイムアウト/エラーに関連するエラーコードを示します(RS-232ポートがあります「プリンタ」と見なされていますが、マニュアルにはPCへの接続方法も記載されています)。

私のポートのNewLineプロパティが\rに設定されていることを確認しました。

_port.WriteLine(command); // error at the instrument once this executes. 
_port.Write(command + _port.NewLine); // also error. 
_port.Write(command); // executes without error, but next line errors: 
_port.Write(_port.NewLine); 

は、C#でRealTerm対\rCRの間にいくつかの根本的な違いがあります:ここで私が試したカップルの事ですか?それとも、ここに何か他のものがありますか?

+1

_port.NewLine、つまり_port.NewLine = "\ r"を設定しようとしましたか? – Graffito

+0

[portmon](https://technet.microsoft.com/en-us/sysinternals/bb896644.aspx)のようなツールを実行して、適切な手動コマンドとコードの送信コマンドを比較すると、その違いが問題になります。 –

+0

RealTermのようなプログラムはEnterキーを任意の文字に変換します。接続用に構成されている。 "\ n"と "\ r \ n"のような、まだ試していないものと同じです。 –

答えて

0

私の使用例では、この問題を解決するために、エラーを停止するためにDtrEnable = true;を設定する必要がありました。私は正常に実行して私のポートを偵察するためのプログラム(「アクセスポート」と呼ばれる)を手に入れました。私のコードとRealTermは同じ正確なバイトを書いていましたが、私はドライバ設定のビットマスクが少し違っていることに気付きました。 RealTermですべてのハンドシェイクとフローコントロールが無効になっていたにもかかわらず、ドライバのヘッダーファイルを参照した後にDTRを有効にしていました。私のコードで同じことをすることで問題が解決されました。

関連する問題