mario@108: (* This file includes normal standard ST and IL code. mario@108: * This code is then included into other tests, once mario@108: * possibly strange things have been defined. mario@108: * mario@108: * Including this normal code will test whether the strange mario@108: * things somehow breack the correct parsing and compiling mario@108: * of normal code. mario@108: * mario@108: * Code in this file must not use the XXXX identfier! mario@108: *) mario@108: mario@108: mario@108: mario@108: (***************************************************************************) mario@108: (* Test if generic IL code is not affected by any previous declarations... *) mario@108: (***************************************************************************) mario@108: mario@108: mario@108: (* Test each IL operator *) mario@108: (* Since our compiler needs to distinguish mario@108: * between IL and ST code, we place each IL mario@108: * operator in a distinct function, to test whether mario@108: * the use of that IL operator as the first IL mario@108: * instruction does not confuse the logic mario@108: * use to determine whether ST or IL is being parsed. mario@108: *) mario@108: mario@108: function bar0005 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: & 10 mario@108: end_function mario@108: mario@108: mario@108: mario@108: function bar0006 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: &N 10 mario@108: end_function mario@108: mario@108: mario@108: mario@108: function bar0007 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: ADD 10 mario@108: end_function mario@108: mario@108: mario@108: mario@108: function bar0008 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: AND TRUE mario@108: end_function mario@108: mario@108: mario@108: function bar0009 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: ANDN TRUE mario@108: end_function mario@108: mario@108: mario@108: function_block bar0010 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : TP; mario@108: end_var mario@108: CAL tt mario@108: end_function_block mario@108: mario@108: mario@108: function_block bar0011 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : TP; mario@108: end_var mario@108: CALC tt mario@108: end_function_block mario@108: mario@108: mario@108: function_block bar0012 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : TP; mario@108: end_var mario@108: CALCN tt mario@108: end_function_block mario@108: mario@108: mario@108: function_block bar0013 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : CTUD; mario@108: end_var mario@108: CU tt mario@108: end_function_block mario@108: mario@108: mario@108: function_block bar0014 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : CTUD; mario@108: end_var mario@108: CD tt mario@108: end_function_block mario@108: mario@108: mario@108: function_block bar0015 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : R_TRIG; mario@108: end_var mario@108: CLK tt mario@108: end_function_block mario@108: mario@108: mario@108: function bar0016 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: DIV e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0017 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: EQ e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0018 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: GE e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0019 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: GT e_1 mario@108: end_function mario@108: mario@108: mario@108: function_block bar0020 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : TP; mario@108: end_var mario@108: IN tt mario@108: end_function_block mario@108: mario@108: mario@108: function bar0021 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: JMP ll mario@108: ll: LD FALSE mario@108: end_function mario@108: mario@108: mario@108: mario@108: function bar0022 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: JMPC ll mario@108: ll: LD FALSE mario@108: end_function mario@108: mario@108: mario@108: function bar0023 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: JMPCN ll mario@108: ll: LD FALSE mario@108: end_function mario@108: mario@108: mario@108: mario@108: function bar0024 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: LD TRUE mario@108: end_function mario@108: mario@108: mario@108: function bar0025 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: LDN TRUE mario@108: end_function mario@108: mario@108: mario@108: function bar0026 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: LE e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0027 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: LT e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0028 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: MOD e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0029 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: MUL e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0030 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: NE e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0031 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: NOT TRUE mario@108: end_function mario@108: mario@108: mario@108: function bar0032 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: OR TRUE mario@108: end_function mario@108: mario@108: mario@108: function bar0033 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: ORN TRUE mario@108: end_function mario@108: mario@108: mario@108: function_block bar0034 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : TP; mario@108: end_var mario@108: PT tt mario@108: end_function_block mario@108: mario@108: mario@108: function_block bar0035 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : CTUD; mario@108: end_var mario@108: PV tt mario@108: end_function_block mario@108: mario@108: mario@108: function bar0036 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: R e_1 (* IL operand *) mario@108: end_function mario@108: mario@108: mario@108: function_block bar0037 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : SR; mario@108: end_var mario@108: R tt (* FB call *) mario@108: end_function_block mario@108: mario@108: mario@108: function_block bar0038 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : SR; mario@108: end_var mario@108: R1 tt (* FB call *) mario@108: end_function_block mario@108: mario@108: mario@108: function bar0039 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: RET mario@108: end_function mario@108: mario@108: mario@108: function bar0040 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: RETC mario@108: end_function mario@108: mario@108: mario@108: function bar0041 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: RETCN mario@108: end_function mario@108: mario@108: mario@108: function bar0042 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: S e_1 mario@108: end_function mario@108: mario@108: mario@108: function_block bar0043 mario@108: var mario@108: e_1, f_1 : int; mario@108: tt : SR; mario@108: end_var mario@108: S1 tt (* FB call *) mario@108: end_function_block mario@108: mario@108: mario@108: function bar0044 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: ST e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0045 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: STN e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0046 : int mario@108: var mario@108: e_1, f_1 : int; mario@108: end_var mario@108: SUB e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0047 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: XOR e_1 mario@108: end_function mario@108: mario@108: mario@108: function bar0048 : int mario@108: var mario@108: e_1, f_1 : bool; mario@108: end_var mario@108: XORN e_1 mario@108: end_function mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: (***************************************************************************) mario@108: (* Test if generic ST code is not affected by any previous declarations... *) mario@108: (***************************************************************************) mario@108: mario@108: (* A helper FUNCTION BLOCK declaration *) mario@108: function_block bar1000 mario@108: var_input mario@108: a_1, b_1: int; mario@108: end_var mario@108: var_output mario@108: c_1, d_1: int; mario@108: end_var mario@108: c_1 := 10 + b_1; mario@108: end_function_block mario@108: mario@108: mario@108: (* A FUNCTION declaration *) mario@108: function bar1001 : int mario@108: var_input mario@108: a_1, b_1: int; mario@108: end_var mario@108: var_output mario@108: c_1, d_1: int; mario@108: end_var mario@108: c_1 := 10 + b_1; mario@108: end_function mario@108: mario@108: mario@108: (* Generic ST code *) mario@108: mario@108: function_block bar1002 mario@108: var mario@108: e_1, f_1 : int; mario@108: g_1 : int; mario@108: fb : bar1000; mario@108: end_var mario@108: fb(g_1, 20); mario@108: fb (10, g_1, e_1, f_1); mario@108: fb (a_1 := g_1, b_1:=g_1, c_1=>g_1, d_1=>f_1); mario@108: fb(a_1 := 10, b_1:=20, c_1=>e_1, d_1=>g_1); mario@108: fb (c_1=>g_1, a_1:=20, d_1=>f_1); mario@108: g_1 := fb.c_1; mario@108: fb.a_1 := g_1 + g_1 * 2 * (g_1) / bar1001(g_1, 10, g_1, e_1) MOD g_1 MOD g_1 ** g_1; mario@108: IF (g_1 >= 10) THEN g_1 := 10; END_IF; mario@108: CASE (g_1 + 10) OF mario@108: 10: g_1 := 10; mario@108: 10..20:g_1 := 20; mario@108: ELSE g_1 := 20; mario@108: END_CASE; mario@108: FOR g_1 := 10 TO 20 BY 2 DO mario@108: g_1 := g_1 + 1; mario@108: END_FOR; mario@108: FOR e_1 := g_1 TO 20 DO mario@108: g_1 := g_1 + 1; mario@108: END_FOR; mario@108: FOR e_1 := 10 TO g_1 BY 2 DO mario@108: g_1 := g_1 + 1; mario@108: END_FOR; mario@108: FOR e_1 := 10 TO g_1 DO mario@108: g_1 := g_1 + 1; mario@108: END_FOR; mario@108: FOR e_1 := 10 TO 20 BY g_1 DO mario@108: g_1 := g_1 + 1; mario@108: END_FOR; mario@108: WHILE (g_1 >= 10) DO mario@108: g_1 := 10; mario@108: END_WHILE; mario@108: REPEAT g_1 := 10; UNTIL (g_1 >= 10) END_REPEAT; mario@108: end_function_block mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: (****************************************************************************) mario@108: (* Test if generic SFC code is not affected by any previous declarations... *) mario@108: (****************************************************************************) mario@108: mario@108: PROGRAM bar2001 mario@108: VAR mario@108: QX1 AT %QX1 : BOOL := 1; mario@108: QX2 AT %QX2 : BOOL := 0; mario@108: QX3 AT %QX3 : BOOL; mario@108: IX1 AT %IX1 : BOOL; mario@108: IX2 AT %IX2 : BOOL; mario@108: IX3 AT %IX3 : BOOL; mario@108: END_VAR mario@108: VAR mario@108: delta_1 : TIME := T#1s; mario@108: END_VAR mario@108: mario@108: INITIAL_STEP GO: mario@108: END_STEP mario@108: mario@108: TRANSITION FROM GO TO STEP1 mario@108: := IX1 = FALSE; mario@108: END_TRANSITION mario@108: mario@108: STEP STEP1: mario@108: ONSTEP1(); mario@108: END_STEP mario@108: mario@108: ACTION ONSTEP1: mario@108: QX1 := TRUE; mario@108: QX2 := TRUE; mario@108: END_ACTION mario@108: mario@108: TRANSITION (PRIORITY := 4) FROM STEP1 TO STEP2 mario@108: := IX2 = TRUE; mario@108: END_TRANSITION mario@108: mario@108: STEP STEP2: mario@108: INLINE1(D, T#1s); mario@108: END_STEP mario@108: mario@108: ACTION INLINE1: mario@108: QX1 := QX2 XOR QX1; QX2 := NOT QX2; mario@108: END_ACTION mario@108: mario@108: TRANSITION transition_id1 FROM STEP2 TO A1 mario@108: := QX1 = FALSE AND QX2 = FALSE; mario@108: END_TRANSITION mario@108: mario@108: STEP A1: mario@108: INLINE2(DS, T#1s); mario@108: END_STEP mario@108: mario@108: ACTION INLINE2: mario@108: IX1 := TRUE; mario@108: END_ACTION mario@108: mario@108: TRANSITION transition_id2 (PRIORITY := 3) FROM A1 TO STEP2 mario@108: := IX1 = TRUE; mario@108: END_TRANSITION mario@108: mario@108: TRANSITION FROM STEP2 TO (D1, D2, D3) mario@108: := QX1 = TRUE AND QX2 = TRUE; mario@108: END_TRANSITION mario@108: mario@108: STEP D1: mario@108: INLINE5(L, T#1s); mario@108: END_STEP mario@108: mario@108: ACTION INLINE5: mario@108: QX1 := FALSE; mario@108: END_ACTION mario@108: mario@108: TRANSITION FROM D1 TO E1 mario@108: := NOT ( QX1 OR QX2 OR QX3 ); mario@108: END_TRANSITION mario@108: mario@108: STEP E1: mario@108: INLINE8(N); mario@108: END_STEP mario@108: mario@108: ACTION INLINE8: mario@108: QX1 := TRUE; mario@108: END_ACTION mario@108: mario@108: TRANSITION FROM (E1, E2, E3) TO GO mario@108: := QX1 AND QX2 AND QX3; mario@108: END_TRANSITION mario@108: mario@108: STEP D2: mario@108: INLINE6(P); mario@108: END_STEP mario@108: mario@108: ACTION INLINE6: mario@108: QX2 := FALSE; mario@108: END_ACTION mario@108: mario@108: TRANSITION FROM D2 TO E2 mario@108: := NOT ( QX1 OR QX2 OR QX3 ); mario@108: END_TRANSITION mario@108: mario@108: STEP E2: mario@108: INLINE9(R); mario@108: END_STEP mario@108: mario@108: ACTION INLINE9: mario@108: QX2 := TRUE; mario@108: END_ACTION mario@108: mario@108: STEP D3: mario@108: INLINE7(S); mario@108: END_STEP mario@108: mario@108: ACTION INLINE7: mario@108: QX2 := FALSE; mario@108: END_ACTION mario@108: mario@108: TRANSITION FROM D3 TO E3 mario@108: := NOT ( QX1 OR QX2 OR QX3 ); mario@108: END_TRANSITION mario@108: mario@108: STEP E3: mario@108: INLINE10(SD, T#1s); mario@108: END_STEP mario@108: mario@108: ACTION INLINE10: mario@108: QX3 := TRUE; mario@108: END_ACTION mario@108: mario@108: TRANSITION FROM STEP2 TO A3 mario@108: := QX1 = TRUE AND QX2 = FALSE; mario@108: END_TRANSITION mario@108: mario@108: STEP A3: mario@108: INLINE4(SL, T#1s); mario@108: END_STEP mario@108: mario@108: ACTION INLINE4: mario@108: IX1 := TRUE; mario@108: END_ACTION mario@108: mario@108: TRANSITION FROM A3 TO STEP2 mario@108: := IX1 = TRUE; mario@108: END_TRANSITION mario@108: mario@108: TRANSITION FROM STEP2 TO A2 mario@108: := QX1 = FALSE AND QX2 = TRUE; mario@108: END_TRANSITION mario@108: mario@108: STEP A2: mario@108: INLINE3(L, delta_1); mario@108: END_STEP mario@108: mario@108: ACTION INLINE3: mario@108: IX1 := FALSE; mario@108: END_ACTION mario@108: mario@108: TRANSITION FROM A2 TO STEP2 mario@108: := IX1 = FALSE; mario@108: END_TRANSITION mario@108: mario@108: STEP A01: mario@108: INLINE01(L, delta_1, IX1, QX1); mario@108: END_STEP mario@108: mario@108: ACTION INLINE01: mario@108: IX1 := FALSE; mario@108: END_ACTION mario@108: mario@108: TRANSITION FROM STEP2 TO A01 mario@108: := IX1 = FALSE; mario@108: END_TRANSITION mario@108: mario@108: STEP A02: mario@108: INLINE01(L, delta_1, IX1, QX1); mario@108: INLINE1 (L, delta_1, IX1, QX1); mario@108: INLINE2 (S); mario@108: INLINE3 (); mario@108: END_STEP mario@108: mario@108: TRANSITION FROM STEP2 TO A02 mario@108: := IX1 = FALSE; mario@108: END_TRANSITION mario@108: END_PROGRAM mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: mario@108: (*********************************************************************************) mario@108: (* Test if generic CONFIGURATION is not affected by any previous declarations... *) mario@108: (*********************************************************************************) mario@108: mario@108: CONFIGURATION CONF0001 mario@108: RESOURCE STD_RESSOURCE ON BEREMIZ mario@108: TASK STD_TASK(INTERVAL := t#100ms,PRIORITY := 0); mario@108: PROGRAM MAIN_INSTANCE : bar2001; mario@108: END_RESOURCE mario@108: END_CONFIGURATION