これは理学部 地球惑星科学科 地球物理 3年目後期に行われた 物理実験3 の一つ 気象計測に関するレポートである。
… 2 … 2 … 2 … 2 … 3 … 4 … 4 … 4 … 5 … 5 … 6 … 11 … 18 … 19 … 19 … 19 … 20 … 20 … 20 … 21 … 21 … 21 … 22 … 22 … 23 … 23 … 24 … 25 … 26 … 26 … 27 … 29 … 31 … 31 … 32 … 33 … 33 … 33 … 34 … 34 |
理学部 地球物理学科 3年目後期に行われた 物理実験3 の一つ 気象計測では、主に以下のものに関しての 知識、技術を習得することが目的であった。
結果的には 1、2 についてはおおむね目標を達成できたが、 3、4 に関しては実験が遅々として進まなかったために ほとんど行う事ができなかった。 (ただ、3 に関しては実験担当教官の一人である見延先生がいつの間にか 行っていたが)
目的と成果はともかく、本実験では主に以下の事をおこなった。
実験は 2班 各3名 で行ったため、各班ごとに役割を分担して作業を行った。 特にそう決めたわけではないが、私は主に LabVIEW に関しての作業を 行ったため、このレポートではその分野を中心にまとめる。 (正直に言えば、計測器の原理などに関しては結局ほとんど理解していない)
LabVIEW とは、C言語や Fortran 、Java などと同じように プログラミング言語の一つである。
ただ、一つ大きく違うのは C や Fortran は文字でプログラムを 作るのに対し、LabVIEW では グラフィカルにプログラムを作る ことができる点である。(というかグラフィカルにしか作れないのだが)
言葉だけではわかりにくいかもしれないので、以下に LabVIEW のプログラミング開発画面を紹介する。
例えば、Fortran で以下のような簡単な足し算のプログラムがあるとする。
program sample
integer :: x,y,ans
write(6,*) 'Please input number x= '
read(5,*) x
write(6,*) 'Please input number y= '
read(5,*) y
ans=x+y
write(6,*) 'x+y =',ans
end program sample
これを LabVIEW で書くと以下のようになる。
(多少細かい部分は異なるが…)
なお、LabVIEW では以下のものを「ダイアグラム」と呼んでいる。
また、先ほどの Fortran のプログラムでは数値の入力なども コマンドラインで行うが、LabVIEW ではプログラムの制御も グラフィカルに行う。 上記のプログラムは以下のような画面で制御する。 この画面を「パネル」と呼ぶ。
この「パネル」では数値だけではなく、リアルタイムで変化する グラフを表示する事もできる。 このような機能から、LabVIEW のプログラムは VI(Virtual Instruments:仮想計測器)とも呼ばれる。 本レポートでは、LabVIEW のプログラムのことを、 なんとなく「スクリプト」「プログラム」「VI」と呼び分けたりするが、 ほとんど皆、同じものである。
このように、文字列でプログラムを書くものと違って、 パズルを組み立てていく感じでプログラムを作成していった。 半年間 LabVIEW をさわってみて感じた良かった点、 悪かった点を挙げてみる。 (とはいえ、私は他に Fortran と Perl を少しさわったことが あるだけなのでまともな比較ではないと思うが)
もう一つの LabVIEW の特徴は計測器の制御に優れている事である。 本実験では4種類のインタフェースを通して、5種類の計測器からデータを 収集したが、ほとんど全てのものにすぐに使えるサンプルプログラムが 用意されていた。
使用する計測器に対応させて以下のようにインターフェースを用いたが、 これらのインターフェースは全て LabVIEW から制御できる。
計測器 インターフェース 風向・風速計 DAQ ボード 気圧計 温度・湿度センサー 転倒マス雨量計 カウンタ、DAQボード 超音波風速計 シリアルポート
ちなみに、インターフェースを4種類用いた、と書いたがここには3種類 しか書いていない。あと1つのインターフェースは GPIB という機器である。 GPIBは DAQボードの機能(後述)にさらにそれ自身が計測・表示する機能を 持ったインターフェースであったが、以下の 2点の理由から、 役目を DAQボードに譲り本実験では使用しないことにした。
なお、もちろん GPIB も LabVIEW から制御可能である.
GPIB ってこんなの
本実験では、LabVIEW で気象観測用のプログラムを作った。 (ほとんどはサンプルスクリプトに毛が生えた程度のものだが)
以下では、本実験でどのように各種の計測器用の LabVIEWのプログラムを 作成したのかを記す。 また、プログラム作成において必要となった各種計測器および 各種インターフェースに関する情報も付け加えていく。
これから風向・風速計、気圧計、 温度・湿度センサー、転倒マス雨量計 に関しての気象観測用プログラムの作成方法を述べるが、 それら 4つの計測器とコンピュータをつなぐインターフェース 「DAQ ボード」について少し述べる.
ちなみにこれが DAQボード
電源はコンピュータからもらってます |
中身にはこんな感じ(既に配線済み)
この線は計測機器とつながっている |
DAQ ボードは計測器とコンピュータとをつなぐインターフェース機器である。 DAQ ボードとコンピュータを接続するには DAQ ボード用の 専用インターフェースカードをコンピュータに取り付け、 それと DAQ ボードをコネクタでつなぐ。
コンピュータとコネクタの接続部(近すぎ) | DAQ ボードとコネクタの接続部(近すぎですって) |
DAQ ボードと計測機器をとの接続は銅線を用いる。 DAQ ボードにはアナログ入出力用の接続部が約 14個、 デジタル入出力用の接続部が約 8個ある。 (その他、アースや電源用の接続部とよくわからない部分の接続部を 加えると合わせて 68個の接続部がある。) なお、この接続部を「チャネル」と呼ぶ。
計測機器は DAQ ボードのチャネルのそれぞれと接続され、計測値を DAQ ボードに送る。DAQ ボードに送られてきたデータを コンピュータが LabVIEW で収集し、計測を行う。 DAQ ボードには複数のチャネルがあるため、 複数の計測機器を同時に制御可能である。
計測機器のうち、風向・風速計、気圧計、 温度・湿度センサーはアナログ出力なのでアナログチャネルに接続し、 転倒マス雨量計はカウンタを通してデジタル出力されるため、 デジタルチャネルに接続する。
なお、以下の記述において、DAQ ボード、計測器、電源間の配線に ついてはかなり半端な表現をしている。 これは、私が配線に関しては勉強をしなかったため (その分野は他のメンバーにまかせっきりにしてしまったため) 知識が無い(つまりは書きたくても書けない)ためである。 配線や計測器の原理については他のメンバーのレポートや資料、 または計測器に付属していた説明書などを参照していただきたい。 (責任逃れとか言わないでくれるとうれしい)
以上の理由から配線に関してはあまり触れない。 プログラム作成に際しては既に計測器とDAQボードが接続済み であることを前提として話を進める。
風向・風速計は文字通り風向及び風速を計測する 計測器である。
風向・風速計外観 (風車も本体もくるくる回る) |
この風向・風速計は、プロペラの回転から風速を、 本体自身の回転から風向を計測する。
この風向・風速計を DAQ ボードと接続し、DAQ ボードは コンピュータと接続する。この風向・風速計の計測値を DAQ ボードから取得する LabVIEW プログラムの作成の方法を 述べる。
なお、風向・風速計用 VI を作成するに当たって必要な 風向・風速計の特徴は以下のようなものである。
電圧 0.00V 0.25V 0.50V 0.75V 1.00V 方角 北風 東風 南風 西風 北風
本実験で使用するプログラムに求められるのは主に以下の 4点である。
DAQ ボードを制御するプログラムを作る一番の近道は サンプルプログラムを拝借してしまうことである。 LabVIEW には数多くのサンプルスクリプトやサブルーチンが 用意されている。 先ほども書いたように、LabVIEW は計測機器の制御に優れている プログラムである事から、計測機器に関してのプログラムの蓄積も多い。 DAQ ボードも例外ではなく、すぐに使えるサンプルスクリプトが 存在する。
以下、DAQ ボードを制御するためのプログラムの作成手順である。
DAQ ボードを制御する際には、まず「チャネル」についての 設定を行う必要がある。 ただ、その前にどのチャネルをどの計測器用に使用するのか決めなければ ならない。 しかし、まだ個々の計測器に関する説明も足りないため、 各プログラムを作成するたびにどのチャネルをどの計測器に割り当てるのか 決めていく事にする。
今回の実験では
に割り当てた。ちなみに「ACH」とは「アナログチャネル」のことである。 それと、アナログチャネルはたいてい 2つセットで使用することを 付け加えておく。
では、チャネル設定の手順を説明する。 以下は、風速のチャネル設定(ACH0 - ACH8)の例である。
設定画面 項目 設定値 新規チャネルを作成 チャネルの種類 アナログ入力 チャネル名と説明を入力 チャネル名 ACH0 - ACH8 (作成者がわかっていれば何でも良い) チャネルの説明 (書いても書かなくても良い) チャネルウィザード1 センサまたは測定の種類 電圧 チャネルウィザード2 単位と範囲 変更なし チャネルウィザード3 スケーリング 変更なし チャネルウィザード4 DAQ ハードウェア Dev1 : PCI-6024E(使用しているDAQ ボード名) 使用するチャネル 0 (<==> ピン: (+)ACH0 (-)ACH8 ) アナログ入力モード 差動 なお、ここの設定は以後も MAXにて変更可能である。
設定画面 項目 設定値 チャネル名と説明を入力 チャネル名 ACH1 - ACH9 (先ほどとは違うものにするのを勧める) チャネルの説明 (書いても書かなくても良い) チャネルウィザード4 DAQ ハードウェア Dev1 : PCI-6024E(使用しているDAQ ボード名) 使用するチャネル 1 (<==> ピン: (+)ACH1 (-)ACH9 ) アナログ入力モード 差動
サンプルスクリプト集「ソリューションギャラリー」から DAQ ボード制御用のプログラムを呼び出す。
このサンプルスクリプトを使って DAQ ボードから風速の値 を取得してみる。 なお、この作業は風向・風速計、DAQ ボード、電源、 コンピュータを正しく接続してから行っていることを前提にしている。
はじめの状態のだと、グラフの電圧の表示範囲が -5 〜 100 V に なっているため上下の変動が全然見えない。 グラフのY軸の数値も2桁までしかないため、見づらい。
また、右の数値も小数点 2 桁までしか見えないため、 風速の計測には大雑把過ぎる。 (通常だと風速計から出る電圧の範囲はせいぜい 0.00V 〜 0.05V)
それと、風速計の仕様なのか、 風が無い場所でも 0.04V(0.2 m/s 相当)の 電圧が流れるようだ。
これを押してストップさせた後 こうして こうすると こうなる ⇒ ⇒ グラフの Y軸の数値も始めは小数点以下を表示しない。 表示させたい時は、Y軸の数字を右クリックし、 「形式」を選択する。 すると、形式の設定画面が出てくるので、そこで 小数点以下の桁数を設定すると良い。
グラフの Y軸の数値で整数を2桁以上表示させたい時は、 グラフ上で右クリックし、「Y軸」→「スケールラベルを表示」 にチェックをつけるとよい。
こうすると こんなものが出てくる ⇒ そこで虫眼鏡(?)をクリックしてから右上のものを選び、 グラフ上で一部を選択すると、引き伸ばされたグラフが 表示される。
⇒ ⇒
最大値を設定 最小値を設定
もちろん今回の設定は風速用に合わせたものなので、 他の計測機器に関しては、その出力される値に合った 設定を行う。
これは、今回呼び出したサンプルVIがもう一つ別のサブルーチンを 含んでいるためである。 もちろん、今回の風速計用VIはこのサブルーチンが無いと動かない ため、保存する必要がある。 保存する場所は今回の風速計用VIと同じ場所で良いだろう。
今度は、計測したデータを保存する方法である。 たいていコンピュータではデータの保存は「ファイルに書き出す」という 方法で行う。今回も同様の方法を使う。
今回は、いよいよ VI のプログラムの内部(「ダイアグラム」と呼ぶ) を編集する事になる。
ダイアグラムを表示するには、「ウィンドウ」→「ダイアグラムを表示」 とする。
すると、以下のようなダイアグラムが表示される。
大きく2ブロックに分かれていると思う。
左の青丸でくくられたブロックは
[5.2.4] で触れたサブルーチンを含むブロックで、
直接編集する事はない。(というか難しそうなので編集できない)
右の赤丸でくくられたブロックは
「パネル」に表示される数値やグラフと直接関係する部分で
主にこちらを編集していく事になる。
上記の赤丸でくくられたブロックについて 簡単な解説を行う。
こちらパネル こちらダイアグラム
同じ色の丸でくくられたものが対応したものである。 以下、簡単な説明。
なお、この対応はダイアグラムでその「端子アイコン」 を矢印ツールでダブルクリックすると 見る事ができる。
少しわき道にそれて、計測時間間隔を設定できるようにする。 (間隔が1000ミリ秒だと長期観測には向かない)
⇒
⇒
ファイルへの書き込みを行うためには、 ここまでで使用したことの無い端子アイコンを使用する必要がある。 このような場合は「サンプルの検索」 を使って目的のサンプル VI を探すと良い。
上記で開いたサンプルVIの「ファイルへの書き込み」部分は 以下の 2つである。
これが全体図で下が拡大図 こちらが「ファイルを開く」端子アイコン こちらが開いたファイルに「書き込む」端子アイコン
ちなみに、「ヘルプ」をクリックすると、それぞれの端子アイコンに ついての情報を見る事ができる。
この2つの端子アイコンを風速計用のVI にコピーする。
(ドラッグ & ドロップで簡単にできる)
ただし、2つ同時に移動はしないほうが良い。
「ファイルを開く」端子アイコンとその周りのものを選択
風速計用 VI のここらへんにコピー (while ループを矢印ツールで広げてある)
「書き込み(Write File)」端子アイコンは 風速計用 VI のここらへんにコピー
風速計VIでもさきほどのサンプルVIと同じように 「ファイルを開く」端子アイコンと「ファイルに書き込む」 端子アイコンを結線する。
ここと ここを こんな感じで
この「結線」には下の「糸ツール」を使用する。
「計測値(数値)」端子アイコンと「書き込み」端子アイコンを つなぎ、開いたファイルにデータを書き込むようにする。
ただし、やってみるとわかるが直接結線してデータをとっても まともな数値をとることはできない。 なぜなら、「Write File」端子アイコンは数値データを 直接取り込む事ができないからである。
よって、数値データを文字列データに変換する必要がある。
この変換には「To Fractional」端子アイコンを用いる。 このアイコンは「関数」→「文字列」→「文字列/数値変換」→ 「To Fractional」として使用できる。
この端子アイコンを間に挟むと、「Write File」アイコンで ファイルに保存する事ができるようになる。
「To Fractional」アイコン こんなふうに間に挟む
以上の作業で、データを保存できるようになるはずである。 プログラムを実行してファイルにデータを書き込んでみる。
すると、数値は保存できているはずである。 ただし、一つの数値ごとに改行されてはおらず、 数値同士の間に変な文字が挟まっているはずである。 これについては、あとで出力形式を整えるので気にしなくてよい。
上記の作業までで、最低限のデータ保存はできるようになったが、 いくつか計測に役立つことを記す。
一つは、保存ファイルの位置を「パネル」から指定することである。 「関数」→「ファイル I/O」→「ファイル定数」→「パス定数」 を呼び出し、それを「制御器」に変更して 「ファイルを開く」端子アイコンの「ファイルパス」と結線する。
「パス定数」を「パス制御器にして」 「ファイルを開く」と結線する。
すると、「パネル」に下記のようなものができる。 ここに保存する位置とファイル名を指定すると、 毎回、プログラム実行時に保存するファイルの名前や位置について 聞かれずに済む。
ついでに「default name(書き出すファイル名の名前)」も制御器 にしておく。
[5.3.8] では、保存されたデータがちゃんと整列されたものに
なっていなかったはずである。
ここで、復帰改行文字などを出力データと組み合わせ、
見やすいデータを出力するようにする。
また、データを取得した際に、それがいつのものかわからないと
解析や比較に不便なため、
データに時間を付加する。
ちなみに「Format Date/Time String」は「関数」→「時間」にあり、 「Concatenate Strings」、「タブ」、「復帰改行」は 「関数」→「文字列」にある。
日時を取得 複数要素を結合
(右クリックで結合できる
要素の数を増減できる)タブ文字 復帰改行文字
02/02/10 06:58:01 0.018799
02/02/10 07:08:02 0.009033
02/02/10 07:18:03 0.024902
02/02/10 07:28:04 0.014893
02/02/10 07:38:05 0.023926
なお、この時間はコンピュータの内部時計に依存するので、 コンピュータの時間が正しいか確認する事。
本プログラムでは、プログラムを実行する際に、書き込むファイル が既に存在している時は以下のような確認ダイアログが 出てきて上書きしてよいか尋ねてくる。 「キャンセル」とすればデータが保存されず、 「置換」とすると以前のデータは削除される。
前回のデータを残しておく場合には、 先にそのデータを他の保管場所へ移動しておくこと
計測器からの出力電圧をそのまま取得する事はできるようになった。 その計測値をなんらかの他のプログラムで風速値に変換しても良いが、 LabVIEW 自体で風速値に変換する事もできる。 以下では、出力電圧値を風速値に変換する方法を記す。
[5.1] 風向風速計の特徴 にて 「風速は [出力される電圧(単位 V)] x 50 で求められる。 (風速の単位は m/s)ちなみに、有効測定限界は 1V (つまり風速 50 m/s)まで」 と書いた。 これより、計測値(単位 V)に 50 を単純に掛ければ 風速値(単位 m/s)が求まる。
風向計は出力電圧範囲が 0V 〜 1V と決まっており、 ([5.1] 風向風速計の特徴 参照) そのままの値でもわかりやすかったため、 変換を行わなかった。角度などに変換したい場合は 上記の風速計を例にして行うと良い。
気圧計は文字通り気圧を計測する 計測器である。
気圧計(正面図) | 気圧計(斜め下より) |
この気圧計を DAQ ボードと接続し、DAQ ボードは コンピュータと接続する。この気圧計の計測値を DAQ ボードから取得する LabVIEW プログラムの作成の方法を 述べる。
なお、気圧計用 VI を作成するに当たって必要な 気圧計の特徴は以下のようなものである。
行う作業は 風向・風速計での [5.2] DAQ ボードを制御する。 とほぼ同じである。
ただし、使用するチャネルは
とした。
気圧計も、出力は電圧なので
MAX(Measurement&Automationエクスプローラ)
にて気圧用に新規アナログチャネルを作る際は、
以下の赤く記してある部分以外は風速や風向と同じように作成する。
設定画面 項目 設定値 チャネル名と説明を入力 チャネル名 ACH2 - ACH10 チャネルの説明 (書いても書かなくても良い) チャネルウィザード4 DAQ ハードウェア Dev1 : PCI-6024E(使用しているDAQ ボード名) 使用するチャネル 2 (<==> ピン: (+)ACH2 (-)ACH8 ) アナログ入力モード 差動
その後のサンプルスクリプトの呼び出しや設定は 風向・風速計の時と同じなのでそちらを参考してほしい。
ただし、新しくサンプルスクリプトから同じ手順を繰り返さずとも、 風速計や風向計のスクリプトをコピーし、それを編集したほうが 手っ取り早い。
風速計のVIをコピーして使用する場合、 「パネル」上の「チャネル」「パス」「出力ファイル名」を変更する 必要がある。 ただし、普通に「ファイル」→「保存」とするだけでは この設定は保存されない。
この場合は「操作」→「現在のすべての設定をデフォルト設定にする」 を選択してから「ファイル」→「保存」とすると パネル上の設定値が保存される。
ここで行う作業は風向・風速計での [5.3] 計測値を保存する。 と全く同じなため、そちらを参照して作業を行う。 (風速計用 VI をコピーしてから編集する場合はこの作業は必要ない。)
ここで行う作業は風向・風速計での [5.4] 風速計からの出力電圧を風速値に変換する 場合とほとんど同じである。
異なるのは「気圧は ([出力される電圧(単位 V)] x 184)+ 600 で求められる。 (気圧の単位は hPa) 」 ことである。 よって、以前に使用した「Multiply」端子アイコンに加え、足し算用の 「Add」端子アイコンを組み合わせて使用する。
結果こんな感じになる
温度・湿度センサーは文字通り温度及び湿度を計測する 計測器である。
外見はこんなで | 中身にこんなのが入っている(ピンボケだし) |
この温度・湿度センサーを DAQ ボードと接続し、DAQ ボードは コンピュータと接続する。この温度・湿度センサーの計測値を DAQ ボードから取得する LabVIEW プログラムの作成の方法を 述べる。
なお、温度・湿度センサー用 VI を作成するに当たって必要な 温度・湿度センサーの特徴は以下のようなものである。
行う作業は 風向・風速計での [5.2] DAQ ボードを制御する。 とほぼ同じである。
ただし、使用するチャネルは
とした。
温度・湿度センサーも、出力は電圧なので
MAX(Measurement&Automationエクスプローラ)
にて温度用と湿度用に新規アナログチャネルを作る際は、
以下の赤く記してある部分以外は風速や風向と同じように作成する。
設定画面 項目 設定値 チャネル名と説明を入力 チャネル名 ACH3 - ACH11 (温度用)
ACH4 - ACH12 (湿度用)チャネルの説明 (書いても書かなくても良い) チャネルウィザード4 DAQ ハードウェア Dev1 : PCI-6024E(使用しているDAQ ボード名) 使用するチャネル 3 (<==> ピン: (+)ACH3 (-)ACH11 )
4 (<==> ピン: (+)ACH4 (-)ACH12 )アナログ入力モード 差動
その後のサンプルスクリプトの呼び出しや設定は 風向・風速計の時と同じなのでそちらを参考してほしい。
ただし、新しくサンプルスクリプトから同じ手順を繰り返さずとも、 風速計や風向計のスクリプトをコピーし、それを編集したほうが 手っ取り早い。
ここで行う作業は風向・風速計での [5.3] 計測値を保存する。 と全く同じなため、そちらを参照して作業を行う。 (風速計用 VI をコピーしてから編集する場合はこの作業は必要ない。)
ここで行う作業は風向・風速計での [5.4] 風速計からの出力電圧を風速値に変換する 場合とほとんど同じである。
異なるのは「気温は ([出力される電圧(単位 V)] x 100)- 40 で求められる。 (気温の単位は ℃) 」であり、 「湿度は [出力される電圧(単位 V)] x 100 で求められる。 (ここの「湿度」とは相対湿度のことで単位は %) 」 であることである。 いままでの作業を応用するだけなので説明は割愛する。
温度はこんな感じになる
湿度はこんな感じになる
転倒マス雨量計は降雨量を計測する 計測器である。
外見はこんなで | 雨でこのマスが左右に倒れて信号を送る |
簡単にこの転倒マス雨量計の説明をする。
雨がこの雨量計上に降ると、その雨は雨量計上部の漏斗部分で一点に 集められ、その下にあるマスに流れ落ちる。 マスは、その中に 0.1mm の雨量がたまった時点で倒れ、 次はもう一方のマスに雨が流れ落ちるようになる。 このマスが倒れる時に雨量計から信号が送られるようになっている。 (具体的には「信号が送られる」とは「電圧がかかる」ということ)
雨量計の場合は、雨量計とDAQボードを直接つなぐのではなく、 その間に「カウンタ」を挟む。 「カウンタ」とは雨量計から信号が送られてくる回数を蓄積しておく 装置である。 DAQ ボードはその「カウンタ」に蓄積されている「信号の回数」 を読み取り、その回数をコンピュータに送ることで 雨量を計測する。
なお、本実験で使用した「カウンタ」は学生達で作成したものである。 (教官のアイディアの元、基盤に抵抗やコンデンサなどをはんだづけした) この仕組みも詳しく解説できれば良かったのだが私の理解が足りないため ここでは省略する。詳しくは他のメンバーの資料を参照してほしい。
これがお手製カウンタ | ランプで「信号が送られてきた回数」がわかるようになってる |
以下では、このカウンタに蓄えられている「信号の回数」を DAQ ボードから取得する LabVIEW プログラムの作成の方法を 述べる。
なお、転倒マス雨量計用 VI を作成するに当たって必要な 転倒マス雨量計、及びカウンタの特徴は以下のようなものである。
今度はデジタル入力を制御するが、VI に必要な条件は
[5.2] DAQ ボードを制御する。
で挙げた4つと変わらない。
また、サンプルプログラムを拝借してしまうことが
近道なのも変わらない。
今回はデジタル入力なため、デジタル入出力のできる 「DIO(デジタルI/O[入出力])」を使用する。 なお、デジタルのチャネルを「ライン」とも呼び、 ラインを束ねたもの(ここでは DIO0 〜 DIO7)を「ポート」と呼ぶ。 (「チャネル」とはこの「ライン」も「ポート」も含めた名称)
カウンタにたくわえられる「信号の回数」は 7bit (128回)までなので、 1bit につき一つの DIO が必要になる。 よって、DIO0 〜 DIO6 までを使用することになる。
設定画面 項目 設定値 新規チャネルを作成 チャネルの種類 デジタル I/O チャネル名と説明を入力 チャネル名 DIO (作成者がわかっていれば何でも良い) チャネルの説明 (書いても書かなくても良い) チャネルウィザード1 デジタルタイプ ポートから読み取る チャネルウィザード2 DAQ ハードウェア Dev1 : PCI-6024E(使用しているDAQ ボード名) 使用するポート DIO チャネルウィザード3 反転するライン 「7」にだけチェックを入れる。
理由:DIO7 には何も接続しないため、 常にONになってしまう。これをOFFにしておくため。
サンプルスクリプト集「カスタムDAQアプリケーション」から DAQ ボード制御用(デジタル入出力用)のプログラムを呼び出す。
このサンプルスクリプトを使って カウンタから回数 を取得してみる。
「パネル」でこうなっていて カウンタもこうなっている
今回のプログラムでは、計測のたびにカウンタの蓄積回数を リセットしない。 よって、計測する回数(つまりは雨量)は 計測開始からの累積回数(雨量)となる。 単位時間の雨量を求めたい場合は、 そのために工夫をする必要があるが、 今回の実験では行わなかった。
他に、カウンタの特徴の部分にも書いたが、このカウンタは 7bit (128)までしか回数を蓄積できない。 その回数を超えた場合、再びカウントは 0 に戻る。 つまり、12.8 mm 以上の降雨があった場合は、 測定値は 0.0 mm に戻ってしまう。 それをふまえて以下の VI を使う事
「パネル」に表示された回数をファイルに書き出す。 基本的には風向・風速計用VIの時の [5.3] 計測値を保存する。 と同じである。
「パネル」の「パターン」を矢印ツールでダブルクリックすればわかるが、 今回保存すべき数値は以下の「pattern」である。
このサンプルスクリプトは計測時間間隔が始め 0.1 秒に設定されている。 風向・風速計 VI のところの [5.3.3] 計測時間間隔の設定と 同様に「パネル」から設定できるようにする。
ファイルへの書き込みを行うためには 風向・風速計用 VI の [5.3.4] 〜 [5.3.10] と同様に作業を行う。
このような感じとなる。 (上記のVIでは回数に「0.1」を掛けて、 雨量に変換している。)
超音波風速計は超音波で以下の 5 つについて計測を行う 計測器である。
これが超音波風速計 | この6 点から超音波が出ている(はず) |
この超音波風速計は他の計測器と異なり、DAQ ボードを介さない。 コンピュータについているシリアルポートに直接つないで 計測値を取得する。
以下では、超音波風速計からシリアルポートを介して 計測値を取得する LabVIEW プログラムの作成の方法を 述べる。
なお、超音波風速計用 VI を作成するに当たって必要な 超音波風速計の特徴は以下のようなものである。
今回はシリアルポートから直接データが送られてくるため、 [5.2] DAQ ボードを制御する。 とは異なって以下の条件が求められる。
しかし、サンプルプログラムを拝借してしまうことが 近道なのは相変わらずである。
サンプルスクリプトを呼び出す。 ただし、今回は「DAQ ソリューション」は使用しない。 今回は「サンプルの検索」でサンプルスクリプトを呼び出す。
とりあえず、プログラムをスタートさせてみる。 すると、以下のように変な文字列が読み取られるはずである。
これは、以下の「ボーレート」と「読み取りバイト」の値が 超音波風速計に対応していないからである。
「ボーレート」を「38400」に、 「読み取りバイト」を「35」にすると 以下のように正常に計測値を読み取る事ができる。
※ただし、十数回に一回ぐらいの割合でデータが ずれて読み取られてしまう。(原因不明)
数値が5つ取得できるが、左から
である。
この変更を保存するには「操作」→ 「現在のすべての設定をデフォルト設定にする」とした後、 VI を保存すると良い。
「パネル」に表示された「シリアル読み取り」をファイルに書き出す。 基本的には風向・風速計用VIの時の [5.3] 計測値を保存する。 と同じだが、 このサンプルプログラムは一度実行すると一度データを読み込んで 終了してしまうため、連続で実行できるようにする必要もある。 (「連続実行」というボタンもあるが、ファイルに書き込むようにすると 毎回の実行時にファイルの上書き確認をされてしまう。 試してみるとよいかもしれない)
「パネル」の「シリアル読み取り」を矢印ツールで ダブルクリックすればわかるが、 今回保存すべき数値は以下の「Serial Read」である。
↓
このサンプル VI は他の計測器用のVI と違って一度実行すると 一回計測して終了してしまうため、 while ループでこのプログラム全体をくくって連続実行できる ようにする。 (ちなみに他のVIは始めから while ループ がかかっている)
一番外の枠が While ループ
これを使う 「パネル」には「停止スイッチ」が出現
メトロノーム型アイコン 制御器と結線して While ループの時間間隔を制御
ファイルへの書き込みを行うためには 風向・風速計用 VI の [5.3.4] 〜 [5.3.10] と同様に作業を行う。
ただし、今回はシークエンス(分岐構文)があるため、 結線に気をつける。
具体的には、下図のように結線した場合、もう一つの分岐の方に 結線されていないのでプログラムが動かない。
中が白の四角は結線が ちゃんと行われていないことを示している
ちゃんと中に色がついていたら ちゃんと結線できている事を示している
完成図
以上で5種類の計測器に使用する VI が完成した。
観測機器や LabVIEW の準備を終えて、実際の気象観測を 始めたのは 2002/01/23 からであった。 ここでは、実際に行った気象観測について述べる。
既に冬も半ばに入り、遠距離に観測機器を運ぶのも難儀だったため、 観測機器は、観測部屋の窓から見える場所に設置した。 外部に設置した計測器は
の4つで、気圧計は室内でも屋外でもよかったため、屋内に設置した。
観測機器 | 温度・湿度センサーは何故か遠くに |
観測部屋では、いままでに作成した VI を利用して外部の観測機器 からのデータを収集した。
計測中の画面 左上:風速計、中上:気温計、右上:気圧計、
左中:風向計、中中:湿度計、右中:雨量計、
下:超音波風速計
データを取得できた期間は以下のとおり (2002/02/10 現在)
データの取得間隔は 10分(600秒)である。
ここまでの作業で期間のほとんどを使ってしまい、 本格的に Matlab を勉強することはできなかった。 ただ、せっかく手に入れたデータをせめてグラフ化くらいはしたいと思い、 Matlab でデータのグラフ化を行った。
データをMatlabでグラフ化する方法について非常に簡単に述べる。 以下、最低限「グラフ化」のみする方法である。
「C:\data\2002_02_04\temperature.dat」 (2002/01/30 13:10 〜 2002/02/04 14:00 の気温のデータ) をグラフ化しようとする。
Matlab はコマンドラインで操作するソフトである。 コマンドは以下のように表記する。なお、 行頭の「>>」は入力する必要は無い。
>> コマンド
>> load C:\data\2002_02_04\temperature.dat
02/01/30 13:10:17 -1.425781 02/01/30 13:20:17 -1.181641 02/01/30 13:30:17 -1.669922 02/01/30 13:40:17 -1.425781 02/01/30 13:50:17 -1.425781 02/01/30 14:00:17 -1.669922
>> plot(temperature(:,3))ちなみに書式は
>> plot(拡張子を除いたファイル名(:,取り込みたいデータの列))
x軸が「何番目のデータであるか」を示し、 y軸は気温を示す。
以上が、私がこの気象実験にて行ったことである。 本レポートでは、LabVIEW の使い方に重点を置いた。 他に、計測器の設置や GPIB に 関しても数週間を費やしたが、本レポートでは触れなかった。
結果的には、目標の全てに関して実施できたわけではないので 尻切れトンボな感が無くもないが、 「観測器を用いて気象観測の準備を行い、観測を行う」ことは できたので良しとしたい。 また、気象観測機器を直接触る事ができ、 多少なりともその原理や特徴を知る機会はおそらくこの実験を 履修しなければ得られなかったことと思う。
最後に、半年間御教授頂いた教官やTAのみなさま、 また、一緒に助け合いながら(?)実験を行ったみなさま、 その他、お世話になった方々に 心より御礼申し上げます。