1

シリアル通信の機能を持つ単純な C# アプリを作成しました。デバイスへの読み書きに使用しています。デバイスは文字列コマンドを認識します。このアプリを使用して、デバイスから正常に読み取ることができます。しかし、peoblem は、デバイスへのコマンドの書き込み (送信) にあります。私は単に使用しています

if (serialPort.IsOpen == true)
{
serialPort.Write("Command1");
}

しかし、私のデバイスはそれに応答しません。

確認するために、ハイパーターミナルを使用して同じコマンドをデバイスに送信しようとしましたが、デバイスはそれを認識し、完全に機能します。

C#でシリアルポートに書き込むための正確な書き込み方法や確認する必要があることを教えてもらえますか。これはエンコーディングの問題ですか... (この同じアプリを使用したシリアル読み取りはかなりうまく機能しています!!) お時間をいただきありがとうございます。

さらに、例外やエラーはなく、デバッグ モードではこの行が実行されます。

4

3 に答える 3

3

これは非常に一般的な問題であり、Handshake プロパティを None に設定したままにしておくと必ず発生します。シリアル ポート デバイスは、ほとんどの場合、ハンドシェイク信号に注意を払い、DTR 信号がオンになっていない場合、送信したものをすべて無視します。これは、電源が入っていて、受信したデータがノイズではないことを示しています. DtrEnable を true に設定する必要があります。これは、HyperTerminal も同様です。

また、RTS 信号がオンになっていないために何も受信する準備ができていないと判断した場合は、何も返信しません。RtsEnable を true に設定する必要があります。HyperTerminal も同様です。または、Handshake プロパティを正しく設定するだけです。Handshake.RequestToSend が一般的な要件です。

それでも問題が解決しない場合は、SysInternals の PortMon を使用して、プログラムが発行するシリアル ポート ドライバ コマンドと、HyperTerminal が発行するコマンドを比較できます。

于 2013-01-31T14:16:11.857 に答える
1

Enterキーを押して情報を送信すると、ハイパーターミナルは入力に改行文字を追加する可能性があります。これは、「ラインフィード」と「キャリッジリターン」で構成されます。

ハードウェアのドキュメントを確認してください。ただし、情報を送信しようとしているデバイスは、入力の終わりを示すキャリッジ リターン '\r' を探していると思います。コメントの他の人が言っているように、入力の最後に適切な文字を追加してください。

または、SerialPort.WriteLine 関数を使用して、改行 '\r\n' 文字を明示的に変更せずに入力に追加するのと同じことを行うことができます。

于 2013-01-31T14:16:20.550 に答える
0
if (serialPort.IsOpen)
    serialPort.WriteLine("Command" + "\r\n");
于 2013-01-31T14:14:55.783 に答える