0

Delphi Prism で SerialPort を使用しています。SerialPort にバイトを送信することはできますが、SerialPort Request to Send (RTS) ラインが常にハイまたはアップしているため、外部からデータを受信できません。では、RTS ラインを自動的に切り替えるには、どの設定を設定しますか?

私が設定したシリアルポートのプロパティは次のとおりです。

SerialPort1 := new System.Io.Ports.SerialPort();
SerialPort1.BaudRate:=19200;
SerialPort1.DataBits:=8;
SerialPort1.DtrEnable:=true;
SerialPort1.Parity:=System.IO.Ports.Parity.Even;
SerialPort1.PortName:='COM1';//'/dev/ttyS0';
SerialPort1.ReadBufferSize:=3000;
SerialPort1.ReadTimeout:=1000;
SerialPort1.ReceivedBytesThreshold:=1;
SerialPort1.RtsEnable:=true;
SerialPort1.StopBits:=System.IO.Ports.StopBits.One;
SerialPort1.WriteTimeout:=1000;
SerialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(@MySerialData);
SerialPort1.Open;

DTRをセットしています。Request to Send 行は、シリアルにデータを読み書きするタイミングを制御する方法です。RTS が高い場合は書き込みしかできず、RTS が低い場合は読み取りしかできません。オシロスコープで通信回線を確認しましたが、RTS 回線は常に高い状態です。これは、プログラムがバイトしか送信できず、外部からバイトやデータを読み取ることができないことを意味します。これが、DataReceived イベントが実行されない主な理由です。これは、着信バイトまたはデータがまったく表示されないためです。

それで、私のシリアルポートの設定を見て、何が欠けているのか教えていただけますか。

4

1 に答える 1

1

RTSは出力なので受信には関係ありません。DTR や CTS をオンにしてみてください。

編集:

RTS が有効になっている行を削除し、RTS/CTS のハンドシェイクを追加してみてください (Delphi では正確にはわかりません)。ピンが何のためにあるのか、何をするべきなのかを知っています。これがどのように配線されているかを示すピン配置がありますか。2 と 3 がクロスしていると仮定します。DTR から DSR へは両方向、RTS から CTS へは両方向です。

于 2011-07-20T19:15:10.203 に答える