HOME >> 鉄道模型実験室 > リアルタイム表示トライ その3

鉄道模型実験室 No.213  リアルタイム表示トライ その3

 Python を使用し測定データをリアルタイムで表示できないか検討しています。 残っているのは課題1のシリアル通信関係である。 この一週間、悪戦苦闘してきたプロジェクトもやっとゴールが見えてきた。

 

  .

  

■ トライ4

 最後に、残っているのは課題1のシリアル通信関係に取り掛かることにしよう。

 まず、シリアル通信のライブラリーを検索して、pyserial というライブラリーを使うことにしました。 サイトの解説に従って、このライブラリーをインストールしました。

#-*- coding:utf-8 -*-
 
import win32com.client
import time
import serial
 
ser = serial.Serial('COM8',9600)
ser.readline()
xl_app = win32com.client.GetObject(Class='Excel.Application')
 
while True:
	val_arduino = ser.readline()
	buf = val_arduino.strip().decode('UTF-8')
	a = buf.split(',')    
	rn = xl_app.Cells(4,2).value
	xl_app.Cells(rn,2).value = a[0]
	xl_app.Cells(rn,3).value = a[1]
	xl_app.Cells(rn,4).value = a[2]
	xl_app.Cells(rn,5).value = a[3]
	xl_app.Cells(rn,6).value = a[4]
	xl_app.Cells(rn,7).value = a[5]
	xl_app.Cells(rn,8).value = a[6]
	xl_app.Cells(4,2).value = rn + 1
	time.sleep(1)
 
ser.close
 
exit()

 問題なくインストールできました。

 次に、プログラムは先回の内容をもとに右の様に記述しました。 記述内容は最終状態ですが、注意点をメモしておきます。

  1. インポートする名前はライブラリー名ではなく、serial とのことで、注意せよとのコメントがありました。
  2. シリアルの通信ポートを調べておく必要があります。 Arduino とUSBケーブルで接続した状態にし、デバイスマネージャーを使ってCOMポートの番号をチェックしておきます。
  3. 取り込んだデータを変数 buf に取り込むとき、 当初は、さるサイトを参考にして
        buf = int(repr(val_arduino.decode())[1:-5]
    と記述したのですが、エラーとなってしまいました。 原因はすぐにわかりました。 送信されてきたデータの中に、UやEといった文字型が含まれているので、整数型の int に変換できないのです。
    そこで、他のサイトに紹介されていた右に示す記述方法に変更しました。
  4. プログラムの終了方法が分からなかったので、とりあえず右のように記述しておきました。 シリアル通信が途切れた時にポートを閉じてプログラムを終了するようにしましたが、実際に使用しながら検討します。 それまでは、測定が終わった時、エクセルファイルを保存しておいて、Python 関係をプチンと切ることにします。
  5. 遅延タイムが1秒で良いのかどうかも様子を見ることにします。

● テストの実施

 実施状態を下の写真に示します。 測定を始めようとして、すでに一週間が経っていました。 再び、測定装置のセットを行い、パソコン側もエクセルのシートを開き、右のプラグラムを走らせました。 やっとのことで本来のテストが出来るのではないかとワクワクしながら、パソコン画面を見つめていました。

 しかし、無情にもグラフにはプロット点が一点だけで、他のデーが表示されません。

    無念! またダメか?

と思っていたのですが、何のことはない、装置の測定方法を忘れていたのです。 同じ条件で動力車を走らせているので、データは一点に集中します。 バラツキのない測定が出来ている証明なのです。 ・・・・・・・もう! 間抜けめ!

 供給電圧を少しずつ変えていくと、動力車の速度も変化し(当たり前ですな)、それに合わせてグラフ上に次々とプロットされていきました。

  やったぜ!         .

 思わず 出来たぞ! と叫んでしまいました。

 

■ あとがき

 この一週間、悪戦苦闘のPython への挑戦でした。 もう 81歳ではなくて、まだ 81歳であることも実感しましたし、マクロによる記述よりも、

    Python の記述がなんとシンプルであることか!

も証明されたようです。 恐るべし Python なり。

 

● 手順を整理しておきます。

 測定装置の準備が出来たら、

  1. 記録させるエクセルファイルの対象シートを開きます。
  2. モデルの重さなど、事前に記入しておくべき仕様項目を記入しておきます。
  3. Python プログラムを実行させる。

 そして、測定を開始します。

 なお、Python プログラムを実行させる方法は、実施してきた Windows PoweShell から実行する方法以外に、IDE を使う方法もあるようです。 それもいろいろな種類があるようなので、今後の研究課題としましょう。 そして、今回作成したソフトを使って、実際の測定を実施し、問題点の抽出や改良を実施することします。

    *******************************************************************

 そして、今回のプロジェクトはここで、無事に完了と言うことにします。

 

ページトップへ戻る  .


 2022/6/15