Beckhoff#TwinCAT プログラム実行時間 計測

Function Block

このProfiler FBを使用することによってPLC Codeの実行時間を測ることできます。FBの中にどうやらGETCPUACCOUNTが呼び出されてるようです。STARTの立ち上げて測り始め、STARTのたち下げで測り終わります。

Function Blockは最後の10回の実行時間から平均値を計算します。プログラムのなかにMAX_AVERAGE_MEASURESというGlobal 変数で平均値計算の回数を設定できます。

RESETの立ち上げするとでSTART INPUTとDATA同時にRESETされます。計算結果はDATAのところに出力されます。DATAの変数タイプはPROFILERSTRUCTです。

Library 追加

References>Add libraryします。

Tc2_Utilitiesを追加します。

VAR_INPUT

VAR_INPUT
STARTBOOL立ち上げ=CycleTime測る Startたち下げ=CycleTime測る Stop
RESETBOOL立ち上げ=StartとDataリセット

VAR_OUTPUT

VAR_OUTPUT
BUSYBOOLTrue=実行中
DATAPROFILERSTRUCTCycletimeなどのデータ(µs)

PROFILERSTRUCT

LastExecTimeDWORD最後のCode実行時間(µs)
MinExecTimeDWORD最少のCode実行時間(µs)
MaxExecTimeDWORD最大のCode実行時間(µs)
AverageExecTimeDWORD平均のCode実行時間(µs)
MeasureCycleDWORD合計測った回数

MAX_AVERAGE_MEASURES

Example

iTestCounterはWhile loopで使われてるCounterです。

VAR

PROGRAM MAIN
VAR

Profile:Profiler;
ProfileStruct:PROFILERSTRUCT;
i:INT;
iTestCounter:INT:=1000;
END_VAR

Code

MAX_AVERAGE_MEASURESは平均実行時間の計算回数設定です。

MAX_AVERAGE_MEASURES:=99;

Profile(
START:=TRUE
,RESET:=TRUE
,BUSY=>
,DATA=>ProfileStruct
);

i:=0;

WHILE i<=iTestCounter DO

i:=i+1;

END_WHILE

Profile(
START:=FALSE
);

i:=0;

結果

iTestCounterは30000に設定します。

実行時間などは出てきます。

こちらはSample Codeです:

https://github.com/soup01Threes/TwinCAT3/blob/main/TwinCAT%20Project_UsingProfilerToGetCycleTime.tnzip

はーい、お疲れ様です。

もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!

Twitterのご相談:@3threes2

メールのご相談:soup01threes*gmail.com (*を@に)

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする