From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

[Archive] LabVIEW Café

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

【LabVIEW スキルアップ】デザインパターン”QMH”とは?

これまでに、【LabVIEWスキルアップのすすめ】でプログラム構築をしていく上での
設計手法であるデザインパターンについて紹介をしてきました。

 

〇一連の状態遷移を制御可能にする”ステートマシーン

 

〇処理プロセスを分けることが可能な”生産者/消費者デザインパターン

 

しかし、システムの仕様を考えていくときに上記の設計手法だけでは
希望通りの設計を満たせない場合が出てくることがあります。

 

例えば
・1つの”ステートマシーン”にかなりの量の状態を組み込むような仕様になってしまった。
プログラム内容を分かりやすくするためにいくつかの”ステートマシーン”に分けてしまいたいけどデータのやりとりをどうすればいいかわからない....

 

・センサからのデータ計測を行う予定だから、”生産者/消費者デザインパターン”を使用して
抜け漏れのないデータ取得を実現しようと思う。”ステートマシーン”の一部機能として計測を行おうと考えていたけど、どうすれば上手く組み合わせられるんだろ…

 

、などといった悩みが出てしまうことがあります。

 

こういった課題が出てきた場合、キューメッセージハンドラ(QMH)というデザインパターンを
使用することが推奨されます。
以下の動画にて実際に特定のアプリケーションに沿ったQMHに構築の流れを
紹介しております。
【脱初心者シリーズベストプラクティス】
https://www.youtube.com/watch?v=FSJuOqC-6Uo&list=PLzy_sxz_5sf-4GxerlfXQl75oYfyfPU4A
こちらの記事で紹介させていただくQMHの概要をご覧になっていただいたうえで
確認していただきますと、構築のお役に立てるかと思います。

 

QMHのメリットとしては
①まとまった機能ごとにステートマシンを作成することで
それぞれのコードを小さく維持することが出来るため、内容の理解がしやすい。
→チームでの開発が容易になる。
②プロセス分離が可能となり、非同期にて処理が実行可能となる。
→データの消失や処理が遅れることがなくなる。

 

QMHのシステム概要はループの間を”メッセージ”が送受信されることで
以下の機能を実現します。
・モジュールとして「外部と通信できるステートマシン」を複数作成する。
・キューによって、ユーザのイベントやデータのやり取りを行う。

 

image.png

 


基本的なプログラム構造は以下のようになっております。

QMHsample.png


流れとしては
メッセージ送信ループ
・フロントパネル上のイベントを検知
・イベントに相当するメッセージ(”文字列”もしくは”列挙体”)をキューで送信
処理の実行ループ
・キューからメッセージを受信
・メッセージに相当するケースでケースストラクチャが実行
・ケース内の単体機能(単体のステートマシーン)が実行
・更に並列ループを下に作成することで必要なタイミングで並列処理を実行
となっています。

 

実行のハイライト”を有効にして開始いただくことで、動作の理解がしやすくなります。

こちらの記事を参考にしていただいた上で、動画をご覧いただくことで
QMHについての理解が深まります。


デザインパターンは実際に構築を行わないと身につくのが難しくなりますので
こちらの記事や弊社のトレーニングを活用いただくことで
より効果的なプログラム構築を進めていただければと思います。

LabVIEWプログラミングの向上や計測・制御システムの更なる効率化などで
お悩みのことがございましたら、ぜひとも弊社までご連絡ください!!

 

この記事を書いた人

高村 研司
愛知県名古屋市生まれ。
日本ナショナルインスツルメンツ(NI)にて大阪/兵庫/和歌山を担当。
LabVIEWによる自動化/効率化に興味をもちNIに入社。
趣味:スキューバダイビング,バンジージャンプ,懸垂,読書。 

メッセージ1/1
5,083件の閲覧回数