2011-12-19 1 views
2

Visual Studio 2010 express、WindowsFormsApplicationSerialPortは同じ入出力バッファですか?

私のアプリケーションには2つのコードがあります。まず、シリアルポート上のデータを毎秒送信する必要があります。 2番目はシリアルポートからデータを受信する必要があります。 現時点では、シリアルポートに接続されているデバイスがありません。したがって、datarecievedハンドラは決してトリガされるべきではなく、データは受け取られません。 私の問題は、最初のコードで送信したデータを受け取ることです。それは正常な行動ですか?その行動を防ぐ方法はありますか?デバイスをシリアルポートに接続すれば、それは違うでしょうか?

private void timer1_Tick(object sender, EventArgs e) 
    { 
     serialPort.Write(dataToSend, 0, 1); 
    } 

private void datarecievedhandler(object sender, SerialDataReceivedEventArgs e) 
    { 
     serialPort.Read(dataToRead, 0, 1); 
     MessageBox.Show("Something is recieved!"); 
    } 
+0

'e.EventType'とは何ですか?おそらくEOFですか? –

+0

申し訳ありませんが、私はまだこの分野の初心者です。質問は分かりません。 – user1069738

+0

あなたの 'datarecievedhandler'に' SerialDataReceivedEventArgs e'があります。 on 'e'はイベントを理解するのを助けるための値' e.EventType'です。単純に...ブレークポイントを追加した場合。 'e.EventType'とは何ですか? –

答えて

1

まず、デバイスとデバイスとの通信に使用するプロトコルが接続されているかどうかをテストする必要があります。

たとえば、「hello」を送信し、ACKを待つようにしてください。タイムアウトが発生すると、デバイスが接続されていないことを意味します。

あなたのデバイスが「hello/ack」という種類のメッセージをサポートしていない場合は、データを読み込んでタイムアウトしているかどうかを確認してください。

+0

ありがとう...私はデバイスが接続されているかどうかをテストする必要はありません...私はそれがポートに接続していないためではないことがわかります。私は、デバイスが接続されていなければ、データ処理されたハンドラは決して上げてはいけないと思っています。私は正しい? – user1069738

2

エコーを受信して​​いるポートに何も接続されていない場合は、間違ったCOMポート(Bluetoothポート、モデムなど)のエコーを有効にしている可能性が最も高いデフォルトでは

Windowsのコントロールパネルでデバイスマネージャを開き、[ポート]の下を見て、正しいCOMポートを開いていることを確認します。

+0

ありがとう、それは問題だと思われる...私はデバイスをconneceted、別のポートを開いた、すべてが大丈夫だった;) – user1069738

関連する問題