E-mail パスワード
次回から自動ログインする    
パスワード紛失  新規登録      
   ホーム | フォーラム | ブログ | Wiki | 用語集 | マイアルバム | カレンダー | リンク | サイト内検索 |  

SET/RSTをインタロックとして使うときは

  • このフォーラムはコメント用フォーラムです。新規トピックはたてられません
  • このフォーラムではゲスト投稿が許可されています
対象モジュール 用語集
件名 SET
要旨 ページ内コンテンツ 演算制御プログラム/デバイスセット SET 書式 使用可能データ 設定データ 演算時間(μs) 演算制御プログラム/デバイスセット SET 書式 ...

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008/3/19 7:16 | 最終変更
なーお  長老 居住地: 千葉県香取市  投稿数: 258

SET/RSTで重要な使い方があります。
例えば、G箱内の最終行で以下のような記述をしたとき

SET M100=!M200 //M100:自プロセスでの占有フラグ、M200:他のプロセスで占有中フラグ

このとき、M200というインタロックフラグで他のプロセスが占有していなければ、M100という占有中フラグをセットして、以下に移行する、というものです。SFC内のインタロックは、この考え方一つが基本になります。

一方、以下のようなものは、同じことをやっているようですがSFCの移行中に衝突が生じてインタロックとしては成立しません。

G
 !M200 //M200:他のプロセスで占有中フラグ
   |
F
 SET M100

↑の方法では、Gで条件を確認して移行中にメイン周期の関係で中断すると、他のプロセスで同様にM100のオフを確認して移行したり、やSFC以外のシステム側の変化などで衝突が発生してしまいます。

特に、イベントタスク(イベントSFC)を使った場合は、F-Gが1セットの移行数なので連続移行数の最後にGを評価して途切れてしまい、次のFを実行した時には状況が変わってしまう可能性があるので、要注意です。

この辺でハマると非常に厄介なので、素直に SET M100=!M200 的なインタロックを使っていくことをお勧めします。

投票数:0 平均点:0.00
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文
  条件検索へ


メインメニュー