【上級編】モーションSFCをラダー同様の処理で作成

参考プログラム

f:id:vv_6ong_3ka_cp:20191214231934p:plain

f:id:vv_6ong_3ka_cp:20191214231956p:plain

f:id:vv_6ong_3ka_cp:20191214232011p:plain

f:id:vv_6ong_3ka_cp:20191214232139p:plain

解説

[ メインプログラム ] : 自動起動

↓  ← P0:リターン先

[ 異常処理 ] : メインプログラムからの起動。モーションCPUやサーボエラーで全軸停止する、またリセット処理も含む

[ WAIT ] : 2重起動インターロック

[ 手動操作 ] : メインプログラムからの起動。サーボ軸のJOG、原点復帰、STEP動作

[ WAIT ] : 2重起動インターロック

[ 自動運転 ] : メインプログラムからの起動。自動運転プログラム

[ WAIT ] : 2重起動インターロック

P0 : リターン

f:id:vv_6ong_3ka_cp:20191214232200p:plain

基本的にプログラムは走らせ続ける処理にするのが前提です。

上記命令は、メインプログラムから異常と手動、自動運転プログラムを起動させるためのものです。

プログラムが2重起動にならないようにWAITトランザクションをインターロックで用意していますが、異常、手動、自動運転プログラムは停止しないように下記命令の処理するようにしています。

f:id:vv_6ong_3ka_cp:20191214232039p:plain

f:id:vv_6ong_3ka_cp:20191214232213p:plain

演算制御プログラム:OUT命令でビットをON,OFF、ワードデータの転送
シフト:サーボ動作をさせるが次のプログラム処理へ移行させる

ラダーと同様にする理由

ラダーはSFCと異なり、全ての条件・命令を判断して最終的に出力信号をON、OFFするか決定されています。
SFCはサーボモータの処理を優先するため一つ一つの処理でON、OFFが切り替わります。

ラダーを使用する人たちにとって、SFCが厄介なのが一つ一つしか演算処理できず、別で途中復帰する処理を考えなければならないや他の処理を行いながらサーボを停止処理しなければならないということが発生してしまうことです。

そこで、ラダーのダイレクトアクセス出力DYと同じと考え、SFCの処理を常に走らせる。
そうすることによって、条件を常に判断しながらサーボ処理も行えるSFCプログラムを作成することができます

副産物

常にプログラムが走るということは、SFCのWAITトランザクションで処理待ちをしないため、異常発生した場合にWAITトランザクションから抜け出す処理が不要になる。

また、途中復旧する際にも余計なSET, RST命令(運転中や動作中など)を使用しなくてよくなる。

つまり、プログラムが減り、処理が単純化され、黙り停止のリスクが減るということになります。


終わりに

SFCの処理を非難しているわけではなく、どのようにすればトラブルのリスクを減らせるかについて述べたつもりです。

もともとSFCで組んでいた人からすると、それはどうなの?という方もいるかもしれませんが、どのようにプログラムを作っているか教えて頂けると嬉しいです。

広告