(* Código SCL generado desde LAD TwinCAT *)
(* Convertidor mejorado con SymPy - Estructura DNF preferida *)
(* Path original: /TASK1_PID/PID_Controllers/Test_Program *)

PROGRAM Test_Pattern_Program
VAR
    mDummy : BOOL;
    mFillerEstSlew : SlewLimit;
    mFillingHead_PID : FB41_PIDController;
END_VAR


(* === CÓDIGO PRINCIPAL === *)

    (* Código LAD convertido *)
    // Red 2
    // Llamada a función: Test_Pattern_Program.Read_Analog
    CALL Test_Pattern_Program.Read_Analog();
    mDummy := TRUE; // ACTION ejecutada

    // Red 1
    // Patrón 1: ACTION call con ???
    CALL Test_Pattern_Program.Read_Analog();
    mDummy := TRUE; // ACTION ejecutada

    // Red 4
    // Llamada a función: mFillerEstSlew
    // Sin optimización SymPy
    IF mFillerEstSlew(_POSITIV) THEN
        mDummy := TRUE;
    ELSE
        mDummy := FALSE;
    END_IF;

    // Red 3
    // Patrón 2: Function Block directo
    // Sin optimización SymPy
    IF mFillerEstSlew(_POSITIV) THEN
        mDummy := TRUE;
    ELSE
        mDummy := FALSE;
    END_IF;

    // Red 6
    // Llamada a función: Test_Pattern_Program.Calculations
    CALL Test_Pattern_Program.Calculations();
    mDummy := TRUE; // ACTION ejecutada

    // Red 5
    // Patrón 3: Otra ACTION call con ???
    CALL Test_Pattern_Program.Calculations();
    mDummy := TRUE; // ACTION ejecutada

    // Red 8
    // Llamada a función: mFillingHead_PID
    // Sin optimización SymPy
    IF mFillingHead_PID(_POSITIV) THEN
        mDummy := TRUE;
    ELSE
        mDummy := FALSE;
    END_IF;

    // Red 7
    // Patrón 4: Function Block PID directo
    // Sin optimización SymPy
    IF mFillingHead_PID(_POSITIV) THEN
        mPIDOutput := TRUE;
    ELSE
        mPIDOutput := FALSE;
    END_IF;

END_PROGRAM

(* === SUBFUNCIONES (ACTIONs convertidas) === *)

PROCEDURE Test_Pattern_Program_Read_Analog
(* Convertida desde ACTION *)

    (* Código LAD convertido a SCL *)
    // Red 1
    // ACTION de ejemplo
    IF gAnalogEnable THEN
        gAnalogValue := TRUE;
    ELSE
        gAnalogValue := FALSE;
    END_IF;


END_PROCEDURE

PROCEDURE Test_Pattern_Program_Calculations
(* Convertida desde ACTION *)

    (* Código ST original *)
    gCalculatedValue := gInputA + gInputB * 2.5;
    mDummy := TRUE;

END_PROCEDURE
