NI製品ディスカッション

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

タグを利用した、使用量の測定

解決済み
解決策を見る

飲料や調味料の入れ物にタグをつけ、それらを飲んだ量や使用量を測定するようなプログラムを作りたいです。
重量の測定には、電子天秤を利用します。
例として、飲料Aを電子天秤に置いておき、初めの重量を測定しておきます。そのまま、使用する際に電子天秤から飲料Aを取り、Aのタグを読み取り、使用します。使用後、また、Aのタグを読み取ります。
この、二回の読み取り動作の間で飲料Aをどれぐらい初めの量から使用したのかがわかるようにしたいです。

タグの読み取りプログラムと電子天秤のプログラムを添付します。

すべてをダウンロード
0 件の賞賛
メッセージ1/25
2,617件の閲覧回数

平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の上野です。

 

便宜上、添付いただいたVIは1つの処理をおこなうので「プログラム」、それらをまとめて動作させるプログラムを「アプリケーション」と区別して返答致します。

 

アプリケーションの流れは、説明文からフローチャートを作成すると以下のようになるようですが、これは正しいでしょうか?

SS2.png

 

これだと、重量測定は一度だけなので、重量の差分がとれないのではないかと感じました。たとえば、最初にタグを読み取り、その後に2度重量の測定を行えば、差分にするのでしたらイメージしやすい流れです。

 

また、アプリケーションとして、この流れで終了してよいのでしょうか?これを連続的に行えるようにしたり、他の飲料も記憶しておくことはないのでしょうか?

 

アプリケーション構築は、フローチャートや状態遷移図を作成したり、簡単でもいいので仕様書を作成しておいたほうがよいかと思います。

上記の流れで終了するなら、シーケンス処理の方法をご紹介しますし、より複雑になるならステートマシン等のデザインパターンをご紹介します。ちなみにステートマシンのサンプルプログラムは下記からアクセス可能です。

 

ヘルプメニュー >> サンプルを検索 >> 参照タブ >> 基本機能 >> ループおよびストラクチャ >> ステートマシンの基礎

 

 

プログラム単体として動作は、これで問題ありませんか?

電子天秤による測定のプログラムは開始してからシリアル通信をおこなって値を取得してから自動停止しますが、タグ読み取りは停止ボタンを押すユーザ操作が必要です。ユーザ操作を行いたいのか、それともタグを読み取ったら自動で停止したほうがよいかを判断する必要があります。

これは、アプリケーション自体のユーザインタフェース(UI)操作に関するプログラミングにも関連するからです。

 

アプリケーションを作成する前に上記の点をご確認ください。

 

 

0 件の賞賛
メッセージ2/25
2,435件の閲覧回数

勉強不足で申し訳ございません。

フローチャート通りで間違いないです。

確かにそれでは差分が取れないので、

2回目のタグを読み取った際に電子天秤に戻すことで差分の重量をとる。また、これを連続的に他の飲料でも行いたいです。

他の飲料の測定などを行い、全て終わったときに手動で停止ボタンを押してアプリケーションを終了するようにするつもりです。

これで作成可能でしょうか?

 

0 件の賞賛
メッセージ3/25
2,428件の閲覧回数

ご返答ありがとうございます。そうなると、電子天秤プログラムを自動終了する変更と状態遷移図を作成してそれをステートマシンに適用するところから始めた方がよいかと思います。

0 件の賞賛
メッセージ4/25
2,423件の閲覧回数

お早い返答ありがとうございます。

承知いたしました。

状態遷移図から始めていきたいと思います。

0 件の賞賛
メッセージ5/25
2,419件の閲覧回数

ステートマシンのサンプルプログラムを見ると、一連のアクションがケースストラクチャの各ケースに分かれていて、それを列挙体定数で決められた状態で切り替えていることがわかります。

 

そのため、1つのケースの中に1つのプログラムを入れれば、そのプログラムが処理されるようになります。各プログラムをそのケースの中に入れれば、処理されるようになりますので、そこまでできればデータの受け渡しと保持に関して決めていく形となります。

0 件の賞賛
メッセージ6/25
2,416件の閲覧回数

ステートマシンのページを開いたのですが、使い方がわかりません。

説明を読んでもわからないです。

簡単な手順を教えていただけないですか?

0 件の賞賛
メッセージ7/25
2,411件の閲覧回数

サンプルプログラムの動作手順は、フロントパネルに書いてあるとおりです。

  1. VIを実行します。
  2. ステート1を実行ボタンをクリックします。テキストの入ったダイアログが表示されます。
  3. ステート2を実行ボタンをクリックします。表示されたダイアログで「はい」を選択すると、ステート2の後にステート3が実行されます。
  4. 停止をクリックしてVIを停止します。

 

フロントパネルの表示を下にスクロールするか、表示エリアを大きくすると、文字列制御器がいくつか配置されていることが分かります。実行中に表示されるメッセージが変えられます。

 

次にプログラムですが、列挙体定数には、Initialize、Wait for Event、State 1、State 2、State 3、Stopが設定されており、それと同じ名前の各ケースが存在します。サンプルでは、ユーザの操作によってこのケースが切り替わります。

 

この仕組みが、ユーザ待機>> タグ読み取り >> 重さ測定 >> 差分計算 >> ユーザ待機 のステート(状態)を切り替えたり、任意のタイミングでアプリケーションを終了することができます。

 

 

 

 

0 件の賞賛
メッセージ8/25
2,404件の閲覧回数

返信遅くなり申し訳ございません。

指示通りやってみたのですがうまくいきませんでした。

他の方法などはございませんか?

知識不足で申し訳ございません。

0 件の賞賛
メッセージ9/25
2,382件の閲覧回数

どのあたりが分からないのでしょうか?作成されたいアプリケーションは、これをベースにしてもっと複雑になりますので、これ以外ですとアプリケーションの仕様動作そのものをよりシンプルにする必要があります。

 

ステートマシンは、ファイルメニュー >> プロジェクトを作成... >> 簡易ステートマシンを選択して、次へボタンを押し進めていくと、ステートマシンのひな形を含むプロジェクトが作成されます。プロジェクトエクスプローラが表示され、そのウィンドウ内にあるツリーに詳しい説明ファイルが含まれています。また、Main.viがひな形であり、ダイアグラム内にも説明が記載されています。

 

他にもYouTubeのビデオや「ステートマシン」で検索した結果からさまざまなページを参照可能ですのでご参照いただけると幸いです。

0 件の賞賛
メッセージ10/25
2,372件の閲覧回数