Files
Uniper_PLC/PLC_SIM/POUs/Valve_Mockup/FB_ValveAnalogMockup.TcPOU
2024-01-04 15:15:26 +01:00

96 lines
2.6 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="FB_ValveAnalogMockup" Id="{e3712921-003e-473b-993e-6c5d40e0a0c0}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_ValveAnalogMockup
VAR_INPUT
iAnalogSetpoint AT %I* : INT;
END_VAR
VAR_OUTPUT
xOpenFeedback AT %Q* : BOOL;
xCloseFeedback AT %Q* : BOOL;
iAnalogProcessValue AT %Q* : INT;
END_VAR
VAR
_fbRampGenerator : FB_RampGenerator;
_fbValveAnalogInput : FB_AnalogInput('');
_stAnalogScaling : ST_ANALOG_IO_CONFIG := (iAIMax := 32767, iAIMin := 0, rPVMax := 100, rPVMin := 0);
_stAnalogEWConfig : ST_ANALOG_EW_LEVELS;
_stAnalogEWDelays : ST_ANALOG_EW_DELAYS;
_fbValveAnalogOutput : FB_AnalogOutput('');
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Calculate setpoint 0% - 100%
// from analog value
_fbValveAnalogInput(
iAnalogValue:= iAnalogSetpoint,
stScalingConfig:= _stAnalogScaling,
stEWConfig:= _stAnalogEWConfig,
stEWDelayConfig:= _stAnalogEWDelays,
xUnderrange:= FALSE,
xOverrange:= FALSE,
xErrorCard:= FALSE,
xReleaseErrors:= FALSE,
xReleaseLimitErrors:= FALSE,
xReleaseHardwareErrors:= FALSE,
xConfirmAlarms:= ,
xError=> ,
xWarning=> ,
rScaledValue=> ,
xErrorLow=> ,
xWarningLow=> ,
xWarningHigh=> ,
xErrorHigh=> );
// Ramp generator for position simulation
_fbRampGenerator(
rTarget:= _fbValveAnalogInput.rScaledValue,
rTargetMin:= 0,
rTargetMax:= 100,
timRampUp:= T#5S,
timRampDown:= T#5S,
rSetpoint=> );
// Calculate analog output from ramp generator setpoint
_fbValveAnalogOutput(
rSetpoint:= _fbRampGenerator.rSetpoint,
stScalingConfig:= _stAnalogScaling,
xReleaseErrors:= FALSE,
xReleaseHardwareErrors:= FALSE,
xConfirmAlarms:= ,
iAnalogValue=> iAnalogProcessValue,
xError=> );
// Simulate close feedback
IF _fbRampGenerator.rSetpoint < 5.0 THEN
xCloseFeedback := TRUE;
ELSE
xCloseFeedback := FALSE;
END_IF
// Simulate open feedback
IF _fbRampGenerator.rSetpoint > 95.0 THEN
xOpenFeedback := TRUE;
ELSE
xOpenFeedback := FALSE;
END_IF]]></ST>
</Implementation>
<LineIds Name="FB_ValveAnalogMockup">
<LineId Id="603" Count="38" />
<LineId Id="75" Count="0" />
<LineId Id="642" Count="0" />
<LineId Id="654" Count="0" />
<LineId Id="643" Count="1" />
<LineId Id="646" Count="1" />
<LineId Id="645" Count="0" />
<LineId Id="655" Count="0" />
<LineId Id="649" Count="0" />
<LineId Id="648" Count="0" />
<LineId Id="650" Count="0" />
<LineId Id="652" Count="1" />
<LineId Id="651" Count="0" />
</LineIds>
</POU>
</TcPlcObject>