


CODESYSに挑戦してみます

時間演算ファンクション

PLCプログラムは制作者によって千差万別ですよね。極端ではありますが、入口と出口が合っていれば中身はどうでも良いのかもしれません。ただその日、その時の気分で中身が違うと数年後に見直した時に内容がわからなくて苦労することも多いです。ウチではその辺をルール化してるのでいくつかご紹介します。
接点とコイルの組合せで構成できる場合は常時ONで4行単位にまとめるようにしています。16ビットを4つのブロックに分けるように4行と決めました。こんな感じです。
スキャンタイムに制約がない時は視認性を優先しています。X50-X5Fを転送する場合、このブロックが4つになるわけですが愚直に4つのブロックを作ります。MOV K4X50 K4M2000 の1行で代用できるのですが、とっさの時にデバイスがONしているかOFFしているかの判別が付きずらいと個人的に感じています。量産する時は「連続貼付け」などの機能をフル活用するので制作時間が長くなるといった感覚はありません。
条件によって処理を切換えるジャンプ命令はIF-THENをラダー的に表現出来るようにした命令だと思います。ポインタに向かって処理を飛ばしたり、条件によっては戻ってきたりで基本的な「ラダーは上から下に流れる」という原則が崩れてしまうため使用を禁止しています。
条件がOFFになっても状態を維持してくれるSET/RESET命令は便利な半面、回路の何処にでも何回も配置することが出来ます。条件が出来ているのになぜかコイルがSETされない場合は大抵何処かでRESETされていたりします。SET/REST命令は必ず1箇所にするようにしています。さらにモードの切替などの用途に限定して使うようにしています。