07-24-2019 03:04 AM
ステートマシンのカウントについて教えてください。
列挙体 A(初期化)→B→C→D→Eの順でコード書いています。
列挙体Eまできたら、列挙体Bに戻り、列挙体C、D、Eまで行くというループで書いています。
WHILEループのiのカウントを列挙体Bに来たら+1にする
というコードが書けません。
現在は、列挙体 毎に+1してしまうコードになってしまっています。
恐れ入りますが、ご教授願いします。
解決済! 解決策の投稿を見る。
07-24-2019 06:34 PM
平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の上野です。
ステートマシンということは、Whileループとケースストラクチャを併用しているかと思います。「列挙体 毎に+1してしまうコードになってしまっています」とのことは、加算しているのはケースストラクチャの外側か、各ケース内で加算しているのではないでしょうか?
ステートBだけで+1されたいのでしたら、シフトレジスタを追加してステートBを処理するケース内だけでインクリメントする数値とiカウントを加算すれば良いかと思います。それにより、0, 1+1=2, 3, 4, 5, 7, 8, 9 ... とカウントを作成できます。
添付ファイルは、ステートBのときだけ+1する部分の処理します。
07-24-2019 07:11 PM
NI 上野様
早速ありがとうございます。解決致しました。
追加で質問なのですが、
列挙体を追加するときに、ステートマシンのイベントと連動させたいのですが、どのように操作すればいいでしょうか?
単純に列挙体に追加するとステートマシンのイベントが数字に変わってしまいます。
名前はそのままで追加したいです。
07-24-2019 08:34 PM
無事解決して何よりです。
列挙体定数は、選択された項目を数値で扱う定数です。文字列で扱いたいのでしたら、フロントパネルで制御器パレット>文字列からコンボボックスをしてダイアグラムに移動し、コンボボックスのオブジェクトを右クリックして定数に変更を選択します。
これで仕様方法は列挙体でデータは文字列の定数となります。
07-24-2019 08:44 PM
何度もすいません。
ご教授していただいた方法で試しましたがうまくいきませんでした。
先ほど添付していただいたVIの列挙体BとCの間にFを追加したいとき
追加するとステートマシンのイベントが数字に変わってしまいます。
数字ではなく、そのままの文字列にしておきたいのと、
いくつかある列挙体も連動して列挙体A、B、F、C、Dみたいにしたいです。
07-25-2019 12:19 AM
「文字列のままにしたい」いうのはケースストラクチャのケース名でしょうか?
これは、使用されている複数の列挙体が一致していない場合、数値に変更されます。
同一の列挙体を複数の箇所で使用する場合は、列挙体を右クリックしてタイプ定義に指定を選択して、カスタムの制御器のように1つのファイルに保存し、そのファイルを複数箇所で使用することで連動するようになります。
タイプ定義に指定を利用する方法は以下のとおりです。
07-25-2019 12:34 AM
NI 上野様
うまくいきました。
本件、ご対応ありがとうございました。
07-25-2019 01:01 AM
無事解決して何よりです。今後ともよろしくお願い申し上げます。