これまでに、【LabVIEWスキルアップのすすめ】でプログラム構築をしていく上での
設計手法であるデザインパターンについて紹介をしてきました。
〇一連の状態遷移を制御可能にする”ステートマシーン”
〇処理プロセスを分けることが可能な”生産者/消費者デザインパターン”
しかし、システムの仕様を考えていくときに上記の設計手法だけでは
希望通りの設計を満たせない場合が出てくることがあります。
例えば
・1つの”ステートマシーン”にかなりの量の状態を組み込むような仕様になってしまった。
プログラム内容を分かりやすくするためにいくつかの”ステートマシーン”に分けてしまいたいけどデータのやりとりをどうすればいいかわからない....
・センサからのデータ計測を行う予定だから、”生産者/消費者デザインパターン”を使用して
抜け漏れのないデータ取得を実現しようと思う。”ステートマシーン”の一部機能として計測を行おうと考えていたけど、どうすれば上手く組み合わせられるんだろ…
、などといった悩みが出てしまうことがあります。
こういった課題が出てきた場合、キューメッセージハンドラ(QMH)というデザインパターンを
使用することが推奨されます。
以下の動画にて実際に特定のアプリケーションに沿ったQMHに構築の流れを
紹介しております。
【脱初心者シリーズベストプラクティス】
https://www.youtube.com/watch?v=FSJuOqC-6Uo&list=PLzy_sxz_5sf-4GxerlfXQl75oYfyfPU4A
こちらの記事で紹介させていただくQMHの概要をご覧になっていただいたうえで
確認していただきますと、構築のお役に立てるかと思います。
QMHのメリットとしては
①まとまった機能ごとにステートマシンを作成することで
それぞれのコードを小さく維持することが出来るため、内容の理解がしやすい。
→チームでの開発が容易になる。
②プロセス分離が可能となり、非同期にて処理が実行可能となる。
→データの消失や処理が遅れることがなくなる。
QMHのシステム概要はループの間を”メッセージ”が送受信されることで
以下の機能を実現します。
・モジュールとして「外部と通信できるステートマシン」を複数作成する。
・キューによって、ユーザのイベントやデータのやり取りを行う。
基本的なプログラム構造は以下のようになっております。
流れとしては
”メッセージ送信ループ”
・フロントパネル上のイベントを検知
・イベントに相当するメッセージ(”文字列”もしくは”列挙体”)をキューで送信
”処理の実行ループ”
・キューからメッセージを受信
・メッセージに相当するケースでケースストラクチャが実行
・ケース内の単体機能(単体のステートマシーン)が実行
・更に並列ループを下に作成することで必要なタイミングで並列処理を実行
となっています。
”実行のハイライト”を有効にして開始いただくことで、動作の理解がしやすくなります。
こちらの記事を参考にしていただいた上で、動画をご覧いただくことで
QMHについての理解が深まります。
デザインパターンは実際に構築を行わないと身につくのが難しくなりますので
こちらの記事や弊社のトレーニングを活用いただくことで
より効果的なプログラム構築を進めていただければと思います。
LabVIEWプログラミングの向上や計測・制御システムの更なる効率化などで
お悩みのことがございましたら、ぜひとも弊社までご連絡ください!!
この記事を書いた人
高村 研司
愛知県名古屋市生まれ。
日本ナショナルインスツルメンツ(NI)にて大阪/兵庫/和歌山を担当。
LabVIEWによる自動化/効率化に興味をもちNIに入社。
趣味:スキューバダイビング,バンジージャンプ,懸垂,読書。