内容
1. コンベアで運ばれて来る物をフォトセンサで検知し、センサがONしている時間を計測。 |
|
![]() |
・左の画像をクリックすると、大きい画像が表示されます。 ポイント ここでのポイントは、計測ルーチンと比較ルーチンを分けたところ。 それによって不要な条件分岐を記述しなくてよく、可読性も向上します。 複雑なプログラムになるほど、設計は大切です。場合によっては監督を置く事も良いでしょう。 ● 計測ルーチン 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を表示 ●コードをダウンロード ●登録モニタをダウンロード |