HOME >> 鉄道模型実験室 > スケッチとExcelファイルの設定
測定のための最後の準備としてスケッチとExcelファイルの設定を実施した。
■ スケッチの記述
測定系のスケッチは、今までの内容で不要となった要素を削除して作成した。
今回少し修正した部分は、電圧電流値を読み込んでAD変換中である命令として、 analogRead(vol_pin) と analogRead(cur_pin) の命令の後に、delay(1)の命令を挿入した。 これは、このAD変換命令は100マイクロ秒の時間がかかるとの事であるので、その時間を確保するために、1ミリ秒の余裕を設けたのである。 今までは、データの脈動を気にして数多くのデータを取り込むことにしていたが、コンデンサの追加や安定化電源の使用などで、この配慮よりもデータ変換の確実さを優先させたつもりである。
スケッチの内容 ⇒ 測定系のスケッチ
■ Excelファイルの設定
送信して来た測定データをグラフ化する処理のためのExcelファイルも見直しを実施した。 使用するExcelは古いバージョウン、「Excel 2007」を使用している。 その理由は「動力測定装置がおかしい?」(2020/8/27)を参照されたし。
設定しているシートは、速度特性計測用と牽引力特性測定用の2種類のシートを用意している。 これは測定方法と計算方法が異なっているからである。 それぞれのシートに於いて、データ処理欄などで不要となった欄を削除し、計算のための較正式も新しく設定してファイルを一新した。
まず最初に、平坦路単機走行状態で測定するの速度特性計測用の画面を下に示す。
また、重り車両を牽引して坂道を登り降りする牽引力特性測定用の画面は下のとおりである。
■ Excelのマクロ処理
Excelのマクロ記述について改めて記述しておこう。 マクロ表示を下に示す。
---------------------------------------
Sub Jushin_01() '速度計測
Dim N As Integer
Dim c As COMMTIMEOUTS
Dim l As Long
m = Sheet2.Cells(4, 2)
N = 1
For rn = 1 To 30
'オープン
port$ = "COM8"
h = CreateFile(port$, GENERIC_READ + GENERIC_WRITE, _
0, 0, OPEN_EXISTING, 0, 0)
If h < 0 Then
MsgBox "通信ポート " & port$ & " がオープンできません", _
vbExclamation + vbOKOnly, "通信テスト"
Exit Sub
End If
'タイムアウト
c.ReadIntervalTimeout = 0
c.ReadTotalTimeoutMultiplier = 1
c.ReadTotalTimeoutConstant = 1000
c.WriteTotalTimeoutConstant = 1000
c.WriteTotalTimeoutMultiplier = 1
SetCommTimeouts h, c
'受信待ち
buf$ = String$(128, vbNullChar)
While InStr(buf$, ",") = 0
ReadFile h, buf$, Len(buf$), l, 0
Wend
buf$ = Replace(buf$, vbNullChar, "")
'クローズ
CloseHandle h
' 結果をセルにセット
sn = 2
While InStr(buf$, ",") > 0
N = InStr(buf$, ",")
a$ = Left(buf$, N - 1)
buf$ = Mid$(buf$, N + 1)
Sheet2.Cells(rn + m, sn) = a$
sn = sn + 1
Wend
Sheet2.Cells(2, 18) = rn
Application.ScreenUpdating = True
ActiveWorkbook.Save
Next
Sheet2.Cells(4, 2) = m + 30
End Sub
-----------------------------------
シートは速度特性計測用と牽引力特性測定用の2種類のシートが設定されている。 上記のプロジェクト欄ではそれぞれ複数のシートが表示されているが、データ整理用のためにシートをコピーしたものである。 不良データが疑問データを削除して整理し、グラフに余分なものが表示されないようにしている。 また、標準モジュールとして3個のモジュールが設定されている。
まず速度特性計測用シートに設けているボタンをクリックすることによって作動するマクロを指定するための記述が Module 2である。 Jushin_01のサブルーチンを呼び出している。
Sub ボタン4_Click() Jushin_01 End Sub
牽引力特性測定用シートに設けているボタンは、Module 3に記述されている。
Sub ボタン3_Click() Jushin_02 End Sub
次にメインの記述であるModule 1 では、自分は理解出来ていない “魔法の言葉” が記述されている。
'プロトタイプ Declare Function CreateFile Lib "KERNEL32" Alias "CreateFileA" _ (ByVal filename As String, ByVal rw As Long, _ ByVal d1 As Long, ByVal d2 As Long, ByVal d3 As Long, _ ByVal d4 As Long, ByVal d5 As Long) As Long Declare Sub CloseHandle Lib "KERNEL32" (ByVal handle As Long) Declare Sub ReadFile Lib "KERNEL32" _ (ByVal handle As Long, ByVal buf As String, _ ByVal bytes As Long, readbytes As Long, ByVal d1 As Long) Declare Sub WriteFile Lib "KERNEL32" _ (ByVal handle As Long, ByVal buf As String, _ ByVal bytes As Long, writebytes As Long, ByVal d1 As Long) Declare Sub SetCommTimeouts Lib "KERNEL32" _ (ByVal handle As Long, ct As COMMTIMEOUTS) 'CreateFileパラメータ用定数 Const GENERIC_READ = (&H80000000) Const GENERIC_WRITE = (&H40000000) Const OPEN_EXISTING = 3 'SetCommTimeouts関数用構造体定義 Type COMMTIMEOUTS ReadIntervalTimeout As Long ReadTotalTimeoutMultiplier As Long ReadTotalTimeoutConstant As Long WriteTotalTimeoutMultiplier As Long WriteTotalTimeoutConstant As Long End Type
***************************************************************
この記述に後に、右に示すサブルーチンが記述されている。 このJushin_01 のマクロは、速度特性計測シートを使って処理しているマクロを記述している。 シリアルポートで受け取ったデータを所定の欄に一つずつ記入して行く作業である。
このマクロにはデータを取り扱うシートを指定しているので、二つのシード毎に別々のマクロが必要となってきます。 このため、牽引力特性測定用シートでデータ処理するマクロを別に設定しています。 それが Jushin_02 のマクロですが、データの処理は一緒ですが取り扱うシートの指定を変えて記述しています。 このため、ここでは省略しました。
なお、よくミスるのが、受信するシリアルポートの番号です。 Arduino とシリアル通信するポート名がその時の状態で変化している場合があります。 従ってExcel を使って測定を開始する前に、Arduinoを走らせてポート名の確認とシリアルモニタにてデータの送信具合をいつもチェックしています。
************************************************************************************
以上で準備作業が全て完了したので、実際の測定を実施することにします。 とは言っても、上記のExcel の画面に示すように EF210-114号機で実際に測定を実施済みですので、次回はその報告を行います。
2020/10/5 作成