つまづいた人がキャリアアップするための”中小企業への転職&仕事術”ブログ

氷河期の本格ものづくり

【LabVIEW】ステートマシンを作ろう!

こんにちは、1つのステートで人生を乗り切ろうとしている氷河期の住人だよ。

前回のストラクチャ関数で、だいたい基本的な関数は全て紹介しました。

ここからは実際のプログラムのように、組み合わせて使うことを中心に書いていきます。

ステートマシンって何?

ネットで調べると専門用語だらけでワケわからなかったので、LabVIEWで使うためだけに簡単に説明します。

ステート=状態 、つまり「状態」をいろいろ切り替えながら制御をするというものです。

例えばこんな風に、私のステート(状態)を3つに表したとします。

  • 平日の朝が来ると、「家」から「会社」に状態(あくまで例なので)が変わります。
  • 仕事が終わると、「会社」から「家」に状態が変わります。
  • 休日になると「家」から「アウトレットモール」に状態が変わります。
  • アウトレットモールで散財しきってしまうと、「アウトレットモール」から「家」に状態が変わります。
これで表現できる君の人生っていったい・・・
ぞう
ぞう

・・・かなり無理矢理な説明ですが、こんな感じで入力などによって状態を切り替えられるようなプログラムを「ステートマシン」って言います。

ステートマシンの作りかた

構成要素

今まで説明してきた関数の組み合わせでステートマシンは構成されます。

  • Whileループ
  • ケースストラクチャ
  • シフトレジスタ

全部前回の記事「ストラクチャ関数の使い方とは?」で説明をしたものばかりです。

これにもう一つ、「列挙体」をくわえないとステートが増やせません。

列挙体とは?

簡単に言うと、「数字と名前を紐づけたリスト」です。

なんで紐づけるん?
ぞう
ぞう

状態を「0」「2」とか言われてもよくわかりませんが、「動作中」「非常停止時」とか書くと状態ってわかりやすいですよね。でもプログラム的に文字列というのは厄介なので、数字を紐づけたリストを作っておくとわかりやすいということです。

コントロールパネルの「Ring&Enum」→「Enum」にあります。配置できるのですが、最初は中身が空っぽで全く使えません。なので列挙体を右クリック「プロパティ」を選択。

開いた画面「Edit Items」のタブをクリック、「Insert」で中のリストを作っていきます。

 

・・さっきの例をそのままあてはめてみます。

こんな感じで、文字と数字が紐づけられました。では順番にステートマシンを組んでいきます。

①ケースストラクチャに列挙体を接続

ケースストラクチャとは、例えばTrueかFalseといったケースによって中身を入れ替えるストラクチャでしたね。

このケースストラクチャに列挙体をつなげてみましょう。

Boolean以外も接続できるの?
ぞう
ぞう

そうなんです、列挙体が接続できるから、ステートマシンが組めるのです。(ブールか整数なら繋げます)

ではさっそく先ほどの列挙体にケースストラクチャをつないでみます。ケースストラクチャ左にある「?」に列挙体を結線すると・・

ケースストラクチャのケース名が「家」になりました!

あれ?ステートが足りないよ・・
ぞう
ぞう

・・本当です。「会社」と「アウトレットモール」がありませんね。でも落ち着いてください。

ケース選択の矢印を右クリックすると、「Add Case for Every Value」というのが出てきます。「すべての値にケースを追加する」ということ・・かな?

これで全ケースが表示されるようになります。

 

これで、さっき作った列挙体のアイテム4つのステートができました。あとはシフトレジスタにステートを記憶させつつループさせます。

②Whileループを作る

先ほど作ったケースストラクチャをWhileループで囲みます。

ここでは停止条件に定数「F」をつないでいます。停止条件がないので、実行すると無限にループを繰り返します。(画面上の停止ボタンで止められますが)

③シフトレジスタを設置する

ケースストラクチャをWhileループで囲んだだけではステートマシンになりません。前のループのときのステートを記憶して呼び出せるようにしないといけませんね。

下の状態で、Whileループ左の青いトンネルを右クリックすると、「Replace with Shift Register」ってのが出てきます。「シフトレジスタに置き換える」ですね。

これを選択すると、シフトレジスタがWhileループの左右に出てきます。

これで所望のステートに切り替えられるようにプログラムを組めば、ステートマシンの完成です!

実際に組んでみる

ではせっかくなので、平日は会社に行って休日はアウトレットに行く日常をステートマシンで組んでみましょう。

・・・サブVIを使わず全て平書きですが、こんな感じでございます。これで実行すると、平日8時に出勤して17時に帰宅、休日はアウトレットモールで散財します。

世界一ムダなステートマシンだね
ぞう
ぞう

次回はこれの詳細を説明しつつ、細かいテクニックをご紹介します。

おわりに

ここまで見て頂き、ありがとうございました。

ステートマシン、作れそうですか?

他の言語、Cとかでもcase文使えばできますが、LabVIEWだと全体のイメージがわかりやすくていいですよね。

実機がなくてもシミュレーションで楽しめるので、よほどヒマだったらぜひ上のステートマシンを試してみてください。

<PR>ルンバやブラーバももちろんプログラムで動いてるよ。ロボットプログラミングの傑作だね!

ストラクチャ関数の使い方とは?

こんにちは。月曜から金曜まで会社と家をループしている氷河期の住人だよ。

とりあえず計算に必要な関数はひととおり使えるようになりましたか?

プログラムを組もうとすると、もちろんこれだけでは足りません。

今回はプログラムを作る上で必須ともいえる、ストラクチャについて説明します。

続きを読む

意外と知らない?ボルトと座金の正しい使い方と選び方

どうもこんにちは、氷河期の住人だよ。

メカ屋さんのみなさん、ちゃんとボルト使えてますか?

当たり前のことを聞かないでよ
ぞう
ぞう

・・・ただ何となくでボルトの大きさや本数を決めてないですか?

当たり前ですが、ボルトにはちゃんとした選定のしかたがあります。これをわかった上で設計を進めないと、ある日ボルトが折れて大事故に・・・

なんてことが起こりえるのが我々製造業の世界でございます。

今回は簡単な選定方法と、それにまつわるモノの効果などもまとめてみました。

安心して設計するために、以下がポイントです。

Point!〇 ボルトの種類についてちゃんと知る
〇 簡単な計算方法について知っておく
〇 座金の使い方をおさらいする

続きを読む

論理回路を扱ってみよう!【LabVIEW】


こんにちは。いつも論理が破綻している氷河期の住人だよ。

さっそくですが、論理回路はご存知ですか?

プログラミングするには必須なんですが、当然LabVIEWにも論理回路はあります。

ポイントですが、そんなにありません。しいて言うなら下の2つです。

Point!同じANDやORでもバリエーションがあるので、見やすいものを選ぼう
包含はよくわからないし、たぶん使わないので置いとこう

論理回路を使いこなそう!

急に論理回路って言われても・・というかたは、下を読んでみてください。

論理回路って何?

論理回路は簡単に言うと、0(False)か1(True)で表られる論理値を論理演算子でつないで回路にしたものです。ANDとかORってやつです。

論理回路-Wikipedia

LabVIEWの論理回路ノード一覧

1.AND, NAND(Not AND)回路

AND回路

入力をA,Bとすると、「AかつBがTrue」の場合にTrue(1)を出力します。

出力

NAND回路

AND回路の逆を出力します。余談ですが、NAND回路だけで全論理回路が表現できるのです。

出力

2.OR,NOR(Not OR)回路

OR回路

入力をA,Bとすると、「AまたはBがTrue」の場合にTrue(1)を出力します。

出力

NOR回路

OR回路の逆です。NORだけでも全論理回路が表現できます。

出力

3.XOR,XNOR(Not XOR)回路

XOR回路

「排他的論理和」と呼ばれるもので、「ABどちらかだけTrue」の場合にTrue(1)を出力します。

比較をする時なんかに使うと、違いを「True」で出力してくれるのでいいですね。

出力

XNOR(NXOR)回路

今までの流れから言うとNXORじゃないのか?と思いますが、XNORがスタンダードです。

出力

4.NOT回路

これは簡単ですね。入力の反対を出力します。

資格取得・就転職を目指す方のための総合専門校「ヒューマンアカデミー」

5.包含

最初なんと読むのかすらわかりませんでした。「ほうがん」です。

AならばBということですが・・・説明を読んでもさっぱりわかりません。もちろん使ったこともありません。

論理包含-Wikipedia

出力

6.複合演算

実は数値演算でも出てきたノードです。

3つ以上のAND、OR、XORができます。

上画面のXOR複合の入出力に小さい〇が付いてるけど何?
ぞう
ぞう

実はNOT回路を入れることができます。

ちょうどノードの線が出ているところで右クリックをすると以下のように「Invert」って出てきますので、これをクリックするとNOT回路が入ります。便利ですが、ちょっと見づらいので注意です。

7.配列のANDとOR

配列(同じデータ系列の集まり)をまとめてAND、ORできます。

地味に使えるノードです。

おわりに

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

ブールの計算をするだけなんですが、実にいろんな表現があります。

LabVIEWの最大の問題点でもあるのが、ノードの大きさが小さい上に拡大できないことです。

非常に見えにくいので、いかに間違えにくい記述にするかがLabVIEWプログラミングのコツです。

次回は使用頻度が高い「比較」を紹介します!


データ型についてはコチラ

LabVIEWで取り扱うデータ型と、その取扱いについて

LabVIEW画面の見方はコチラ

制御器と表示器、ブロックダイアグラムの基礎【LabVIEW】

LabVIEWで数値計算をやってみよう!【四則演算】

こんにちは。もうすっかり電卓なしでは計算ができなくなった氷河期の住人だよ。

LabVIEWでプログラム、書けてますか?

今回は基本的な数値計算について説明します。これができたら、簡単な計算機が作れます。

いつも同じ計算式を使うかた、試しに作ってみてはいかがですか?

ポイントとしては、

「ノード」という言葉を覚えよう

同じ計算でもいくつかノードに種類がある

簡単なので、さらっと行っちゃいましょう!

LabVIEWの数値計算(Numeric)を覚えよう!

1.ノードって何?

ノードって言葉がわからないと話が先に進まないので、先に説明します。

正確に言うと、ノードとはブロックダイアグラム上に配置する、入力と出力を備えたオブジェクトです。四則演算も含めて、ブロックダイアグラム上のアイコンひとつひとつがノードです。

2.四則演算

普通の四則演算

四則演算はすごく簡単、+-×÷です。

世間では加減乗除っていうんだよ
ぞう
ぞう

・・加減乗除です。

・・・見たままだね!

ノード左側に入力が2つついてて、上がx、下がyです。ノード右に答えが出力されます。

ノードの左から入って右から出るのが基本だよ
ぞう
ぞう
ノード 処理
和(+) 入力xとyを足して出力
差(-) 入力xとyを引いて出力
積(×) 入力xとyを掛けて出力
商(÷) 入力xとyを割って出力

インクリメンタル&デクリメンタル

実際にプログラムを組んだことのある方はよく使っていると思いますが、LabVIEWにももちろんあります。

デクリメンタルは数字を1引きます。インクリメンタルは数値に1を足すものです。

ノード 処理
デクリメンタル 入力を―1して出力
インクリメンタル 入力を+1して出力

なんで小数点型なの・・?
ぞう
ぞう

知識のある人なら間違いなくそう言うと思います。LabVIEWではデフォルトがDBL型だからです。ちゃんと整数型で使いましょうね。

商と余り

商と余りなんて、懐かしいですね。でも使うんですよ、ごくたまに。

ノード 処理
商と余り 入力x÷yの商を右下から、余りを右上から出力

複合計算

1+1+2+3・・・とかめんどくさいですよね。そんなときはこれ。

足し算と掛け算が2つ以上まとめてできます。しかも下の絵のように、マウスでドラッグすると、いくらでも増やせます。

足し算と掛け算は、「+」マークをクリックすると他の演算子に替えられます。実はこのノードで論理回路もできます。便利ですので覚えておきましょう!

ノード 処理
複合計算 2つ以上の入力を演算して出力(演算は+,×,論理回路のAND,OR,XOR)

中小企業診断士講座 38,000円から ★ぶっちぎり宅建ライブ開講★

2.端数処理

端数処理は、数字を丸める処理のことですね。

ノード 処理
絶対値 入力の絶対値を出力
近い整数 入力の数値に一番近い整数を出力
小数切り上げ 入力された小数以下を切り上げて出力
小数切り捨て 入力された小数以下を切り捨てて出力

3.数学的な計算

数学でよく使う計算が入っています。でも、ここにあるのはごく一部です。

ノード 処理
2のn乗 左上が乗数n入力、左下が数値x入力です。x*2のn乗を出力します。
平方根 入力数値の平方根(√)出力
2乗 入力数値xの2乗を出力
負の値 入力数値xの負の値(-1をかけたもの)を出力
逆数 入力数値xの逆数(1/xをかけたもの)を出力
符号 入力数値xの符号(正の値:1を出力、負の値:-1を出力、0:0を出力)
数式 入力数値xを入力した数式(種類は決まっている)で出力
乱数 0~1までの小数点を含む値をランダムに出力

ひとまずこれだけです。まだ一般的な数学の範疇なので、詳細の説明まではいらないやつですね。

おわりに

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

ものすごく基本的な数式ばかりで、かなり頻繁に使うものが多いです。なので使い方を確実に覚えておきましょう。

データを取って、編集して、解析する。LabVIEWでデータ解析すると、はかどるよね。