Projektdateien hinzufügen.
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
||||
<POU Name="FB_AnalogSensorMockup" Id="{198f1df4-73a2-495b-b972-189adc06c969}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_AnalogSensorMockup
|
||||
VAR_INPUT
|
||||
// Raise sensor level from min to max
|
||||
xEnable : BOOL;
|
||||
|
||||
// Sensor value when enabled
|
||||
rOnValue : REAL;
|
||||
|
||||
// Sensor value when dissabled
|
||||
rOffValue : REAL;
|
||||
|
||||
// Sensor noise value
|
||||
rNoise : REAL := 0.0;
|
||||
|
||||
// Sensor min value for analog scaling
|
||||
rMinValue : REAL := 0.0;
|
||||
|
||||
// Sensor max value for analog scaling
|
||||
rMaxValue : REAL := 1.0;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
iAnalogValue AT %Q* : INT;
|
||||
END_VAR
|
||||
VAR
|
||||
// Internal target value
|
||||
_rTargetValue : REAL;
|
||||
|
||||
// Temp variable
|
||||
_lrTmp : LREAL;
|
||||
|
||||
// Filter data
|
||||
_rFilterParam : REAL := 0.005;
|
||||
_rFilterParam2 : REAL := 1.0 - _rFilterParam;
|
||||
|
||||
// Calculated value
|
||||
_rValue : REAL;
|
||||
|
||||
// Last calculated value
|
||||
_rPrevValue : REAL := 0.0;
|
||||
|
||||
// Analog output
|
||||
_fbValveAnalogOutput : FB_AnalogOutput('');
|
||||
|
||||
// Analog output scaling
|
||||
_stAnalogScaling : ST_ANALOG_IO_CONFIG;
|
||||
_stAnalogEWConfig : ST_ANALOG_EW_LEVELS;
|
||||
_stAnalogEWDelays : ST_ANALOG_EW_DELAYS;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Pressure only if enabled
|
||||
IF xEnable THEN
|
||||
_rTargetValue := rOnValue;
|
||||
ELSE
|
||||
_rTargetValue := rOffValue;
|
||||
END_IF
|
||||
|
||||
// Get a random number
|
||||
GVL_GLOBAL.fbRandom(Seed := 1337, Num => _lrTmp);
|
||||
|
||||
// Exponential smoothing
|
||||
_rValue := _rFilterParam * _rTargetValue + _rFilterParam2 * _rPrevValue;
|
||||
_rPrevValue := _rValue;
|
||||
|
||||
// Add some random noise
|
||||
IF xEnable THEN
|
||||
_rValue := _rValue + (LREAL_TO_REAL(_lrTmp - 0.5) * rNoise);
|
||||
END_IF
|
||||
|
||||
// Set analog output scaling
|
||||
_stAnalogScaling.iAIMax := 32767;
|
||||
_stAnalogScaling.iAIMin := 0;
|
||||
_stAnalogScaling.rPVMax := rMaxValue;
|
||||
_stAnalogScaling.rPVMin := rMinValue;
|
||||
|
||||
// Calculate analog output from ramp generator setpoint
|
||||
_fbValveAnalogOutput(
|
||||
rSetpoint:= _rValue,
|
||||
stScalingConfig:= _stAnalogScaling,
|
||||
xReleaseErrors:= FALSE,
|
||||
xReleaseHardwareErrors:= FALSE,
|
||||
xConfirmAlarms:= ,
|
||||
iAnalogValue=> iAnalogValue,
|
||||
xError=> );]]></ST>
|
||||
</Implementation>
|
||||
<LineIds Name="FB_AnalogSensorMockup">
|
||||
<LineId Id="719" Count="14" />
|
||||
<LineId Id="798" Count="0" />
|
||||
<LineId Id="734" Count="0" />
|
||||
<LineId Id="799" Count="0" />
|
||||
<LineId Id="735" Count="14" />
|
||||
<LineId Id="9" Count="0" />
|
||||
</LineIds>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
111
PLC_SIM/POUs/FB_UnitMockup.TcPOU
Normal file
111
PLC_SIM/POUs/FB_UnitMockup.TcPOU
Normal file
@@ -0,0 +1,111 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
||||
<POU Name="FB_UnitMockup" Id="{a1155b26-00e6-4710-a8e4-140d6d5cd082}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_UnitMockup
|
||||
VAR_INPUT
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
END_VAR
|
||||
VAR
|
||||
// Valves posolyt
|
||||
_fbPosolytValveTankOutlet : FB_ValveMockup;
|
||||
|
||||
// Valves negolyt
|
||||
_fbNegolytValveTankOutlet : FB_ValveMockup;
|
||||
|
||||
// Pumps posolyt
|
||||
_fbPosolytPumpInlet : FB_MotorMockup;
|
||||
|
||||
// Pumps negolyt
|
||||
_fbNegolytPumpInlet : FB_MotorMockup;
|
||||
|
||||
|
||||
// Pressure sensors posolyt
|
||||
_fbPressurePosolytSegmentInlet : FB_AnalogSensorMockup;
|
||||
_fbPressurePosolytTankInlet : FB_AnalogSensorMockup;
|
||||
|
||||
|
||||
// Pressure sensors negolyt
|
||||
_fbPressureNegolytSegmentInlet : FB_AnalogSensorMockup;
|
||||
_fbPressureNegolytTankInlet : FB_AnalogSensorMockup;
|
||||
|
||||
// Helping variables
|
||||
_xFlowThroughtSegmentPosolyt : BOOL;
|
||||
_xFlowThroughtBypassPosolyt : BOOL;
|
||||
|
||||
_xFlowThroughtSegmentNegolyt : BOOL;
|
||||
_xFlowThroughtBypassNegolyt : BOOL;
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Valves posolyt
|
||||
_fbPosolytValveTankOutlet();
|
||||
|
||||
// Valves negolyt
|
||||
_fbNegolytValveTankOutlet();
|
||||
|
||||
// Pumps posolyt
|
||||
_fbPosolytPumpInlet();
|
||||
|
||||
// Pumps negolyt
|
||||
_fbNegolytPumpInlet();
|
||||
|
||||
// Simulate flow posolyt
|
||||
_xFlowThroughtSegmentPosolyt := _fbPosolytPumpInlet.xEnable AND _fbPosolytValveTankOutlet.xOpenFeedback;
|
||||
_xFlowThroughtBypassPosolyt := _fbPosolytPumpInlet.xEnable AND NOT _fbPosolytValveTankOutlet.xOpenFeedback;
|
||||
|
||||
_xFlowThroughtSegmentNegolyt := _fbNegolytPumpInlet.xEnable AND _fbNegolytValveTankOutlet.xOpenFeedback;
|
||||
_xFlowThroughtBypassNegolyt := _fbNegolytPumpInlet.xEnable AND NOT _fbNegolytValveTankOutlet.xOpenFeedback ;
|
||||
|
||||
// Pressure sensors posolyt
|
||||
_fbPressurePosolytSegmentInlet(
|
||||
xEnable:= _xFlowThroughtSegmentPosolyt,
|
||||
rOnValue:= 0.487,
|
||||
rOffValue:= 0.0,
|
||||
rNoise:= 0.002,
|
||||
rMinValue:= -1.0,
|
||||
rMaxValue:= 1.5);
|
||||
|
||||
_fbPressurePosolytTankInlet(
|
||||
xEnable:= _xFlowThroughtSegmentPosolyt,
|
||||
rOnValue:= 0.0429,
|
||||
rOffValue:= 0.0,
|
||||
rNoise:= 0.002,
|
||||
rMinValue:= -1.0,
|
||||
rMaxValue:= 1.5);
|
||||
|
||||
// Pressure sensors negolyt
|
||||
_fbPressureNegolytSegmentInlet(
|
||||
xEnable:= _xFlowThroughtSegmentNegolyt,
|
||||
rOnValue:= 0.487,
|
||||
rOffValue:= 0.0,
|
||||
rNoise:= 0.002,
|
||||
rMinValue:= -1.0,
|
||||
rMaxValue:= 1.5);
|
||||
|
||||
_fbPressureNegolytTankInlet(
|
||||
xEnable:= _xFlowThroughtSegmentNegolyt,
|
||||
rOnValue:= 0.0429,
|
||||
rOffValue:= 0.0,
|
||||
rNoise:= 0.002,
|
||||
rMinValue:= -1.0,
|
||||
rMaxValue:= 1.5);
|
||||
]]></ST>
|
||||
</Implementation>
|
||||
<LineIds Name="FB_UnitMockup">
|
||||
<LineId Id="482" Count="1" />
|
||||
<LineId Id="486" Count="2" />
|
||||
<LineId Id="491" Count="2" />
|
||||
<LineId Id="495" Count="2" />
|
||||
<LineId Id="499" Count="2" />
|
||||
<LineId Id="695" Count="3" />
|
||||
<LineId Id="502" Count="8" />
|
||||
<LineId Id="519" Count="7" />
|
||||
<LineId Id="568" Count="3" />
|
||||
<LineId Id="699" Count="3" />
|
||||
<LineId Id="576" Count="0" />
|
||||
<LineId Id="585" Count="7" />
|
||||
<LineId Id="600" Count="0" />
|
||||
</LineIds>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
13
PLC_SIM/POUs/MAIN.TcPOU
Normal file
13
PLC_SIM/POUs/MAIN.TcPOU
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<POU Name="MAIN" Id="{bb83bde3-1093-40be-b27d-d7bc60ebb5a6}">
|
||||
<Declaration><![CDATA[PROGRAM MAIN
|
||||
VAR
|
||||
END_VAR
|
||||
]]>
|
||||
</Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[]]></ST>
|
||||
</Implementation>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
103
PLC_SIM/POUs/Motor_Mockup/FB_MotorMockup.TcPOU
Normal file
103
PLC_SIM/POUs/Motor_Mockup/FB_MotorMockup.TcPOU
Normal file
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
||||
<POU Name="FB_MotorMockup" Id="{2caa045e-1cb0-4e4b-ae71-f86aa7b0d7a4}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_MotorMockup
|
||||
VAR_INPUT
|
||||
// Enable motor
|
||||
xEnable AT%I* : BOOL;
|
||||
|
||||
// Motor setpoint
|
||||
iSetpoint AT%I* : INT;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
// Motor circuit breaker ok
|
||||
xMCBOk AT %Q* : BOOL;
|
||||
|
||||
// Repair switch ok
|
||||
xRepairSwitchOk AT %Q* : BOOL;
|
||||
|
||||
// Motor speed feedback
|
||||
iMotorSpeedFeedback AT %Q* : INT;
|
||||
END_VAR
|
||||
VAR
|
||||
_iInternalSetpoint : INT;
|
||||
|
||||
_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[// Set MCB and repair switch ok
|
||||
xMCBOk := TRUE;
|
||||
xRepairSwitchok := TRUE;
|
||||
|
||||
// Turn motor off if enable signal is not set
|
||||
IF xEnable THEN
|
||||
_iInternalSetpoint := iSetpoint;
|
||||
ELSE
|
||||
iSetpoint := 0;
|
||||
END_IF
|
||||
|
||||
// Calculate setpoint 0% - 100%
|
||||
// from analog value
|
||||
_fbValveAnalogInput(
|
||||
iAnalogValue:= iSetpoint,
|
||||
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 speed simulation
|
||||
_fbRampGenerator(
|
||||
rTarget:= _fbValveAnalogInput.rScaledValue,
|
||||
rTargetMin:= 0,
|
||||
rTargetMax:= 100,
|
||||
timRampUp:= T#10S,
|
||||
timRampDown:= T#10S,
|
||||
rSetpoint=> );
|
||||
|
||||
// Calculate analog output from ramp generator setpoint
|
||||
_fbValveAnalogOutput(
|
||||
rSetpoint:= _fbRampGenerator.rSetpoint,
|
||||
stScalingConfig:= _stAnalogScaling,
|
||||
xReleaseErrors:= FALSE,
|
||||
xReleaseHardwareErrors:= FALSE,
|
||||
xConfirmAlarms:= ,
|
||||
iAnalogValue=> iMotorSpeedFeedback,
|
||||
xError=> );]]></ST>
|
||||
</Implementation>
|
||||
<LineIds Name="FB_MotorMockup">
|
||||
<LineId Id="23" Count="0" />
|
||||
<LineId Id="9" Count="0" />
|
||||
<LineId Id="25" Count="0" />
|
||||
<LineId Id="83" Count="0" />
|
||||
<LineId Id="75" Count="0" />
|
||||
<LineId Id="74" Count="0" />
|
||||
<LineId Id="76" Count="0" />
|
||||
<LineId Id="81" Count="1" />
|
||||
<LineId Id="77" Count="0" />
|
||||
<LineId Id="26" Count="0" />
|
||||
<LineId Id="35" Count="38" />
|
||||
<LineId Id="24" Count="0" />
|
||||
</LineIds>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
96
PLC_SIM/POUs/Valve_Mockup/FB_ValveAnalogMockup.TcPOU
Normal file
96
PLC_SIM/POUs/Valve_Mockup/FB_ValveAnalogMockup.TcPOU
Normal file
@@ -0,0 +1,96 @@
|
||||
<?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>
|
||||
32
PLC_SIM/POUs/Valve_Mockup/FB_ValveMockup.TcPOU
Normal file
32
PLC_SIM/POUs/Valve_Mockup/FB_ValveMockup.TcPOU
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
||||
<POU Name="FB_ValveMockup" Id="{547b8ab6-f6bc-4f02-ac80-4920749ff4eb}" SpecialFunc="None">
|
||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_ValveMockup
|
||||
VAR_INPUT
|
||||
xOpenValve AT %I* : BOOL;
|
||||
xCloseValve AT %I* : BOOL;
|
||||
END_VAR
|
||||
VAR_OUTPUT
|
||||
xOpenFeedback AT %Q* : BOOL;
|
||||
xCloseFeedback AT %Q* : BOOL;
|
||||
END_VAR
|
||||
VAR
|
||||
_tonOpen : TON := (PT := T#2S);
|
||||
_tonClose : TON := (PT := T#2S);
|
||||
END_VAR
|
||||
]]></Declaration>
|
||||
<Implementation>
|
||||
<ST><![CDATA[// Timer for open and close feedback
|
||||
_tonOpen(IN := xOpenValve);
|
||||
_tonClose(IN := xCloseValve);
|
||||
|
||||
// Open and close feedback
|
||||
xOpenFeedback := _tonOpen.Q;
|
||||
xCloseFeedback := _tonClose.Q;]]></ST>
|
||||
</Implementation>
|
||||
<LineIds Name="FB_ValveMockup">
|
||||
<LineId Id="54" Count="5" />
|
||||
<LineId Id="20" Count="0" />
|
||||
</LineIds>
|
||||
</POU>
|
||||
</TcPlcObject>
|
||||
Reference in New Issue
Block a user