Visual Studio 2013 .NET Framework 4.5 でシリアル ポートのバイト処理を行っています。着信パケット サイズの変化に問題が発生しています。ReceivedByteThreshold を対応するパケット サイズに調整しようとすると、しきい値が受信パケット サイズよりも低く設定されている場合にデータ受信イベントが複数回トリガーされ、しきい値がパケット サイズよりも大きい場合はアクティブになりません。この問題に対処するためにいくつかの異なる方法を試しましたが、どれも完全に機能していないようです.
private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)
{
array<uint8_t>^ CS = gcnew array<uint8_t>(2);
//Check InvokeRequired to prevent cross threading problem
if (textBox3->InvokeRequired) {
//Invoke delegate
textBox3->Invoke(
gcnew System::IO::Ports::SerialDataReceivedEventHandler(this, &MyForm::serialPort1_DataReceived),
gcnew array<System::Object^> { sender, e }
);
}
else
{
//ASCII -> HEX Conversion
int numbytes = serialPort1->BytesToRead;
array<Byte>^ encodedBytes = gcnew array<Byte>(500);
serialPort1->Read(encodedBytes, 0, numbytes);
}
}
上記のコードは、しきい値が正確なパケット サイズに設定されている場合にのみ機能します。着信データの長さについてある程度の知識があるため、ボタン クリック イベントを使用して、発信バッファーに基づいてしきい値を変更しましたが、データはまだ正しく読み込まれていません。Readexisting() は完璧に機能しますが、8 ビット ASCII 文字をスキャンすると、「?」として表示されます。例のために。0xff.
誰かが同じ問題に遭遇したか、このしきい値の問題に対する解決策があるかどうか疑問に思っています.
よろしくお願いいたします。
よし