【GX Works3】OUT T(タイマ)の使い方|積算タイマ・ロングタイマ・カウンタ併用まで総まとめ
概要:タイマとカウンタ、どれを使う?
「3秒待ってからシリンダを戻す」「同じ動作を10回繰り返したら次の工程へ進める」——現場のシーケンス制御で頻出するこの手の要求は、時間の管理か回数の管理かのどちらかに整理できます。GX Works3では、この2つを別々の命令グループが担当します。時間を管理するのがOUT T系のタイマ命令(OUT T/OUTH T/OUT ST/OUT LT)、回数を管理するのがOUT Cのカウンタ命令です。どれも「条件が成立している間、内部で数字が増えていき、狙った値に達したら接点が切り替わる」という基本の仕組みは共通していて、違うのは何を数えるか、どこまで数えられるか、途中でやめたときに数字が残るかどうかです。まずは「やりたいこと」から逆引きできるように、対応関係を整理しておきます。
| やりたいこと | 使うもの |
|---|---|
| ◯秒待ってから動かす・時間監視(100ms精度で足りる) | OUT T(低速タイマ) |
| より細かい精度で計測したい(0.01ms単位) | OUTH T(高速タイマ) |
| 途中で条件が切れても経過時間を覚えていてほしい(稼働時間の積算など) | OUT ST(積算タイマ) |
| 32767を超える長時間・0.001ms単位の高分解能 | OUT LT(ロングタイマ) |
| 回数を数えて、設定回数に達したら動かす | OUT C(カウンタ) |
OUT T(基本のタイマ)
書式
出典: MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226 / ops/refs/instructions/02_timer-counter.md より転記。
| 命令記号 | 実行条件 | 主なオペランド/データ型 | 動作 |
|---|---|---|---|
OUT T | 常時実行 | (d) タイマ T / Value 設定値 0〜32767(符号なしBIN16) | 演算結果ONの間コイルON・計測。タイムアップでa接点導通 |
OUTH T | 常時実行 | (d) タイマ T / Value 設定値 0〜32767(符号なしBIN16) | 高速タイマ。0.01ms単位の高分解能で計測 |
OUT ST / OUTH ST | 常時実行 | (d) 積算タイマ ST / Value 設定値 0〜32767 | 積算タイマ。演算結果OFFでも現在値を保持(クリアはRST) |
時限単位はパラメータ設定=低速タイマ/低速積算タイマ 1〜1000ms(既定100ms)・高速タイマ/高速積算タイマ 0.01〜100.0ms(既定10.0ms)。設定値0はOUT実行時にタイムアップ。設定値は定数ならK(10進)のみ・D等のワードデバイスでの間接指定も可(T/ST/Cは不可)。
動作
動作を整理すると、OUT T命令までの演算結果がONの間、T0のコイルはONし続け、設定値まで現在値を計測します。タイムアップ(現在値が設定値以上)すると、a接点は導通しb接点は非導通に切り替わります。ここで見落としやすいのが、演算結果がOFFに戻ったときの動きです。低速タイマ・高速タイマは、コイルがOFFになると同時に現在値も0へ戻り、接点も元の状態に戻ります。つまり図1の回路でX0を5秒未満で離すと、T0は最初からやり直しで、途中の経過は一切残りません。図3のように、T0という1つのデバイス名の裏には「コイル(入力)」「現在値(進行中のカウント)」「接点(出力)」という3つの役割があり、この3つがセットでON/OFFすると考えると回路の動きを追いやすくなります。なお、図1のK50が「5秒」になるのは、時限単位が既定の100msだからで、この単位はエンジニアリングツールのパラメータ設定で1〜1000msの範囲で変更できます。他人が作ったプログラムを引き継いだときは、K値だけでなくこの単位設定も必ず確認してください。
サンプルコード
①ボタンを押してから5秒後に動かす(遅延ON)
[X0 OUT T0 K50]
[T0 OUT Y0 ]
X0がONしている間T0が計測を始め、5秒(K50×既定100ms)経過してタイムアップするとT0の接点が導通してY0がONします。X0を5秒未満で離せば、その時点でT0は即座にリセットされるので、Y0は「5秒間押し続けたときだけ」ONする遅延ON回路です。
②ランプを1秒点灯・1秒消灯で点滅させる(フリッカ回路)
[T1(b接点) OUT T0 K10]
[T0 OUT T1 K10]
[T0 OUT Y0 ]
T1のb接点(OFFのときに導通する接点)を条件にT0を計測させ、T0がタイムアップしたらそのa接点でT1の計測を開始しつつY0をONにします。T1がタイムアップするとb接点が非導通になりT0がリセットされ、また最初からT0の計測が始まる……という2つのタイマの掛け合いで、Y0が1秒ON・1秒OFFを繰り返す点滅回路になります。表示灯の点滅やアラームの明滅表示でよく見かける、タイマだけで完結する定番パターンです。
積算タイマST=経過を覚えるタイマ
OUT Tが「条件が切れたら最初からやり直し」なのに対し、OUT ST(積算タイマ)は演算結果がOFFになっても現在値を保持し、次にONしたときは続きから計測を再開します。断続的なON/OFFを重ねながらトータルの経過時間を積み上げたいときに使う命令です。もう一つ普通のタイマと違うのが後始末で、低速/高速タイマはOFFになれば現在値も接点も自動で元に戻りますが、積算タイマは現在値のクリアと接点OFFをRST命令で明示的に行う必要があります。RSTを書き忘れると、タイムアップした状態のまま接点が戻らなくなります。典型的な使いどころは、設備の累積稼働時間を数えてメンテナンス時期を知らせるような、停止と再開を繰り返しながら合計時間を積算したい場面です。
OUT LT(ロングタイマ)
書式
出典: MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226 / ops/refs/instructions/02_timer-counter.md より転記。
| 命令記号 | 実行条件 | 主なオペランド/データ型 | 動作 |
|---|---|---|---|
OUT LT | 常時実行 | (d) ロングタイマ LT / Value 設定値 0〜4294967295(符号なしBIN32) | 演算結果ONの間コイルON・計測。タイムアップでa接点導通 |
OUT LST | 常時実行 | (d) ロング積算タイマ LST / Value 設定値 0〜4294967295 | ロング積算タイマ。演算結果OFFでも現在値を保持(クリアはRST) |
時限単位はパラメータ設定=0.001〜1000ms(既定0.001ms)。設定値0はOUT実行時にタイムアップ。
動作
OUT LTは、設定値の幅が32bit(0〜4294967295)に広がり、時限単位も既定0.001msという高分解能を持つ命令です。OUT Tでは設定値が32767までしか取れないため、長時間の計測や、ミリ秒より細かい精度が必要な場面では桁が足りなくなります。そこをカバーするのがOUT LTで、コイル・現在値・接点というタイマとしての動作の考え方自体はOUT Tと変わりません(積算版はOUT LST)。使い分けの目安としては、普段の用途は素直にOUT Tを使い、設定値が32767を超える、あるいはミリ秒単位より細かい精度が求められるときだけOUT LTに切り替える、という考え方でよいでしょう。
OUT C(カウンタ)とタイマ併用
書式
出典: MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226 / ops/refs/instructions/02_timer-counter.md より転記。
| 命令記号 | 実行条件 | 主なオペランド/データ型 | 動作 |
|---|---|---|---|
OUT C | 常時実行 | (d) カウンタ C / Value 設定値 0〜65535(符号なしBIN16) | 演算結果のOFF→ON毎に現在値+1。カウントアップでa接点導通 |
演算結果がONのままではカウントされない(カウント入力のパルス化は不要)。カウントアップ後はRST命令を実行するまでカウント値・接点は変化しない。設定値0は1と同一処理。
動作とサンプル
OUT Cは、演算結果がOFFからONへ変化した瞬間だけ現在値を+1する命令です。ONのままではカウントされないので、入力側であらかじめパルス化しておく必要はありません(タイマのように「ONし続けている間」計測するのではなく、変化の瞬間だけを拾う点がタイマとの大きな違いです)。カウントアップ(現在値が設定値以上)するとa接点が導通しますが、その後はRST命令を実行するまで現在値も接点も変化しません。数え終えたら手動でリセットするまでそのまま、という点は積算タイマの後始末とよく似ています。なお設定値0は1と同一処理として扱われます。
①ワークを10個数えたら満了ランプを点ける
[X0 OUT C0 K10]
[C0 OUT Y0 ]
[X1 RST C0 ]
X0(ワーク検出センサー)がOFF→ONするたびにC0が+1され、10個数えるとC0のa接点が導通してY0(満了ランプ)がONします。次のロットに進む前にX1(リセットボタン)でC0をRSTすれば、現在値0・Y0 OFFの状態から数え直せます。
②タイマとカウンタを組み合わせて長時間を作る
[T0(b接点) OUT T0 K600]
[T0 OUT C0 K60 ]
T0のb接点を自分自身のOUT T0の条件に使うことで、T0はタイムアップするたびに接点が切れて自分をリセットし、また最初から数え直す、という1分周期(K600×既定100ms)の自己発振パルスになります。このパルスの立上りをC0で60回数えれば、1時間相当の長時間計測が組み立てられます。OUT Tの設定値32767では足りない長時間を、タイマとカウンタの掛け合わせで作る昔からある定番の手法です。いまはOUT LTでも同様のことができるので、桁数に余裕を持たせたいときはLTへの置き換えも選択肢になります。
よくある誤解
①「K50=5秒」と思い込む
OUT T0 K50と書けば必ず5秒になる、と覚えている方は多いですが、それは時限単位が既定の100msだった場合の話です。時限単位はエンジニアリングツールのパラメータ設定で1〜1000msの範囲で変更でき、単位を10msに変えれば同じK50でも0.5秒になってしまいます。他人が作ったプロジェクトを引き継いだときや、古いプログラムを流用するときは、K値だけでなくパラメータの時限単位を必ず確認する癖をつけてください。
②途中で条件が切れても続きから数えると思い込む
「さっき数えていた分を覚えていてくれるはず」と期待してOUT Tを使うと、条件がOFFになった瞬間に現在値は0へ戻ってしまい、当てが外れます。続きから数えたいならOUT ST(積算タイマ)を使う場面です。逆にSTを使ったのにRST命令を書き忘れると、1回目のタイムアップ後は現在値も接点もそのまま残り続け、2回目以降は条件がONした瞬間にいきなりタイムアップしたような挙動になってしまいます。TとSTは「戻る/戻らない」がそっくり逆なので、どちらを使っているかを意識して回路を読む必要があります。
③タイマの接点で次のタイマを起動する「タイマ連鎖」の落とし穴
T0の接点でT1を起動し、T1の接点でT2を起動する……というタイマの数珠つなぎは現場でもよく見る回路ですが、書く順番を間違えると意図しない動作になります。スキャンタイムより短い設定値のとき、あるいは設定値が1のときに、T0→T1→T2の順(計測が早い順)にプログラミングすると、すべてのタイマが同一スキャンで一斉にONしてしまいます。マニュアルの注意事項にもあるとおり、後で計測するタイマ(この例ならT2)から先に書き、最後に一番早く動くタイマ(T0)を書く、という「後ろから書く」順番を守るのが安全です。
④カウンタは「ONしている間ずっと数える」と誤解する
OUT Cはタイマと違い、演算結果がOFFからONに変化した瞬間だけ現在値を+1する命令です。条件がONし続けていても、その間はカウントされません。逆に言えば、入力側でわざわざパルス化(PLSやP付き命令)をしなくても、OUT C自身が変化の瞬間しか拾わない仕組みになっています。ただし、入力信号が短すぎて次のスキャンをまたがずにOFFへ戻ってしまうような場合は、そもそも変化を検出できずカウント漏れが起きることがあります。センサーのパルス幅とスキャンタイムの関係は、高速なカウント対象を扱うときほど意識しておく必要があります。
