数値の扱い方

使い方集

スポンサーリンク

LabVIEWでプログラムを書くときの強みの一つは、ユーザーインタフェースであるフロントパネルをドラッグアンドドロップの操作だけで簡単に構築することができることだと思います。

本ブログのまずこれのシリーズでは主にプログラムのアルゴリズムの部分の書き方について解説してきましたが、アルゴリズムを知っているだけではプログラムは書けず、どのような選択肢があるかということも知っておく必要があります。

使い方集は、まずこれのシリーズでステートマシンまでの知識はある程度知っている前提で、アルゴリズム以外に関わるプログラムの書き方について紹介するシリーズです。

本記事ではデータタイプの中の一つである数値データタイプについて紹介しています。

スポンサーリンク

数値データタイプの基本

プログラミングをしていく中で、恐らく最もよく使用するデータタイプが数値データタイプだと思います。

「12」や「7.5」などといった、単なる数値を扱うだけと侮るなかれ、表記法を正しく扱わないと意図した結果を得られないことにまず注意が必要です。

表記法は以下の図のように種類がわかれていて、それぞれで扱える数字の範囲が異なります。

U8やU16など、「U」がついているものはunsigned、つまり正負の符号がつかず、負の数を扱えません。一方でI8やI32など「I」がついているものはinteger、整数を扱え負の数も使用できますが、Uがつくものと比べると扱える数の絶対値は半分となります。

特に注意する必要があるのは演算をするときで、表記法が異なる数同士を例えば足し合わせるときには、どちらかの表記法に統一されます。

LabVIEW側でデータタイプを強制する際に付く、強制ドットと呼ばれる赤い丸ぽちを見たら要注意です。

上の図のように扱える数の範囲を超えたりすると、正しい計算結果にならないことに注意する必要があり、意図的に特定の表記方法にする場合には変換の関数を用います。

これで一安心・・・かと思いきや変換の関数を使用しただけでは表示が変わらない点も注意が必要です。

強制ドットがついている表示器では変換後の表示形式になっていないので、右クリックして「ソースに適応」させて初めて変換の意味が出てきます。

また、変換の関数の中で固定小数点変換だけ少し特殊で、変換先の固定小数点の定義を決める必要があります。

プロパティで変更できるデータタイプの設定であるワード長や整数ワード長によって表現できる数の大きさや精度が変わります。

例えば3.141592という浮動小数点の値を固定小数点に変換する際、ワード長が32ビットで整数ワード長が16ビットの場合には3.14158630などとなってしまいますが、整数ワード長を6ビットにすることで小数点部分の細かさをより細かく表せるようになり3.14159199などとなります。

足し算などの演算の話の延長で、数値の配列についてもここで触れておきます。

数値の配列が絡んだ演算には「配列と配列」以外に「配列とスカラー値」の計算ができます(配列ではない、単一の値を示している状態を、配列と区別してスカラー値と呼んでいます)。

配列同士の演算は、同じ指標番号の数字同士に演算が行われ、もし要素数が異なっている場合には要素数が少ない方の配列と同じ要素数の結果しか得られません。

一方、配列とスカラー値の演算は、すべての要素に対して行われます。

数値表示の扱いについて

プログラムの中で数値を扱う際に、場合によっては10進数以外の形式で扱うことがあります。

LabVIEWでは数値制御器、表示器ともに10進数以外に16進数、8進数、そしてバイナリ(2進数)で表すという設定を行うことができます。

これらは基数という設定で変更することができます。数値の制御器や表示器に対して基数を設定することもできますし、単に表示をするだけの用途であれば文字列への変換関数を使用することもできます。

数値を文字列データに置き換えるときには数値/文字列変換の関数が活躍しますが、バイナリ変換だけ他と異なり専用の関数がないため、「文字列にフォーマット」の関数を使用します(この関数は16進や8進にも対応できます)

また、プログラムによっては、数値に単位をつけたいという場合もあるかと思います。

LabVIEWで数値を扱う場合、通常では単位無しの状態ですが、単位を設定することができ、かつ単位換算を行わせることもできます。(整数データタイプでは扱えず、浮動小数点にする必要があります)

単位ラベルを表示してから、単位を手入力します。どのような単位が扱えるかはLabVIEWのヘルプで「LabVIEWで有効な単位」というトピックに一覧があります。

もし扱えない単位が記入された場合にはプログラムが実行できない(実行ボタンが壊れる)ので注意してください。

単位はプログラムの中で付与することもでき、変更することもできます。

単位変換という関数を使う方法があります。

数値のまとまりは、チャートやグラフで表示するとわかりやすいという場合も多いと思いますが、それらチャートやグラフにも単位付与の効果を反映させることができます。

基本単位をキャスト関数で単位を付与する方法を以下の図で紹介しています。

プログラム実行中に、チャートやグラフに表示されている単位の値を変える(以下の図ではmVとVを変えている)ことで、数値の表示も適切にスケールされて変化します。

複雑な計算は「フォーミュラ」で

LabVIEWで多くの数値データを扱う中で不便なのは、見た目がテキスト言語より複雑になりがちなところだと思います。

LabVIEWはデータのやり取りをワイヤ配線で表現するため、様々な制御器の値をあちこちで使用する場合ワイヤが多くなり見た目が複雑で読みにくくなりがちです。

そこで、フォーミュラノードを使用して見た目をスッキリさせることができます。テキスト表記で書くことで、一目で計算式全体が把握しやすくなります。

基本的に計算式を書いていくだけですが、テキスト打ちで面倒という場合には電卓のように計算式を構築できるExpress VIもあるのでこちらを使うのも手かなと思います。

Express VIを構成し終えるとそれぞれの変数に値を入れられるようになるので値を入力し、出力結果も簡単に得られます。

Express VIにCtrl + Hで表示できる詳細ヘルプを表示した状態でマウスを合わせると、どのような計算式が定義されているかを確認することもできます。

一方で、Express VIを右クリックしてサブVIに変換後、「フロントパネルを開く」とすると、中身のフォーミュラを見れるので、そのフォーミュラノードの中身をメインVIに移して、詳細ヘルプを使わず直接表示させることもできます。

見た目の良さと使い勝手の良さは異なる

演算の話はこれくらいにして、実際にユーザーが触れる、フロントパネル上の数値データの扱いについても見ていきます。

数あるデータタイプの中でも、数値データタイプはLabVIEWに用意されている制御器や表示器の種類がとても多いです。

アプリケーションの「雰囲気」にあったものを選べばいいのですが、例えばスライダーやタンクなどの制御器、表示器は具体的な値の調整/確認が分かりづらいという欠点があります。

そんなときには「デジタル表示」が有効です。これを有効にすることで、元々のスライダーやタンクの制御器/表示器は残しつつ、その具体的な値の設定/表示もしてくれるようになります。

入力値を細かく調整するために制御器と一緒に使用したり、ブロックダイアグラムでわざわざ表示器を配線する必要がなくなります。

また、デジタル表示自体をプログラム的に表示、非表示切り替えることができます。普段はいらないけれど微調整が必要な入力の時には手入力できるようにする、といった使い方ができます。

時間の計算

タイムスタンプデータも数値データタイプの制御器パレットに入っています。基本的に時間を指定したり表示したりするのに使用しますが、四則演算の関数と組み合わせることができます。

注意点としては、タイムスタンプデータと演算する対象は数値であり、タイムスタンプデータ同士での演算はできません。また、四則演算はタイムスタンプを秒単位に換算したときの値と行います。

なお、「四則」演算ができると書きましたが、基本的に使用されるのは和か差だと思います。積や商も、プログラムとして書くことができなくはないですが、実際使用される場面はほぼないと思います。

本記事では、LabVIEWでプログラムを作る上で頻繁に使用するであろう数値データタイプの扱いについて紹介しました。

計算をしたり、グラフに表示するのに何気なく使っているデータタイプだと思うので、少しLabVIEWを触ったことがある人なら見おぼえがある内容が多いと思いますが、もし知らなかったことがあれば今後のプログラム作りに活かしてもらえると嬉しいです。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました