• Non ci sono risultati.

E THER CAT M ASTER (ST SOURCE C ODE )

1. Introduction and objectives

8.1 E THER CAT M ASTER (ST SOURCE C ODE )

1) GVLs: GVL_MASTER

1 // Contains all the global variables and constants 2

3 {attribute 'qualified_only'}

4 VAR_GLOBAL

5 (* OUTPUT GLOBALS VARIABLES *) 6

7 // sawtooth real out value 8 fSawtoothRealOut AT %Q*: REAL;

9 // sawtooth 8 bits signed integer out value 10 iSawtooth8BitsIntOut AT %Q*: SINT;

11 // sawtooth 16 bits signed integer out value 12 iSawtooth16BitsIntOut AT %Q*: INT;

13 // sawtooth 32 bits signed integer out value 14 iSawtooth32BitsIntOut AT %Q*: DINT;

15 // sawtooth 8 bits unsigned integer out value 16 uiSawtooth8BitsIntOut AT %Q*: USINT;

17 // sawtooth 16 bits unsigned integer out value 18 uiSawtooth16BitsIntOut AT %Q*: UINT;

19 // sawtooth 32 bits unsigned integer out value 20 uiSawtooth32BitsIntOut AT %Q*: UDINT;

21 // sawtooth bool out value

22 bSawtoothBoolOut AT %Q*: BOOL := TRUE;

23

24 // sawtooth real out scaled values array

25 fSawToothRealOutArray AT %Q*: SignalRealValuesArray;

26 // sawtooth out 8 bits signed integer out scaled values array 27 iSawtooth8BitIntOutArray AT %Q*: Signal8BitsIntValuesArray;

28 // sawtooth out 16 bits signed integer out scaled values array 29 iSawtooth16BitIntOutArray AT %Q*: Signal16BitsIntValuesArray;

30 // sawtooth out 32 bits signed integer out scaled values array 31 iSawtooth32BitIntOutArray AT %Q*: Signal32BitsIntValuesArray;

32 // sawtooth out 8 bits unsigned integer out scaled values array 33 uiSawtooth8BitUIntOutArray AT %Q*: Signal8BitsUIntValuesArray;

34 // sawtooth out 16 bits unsigned integer out scaled values array 35 uiSawtooth16BitUIntOutArray AT %Q*: Signal16BitsUIntValuesArray;

36 // sawtooth out 32 bits unsigned integer out scaled values array 37 uiSawtooth32BitUIntOutArray AT %Q*: Signal32BitsUIntValuesArray;

38

39 (* INPUT GLOBALS VARIABLES *) 40

41 // real in value

42 fRealValueIn AT %I*: REAL;

43 // 8 bits integer in value 44 i8BitsIntValueIn AT %I*: SINT;

45 // 16 bits integer in value 46 i16BitsIntValueIn AT %I*: INT;

47 // 32 bits integer in value 48 i32BitsIntValueIn AT %I*: DINT;

49 // 8 bits unsigned integer in value 50 ui8BitsIntValueIn AT %I*: USINT;

51 // 16 bits unsigned integer in value 52 ui16BitsIntValueIn AT %I*: UINT;

53 // 32 bits unsigned integer in value 54 ui32BitsIntValueIn AT %I*: UDINT;

55 // bool in value

56 bBoolValueIn AT %I*: BOOL;

57

58 // real in values array

59 fRealValuesInArray AT %I*: SignalRealValuesArray;

60 // 8 bits signed integer in values array

61 i8BitIntValuesInArray AT %I*: Signal8BitsIntValuesArray;

62 // 16 bits signed integer in values array

63 i16BitIntValuesInArray AT %I*: Signal16BitsIntValuesArray;

64 // 32 bits signed integer in values array

65 i32BitIntInValuesArray AT %I*: Signal32BitsIntValuesArray;

66 // 8 bits unsigned integer in values array

67 ui8BitIntValuesInArray AT %I*: Signal8BitsUIntValuesArray;

68 // 16 bits unsigned integer in values array

69 ui16BitIntValuesInArray AT %I*: Signal16BitsUIntValuesArray;

70 // 32 bits unsigned integer in values array

71 ui32BitIntInValuesArray AT %I*: Signal32BitsUIntValuesArray;

72 END_VAR 73

74 VAR_GLOBAL CONSTANT

75 // Minimum signal array subscript

115

76 MIN_ARRAY_IDX: INT := 1;

77 // Maximum signal array subscript 78 MAX_ARRAY_IDX: INT := 10;

79 // Max number of time tick before resetting signal values 80 MAX_TICK_COUNT: INT := 999;

81 END_VAR

2) DUTs: Signal16BitsIntValuesArray

1 // Definition of an array of 16 bits integers data type 2

3 TYPE Signal16BitsIntValuesArray :

4 ARRAY[GVL_MASTER.MIN_ARRAY_IDX ..GVL_MASTER.MAX_ARRAY_IDX] OF INT;

5 END_TYPE

3) DUTs: Signal16BitsUIntValuesArray

1 // Definition of an array of 16 bits unsigned integers data type 2

3 TYPE Signal16BitsUIntValuesArray :

4 ARRAY[GVL_MASTER.MIN_ARRAY_IDX ..GVL_MASTER.MAX_ARRAY_IDX] OF UINT;

5 END_TYPE

4) DUTs: Signal32BitsIntValuesArray

1 // Definition of an array of 32 bits integers data type 2

3 TYPE Signal32BitsIntValuesArray :

4 ARRAY[GVL_MASTER.MIN_ARRAY_IDX ..GVL_MASTER.MAX_ARRAY_IDX] OF DINT;

5 END_TYPE

5) DUTs: Signal32BitsUIntValuesArray

1 // Definition of an array of 32 bits unsigned integers data type 2

3 TYPE Signal32BitsUIntValuesArray :

4 ARRAY[GVL_MASTER.MIN_ARRAY_IDX ..GVL_MASTER.MAX_ARRAY_IDX] OF UDINT;

5 END_TYPE

6) DUTs: Signal8BitsIntValuesArray

1 // Definition of an array of 8 bits integers data type 2

3 TYPE Signal8BitsIntValuesArray :

4 ARRAY[GVL_MASTER.MIN_ARRAY_IDX..GVL_MASTER.MAX_ARRAY_IDX] OF SINT;

5 END_TYPE

7) DUTs: Signal8BitsUIntValuesArray

1 // Definition of an array of 8 bits unsigned integers data type 2

3 TYPE Signal8BitsUIntValuesArray :

4 ARRAY[GVL_MASTER.MIN_ARRAY_IDX..GVL_MASTER.MAX_ARRAY_IDX] OF USINT;

5 END_TYPE

8) DUTs: SignalRealValuesArray

1 // Definition of an array of reals data type 2

3 TYPE SignalRealValuesArray :

4 ARRAY[GVL_MASTER.MIN_ARRAY_IDX ..GVL_MASTER.MAX_ARRAY_IDX] OF REAL;

5 END_TYPE

9) POUs: fcGenerate16BitsIntSawtoothSignal (FUN)

1 // Generates a 16 bits integer sample multiplying the current time tick 2 // by a 16 bits integer scale factor

3

4 FUNCTION fcGenerate16BitsIntSawtoothSignal : INT 5 VAR_INPUT

6 // The signal scale factor 7 iScaleFactor: INT;

8 // The current time tick 9 iTimeTick: INT;

10 END_VAR 11

12 fcGenerate16BitsIntSawtoothSignal := iTimeTick * iScaleFactor;

116

10) POUs: fcGenerate16BitsIntSawtoothSignals (FUN)

1 // Generates an array of 16 bits integer samples multiplying the current time tick 2 // by 16 bits integer scale factors each corresponding to current array subscript 3

4 FUNCTION fcGenerate16BitsIntSawtoothSignals 5 VAR_IN_OUT

6 // the generated signals array

7 iSawTooth16BitsIntArray: Signal16BitsIntValuesArray;

8 END_VAR 9 VAR_INPUT

10 // the current time tick 11 iTimeTick: INT;

12 END_VAR 13 VAR

14 iIndex: INT;

15 END_VAR 16

17 FOR iIndex := GVL_MASTER.MIN_ARRAY_IDX TO GVL_MASTER.MAX_ARRAY_IDX DO

18 iSawTooth16BitsIntArray[iIndex]:=fcGenerate16BitsIntSawtoothSignal(iIndex, 19 iTimeTick);

20 END_FOR

11) POUs: fcGenerate16BitsUIntSawtoothSignal (FUN)

1 // Generates a 16 bits unsigned integer sample multiplying the current time tick 2 // by a 16 bits unsigned integer scale factor

3

4 FUNCTION fcGenerate16BitsUIntSawtoothSignal : UINT 5 VAR_INPUT

6 // The signal scale factor 7 iScaleFactor: INT;

8 // The current time tick 9 iTimeTick: INT;

10 END_VAR 11

12 fcGenerate16BitsUIntSawtoothSignal := INT_TO_UINT(iTimeTick * iScaleFactor);

12) POUs: fcGenerate16BitsUIntSawtoothSignals (FUN)

1 // Generates an array of 16 bits unsigned integer samples multiplying the current time tick 2 // by 16 bits unsigned integer scale factors each corresponding to current array subscript 3

4 FUNCTION fcGenerate16BitsUIntSawtoothSignals 5 VAR_IN_OUT

6 // the generated signals array

7 uiSawTooth16BitsIntArray: Signal16BitsUIntValuesArray;

8 END_VAR 9 VAR_INPUT

10 // the current time tick 11 iTimeTick: INT;

12 END_VAR 13 VAR

14 iIndex: INT;

15 END_VAR 16

17 FOR iIndex := GVL_MASTER.MIN_ARRAY_IDX TO GVL_MASTER.MAX_ARRAY_IDX DO

18 uiSawTooth16BitsIntArray[iIndex] := fcGenerate16BitsUIntSawtoothSignal(iIndex, 19 iTimeTick);

20 END_FOR

13) POUs: fcGenerate32BitsIntSawtoothSignal (FUN)

1 FUNCTION fcGenerate32BitsIntSawtoothSignal : DINT 2 VAR_INPUT

3 // The signal scale factor 4 iScaleFactor: INT;

5 // The current time tick 6 iTimeTick: INT;

7 END_VAR 8

9 fcGenerate32BitsIntSawtoothSignal := INT_TO_DINT(iTimeTick * iScaleFactor);

14) POUs: fcGenerate32BitsIntSawtoothSignals (FUN)

1 // Generates an array of 32 bits integer samples multiplying the current time tick 2 // by 32 bits integer scale factors each corresponding to current array subscript 3 4 FUNCTION fcGenerate32BitsIntSawtoothSignals

5 VAR_IN_OUT

6 // the generated signals array

7 iSawTooth32BitsIntArray: Signal32BitsIntValuesArray;

8 END_VAR

117

9 VAR_INPUT

10 // the current time tick 11 iTimeTick: INT;

12 END_VAR 13 VAR

14 iIndex: INT;

15 END_VAR 16

17 FOR iIndex := GVL_MASTER.MIN_ARRAY_IDX TO GVL_MASTER.MAX_ARRAY_IDX DO 18 iSawTooth32BitsIntArray[iIndex] := fcGenerate32BitsIntSawtoothSignal(iIndex, 19 iTimeTick);

20 END_FOR

15) POUs: fcGenerate32BitsUIntSawtoothSignal (FUN)

1 // Generates a 32 bits unsigned integer sample multiplying the current time tick 2 // by a 32 bits unsigned integer scale factor

3 4 FUNCTION fcGenerate32BitsUIntSawtoothSignal : UDINT 5 VAR_INPUT

6 // The signal scale factor 7 iScaleFactor: INT;

8 // The current time tick 9 iTimeTick: INT;

10 END_VAR 11

12 fcGenerate32BitsUIntSawtoothSignal := INT_TO_UDINT(iTimeTick * iScaleFactor);

16) POUs: fcGenerate32BitsUIntSawtoothSignals (FUN)

1 // Generates an array of 32 bits unsigned integer samples multiplying the current time tick 2 // by 32 bits unsigned integer scale factors each corresponding to current array subscript 3

4 FUNCTION fcGenerate32BitsUIntSawtoothSignals 5 VAR_IN_OUT

6 // the generated signals array

7 uiSawTooth32BitsIntArray: Signal32BitsUIntValuesArray;

8 END_VAR 9 VAR_INPUT

10 // the current time tick 11 iTimeTick: INT;

12 END_VAR 13 VAR

14 iIndex: INT;

15 END_VAR 16

17 FOR iIndex := GVL_MASTER.MIN_ARRAY_IDX TO GVL_MASTER.MAX_ARRAY_IDX DO

18 uiSawTooth32BitsIntArray[iIndex] := fcGenerate32BitsUIntSawtoothSignal(iIndex, 19 iTimeTick);

20 END_FOR

17) POUs: fcGenerate8BitsIntSawtoothSignal (FUN)

1 // Generates a 8 bits integer sample multiplying the current time tick 2 // by a 8 bits integer scale factor

3

4 FUNCTION fcGenerate8BitsIntSawtoothSignal : SINT 5 VAR_INPUT

6 // The signal scale factor 7 iScaleFactor: INT;

8 // The current time tick 9 iTimeTick: INT;

10 END_VAR 11

12 fcGenerate8BitsIntSawtoothSignal := INT_TO_SINT(iTimeTick * iScaleFactor);

18) POUs: fcGenerate8BitsIntSawtoothSignals (FUN)

1 // Generates an array of 8 bits integer samples multiplying the current time tick 2 // by 8 bits integer scale factors each corresponding to current array subscript 3

4 FUNCTION fcGenerate8BitsIntSawtoothSignals 5 VAR_IN_OUT

6 // the generated signals array

7 iSawTooth8BitsIntArray: Signal8BitsIntValuesArray;

8 END_VAR 9 VAR_INPUT

10 // the current time tick 11 iTimeTick: INT;

12 END_VAR 13 VAR

14 iIndex: INT;

15 END_VAR

118

16

17 FOR iIndex := GVL_MASTER.MIN_ARRAY_IDX TO GVL_MASTER.MAX_ARRAY_IDX DO

18 iSawTooth8BitsIntArray[iIndex] := fcGenerate8BitsIntSawtoothSignal(iIndex, 19 iTimeTick);

20 END_FOR

19) POUs: fcGenerate8BitsUIntSawtoothSignal (FUN)

1 // Generates a 8 bits unsigned integer sample multiplying the current time tick 2 // by a 8 bits unsigned integer scale factor

3

4 FUNCTION fcGenerate8BitsUIntSawtoothSignal : USINT 5 VAR_INPUT

6 // The signal scale factor 7 iScaleFactor: INT;

8 // The current time tick 9 iTimeTick: INT;

10 END_VAR 11

12 fcGenerate8BitsUIntSawtoothSignal := INT_TO_USINT(iTimeTick * iScaleFactor);

20) POUs: fcGenerate8BitsUIntSawtoothSignals (FUN)

1 // Generates an array of 8 bits unsigned integer samples multiplying the current time tick 2 // by 8 bits unsigned integer scale factors each corresponding to current array subscript 3

4 FUNCTION fcGenerate8BitsUIntSawtoothSignals 5 VAR_IN_OUT

6 // the generated signals array

7 uiSawTooth8BitsIntArray: Signal8BitsUIntValuesArray;

8 END_VAR 9 VAR_INPUT

10 // the current time tick 11 iTimeTick: INT;

12 END_VAR 13 VAR

14 iIndex: INT;

15 END_VAR 16

17 FOR iIndex := GVL_MASTER.MIN_ARRAY_IDX TO GVL_MASTER.MAX_ARRAY_IDX DO

18 uiSawTooth8BitsIntArray[iIndex] := fcGenerate8BitsUIntSawtoothSignal(iIndex, 19 iTimeTick);

20 END_FOR

21) POUs: fcGenerateRealSawtoothSignal (FUN)

1 // Generates a real sample multiplying the current time tick 2 // by a real scale factor

3

4 FUNCTION fcGenerateRealSawtoothSignal : REAL 5 VAR_INPUT

6 // The signal scale factor 7 fScaleFactor: REAL;

8 // The current time tick 9 iTimeTick: INT;

10 END_VAR 11

12 fcGenerateRealSawtoothSignal := INT_TO_REAL(iTimeTick) * fScaleFactor;

22) POUs: fcGenerateRealSawtoohSignals (FUN)

1 // Generates an array of real samples multiplying the current time tick 2 // by scale factors each corresponding to current array subscript 3 4 FUNCTION fcGenerateRealSawtoohSignals

5 VAR_IN_OUT

6 // the generated signals array

7 fSawtoothRealValuesArray: SignalRealValuesArray;

8 END_VAR 9 VAR_INPUT

10 // The current time tick 11 iTimeTick: INT;

12 END_VAR 13 VAR

14 iIndex : INT;

15 END_VAR 16

17 FOR iIndex := GVL_MASTER.MIN_ARRAY_IDX TO GVL_MASTER.MAX_ARRAY_IDX DO

18 fSawtoothRealValuesArray[iIndex]:=fcGenerateRealSawtoothSignal(INT_TO_REAL(iIndex, 19 iTimeTick);

20 END_FOR

119

23) POUs: MASTER_MAIN (PRG)

1 // This is the main program executed in task with cycle time of one millisecond.

2 // It generates all the ramps and the rectangular boolean signals, 3 // the signals are periodic with the periodo equal to one second 4

5 PROGRAM MASTER_MAIN 6 VAR

7 iTimeTick : INT := 0;

8 END_VAR 9

10 IF iTimeTick = GVL_MASTER.MAX_TICK_COUNT THEN 11 // reset the time tick when the max is reached 12 iTimeTick := 0;

13 END_IF 14

15 IF (iTimeTick MOD ((GVL_MASTER.MAX_TICK_COUNT + 1) / 2) = 0) THEN 16 GVL_MASTER.bSawtoothBoolOut := NOT(GVL_MASTER.bSawtoothBoolOut);

17 END_IF 18

19 // Generate the periodic signals 20

21 // Real sawtooths

22 GVL_MASTER.fSawtoothRealOut := fcGenerateRealSawtoothSignal(1.0, iTimeTick);

23 fcGenerateRealSawtoohSignals(GVL_MASTER.fSawToothRealOutArray, iTimeTick);

24

25 // signed integer sawtooths

26 GVL_MASTER.iSawtooth8BitsIntOut := fcGenerate8BitsIntSawtoothSignal(1, iTimeTick);

27 fcGenerate8BitsIntSawtoothSignals(GVL_MASTER.iSawtooth8BitIntOutArray, iTimeTick);

28

29 GVL_MASTER.iSawtooth16BitsIntOut := fcGenerate16BitsIntSawtoothSignal(1, iTimeTick);

30 fcGenerate16BitsIntSawtoothSignals(GVL_MASTER.iSawtooth16BitIntOutArray, iTimeTick);

31

32 GVL_MASTER.iSawtooth32BitsIntOut := fcGenerate32BitsIntSawtoothSignal(1, iTimeTick);

33 fcGenerate32BitsIntSawtoothSignals(GVL_MASTER.iSawtooth32BitIntOutArray, iTimeTick);

34

35 // unsigned integer sawtooths

36 GVL_MASTER.uiSawtooth8BitsIntOut := fcGenerate8BitsUIntSawtoothSignal(1, iTimeTick);

37 fcGenerate8BitsUIntSawtoothSignals(GVL_MASTER.uiSawtooth8BitUIntOutArray, iTimeTick);

38

39 GVL_MASTER.uiSawtooth16BitsIntOut := fcGenerate16BitsUIntSawtoothSignal(1, iTimeTick);

40 fcGenerate16BitsUIntSawtoothSignals(GVL_MASTER.uiSawtooth16BitUIntOutArray, iTimeTick);

41

42 GVL_MASTER.uiSawtooth32BitsIntOut := fcGenerate32BitsUIntSawtoothSignal(1, iTimeTick);

43 fcGenerate32BitsUIntSawtoothSignals(GVL_MASTER.uiSawtooth32BitUIntOutArray, iTimeTick);

44

45 // update the time tick 46 iTimeTick := iTimeTick + 1;