Beckhoff#計算TwinCAT 程式的實行所需時間

Function Block

今次我們我用Profiler FB去測量plc code的實行時間。在這個fb的入面它好像使用了GETCPUACCOUNT的fb去實裝這個function。start的pulse on開始計時,然後start的pulse down就計時完畢。

這個function block會使用最後的10次的計時平均時間。我們可以調整MAX_AVERAGE_MEASURES的global變數去設定計數平均的次數。

reset的pulse on就data就會被重置。計算結果就會output到data引數,那個data的變數type是PROFILERSTRUCT。

Library 追加

References>Add library。

追加Tc2_Utilities。

VAR_INPUT

VAR_INPUT
STARTBOOLpulse on=開始計時pulse off=停止計時
RESETBOOLpulse on=data,start重置

VAR_OUTPUT

VAR_OUTPUT
BUSYBOOLTrue=實行中
DATAPROFILERSTRUCTCycletime data(µs)

PROFILERSTRUCT

LastExecTimeDWORD最後1次的Code實行時間(µs)
MinExecTimeDWORD最少のCode實行時間(µs)
MaxExecTimeDWORD最大的Code實行時間(µs)
AverageExecTimeDWORD平均的Code實行時間(µs)
MeasureCycleDWORD合計回邥

MAX_AVERAGE_MEASURES

Example

在這個例子中我會用while loop用作1個dummy 程式。

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設定為3000。

然後我們會見到這個while loop的實行時間。

Sample Code:

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

Twitter:@3threes2

mail: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

シェアする

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

フォローする