Projektdateien hinzufügen.
This commit is contained in:
10
PLC_SIM/GVLs/GVL_GLOBAL.TcGVL
Normal file
10
PLC_SIM/GVLs/GVL_GLOBAL.TcGVL
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
||||
<GVL Name="GVL_GLOBAL" Id="{48e9f5d5-c85b-4e17-821e-1a57bdce0dd8}">
|
||||
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||
VAR_GLOBAL
|
||||
// Random number generator
|
||||
fbRandom : DRAND;
|
||||
END_VAR]]></Declaration>
|
||||
</GVL>
|
||||
</TcPlcObject>
|
||||
109
PLC_SIM/PLC_SIM.plcproj
Normal file
109
PLC_SIM/PLC_SIM.plcproj
Normal file
@@ -0,0 +1,109 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<FileVersion>1.0.0.0</FileVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{efb0a11f-989c-4d9e-b375-03735c7e3bff}</ProjectGuid>
|
||||
<SubObjectsSortedByName>True</SubObjectsSortedByName>
|
||||
<DownloadApplicationInfo>true</DownloadApplicationInfo>
|
||||
<WriteProductVersion>true</WriteProductVersion>
|
||||
<GenerateTpy>false</GenerateTpy>
|
||||
<Name>PLC_SIM</Name>
|
||||
<ProgramVersion>3.1.4024.0</ProgramVersion>
|
||||
<Application>{38921a44-c50c-41e2-854b-4368e8bbac4c}</Application>
|
||||
<TypeSystem>{adae6458-f6ee-4eb6-8029-1d3613296f7d}</TypeSystem>
|
||||
<Implicit_Task_Info>{ba927202-89ed-442b-8e0b-f1ede5c67eb6}</Implicit_Task_Info>
|
||||
<Implicit_KindOfTask>{27c26cb9-57f9-4e40-a5e3-9ab282e33703}</Implicit_KindOfTask>
|
||||
<Implicit_Jitter_Distribution>{15dd2994-9051-41e5-9816-57eb64e27026}</Implicit_Jitter_Distribution>
|
||||
<LibraryReferences>{2e35f69f-cdc6-406f-ab1c-2ecda0902edb}</LibraryReferences>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="GVLs\GVL_GLOBAL.TcGVL">
|
||||
<SubType>Code</SubType>
|
||||
<LinkAlways>true</LinkAlways>
|
||||
</Compile>
|
||||
<Compile Include="PlcTask.TcTTO">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Analog_Sensor_Mockup\FB_AnalogSensorMockup.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\FB_UnitMockup.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\MAIN.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Motor_Mockup\FB_MotorMockup.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Valve_Mockup\FB_ValveAnalogMockup.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="POUs\Valve_Mockup\FB_ValveMockup.TcPOU">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="DUTs" />
|
||||
<Folder Include="GVLs" />
|
||||
<Folder Include="POUs\Analog_Sensor_Mockup" />
|
||||
<Folder Include="POUs\Motor_Mockup" />
|
||||
<Folder Include="POUs\Valve_Mockup" />
|
||||
<Folder Include="VISUs" />
|
||||
<Folder Include="POUs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PlaceholderReference Include="Tc2_Standard">
|
||||
<DefaultResolution>Tc2_Standard, * (Beckhoff Automation GmbH)</DefaultResolution>
|
||||
<Namespace>Tc2_Standard</Namespace>
|
||||
</PlaceholderReference>
|
||||
<PlaceholderReference Include="Tc2_System">
|
||||
<DefaultResolution>Tc2_System, * (Beckhoff Automation GmbH)</DefaultResolution>
|
||||
<Namespace>Tc2_System</Namespace>
|
||||
</PlaceholderReference>
|
||||
<PlaceholderReference Include="Tc3_Module">
|
||||
<DefaultResolution>Tc3_Module, * (Beckhoff Automation GmbH)</DefaultResolution>
|
||||
<Namespace>Tc3_Module</Namespace>
|
||||
</PlaceholderReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="PLC_SIM.tmc">
|
||||
<SubType>Content</SubType>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<PlcProjectOptions>
|
||||
<XmlArchive>
|
||||
<Data>
|
||||
<o xml:space="preserve" t="OptionKey">
|
||||
<v n="Name">"<ProjectRoot>"</v>
|
||||
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
|
||||
<v>{40450F57-0AA3-4216-96F3-5444ECB29763}</v>
|
||||
<o>
|
||||
<v n="Name">"{40450F57-0AA3-4216-96F3-5444ECB29763}"</v>
|
||||
<d n="SubKeys" t="Hashtable" />
|
||||
<d n="Values" t="Hashtable" ckt="String" cvt="String">
|
||||
<v>ActiveVisuProfile</v>
|
||||
<v>IR0whWr8bwfwBwAAiD2qpQAAAABVAgAA37x72QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA0AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWFHYAaQBzAHUAaQBuAHAAdQB0AHMAFwxzAHkAcwB0AGUAbQAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC1INgBjAGIAMQBjAGQAZQAxAC0AZAA1AGQAYwAtADQAYQAzAGIALQA5ADAANQA0AC0AMgAxAGYAYQA3ADUANgBhADMAZgBhADQALihJAG4AdABlAHIAZgBhAGMAZQBWAGUAcgBzAGkAbwBuAEkAbgBmAG8AL0x7AGMANgAxADEAZQA0ADAAMAAtADcAZgBiADkALQA0AGMAMwA1AC0AYgA5AGEAYwAtADQAZQAzADEANABiADUAOQA5ADYANAAzAH0AMBhNAGEAagBvAHIAVgBlAHIAcwBpAG8AbgAxGE0AaQBuAG8AcgBWAGUAcgBzAGkAbwBuADIMTABlAGcAYQBjAHkAMzBMAGEAbgBnAHUAYQBnAGUATQBvAGQAZQBsAFYAZQByAHMAaQBvAG4ASQBuAGYAbwA0MEwAbwBhAGQATABpAGIAcgBhAHIAaQBlAHMASQBuAHQAbwBQAHIAbwBqAGUAYwB0ADUaQwBvAG0AcABhAHQAaQBiAGkAbABpAHQAeQDQAAIaA9ADAS0E0AUGGgfQBwgaAUUHCQjQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtDtAPAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60BAAAA0A0BLRHQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0S0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAUAAAA0AwLrQIAAADQDQEtE9APAS0Q0AAJGgRFCgsEAwAAAAUAAAANAAAAAAAAANAMC60CAAAA0A0BLRTQDwEtENAACRoERQoLBAMAAAAFAAAADQAAAAAAAADQDAutAgAAANANAS0V0A8BLRDQAAkaBEUKCwQDAAAABQAAAA0AAAAAAAAA0AwLrQIAAADQDQEtFtAPAS0X0AAJGgRFCgsEAwAAAAUAAAANAAAAKAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAMAAAAFAAAADQAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtF9AAHy0t0C4vGgPQMAutAQAAANAxC60XAAAA0DIarQDQMy8aA9AwC60CAAAA0DELrQMAAADQMhqtANA0Gq0A0DUarQA=</v>
|
||||
</d>
|
||||
</o>
|
||||
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
|
||||
<o>
|
||||
<v n="Name">"{192FAD59-8248-4824-A8DE-9177C94C195A}"</v>
|
||||
<d n="SubKeys" t="Hashtable" />
|
||||
<d n="Values" t="Hashtable" />
|
||||
</o>
|
||||
</d>
|
||||
<d n="Values" t="Hashtable" />
|
||||
</o>
|
||||
</Data>
|
||||
<TypeList>
|
||||
<Type n="Hashtable">System.Collections.Hashtable</Type>
|
||||
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
|
||||
<Type n="String">System.String</Type>
|
||||
</TypeList>
|
||||
</XmlArchive>
|
||||
</PlcProjectOptions>
|
||||
</ProjectExtensions>
|
||||
</Project>
|
||||
1
PLC_SIM/PLC_SIM.tmc
Normal file
1
PLC_SIM/PLC_SIM.tmc
Normal file
File diff suppressed because one or more lines are too long
@@ -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>
|
||||
17
PLC_SIM/PlcTask.TcTTO
Normal file
17
PLC_SIM/PlcTask.TcTTO
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TcPlcObject Version="1.1.0.1">
|
||||
<Task Name="PlcTask" Id="{7e68243f-9ee1-4485-91d4-df46ccccb863}">
|
||||
<!--CycleTime in micro seconds.-->
|
||||
<CycleTime>10000</CycleTime>
|
||||
<Priority>21</Priority>
|
||||
<PouCall>
|
||||
<Name>MAIN</Name>
|
||||
</PouCall>
|
||||
<TaskFBGuid>{e424b7e9-d35f-4add-9e65-4af401c46aa0}</TaskFBGuid>
|
||||
<Fb_init>{4a091579-5862-4103-8545-d4a37f151ab9}</Fb_init>
|
||||
<Fb_exit>{f7dc1c2f-47b8-4449-935a-4621db3fcb63}</Fb_exit>
|
||||
<CycleUpdate>{44041344-d2bc-48db-b8cc-eb686eb6ca64}</CycleUpdate>
|
||||
<PostCycleUpdate>{0c24a224-7f2d-4ec6-9338-1114f4f413c3}</PostCycleUpdate>
|
||||
<ObjectProperties />
|
||||
</Task>
|
||||
</TcPlcObject>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user