【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 T0 K50。X0を押し続けて5秒後にY0がONする遅延ON回路。時限単位が既定の100msならK50=5秒で、T0のコイルと接点は同じ「T0」という名前。ラダー図は2行。1行目は左母線からa接点X0を通り、命令ボックス「OUT T0 K50」へつながり右母線に至る。OUTが命令、T0が(d)タイマ、K50がValue設定値。2行目は左母線からa接点T0を通り、Y0のコイル記号へつながり右母線に至る。1行目でT0が計測し、2行目でそのT0の接点がY0を駆動する。注意:X0を5秒未満で離すと、T0は最初からやり直しで途中の経過は一切残らない。低速タイマ・高速タイマは、コイルがOFFになると同時に現在値も0へ戻り、接点も元の状態に戻る。K50が「5秒」になるのは時限単位が既定の100msだからで、この単位はパラメータ設定で1〜1000msの範囲で変更できる。他人のプログラムを引き継いだときは、K値だけでなくこの単位設定も必ず確認する。出典:MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226
図1:X0を実行条件にOUT T0 K50を組み、T0の接点でY0を駆動するラダー図です。時限単位が既定の100msなら、X0がONしてから5秒後にY0がONする遅延ON回路になります。
OUT T0 K50のタイムチャート。現在値が設定値に達した瞬間に接点が導通する。横軸に時間を取り、5段の波形が並ぶ。1段目X0はONしてしばらく保持したあとOFFに戻る。2段目T0コイルはX0と同じタイミングでONし、同じタイミングでOFFに戻る。3段目T0現在値はX0のONと同時に0から直線的に増え続け、設定値に達したところで頭打ちになり、X0がOFFに戻った瞬間に0へ落ちる。4段目T0接点は現在値が設定値に達した瞬間にONし、X0がOFFに戻ると同時にOFFへ戻る。5段目Y0はT0接点とまったく同じ波形になる。タイムアップの位置に赤い破線で「タイムアップ(現在値≧設定値)」、X0が切れる位置に灰色の破線で「X0がOFFに戻る」と注記されている。X0がOFFに戻ると、コイル・現在値・接点が同時に元の状態へ戻る。低速タイマ・高速タイマは、コイルがOFFになると同時に現在値も0へ戻り、途中の経過は残らない。途中で条件が切れても経過時間を覚えていてほしいならOUT ST(積算タイマ)。クリアはRST。出典:MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226
図2:X0がONするとT0のコイルがONして現在値が0から増え続け、設定値(K50)に達した瞬間にT0接点が導通してY0が立ち上がる様子をタイムチャートで確認できます。X0がOFFに戻ると、コイル・現在値・接点はすべて即座に元の状態へ戻ります。
「T0」という1つの名前に3つの顔がある。OUT T命令はコイル・現在値・接点の3つをまとめて動かしている。図の中央上に「T0」の箱があり、そこから3本の線が下の3つの箱へ分かれる。1つ目はコイル(入力)で「演算結果がONの間、コイルはONし続ける」。2つ目は現在値(進行中のカウント)で「0から増え続け、設定値に達するとタイムアップ」。3つ目は接点(出力)で「タイムアップするとa接点が導通し、b接点は非導通に切り替わる」。この3つがセットでON/OFFすると考えると、回路の動きを追いやすくなる。演算結果がONの間、T0のコイルはONし続け、設定値まで現在値を計測する。タイムアップ(現在値が設定値以上)すると、a接点は導通しb接点は非導通に切り替わる。演算結果がOFFに戻ると、低速タイマ・高速タイマは現在値も0へ戻り、接点も元の状態に戻る。出典:MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226
図3:「T0」という1つのデバイス名の裏には、コイル(入力)・現在値(進行中のカウント)・接点(出力)という3つの顔があることを示した図です。OUT T命令はこの3つをまとめて動かしています。

動作を整理すると、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 LT0 K1000。コイル・現在値・接点が32bit幅に広がった版で、動作の考え方自体はOUT Tと同じ。時限単位が既定の0.001msならK1000=1秒。ラダー図は2行。1行目は左母線からa接点X0を通り、命令ボックス「OUT LT0 K1000」へつながり右母線に至る。OUTが命令、LT0が(d)タイマ、K1000がValue設定値。2行目は左母線からa接点LT0を通り、Y0のコイル記号へつながり右母線に至る。1行目でLT0が計測し、2行目でそのLT0の接点がY0を駆動する。設定値は0〜4294967295(符号なしBIN32)で、32767を超える長時間や0.001ms単位の高分解能に使う。時限単位はパラメータ設定で0.001〜1000msの範囲(既定0.001ms)。設定値0はOUT実行時にタイムアップする。演算結果OFFでも現在値を保持したいならOUT LST(ロング積算タイマ)。クリアはRST。出典:MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226
図4:X0を実行条件にOUT LT0 K1000を組み、LT0の接点でY0を駆動するラダー図です。動作の考え方自体はOUT Tと同じで、コイル・現在値・接点の3要素が32bit幅に広がった版と考えるとイメージしやすくなります。時限単位をパラメータで1msに設定していれば、K1000で1秒後にY0がONします。
OUT TとOUT LTの仕様比較表。動作の考え方は同じで、コイル・現在値・接点の3要素が32bit幅に広がったのがLT。表は5行。設定値の上限はOUT Tが0〜32767、OUT LTが0〜4294967295。データ幅はOUT Tが符号なしBIN16、OUT LTが符号なしBIN32。時限単位の既定はOUT Tが100ms、OUT LTが0.001ms。時限単位の設定範囲はOUT Tが1〜1000ms、OUT LTが0.001〜1000ms。現在値を保持する版はOUT TがOUT ST(積算タイマ)、OUT LTがOUT LST(ロング積算タイマ)。どちらも「設定値0はOUT実行時にタイムアップ」する。設定値は定数ならK(10進)のみで、D等のワードデバイスでの間接指定も可(T/ST/Cは不可)。時限単位はエンジニアリングツールのパラメータ設定で変更できるので、K値だけ見て秒数を判断しないこと。出典:MELSEC iQ-R プログラミングマニュアル(CPUユニット用命令/汎用FUN/汎用FB編)SH-081226
図5:OUT TとOUT LTの仕様を並べたキャプチャです。設定値の上限(32767 vs 4294967295)や、時限単位の既定値(100ms vs 0.001ms)の違いが一目で比較できます。

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へ戻ってしまうような場合は、そもそも変化を検出できずカウント漏れが起きることがあります。センサーのパルス幅とスキャンタイムの関係は、高速なカウント対象を扱うときほど意識しておく必要があります。

よくある質問(FAQ)

Q1. OUT T命令の使い方と、設定値(K値)の意味を教えてください。
A. OUT T命令までの演算結果がONの間、指定したタイマのコイルがONして設定値まで現在値を計測し、タイムアップ(現在値が設定値以上)するとa接点が導通する命令です。[X0 OUT T0 K50] と書き、別の行でT0のa接点でY0を駆動すれば、X0がONしてから5秒後にY0がONする遅延ON回路になります。設定値は0〜32767(符号なしBIN16)の範囲で指定し、K50が5秒になるのは時限単位が既定の100msだからです。時限単位はエンジニアリングツールのパラメータ設定で1〜1000msの範囲で変更できるため、K値だけで秒数を判断せず、単位の設定もあわせて確認してください。

Q2. 積算タイマOUT STは、普通のタイマOUT Tと何が違うのですか?
A. OUT Tは演算結果がOFFに戻ると現在値が0へ戻り、途中の経過は残らず最初からやり直しになります。OUT ST(積算タイマ)は演算結果がOFFになっても現在値を保持し、次にONしたときは続きから計測を再開します。もう一つの違いが後始末で、低速タイマ・高速タイマはOFFになれば現在値も接点も自動で元に戻りますが、積算タイマは現在値のクリアと接点OFFをRST命令で明示的に行う必要があります。RSTを書き忘れると、タイムアップした状態のまま接点が戻らなくなります。停止と再開を繰り返しながら設備の累積稼働時間を積算したい場面が、典型的な使いどころです。

Q3. ロングタイマOUT LTはどんなときに使いますか?
A. OUT Tの設定値の上限である32767を超える長時間を計測したいとき、あるいはミリ秒単位より細かい精度が必要なときです。OUT LTは設定値の幅が0〜4294967295(符号なしBIN32)に広がり、時限単位もパラメータ設定で0.001〜1000ms(既定0.001ms)という高分解能を持ちます。コイル・現在値・接点というタイマとしての動作の考え方自体はOUT Tと変わらず、3要素が32bit幅に広がった版と考えるとイメージしやすくなります(積算版はOUT LST)。普段の用途は素直にOUT Tを使い、桁や精度が足りない場面だけOUT LTに切り替える、という使い分けでよいでしょう。

Q4. タイマの接点で次のタイマを起動する「タイマ連鎖」で気をつけることは何ですか?
A. T0の接点でT1を起動し、T1の接点でT2を起動するというタイマの数珠つなぎは、プログラムを書く順番を間違えると意図しない動作になります。スキャンタイムより短い設定値のとき、あるいは設定値が1のときに、T0→T1→T2の順(計測が早い順)にプログラミングすると、すべてのタイマが同一スキャンで一斉にONしてしまいます。マニュアルの注意事項にもあるとおり、後で計測するタイマ(この例ならT2)から先に書き、最後に最も早く動くタイマ(T0)を書く、という「後ろから書く」順番を守るのが安全です。

関連命令

関連記事