シーケンサのようにブール型変数を複数集め、まとめて1チャンネルとして扱いたい。例えば、ブール変数16個を
CH20000,CH20001,CH20002,.....,CH20015 → CH200(アナログ型変数)
のようにしたい。また、逆にアナログ型変数の各ビットにブール型変数を割り当てたい。


ISaGRAF自身には上記のような概念がありませんので、直接記述することは出来ません。

デメリットもありますが、下記のような方法があります。

(1)ブール型変数の他、アナログ変数として CH200,CH201,CH202,....を辞書に登録する。
(2)beginセクションのプログラムに、ビットをワードにまとめるプログラムを記述する。その内容は、例えばST言語では次のようになります。
CH200 := ana(CH20000) + ana(CH20001)*2 + ana(CH20002)*4
+ ana(CH20003)*8 + ana(CH20004)*16#10 + ana(CH20005)*16#20
+ ana(CH20006)*16#40 + ana(CH20004)*16#80 +
......(中略)
 + ana(CH20015)*16#8000;
CH201 := (以下略)

(3)逆にendセクションにはワードをビットに分解するプログラムを作ります。
CH20000 := ana_mask(CH200,1);
CH20001 := ana_mask(CH200,2) / 2;
CH20002 := ana_mask(CH200,4) / 4;
....(以下略)

(4) 2と3のプログラムに挟まれた他のプログラム、及びSFC内のプログラムでは,チャンネル形式で扱えます。

【デメリット】ただし、ビット型の変数に値を代入することは出来なくなってしまいます。(3)の部分でワード型から上書きされてしまうからです。
最終更新:
2008-07-30 16:58
改訂:
1.0
評価点数:0 (0 件の投票)
Chuck Norris has counted to infinity. Twice.

このカテゴリー内のレコード

タグ