tests/syntax/identifier/identifier_in_sfc.test
author Edouard Tisserant
Tue, 15 Feb 2022 10:34:23 +0100
changeset 1098 84bbafb4fb26
parent 108 f9e001952488
permissions -rwxr-xr-x
Fixed logic for REPEAT..UNTIL

In Stage4, C code generator, REPEAT statement was generating a while loop with inverted logic
(* Test whether the keyword XXXX may be used as an identifier for:
 * STEP, ACTION and TRANSITION name/identifier
 *
 * The XXXX names in the following code are merely a placeholder.
 * They will be replaced by several identifiers before actual testing
 * of the compiler.
 *)

(* The identifiers that will replace the XXXX
 * must be placed on a line starting with #
 * All identifiers preceded by # are ignored!
 * The identifier list must be placed inside an IEC 61131-3 comment.
 *)
(*
#IL_operators ANDN CAL CALC CALCN CD CLK CU IN JMP JMPC JMPCN 
#IL_operators LD LDN ORN PT PV R R1 RET RETC RETCN S S1 ST STN XORN
#SFC_qualifiers D DS L N P #R #S SD SL
     NOTE: R and S are identical to IL operators!!
#Task_initialisers PRIORITY SINGLE INTERVAL
*)



(* Use of XXXX as a STEP identifier *)

PROGRAM bar01
  VAR
    IX1 AT %IX1 : BOOL;
    IX2 AT %IX2 : BOOL;
    IX3 AT %IX3 : BOOL;
  END_VAR

  INITIAL_STEP XXXX:
  END_STEP

  STEP STEP1:
  END_STEP

  STEP STEP2:
  END_STEP

  TRANSITION FROM XXXX TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  TRANSITION FROM STEP1 TO XXXX
    := IX1 = TRUE;
  END_TRANSITION

  TRANSITION (PRIORITY := 4) FROM XXXX TO STEP2
    := IX2 = TRUE;
  END_TRANSITION

  TRANSITION (PRIORITY := 4) FROM STEP2 TO XXXX
    := IX2 = TRUE;
  END_TRANSITION

  TRANSITION transition_id1 FROM STEP2 TO XXXX
    := IX1 = FALSE AND IX3 = FALSE;
  END_TRANSITION

  TRANSITION transition_id2 FROM XXXX TO STEP2
    := IX1 = FALSE AND IX3 = FALSE;
  END_TRANSITION

  TRANSITION transition_id3 (PRIORITY := 3) FROM XXXX TO STEP2
    := IX3 = TRUE;
  END_TRANSITION

  TRANSITION transition_id4 (PRIORITY := 5) FROM STEP2 TO XXXX
    := IX3 = TRUE;
  END_TRANSITION

  TRANSITION FROM (XXXX, STEP2) TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  TRANSITION FROM (STEP2, XXXX) TO STEP1
    := IX2 = FALSE;
  END_TRANSITION

  TRANSITION FROM STEP1 TO (XXXX, STEP2)
    := IX1 = TRUE;
  END_TRANSITION

  TRANSITION FROM STEP1 TO (STEP2, XXXX)
    := IX2 = TRUE;
  END_TRANSITION
END_PROGRAM




(* Use of XXXX as a TRANSITION identifier *)

PROGRAM bar02
  VAR
    IX1 AT %IX1 : BOOL;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
  END_STEP

  TRANSITION XXXX FROM GO TO STEP1
    := IX1 = FALSE AND IX3 = FALSE;
  END_TRANSITION
END_PROGRAM




PROGRAM bar03
  VAR
    IX1 AT %IX1 : BOOL;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
  END_STEP

  TRANSITION XXXX (PRIORITY := 3) FROM GO TO STEP1
    := IX3 = TRUE;
  END_TRANSITION
END_PROGRAM





(* Use of XXXX as an ACTION identifier *)


PROGRAM bar20
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP
  STEP STEP1:
    XXXX ();
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM





PROGRAM bar21
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(N);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM






PROGRAM bar22
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(P);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM







PROGRAM bar23
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(R);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM









PROGRAM bar24
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(S);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM








PROGRAM bar25
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(D, T#1s);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM








PROGRAM bar26
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(L, T#1s);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM






PROGRAM bar27
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(DS, T#1s);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM








PROGRAM bar28
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(SD, T#1s);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM








PROGRAM bar29
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(SL, T#1s);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM








PROGRAM bar30
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(L, delta_1);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM








PROGRAM bar31
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    XXXX(L, delta_1, IX1, QX1);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION
END_PROGRAM






PROGRAM bar32
  VAR
    QX1 : BOOL := 1;
    QX2 : BOOL := 0;
    QX3 : BOOL;
    IX1 : BOOL;
    IX2 : BOOL;
    IX3 : BOOL;
    delta_1 : TIME := T#1s;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

  STEP STEP1:
    INLINE1 (); 
    XXXX(L, delta_1, IX1, QX1);
    INLINE2 (); 
  END_STEP

  STEP STEP2:
    XXXX(L, delta_1, IX1, QX1);
    INLINE1 (); 
    INLINE2 (); 
  END_STEP

  STEP STEP3:
    INLINE1 (); 
    INLINE2 (); 
    XXXX(L, delta_1, IX1, QX1);
  END_STEP

  TRANSITION FROM GO TO STEP1
    := IX1 = FALSE;
  END_TRANSITION

  ACTION XXXX:
    QX1 := TRUE;
    QX2 := TRUE;
  END_ACTION

  ACTION INLINE1:
    IX1 := TRUE;
  END_ACTION

  ACTION INLINE2:
    IX1 := TRUE;
  END_ACTION
END_PROGRAM










(* Checking whether the use of XXXX will confuse any other
 * normal and correct IL or ST code.
 *)
{#include "basic_code.test" }