SFC要素、親プログラムからチャイルドプログラムを起動する際、必ず初期ステップから実行させる=自動的にチャイルドプログラム自身で自分を停止させる にはどのようにしたらよいか


まず、前提条件として、次のようなものがあります。
    • プログラムの起動・停止は親SFCからのみ行えます。言い換えると、プログラムは自分自身を停止できません。プログラムの起動はgstart命令で行うが、その際プログラムがすでに活動中であれば、命令は無意味になります。

そこで、ご希望の動作をさせるには次のような工夫が必要です。
(1)まず、グローバル変数
child_flag:論理値、チャイルドプログラムを動作・停止させるフラグを定義します。
(2)次に、チャイルドプログラムの内容を下記のようにします。


(3)親プログラムを下記のように記述します。
    (a)初期ステップ
      チャイルドプログラムをgstartする。
    (b)チャイルドの処理を見かけ上起動するとき
      パルスアクションで変数 Child_flagをtrueにする。
    (c)チャイルドの処理を見かけ上停止するとき
      1.変数 Child_flagをfalseにし、
      2.gkill(チャイルドプログラム)し、
      3.gstrat(チャイルドプログラム)する。

このようにすれば、実際にはチャイルドは常に動作しているものの、処理そのものを止めたり初期ステップから起動することが出来ます。

注意事項
ISaGRAF ver.4/5では gkill,gstart 命令はサポートしていません。
最終更新:
2009-03-19 11:54
改訂:
1.1
評価点数:0 (0 件の投票)
Chuck Norris has counted to infinity. Twice.

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

タグ