0


0

c#asciiプロトコルの問題

シリアルポート経由でASCIIコマンドをデバイスに送信するプログラムがあります。 プログラムはデモであり、私がしたいことをしません。

デバイスをC#で応答させようとしていますが、何も返されません。 すべてのシリアルポート設定が正しい。 デモソフトウェアとまったく同じメッセージを送信しています。

//e.g message ABC

byte[] msg = new byte[5];

msg[0] = 0x02;
msg[1] = 0x41;
msg[2] = 0x42;
msg[3] = 0x43;
msg[4] = 0x04;
comport.write(msg, 0,msg.length)

デバイスはモニターです。 コードは単なる例です。 送信された正しいメッセージに対する応答またはエラーメッセージだけのハートビートはありません。 設定は標準の9600-8-N-1です。 「ピン2と3の間のクリップ(TXとRX)。」ええ、ケーブルが機能するのは、機能する製品ソフトウェアで使用されているケーブルと同じだからです。 そして、私が送ったものを取り戻します。 私は仮想COMプログラムを使用しましたが、すべては大丈夫のようです。 「6バイトですが、最初の5のみを初期化します。 「ごめんなさい。タイプミス。

SerialPort.DtrEnableおよびRtsEnableプロパティをtrueに設定します。 c#ではデフォルトでオンになっています。 私はハイパーターミナルを試しましたが、それでも応答がありません。 \ rと\ nを運良く送信しました。

6 Answer


2


このhttp://www.dreamincode.net/forums/showtopic35775.htm [シリアルポート通信のC#チュートリアル]が役立つはずです。 C#での割り当てにより、HexとByteの間に適切な組み込みカーストがあるかどうかはわかりません。 それが問題の原因かもしれません。

デバイスハートビート

デバイスは「DC2」または「DLE」応答(ハートビート)を送信しますか? その場合、基本的な9600-8-N-1設定を使用してハイパーターミナルでCOMポートを開いてみて、何かが得られるかどうか確認してください。 コマンドを送信しようとしたときに返される「STX」、「SYN」、「ETX」コマンドはありますか? 通信しようとしているハードウェアのコマンドセットの実装についてはわかりません。

  • COMポートの動作確認*

COMポートが正常に機能しているかどうかを確認しましたか? ピン2とピン3(TXとRX)の間にクリップを挿入して、ループバックを作成できます。 これにより、COMポートがループバックされ、HyperターミナルでそのCOMポートを開いて入力できます。 文字がエコーバックされます。

また、http://com0com.sourceforge.net/ [com0com]というソフトウェアを使用して仮想COMポートを作成し、実際に送信する前に送信内容をテストすることもできます。

それはnullmodem接続を介してリンクされている仮想COMポートのペアを提供します。 その後、お気に入りのターミナルアプリケーションなどを使用して、1つのCOMポートにデータを送信し、他のCOMポートから受信できます。

もう特定の情報がなければ、ストローを把握することになります。


1


6バイトを割り当てて送信していますが、最初の5バイトのみを初期化しています。

また、あなたが書いたものによれば、あなたはデモプログラムとまったく同じようにすべてを正しく行っています。 右? 解決策は1つしかありません。デバイスが足を引っ張っています。

真剣に:1つのプログラムが動作し、動作しない場合は、何らかの違いがあるはずです。


1


最もよくある間違いは、ハードウェアハンドシェイク信号をオンにするのを忘れることです。 ホストがオフになっていると判断した場合、デバイスは何も送信しません。 SerialPort.DtrEnableプロパティとRtsEnableプロパティをtrueに設定してください。

前述のように、配列サイズを修正します。 おそらく助けにはなりませんが、STXキャラクターはジャンクが確実に捨てられるようにします。

Windows Hyperterminalアプレットで、基本的なハードウェアに問題がないか確認してください。 Ctrl + B、ABC、Ctrl + Dを入力して、送信しようとしているメッセージを送信できます。


0


他の人が示唆したように、何らかの種類の端末ソフトウェアで送受信されているものを確認することをお勧めします。 私は "http://realterm.sourceforge.net/[realterm]"で成功しました-asciiまたはbinary / hexビューの素晴らしい表示があります。


0


ASCIIを使用しているため、別の問題は、正しい行終了文字を送信していないことです。 一部のデバイスは「\ r」を期待し、他のデバイスは「\ n」を期待します。 正しく設定していることを確認してください。


0


デバイスはモニターです。 コードは単なる例です。 送信された正しいメッセージに対する応答またはエラーメッセージだけのハートビートはありません。 設定は標準の9600-8-N-1です。 「ピン2と3の間のクリップ(TXとRX)。」ええ、ケーブルが機能するのは、機能する製品ソフトウェアで使用されているケーブルと同じだからです。 そして、私が送ったものを取り戻します。 私は仮想COMプログラムを使用しましたが、すべては大丈夫のようです。 「6バイトですが、最初の5のみを初期化します。 「ごめんなさい。タイプミス。

SerialPort.DtrEnableおよびRtsEnableプロパティをtrueに設定します。 c#ではデフォルトでオンになっています。 私はハイパーターミナルを試しましたが、それでも応答がありません。 \ rと\ nを運良く送信しました。