3

複数のシリアル ポートでデータをポーリングし、結果をデータベースに保存するリアルベーシック コンソール アプリケーションを作成しています。

私の最初のアイデアは、ポートを開き、データを読み取ってから再度閉じることでした.問題は、シリアルポートを開くのに最大4秒かかる場合があり、最大8つのポートから読み取る必要がある場合があるため、ポートはサイクルごとに実用的ではありません。

開いているポートからシリアル デバイスが切断された可能性が高く、もちろんこれは問題の原因となります。

ポートが開いていて生きているかどうかを検出して、ポートを開いたままにし、接続されているデバイスがなくなったことを検出したときにのみポートを閉じて再度開くことができるようにすることは可能ですか?

編集

シリアルポートはBluetoothシリアルポートで、Bluetooth無線と通信し、Bluetooth無線はマイクロコントローラと通信します。Bluetoothデバイスが範囲外になり、シリアルポートを開いたまま効果的に切断するまで、リッスンする開始文字と終了文字があり、これらすべてが正常に機能します。

もちろん、ポートを閉じてもう一度開いてみることもできますが、代わりに、デバイスがまだ Bluetooth シリアル ポートに接続されているかどうかを検出したいと考えています。

また、OSX のシリアル ポートで serial.close() を呼び出すと、一時的なフリーズ (デスクトップ カーソルのフリーズ) が発生します。100% の CPU 使用率が疑われます。これは Windows では発生しないため、ポートの開閉回数を最小限に抑えたいと考えています。毎分約10台のBluetoothデバイスからデータをポーリングしているため、これを行う必要があります。

シリアル ポートを開くのに最大 4 秒かかるため、SPP シリアル接続の代わりに Bluetooth ラジオへの直接 HID 接続を使用するのが最善の解決策ですが、これまでに realbasic を Bluetooth HID デバイスに接続したことがないようです。そのため、情報やヘルプはありません。

4

2 に答える 2

1

通常、シリアルポートに接続してから、そのポートに送信されたデータを受信するのを待つため、要求は奇妙です。別の言い方をしましょう。シリアル ポートには、接続時に解放されるのを待っているデータは保存されません。あなたは聞いているか、聞いていないかのどちらかです。

ポートに接続してデータをリッスンする必要があります。DataAvailable イベントを受信したら、データの処理を開始できますが、イベントが発生する前にストリーム内のすべてのデータが受信および処理されているわけではないことに注意してください。通常、メッセージの終わりが何であるかを判断する必要があります。これは Carraige Return の場合もあれば、そうでない場合もあります。システムによります。

DataAvailable の詳細については、http: //docs.xojo.com/index.php/Serial.DataAvailable を参照してください。

于 2013-06-15T22:43:03.787 に答える