温度調節(6) (自宅でできる液晶観察18)

少し前に十進ベーシックのプログラムを出したけれど、考えてみれば、エクセルにはベーシック言語がついている。



わざわざ別のソフトをインストールしなくても、そのままエクセルのベーシックを動かせば、プログラムでの計算ができるのである。というわけで、ON-OFFのエクセルベーシック版も作ってみた。以下、アルファベット部分がプログラムで、日本語部分は(本来のプログラムにはない)注釈部分である。

st = Range("b5")
等号の後のRangeは、括弧内で指定したセルの値を扱うための命令。実際のエクセルのセルではB5に計算の時系列の最初の値を入れるようにしている。この式でstという変数に時系列の最初の値が代入される。
vend = Range("b6")
上の式と同じで、vendという変数に時系列の最後の点の値を代入する。
Cells(1, 4) = Range("b1")
左側のCells(1,4)は1行4列目のセル(D1になる)の値で、この式はD1にB1の値を代入するコマンドになる。B1には初期温度を入れるようにしているので、この式が実行されるとD1に初期温度が入る。この式はRange("d1") = Range("b1")と同じ意味なのだけれど、Rangeの式だと後で、セルの場所をプログラムで変えていく時に対応しにくかったので、RangeではなくCellsというコマンドを使っており、それと合わせるためにCellsにしている。
Cells(1, 3) = st
セルC1に初期時系列の値を入れている
For i = st + 1 To vend
ここからnext i迄をiという変数がst+1からvendまで繰り返す
Cells(i - st + 1, 3) = i
C列のi - st + 1行に、時系列の数字を入れる
If i < 0 Then
上の文は条件文といい、if以下が正しければThen以下を実行し、正しくないなら、Else以下に飛ぶ。ここではiという変数がマイナスである場合に式は正しくなる。
Cells(i - st + 1, 4) = Cells(i - st, 4) + (Range("b3") - Cells(i - st, 4)) * Range("b15") / Range("b19")
セルB3は室温、B15は放熱係数、B19は熱容量である。この式は、D列のi - st + 1番目の温度は一つ上のi - st番目の温度に室温と一つ上の炉の温度の差に放熱係数を掛けた放熱量を熱容量で割った分だけ変化するので、それを加算した温度になるという式になっている。
Else
上のifからElseまでで、時系列の値がマイナスの間は、ヒーターをOFFにして、初期温度と周囲の温度の差のみでホットステージの温度が変化するプロセスを記述している。
これ以降は、時系列がプラスになり、ヒーターに温度がかかるようになりうる状況の場合である。

If Cells(i - st - Range("b21"), 4) < Range("b2") Then
B21は遅れ係数を入れるセルで、この式は、遅れ係数も勘案した、前のセルの温度が目標温度よりも低い場合に、正しい文となり、次の文が実行される。
Cells(i - st + 1, 4) = Cells(i - st, 4) + (Range("b17") + (Range("b3") - Cells(i - st - 1, 4)) * Range("b15")) / Range("b19")
この文にはヒーターパワーのB17が入っており、先ほどの放熱のみの式と違って、発熱部分も入っている。つまり、目標温度より低かったら、ヒーターをONにすることになっている。
Else
Cells(i - st + 1, 4) = Cells(i - st, 4) + (Range("b3") - Cells(i - st - 1, 4)) * Range("b15") / Range("b19")
目標温度より高い場合にはヒーターは焚かずに放熱にまかせる指定になる。
End If
End If
Next i

プログラムは以上である。(実は、もうすこしややこしくなったプログラムをテキスト上で書き戻しているので、ミスが含まれているかもしれない。)なお、実際には、上のプログラムは

Sub ONOF()

End Sub

という部分に挟まれている。
このプログラムを動かすと、当たり前であるけれども、パラメータが同じなら。エクセルシートの計算式を書き込んだ場合と同じ結果が得られる。違いは、ファイルサイズで、エクセルシートに式を書き込むのに比べて遙かに小さなサイズになる。
[PR]
by zam20f2 | 2010-05-15 21:17 | 科学系 | Comments(0)
<< 温度調節(7) (自宅でできる... 写真撮影(2) (自宅でできる... >>