複数のシリアル ポートでデータをポーリングし、結果をデータベースに保存するリアルベーシック コンソール アプリケーションを作成しています。
私の最初のアイデアは、ポートを開き、データを読み取ってから再度閉じることでした.問題は、シリアルポートを開くのに最大4秒かかる場合があり、最大8つのポートから読み取る必要がある場合があるため、ポートはサイクルごとに実用的ではありません。
開いているポートからシリアル デバイスが切断された可能性が高く、もちろんこれは問題の原因となります。
ポートが開いていて生きているかどうかを検出して、ポートを開いたままにし、接続されているデバイスがなくなったことを検出したときにのみポートを閉じて再度開くことができるようにすることは可能ですか?
編集
シリアルポートはBluetoothシリアルポートで、Bluetooth無線と通信し、Bluetooth無線はマイクロコントローラと通信します。Bluetoothデバイスが範囲外になり、シリアルポートを開いたまま効果的に切断するまで、リッスンする開始文字と終了文字があり、これらすべてが正常に機能します。
もちろん、ポートを閉じてもう一度開いてみることもできますが、代わりに、デバイスがまだ Bluetooth シリアル ポートに接続されているかどうかを検出したいと考えています。
また、OSX のシリアル ポートで serial.close() を呼び出すと、一時的なフリーズ (デスクトップ カーソルのフリーズ) が発生します。100% の CPU 使用率が疑われます。これは Windows では発生しないため、ポートの開閉回数を最小限に抑えたいと考えています。毎分約10台のBluetoothデバイスからデータをポーリングしているため、これを行う必要があります。
シリアル ポートを開くのに最大 4 秒かかるため、SPP シリアル接続の代わりに Bluetooth ラジオへの直接 HID 接続を使用するのが最善の解決策ですが、これまでに realbasic を Bluetooth HID デバイスに接続したことがないようです。そのため、情報やヘルプはありません。