PLCでは時間を計測する方法がいくつかあります。
通常は条件成立から目標となる(半固定的な)時間が経過したかどうか?で判断する使い方が多いのですが、ストップウォッチのように不定な時間を計測したいこともあります。
今回は時間計測の方法を紹介します。
※一般的なCPUの機能のみ。高速カウンタ等の別ユニットは除きます。
タイマを使う
一番オーソドックスな方法です。
上記の場合は通常32K(0~32767)までしかカウント出来ないので0.1秒でカウントするタイマでは最大3276.7秒までしか対応できません。
KEYECEのタイマは32bit=4byteなので上限が異なります。
またiQ-Rのロングタイマはカウント単位が違うので注意です。
上記よりも長い時間に対応させるにはタイマのリセットとワードデバイスを使う方法があります。
これはタイマで毎回1秒をカウントしてリセット&インクリメント(D10)で計測します。1秒ではなく10秒や60秒でカウントすると計測可能な上限が変わります。もちろんインクリメントするワードデバイスもシングルワードではなくダブルワードにすることでも上限が変わります。またタイマをリセットするスキャンでわずかに時間がズレる(基本的にスキャンタイムの分だけ伸びる)ので注意が必要です。
不定な時間を計測する場合は以下のようになります。
上記の場合はT1の時間(0.1秒単位)をD1に転送して時間を計測しています。この方法の注意点は①計測最長が3276.7秒までになること、②スキャンタイム+0.1秒のズレが生じる可能性があること、の2点です。
通常タイマではなく高速タイマ(0.01秒単位)を使うと最長327.67秒まで、スキャンタイム+0.01秒のズレ、となるので精度が少し上がります。
システムクロックを使う
たいていのPLCには0.1秒や1秒クロックがあるので、クロックとワードデバイスを使えばタイマを使わなくても計測が出来ます。
タイマを使うこととの違いは計測開始条件成立から最初の1カウントで0.1秒/1秒のズレが生じる可能性があります。システムクロックはPLCのスキャン動作とは別に時間経過でON/OFFするためです。
より精度を求めるには短いクロックを、長い時間を計測するにはダブルワードにすることである程度は対応が可能です。
この方法だとタイマを使わなくて良い反面、時間経過・到達をチェックするには値比較と別のデバイス(ビット)が必要になります。
カウンタを使う
カウンタを使う場合は基本的にシステムクロックと併用になります。
使い方は上図のようなパターンです。(ただしリセットが抜けているので注意。。)
カウンタは条件成立の立ち上がりで内部の値をインクリメントするデバイスなので時間を計測する場合はシステムクロックを併用するのが前提となります。カウンタを使わずシステムクロックとワードデバイスだけでも”計測する”という意味ではどちらも大差ないです。主な違いと言えば時間経過・到達の際にカウンタを使っていればカウンタの接点が使える、ことでしょうか。カウンタを使わない場合は数値の大小比較で別のデバイスが必要になります。
スキャンタイムを使う
PLCには毎スキャンタイムを特殊レジスタに格納しているので、その値を積算することで時間計測が可能です。(メーカによって格納される単位が違うので注意)
タイマやシステムクロックを使うより精度は良くなりますが、スキャンタイム分のズレが生じる可能性に注意が必要になります。
また簡単な計算が必要になるので多少手間になることと、us単位の値を扱う=値が大きくなる=計測可能な時間が短い、等のデメリットも多少あります。
まとめ
(たいした内容ではありませんが、、)
時間を計測する書き方にもいくつかあり、メリット・デメリットがあります。(手間とか精度とかデバイス消費する・しないとか)
慣れた方法で記述して特に問題はありませんが、どの方法にしても時間の計測には誤差・ズレがあることを意識しておく必要があります。通常はその誤差やズレが問題にならないだけです。
コメント
コメント一覧 (2件)
これは私の勝手な妄想なんですが、
タイマコイルは CR回路で、SM は RTC なんかなぁ、とか思ったりしたことがあったんですが、実際はどうなんでしょうか。
タイマコイルも RTCで、それの分周なんでしょうかね。
タイマの中身まで考えたことありませんでした(^^;
なんとなくCPU内のハードウェアクロックの分周で機能を作っているんだろうな~くらいですかね。
タイマとシステムクロックでは更新されるタイミングは違うものの中身は同じなんじゃないかと予想してますが。。