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.
(* Following taken directly from the IEC 61131.3 draft standard *)
(*
* An IEC 61131-3 IL and ST compiler.
*
* Based on the
* FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
*
*)
FUNCTION_BLOCK PID
VAR_INPUT
AUTO : BOOL ; (* 0 - manual , 1 - automatic *)
PV : REAL ; (* Process variable *)
SP : REAL ; (* Set point *)
X0 : REAL ; (* Manual output adjustment - *)
(* Typically from transfer station *)
KP : REAL ; (* Proportionality constant *)
TR : REAL ; (* Reset time *)
TD : REAL ; (* Derivative time constant *)
CYCLE : TIME ; (* Sampling period *)
END_VAR
VAR_OUTPUT XOUT : REAL; END_VAR
VAR ERROR : REAL ; (* PV - SP *)
ITERM : INTEGRAL ; (* FB for integral term *)
DTERM : DERIVATIVE ; (* FB for derivative term *)
END_VAR
ERROR := PV - SP ;
(*** Adjust ITERM so that XOUT := X0 when AUTO = 0 ***)
ITERM (RUN := AUTO, R1 := NOT AUTO, XIN := ERROR,
X0 := TR * (X0 - ERROR), CYCLE := CYCLE) ;
DTERM (RUN := AUTO, XIN := ERROR, CYCLE := CYCLE) ;
XOUT := KP * (ERROR + ITERM.XOUT/TR + DTERM.XOUT*TD) ;
END_FUNCTION_BLOCK