1

マイクロコントローラーから RS232 DE9 シリアルポートに受信したデータを読み取るための単純な winform アプリケーションを作成しました。データを送信するタイミングを制御する必要があるため、そのために RtsEnable プロパティを制御します。プログラムの構造は、このようなものに似ています。

byte[] data = new byte[serialPort1.BytesToRead];
serialport1.RtsEnable = true;

private void serialPort1_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
    serialPort1.Read(data, 0, data.Length);
    serialport1.RtsEnable = false;
    this.Invoke(new EventHandler(ProcessData));
    serialport1.RtsEnable = true;
}

さて、問題は簡単です。RtsEnable が最初に true に設定されている場合、実際には true に設定されていません。確かにデバッグすると、RtsEnable = true と表示されます。しかし、回路の電圧を確認すると、RT はまだ高くありません。

シリアルポートの電圧出力を手動で確認したので、回路に問題はないと思います。だから、それは私のコードで何かをしなければならないと思います。

これがなぜなのかについて何か考えはありますか?前もって感謝します

4

1 に答える 1

-1

RtsEnable は RTS を設定しません。設定できるようにするだけです。RTS (および同様に DTR) を設定 (Low にプル) するには、ハンドシェイクを XonXoff に設定する必要があります。

例:

   private void btnReset_Click(object sender, EventArgs e)
    {
        comm.MycomPort.RtsEnable = true;
        comm.MycomPort.Handshake = System.IO.Ports.Handshake.XOnXOff;
        comm.MycomPort.RtsEnable = false;
    }

これにより、RTS が一時的に Low (MycomPort.DtrEnable を使用する場合は DTR) に引き下げられます。無効になるまで Low のままになるため、タイマーを追加して任意の期間 Low に保つことができます。

于 2014-01-24T10:05:01.863 に答える