eminus hatena lab

技術系のメモと解説

LabVIEWで電卓を作る(7): EnumとType Definition

今日は(休日なので)少し短い記事を。電卓には四則演算(足す引くかける割る)があるがそれを何らかの定数で表現しておくと場合分けがしやすい。単純に文字ベースの場合分けでも良いが、C言語にもあるように列挙型(enum)を使うとよりそれっぽくなる

Enumの作成

LabVIEWEnumはRing & Enumの中にある。RingとEnumで何が違うかは...そんなに意識していなかったが、調べたところ

https://knowledge.ni.com/KnowledgeArticleDetails?id=kA00Z000000P9NKSA0&l=en-US

  • Enumは連続したunsigned intが0から順に勝手に割り振られる
  • Ringはデフォルトでは上記と同じだが、小数点や連続しない数字など自由に設定できる
  • Case structureなどに繋いだ時はEnumは名前と紐付けられるが、Ringは数値扱いされる。また、ringはプログラム的に項目を編集できるがenumは定数なのでできない(ご指摘ありがとうございます)

らしい。今回は値そのものに特別な意味はないのでEnumでよい

項目(entry)の編集

Enumは最初は空で作成されるが、右クリックメニューからEdit Itemsとすると編集できる。電卓の場合、以下の演算子を定義する

  • Add: 加算
  • Subtract: 減算
  • Multiply: 乗法
  • Division: 除法
  • None: 何もしない演算子
  • Equal: イコール

Noneはプログラミング上の便宜のため、イコールは演算子に含めるかどうかは判断が分かれるだろうが、今回は同じくくりで処理することにする

Enumを別ファイルとして保存 (Type definition)

Enumで割り振られる番号は他の場所(VI中の別の場所で定数を定義したり、他のVI=サブVI)で使うと、あとで項目を追加したり順番を変えたりしたときに番号の不整合が生じてしまう。それを回避するためにEnumの情報を別ファイルとして保存することができる。保存は以下の手順でできる

  1. 右クリックメニューからMake Type Def.を行う
  2. 同じメニューからOpen Type Def.を押す
  3. Block Diagramのない新しいウィンドウが立ち上がる。これはControl(フロントパネルの部品)の定義ファイルになっていて、.ctlという拡張子になっている
  4. 好きな名前で保存する

f:id:eminus:20190113210745p:plain

演算子のType Definition

これ以降同じEnumの定義を参照するには今保存したファイルをドラッグ&ドロップすれば貼り付けることができる

更新履歴

  • 2019.01.16 タイトルを第7回に変更。(第6回を重複して作ってしまったのだが、第6回の方は動画に第6回と書いてあって変えるのが面倒なので)