FUNCTION fc1:VOID
VAR_TEMP
i:INT;
iIndex:INT;
diIndex:DINT;
diResult:DINT;
TestType, temp:INT;
rData1,rData2:REAL;
swapped:BOOL;
boolvar_1:BOOL;
boolvar_2:BOOL;
boolvar_3:BOOL;
boolvar_4:BOOL;
boolvar_5:BOOL;
boolvar_6:BOOL;
boolvar_7:BOOL;
boolvar_8:BOOL;
boolvar_9:BOOL;
boolvar_10:BOOL;
Result:ARRAY[0..999] OF INT;
END_VAR
testType:=9;
CASE TestType OF
1: //indexed multiply with non-zero data - 85ms
FOR iIndex := 0 TO 9999 DO
FOR i:=0 TO 9 do
"dbResult".diData[iIndex] := REAL_TO_DINT("dbData1".arData[iIndex] * "dbData2".arData[iIndex]);
end_For;
END_FOR;
2: //non indexed multiply with non-zero data - 21ms
rData1 := 100.0;
rData2 := 1000.0;
FOR diIndex := 0 TO 99999 DO
diResult := REAL_TO_DINT(rData1 * rData2 );
END_FOR;
3: // some trig functions - 160ms
rData1 := 0.1;
rData2 := 0.2;
FOR diIndex := 0 TO 99999 DO
diResult := REAL_TO_DINT(TAN(rData1) * TAN(rData2));
END_FOR;
4: //non indexed multiply with non-zero data, more calcs, for loop smaller - 14.0ms
rData1 := 1000.0;
rData2 := 100.0;
FOR diIndex := 0 TO 9999 DO
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
diResult := REAL_TO_DINT(rData1 * rData2);
END_FOR;
5: //non indexed divide with non-zero data - 25ms
rData1 := 1000.0;
rData2 := 100.0;
FOR diIndex := 0 TO 99999 DO
diResult := REAL_TO_DINT(rData1 / rData2);
END_FOR;
6: //non indexed multiply with zero data - 21ms
rData1 := 0.0;
rData2 := 0.0;
FOR diIndex := 0 TO 99999 DO
diResult := REAL_TO_DINT(rData1 * rData2);
END_FOR;
7: //Boolean logic - 20ms
FOR diIndex := 0 TO 99999 DO
boolvar_1 := (boolvar_2 AND boolvar_3) OR (boolvar_4 AND boolvar_5); // logic --(=)
IF (boolvar_6 AND boolvar_7) THEN
boolvar_10 := TRUE; // logic --(S)
END_IF;
IF (boolvar_8 OR boolvar_9) THEN
boolvar_10 := FALSE; // logic --(R)
END_IF;
END_FOR;
8: //Bitwise operation - 18ms
FOR diIndex:=0 TO 99999 DO
diResult := DWORD_TO_DINT(DINT_TO_DWORD(diIndex) AND dw#16#aaa); //* Every other bit FOR 12 bits
END_FOR;
9: //bubble sort - 456ms
Result[0] := 2;
Result[999] := -1;
REPEAT
swapped := 0;
FOR diIndex := 1 TO 999 DO
IF (Result[diIndex - 1] > Result[diIndex]) THEN
Temp := Result[diIndex];
Result[diIndex] := Result[diIndex - 1];
Result[diIndex - 1] := Temp;
swapped := 1;
END_IF;
END_FOR;
UNTIL (NOT swapped)
END_REPEAT;
10: //initialise array of data to non-zero values
FOR diIndex := 0 TO 9999 DO
"dbData1".arData[diIndex] := DINT_TO_REAL(diIndex) / 100.0;
"dbData2".arData[diIndex] := DINT_TO_REAL(diIndex) / 50.0;
END_FOR;
END_CASE;
end_function