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 | ||
START | BOOL | pulse on=開始計時pulse off=停止計時 |
RESET | BOOL | pulse on=data,start重置 |
VAR_OUTPUT
VAR_OUTPUT | ||
BUSY | BOOL | True=實行中 |
DATA | PROFILERSTRUCT | Cycletime data(µs) |
PROFILERSTRUCT
LastExecTime | DWORD | 最後1次的Code實行時間(µs) |
MinExecTime | DWORD | 最少のCode實行時間(µs) |
MaxExecTime | DWORD | 最大的Code實行時間(µs) |
AverageExecTime | DWORD | 平均的Code實行時間(µs) |
MeasureCycle | DWORD | 合計回邥 |
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:
Twitter:@3threes2
mail:soup01threes*gmail.com (*を@に)