6軸力覚センサ用校正台を使いながら、SCP校正実験を始めてます。6分力センサを校正台上で、荷重ベクトルをSCPで管理しながら校正測定するのですが、従来より精度を上げたいので、試行錯誤しながら大変手間取ってます。その中で、16Ch分の測定設定を毎回やっていたら、実験がすすまないので、フォームの設定をファイルに保存して、読み込む機能を追加しました。
■やり方は単純
フォームのSettingという機能があるらしいのですが、判りにくかったので、TEXTBOX59個とCheckBOX24個とComboBOX21個の設定値をファイル保存して新規に起動したときにダイアログから設定ファイルを選択読み込みできるようにしました。
①コントロールの配列定義
手間がかかるのは、コントロールを配列化して、値を代入する定義文です。(space)_(cr)で行をつないで、5階建てになりました。
MSの長いステートメントを分割する解説記事
”’*********************Control Object Array set**************************************************************************** Dim allTextBox() As TextBox allTextBox = {Me.TextBox1, Me.TextBox2, Me.TextBox3, Me.TextBox4, Me.TextBox5, Me.TextBox6, Me.TextBox7, Me.TextBox8, Me.TextBox9, Me.TextBox10 _ , Me.TextBox11, Me.TextBox12, Me.TextBox13, Me.TextBox14, Me.TextBox15, Me.TextBox16, Me.TextBox17, Me.TextBox18, Me.TextBox19, Me.TextBox20 _ , Me.TextBox21, Me.TextBox22, Me.TextBox23, Me.TextBox24, Me.TextBox25, Me.TextBox26, Me.TextBox27, Me.TextBox28, Me.TextBox29, Me.TextBox30 _ , Me.TextBox31, Me.TextBox32, Me.TextBox33, Me.TextBox34, Me.TextBox35, Me.TextBox36, Me.TextBox37, Me.TextBox38, Me.TextBox39, Me.TextBox40 _ , Me.TextBox41, Me.TextBox42, Me.TextBox43, Me.TextBox44, Me.TextBox45, Me.TextBox46, Me.TextBox47, Me.TextBox48, Me.TextBox49, Me.TextBox50 _ , Me.TextBox51, Me.TextBox52, Me.TextBox53, Me.TextBox54, Me.TextBox55, Me.TextBox56, Me.TextBox57, Me.TextBox58, Me.TextBox59}Dim allcheckbox() As CheckBox allcheckbox = {Me.CheckBox1, Me.CheckBox2, Me.CheckBox3, Me.CheckBox4, Me.CheckBox5, Me.CheckBox6, Me.CheckBox7, Me.CheckBox8, Me.CheckBox9, Me.CheckBox10 _ , Me.CheckBox11, Me.CheckBox12, Me.CheckBox13, Me.CheckBox14, Me.CheckBox15, Me.CheckBox16, Me.CheckBox17, Me.CheckBox18, Me.CheckBox19, Me.CheckBox20 _ , Me.CheckBox21, Me.CheckBox22, Me.CheckBox23, Me.CheckBox24}Dim allComboBox() As ComboBox allComboBox = {Me.ComboBox1, Me.ComboBox2, Me.ComboBox3, Me.ComboBox4, Me.ComboBox5, Me.ComboBox6, Me.ComboBox7, Me.ComboBox8, Me.ComboBox9, Me.ComboBox10 _ , Me.ComboBox11, Me.ComboBox12, Me.ComboBox13, Me.ComboBox14, Me.ComboBox15, Me.ComboBox16, Me.ComboBox17, Me.ComboBox18, Me.ComboBox19, Me.ComboBox20 _ , Me.ComboBox21} ”****************************************************************************************************************** |
②ファイルの書き込み
日付名のファイルで保存します。
”***************************************File Name ****************************************************************** ‘ If CheckBox8.Checked = True And fname = “” Then fname2 = Format(Now, “yyyyMMdd_HHmmss”) fname2 = “C:\vb_LOG\Set_” & fname2 & “.csv” TextBox59.Text = fname2 ‘—MS Example—————————— ‘Dim file As System.IO.StreamWriter ‘file = My.Computer.FileSystem.OpenTextFileWriter(“c:\test.txt”, True) ‘file.WriteLine(“Here is the first string.”) ‘file.Close() ‘—————————————— Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(“Shift_JIS”) file2 = My.Computer.FileSystem.OpenTextFileWriter(fname2, False, enc) ‘ End If ‘=====TextBox Save========For cIndex = 0 To 58 textboxdata = allTextBox(cIndex).Text & “,” file2.Write(textboxdata) Next file2.Write(vbCrLf) For cIndex = 0 To 23 checkboxdata = allcheckbox(cIndex).Checked & “,” file2.Write(checkboxdata) Next file2.Write(vbCrLf) For cIndex = 0 To 20 comboboxdata = allComboBox(cIndex).SelectedIndex & “,” file2.Write(comboboxdata) Next file2.Write(vbCrLf) file2.Close() |
③ファイルをダイアログ開いて読み込み
DOBON NET様のファイルダイアログサンプルをそのままもってきました。https://dobon.net/vb/dotnet/form/openfiledialog.html
ファイルの読み込みは、MSのサンプルをまるごとコピーしました。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/developing-apps/programming/drives-directories-files/how-to-read-from-comma-delimited-text-files
データは、下図も順番が決まっているので、読み込んだFIELD毎に順番に
TextBox配列().text=currentField
Cehckbox配列().checked=CType(currentField, Boolean)
ComboBox配列().selectedIndex=currentField
とかきこむだけです。
Using MyReader As New Microsoft.VisualBasic. FileIO.TextFieldParser(ofd.FileName) MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(“,”) Dim currentRow As String() cIndex = 0 While Not MyReader.EndOfDataTry currentRow = MyReader.ReadFields() Dim currentField As String For Each currentField In currentRow ‘MsgBox(currentField) readata(cIndex) = currentField Debug.Print(cIndex & “:” & readata(cIndex)) ‘=====TextBox input===== If cIndex < 59 Then allTextBox(cIndex).Text = currentField End If If cIndex > 59 And cIndex < 84 Then allcheckbox(cIndex – 60).Checked = CType(currentField, Boolean) End If If cIndex > 84 And cIndex < 106 Then allComboBox(cIndex – 85).SelectedIndex = currentField End IfcIndex = cIndex + 1 NextCatch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox(“Line ” & ex.Message & “is not valid and will be skipped.”) End Try End While End Using |
※全体のプログラムは、長くてごちゃごちゃしているので、お役にはたたないと思いますが、備忘録用にGISTにアップしおきます。rev074です。
https://gist.github.com/dj1711572002/86c009a75c775ce159a7d3b067ae6d05
●以後
校正実験しながら、プログラムを改良していきます。手軽にいじれる点がVBの良さだと思います。
つぎはぎだらけなので、ご本人でもわからないプログラムになってしまうので、備忘録をしっかり残しておきっます。