tests/syntax/sfc/sfc.txt
author Laurent Bessard
Tue, 11 Sep 2012 01:05:24 +0200
changeset 628 fe0d516fe291
parent 109 3af0b849b9c6
permissions -rwxr-xr-x
Fix bug in SFC generated code. Action state was declared in the list of variables to debug, but wasn't stored using structure with flags. This error had side effects that makes Beremiz debug crash.
PROGRAM MAIN_TEST
  VAR
    QX1 AT %QX1 : BOOL := 1;
    QX2 AT %QX2 : BOOL := 0;
    QX3 AT %QX3 : BOOL;
    IX1 AT %IX1 : BOOL;
    IX2 AT %IX2 : BOOL;
    IX3 AT %IX3 : BOOL;
  END_VAR

  INITIAL_STEP GO:
  END_STEP

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

  STEP STEP1:
    ONSTEP1(N);
  END_STEP

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

  TRANSITION FROM STEP1 TO STEP2
    := IX2 = TRUE;
  END_TRANSITION

  STEP STEP2:
    INLINE1(P);
  END_STEP

  ACTION INLINE1:
    QX1 := QX2 XOR QX1; QX2 := NOT QX2;
  END_ACTION

  TRANSITION FROM STEP2 TO A1
    := QX1 = FALSE AND QX2 = FALSE;
  END_TRANSITION

  STEP A1:
    INLINE2(N);
  END_STEP

  ACTION INLINE2:
    IX1 := TRUE;
  END_ACTION

  TRANSITION FROM A1 TO STEP2
    := IX1 = TRUE;
  END_TRANSITION

  TRANSITION FROM STEP2 TO (D1, D2, D3)
    := QX1 = TRUE AND QX2 = TRUE;
  END_TRANSITION

  STEP D1:
    INLINE5(N);
  END_STEP

  ACTION INLINE5:
    QX1 := FALSE;
  END_ACTION

  TRANSITION FROM D1 TO E1
    := NOT ( QX1 OR QX2 OR QX3 );
  END_TRANSITION

  STEP E1:
    INLINE8(N);
  END_STEP

  ACTION INLINE8:
    QX1 := TRUE;
  END_ACTION

  TRANSITION FROM (E1, E2, E3) TO GO
    := QX1 AND QX2 AND QX3;
  END_TRANSITION

  STEP D2:
    INLINE6(N);
  END_STEP

  ACTION INLINE6:
    QX2 := FALSE;
  END_ACTION

  TRANSITION FROM D2 TO E2
    := NOT ( QX1 OR QX2 OR QX3 );
  END_TRANSITION

  STEP E2:
    INLINE9(N);
  END_STEP

  ACTION INLINE9:
    QX2 := TRUE;
  END_ACTION

  STEP D3:
    INLINE7(N);
  END_STEP

  ACTION INLINE7:
    QX2 := FALSE;
  END_ACTION

  TRANSITION FROM D3 TO E3
    := NOT ( QX1 OR QX2 OR QX3 );
  END_TRANSITION

  STEP E3:
    INLINE10(N);
  END_STEP

  ACTION INLINE10:
    QX3 := TRUE;
  END_ACTION

  TRANSITION FROM STEP2 TO A3
    := QX1 = TRUE AND QX2 = FALSE;
  END_TRANSITION

  STEP A3:
    INLINE4(N);
  END_STEP

  ACTION INLINE4:
    IX1 := TRUE;
  END_ACTION

  TRANSITION FROM A3 TO STEP2
    := IX1 = TRUE;
  END_TRANSITION

  TRANSITION FROM STEP2 TO A2
    := QX1 = FALSE AND QX2 = TRUE;
  END_TRANSITION

  STEP A2:
    INLINE3(N);
  END_STEP

  ACTION INLINE3:
    IX1 := FALSE;
  END_ACTION

  TRANSITION FROM A2 TO STEP2
    := IX1 = FALSE;
  END_TRANSITION

END_PROGRAM


CONFIGURATION STD_CONF

  RESOURCE STD_RESSOURCE ON BEREMIZ
    TASK STD_TASK(INTERVAL := t#100ms,PRIORITY := 0);
    PROGRAM MAIN_INSTANCE : MAIN_TEST;
  END_RESOURCE
END_CONFIGURATION