■時間計測

⇒ TO Home Page
内容

1. コンベアで運ばれて来る物をフォトセンサで検知し、センサがONしている時間を計測。
2. 次に運ばれて来た物の計測時間と前回のを比較し±1秒以上の差があれば警報を出す。
3. 2分以上次の物が来なければ、リセットされ1. に戻る。
4. 上記1. 〜3. を繰り返す。

サンプルコード ・左の画像をクリックすると、大きい画像が表示されます。

ポイント
ここでのポイントは、計測ルーチンと比較ルーチンを分けたところ。
それによって不要な条件分岐を記述しなくてよく、可読性も向上します。 複雑なプログラムになるほど、設計は大切です。場合によっては監督を置く事も良いでしょう。

● 計測ルーチン
2行目 :PLC起動時の初期化。

5行目 :待機状態。センサ[■SENSE]がONするとカウンタ[COUNT]と警報[■ALARM]をリセットして状態を更新。

7行目 :1msecのタイマ[CLK]がアップするたびにカウンタ[COUNT]をインクリメント。
([COUNT]をインクリメントせず、直接リングバッファをインクリメントしても良いかもしれません。その場合、[COUNT]は不要です。
今回はチェックのため[COUNT]を設けています。)
8行目 :センサ[■SENSE]がOFFしたらカウンタの値をリングバッファに代入し、計測終了フラグ[FINI]を立てて状態を更新。

10行目 :計測終了フラグ[FINI]は比較ルーチンのトリガとして使っている。比較ルーチンが起動すると、[FINI]がリセットされ、リングバッファ ([DM0] 〜256個)のアドレス(インデックスレジスタ[Z1])をインクリメントし振り出しへ戻る。

● 比較ルーチン
13行目 :待機状態。計測ルーチンからの計測終了フラグ[FINI]のトリガで比較ルーチンを起動。[FINI]をリセットし、
この時、比較する対象がないので、何もせず状態を更新。

15行目 :2回目以降の比較。13行目と同じく[FINI]をリセットし、前回のアドレスを計算。
16行目 :(今回の計測値[DM0:Z1] - 前回の計測値[DM0:Z2] )を演算し、その差分の絶対値と、警報となる比較値[Threshold]を比較。
警報となる値を超えていれば、[■ALARM]をセットして13行目に戻る。
13行目の待機状態に戻る事で、今回の異常ワークの値をリセットする。
また、警報値を超えなければこの状態のまま、計測終了フラグ[FINI]を待つ。
17行目 :計測終了フラグ[FINI]を待ち中に、センサがOFFのままタイマ[INI]がアップする事でも13行目に戻る。

21行目 :PLC起動時の初期化ルーチン。
23行目 :リングバッファのアドレス用インデックスレジスタ[Z1]/[Z2]をクリア。リングカウンタの値を0〜255に制限するためのマスク値を設定。
25行目 :警報となる比較値[Threshold]に1秒を設定。ワーク無しを判別するタイマに2分を設定。
27行目 :計測ルーチンと比較ルーチンのステージフラグをセット。
27行目 :初期化済フラグをセット。
シミュレーション ・ 左の画像をクリックすると、大きい画像が表示されます。

シミュレーションできる方は下欄からプログラムコードと登録モニタをダウンロードしてください。

■SENSEの現在値にカーソルを合わせ、「ダブルクリック」または「スペースキー」押下で、適当な時間ONさせて下さい。
OFFにした時点でONだった時間が[COUNT]とリングバッファに代入され、前回との差分値が[Check]に代入されます。

また、登録モニタに[■ALARM]を登録してチェックしてみてください。
●PDFを表示 ●コードをダウンロード ●登録モニタをダウンロード