リアルタイムグラフのBitmap展開シリーズ最後では、Dgvにデータを表示してからCSV保存するプログラムを作成しました。グラフのデータをそのままCSVファイルにするより、一旦DGVで表に表して、データ数値に異常がないかチェックしてからCSVに保存するほうが安全だと考えたからです。
●追加した機能
①リアルタイムグラフの生データをDGVに書き込んでから、CSV保存する
メリット1:DGVに書き込んだデータを全てCSVにする汎用SUB1本だけで済みます。
メリット2:リアルタイムグラフの生データは配列に保存するので、サンプリングは10msec周期でも余裕がある。
メリット3:測定後、全データをまとめてDGVへ書き込むことで全データを最後まで確認できて、CSV保存できる。
②カーソル間の平均値を計算して、DGVに記録します。
センサの校正時に負荷を加えて、測定してそのデータを平均してDGVへ
記録していきます。負荷の水準が何個でもどんどんDGVへ記録しておいて最後にDGVをCSVに保存します。
この場合も上記①と同じプログラムでき保存できるので便利です。
メリット1:カーソル位置も同時に記録するので、後で再現ができる。
メリット2:DGVに記録するので、DGV上で、いろいろなカスタマイズが可能(回帰計算、微分、積分等)
カスタマイズは、開発テーマのカテゴリでやっていきます。ロードセル開発では、干渉補正計算(一般化逆行列)を合体させることを考えてます。
コードはGISTにあります。
https://gist.github.com/dj1711572002/fa2baf2d24cf23c6aff06e629b6ab055
●CSVファイル汎用SUB
DGVに記録されたデータを全てCSVファイルに保存するSUBです。
特徴1:ファイル名は年月日時分秒名で自動生成します。
特徴2:dgvのヘッダー項目もCSV保存します。
特徴3:dgvに記録されたデータならどんな行列サイズでも自動保存してくれます。
特徴4:Cドライブの既定フォルダーに保存していきます。
この例では。C\BitmapGraph\data_yyyyMMdd_HHmmss.csv”と保存されます。
‘dgv save Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Dim fnameH As String Dim fStr1 As String Dim fstr2 As String Dim f1open As Integer ‘———dgv SCPmode保存ファイル準備—————————— fnameH = Format(Now, “yyyyMMdd_HHmmss”) fStr1 = “data_” ‘ComboBox9.SelectedItem.ToString() fnameH = “C:\BitmapGraph\” & fStr1 & fnameH & “.csv” fstr2 = “FileOpen:” + fnameH ‘ RichTextBox1.AppendText(fStr2) ‘ RichTextBox1.ScrollToCaret() Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(“Shift_JIS”) file_dgv = My.Computer.FileSystem.OpenTextFileWriter(fnameH, False, enc) f1open = 1 Label3.Text = fnameH ‘dgN = ComboBox37.SelectedIndex ‘——–dgvから読んでファイル保存———————– Dim SCPheadstr As String = “” ‘—Header Str Save—————— For i = 0 To dgv1.ColumnCount – 1 SCPheadstr += dgv1.Columns(i).HeaderText + “,” Next i SCPheadstr += vbCrLf file_dgv.Write(SCPheadstr) ‘———-LoadNo,X,Y,Z save———— Dim SCPstr As String = “” For i = 0 To dgv1.RowCount – 1 ‘If CStr(dgv(dgN).Rows(i).Cells(0).Value) <> “” Then ‘—Header Str Save—————— For j = 0 To dgv1.ColumnCount – 1 SCPstr += CStr(dgv1.Rows(i).Cells(j).Value) + “,” ‘End If Next j SCPstr += vbCrLf file_dgv.Write(SCPstr) SCPstr = “” Next ifile_dgv.Close() f1open = 0 End Sub |
●rev01のバグ取り備忘録
その3までで、一応実用的に使う機能は盛り込んだので、実測定に使い始めてますが、おかしいところがでてバグ取りしてますが、未だ、細かいところで
バグまたは、仕様の改善が残ってます。
解決したバグ:リアルタイムグラフの線がカクカクしていた。
原因:X軸拡大機能を使って、リアルタイムグラフを書く場合、X軸のドット間を
間引きしながら、sourceBitmapへLINEを書き込みながら、間引きしない生の全データをlongBitmapへ書き込むということを同時にやっているところで、プロット間隔を間引き値にしていたためグラフがカクカクになってしまっていた。
解決:間引きしたデータを1ドット間隔でLINEプロットしてカクカクがとれて滑らかになた
●仕様の改善したい点
仕様の改善1:途中で止めると、次は、プログラムの再起動になるので、シリアル接続の初期化をプログラム上でやる方法に変更したい。
仕様の改善2:現在3CHしかありませんが、Ch数も任意にできるようにしたいです。
●以後
各開発テーマでカスタマイズしながら、使っていきます。
VB.NETカテゴリーでその3で終わりにします。
12月からはフォースプレートの重心表示システムとして本プログラムをベースにして
開発していきます。スキーを履いてフォースプレートに乗って、姿勢による重心位置を
測定します。