トップページ | データの自動記録 その2 »

2007年6月21日 (木)

データの自動記録 その1

こんばんは。マダム でんでん♪でございます。

以前、「焙煎機の改造(改良)」で少し触れた焙煎データの自動記録システムの開発をやっとはじめました。プログラミングは久しぶりなので、ちょっとカンが鈍ってます。というか、もともと鈍るようなカンなどなかったわけですが。。。(笑

とりあえずは、データロガーとPCをRC-232で接続して、PCからデータロガーにコマンドを送って定期的に温度データを取得し、エクセルのシートにデータを書き込み、リアルタイムで表、グラフに表示するような簡単なものを作ろうと思ってます。

今使っているデータロガーは、マザーツールという会社のMT-306という2chのデジタル温度ロガーで、10個くらいのコマンドですべての機能を制御できるインタフェースになってます。このうち、Aコマンド(RS-232経由でASC 41Hを送る)で現在の温度情報をエンコードされた形で取得できるようになってます。

で、Excel VBAからCOMポート通信ができるモジュールをネットで探してたら、ちょうどよさそうなEasyCommっていうのを見つけました。リンク先からダウンロードしたアーカイブに含まれるec.basとecDef.basをExcelのブックにインポートすると、VBAからCOMポートと通信するためのメソッド、プロパティが利用できるようになります。

こういうプログラム書いた経験があまりない上に、MT-306のマニュアルの記述があまりに素っ気ないので、ずいぶん悩んだ末、とりあえず、MT-306から現在の温度情報を取得するコード断片を書いてみました。

Sub Main()

Dim recBinData() As Byte

ec.COMn = 2
ec.Setting = "9600,n,8,1"
ec.Delimiter = ec.DELIMs.LF
ec.BinaryBytes = 10          '取得バイト数を10に設定

ec.AsciiLine = "A"
Do While ec.InBuffer < 10   '10バイト受信するまで待機
    DoEvents
Loop
recBinData() = ec.Binary    'エンコードデータの読み込み

' T1の各桁をデコード
t1dig4 = recBinData(3) \ 16
If t1dig4 = 11 Then t1dig4 = 0
t1dig3 = recBinData(3) Mod 16
t1dig2 = recBinData(4) \ 16
t1dig1 = recBinData(4) Mod 16

' T2の各桁をデコード
t2dig4 = recBinData(7) \ 16
If t2dig4 = 11 Then t2dig4 = 0
t2dig3 = recBinData(7) Mod 16
t2dig2 = recBinData(8) \ 16
t2dig1 = recBinData(8) Mod 16

' 小数点の有無を判別しT1、T2を数値(ヴァリアント型)に変換
t1 = t1dig4 * 100 + t1dig3 * 10 + t1dig2 + t1dig1 * 0.1
If recBinData(2) And 4 Then
    t1 = t1dig4 * 1000 + t1dig3 * 100 + t1dig2 * 10 + t1dig1
End If

t2 = t2dig4 * 100 + t2dig3 * 10 + t2dig2 + t2dig1 * 0.1
If recBinData(2) And 32 Then
    t2 = t2dig4 * 1000 + t2dig3 * 100 + t2dig2 * 10 + t2dig1
End If

MsgBox ("T1: " & t1 & "/T2: " & t2)

End Sub

VBAエディタのイミディエイトウィンドウからmainプロシージャを実行すると、メッセージボックスに現在の温度(T1、T2)が表示されるだけの単純なコードです。後は、タイマーで定期的にこのコードを呼び出して、Excelのワークシートに時系列順にデータを書き込んでいけば、Excelのグラフ描画機能を使ってリアルタイムに温度データを表示できるかなと。で、過去30秒、1分、5分etc.の温度上昇率とか、火力、排気操作や1ハゼ、2ハゼの時間、温度なんかも自動で記録できるようにしたいなあと。

「T1の各桁をデコード」、「T2の各桁をデコード」ってコメントのあるあたりのコードは、BCDエンコードされている温度データをデコードしてるんですが、なんかどう考えてもだっさいコードです。もっとすぱっとキレイに書けるに違いないんですが。。。だれか教えてください~♪

VBAニガテなので、ちょっと苦労しそうですが。。。明日、明後日くらいで動くようになったらいいなあ。。。

|
|

トップページ | データの自動記録 その2 »

開発日記」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/47885/15824906

この記事へのトラックバック一覧です: データの自動記録 その1:

トップページ | データの自動記録 その2 »