From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI製品ディスカッション

cancel
Showing results for 
Search instead for 
Did you mean: 

ステートマシンのカウント

Solved!
Go to solution

ステートマシンのカウントについて教えてください。

 

列挙体 A(初期化)→B→C→D→Eの順でコード書いています。

列挙体Eまできたら、列挙体Bに戻り、列挙体C、D、Eまで行くというループで書いています。

 

WHILEループのiのカウントを列挙体Bに来たら+1にする

 

というコードが書けません。

 

現在は、列挙体 毎に+1してしまうコードになってしまっています。

恐れ入りますが、ご教授願いします。

0 Kudos
Message 1 of 8
(2,060 Views)
Solution
Accepted by topic author sakana55

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

 

ステートマシンということは、Whileループとケースストラクチャを併用しているかと思います。「列挙体 毎に+1してしまうコードになってしまっています」とのことは、加算しているのはケースストラクチャの外側か、各ケース内で加算しているのではないでしょうか?

 

ステートBだけで+1されたいのでしたら、シフトレジスタを追加してステートBを処理するケース内だけでインクリメントする数値とiカウントを加算すれば良いかと思います。それにより、0, 1+1=2, 3, 4, 5, 7, 8, 9 ... とカウントを作成できます。

 

添付ファイルは、ステートBのときだけ+1する部分の処理します。

0 Kudos
Message 2 of 8
(2,011 Views)

NI 上野様

 

早速ありがとうございます。解決致しました。

 

追加で質問なのですが、

列挙体を追加するときに、ステートマシンのイベントと連動させたいのですが、どのように操作すればいいでしょうか?

 

単純に列挙体に追加するとステートマシンのイベントが数字に変わってしまいます。

名前はそのままで追加したいです。

 

0 Kudos
Message 3 of 8
(1,999 Views)

無事解決して何よりです。

 

列挙体定数は、選択された項目を数値で扱う定数です。文字列で扱いたいのでしたら、フロントパネルで制御器パレット>文字列からコンボボックスをしてダイアグラムに移動し、コンボボックスのオブジェクトを右クリックして定数に変更を選択します。

これで仕様方法は列挙体でデータは文字列の定数となります。

0 Kudos
Message 4 of 8
(1,985 Views)

何度もすいません。

ご教授していただいた方法で試しましたがうまくいきませんでした。

 

先ほど添付していただいたVIの列挙体BとCの間にFを追加したいとき

追加するとステートマシンのイベントが数字に変わってしまいます。

 

数字ではなく、そのままの文字列にしておきたいのと、

いくつかある列挙体も連動して列挙体A、B、F、C、Dみたいにしたいです。

0 Kudos
Message 5 of 8
(1,983 Views)

「文字列のままにしたい」いうのはケースストラクチャのケース名でしょうか?

これは、使用されている複数の列挙体が一致していない場合、数値に変更されます。

 

同一の列挙体を複数の箇所で使用する場合は、列挙体を右クリックしてタイプ定義に指定を選択して、カスタムの制御器のように1つのファイルに保存し、そのファイルを複数箇所で使用することで連動するようになります。

 

タイプ定義に指定を利用する方法は以下のとおりです。

  1. ダイアグラムで列挙体を右クリックして、タイプ定義に指定を選択します。列挙体の左上に黒色の三角形が付きます。
  2. <Ctrl-S>でVIを保存します。拡張子が.ctlとして保存するように促されますので、名前を付けて保存します。
  3. タイプ定義に指定された列挙体を選択して、<Ctrl>を押しながらドラッグ・アンド・ドロップするとコピーされますので、タイプ定義に指定されていない列挙体とすべて入れ替えます。
  4. 列挙体の項目を変更する場合は、タイプ定義に指定された列挙体を右クリックして、タイプ定義を開くを選択します。
  5. 手順2で保存した制御器(フロントパネルだけのファイル)が開きますので、その中にある列挙体制御を右クリックして編集し、保存してから閉じます。
  6. この変更がすべての列挙体定数に反映されます。

 

 

 

 

0 Kudos
Message 6 of 8
(1,960 Views)

NI 上野様

 

うまくいきました。

本件、ご対応ありがとうございました。

0 Kudos
Message 7 of 8
(1,952 Views)

無事解決して何よりです。今後ともよろしくお願い申し上げます。

0 Kudos
Message 8 of 8
(1,943 Views)