概略

あるビットがONしている時間を知りたい時など、ON時間を計測する方法を紹介します。
この方法を応用してタクトタイムを計測するなどにも利用できます

設備のサイクルタイムなどはシステム時計で計測するのが一般的で、ファンクションの処理時間などを計測するときはさらに細かくフリーランニングカウンタを使うことで計測が可能です。

ビットのON時間やタクトタイムを計測する方法

ラダー

SW001の立上りで現在時刻をStartTimeに保存します。
その後、SW001の立下りで現在時刻をEndTimeに入れてSUB_DT_DT()命令でEndTimeからStartTimeを引きElapsedTimeに保存します。

システム時計で時間計測
システム時計で時間計測

ElapsedTimeにはTime型で保存されるので数値型に変換したい場合はTimeToNanoSec()命令で数値に変換してください。

ST

ラダーと同様に処理開始の前にStartTimeに現在時刻を保存して、処理終了で現在時刻とStartTimeの差を経過時間を計測します。

StartTime := GetTime();

//処理を記載

ElapsedTime:=SUB_DT_DT(GetTime(),StartTime);
MaxScan:=(LINT_TO_UDINT(TimeToNanoSec(ElapsedTime)/1000));	//ミリ秒に変換
	

さらに細かくスキャン内で経過時間を計測する方法

プログラムの処理時間(経過時間)をマイクロ秒単位で計測します

ElapsedSecondsファンクションで時間計測
ElapsedSecondsファンクションで時間計測

シンボル

ElapsedSecondsFunc
入力
StartMicroSecCnt
計測開始時のフリーランニングカウンタの値
出力
out
計測時間(秒)(LREAL型)

よくある質問

PLCでビットのON時間を計測できますか?

GetTime()関数とSUB_DT_DT()命令を使用することで計測できます。

タクトタイムの測定はできますか?

開始時刻と終了時刻の差分から計測できます。

処理時間はマイクロ秒単位で取得できますか?

フリーランニングカウンタを利用することで取得できます。

ダウンロード

この記事へのコメント