【中級編】GX Works3 除算演算エラー回避方法 0で割らない

f:id:vv_6ong_3ka_cp:20210503172912p:plain

PLCにも演算エラーが存在し四則演算で有名なのが除算式で0割りを行うことです。

除算式でそのようなことを行うと、演算結果が∞に発散してしまうため、データレジスタで表現できる数値を超えてしまい演算エラーとなります。

これを回避する方法としてはプログラム上でインターロックを記述し、どのような場合なのかでその後の処理をプログラム上で記述していくしかありません。

今回はGX Works3の除算演算エラー回避方法の0で割らない方法について紹介します。


広告


GX Works3 除算演算エラー回避

GX Works3 除算参考プログラムf:id:vv_6ong_3ka_cp:20210503101841p:plain

Point.D0 = 0の時にD2 = ∞で数値が発散するため演算エラーが発生する

/ K10 D0 D2

上記の命令は、10 ÷ D0 = D2という除算の命令であり、これを行うことによって除算演算を行うことができます。

ただし、D0というデータレジスタは数値を変化させてしまうことが可能であり、可変できるようにタッチパネルで設定してあると除算エラーの要因となります。

普段あまり私たちは認識しておりませんが、0で割ると∞になるため、データレジスタで表現できなくなり演算エラーとなります。

演算エラー発生時 PLCモニタ
f:id:vv_6ong_3ka_cp:20210503101852p:plain

Point.演算異常が発生しているのがわかる

GX Works3 演算エラー時プログラム継続方法
f:id:vv_6ong_3ka_cp:20210503101905p:plain

Point.演算異常 停止する ➡ 継続するに変更する

演算異常が発生した際にプログラムを停止するか継続するか選ぶことができます。

変更する方法については上記画像を参照してもらえばわかります。

ただし、プログラム演算異常が発生したのを継続するようにしても演算結果が正常かどうかは判断がつかないため、結局は除算式で0によって割るという行為を無効化することが大前提となります。

GX Works3 除算プログラム参考例
f:id:vv_6ong_3ka_cp:20210503101916p:plain

Point.D0<>K0なら除算、D0=K0ならD2に0を代入

演算ができる場合と演算ができない場合と、2通りの方法の処理をプログラム上で記載するようにします。

D0が0でなければ除算可能、D0が0ならば除算不可能でD2に0を代入する。

このように場合分けを行い、処理方法をプログラムで記載するようにしましょう。

※全ての除算演算式に行う必要がありますので、面倒だと思いますが当然の処理を行っているだけと考えて下さい。プログラマーは演算エラーが出た場合でも処理できるようにプログラムの構成を必ず考慮するようでなければ一流とは言えませんので。

また、演算途中の場合は最終的な演算結果に不具合が生じないように演算処理を飛ばしたり、最終的な演算結果を書き込むようにしたりとさらに処理を複雑化しなければなりませんので注意しなければなりません。

まとめ
・除算は0で割らない。割ると数値が∞となり演算エラーとなる
・演算エラーでもプログラムを継続することは設定上可能だが、演算結果が正しいかは判断できない
・割る数値を0でない場合は除算可能、0ならば除算不可能と2通りの場合分けで処理するプログラムを記述する