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 | ||
START | BOOL | 立ち上げ=CycleTime測る Startたち下げ=CycleTime測る Stop |
RESET | BOOL | 立ち上げ=StartとDataリセット |
VAR_OUTPUT
VAR_OUTPUT | ||
BUSY | BOOL | True=実行中 |
DATA | PROFILERSTRUCT | Cycletimeなどのデータ(µs) |
PROFILERSTRUCT
LastExecTime | DWORD | 最後のCode実行時間(µs) |
MinExecTime | DWORD | 最少のCode実行時間(µs) |
MaxExecTime | DWORD | 最大のCode実行時間(µs) |
AverageExecTime | DWORD | 平均のCode実行時間(µs) |
MeasureCycle | DWORD | 合計測った回数 |
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です:
はーい、お疲れ様です。
もしなにか質問あれば、メール・コメント・Twitterなどでもどうぞ!
Twitterのご相談:@3threes2
メールのご相談:soup01threes*gmail.com (*を@に)