Files
infineon_plc/PLC/01_Stationen/HeatCoolPlates/FB_HotPlate.TcPOU
m.heisig bdaaf1fe9f Fixed aligner and started main state machine
- Fixed datatype for received offsets
- Added HMI Interface for Hot and Coolplate
2026-02-06 14:39:41 +01:00

113 lines
2.7 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_HotPlate" Id="{317a2373-f886-4e32-b683-81b726d00aac}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_HotPlate
VAR_INPUT
xEnable : BOOL;
rTargetTemp : REAL;
rDeadBand : REAL := 5.0;
xConfirmAlarms : BOOL;
END_VAR
VAR_OUTPUT
uiNextFreeSlot : UINT;
uiNextReadySlot : UINT;
END_VAR
VAR_IN_OUT
stHMIInterface : ST_HCPlateHMIInterface;
END_VAR
VAR
_xEnableHotplate AT %Q* : BOOL;
_axSlotFree : ARRAY [0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF BOOL;
_tonSlotTimer : ARRAY[0..(GVL_HeatCoolConfig.HEAT_COOL_PLATES_NUM_SLOTS - 1)] OF TON;
// Temp sensor
_fbTempSensor : FB_AnalogInput('Temp sensor');
_stTempSensorConfig : ST_ANALOG_IO_CONFIG := (sUnit := '°C', rPVMin := -200, rPVMax := 850, iAIMin := -2000, iAIMax := 8500);
_stTempSEnsorEWConfig : ST_ANALOG_EW_CONFIG := (
stLevels := (
rErrorMin := -2000,
rErrorMax := 8500,
rWarningMin := -1000,
rWarningMax := 7500),
stDelays := (
timErrorHighOn := T#1S,
timErrorLowOn := T#1S,
timWarningHighOn := T#1S,
timWarningLowOn := T#1S,
timHardwareSignalLevelOff := T#1S));
_fbPITempControl : FB_PI;
_xSaturatedUpper : BOOL;
_xSaturatedLower : BOOL;
_rMV : REAL;
_fbPulsOut : TP;
_fbPWMOut : FB_PWM;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Call sensor fbs
_fbTempSensor(
stAnalogIOConfig:= _stTempSensorConfig,
stAnalogEWConfig:= _stTempSEnsorEWConfig,
xReleaseErrors:= TRUE,
xReleaseLimitErrors:= FALSE,
xReleaseHardwareErrors:= TRUE,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface=> );
// Clamp HMI Setpoint
IF stHMIInterface.rSetpoint > 140.0 THEN
stHMIInterface.rSetpoint := 140;
END_IF
IF stHMIInterface.rSetpoint < 0.0 THEN
stHMIInterface.rSetpoint := 0.0;
END_IF
// For now get setpoint from HMI interface
_fbPITempControl(
rSP:= stHMIInterface.rSetpoint,
rPV:= _fbTempSensor.rScaledValue,
rKp:= 6,
rTn:= 0,
xEnable:= stHMIInterface.xEnable,
xSaturatedUpper:= _xSaturatedUpper,
xSaturatedLower:= _xSaturatedLower,
rMV=> _rMV);
IF _rMV >= 100.0 THEN
_rMV := 100.0;
_xSaturatedUpper := TRUE;
ELSE
_xSaturatedUpper := FALSE;
END_IF
IF _rMV <=0 THEN
_rMV := 0.0;
_xSaturatedLower := TRUE;
ELSE
_xSaturatedLower := FALSE;
END_IF
_fbPWMOut(
rPWM:= _rMV,
timPeriod:= T#10S,
xOutput=> _xEnableHotplate);
// Output HMI Interface
stHMIInterface.rPV := _fbTempSensor.rScaledValue;
]]></ST>
</Implementation>
<Method Name="M_AddItem" Id="{9707459a-6558-487c-b730-c9dc92d598ed}">
<Declaration><![CDATA[METHOD M_AddItem
VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>