0

私の C# デスクトップ クラス ライブラリは、COM シリアル ポートと通信します。
comは実際のcomではなく、別のコンピューターのUSB to COMに接続されたUSB to COMケーブルであり、他のコンピューターはシミュレーターを使用してデータを送信します。

このソリューションは正常に機能し、ポートは正常に開きます。

serialPort.Open();
if (serialPort.IsOpen)
{
   serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
}

void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  try
  {
     var length = serialPort.BytesToRead;
     byte[] buffer = new byte[length];
     serialPort.Read(buffer, 0, length);
     for (int i = 0; i < buffer.Length; i++)
     {
        System.IO.File.AppendAllText(@"c:\TestLogging.txt", string.Format("[Time = {0}]  Data was received from serial port !", DateTime.Now));         }
     } 

シミュレーターは常にデータを送信し、クラスでデータを受信しますが、常に受信するわけではありません.30秒ごとに1行の印刷が表示されます-常に印刷するはずですが!

奇妙なこと - 行 var length = .. にブレークポイントを配置すると、ブレークで停止していた時間のプリントが表示されます..転送されたデータは「キャッシュ」されているようで、「再生」を押すとデータを受け取りますが、プロセスを一時停止している間だけです。

4

3 に答える 3

2

そこにイベントハンドラを登録するには遅すぎると思いますDataReceived。ポートを開く前に登録する必要があります。

serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
serialPort.Open();
if (serialPort.IsOpen)
{

}
于 2013-10-01T11:45:18.923 に答える
1

ハイパーターミナルを使用してマシンを接続し、通信が機能するかどうかを確認してください。もしそうなら、それはあなたのアプリケーションのせいです(シリアルポートの設定を再確認してください)。それ以外の場合は、おそらくケーブルまたはポート自体です。

誤ったデータを取得していないことを確認していますか? SerialPort.ErrorReceivedイベント ハンドラーをサブスクライブしましたか? そこにいくつかのSerialError.Frameエラーが発生した場合は、おそらくケーブルに障害があるか、ポートが壊れているか、通信を妨害しているいくつかの条件があります (可能性は高くありませんが、強力なソースがある場合などに発生する可能性があります)。インバーターなどの近くの電源)。

于 2013-10-01T12:21:43.420 に答える