ハンドヘルドスキャナーからテキストを受信するためにSerialPortを使用しました。さらに、ハンドヘルドスキャナーはusbポートを使用してコンピューターに接続していますが、そのドライバーは仮想シリアルポートに接続します。
だから私はこのコードを使ってテキストを受け取ります:
SerialPort serialPort=new SerialPort("COM7");
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Console.WriteLine(serialPort.ReadExisting());
}
さて、私がプログラムを実行したとき、バーコードが「1234567890」の場合、受け取ったテキストはルールなしでいくつかの部分に分割されます。
例:
123
45
7890
時々例:
123456
7890
時々例:
12
34
567890
これの何が問題なのですか、なぜテキストがルールなしでいくつかに分割されるのですか?どうすればそれを結合させて、それ以上分割しないのですか?
PS:Datalogic QD2430 / Honeywell GHD1900など、別のブランドのハンドヘルドスキャナーを試しましたが、これらの問題はまだここにあります。
シリアルポートI / Oは、ストリーミングインターフェイスと考えることができます。つまり、1回のコールバックですべてのデータを受信できない場合があります。
あなたが見るとき:
12
34
567890
...何が起こっているのかというと、コールバックが3回のConsole.WriteLine
呼び出しで3回呼び出されているのではないかと思います。したがって、出力は壊れているように見えます。
通常、デバイスに応じて、ターミネータに到達するまですべてのバイトを読み取る必要があります。それまでに受信したデータをバッファリングする必要があります。それまでは、アプリの性質によっては、リクエストを処理できない場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加