【GX Works3】OUT/SET/RST命令の使い方|違いと使い分け・自己保持との比較
概要
「ランプを点けたい」「モーターを動かし続けたい」——ラダーで一番最初にぶつかるのが、この「出す」という作業です。GX Works3で出力に使う命令はいろいろありますが、まず押さえるべきはOUTとSET/RSTの2系統です。
OUTは演算結果をそのまま出力する命令で、条件が切れれば出力も切れます。押している間だけ光るランプのような「なぞり」の出力です。一方SET/RSTは、一度ONにしたら実行条件が消えても状態を保持し続け、RSTで明示的に指示するまでONのままという「保持」の出力です。運転ボタンを離しても機械が動き続けるのは、この保持のおかげです。
この記事を読めば、「今組みたい回路はOUTでいいのか、それともSET/RSTで状態を持たせるべきか」で迷わなくなります。
書式
出典: MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226 / ops/refs/instructions/01_sequence.md より転記。
| 命令記号 | 実行条件 | 主なオペランド/データ型 | 動作 |
|---|---|---|---|
OUT | 常時実行 | (d) ON/OFFするデバイス(ビット/ANY_BOOL) | 演算結果を指定デバイスへ出力する |
SET | 実行指令ON | (d) セットするビットデバイス(ビット/ANY_BOOL) | 実行指令ONで指定ビットをON。OFFになっても保持(RSTで解除) |
RST | 実行指令ON | (d) リセットするデバイス(ビット/ワード) | 指定デバイスを0(OFF)にする。タイマ・カウンタは現在値を0にし接点をOFF |
演算エラーなし。RSTでワードデバイス指定時は MOV K0 と同一動作。
動作
動作の中身を整理すると、まずOUT命令は「その時点までの演算結果を、そのまま指定デバイスへ出力する」命令です。ビットデバイスなら演算結果がONならコイル・接点もON、OFFならOFF。ワードデバイスのビット指定でも同じで、演算結果ONで指定ビットが1、OFFで0になります。実行条件が切れれば出力も切れる、いわば毎スキャンの「なぞり」です。
これに対してSET命令は、実行指令がONした瞬間に指定ビットをONし、そのあと実行指令がOFFに戻ってもONの状態を保持し続けます。図2・図3のように、X0を一瞬押しただけでM0はONのままキープされ、消すには別の条件でRST命令を実行するしかありません。実行指令がOFFのままの間はデバイスの状態は変化しない、つまり「押していないと何もしない」のではなく「明示的に指示するまで動かない」というのがSET/RSTの基本姿勢です。
RST命令は、実行指令がONすると指定デバイスを0(OFF)にします。ビットデバイスならコイル・接点をOFF、タイマ・カウンタなら現在値を0にして接点もOFF、ワードデバイスならその内容を0クリアします。ワードデバイスに対するRSTは、MOV K0で0を書き込むのとまったく同じ動作になる点も押さえておくと、MOV系の命令と混ざったときに理解しやすくなります。なお、OUT・SET・RSTのいずれも演算エラーは発生しません。
OUTとSET/RST、どっちを使う?
判断の軸はシンプルです。「条件が成立している間だけ動けばいい」ならOUT。「一度の操作で状態を保持したい」ならSET/RST、もしくは自己保持回路です。ブザーやランプの点灯確認、押している間だけ動かす微調整用の運転など、条件がなくなったら即座に止まってほしい出力はOUT一択です。逆に、起動ボタンを押した瞬間だけ操作して、あとはボタンを離しても運転し続けてほしいコンベアやポンプの類は、状態を保持できる仕組みが必要になります。
ここで初心者が必ずぶつかるのが、「状態を保持する」ならSET/RSTと自己保持回路(OUT命令+自分自身の接点で条件を保持するラダー)のどちらも同じ結果を作れてしまう、という点です。実際、図2の「X0でSET・X1でRST」という構成は、自己保持回路で組んでもまったく同じ動作にできます。どちらが正解と決まっているわけではなく、現場では読みやすさで選ばれることが多い印象です。自己保持回路は、起動・停止・保持の条件がすべて1つの回路図の中に見えるので、停止条件を後から直列に追加しやすく、回路図を目で追うだけで動作が理解できます。一方SET/RSTは、SET側とRST側を別の行に自由に配置できるので、条件が複雑な設備で「どこからでもリセットをかけたい」といった書き方には向きますが、SETとRSTが離れた場所に散らばると、あとで追いかけるのが大変になりがちです。
自己保持回路そのものの組み方は、自己保持回路のラダー図での書き方(GX Works3)で詳しく解説しています。SET/RSTと合わせて両方の書き方を知っておくと、現場や既存プログラムのスタイルに合わせて選べるようになります。
サンプルコード
①押している間だけブザーを鳴らす(OUT)
[X0 OUT Y0 ]
X0(テストボタン)を押している間だけY0(ブザー・パイロットランプ)をONにする、もっとも基本的なOUTの使い方です。手を離せば同じスキャンでY0もOFFに戻るので、確認用途や、条件が生きている間だけ動かしたい微調整動作に向いています。
②起動・停止をSET/RSTで保持する
[X0 SET M0 ]
[X1 RST M0 ]
[M0 OUT Y0 ]
図2と同じ構成です。X0(起動ボタン)が立ち上がった瞬間にM0をSETし、以降はX0を離してもM0はONのまま保持されます。M0をOUTでY0へ渡しているので、Y0(コンベアやポンプ)はX1(停止ボタン)でM0がRSTされるまで動き続けます。起動と停止で別々のボタンを使う設備の定番パターンです。
③RSTでタイマの現在値をクリアする
[X2 RST T0 ]
T0(タイマ)を使ったカウント中の処理を途中でやり直したいときに使います。RSTを実行するとT0の現在値が0に戻り、接点もOFFになります。ワーク投入待ちタイマをリセットしてやり直す、といった場面で使う型です。ワークカウンタをまとめて0に戻したい場合も同様に、RST C0のような形でカウンタの現在値と接点をリセットできます。
よくある誤解
①二重コイル(同じデバイスへOUTを2箇所に書いてしまう)
同じY0やM0に対して、別々の場所でOUT命令を2回書いてしまう「二重コイル」は初心者がよくやる事故です。1スキャンの中で同じデバイスに複数回OUTが実行されると、最終的には最後に書いた方の演算結果でデバイスの状態が決まってしまうため、「前段の条件で出力させたつもりが、あとから書いた別のOUTに上書きされて反映されない」という動きになりがちです。回路が長くなってくると意図せず同じデバイスに2回書いてしまうことがあるので、コメント一覧やクロスリファレンスでデバイスの使用箇所を確認する習慣をつけておくと防ぎやすくなります。
②SETで保持したビットは自然には消えないことを忘れる
SETでONにしたビットは、実行指令がOFFに戻ってもONのまま保持され続けます。ここを軽く考えていると、「運転中フラグをSETしたのに、対応するRSTを書き忘れて設備が止まらなくなった」という事態を招きます。SETを使う以上、必ずどこかで対になるRSTの条件を用意しておくのが鉄則です。「ONにしたら誰がいつOFFにするのか」をセットで設計しないと、ラッチの解除漏れとしてハマります。
③RSTで消したはずのデバイスが消えない
RSTでビットをOFFにしたはずなのに、なぜか消えない、というときは②の二重コイルの変種であることが多いです。RSTでOFFにした直後のスキャンで、別の場所にある常時ON条件のOUTが同じデバイスへ書き込んでいると、RSTの結果がOUTの演算結果で上書きされてしまいます。SET/RSTとOUTを同じデバイスに混在させるのは基本的に避け、「このデバイスはSET/RSTだけで管理する」「このデバイスはOUTだけで管理する」と役割を分けておくと事故を防ぎやすくなります。
