(* 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