皆さんに簡単な質問があります。シリアルI/Oを扱うのはこれが初めてで、最も効率的な方法は何かと考えていました。レーザーからrs-232を介して読み取ります。
調査からわかることから、バックグラウンドワーカーを使用してシリアルポートからバッファーを作成し、メインスレッドにそのバッファーにアクセスしてポイントをプロットおよび分析することでこれを実現できます。これを行うためのより効率的で信頼性の高い方法はありますか、それともこのアプローチが私の最善の策になるでしょうか?
ありがとう!
皆さんに簡単な質問があります。シリアルI/Oを扱うのはこれが初めてで、最も効率的な方法は何かと考えていました。レーザーからrs-232を介して読み取ります。
調査からわかることから、バックグラウンドワーカーを使用してシリアルポートからバッファーを作成し、メインスレッドにそのバッファーにアクセスしてポイントをプロットおよび分析することでこれを実現できます。これを行うためのより効率的で信頼性の高い方法はありますか、それともこのアプローチが私の最善の策になるでしょうか?
ありがとう!
デバイスからどのように読み取るかは、デバイスからデータを取得する方法によって異なります。ひずみゲージ(メーターに取り付けられている)からデータを取得するアプリケーションがあります。このメーターは自律的に測定値を吐き出すので、ポーリングする必要はありません。このため、SerialPort
DataReceivedイベントを使用して、データを配列に追加するだけです。
UIスレッド上にあるMicrosoftChartControl(.NET 4.0に組み込まれている)を使用しているため、UIスレッドから更新する必要があります。データは非常に高速(毎秒約100ポイント)で届くので、私が行うことは、100ポイントの配列を作成し、新しい配列を開始するときにその配列をUIスレッドに開始するBeginInvoke(Winforms)です。このようにして、UIは定期的に更新されます(1秒あたり最大1回の更新)。
一方、デバイスでポーリングが必要な場合(毎回データを要求する必要がある場合)、タイトループポーリングに配置される専用スレッドが必要になります。