FUNCTION_BLOCK FB 1 TITLE = VERSION : 0.1 VAR_INPUT T1_2 : BOOL ; T2_3 : BOOL := TRUE; T3_4 : BOOL := TRUE; T4_5 : BOOL := TRUE; T5_6 : BOOL := TRUE; T6_7 : BOOL := TRUE; T7_8 : BOOL := TRUE; T8_9 : BOOL := TRUE; T9_10 : BOOL := TRUE; T10_11 : BOOL := TRUE; T11_12 : BOOL := TRUE; T12_13 : BOOL := TRUE; T13_14 : BOOL := TRUE; T14_15 : BOOL := TRUE; T15_16 : BOOL := TRUE; T16_17 : BOOL := TRUE; T17_18 : BOOL := TRUE; T18_19 : BOOL := TRUE; T19_20 : BOOL := TRUE; T20_21 : BOOL := TRUE; T21_22 : BOOL := TRUE; T22_23 : BOOL := TRUE; T23_24 : BOOL := TRUE; T24_25 : BOOL := TRUE; T25_26 : BOOL := TRUE; T26_27 : BOOL := TRUE; T27_28 : BOOL := TRUE; T28_29 : BOOL := TRUE; T29_30 : BOOL := TRUE; T30_31 : BOOL := TRUE; T31_32 : BOOL := TRUE; T32_1 : BOOL := TRUE; RESET : BOOL ; WEITER_MB : BOOL ; WEITER_OB : BOOL ; END_VAR VAR_OUTPUT SCHRITT_NR : INT ; END_VAR VAR SM : INT ; //Schrittmerker END_VAR BEGIN NETWORK TITLE = U #RESET; // Kein Reset? SPBN krst; // Sprung zu Bedingungsprüfung L 0; // Schrittmerker rücksetzen T #SM; SPA ende; krst: U #WEITER_OB; // Weiter ohne Bedingung? SPB weit; // Sprung zu "weiter" U #WEITER_MB; // Nicht weiter mit Bedingung? SPBN ende; // Sprung zum Ende L #SM; L 1; SLD ; // accu2 = (1 << #SM) L DID 0; // Transitionen in accu1 laden TAD ; // Transitionen Bytereihenfolge tauschen UD ; // Transitionen mit (1 << #SM) maskieren SPZ ende; // Akt. Transition nicht aktiv? -> Ende weit: L #SM; // Schrittmerker inkrementieren INC 1; UD DW#16#1F; T #SM; ende: L #SM; // Schrittnummer ausgeben INC 1; T #SCHRITT_NR; END_FUNCTION_BLOCK DATA_BLOCK DB 1 FB 1 BEGIN END_DATA_BLOCK ORGANIZATION_BLOCK OB 1 VAR_TEMP OB1_EV_CLASS : BYTE; // Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1) OB1_SCAN_1 : BYTE; // 1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1) OB1_PRIORITY : BYTE; // Priority of OB execution OB1_OB_NUMBR : BYTE; // 1 (Organization block 1, OB 1) OB1_RESERVED_1 : BYTE; OB1_RESERVED_2 : BYTE; OB1_PREV_CYCLE : INT; // Cycle time of previous OB 1 scan (milliseconds) OB1_MIN_CYCLE : INT; // Minimum cycle time of OB 1 (milliseconds) OB1_MAX_CYCLE : INT; // Maximum cycle time of OB 1 (milliseconds) OB1_DATE_TIME : DATE_AND_TIME; // Date and time OB 1 started END_VAR BEGIN CALL FB 1, DB 1 ( T1_2 := E 0.0, T2_3 := E 0.1, T3_4 := E 0.2, T4_5 := E 0.3, T5_6 := E 0.4, T6_7 := E 0.5, T7_8 := E 0.6, T8_9 := E 0.7, T9_10 := E 1.0, T10_11 := E 1.1, T11_12 := E 1.2, T12_13 := E 1.3, T13_14 := E 1.4, T14_15 := E 1.5, T15_16 := E 1.6, T16_17 := E 1.7, T17_18 := E 2.0, T18_19 := E 2.1, T19_20 := E 2.2, T20_21 := E 2.3, T21_22 := E 2.4, T22_23 := E 2.5, T23_24 := E 2.6, T24_25 := E 2.7, T25_26 := E 3.0, T26_27 := E 3.1, T27_28 := E 3.2, T28_29 := E 3.3, T29_30 := E 3.4, T30_31 := E 3.5, T31_32 := E 3.6, T32_1 := E 3.7, RESET := E 4.0, WEITER_MB := E 4.1, WEITER_OB := E 4.2, SCHRITT_NR := AW 0, ) END_ORGANIZATION_BLOCK