リアルタイム受信プログラムは、原理上バッファを使わないほどリアルタイムになります。つまり、受信データの周期でプログラムの全処理が動作する必要があります。リアルタイムでない場合は、シリアルポートのバッファでデータをため込んでおけば、プログラムの各処理が多少遅くても、データ欠落などの事故は起きません。
※2022年2月追記 描画速度を改善するプログラムテクニック
大きなBITMAPに受信データを描画してため込むと、DISPLAYのハードを使わないで描画できます。
大きなBITMAPから必要な画像を切り取って表示するほうが、一個一個プロットするより
高速になります。しかし、CPUとグラフィクスの速いPCのほうがプログラムが楽です。
【VB.NET】リアルタイムグラフのBITMAP展開<その1小技在り>
【VB.NET】リアルタイムグラフBitmap展開<その2カーソルと拡大縮小>
【VB.NET】リアルタイムグラフBitmap展開<その3DGV経由CSV保存>
■リアルタイム速度を測定実験方法
受信データ処理Subの printdata()にStopWatchを埋め込んで毎回のデータ入力をカウントしながら時間計測します。各処理をチェックボックスで選択して、動作を選択して、1条件を約5分間連続受信してデータ数と時間を測定して割り算して1データ周期あたりの時間msecを得ます。2ポートから同時にはいってくるのですが、同時でなく半分の周期で入ってきてます。1データ25msecで動作するのが基本的な動作時間となります。
●データの流れ
ちなみに本測定に使ったPCは、LENOVO ThinkPad X230です。私は3台所有して、便利に使ってます。Core-I5 3320M 2.6GHzです。時代遅れ機種なので、遅いです。Crystal Benchで測定して、6GBでは遅かったので8GBで少し早くなりました。
https://forest.watch.impress.co.jp/library/software/crystalmark/
●以後
計測結果から、画面への文字表示、グラフプロットで数msec単位で遅延が増してくるので、グラフィック速度の速いPCがないと10msec前後のリアルタイムグラフが実現できないことがわかりました。
さらに、実際50msec周期でデータが入っていて、57msec周期でグラフを
描画しているときには、受信が時々破綻するはずなので、破綻現象を追ってみます。