プログラムはよりシンプルに・・制御フローはしっかりと

バグとの闘い

仕様変更概要

製品排出部分の改造でプログラムの変更を行った。

元々の排出装置(旧排出部)は、検査装置のすぐ後にあったので、NG=排出動作でよかったのです。新しい排出部(新排出部)は、旧排出部の2mくらい後ろに設置されます。

旧排出の信号を流用すると、新排出部で動作中に次の製品判定信号が発生する。

2つ信号ならよいが、微妙に3つ4つ発生するときもある位置関係なので、どうしようか?

プログラム検討

こういう場合は、FIFOの出番ですね。NG、OK信号を格納して順番に処理すればよい。

ところが、問題発生。

①NGで排出している最中に、おおきな製品がきて排出部に・・・

しかし、判定信号はまだでないので、排出部にOK品がひっかかる・・

②そこで、製品がNG、またはOKで通り過ぎたら、信号をクリアする・・

そうすれば、排出部に引っ掛からないのですが、

NG品の小さいものがくるとNG、のあと戻るので、排出部がバタバタする。

エアーシリンダーで動作させるので、動作途中に戻すから、急速動作になって振動がすごい・・

③NGが小さい製品かどうか判断を加える

・・うーーんうまくいった。

④正常製品を流すとあれ?NG排出をする?

付け焼刃で対応すると変な動作が多々発生。

変に、こうすればいいをプログラム化できるから余計に複雑に組み合わせとなる。

結果としてうまくいかないので、やり直し!

プログラム見直し

製品のNG、OK信号をトラッキングすることはよい。

排出部で判定するのもよい。

排出した後の信号で、FIFOテーブルから読み出すも問題ない

①テーブルの読出しタイミング

連続で流れている場合は、排出された信号で読出しをするが、最初だけ・・テーブルに信号が1個以上あって、読み出した製品情報がない場合は1個読出しをする回路を追加。

②NG判定でバタバタする解消

プログラムでいろいろ演算処理しない。まずは、NGなら排出をキープ(自己保持させる)

排出完了して、読出し情報をクリアしても、NG排出状態のままとなる。

次に製品OKで排出部手前まできそうな情報で自己保持を解除する。

OK判定でも解除することでうまくいきそう。

まとめ

プログラムフローをよく考えないで、切替を実施したので大失敗してしまった。

色々な複合動作も絡みます。途中にサンプリング取り出し等もあるのもデバッグ中に判明しました。ちょっと直します、動かします・・ですぐに2,3時間かかる。

こういう場合は、出直ししてプログラムフローから考え直したほうがよい。

シミュレーションも事前にできるだけしたほうがいい。

一晩寝て考え直すといい考えや発想もできる。

さあ、来週デバッグや–!

コメント

タイトルとURLをコピーしました