eminus hatena lab

技術系のメモと解説

LabVIEWで電卓を作る(1): イントロ

ブログで何かを継続的に書くネタがないかと考えてみた結果、LabVIEWチュートリアル的な日本語の個人ブログってあまりないなぁ(需要がないか...?)と思ったので、電卓を作るというシリーズを始めてみようと思う。こういう解説系の記事は案外自分の勉強にもなるものなので前のブログでもよくやっていた。

ちなみに筆者はどういう立場かというと、実験系の研究室にいる大学院生で、実験装置の制御・データ解析にLabVIEWをつかっている。LabVIEW歴はかれこれ5年くらい。プログラミングとしてそれなりに経験がある(実験系の人間にしては、という意味。情報系の人には歯が立ちませぬ)のはJavaScript, C, Python, Matlabあたりで、ゴリゴリにはかけないが、まあ人並みだと思っている。

はじめに断っておくと、筆者はLabVIEWをほぼ独学でやっているので、一般的でない使い方や、こうやった方が楽だという点が多々あると思うのでもしご存じだったら指摘していただけると嬉しい。

LabVIEW*1とは

LabVIEWというのを知らない人のために解説すると、LabVIEW「ブロックダイアグラム」でプログラミングしていくプログラミング言語で、データの流れを「配線」で表現するため、文字ベースのプログラミングになじみがない人もとっつきやすい、ということになっている。また、グラフをリアルタイムで表示したりするGUIを作るのも他の言語と比べ、異常と言っても良いほど簡単なので、計測や簡単な解析プログラムを作るのにも便利。

もちろん値段もそこそこするのだが、学生や個人向けにはリーズナブルなものが発売されているので、趣味の電子工作等でもいつかのトランジスタ技術に紹介されるなど注目されている

以下ではLabVIEW 2017 Home and Student editionの英語版を例に紹介するが、もちろん日本語版もある。ただ、筆者は英語版に慣れているので日本語版での用語(制御器・表示器)などは結構適当になっている。英語表記もするので適宜読み替えてもらえると助かる

フロントパネル(front panel)とブロックダイアグラム(block diagram)

まずLabVIEWを起動するとスタート画面が表示される。LabVIEWのプログラムは通常、.viという拡張子で、これはvirtual instrument(仮想「装置」みたいな訳だろうか)と呼ばれる。まずはこのviを新規作成する。これはFileメニューから作成できる

VIを新規作成すると2つのウィンドウが立ち上がる(右下の透かしは学生版に表示されるが、大学などで契約する通常版には表示されない)

f:id:eminus:20190108225622p:plain

空のVIのフロントパネル

f:id:eminus:20190108225728p:plain

空のVIのブロックダイアグラム

フロントパネルは読んでそのまま、「見た目」を決める部分。ブロックダイアグラムもそのまま、ロジックを記述するのがこのウィンドウ。

また、LabVIEWの特徴的なのは「入出力」がすべてフロントパネル経由で行われるという点で、例えば次の例に示すように2つの数値を入力とし、1つの数値を出力するような場合、2つの入力の部品(コントロール=制御器:control)と1つの表示する部品(表示器: indicator)が必要になる。

Hello world

まず簡単な例として2つの入力の足し算をやってみよう。Controlを作るにはフロントパネルのウィンドウ上で右クリックをすると...

f:id:eminus:20190108230946p:plain

Control

こんなメニューが出てくる。さっきも言ったようにフロントパネル上の部品は基本的に普通のプログラミング言語でいう「変数」だと思えば良いので、変数の「型」に応じて部品がいくつかある。今回はNumeric(数値)の中にあるNumeric Control(日本語で何という訳か分からないが数値制御器?みたいな名前であろうと思う)を使う。Numeric Controlをクリックし、フロントパネルのウィンドウ上に貼り付ければOK。同じことを繰り返して2つの入力を作る。

f:id:eminus:20190108231654p:plain

2つの入力

ちなみに... 隣にNumeric Indicator(数値表示器)というのもあるが、これは基本的に出力専用だと思っておけば良い。逆になんちゃらcontrolの場合は基本的に入力専用。(基本的に、といったのは例外もあるという意味なのだがこの電卓を作る過程でそれを何度も使うことになると思う)

今回は出力が1つ必要なのでついでにNumeric Indicatorも配置してしまう*2

f:id:eminus:20190108231856p:plain

2入力1出力

ここで、左側2つは入力だが、右側のやつは出力なので背景がグレーになっている。また、部品の名前がNumeric, Numeric 2, Numeric 3 などとなっているがわかりにくいので名前の文字列をダブルクリックしてa, b, a+bなどに名前を変更しておこう。

文字ベースのプログラミングに慣れている人なら、これは変数宣言だと思ってもらえば、そう大きく間違った認識ではないと思う

ブロックダイアグラムの記述

もう一つのウィンドウ、ブロックダイアグラムに足し算を行ってindicatorに表示するという記述を行う。ブロックダイアグラムのウィンドウを開く(Ctrl+E)と、

f:id:eminus:20190108232456p:plain

入出力のblock diagram上での表示

このような部品がすでに配置されているはず。これらは直接front panelの部品と対応しており、アイコンの小さい三角の向きを見てもらえば直感的に分かるようにa,bは入力(数字がそのハコから出てくる)でa+bには数字を放り込めば画面に表示される。

さて、aとbを足してa+bに出力する、という作業をするには足し算をするという部品が必要だが、それも右クリックメニューから呼び出せる。メニューを表示すると様々なカテゴリーがあるが、四則演算等はNumericの中にある。その中から「Add」(加算)を選び、ブロックダイアグラムに貼る。

これも直感的だと思うが、三角の左側に入力端子が2つあり、右側には出力端子がある。端子をつなぐには、つなぎたい元の端子をクリックし(黒い点線が伸びるようになる)、次につなぐ先の端子をクリックすると接続される。配線の向きが違ったり、配線の型が端子と違ったりすると上手く動かない。(そう、配線には向きと変数の型がある)

f:id:eminus:20190108233444p:plain

足し算

この辺は文字で説明するよりやってみた方が早いと思うのでこの辺で説明はやめておく。極めて直感的なので問題なかろう

プログラムの実行

これでプログラムは完成したので後は実行すれば良い。Front panelでもBlock diagramでもよいが

f:id:eminus:20190108233908p:plain

実行のツールバーボタン

ツールバーにある右矢印アイコンを押せば良い。アイコンがこれとは違っている場合、実行できないエラーがあることを示している。アイコンを押すと何が問題か教えてくれるが、まぁ今回の例では間違いはあまり考えにくい

デフォルトでは入力a, bがどちらも0で出力もデフォルトで0が表示されているので、そのまま実行しても何も起きていないように見えるだろうが、例えば実行前に

f:id:eminus:20190108234256p:plain

Hello worldの初期値の例

と設定したあと(普通にキーボード入力すればよい)実行すれば

f:id:eminus:20190108234426p:plain

Hello worldの実行後

上記のように正しく計算結果が表示されていることがわかる

 

第二回はこちら:

eminus.hatenablog.com

更新履歴

  • 表記揺れ(LabViewLabVIEW、ブロック図→ブロックダイアグラム)修正
  • イントロ部分で独学でやったという言い訳を追加した

*1:VIEWは大文字が正式と教えてくれた方、ありがとうございます

*2:右クリックメニューからもっと簡単にindicatorやcontrolを作ることもできる。便利なテクニックも後でまとめたい