Projektdateien hinzufügen.

This commit is contained in:
Matthias Heisig
2024-01-04 15:15:26 +01:00
parent 4c6f8dc5bd
commit faa33db290
94 changed files with 15104 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="E_BATTERY_STATUS" Id="{99b02815-2b47-4159-a889-c86170baa34d}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
TYPE E_BATTERY_STATUS :
(
ERROR := 1,
OFF := 2,
READY := 3,
ACTIVE := 4,
MAINTENANCE := 5,
TESTING := 6
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="E_CHARGE_STATUS" Id="{7a281462-bf73-4949-96d8-aca55bee6c60}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
TYPE E_CHARGE_STATUS :
(
UNDEFINED := 1,
EMPTY := 2,
CHARGING := 3,
DISCHARGING := 4,
FULL := 5
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="E_REACTIVE_POWER_TYPE" Id="{e2c788a7-c536-4b02-910e-6cbe600afdab}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
TYPE E_REACTIVE_POWER_TYPE :
(
INDUCTIVE := 1,
CAPACITIVE := 2,
NONE := 3
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_EMS_MODBUS_INTERFACE" Id="{c26c9ee9-feee-46cf-86e6-45d1a1e6819c}">
<Declaration><![CDATA[TYPE ST_EMS_MODBUS_INTERFACE :
STRUCT
// Size = 16 * 2 byte = 32 byte
// Addr: 10.000
sManufacturer : STRING(32); // 1 char = 1 byte
// Addr: 10.016
sModelname : STRING(32);
// Addr: 10.032
sSerialnumber : STRING(32);
// Addr: 10.048
sBMSVersion : STRING(64);
// Addr: 10.080
uiTotalParallelMembers : UINT; //uint 16bit = 1 Word
// Addr: 10.081
uiActiveParallelMembers : UINT;
// Addr: 11.000
eBatteryStatus : E_BATTERY_STATUS;
// Addr: 11.001
eChargeStatus : E_CHARGE_STATUS;
// Addr: 11.002
// Unit: Ah
udiChargeCapacity : UDINT; // 32bit
// Addr: 11.004
// Unit: Wh
udiEnergyCapacity : UDINT;
// Addr: 11.006
// Unit: W
udiMaxChargingActivePower : UDINT;
// Addr: 11.008
// Unit: W
udiMaxDischargingActivePower : UDINT;
// Addr: 11.010
// Unit: var
udiMaxAvailableInductiveReactivePower : UDINT;
// Addr: 11.012
// Unit: var
udiMaxAvailableCapacitiveReactivePower : UDINT;
// Addr: 11.014
// Unit: %
uiSelfDischargeRate : UINT; // 16 bit
// Addr: 11.015
// Unit: %
uiMaxAllowedSOC : UINT;
// Addr: 11.016
// Unit: %
uiMinAllowedSOC : UINT;
// Addr: 11.017
// Unit: %
uiCurrentSOC : UINT;
// Addr: 11.018
// Unit: %
uiCurrentDOD : UINT;
// Addr: 11.019
// Unit: Wh
udiChargedEnergy : UDINT;
// Addr: 11.021
// Unit: Wh
udiAvailableEnergy : UDINT;
// Addr: 11.023
// Unit: %
uiCurrentSOH : UINT;
// Addr: 11.024
// Unit: A
diTotalACCurrentPhase1 : DINT;
// Addr: 11.025
// Unit: A
diTotalACCurrentPhase2 : DINT;
// Addr: 11.026
// Unit: A
diTotalACCurrentPhase3 : DINT;
// Addr: 11.027
// Unit: W
diSetpointActivePowerMirror : DINT;
// Addr: 11.028
rSetpointCosPhiMirror : REAL; // 32 bit
// Addr: 11.030
// Unit: W
diCurrentActivePower : DINT;
// Addr: 11.031
// Unit: var
diCurrentReactivePower : DINT;
// Addr: 11.032
udiLifeMessage : UDINT;
// Addr: 11.033
lwWarningBitmap : LWORD;
// Addr: 11.035
lwErrorBitmap : LWORD;
// Addr: 12.000
// Unit: W
diSetpointActivePower : DINT;
// Addr: 12.001
rSetpointCosPhi : REAL;
// Addr: 12.003
eReactivePowerType : E_REACTIVE_POWER_TYPE;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_MODULE_HMI_INTERFACE" Id="{11e89a54-55b7-4731-b5d2-c1f68fd12879}">
<Declaration><![CDATA[TYPE ST_MODULE_HMI_INTERFACE :
STRUCT
stHMIInterfaceUnit1 : ST_UNIT_HMI_INTERFACE;
stHMIInterfaceUnit2 : ST_UNIT_HMI_INTERFACE;
stHMIInterfaceUnit3 : ST_UNIT_HMI_INTERFACE;
stHMIInterfaceUnit4 : ST_UNIT_HMI_INTERFACE;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_STRING_HMI_INTERFACE" Id="{b74e184a-a1d0-4499-8ac0-7e2226af9a4f}">
<Declaration><![CDATA[TYPE ST_STRING_HMI_INTERFACE :
STRUCT
stHMIInterfaceModule1 : ST_MODULE_HMI_INTERFACE;
stHMIInterfaceModule2 : ST_MODULE_HMI_INTERFACE;
stHMIInterfaceModule3 : ST_MODULE_HMI_INTERFACE;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_UNIT_CONFIG" Id="{75a00288-1f08-4f47-846c-fa7c44b2279c}">
<Declaration><![CDATA[TYPE ST_UNIT_CONFIG :
STRUCT
// Pump posolyt
// ===================================
stConfigPosolytPump : ST_MOTOR_ANALOG_CONFIG;
// Pump negolyt
// ===================================
stConfigNegolytPump : ST_MOTOR_ANALOG_CONFIG;
// Valves posolyt
// ===================================
stConfigPosolytValve : ST_ValveConfig;
// Valves negolyt
// ===================================
stConfigNegolytValve : ST_ValveConfig;
// Pressure sensor posolyt segment inlet
//====================================
stConfigPosolytPressureSegmentInlet : ST_ANALOG_IO_CONFIG;
stEWLPosolytPressureSegmentInlet : ST_ANALOG_EW_LEVELS;
stEWDPosolytPressureSegmentInlet : ST_ANALOG_EW_DELAYS;
// Pressure sensor negolyt segment inlet
//====================================
stConfigNegolytPressureSegmentInlet : ST_ANALOG_IO_CONFIG;
stEWLNegolytPressureSegmentInlet : ST_ANALOG_EW_LEVELS;
stEWDNegolytPressureSegmentInlet : ST_ANALOG_EW_DELAYS;
// Pressure sensor posolyt tank inlet
//====================================
stConfigPosolytPressureTankInlet : ST_ANALOG_IO_CONFIG;
stEWLPosolytPressureTankInlet : ST_ANALOG_EW_LEVELS;
stEWDPosolytPressureTankInlet : ST_ANALOG_EW_DELAYS;
// Pressure sensor posolyt tank inlet
//====================================
stConfigNegolytPressureTankInlet : ST_ANALOG_IO_CONFIG;
stEWLNegolytPressureTankInlet : ST_ANALOG_EW_LEVELS;
stEWDNegolytPressureTankInlet : ST_ANALOG_EW_DELAYS;
// Temperature sensor posolyt tank inlet
//====================================
stConfigPosolytTempTankInlet : ST_ANALOG_IO_CONFIG;
stEWLPosolytTempTankInlet : ST_ANALOG_EW_LEVELS;
stEWDPosolytTempTankInlet : ST_ANALOG_EW_DELAYS;
// Temperature sensor negolyt tank inlet
//====================================
stConfigNegolytTempTankInlet : ST_ANALOG_IO_CONFIG;
stEWLNegolytTempTankInlet : ST_ANALOG_EW_LEVELS;
stEWDNegolytTempTankInlet : ST_ANALOG_EW_DELAYS;
// Voltage segment
//====================================
stConfigVoltageSegment : ST_ANALOG_IO_CONFIG;
stEWLVoltageSegment : ST_ANALOG_EW_LEVELS;
stEWDVoltageSegment : ST_ANALOG_EW_DELAYS;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_UNIT_HMI_INTERFACE" Id="{a46d51f7-c17c-44e4-be59-edb877b3b5dc}">
<Declaration><![CDATA[TYPE ST_UNIT_HMI_INTERFACE :
STRUCT
// Pump posolyt
// ===================================
stPosolytPump : ST_HMI_ANALOG_MOTOR_DATA;
// Pump negolyt
// ===================================
stNegolytPump : ST_HMI_ANALOG_MOTOR_DATA;
// Valve posolyt
// ===================================
stPosolytValve : ST_HMI_VALVE_DATA;
// Valve negolyt
// ===================================
stNegolytValve : ST_HMI_VALVE_DATA;
// Drucksensoren Posolyt
//====================================
stPosolytPressureSegmentInlet : ST_HMI_ANALOG_VALUE;
// Drucksensoren Negolyt
//====================================
stNegolytPressureSegmentInlet : ST_HMI_ANALOG_VALUE;
// Temperature sensor posolyt tank inlet
//====================================
stPosolytTempTankInlet : ST_HMI_ANALOG_VALUE;
// Temperature sensor negolyt tank inlet
//====================================
stNegolytTempTankInlet : ST_HMI_ANALOG_VALUE;
// Voltage sensors
// ===================================
stVoltageSegment : ST_HMI_ANALOG_VALUE;
// Aknowledge all alarms button
// ===================================
stButtonAckAlarms : ST_HMI_CONTROL_BUTTON;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

158
PLC/GVLs/GVL_CONFIG.TcGVL Normal file
View File

@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<GVL Name="GVL_CONFIG" Id="{0773bf51-0237-454d-a970-cfd896054edb}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
// ===========================
// Unit hardware config
// ===========================
stUnitConfig : ST_UNIT_CONFIG :=
(
// Pump poslyt segment inlet
stConfigPosolytPump :=
(
rTargetMin := 0.0,
rTargetMax := 100.0,
timRampUpTime := T#5S,
timRampDownTime := T#5S,
stAnalogInputConfig := (iAIMax := 32767, iAIMin := 0, rPVMax := 100, rPVMin := 0, sUnit := '%'),
stAnalogOutputConfig := (iAIMax := 32767, iAIMin := 0, rPVMax := 100, rPVMin := 0),
xHasAnalogFeedback := TRUE,
xHasMCBFeedback := TRUE,
xHasRepairSwitchFeedback := FALSE
),
// Pump negolyt segment inlet
stConfigNegolytPump :=
(
rTargetMin := 0.0,
rTargetMax := 100.0,
timRampUpTime := T#5S,
timRampDownTime := T#5S,
stAnalogInputConfig := (iAIMax := 32767, iAIMin := 0, rPVMax := 100, rPVMin := 0, sUnit := '%'),
stAnalogOutputConfig := (iAIMax := 32767, iAIMin := 0, rPVMax := 100, rPVMin := 0),
xHasAnalogFeedback := TRUE,
xHasMCBFeedback := TRUE,
xHasRepairSwitchFeedback := FALSE
),
// Valve posolyt tank outlet
stConfigPosolytValve := (timTimeoutOpen := T#10S, timTimeoutClose := T#10S, xHasOpenFeedback := TRUE, xHasClosedFeedback := TRUE),
// Valve negolyt tank outlet
stConfigNegolytValve := (timTimeoutOpen := T#10S, timTimeoutClose := T#10S, xHasOpenFeedback := TRUE, xHasClosedFeedback := TRUE),
// Pressure posolyt segment inlet
stConfigPosolytPressureSegmentInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 1500, rPVMin := -1000, sUnit := 'mbar'),
stEWLPosolytPressureSegmentInlet := (rErrorMin := -500, rWarningMin := -400, rWarningMax := 600, rErrorMax := 700),
stEWDPosolytPressureSegmentInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#1S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#1S,
timErrorHighOff := T#5S
),
// Pressure negolyt segment inlet
stConfigNegolytPressureSegmentInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 1500, rPVMin := -1000, sUnit := 'mbar'),
stEWLNegolytPressureSegmentInlet := (rErrorMin := -500, rWarningMin := -400, rWarningMax := 600, rErrorMax := 700),
stEWDNegolytPressureSegmentInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#1S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#1S,
timErrorHighOff := T#5S
),
// Temperature sensor posolyt tank inlet
stConfigPosolytTempTankInlet := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C'),
stEWLPosolytTempTankInlet := (rErrorMin := -10, rWarningMin := -5, rWarningMax := 45, rErrorMax := 60),
stEWDPosolytTempTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#5S,
timErrorLowOff := T#5S,
timWarningLowOn := T#5S,
timWarningLowOff := T#5S,
timWarningHighOn := T#5S,
timWarningHighOff := T#5S,
timErrorHighOn := T#5S,
timErrorHighOff := T#5S
),
// Temperature sensor negolyt tank inlet
stConfigNegolytTempTankInlet := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C'),
stEWLNegolytTempTankInlet := (rErrorMin := -10, rWarningMin := -5, rWarningMax := 45, rErrorMax := 60),
stEWDNegolytTempTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#5S,
timErrorLowOff := T#5S,
timWarningLowOn := T#5S,
timWarningLowOff := T#5S,
timWarningHighOn := T#5S,
timWarningHighOff := T#5S,
timErrorHighOn := T#5S,
timErrorHighOff := T#5S
),
// Voltage sensor segment
// EL3214-0090 CoE Verzeichnis
// Index 0x80n0:02 "Presentation" = Signed(0) -> Resolution 1/10°C
// Index 0x80n0:19 "RTD Element" = PT100(0)
stConfigVoltageSegment := (iAIMax := 32767, iAIMin := 0, rPVMax := 150, rPVMin := 0, sUnit := 'V'),
stEWLVoltageSegment := (rErrorMin := 50, rWarningMin := 55, rWarningMax := 75, rErrorMax := 80),
stEWDVoltageSegment :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#2S,
timErrorLowOff := T#5S,
timWarningLowOn := T#2S,
timWarningLowOff := T#5S,
timWarningHighOn := T#2S,
timWarningHighOff := T#5S,
timErrorHighOn := T#2S,
timErrorHighOff := T#5S
)
);
// ===========================
// General settings
// ===========================
// Pump on power
rPumpPosolytOnPower : REAL := 70.0;
rPumpNegolytOnPower : REAL := 70.0;
// Unit voltage pumps shutoff threshold
rPumpshutoffThreshold : REAL := 25.0;
// Minimum unit voltage for startup
rMinimumUnitVoltage : REAL := 49.0;
// Maximum absolute voltage difference
// between units in the same module
rMaxAbsDiffVoltageUnitsOnModule : REAL := 5.0;
// Maximum absolute voltage difference
// between Modules
rMaxAbsDiffVoltageModulesInString : REAL := 10.0;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

21
PLC/GVLs/GVL_MODBUS.TcGVL Normal file
View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<GVL Name="GVL_MODBUS" Id="{913a9222-1338-4c08-b758-91c1bd26dcd9}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
// Modbus interface to customer EMS
stModbusEMSComm : ST_EMS_MODBUS_INTERFACE := (
sManufacturer := 'cmblu energy ag',
sModelname := 'all liquid',
sSerialnumber := '202312151643',
sBMSVersion := '0.8.0',
uiTotalParallelMembers := 2);
// Modbus default config
mb_Input_Coils : ARRAY [0..255] OF BOOL;
mb_Output_Coils : ARRAY [0..255] OF BOOL;
mb_Input_Registers : ARRAY [0..255] OF WORD;
mb_Output_Registers : ARRAY [0..255] OF WORD;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

9
PLC/GVLs/GVL_SCADA.TcGVL Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<GVL Name="GVL_SCADA" Id="{8186ff04-764f-4b24-8a6b-d0a44d528e6f}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
stHMIInterfaces : ARRAY [0..3] OF ST_UNIT_HMI_INTERFACE;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

150
PLC/PLC.plcproj Normal file
View File

@@ -0,0 +1,150 @@
<?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>{9ae64910-5eb2-4866-93fd-efe059c38c36}</ProjectGuid>
<SubObjectsSortedByName>True</SubObjectsSortedByName>
<DownloadApplicationInfo>true</DownloadApplicationInfo>
<WriteProductVersion>true</WriteProductVersion>
<GenerateTpy>false</GenerateTpy>
<Name>PLC</Name>
<ProgramVersion>3.1.4024.0</ProgramVersion>
<Application>{afd0b275-de2f-4006-ab0f-6826ccfce7be}</Application>
<TypeSystem>{18a2eab9-0077-4cea-9d3b-9a168bdf0814}</TypeSystem>
<Implicit_Task_Info>{6e35f35d-280b-4da2-9c5b-fc35ab6da425}</Implicit_Task_Info>
<Implicit_KindOfTask>{580e4ecb-3f35-4f4d-bc2a-d29ea11be950}</Implicit_KindOfTask>
<Implicit_Jitter_Distribution>{8bf9a0d5-d7ca-4ab3-b8e1-6723c8a1acbc}</Implicit_Jitter_Distribution>
<LibraryReferences>{106b5199-0018-4919-a06c-2ea0dd3e1070}</LibraryReferences>
</PropertyGroup>
<ItemGroup>
<Compile Include="DUTs\E_BATTERY_STATUS.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\E_CHARGE_STATUS.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\E_REACTIVE_POWER_TYPE.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\ST_EMS_MODBUS_INTERFACE.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\ST_MODULE_HMI_INTERFACE.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\ST_STRING_HMI_INTERFACE.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\ST_UNIT_HMI_INTERFACE.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\ST_UNIT_CONFIG.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="GVLs\GVL_CONFIG.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="GVLs\GVL_MODBUS.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="GVLs\GVL_SCADA.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="PlcTask.TcTTO">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_Module.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_String.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\FB_Unit.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\MAIN.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Sunspec\FB_PowerSupplySunspec.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="POUs\Sunspec\U_SUNSPEC_ERROR.TcDUT">
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Folder Include="DUTs" />
<Folder Include="GVLs" />
<Folder Include="POUs\Sunspec" />
<Folder Include="VISUs" />
<Folder Include="POUs" />
</ItemGroup>
<ItemGroup>
<PlaceholderReference Include="BaseLib">
<DefaultResolution>BaseLib, * (cmblu)</DefaultResolution>
<Namespace>BaseLib</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_ModbusSrv">
<DefaultResolution>Tc2_ModbusSrv, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_ModbusSrv</Namespace>
</PlaceholderReference>
<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_EventLogger">
<DefaultResolution>Tc3_EventLogger, * (Beckhoff Automation GmbH)</DefaultResolution>
</PlaceholderReference>
<PlaceholderReference Include="Tc3_Module">
<DefaultResolution>Tc3_Module, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc3_Module</Namespace>
</PlaceholderReference>
</ItemGroup>
<ItemGroup>
<None Include="PLC.tmc">
<SubType>Content</SubType>
</None>
</ItemGroup>
<ProjectExtensions>
<PlcProjectOptions>
<XmlArchive>
<Data>
<o xml:space="preserve" t="OptionKey">
<v n="Name">"&lt;ProjectRoot&gt;"</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>

523
PLC/PLC.tmc Normal file

File diff suppressed because one or more lines are too long

155
PLC/POUs/FB_Module.TcPOU Normal file
View File

@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="FB_Module" Id="{87be924f-018d-4c09-997b-f0c0054414cc}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Module
VAR_INPUT
// Emergency stop ok
xEmergencyStopOk : BOOL;
// HMI Interface
stHMIInterface : REFERENCE TO ST_MODULE_HMI_INTERFACE;
// Release alarms
xReleaseErrors : BOOL;
// Release analog io limit errors
xReleaseLimitErrors : BOOL;
// Input to confirm all errors
xConfirmAlarms : BOOL;
END_VAR
VAR_OUTPUT
// One unit has an error
xError : BOOL;
// One unit has a warning
xWarning : BOOL;
END_VAR
VAR
_fbUnit1 : FB_Unit(CONCAT(_sName, ' Unit 1'));
_fbUnit2 : FB_Unit(CONCAT(_sName, ' Unit 2'));
_fbUnit3 : FB_Unit(CONCAT(_sName, ' Unit 3'));
_fbUnit4 : FB_Unit(CONCAT(_sName, ' Unit 4'));
// Module name
_sName : STRING;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Reset error and warning flag
xError := FALSE;
xWarning := FALSE;
// ===============================
// Unit 1
// ===============================
_fbUnit1(
stUnitConfig:= GVL_CONFIG.stUnitConfig,
stHMIInterface:= stHMIInterface.stHMIInterfaceUnit1,
xEmergencyStopOk:= xEmergencyStopOk,
rSetpointPosolytPumpInlet:= GVL_CONFIG.rPumpPosolytOnPower,
rSetpointNegolytPumpInlet:= GVL_CONFIG.rPumpNegolytOnPower,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms,
_xWarningConfirmPending=> );
IF _fbUnit1.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbUnit1.xError THEN
xError := TRUE;
END_IF
// ===============================
// Unit 2
// ===============================
_fbUnit2(
stUnitConfig:= GVL_CONFIG.stUnitConfig,
stHMIInterface:= stHMIInterface.stHMIInterfaceUnit2,
xEmergencyStopOk:= xEmergencyStopOk,
rSetpointPosolytPumpInlet:= GVL_CONFIG.rPumpPosolytOnPower,
rSetpointNegolytPumpInlet:= GVL_CONFIG.rPumpNegolytOnPower,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms,
_xWarningConfirmPending=> );
IF _fbUnit2.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbUnit2.xError THEN
xError := TRUE;
END_IF
// ===============================
// Unit 3
// ===============================
_fbUnit3(
stUnitConfig:= GVL_CONFIG.stUnitConfig,
stHMIInterface:= stHMIInterface.stHMIInterfaceUnit3,
xEmergencyStopOk:= xEmergencyStopOk,
rSetpointPosolytPumpInlet:= GVL_CONFIG.rPumpPosolytOnPower,
rSetpointNegolytPumpInlet:= GVL_CONFIG.rPumpNegolytOnPower,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms,
_xWarningConfirmPending=> );
IF _fbUnit3.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbUnit3.xError THEN
xError := TRUE;
END_IF
// ===============================
// Unit 4
// ===============================
_fbUnit4(
stUnitConfig:= GVL_CONFIG.stUnitConfig,
stHMIInterface:= stHMIInterface.stHMIInterfaceUnit4,
xEmergencyStopOk:= xEmergencyStopOk,
rSetpointPosolytPumpInlet:= GVL_CONFIG.rPumpPosolytOnPower,
rSetpointNegolytPumpInlet:= GVL_CONFIG.rPumpNegolytOnPower,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms,
_xWarningConfirmPending=> );
IF _fbUnit4.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbUnit4.xError THEN
xError := TRUE;
END_IF]]></ST>
</Implementation>
<Method Name="FB_init" Id="{369c1d27-76e4-45f8-9dbe-03524d3389df}">
<Declaration><![CDATA[METHOD FB_init : BOOL
VAR_INPUT
bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
bInCopyCode : BOOL; // if TRUE, the instance afterwards gets moved into the copy code (online change)
sName : STRING;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_sName := sName;]]></ST>
</Implementation>
</Method>
<LineIds Name="FB_Module">
<LineId Id="248" Count="92" />
<LineId Id="188" Count="0" />
</LineIds>
<LineIds Name="FB_Module.FB_init">
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

124
PLC/POUs/FB_String.TcPOU Normal file
View File

@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="FB_String" Id="{46501225-f446-4674-bfed-3be64273e576}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_String
VAR_INPUT
// Module 1 HMI interface
stHMIInterface : ST_STRING_HMI_INTERFACE;
// Emergency stop ok
xEmergencyStopOk : BOOL;
// Release alarms
xReleaseErrors : BOOL;
// Release analog io limit errors
xReleaseLimitErrors : BOOL;
// Input to confirm all errors
xConfirmAlarms : BOOL;
END_VAR
VAR_OUTPUT
xError : BOOL;
xWarning : BOOL;
END_VAR
VAR
_fbModule1 : FB_Module(CONCAT(_sName, 'Module 1'));
_fbModule2 : FB_Module(CONCAT(_sName, 'Module 2'));
_fbModule3 : FB_Module(CONCAT(_sName, 'Module 3'));
// String name
_sName : STRING;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// ===============================
// Module 1
// ===============================
_fbModule1(
xEmergencyStopOk:= xEmergencyStopOk,
stHMIInterface:= stHMIInterface.stHMIInterfaceModule1,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms);
IF _fbModule1.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbModule1.xError THEN
xError := TRUE;
END_IF
// ===============================
// Module 2
// ===============================
_fbModule2(
xEmergencyStopOk:= xEmergencyStopOk,
stHMIInterface:= stHMIInterface.stHMIInterfaceModule2,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms);
IF _fbModule2.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbModule2.xError THEN
xError := TRUE;
END_IF
// ===============================
// Module 3
// ===============================
_fbModule3(
xEmergencyStopOk:= xEmergencyStopOk,
stHMIInterface:= stHMIInterface.stHMIInterfaceModule3,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms);
IF _fbModule3.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbModule3.xError THEN
xError := TRUE;
END_IF]]></ST>
</Implementation>
<Method Name="FB_init" Id="{9e8494eb-1b40-4be9-91c8-810ecbdf7f0c}">
<Declaration><![CDATA[METHOD FB_init : BOOL
VAR_INPUT
bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
bInCopyCode : BOOL; // if TRUE, the instance afterwards gets moved into the copy code (online change)
sName : STRING;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_sName := sName;]]></ST>
</Implementation>
</Method>
<LineIds Name="FB_String">
<LineId Id="69" Count="0" />
<LineId Id="67" Count="1" />
<LineId Id="47" Count="1" />
<LineId Id="50" Count="3" />
<LineId Id="58" Count="0" />
<LineId Id="62" Count="0" />
<LineId Id="64" Count="0" />
<LineId Id="66" Count="0" />
<LineId Id="63" Count="0" />
<LineId Id="59" Count="2" />
<LineId Id="71" Count="17" />
<LineId Id="70" Count="0" />
<LineId Id="90" Count="17" />
<LineId Id="89" Count="0" />
</LineIds>
<LineIds Name="FB_String.FB_init">
<LineId Id="7" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

535
PLC/POUs/FB_Unit.TcPOU Normal file
View File

@@ -0,0 +1,535 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="FB_Unit" Id="{e9bb815b-eb46-4920-800d-910484e58b22}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Unit
VAR_INPUT
// Unit configuration
stUnitConfig : REFERENCE TO ST_UNIT_CONFIG;
// HMI interface
stHMIInterface : REFERENCE TO ST_UNIT_HMI_INTERFACE;
// Start unit
xEnable : BOOL;
// Emergency stop ok
xEmergencyStopOk : BOOL;
// Setpoint posolyt pump inlet
rSetpointPosolytPumpInlet : REAL;
// Setpoint negolyt pump inlet
rSetpointNegolytPumpInlet : REAL;
// Release alarms
xReleaseErrors : BOOL;
// Release analog io limit errors
xReleaseLimitErrors : BOOL;
// Input to confirm all errors
xConfirmAlarms : BOOL;
END_VAR
VAR_OUTPUT
// Unit ready
xReady : BOOL;
// Error active
xError : BOOL;
// Warning active
xWarning : BOOL;
// Warning confirmation still pending
_xWarningConfirmPending : BOOL;
END_VAR
VAR
// Check unit condition after some time during startup
_timUnitStartupWaitTime : TIME := T#20S;
// Valves posolyt
_fbPosolytValveTankOutlet : FB_Valve('Posolyt tank outlet');
// Valves negolyt
_fbNegolytValveTankOutlet : FB_Valve('Negolyt tank outlet');
// Pumps posolyt
_fbPosolytPumpInlet : FB_MotorAnalog('Posolyt segment inlet');
// Pumps negolyt
_fbNegolytPumpInlet : FB_MotorAnalog('Negolyt segment inlet');
// Pressure sensors posolyt
_fbPressurePosolytSegmentInlet : FB_AnalogInput('P1_P');
_fbPressurePosolytTankInlet : FB_AnalogInput('P3_P');
_fbPressurePosolytTankOutlet : FB_AnalogInput('P4_P');
// Pressure sensors negolyt
_fbPressureNegolytSegmentInlet : FB_AnalogInput('P1_N');
_fbPressureNegolytTankInlet : FB_AnalogInput('P3_N');
_fbPressureNegolytTankOutlet : FB_AnalogInput('P4_N');
// Unit voltage
_fbVoltageSegment : FB_AnalogInput('Voltage');
// Valve posolyt tank outlet interlocks
_stPosolytValveTankOutletPIntlk : T_INTERLOCK;
_stPosolytValveTankOutletPIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0000;
_stPosolytValveTankOutletSIntlk : T_INTERLOCK;
_stPosolytValveTankOutletSIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0011;
// Valve negolyt tank outlet interlocks
_stNegolytValveTankOutletPIntlk : T_INTERLOCK;
_stNegolytValveTankOutletPIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0000;
_stNegolytValveTankOutletSIntlk : T_INTERLOCK;
_stNegolytValveTankOutletSIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0011;
// Pump posolyt inlet interlocks
_stPosolytPumpInletPIntlk : T_INTERLOCK;
_stPosolytPumpInletPIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0001;
_stPosolytPumpInletSIntlk : T_INTERLOCK;
_stPosolytPumpInletSIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0011;
// Pump negolyt inlet interlocks
_stNegolytPumpInletPIntlk : T_INTERLOCK;
_stNegolytPumpInletPIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0001;
_stNegolytPumpInletSIntlk : T_INTERLOCK;
_stNegolytPumpInletSIntlkUsed : T_INTERLOCK := 2#0000_0000_0000_0011;
// Error active
_xErrorActive : BOOL;
// Warning active
_xWarningActive : BOOL;
// Current state
_iState: INT;
// All components in automatic mode
_xAllComponentsInAutomatic : BOOL;
// Not all components in automatic mode alarm
_fbNotAllAutomaticAlarm : FB_TcAlarm;
// Unit name
_sName : STRING;
// Unit startup check timer
_tonStartupCheck : TON;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Reset error active
_xErrorActive := FALSE;
// Reset warning active
_xWarningActive := FALSE;
// ===============================
// Valve posolyt tank outlet
// ===============================
// Safety Interlocks
stHMIInterface.stPosolytValve.stInterlock.asSafetyINTLKName[0] := 'Emergency stop ok';
_stPosolytValveTankOutletSIntlk.0 := xEmergencyStopOk;
// Valve fb
_fbPosolytValveTankOutlet(
xReleaseManualMode:= TRUE,
wProcessINTLK:= _stPosolytValveTankOutletPIntlk,
wProcessINTLKUsed:= _stPosolytValveTankOutletPIntlkUsed,
wSafetyINTLK:= _stPosolytValveTankOutletSIntlk,
wSafetyINTLKUsed:= _stPosolytValveTankOutletSIntlkUsed,
xConfirmAlarms:= xConfirmAlarms,
xReleaseErrors:= xReleaseErrors,
stValveConfig:= stUnitConfig.stConfigPosolytValve,
stHMIInterface:= stHMIInterface.stPosolytValve);
// Set error active if fb has error
IF _fbPosolytValveTankOutlet.xError THEN
_xErrorActive := TRUE;
END_IF
// ===============================
// Valve negolyt tank outlet
// ===============================
// Safety Interlocks
stHMIInterface.stNegolytValve.stInterlock.asSafetyINTLKName[0] := 'Emergency stop ok';
_stNegolytValveTankOutletSIntlk.0 := xEmergencyStopOk;
// Valve fb
_fbNegolytValveTankOutlet(
xReleaseManualMode:= TRUE,
wProcessINTLK:= _stNegolytValveTankOutletPIntlk,
wProcessINTLKUsed:= _stNegolytValveTankOutletPIntlkUsed,
wSafetyINTLK:= _stNegolytValveTankOutletSIntlk,
wSafetyINTLKUsed:= _stNegolytValveTankOutletSIntlkUsed,
xConfirmAlarms:= xConfirmAlarms,
xReleaseErrors:= xReleaseErrors,
stValveConfig:= stUnitConfig.stConfigNegolytValve,
stHMIInterface:= stHMIInterface.stNegolytValve);
// Set error active if fb has error
IF _fbNegolytValveTankOutlet.xError THEN
_xErrorActive := TRUE;
END_IF
// ===============================
// Pump posolyt segment inlet
// ===============================
// Safety Interlocks
stHMIInterface.stPosolytPump.stInterlock.asSafetyINTLKName[0] := 'Emergency stop ok';
_stPosolytPumpInletSIntlk.0 := xEmergencyStopOk;
// Process interlocks
stHMIInterface.stPosolytPump.stInterlock.asProcessINTLKName[0] := 'At least one valve is open';
_stPosolytPumpInletPIntlk.0 := _fbPosolytValveTankOutlet.IsOpen;
// Valve fb
_fbPosolytPumpInlet(
xReleaseManualMode:= TRUE,
wProcessINTLK:= _stPosolytPumpInletPIntlk,
wProcessINTLKUsed:= _stPosolytPumpInletPIntlkUsed,
wSafetyINTLK:= _stPosolytPumpInletSIntlk,
wSafetyINTLKUsed:= _stPosolytPumpInletSIntlkUsed,
xReleaseErrors:= xReleaseErrors,
xConfirmAlarms:= xConfirmAlarms,
rSPautomatic:= rSetpointPosolytPumpInlet,
xReleaseAnalogInLimitErrors:= xReleaseLimitErrors,
stMotorAnalogConfig:= stUnitConfig.stConfigPosolytPump,
stHMIInterface:= stHMIInterface.stPosolytPump,
xWarning=> );
// Set error active if fb has error
IF _fbPosolytPumpInlet.xError THEN
_xErrorActive := TRUE;
END_IF
// Set warning if fb has warning
IF _fbPosolytPumpInlet.xWarning THEN
_xWarningActive := TRUE;
END_IF
// ===============================
// Pump negolyt segment inlet
// ===============================
// Safety Interlocks
stHMIInterface.stNegolytPump.stInterlock.asSafetyINTLKName[0] := 'Emergency stop ok';
_stNegolytPumpInletSIntlk.0 := xEmergencyStopOk;
// Process interlocks
stHMIInterface.stNegolytPump.stInterlock.asProcessINTLKName[0] := 'At least one valve is open';
_stNegolytPumpInletPIntlk.0 := _fbNegolytValveTankOutlet.IsOpen;
// Valve fb
_fbNegolytPumpInlet(
xReleaseManualMode:= TRUE,
wProcessINTLK:= _stNegolytPumpInletPIntlk,
wProcessINTLKUsed:= _stNegolytPumpInletPIntlkUsed,
wSafetyINTLK:= _stNegolytPumpInletSIntlk,
wSafetyINTLKUsed:= _stNegolytPumpInletSIntlkUsed,
xReleaseErrors:= xReleaseErrors,
xConfirmAlarms:= xConfirmAlarms,
rSPautomatic:= rSetpointNegolytPumpInlet,
xReleaseAnalogInLimitErrors:= xReleaseLimitErrors,
stMotorAnalogConfig:= stUnitConfig.stConfigNegolytPump,
stHMIInterface:= stHMIInterface.stNegolytPump,
xWarning=> );
// Set error active if fb has error
IF _fbNegolytPumpInlet.xError THEN
_xErrorActive := TRUE;
END_IF
// Set warning if fb has warning
IF _fbNegolytPumpInlet.xWarning THEN
_xWarningActive := TRUE;
END_IF
// ===============================
// Pressure sensors posolyt segment inlet
// ===============================
_fbPressurePosolytSegmentInlet(
stScalingConfig:= stUnitConfig.stConfigPosolytPressureSegmentInlet,
stEWConfig:= stUnitConfig.stEWLPosolytPressureSegmentInlet,
stEWDelayConfig:= stUnitConfig.stEWDPosolytPressureSegmentInlet,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xReleaseHardwareErrors:= xReleaseErrors,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface => stHMIInterface.stPosolytPressureSegmentInlet);
// Set error active if fb has error
IF _fbPressurePosolytSegmentInlet.xError THEN
_xErrorActive := TRUE;
END_IF
// Set warning if fb has warning
IF _fbPressurePosolytSegmentInlet.xWarning THEN
_xWarningActive := TRUE;
END_IF
// ===============================
// Pressure sensors negolyt segment inlet
// ===============================
_fbPressureNegolytSegmentInlet(
stScalingConfig:= stUnitConfig.stConfigNegolytPressureSegmentInlet,
stEWConfig:= stUnitConfig.stEWLNegolytPressureSegmentInlet,
stEWDelayConfig:= stUnitConfig.stEWDNegolytPressureSegmentInlet,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xReleaseHardwareErrors:= xReleaseErrors,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface => stHMIInterface.stNegolytPressureSegmentInlet);
// Set error active if fb has error
IF _fbPressureNegolytSegmentInlet.xError THEN
_xErrorActive := TRUE;
END_IF
// Set warning if fb has warning
IF _fbPressureNegolytSegmentInlet.xWarning THEN
_xWarningActive := TRUE;
END_IF
// ===============================
// Voltage segment
// ===============================
_fbVoltageSegment(
stScalingConfig:= ,
stEWConfig:= ,
stEWDelayConfig:= ,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xReleaseHardwareErrors:= xReleaseErrors,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface=> stHMIInterface.stVoltageSegment);
// Set error active if fb has error
IF _fbVoltageSegment.xError THEN
_xErrorActive := TRUE;
END_IF
// Set warning if fb has warning
IF _fbVoltageSegment.xWarning THEN
_xWarningActive := TRUE;
END_IF
// ===============================
// Check if all components are in automatic
// ===============================
_xAllComponentsInAutomatic := _fbPosolytValveTankOutlet.IsInAutomaticMode
AND _fbNegolytValveTankOutlet.IsInAutomaticMode
AND _fbPosolytPumpInlet.IsInAutomaticMode
AND _fbNegolytPumpInlet.IsInAutomaticMode;
// Raise warning
IF NOT _fbNotAllAutomaticAlarm.bRaised AND (NOT _xAllComponentsInAutomatic) THEN
_fbNotAllAutomaticAlarm.Raise(0);
END_IF
// Clear warning and reset
IF _fbNotAllAutomaticAlarm.bRaised AND _xAllComponentsInAutomatic THEN
_fbNotAllAutomaticAlarm.Clear(0, TRUE);
END_IF
// ===============================
// Run state machine for startup and shutdown
// ===============================
CASE _iState OF
0: // Off
IF xEnable AND _xAllComponentsInAutomatic AND (NOT _xErrorActive) THEN
_iState := 10;
END_IF
10: // Open all valves
_fbPosolytValveTankOutlet.ReqAutomaticOpen();
_fbNegolytValveTankOutlet.ReqAutomaticOpen();
_iState := 15;
15: // Wait for all valves to be open
IF _fbPosolytValveTankOutlet.IsOpen AND _fbNegolytValveTankOutlet.IsOpen THEN
IF NOT _fbPosolytValveTankOutlet.xError AND _fbNegolytValveTankOutlet.xError THEN
_iState := 20;
END_IF
END_IF
// If enable signal is lost, or there is an error, goto shutdown
IF (NOT xEnable) OR _xErrorActive THEN
_iState := 40;
END_IF
20: // Start pumps
_fbPosolytPumpInlet.ReqAutomaticStart();
_fbNegolytPumpInlet.ReqAutomaticStart();
_iState := 25;
25: // Wait for all pumps to run
IF _fbPosolytPumpInlet.xInTarget AND _fbNegolytPumpInlet.xInTarget THEN
_iState := 30;
END_IF
// If enable signal is lost, goto shutdown
IF (NOT xEnable) OR _xErrorActive THEN
_iState := 40;
END_IF
30: // Wait some time
_tonStartupCheck(In := TRUE, PT := _timUnitStartupWaitTime);
// After some time, check if all values are ok
IF _tonStartupCheck.Q THEN
// Check for minimum unit voltage
IF _fbVoltageSegment.rScaledValue >= GVL_CONFIG.rMinimumUnitVoltage AND
NOT _xErrorActive AND
NOT _xWarningActive THEN
xReady := TRUE;
_iState := 35;
ELSE
_iState := 40;
END_IF
END_IF
// If enable signal is lost, goto shutdown
IF (NOT xEnable) OR _xErrorActive THEN
_iState := 40;
END_IF
35: // Unit in enabled state
IF (NOT xEnable) OR _xErrorActive THEN
_iState := 40;
END_IF
40: // Close all valves
_fbNegolytValveTankOutlet.ReqAutomaticClose();
_fbPosolytValveTankOutlet.ReqAutomaticClose();
_iState := 45;
45: // Wait for valves to be closed
IF _fbNegolytValveTankOutlet.IsClosed AND _fbPosolytValveTankOutlet.IsClosed THEN
_iState := 50;
END_IF
// When there is an error trying to close the valves,
// dont try to discharge the segment
IF _fbNegolytValveTankOutlet.xError OR _fbPosolytValveTankOutlet.xError THEN
_iState := 60;
END_IF
// Check for restart condition
IF xEnable AND (NOT _xErrorActive) THEN
_iState := 0;
END_IF
50: // Wait for unit voltage to drop below a certain threshold
IF (_fbVoltageSegment.rScaledValue <= GVL_CONFIG.rPumpshutoffThreshold) THEN
_iState := 60;
END_IF
// Check for restart condition
IF xEnable AND (NOT _xErrorActive) THEN
_iState := 0;
END_IF
60: // Disable pumps
_fbPosolytPumpInlet.ReqAutomaticStop();
_fbNegolytPumpInlet.ReqAutomaticStop();
_iState := 65;
65: // Wait for pumps to be stopped
IF _fbPosolytPumpInlet.IsStopped AND _fbNegolytPumpInlet.IsStopped THEN
IF _xErrorActive THEN
_iState := 1000;
ELSE
_iState := 0;
END_IF
END_IF
// Check for restart condition
IF xEnable AND (NOT _xErrorActive) THEN
_iState := 0;
END_IF
1000: // Alarm active
// Only allow reset when enable is deactivated to avoid an
// automatic restart of the unit
IF (NOT _xErrorActive) AND (NOT xEnable) THEN
_iState := 0;
END_IF
END_CASE
// ===============================
// Output error and warning flags
// ===============================
xError := _xErrorActive;
xWarning := _xWarningActive;]]></ST>
</Implementation>
<Method Name="FB_init" Id="{08f1cd44-6483-4d20-ab45-d1938e8ec885}">
<Declaration><![CDATA[METHOD FB_init : BOOL
VAR_INPUT
bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
bInCopyCode : BOOL; // if TRUE, the instance afterwards gets moved into the copy code (online change)
sName : STRING;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_sName := sName;
_fbNotAllAutomaticAlarm.CreateEx(TC_EVENTS.General.NotAllCompInAutomatic, bWithConfirmation := FALSE, 0);
_fbNotAllAutomaticAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
</Implementation>
</Method>
<LineIds Name="FB_Unit">
<LineId Id="4232" Count="29" />
<LineId Id="4584" Count="0" />
<LineId Id="4263" Count="102" />
<LineId Id="4619" Count="0" />
<LineId Id="4367" Count="46" />
<LineId Id="4621" Count="22" />
<LineId Id="4620" Count="0" />
<LineId Id="4644" Count="1" />
<LineId Id="4414" Count="0" />
<LineId Id="4647" Count="0" />
<LineId Id="4646" Count="0" />
<LineId Id="4416" Count="17" />
<LineId Id="4444" Count="26" />
<LineId Id="4476" Count="33" />
<LineId Id="4511" Count="17" />
<LineId Id="4653" Count="0" />
<LineId Id="4655" Count="2" />
<LineId Id="4654" Count="0" />
<LineId Id="4529" Count="4" />
<LineId Id="4658" Count="0" />
<LineId Id="4660" Count="2" />
<LineId Id="4659" Count="0" />
<LineId Id="4569" Count="0" />
<LineId Id="4535" Count="12" />
<LineId Id="4663" Count="0" />
<LineId Id="4665" Count="2" />
<LineId Id="4664" Count="0" />
<LineId Id="4548" Count="6" />
<LineId Id="4556" Count="6" />
<LineId Id="2754" Count="0" />
</LineIds>
<LineIds Name="FB_Unit.FB_init">
<LineId Id="11" Count="1" />
<LineId Id="7" Count="1" />
</LineIds>
</POU>
</TcPlcObject>

28
PLC/POUs/MAIN.TcPOU Normal file
View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="MAIN" Id="{bbd7302c-91ce-4697-9f4b-743f57ca5819}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM MAIN
VAR
_xEmergencyStopOk AT %I* : BOOL;
_xReleaseErrors : BOOL;
_xReleaseLimitsErrors : BOOL;
_xConfirmAlarms : BOOL;
_fbString : FB_String('String 1');
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_fbString(
stHMIInterface:= ,
xEmergencyStopOk:= _xEmergencyStopOk,
xReleaseErrors:= _xReleaseErrors,
xReleaseLimitErrors:= _xReleaseLimitsErrors,
xConfirmAlarms:= _xConfirmAlarms,
xError=> ,
xWarning=> );]]></ST>
</Implementation>
<LineIds Name="MAIN">
<LineId Id="7" Count="6" />
<LineId Id="2" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,628 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="FB_PowerSupplySunspec" Id="{a826dd09-442c-45c5-8ae3-9b71f293003c}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_PowerSupplySunspec
VAR_INPUT
sInverterIPAddr : STRING;
xEnable : BOOL;
rPower : REAL;
xReset : BOOL;
rMaxBattPower : REAL := 24_000; // 24kW
END_VAR
VAR_OUTPUT
xCloseDCRelais AT %Q*: BOOL;
rActDCCurrent : REAL;
rActDCVoltage : REAL;
xError : BOOL;
xActive : BOOL;
END_VAR
VAR
// Current state
_iState : INT := 0;
// FB for reading Modbus holding registers
_fbReadRegister : FB_MBReadRegs;
// FB for writing Modbus holding registers
_fbWriteRegister : FB_MBWriteRegs;
// Timer for checking if the inverter started in a reasonable amount of time
_tonInverterStartup : TON;
// converter max power scaling factor
_iWMaxSF : INT;
// Unscaled converter max power
_iWMax : UINT;
// Scaled converter max power
_rWMax : REAL;
// Unscaled limit for converter power
_iWMaxLimPct : INT;
// Scaling factor for power limiting
_iWMaxLimPctSF : INT;
// Unscaled maximum power from type label
_iWRTGSF : INT;
// Scaling for maximum power from type label
_rWRTGScaling : REAL;
// Current state of the inverters internal statemachine
_uiInverterState : UINT;
// Last written power to the inverter
_rOldPower : REAL;
// Value to enable or dissable the Power limiting feature
_uiMaxLimEn : UINT;
// Value for commanding the target state of the inverter
_uiPCSSetOperation : UINT;
// Holds the state number in which an error occured
_iErrorInState : INT;
// Time for polling for current dc values and check for inverter error
_timPollingDelay : TIME := T#250MS;
// Timer for polling of current values
_tonPollingTimer : TON;
// Current DC values (DCA, DCA_SF, DCV, DCV_SF) in word array for efficient modbus reading
_awCurrentDCValues : ARRAY[0..3] OF WORD;
// Inverter error bits
_dwErrorBits : DWORD;
// Inverter reset errors command
_uiResetInverter : UINT := 1;
END_VAR
VAR CONSTANT
// Inverter statemachine status register
// Size 1, enum16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
STATUS_REGISTER : WORD := 40108;
// Throttled power register
// Size 1, int16 (Range = -32767 .. 32767, Not implemented 0x8000)
W_MAX_LIM_PCT_REGISTER : WORD := 40187;
// Throttled power register scaling factor
// Size 1, sunssf (int16) (Range = -10 .. 10, Not implemented 0x8000)
W_MAX_LIM_PCT_SF_REGISTER : WORD := 40205;
// Control register to enable and dissable if the power throttleing should be active
// Size1, enum16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
W_MAX_LIM_EN_REGISTER : WORD := 40191;
// Register to reset latched alarms in the inverter
// Size 1, uint16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
PCS_ALARM_RESET_REGISTER : WORD := 40230;
// Control register to set the target state of the inverters state machine
// Size 1, enum16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
PCS_SET_OPERATION_REGISTER : WORD := 40231;
// Maximum inverter output power
// Size 1, uint16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
W_MAX_REGISTER : WORD := 40152;
// Maximum inverter output power scaling factor
// Size 1, sunssf (int16) (Range = -10 .. 10, Not implemented 0x8000)
W_MAX_SF_REGISTER : WORD := 40172;
// Maximum inverter output power from type label
// Size 1, uint16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
W_RTG_REGISTER : WORD := 40125;
// Maximum inverter output power from type label scaling factor
// Size 1, sunssf (int16) (Range = -10 .. 10, Not implemented 0x8000)
W_RTG_SF_REGISTER : WORD := 40126;
// Start of register with the current dc values
// Size 4
DC_VALUES_START_REGISTER : WORD := 40097;
// Error bits register
// Size 2
EVT_1_REGISTER : WORD := 40110;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Clamp rPower to maximum allowed power
IF (rPower > rMaxBattPower) THEN
rPower := rMaxBattPower;
END_IF
IF (rPower < -rMaxBattPower) THEN
rPower := -rMaxBattPower;
END_IF
// State machine
CASE _iState OF
0: // Off
// If enable and INTLK Ok
IF xEnable THEN
_iState := 10;
xCloseDCRelais := TRUE;
END_IF
10: // Wait for inverter to be online and in state STANDBY(8)
_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= STATUS_REGISTER,
cbLength:= SIZEOF(_uiInverterState),
pDestAddr:= ADR(_uiInverterState),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
// Check if reading mudbus register is done
IF NOT _fbReadRegister.bBusy THEN
// If there was no error and the state is STANDBY(8) then continue
IF NOT _fbReadRegister.bError AND _uiInverterState = 8 THEN
_iState := 20;
END_IF
_fbReadRegister(bExecute := FALSE);
END_IF
20: // Read inverter max power scaling
_iErrorInState := _iState;
_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= W_MAX_SF_REGISTER,
cbLength:= SIZEOF(_iWMaxSF),
pDestAddr:= ADR(_iWMaxSF),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
// Check if reading mudbus register is done
IF NOT _fbReadRegister.bBusy THEN
// If there was no error then continue
IF NOT _fbReadRegister.bError THEN
_iState := 25;
// Check for valid value
IF (_iWMaxSF < -10) OR (_iWMaxSF > 10) OR (_iWMaxSF = 16#8000) THEN
// Goto error state
_iState := 1000;
END_IF
ELSE
xError := TRUE;
// Goto error state
_iState := 1000;
END_IF
_fbReadRegister(bExecute := FALSE);
END_IF
25: // Read inverter Max power limit scaling
_iErrorInState := _iState;
_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= W_MAX_LIM_PCT_SF_REGISTER,
cbLength:= SIZEOF(_iWMaxLimPctSF),
pDestAddr:= ADR(_iWMaxLimPctSF),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
// Check if reading mudbus register is done
IF NOT _fbReadRegister.bBusy THEN
// If there was no error then continue
IF NOT _fbReadRegister.bError THEN
_iState := 30;
// Check for valid value
IF (_iWMaxLimPctSF < -10) OR (_iWMaxLimPctSF > 10) OR (_iWMaxLimPctSF = 16#8000) THEN
// Goto error state
_iState := 1000;
END_IF
ELSE
xError := TRUE;
// Goto error state
_iState := 1000;
END_IF
_fbReadRegister(bExecute := FALSE);
END_IF
30: // Read inverter max power
_iErrorInState := _iState;
_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= W_MAX_REGISTER,
cbLength:= SIZEOF(_iWMax),
pDestAddr:= ADR(_iWMax),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
// Check if reading mudbus register is done
IF NOT _fbReadRegister.bBusy THEN
// If there was no error then continue
IF NOT _fbReadRegister.bError THEN
_iState := 40;
// Reading a register with scaling factor = value * 10^SF
_rWMax := _iWMax * EXPT(10,_iWMaxSF);
// Calculate power to write to register
_iWMaxLimPct := LREAL_TO_INT(rPower * EXPT(10,_iWMaxLimPctSF) / _rWMax);
ELSE
xError := TRUE;
// Goto error state
_iState := 1000;
END_IF
_fbReadRegister(bExecute := FALSE);
END_IF
40: // Set power limit
_iErrorInState := _iState;
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= W_MAX_LIM_PCT_REGISTER,
cbLength:= SIZEOF(_iWMaxLimPct),
pSrcAddr:= ADR(_iWMaxLimPct),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> );
// If writing modbus register is done
IF NOT _fbWriteRegister.bBusy THEN
// And there is no error, then continue
IF NOT _fbWriteRegister.bError THEN
_iState := 50;
_rOldPower := rPower;
_uiMaxLimEn := 1;
ELSE
xError := TRUE;
// Goto error state
_iState := 1000;
END_IF
_fbWriteRegister(bExecute := FALSE);
END_IF
50: // Enable Power limiting (THROTTLED)
_iErrorInState := _iState;
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= W_MAX_LIM_EN_REGISTER,
cbLength:= SIZEOF(_uiMaxLimEn),
pSrcAddr:= ADR(_uiMaxLimEn),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> );
// If writing modbus register is done
IF NOT _fbWriteRegister.bBusy THEN
// And there is no error, then continue
IF NOT _fbWriteRegister.bError THEN
_iState := 60;
_uiPCSSetOperation := 1;
ELSE
xError := TRUE;
// Goto error state
_iState := 1000;
END_IF
_fbWriteRegister(bExecute := FALSE);
END_IF
60: // Switch to THROTTLED mode
_iErrorInState := _iState;
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= PCS_SET_OPERATION_REGISTER,
cbLength:= SIZEOF(_uiPCSSetOperation),
pSrcAddr:= ADR(_uiPCSSetOperation),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> );
// If writing modbus register is done
IF NOT _fbWriteRegister.bBusy THEN
// And there is no error, then continue
IF NOT _fbWriteRegister.bError THEN
_iState := 65;
ELSE
// Goto error state
_iState := 1000;
END_IF
_fbWriteRegister(bExecute := FALSE);
END_IF
65: // Wait for error polling timer
_tonPollingTimer(IN := TRUE, PT := _timPollingDelay);
IF _tonPollingTimer.Q THEN
_tonPollingTimer(IN := FALSE);
_iState := 70;
ELSIF ABS(rPower - _rOldPower) > 0.1 THEN
_tonPollingTimer(IN := FALSE);
// If power has ben changed, goto set power limit mode
_iState := 40;
END_IF
// check if inverter should shut down
IF NOT xEnable THEN
_uiPCSSetOperation := 3;
// Goto shutdown sequence
_iState := 200;
END_IF
70: // Enabled, check for error
_iErrorInState := _iState;
_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= STATUS_REGISTER,
cbLength:= SIZEOF(_uiInverterState),
pDestAddr:= ADR(_uiInverterState),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
// Check if reading mudbus register is done
IF NOT _fbReadRegister.bBusy THEN
// If there was no error and the converter has no error continue
IF NOT _fbReadRegister.bError AND (_uiInverterState <> 7) THEN
_iState := 80;
IF (_uiInverterState = 4) OR (_uiInverterState = 5) THEN
xActive := TRUE;
ELSE
xActive := FALSE;
END_IF
ELSE
xError := TRUE;
// Read error register
_iState := 990;
END_IF
_fbReadRegister(bExecute := FALSE);
END_IF
80: // Read current DC values
_iErrorInState := _iState;
_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 4,
nMBAddr:= DC_VALUES_START_REGISTER,
cbLength:= SIZEOF(_awCurrentDCValues),
pDestAddr:= ADR(_awCurrentDCValues),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
// Check if reading mudbus register is done
IF NOT _fbReadRegister.bBusy THEN
// If there was no error and the converter has no error continue
IF NOT _fbReadRegister.bError THEN
_iState := 65;
rActDCCurrent := WORD_TO_UINT(_awCurrentDCValues[0]) * EXPT(10,WORD_TO_INT(_awCurrentDCValues[1]));
rActDCVoltage := WORD_TO_UINT(_awCurrentDCValues[2]) * EXPT(10,WORD_TO_INT(_awCurrentDCValues[3]));
ELSE
// Read error register
_iState := 1000;
END_IF
_fbReadRegister(bExecute := FALSE);
END_IF
200: // Shutdown sequence
_iErrorInState := _iState;
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= PCS_SET_OPERATION_REGISTER,
cbLength:= SIZEOF(_uiPCSSetOperation),
pSrcAddr:= ADR(_uiPCSSetOperation),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> );
// If writing modbus register is done
IF NOT _fbWriteRegister.bBusy THEN
// And there is no error, then continue
IF NOT _fbWriteRegister.bError THEN
_iState := 210;
rActDCCurrent := 0.0;
rActDCVoltage := 0.0;
ELSE
// Goto error state
_iState := 1000;
END_IF
_fbWriteRegister(bExecute := FALSE);
END_IF
210: // Wait for poll timer to
_tonPollingTimer(IN := TRUE, PT := _timPollingDelay);
IF _tonPollingTimer.Q THEN
_tonPollingTimer(IN := FALSE);
_iState := 220;
END_IF
220: // Poll and wait for standby state
_iErrorInState := _iState;
_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= STATUS_REGISTER,
cbLength:= SIZEOF(_uiInverterState),
pDestAddr:= ADR(_uiInverterState),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
// Check if reading mudbus register is done
IF NOT _fbReadRegister.bBusy THEN
// If there was no error and the converter has no error continue
IF NOT _fbReadRegister.bError THEN
_iState := 0;
xActive := FALSE;
xCloseDCRelais := FALSE;
END_IF
_fbReadRegister(bExecute := FALSE);
END_IF
990: // Read error register
_iErrorInState := _iState;
_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 2,
nMBAddr:= EVT_1_REGISTER,
cbLength:= SIZEOF(_dwErrorBits),
pDestAddr:= ADR(_dwErrorBits),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
// Check if reading mudbus register is done
IF NOT _fbReadRegister.bBusy THEN
// If there was no error and the converter has no error continue
IF NOT _fbReadRegister.bError THEN
_iState := 1000;
END_IF
_fbReadRegister(bExecute := FALSE);
END_IF
1000: // Error state, wait for reset
IF xReset AND (NOT xEnable) THEN
_iState := 1010;
END_IF
1010: // Try to clear all latched events
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= PCS_ALARM_RESET_REGISTER,
cbLength:= SIZEOF(_uiResetInverter),
pSrcAddr:= ADR(_uiResetInverter),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> );
IF NOT _fbWriteRegister.bBusy THEN
_iState := 0;
_fbWriteRegister(bExecute := FALSE);
END_IF
END_CASE]]></ST>
</Implementation>
<LineIds Name="FB_PowerSupplySunspec">
<LineId Id="774" Count="70" />
<LineId Id="1171" Count="0" />
<LineId Id="845" Count="33" />
<LineId Id="1172" Count="0" />
<LineId Id="879" Count="33" />
<LineId Id="1173" Count="0" />
<LineId Id="913" Count="29" />
<LineId Id="1174" Count="0" />
<LineId Id="943" Count="28" />
<LineId Id="1175" Count="0" />
<LineId Id="972" Count="46" />
<LineId Id="1127" Count="0" />
<LineId Id="1019" Count="25" />
<LineId Id="1097" Count="1" />
<LineId Id="1100" Count="1" />
<LineId Id="1099" Count="0" />
<LineId Id="1045" Count="0" />
<LineId Id="1176" Count="0" />
<LineId Id="1046" Count="6" />
<LineId Id="1063" Count="20" />
<LineId Id="1090" Count="0" />
<LineId Id="1092" Count="0" />
<LineId Id="1084" Count="4" />
<LineId Id="1062" Count="0" />
<LineId Id="1093" Count="1" />
<LineId Id="1102" Count="19" />
<LineId Id="1166" Count="1" />
<LineId Id="1122" Count="4" />
<LineId Id="1054" Count="0" />
<LineId Id="1295" Count="4" />
<LineId Id="1128" Count="0" />
<LineId Id="1300" Count="1" />
<LineId Id="1129" Count="0" />
<LineId Id="1132" Count="20" />
<LineId Id="1163" Count="0" />
<LineId Id="1294" Count="0" />
<LineId Id="1161" Count="1" />
<LineId Id="1130" Count="1" />
<LineId Id="1055" Count="0" />
<LineId Id="1177" Count="20" />
<LineId Id="1199" Count="1" />
<LineId Id="1169" Count="0" />
<LineId Id="1265" Count="2" />
<LineId Id="1269" Count="3" />
<LineId Id="1274" Count="11" />
<LineId Id="1273" Count="0" />
<LineId Id="1289" Count="1" />
<LineId Id="1293" Count="0" />
<LineId Id="1291" Count="1" />
<LineId Id="1056" Count="0" />
<LineId Id="12" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="U_SUNSPEC_ERROR" Id="{4000836c-9d7f-470c-9b50-f6d22b3eac05}">
<Declaration><![CDATA[TYPE U_SUNSPEC_ERROR :
UNION
xGroundFault : BOOL;
xDCOverVoltage : BOOL;
xACDisconnected : BOOL;
xDCDisconnected : BOOL;
xGridDisconnected : BOOL;
xCabinetOpen : BOOL;
xManualShutdown : BOOL;
xOverTemp : BOOL;
xOverFrequency : BOOL;
xUnderFrequency : BOOL;
xACOverVoltage : BOOL;
xACUnderVoltage : BOOL;
xBlownStringFuse : BOOL;
xUnderTemp : BOOL;
xMemoryLoss : BOOL;
xHWTestFailure : BOOL;
xOtherAlarm : BOOL;
xOtherWarning : BOOL;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

17
PLC/PlcTask.TcTTO Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<Task Name="PlcTask" Id="{13b7271a-7fe7-45e4-a613-10870835774e}">
<!--CycleTime in micro seconds.-->
<CycleTime>10000</CycleTime>
<Priority>20</Priority>
<PouCall>
<Name>MAIN</Name>
</PouCall>
<TaskFBGuid>{ffdacf88-4402-4cda-9656-2a188e28ec71}</TaskFBGuid>
<Fb_init>{0eaf59ea-61db-47c0-9b16-500c1d3c6c82}</Fb_init>
<Fb_exit>{f41aba84-dc9f-4b62-bb12-30d3e8314fa6}</Fb_exit>
<CycleUpdate>{347af9e1-a730-412d-bdd1-dba423bbf20a}</CycleUpdate>
<PostCycleUpdate>{10f1bd59-1481-4492-b627-08c962a0f93d}</PostCycleUpdate>
<ObjectProperties />
</Task>
</TcPlcObject>

Binary file not shown.

View 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
View 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">"&lt;ProjectRoot&gt;"</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

File diff suppressed because one or more lines are too long

View File

@@ -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>

View 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
View 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>

View 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>

View 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>

View 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
View 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>

2
README.md Normal file
View File

@@ -0,0 +1,2 @@
# UniBlu
Beckhoff SPS-Projekt für das [UniBlu-Projekt](https://cmblu.sharepoint.com/SitePages/Projekt--UniBlu-.aspx). Dokumentation erfolgt über das [CMBlu Wiki](https://wiki.blu.net/de/Customer-Projects/UniBlu).

74
Safety/Safety.splcproj Normal file
View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Crc="248407939" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{3f028238-46cf-458c-8df3-e9a8faa6af8b}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>TwinCAT3SafePlcProject</RootNamespace>
<AssemblyName>TwinCAT3SafePlcProject</AssemblyName>
<FileUpgradeFlags />
<UpgradeBackupLocation />
<OldToolsVersion>2.0</OldToolsVersion>
<TargetSystem>EL6900</TargetSystem>
<ProgrammingLanguage>Graphical Editor</ProgrammingLanguage>
<Worker>matthias.heisig</Worker>
<IntProjName>Safety</IntProjName>
<IsNewCreated>false</IsNewCreated>
<SPlcProjVersion>1.7.0.0</SPlcProjVersion>
<NextSdsId>17</NextSdsId>
<DocuEditor>m.heisig</DocuEditor>
<PlotDate>2023-12-08</PlotDate>
<CompanyName>cmblu Energy AG</CompanyName>
<CompanyLogo>cmblu Energy AG</CompanyLogo>
<FbPerPage>0</FbPerPage>
<AddUserAdministrationPages>False</AddUserAdministrationPages>
<AddProjectVersionHistoryPages>False</AddProjectVersionHistoryPages>
<AddCustomPages>False</AddCustomPages>
<TextBox />
<AddMultiSettingDocuments>False</AddMultiSettingDocuments>
<AddHashValueTablePages>False</AddHashValueTablePages>
<SafeAddressVerification>ProjectWideUnique</SafeAddressVerification>
<FbInPortActivationVerification>Strict</FbInPortActivationVerification>
<AliasDeviceAutoLinkingVerification>MismatchAsError</AliasDeviceAutoLinkingVerification>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>false</DebugSymbols>
<OutputPath>bin\Release\</OutputPath>
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<None Include="TwinSafeGroup1\Alias Devices\EL1904, 4 digital inputs_1.sds" />
<None Include="TwinSafeGroup1\Alias Devices\EL2904, 4 digital outputs_1.sds" />
<None Include="TwinSafeGroup1\Alias Devices\EL3124-0090 4Ch_ Ana_ Input 4-20mA Diff_, TwinSAFE SC_1.sds" />
<None Include="TwinSafeGroup1\Alias Devices\EL5021-0090 1Ch_ Sin_Cos Encoder, TwinSAFE SC_1.sds" />
<None Include="TwinSafeGroup1\Alias Devices\iSpeedPumpA.sds" />
<None Include="TwinSafeGroup1\Alias Devices\xResetEStop.sds" />
<None Include="TwinSafeGroup1\TwinSafeGroup1.sal" />
<None Include="TwinSafeGroup1\TwinSafeGroup1.sal.diagram">
<DependentUpon>TwinSafeGroup1\TwinSafeGroup1.sal</DependentUpon>
<Visible>false</Visible>
</None>
<None Include="TargetSystemConfig.xml">
<Visible>false</Visible>
</None>
<None Include="User FBs\AlwaysTrue.ufb" />
<None Include="User FBs\AlwaysTrue.ufb.diagram">
<Visible>false</Visible>
<DependentUpon>User FBs\AlwaysTrue.ufb</DependentUpon>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="GVLs" />
<Folder Include="TwinSafeGroup1" />
<Folder Include="TwinSafeGroup1\Alias Devices" />
<Folder Include="User FBs" />
<None Include="TwinSafeGroup1\Alias Devices\ErrorAcknowledgement.sds" />
</ItemGroup>
<ProjectExtensions>
<DocumentationProperty>
<ProjectVersionHistories />
</DocumentationProperty>
</ProjectExtensions>
</Project>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<TargetSystemConfig Crc="2771479752" Version="1.5">
<TargetSystemType>HSafetyPLC</TargetSystemType>
<TargetSystemSubType>EL6910</TargetSystemSubType>
<IsExternalDevice>false</IsExternalDevice>
<TargetSystemObjectId />
<TargetSystemObjectName />
<SoftwareVersion />
<SerialNumber />
<ProjectCRC />
<MapProjectCRC>false</MapProjectCRC>
<MapSerialNumber>false</MapSerialNumber>
<VersionNumber>1</VersionNumber>
<FSOEAddress>1</FSOEAddress>
<DipSwitch />
<AmsNetID />
<AmsPort />
<ConnectionInfoDataConfigOld>false</ConnectionInfoDataConfigOld>
<TakeOverSafetyAliasDeviceNamesInProcessImage>false</TakeOverSafetyAliasDeviceNamesInProcessImage>
<TakeOverStandardAliasDeviceNamesInProcessImage>false</TakeOverStandardAliasDeviceNamesInProcessImage>
<BackupRestore Needed="0" Activated="false" RestoreUserAdministration="false" />
</TargetSystemConfig>

View File

@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="706303120" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>4</Type>
<SubType>190</SubType>
<VendorId>2</VendorId>
</AliasDeviceType>
<SDSID>2</SDSID>
<SafetyAliasDevice>
<ObjectId>50921475</ObjectId>
<LinkingMode>Automatic</LinkingMode>
<ConnectionId>2</ConnectionId>
<ConnectionMode>master</ConnectionMode>
<ConnectionType>FSoE</ConnectionType>
<MapDiag>false</MapDiag>
<MapInputs>false</MapInputs>
<MapOutputs>false</MapOutputs>
<MapState>false</MapState>
<ModuleFaultIsComErr>false</ModuleFaultIsComErr>
<SafeAddress>2</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Params>
<Param Index="4320" SubIndex="1">0000</Param>
<Param Index="4320" SubIndex="2">0000</Param>
<Param Index="32768" SubIndex="1">0000</Param>
<Param Index="32769" SubIndex="1">01</Param>
<Param Index="32769" SubIndex="2">01</Param>
<Param Index="32769" SubIndex="3">01</Param>
<Param Index="32769" SubIndex="4">01</Param>
<Param Index="32770" SubIndex="1">00</Param>
<Param Index="32770" SubIndex="3">00</Param>
<Messages>
<IO>
<Name>FSoE Master CMD</Name>
<Index>28672</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name />
<Index>0</Index>
<SubIndex>0</SubIndex>
<DataType />
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>FSoE Master CRC_0</Name>
<Index>28672</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Master ConnID</Name>
<Index>28672</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave CMD</Name>
<Index>24576</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>InputChannel1</Name>
<Index>24577</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>InputChannel2</Name>
<Index>24577</Index>
<SubIndex>2</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>InputChannel3</Name>
<Index>24577</Index>
<SubIndex>3</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>InputChannel4</Name>
<Index>24577</Index>
<SubIndex>4</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name />
<Index>0</Index>
<SubIndex>0</SubIndex>
<DataType />
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>4</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave CRC_0</Name>
<Index>24576</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave ConnID</Name>
<Index>24576</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
</Messages>
</Params>
</SafetyAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="3021705149" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>4</Type>
<SubType>290</SubType>
<VendorId>2</VendorId>
</AliasDeviceType>
<SDSID>3</SDSID>
<SafetyAliasDevice>
<ObjectId>50921473</ObjectId>
<LinkingMode>Automatic</LinkingMode>
<ConnectionId>3</ConnectionId>
<ConnectionMode>master</ConnectionMode>
<ConnectionType>FSoE</ConnectionType>
<MapDiag>false</MapDiag>
<MapInputs>false</MapInputs>
<MapOutputs>false</MapOutputs>
<MapState>false</MapState>
<ModuleFaultIsComErr>false</ModuleFaultIsComErr>
<SafeAddress>3</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Params>
<Param Index="4320" SubIndex="1">0000</Param>
<Param Index="4320" SubIndex="2">0000</Param>
<Param Index="32768" SubIndex="1">00</Param>
<Param Index="32768" SubIndex="2">01</Param>
<Param Index="32768" SubIndex="3">01</Param>
<Param Index="32768" SubIndex="4">00</Param>
<Messages>
<IO>
<Name>FSoE Master CMD</Name>
<Index>28672</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>OutputChannel1</Name>
<Index>28673</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>OutputChannel2</Name>
<Index>28673</Index>
<SubIndex>2</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>OutputChannel3</Name>
<Index>28673</Index>
<SubIndex>3</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>OutputChannel4</Name>
<Index>28673</Index>
<SubIndex>4</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name />
<Index>0</Index>
<SubIndex>0</SubIndex>
<DataType />
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>4</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>FSoE Master CRC_0</Name>
<Index>28672</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Master ConnID</Name>
<Index>28672</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave CMD</Name>
<Index>24576</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name />
<Index>0</Index>
<SubIndex>0</SubIndex>
<DataType />
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave CRC_0</Name>
<Index>24576</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave ConnID</Name>
<Index>24576</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
</Messages>
</Params>
</SafetyAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,200 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="3754304071" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>4</Type>
<SubType>3124</SubType>
<VendorId>2</VendorId>
</AliasDeviceType>
<SDSID>16</SDSID>
<SafetyAliasDevice>
<ObjectId>0</ObjectId>
<LinkingMode>Automatic</LinkingMode>
<ConnectionId>16</ConnectionId>
<ConnectionMode>master</ConnectionMode>
<ConnectionType>TwinSafeScCrc1</ConnectionType>
<MapDiag>false</MapDiag>
<MapInputs>false</MapInputs>
<MapOutputs>false</MapOutputs>
<MapState>false</MapState>
<ModuleFaultIsComErr>false</ModuleFaultIsComErr>
<SafeAddress>0</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Params>
<Param Index="5632" SubIndex="0">04</Param>
<Param Index="5632" SubIndex="1">08014070</Param>
<Param Index="5632" SubIndex="2">08000000</Param>
<Param Index="5632" SubIndex="3">10034070</Param>
<Param Index="5632" SubIndex="4">10024070</Param>
<Param Index="6664" SubIndex="0">0A</Param>
<Param Index="6664" SubIndex="1">08014060</Param>
<Param Index="6664" SubIndex="2">10110060</Param>
<Param Index="6664" SubIndex="3">10034060</Param>
<Param Index="6664" SubIndex="4">10111060</Param>
<Param Index="6664" SubIndex="5">10044060</Param>
<Param Index="6664" SubIndex="6">10112060</Param>
<Param Index="6664" SubIndex="7">10054060</Param>
<Param Index="6664" SubIndex="8">10113060</Param>
<Param Index="6664" SubIndex="9">10064060</Param>
<Param Index="6664" SubIndex="10">10024060</Param>
<Param Index="32832" SubIndex="1">0000</Param>
<Param Index="32832" SubIndex="2">00000000</Param>
<Messages>
<IO>
<Name>Master Cmd</Name>
<Index>28736</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name />
<Index>0</Index>
<SubIndex>0</SubIndex>
<DataType />
<Direction>Out</Direction>
<SafetyType>SafetySil2</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>Master CRC_0</Name>
<Index>28736</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Master ConnID</Name>
<Index>28736</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Slave Cmd</Name>
<Index>24640</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>AI Module 1.Value</Name>
<Index>24576</Index>
<SubIndex>17</SubIndex>
<DataType>INT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil2</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>Slave CRC_0</Name>
<Index>24640</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>24</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>AI Module 2.Value</Name>
<Index>24592</Index>
<SubIndex>17</SubIndex>
<DataType>INT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil2</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>40</BitOffsMessage>
<BitOffsData>16</BitOffsData>
</IO>
<IO>
<Name>Slave CRC_1</Name>
<Index>24640</Index>
<SubIndex>4</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>56</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>AI Module 3.Value</Name>
<Index>24608</Index>
<SubIndex>17</SubIndex>
<DataType>INT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil2</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>72</BitOffsMessage>
<BitOffsData>32</BitOffsData>
</IO>
<IO>
<Name>Slave CRC_2</Name>
<Index>24640</Index>
<SubIndex>5</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>88</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>AI Module 4.Value</Name>
<Index>24624</Index>
<SubIndex>17</SubIndex>
<DataType>INT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil2</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>104</BitOffsMessage>
<BitOffsData>48</BitOffsData>
</IO>
<IO>
<Name>Slave CRC_3</Name>
<Index>24640</Index>
<SubIndex>6</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>120</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Slave ConnID</Name>
<Index>24640</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>136</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
</Messages>
</Params>
</SafetyAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,186 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="952577547" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>4</Type>
<SubType>5021</SubType>
<VendorId>2</VendorId>
</AliasDeviceType>
<SDSID>14</SDSID>
<SafetyAliasDevice>
<ObjectId>50921476</ObjectId>
<LinkingMode>Automatic</LinkingMode>
<ConnectionId>14</ConnectionId>
<ConnectionMode>master</ConnectionMode>
<ConnectionType>TwinSafeScCrc1</ConnectionType>
<MapDiag>false</MapDiag>
<MapInputs>false</MapInputs>
<MapOutputs>false</MapOutputs>
<MapState>false</MapState>
<ModuleFaultIsComErr>false</ModuleFaultIsComErr>
<SafeAddress>4</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Params>
<Param Index="5648" SubIndex="0">04</Param>
<Param Index="5648" SubIndex="1">08011070</Param>
<Param Index="5648" SubIndex="2">08000000</Param>
<Param Index="5648" SubIndex="3">10031070</Param>
<Param Index="5648" SubIndex="4">10021070</Param>
<Param Index="6672" SubIndex="0">0A</Param>
<Param Index="6672" SubIndex="1">08011060</Param>
<Param Index="6672" SubIndex="2">10110060</Param>
<Param Index="6672" SubIndex="3">10031060</Param>
<Param Index="6672" SubIndex="4">10000000</Param>
<Param Index="6672" SubIndex="5">10041060</Param>
<Param Index="6672" SubIndex="6">101B0060</Param>
<Param Index="6672" SubIndex="7">10051060</Param>
<Param Index="6672" SubIndex="8">10000000</Param>
<Param Index="6672" SubIndex="9">10061060</Param>
<Param Index="6672" SubIndex="10">10021060</Param>
<Param Index="6672" SubIndex="11">00000000</Param>
<Param Index="6672" SubIndex="12">00000000</Param>
<Param Index="6672" SubIndex="13">00000000</Param>
<Param Index="6672" SubIndex="14">00000000</Param>
<Param Index="6672" SubIndex="15">00000000</Param>
<Param Index="6672" SubIndex="16">00000000</Param>
<Param Index="6672" SubIndex="17">00000000</Param>
<Param Index="6672" SubIndex="18">00000000</Param>
<Param Index="32784" SubIndex="1">0400</Param>
<Param Index="32784" SubIndex="2">01000000</Param>
<Messages>
<IO>
<Name>Master Cmd</Name>
<Index>28688</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name />
<Index>0</Index>
<SubIndex>0</SubIndex>
<DataType />
<Direction>Out</Direction>
<SafetyType>SafetySil2</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>Master CRC_0</Name>
<Index>28688</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Master ConnID</Name>
<Index>28688</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Slave Cmd</Name>
<Index>24592</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Counter value</Name>
<Index>24576</Index>
<SubIndex>17</SubIndex>
<DataType>UDINT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil2</SafetyType>
<BitSize>32</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>Slave CRC_0</Name>
<Index>24592</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>24</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Slave CRC_1</Name>
<Index>24592</Index>
<SubIndex>4</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>56</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Frequency value (int32)</Name>
<Index>24576</Index>
<SubIndex>27</SubIndex>
<DataType>DINT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil2</SafetyType>
<BitSize>32</BitSize>
<BitOffsMessage>72</BitOffsMessage>
<BitOffsData>32</BitOffsData>
</IO>
<IO>
<Name>Slave CRC_2</Name>
<Index>24592</Index>
<SubIndex>5</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>88</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Slave CRC_3</Name>
<Index>24592</Index>
<SubIndex>6</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>120</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Slave ConnID</Name>
<Index>24592</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>136</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
</Messages>
</Params>
</SafetyAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="879336946" FileFormatVersion="1.5">
<AliasDeviceType>
<Type>1</Type>
<SubType>1</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>1</SDSID>
<StandardAliasDevice>
<LinkingMode>Manual</LinkingMode>
<IO>
<Name>In</Name>
<BitOffsMessage>0</BitOffsMessage>
<DataType>BIT</DataType>
<BitSize>1</BitSize>
</IO>
</StandardAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="2589871646" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>1</Type>
<SubType>7</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>11</SDSID>
<StandardAliasDevice>
<LinkingMode>Manual</LinkingMode>
<IO>
<Name>In</Name>
<BitOffsMessage>0</BitOffsMessage>
<DataType>UINT</DataType>
<BitSize>16</BitSize>
</IO>
</StandardAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="1910572904" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>1</Type>
<SubType>1</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>7</SDSID>
<StandardAliasDevice>
<LinkingMode>Manual</LinkingMode>
<IO>
<Name>In</Name>
<BitOffsMessage>0</BitOffsMessage>
<DataType>BIT</DataType>
<BitSize>1</BitSize>
</IO>
</StandardAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,659 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplication Crc="3030095929" xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.4.0.0" Id="b3f318f7-44dd-4ebe-b7a5-aa804e6092b9" name="" mapState="false" mapDiag="false" groupOrderId="0" passificationAllowed="false" temporaryDeactivationAllowed="false" permamentDeactivationAllowed="false" xmlid="0" analogFBOutputReplacementValues="Zero" verifyAnalogFBInputsIfStart="false" userFbId="00000000-0000-0000-0000-000000000000" xmlns="http://schemas.microsoft.com/dsltools/SafetyApplicationLanguage">
<networks>
<safetyApplicationHasNetworks Id="8e558121-9215-4cf6-9a08-f88d55d28f6f">
<Network Id="11ae6bc0-d263-4532-813f-097c81fdac5f" name="Network21" networkName="Speed" intId="3" networkOrderId="0">
<functionBlocks>
<networkHasFunctionBlocks Id="3ee95eca-6c59-4820-8fd4-445cd24cca70">
<fBSpeed Id="d9fc0a8a-28b4-4186-8a59-6aeaa007f8d5" name="FBSpeed1" instanceName="FBSpeed1" orderOfExecution="1" mapState="false" mapDiag="false" functionName="safeSpeed">
<inPorts>
<functioBlockHasInPorts Id="3f440dea-524f-4933-bc5c-ce96c5dfe1a1">
<inPort Id="e8aec1d8-c4c2-4862-b43c-5e95ad806a09" name="Position" portName="Position" portNum="2" objectIndex="16" varId="1" filter="1974016" portDataType="4" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="102cadee-9fec-4a6a-8bf2-f05bde365499">
<outPort Id="54522b74-b598-43ef-9981-8f6470fc8b31" name="Error" portName="Error" portNum="3" objectIndex="0" varId="2" filter="73472" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="b94a54b0-6eeb-4e03-a9ab-86ab024233db">
<outPort Id="6f8da5a1-3478-474e-915c-441ff0a27a1c" name="Speed" portName="Speed" portNum="4" objectIndex="1" varId="3" filter="1974016" portDataType="2" replacementValue="0">
<targetFunctionBlockPorts>
<wiredLink Id="482441d8-539d-41b3-b700-f2b84a1569d6">
<inPortMoniker name="//Network21/FBCompare1/CompIn1" />
</wiredLink>
</targetFunctionBlockPorts>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
<parameterPorts>
<functionBlockHasParamPorts Id="a9a1fdc9-5d92-40b6-8ff5-b16a77dfae1e">
<parameterPort Id="3522b171-0523-4674-bc88-21e548b6fb39" name="Time Interval (ms)" portName="Time Interval (ms)" portNum="4" objectIndex="0" varId="0" filter="0" portDataType="0" timing="100" userFbPortName="Time Interval (ms)" useInUserFb="false" />
</functionBlockHasParamPorts>
</parameterPorts>
</fBSpeed>
</networkHasFunctionBlocks>
<networkHasFunctionBlocks Id="64686e91-9e8f-4493-b54e-c60c9c205c32">
<fBScaling Id="50099f61-e9dc-4c5f-840f-263d651f116c" name="FBScaling1" instanceName="FBScaling1" orderOfExecution="2" mapState="false" mapDiag="false" functionName="safeScaling">
<inPorts>
<functioBlockHasInPorts Id="6faafa7c-5bb9-4d1c-bb0b-a8cc6a969d73">
<inPort Id="7ac5d7bb-dc1d-4efd-ba9b-fa3f5a4af907" name="AnalogIn" portName="AnalogIn" portNum="3" objectIndex="16" varId="1" filter="1974016" portDataType="2" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="a40ad186-2653-4d6b-9ba8-2d1e50b68930">
<outPort Id="eeabb3dd-7623-4e12-b747-5811fd4c4adc" name="Error" portName="Error" portNum="3" objectIndex="0" varId="2" filter="73472" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="02bca269-d02a-4fd2-9aa4-6a178137023f">
<outPort Id="92763d12-8951-4ac9-acb2-f2f6b87ccad0" name="StuckAtError" portName="StuckAtError" portNum="4" objectIndex="1" varId="3" filter="73472" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="09d85545-19e5-4bde-b4ac-265e85f19be6">
<outPort Id="83615109-a464-4ec5-a5a6-5d6eacda6cff" name="AnalogOut" portName="AnalogOut" portNum="5" objectIndex="16" varId="4" filter="1974016" portDataType="2" replacementValue="0">
<targetFunctionBlockPorts>
<wiredLink Id="5922d18c-f030-4a6b-8f55-406ffd6fe56c">
<inPortMoniker name="//Network21/FBCompare1/CompIn2" />
</wiredLink>
</targetFunctionBlockPorts>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
<parameterPorts>
<functionBlockHasParamPorts Id="715a06fa-f4e8-4440-a9e5-7d10dbd24770">
<parameterPort Id="4a9a41f5-7965-4b9f-8261-a0f7d3b65d6e" name="Scaling Factor Multiplier" portNum="5" objectIndex="0" varId="0" filter="0" portDataType="0" timing="1" userFbPortName="Scaling Factor Multiplier" useInUserFb="false" />
</functionBlockHasParamPorts>
<functionBlockHasParamPorts Id="b2a4bae7-f0f9-4d62-886c-b3176b604640">
<parameterPort Id="4b3a5b08-fc2e-4f98-9b41-fcbfd9afa15d" name="Scaling Factor Divisor" portName="Scaling Factor" portNum="6" objectIndex="0" varId="0" filter="0" portDataType="0" timing="1" userFbPortName="Scaling Factor Divisor" useInUserFb="false" />
</functionBlockHasParamPorts>
<functionBlockHasParamPorts Id="87276ec4-9476-4711-8a41-d35cea304e4e">
<parameterPort Id="6523e3be-de88-4e60-87fa-45f1a92af431" name="Scaling Offset" portName="Scaling Offset" portNum="7" objectIndex="0" varId="0" filter="0" portDataType="0" timing="0" userFbPortName="Scaling Offset" useInUserFb="false" />
</functionBlockHasParamPorts>
<functionBlockHasParamPorts Id="2832703b-5a76-4f2d-af70-366384d587ad">
<parameterPort Id="74b5be91-5733-4792-881d-c8473734d32d" name="Watchdog (ms)" portName="Watchdog (ms)" portNum="8" objectIndex="0" varId="0" filter="0" portDataType="0" timing="0" userFbPortName="Watchdog (ms)" useInUserFb="false" />
</functionBlockHasParamPorts>
</parameterPorts>
</fBScaling>
</networkHasFunctionBlocks>
<networkHasFunctionBlocks Id="90f8acf5-329a-43bf-bc5c-1899e6480949">
<fBCompare Id="e7787ea6-111f-4b61-b27d-93874997e7d8" name="FBCompare1" instanceName="FBCompare1" orderOfExecution="3" mapState="false" mapDiag="false" functionName="safeCompare" compareMode="1">
<inPorts>
<functioBlockHasInPorts Id="455898f0-e22c-46db-b7c1-2066d7dcfa7d">
<inPort Id="2fa31ca6-fd7a-43a2-b928-30c3c0af03ad" name="CompIn1" portName="CompIn1" portNum="2" objectIndex="16" varId="1" filter="1974016" portDataType="2" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="c70bab8f-6363-4416-a466-edae99b67b76">
<inPort Id="6d9ca0d8-c959-4829-a09c-2012fb88d874" name="CompIn2" portName="CompIn2" portNum="3" objectIndex="17" varId="2" filter="1974016" portDataType="2" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="d30f1a03-e5b6-48d8-b1a9-5b4becbd24a3">
<inPort Id="2c71b282-1a63-4539-99e2-fe0331dae7b0" name="CompIn3" portName="CompIn3" portNum="4" objectIndex="18" varId="3" filter="1974016" portDataType="2" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="244910ae-6fb4-49ba-8b89-c6677e97ce28">
<inPort Id="e9d019fc-4f70-40e9-b6b9-a6e0cffbb649" name="CompIn4" portName="CompIn4" portNum="5" objectIndex="19" varId="4" filter="1974016" portDataType="2" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="950d11c3-15b7-4317-8c4a-d3041c176859">
<inPort Id="87205079-b160-4cdc-b67f-137ed8cb2ac6" name="CompIn5" portName="CompIn5" portNum="6" objectIndex="20" varId="5" filter="1974016" portDataType="2" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="39e2f843-4bf5-4e06-80cd-78e2c84ea93f">
<outPort Id="49b5592d-9381-459c-a9f9-5ef537f77dcf" name="Error" portName="Error" portNum="3" objectIndex="0" varId="6" filter="73472" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="c28160a5-8e0e-42da-827c-c9a9b32e0672">
<outPort Id="8f86e1f7-42ea-456c-8e86-115e6da5317b" name="IsValid" portName="IsValid" portNum="4" objectIndex="1" varId="7" filter="73472" portDataType="1" replacementValue="0">
<targetFunctionBlockPorts>
<wiredLink Id="f1538b15-a353-4670-b8a0-582bf63af946">
<inPortMoniker name="//Network21/FBOr1/OrIn1" />
</wiredLink>
</targetFunctionBlockPorts>
</outPort>
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="ff354865-57d6-48b4-9ad0-076677a32248">
<outPort Id="74737aa8-f5e8-4e26-81a7-e3d39b89bf52" name="CompOut" portName="CompOut" portNum="5" objectIndex="2" varId="8" filter="1974016" portDataType="2" replacementValue="0">
<targetFunctionBlockPorts>
<wiredLink Id="1e4f8e63-feb2-43e2-902f-adb5fe1d07c2">
<inPortMoniker name="//Network21/FBLimit1/AnalogIn" />
</wiredLink>
</targetFunctionBlockPorts>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
<parameterPorts>
<functionBlockHasParamPorts Id="12a5f33d-9013-4525-b129-e19aab100457">
<parameterPort Id="7b3fdbbc-2237-4113-8349-75b51681e2b3" name="Allowed deviation" portName="Allowed deviation" portNum="6" objectIndex="0" varId="0" filter="0" portDataType="0" timing="100" userFbPortName="Allowed deviation" useInUserFb="false" />
</functionBlockHasParamPorts>
<functionBlockHasParamPorts Id="3aef9891-f4b3-4b6b-9ed4-cb144b77bf40">
<parameterPort Id="803308d2-a9c8-41ac-8b5d-f78a8f189b5c" name="Tolerance time (ms)" portName="Tolerance time (ms)" portNum="7" objectIndex="0" varId="0" filter="0" portDataType="0" timing="500" userFbPortName="Tolerance time (ms)" useInUserFb="false" />
</functionBlockHasParamPorts>
</parameterPorts>
</fBCompare>
</networkHasFunctionBlocks>
<networkHasFunctionBlocks Id="657bf7a1-f660-461d-97e6-39b55aa0803b">
<fBLimit Id="67ca14f5-deda-418d-8273-94716a0637ed" name="FBLimit1" instanceName="FBLimit1" orderOfExecution="4" mapState="false" mapDiag="false" functionName="safeLimit">
<inPorts>
<functioBlockHasInPorts Id="7f217472-86c0-4d18-aa5e-0bf4928f808d">
<inPort Id="3aa75659-3322-4af4-8cff-f59c54d64fb9" name="AnalogIn" portName="AnalogIn" portNum="2" objectIndex="16" varId="1" filter="1974016" portDataType="2" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="a852d622-2fc5-44a9-86ce-d05d7a6cf14b">
<inPort Id="a0e6a728-43d8-4170-8e94-5761b19fc505" name="MinValue" portName="MinValue" portNum="3" objectIndex="17" varId="2" filter="1974016" portDataType="2" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="9444b6f9-1eee-4fe3-90fa-100f75aea9a9">
<inPort Id="2d52106c-0505-478d-be8d-53684d5ced52" name="MaxValue" portName="MaxValue" portNum="4" objectIndex="18" varId="3" filter="1974016" portDataType="2" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="69059b11-c933-4c60-b1fa-9d937891b0ac">
<outPort Id="130a5430-2001-4bc0-96f9-06325cb8bf2d" name="Error" portName="Error" portNum="2" objectIndex="0" varId="4" filter="73472" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="dd6f99bc-f648-4f44-8d0e-cb633b5b0b66">
<outPort Id="22c32434-13cc-4759-a7ba-750e3ddd6bbc" name="InLimit" portName="InLimit" portNum="3" objectIndex="1" varId="5" filter="73472" portDataType="1" replacementValue="0">
<targetFunctionBlockPorts>
<wiredLink Id="87c23819-4291-4102-a056-190d92a9b310">
<inPortMoniker name="//Network21/FBOr2/OrIn1" />
</wiredLink>
</targetFunctionBlockPorts>
</outPort>
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="2bf44404-144f-4dc0-8f65-f39f12563ae1">
<outPort Id="7171fc09-1ced-4b75-bea9-4c66fc0b85a9" name="BelowMin" portName="BelowMin" portNum="4" objectIndex="2" varId="6" filter="73472" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="1e9049cb-e925-4540-b504-c22686b4af21">
<outPort Id="63d64289-6ae3-41f8-ad8e-5a489407e3d8" name="AboveMax" portName="AboveMax" portNum="5" objectIndex="3" varId="7" filter="73472" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
</outPorts>
<parameterPorts>
<functionBlockHasParamPorts Id="2ecc7720-0f41-432f-9eae-9b5f7903abae">
<parameterPort Id="da8515e7-01a6-42bb-bd99-e3761c674b0b" name="Minimum Value" portName="Minimum Value" portNum="5" objectIndex="0" varId="0" filter="0" portDataType="0" timing="500" userFbPortName="Minimum Value" useInUserFb="false" />
</functionBlockHasParamPorts>
<functionBlockHasParamPorts Id="c8b45bf1-c7c8-4d01-b2e7-cd075d9f0f49">
<parameterPort Id="05030e73-3714-4f6a-a88d-5f5663c35259" name="Maximum Value" portName="Maximum Value" portNum="6" objectIndex="0" varId="0" filter="0" portDataType="0" timing="4000" userFbPortName="Maximum Value" useInUserFb="false" />
</functionBlockHasParamPorts>
</parameterPorts>
</fBLimit>
</networkHasFunctionBlocks>
<networkHasFunctionBlocks Id="51df3eb3-eeec-4af7-bf4f-4c26b4b0f20c">
<fBOr Id="0dfbf551-231c-4a61-ab08-8fae07cffe4a" name="FBOr1" instanceName="FBOr1" orderOfExecution="6" mapState="false" mapDiag="false" functionName="safeOr">
<inPorts>
<functioBlockHasInPorts Id="f5e80e98-829c-47bc-8d0f-806ba65cea70">
<inPort Id="765840d9-877a-4830-b52b-f87216954cac" name="OrIn1" portName="OrIn1" portNum="2" objectIndex="8" varId="2" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="f01d0abc-4092-43e0-b0c9-db32c27ad07c">
<inPort Id="e74f35e8-27ff-4fc6-8572-a52a1ad735ad" name="OrIn2" portName="OrIn2" portNum="3" objectIndex="9" varId="3" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="ceec7192-360d-43b7-8a03-01a9a908a9f7">
<inPort Id="8a905f22-8fac-4cea-bbcc-d0f762b028ee" name="OrIn3" portName="OrIn3" portNum="4" objectIndex="10" varId="4" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="c29c2828-5abf-486a-8371-6bd248b9d952">
<inPort Id="7d87c4f7-5cf7-424a-b4b6-176df109c264" name="OrIn4" portName="OrIn4" portNum="5" objectIndex="11" varId="5" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="6b2edcb2-5236-4b4d-acbc-ef10294768ed">
<inPort Id="53544d6c-92d2-4025-a8ee-270cde9c7ec8" name="OrIn5" portName="OrIn5" portNum="6" objectIndex="12" varId="6" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="7b966eed-93c5-4772-ae9e-2423db621108">
<inPort Id="2ffd728a-c482-4715-a69f-4c0b2aa27a18" name="OrIn6" portName="OrIn6" portNum="7" objectIndex="13" varId="7" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="e28f4616-2477-43c1-8e4e-54a4f891e3fe">
<inPort Id="412f146a-fd34-459f-b7dd-4a193370f46e" name="OrIn7" portName="OrIn7" portNum="8" objectIndex="14" varId="8" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="e02cdc2e-825e-4360-aa3b-0242e210c35f">
<inPort Id="3d7de4cd-7299-416c-a254-259f8d9ed0fc" name="OrIn8" portName="OrIn8" portNum="9" objectIndex="15" varId="9" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="1554ecc9-a3b2-42ff-a5bc-067765ff7a48">
<outPort Id="1494d3b5-cce7-466d-a45d-09c80aa38d25" name="OrOut" portName="OrOut" portNum="8" objectIndex="1" varId="20" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
</outPorts>
</fBOr>
</networkHasFunctionBlocks>
<networkHasFunctionBlocks Id="679eff9a-547a-480d-b671-afa704e65bb7">
<fBOr Id="53918bc6-8d80-4902-a0a4-f145b0fc229e" name="FBOr2" instanceName="FBOr2" orderOfExecution="5" mapState="false" mapDiag="false" functionName="safeOr">
<inPorts>
<functioBlockHasInPorts Id="07854633-a411-4808-a4d2-fe4ecb88ce2c">
<inPort Id="566466c3-7889-44a8-8e95-e119948ffcda" name="OrIn1" portName="OrIn1" portNum="2" objectIndex="8" varId="2" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="aea415df-1471-4bf5-9ac4-5d22878bf2c4">
<inPort Id="aa994dd0-2af5-4174-ab09-dec30efe6c12" name="OrIn2" portName="OrIn2" portNum="3" objectIndex="9" varId="3" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Make Contact (NO)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="6b7b76d9-ee0f-41ec-8081-f903796b7a45">
<inPort Id="1dc05aef-a383-44d2-b7a4-de0d008982d6" name="OrIn3" portName="OrIn3" portNum="4" objectIndex="10" varId="4" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="5233e88d-7d28-490e-a20d-ba15e8da8b99">
<inPort Id="609d4a13-65c2-4ca7-9cc3-e13b362d3f4d" name="OrIn4" portName="OrIn4" portNum="5" objectIndex="11" varId="5" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="80420b0c-3997-4b8a-baf2-fa903c18f7e2">
<inPort Id="672e7137-03fb-493b-ba6b-d83cf106763e" name="OrIn5" portName="OrIn5" portNum="6" objectIndex="12" varId="6" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="79f1fff8-4fbf-455b-a9fa-9858360d0457">
<inPort Id="a5489792-7ff2-4093-bc53-fbdd12680305" name="OrIn6" portName="OrIn6" portNum="7" objectIndex="13" varId="7" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="1be9574c-56cc-4a6c-b15c-a19a571831dd">
<inPort Id="0346f5b9-c8d6-406f-9e9f-3e756ce6346f" name="OrIn7" portName="OrIn7" portNum="8" objectIndex="14" varId="8" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="1e7ee10f-41d7-414c-8639-17c2ef7e4fed">
<inPort Id="e6a1e009-6d96-4a45-a6bb-347a6c8ee8d2" name="OrIn8" portName="OrIn8" portNum="9" objectIndex="15" varId="9" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="4a982935-0724-4d8e-a95e-e734db6bbea2">
<outPort Id="1ad371c1-8ecf-4194-bf56-c60e140a9d5f" name="OrOut" portName="OrOut" portNum="8" objectIndex="1" varId="20" filter="7" portDataType="1" replacementValue="0">
<targetFunctionBlockPorts>
<wiredLink Id="22f90d46-386f-4a68-bfe8-4c03375d6655">
<inPortMoniker name="//Network21/FBOr1/OrIn2" />
</wiredLink>
</targetFunctionBlockPorts>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
</fBOr>
</networkHasFunctionBlocks>
</functionBlocks>
</Network>
</safetyApplicationHasNetworks>
<safetyApplicationHasNetworks Id="05ca0842-72c4-42c7-a7c6-68dbab0d0d21">
<Network Id="1baac045-5dbb-42d8-98a6-d8a32439a912" name="Network2" networkName="EStop" intId="4" networkOrderId="1">
<functionBlocks>
<networkHasFunctionBlocks Id="180c1b9a-2d60-42eb-9e30-d0bdfc9bff9d">
<fBEstop Id="0496e98b-6903-4061-9c09-0375ac63f0aa" name="FBEstop1" instanceName="FBEstop2" orderOfExecution="7" mapState="false" mapDiag="false" functionName="safeEstop" safeInputsAfterDiscError="true">
<inPorts>
<functioBlockHasInPorts Id="bc633bf1-358b-4b1d-92b6-370c6f9746e5">
<inPort Id="571e6b1c-6655-46e0-b272-732ca80d85d9" name="Restart" portName="Restart" portNum="2" objectIndex="0" varId="1" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="75eb39db-495f-4e9e-9768-ca415e6b3586">
<inPort Id="72a73e21-a10b-4efd-968d-accba3d08de6" name="EStopIn1" portName="EStopIn1" portNum="4" objectIndex="8" varId="3" filter="2" portDataType="1" channelInterface="Two-Channel" discrepancyTime="100" deactivate1="Break Contact (NC)" deactivate2="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="65d5803c-f967-485b-a7ca-f877b6cf42e5">
<inPort Id="1fdb031e-b797-482c-b6ff-e9c67f8b189b" name="EStopIn2" portName="EStopIn2" portNum="5" objectIndex="9" varId="4" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="ddf50537-13cc-4cc1-8d91-df556a10932b">
<inPort Id="8c638bf4-4836-4538-84bb-c39ef8b9ad4b" name="EStopIn3" portName="EStopIn3" portNum="6" objectIndex="10" varId="5" filter="2" portDataType="1" channelInterface="Single-Channel 1 Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="4e429f9d-c7ba-401f-8cb5-986dc16a768a">
<inPort Id="47d34b63-ff99-4aaf-9e00-6c23414325c4" name="EStopIn4" portName="EStopIn4" portNum="7" objectIndex="11" varId="6" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="c93d8217-4ca0-4434-b82e-9d6216824785">
<inPort Id="b1124734-a2a1-4fa2-9607-8964918fc015" name="EStopIn5" portName="EStopIn5" portNum="8" objectIndex="12" varId="7" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="4a46a123-5fbc-4b56-acab-33b80440124e">
<inPort Id="c779ee33-30a8-49a2-b8a1-9136789ac25a" name="EStopIn6" portName="EStopIn6" portNum="9" objectIndex="13" varId="8" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="6ab5013d-7814-4cbc-83b0-4e7e801fda55">
<inPort Id="55c5ddf3-7e18-4911-9b35-847f2bffa547" name="EStopIn7" portName="EStopIn7" portNum="10" objectIndex="14" varId="9" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="8d89c61e-7fe3-4146-882e-06e2e3e6766c">
<inPort Id="0add347c-b95b-45cc-b9a4-face5d40767d" name="EStopIn8" portName="EStopIn8" portNum="11" objectIndex="15" varId="10" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="494e2c6d-6ead-477f-9e0b-3dda6989ab8e">
<inPort Id="d4c80dfd-3e6b-4ed3-9161-976043a2223d" name="EDM1" portName="EDM1" portNum="13" objectIndex="1" varId="12" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="aa71a705-2266-44cf-beed-f4fe35224622">
<inPort Id="31ab607f-0301-4494-9879-43db7037dc9a" name="EDM2" portName="EDM2" portNum="14" objectIndex="2" varId="13" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="8b0f4af3-54bc-41bb-a127-8f56f488cc11">
<outPort Id="3719e190-c2ff-4c3c-893c-772ed8633046" name="Error" portName="Error" portNum="4" objectIndex="0" varId="16" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="7f6d4503-c070-4d32-9d81-e3b174e74f21">
<outPort Id="73d7d0aa-e245-4675-8dea-ca5e266695fd" name="EStopOut" portName="EStopOut" portNum="11" objectIndex="1" varId="23" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="1ceb99b7-36b0-427f-a331-73632ff35bc1">
<outPort Id="1d03883f-8b65-401a-b9a8-6a580458d27f" name="EStopDelOut" portName="EStopDelOut" portNum="12" objectIndex="2" varId="26" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
</outPorts>
<parameterPorts>
<functionBlockHasParamPorts Id="96d68c94-01ea-4718-b968-7be00b56b0f3">
<parameterPort Id="8355dde1-16b5-4135-8817-ca67b8bf3d75" name="Delay Time (ms)" portName="Delay Time (ms)" portNum="8" objectIndex="0" varId="0" filter="0" portDataType="0" timing="100" userFbPortName="Delay Time (ms)" useInUserFb="false" />
</functionBlockHasParamPorts>
</parameterPorts>
</fBEstop>
</networkHasFunctionBlocks>
<networkHasUserFunctionBlocks Id="64769767-ba13-4658-afed-3233d920e537">
<userFunctionBlock Id="36ff2554-0605-420f-b043-4effa33342ab" name="UserFunctionBlock1" instanceName="UserFB" orderOfExecution="8" schematicGuid="40362a3f-2d6f-4ed4-899e-f95e68783932" libraryGuid="00000000-0000-0000-0000-000000000000" ufbDefCrc="904853738">
<inPorts>
<userFunctionBlockHasInPorts Id="4d1a7758-5c6e-402b-9d3c-16ff3924a1aa">
<metaInPort Id="259e2a50-fa18-40f1-b11c-65640048189b" name="AnySignal" portName="AnySignal" portNum="1" objectIndex="0" varId="2" filter="2" portDataType="1" maxDeviation="0" resetTime="0" schematicVarId="abfa5f60-fb3e-4982-ad23-5a9f298288d8" />
</userFunctionBlockHasInPorts>
<userFunctionBlockHasInPorts Id="3589c900-ee3c-48df-b333-532675e418e3">
<metaInPort Id="e2363887-052a-44a3-89e3-1b548deb128a" name="AnySignal_" portName="AnySignal_" portNum="2" objectIndex="0" varId="3" filter="2" portDataType="1" maxDeviation="0" resetTime="0" schematicVarId="d2b59abb-f6b2-44b8-8e6c-9a7f79516f83" />
</userFunctionBlockHasInPorts>
</inPorts>
<outPorts>
<userFunctionBlockHasOutPorts Id="2ec40e18-3bfd-479f-a149-ddd7798782fa">
<metaOutPort Id="a4a3adbb-dc6b-4a71-8e8e-928af7374a75" name="AlwaysTrue" portName="AlwaysTrue" portNum="1" objectIndex="1" varId="20" filter="7" portDataType="1" replacementValue="0" schematicVarId="dcc233fa-9924-4295-aec8-ce87c9312e1a" />
</userFunctionBlockHasOutPorts>
</outPorts>
</userFunctionBlock>
</networkHasUserFunctionBlocks>
</functionBlocks>
</Network>
</safetyApplicationHasNetworks>
</networks>
<twinSAFEGroupAliasPorts>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="ed5431ad-1ede-4b74-a7f6-cf582d1beb55">
<twinSAFEGroupAliasPort Id="133a7627-e8b0-4abd-979c-2ffb91ca0a2c" name="ErrAck" sdsId="0" channelId="0" portName="ErrAck" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="fff676ff-274a-4c67-9c45-c171a233e252">
<twinSAFEGroupAliasPort Id="d3ac60e4-8fd1-48bf-ae71-cb6287bbb383" name="RunStop" sdsId="0" channelId="0" portName="RunStop" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="c2a73640-9509-4f9b-9c80-24251dbc077d">
<twinSAFEGroupAliasPort Id="444fc5bd-a925-447f-8512-8f9f47887790" name="ModuleFault" sdsId="0" channelId="0" portName="ModuleFault" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="56fc96e3-ee1f-46e1-add8-e92b110c31df">
<twinSAFEGroupAliasPort Id="636de43d-6a4a-4b9a-9295-0b0c6f335f34" name="FbErr" sdsId="0" channelId="0" portName="FbErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="7f7071a9-edb1-4cf8-81b9-afd69aeeb924">
<twinSAFEGroupAliasPort Id="39375001-a83c-4a7d-bfec-875ee37fc499" name="ComErr" sdsId="0" channelId="0" portName="ComErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="91bb2b8b-4a0e-47dd-b988-e9a59ad003e7">
<twinSAFEGroupAliasPort Id="81b62f84-41be-4f29-ad32-8277560e5a9f" name="OutErr" sdsId="0" channelId="0" portName="OutErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="0a4e5b2a-89fd-4d8e-98ba-459d214a3514">
<twinSAFEGroupAliasPort Id="2218d982-d163-46bd-9cd3-b9b097ce964c" name="OtherErr" sdsId="0" channelId="0" portName="OtherErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="fa2530ac-f9f2-4b9e-90c1-0fe293b163ee">
<twinSAFEGroupAliasPort Id="699356e9-ba45-457f-b2f2-dc1db20e4879" name="ComStartup" sdsId="0" channelId="0" portName="ComStartup" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="46ddc417-ae91-4c69-83ca-9b8edeed8b87">
<twinSAFEGroupAliasPort Id="e5314d91-01ea-4226-95f3-ed1fa4d937f6" name="FbDeactive" sdsId="0" channelId="0" portName="FbDeactive" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="3fb93e3c-1461-4d77-81e4-c221672c7e90">
<twinSAFEGroupAliasPort Id="28a0f117-14f7-4fbc-a6ca-1f9acab7c1d1" name="FbRun" sdsId="0" channelId="0" portName="FbRun" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="d7ea9d93-d55c-4efd-8360-eefac0ed42ef">
<twinSAFEGroupAliasPort Id="3ee1a735-d7b0-4b11-abb9-9c80e926b26b" name="InRun" sdsId="0" channelId="0" portName="InRun" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
</twinSAFEGroupAliasPorts>
<variables>
<safetyApplicationHasVariables Id="18a2b196-2789-4b6d-ae37-bfc538c248e8">
<variable Id="19c273a2-41c3-4487-be99-7fa1bd483a11" name="GroupPort_ErrAck" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="9217d67e-953d-40c1-85c4-02e11ddb500f">
<variableUsages Id="cac1d3d0-aedc-425c-8ca6-9fc619804aa7">
<usages>
<variableUsagesHasUsages Id="c4430fdf-c181-4082-89e8-ad49e0e57533">
<aliasDeviceIoUsage Id="dd80ea4a-c68c-4d96-bceb-4b1221c0deac" sdsId="1" channelId="1" functionId="0" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="bd7552d6-026a-41f2-8211-28e0a90b90bf">
<variableUsages Id="5ccbca08-1f3c-4308-8ab6-da7d7b854fa2">
<usages>
<variableUsagesHasUsages Id="0d8ea171-0227-4bad-81f7-b4069a055b05">
<groupPortUsage Id="df7f32fa-8b44-4f17-ae12-d7e1999294ec">
<twinSAFEGroupAliasPort>
<groupPortUsageReferencesTwinSAFEGroupAliasPort Id="e4bba306-6138-410a-a7d4-103c2413ee5d">
<twinSAFEGroupAliasPortMoniker name="//ErrAck" />
</groupPortUsageReferencesTwinSAFEGroupAliasPort>
</twinSAFEGroupAliasPort>
</groupPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="8679cfbb-53d1-474e-b74c-9fde6f3ac1cc">
<variable Id="7c91c969-8a33-4336-9892-20a645721516" name="xEStopReset" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="063d7428-37e0-4c8b-803f-7a973a110ae0">
<variableUsages Id="d3bd1207-8312-4a47-8cbf-1b37b61dfc37">
<usages>
<variableUsagesHasUsages Id="bd8b94a3-a568-47c2-8e19-4b5faae6df60">
<aliasDeviceIoUsage Id="b1f7fffe-9aec-400e-b580-d491aa2759ec" sdsId="7" channelId="1" functionId="1131179973" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="69925915-9d4a-435a-85a5-c89b383582a3">
<variableUsages Id="78980df6-6420-4fd0-b298-1f11c36a8d2c">
<usages>
<variableUsagesHasUsages Id="e2ba2e97-ee40-417c-8e85-b72323d22a83">
<fbPortUsage Id="c82a5e5e-955a-4f8c-8854-ce630f7a3393">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="8ab899d1-02e1-4a09-a834-5f59e25f4971">
<inPortMoniker name="//Network2/FBEstop1/Restart" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="45333229-a336-4196-a46f-c751b9773e58">
<variable Id="4692626f-6cd5-4196-928f-4c40651724be" name="xSwitchEStopChA" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="2ff93238-3468-4e6b-abe4-0019829afb3f">
<variableUsages Id="63995fb0-e46d-4f44-9d0c-4561c0b2d6eb">
<usages>
<variableUsagesHasUsages Id="6744ddb8-7e70-4dd8-be43-348b06f7581c">
<aliasDeviceIoUsage Id="49a819a1-5a99-483e-96bf-ea64ec72a104" sdsId="2" channelId="1" functionId="1610678529" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="65dea95c-ebb4-4370-b5a3-b51fb69b3748">
<variableUsages Id="32829330-4d7f-454d-9ec5-2602c2c184ed">
<usages>
<variableUsagesHasUsages Id="2606c3fc-f527-4043-84dd-9d4415faf72d">
<fbPortUsage Id="17395517-b3e8-4920-af1e-05ad3e0633ef">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="0bdb9987-c101-46b3-95d4-d4e89e88810e">
<inPortMoniker name="//Network2/FBEstop1/EStopIn1" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="7bb5d339-91e7-49a2-91ba-20a40a3cf573">
<variable Id="f35c16ae-aeae-42b5-9e53-54c9e84eddbb" name="xSwitchEStopChB" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="0507620b-9bdc-4914-aa8a-24ae22b141cf">
<variableUsages Id="721dc917-cec1-4e7d-8bd1-43ec4538e720">
<usages>
<variableUsagesHasUsages Id="3778f8c5-1ca1-45c8-98b2-7c5f085c428a">
<aliasDeviceIoUsage Id="ec821bd6-ac9d-474f-9dca-15290fd7a9e7" sdsId="2" channelId="2" functionId="1610678785" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="a32196fc-aeaf-48d2-9425-88d7645f8e61">
<variableUsages Id="9fbdb8d4-e86e-47ec-9619-3af8ac087f21">
<usages>
<variableUsagesHasUsages Id="bf16b85e-3c0d-4632-a2aa-5e35b2abf912">
<fbPortUsage Id="a3716b22-e340-41a1-83fd-6b10d9218ed4">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="6cea5bae-d5ab-4d5a-9458-0ceb2249b398">
<inPortMoniker name="//Network2/FBEstop1/EStopIn2" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="0ff16fd7-07f1-4c64-b7da-657ed098c7c8">
<variable Id="557e6182-7517-41d9-a595-3f41e9690f91" name="uiPositionPumpPosolyt" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="b6929ac7-cd4f-42c5-962d-91da503d4081">
<variableUsages Id="466e8cc7-6c32-4060-9071-1c9bbdc94f17">
<usages>
<variableUsagesHasUsages Id="3e361e7f-69a2-42ce-93b2-db318376428a">
<aliasDeviceIoUsage Id="3b8ec293-f7cd-409f-887d-9182d418d6f5" sdsId="14" channelId="1" functionId="1610617104" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="5a1dd7f0-a71f-4208-b659-057d284d6625">
<variableUsages Id="cb48b1b3-7280-401b-9da6-2c081c3f893d">
<usages>
<variableUsagesHasUsages Id="ae8b24ed-1abd-45bc-97e3-9da78adfcc6a">
<fbPortUsage Id="13270798-38c4-4847-9ae2-e5ab0d9d924c">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="5268cfa6-2278-49f0-9cd0-19d474af3d64">
<inPortMoniker name="//Network21/FBSpeed1/Position" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="e4992ad6-f2ca-4a18-9d12-d4a4e2faf508">
<variable Id="131a4925-d4dd-4ba2-8474-bc3038679f86" name="rSpeedPumpPosolyt" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="e2adc22b-0d00-4ae6-a155-b1089039e56a">
<variableUsages Id="1b746376-c5a6-4b25-8471-4e80c91e8b62">
<usages>
<variableUsagesHasUsages Id="39981e48-d0b8-4038-9cf7-9b5b077440ab">
<aliasDeviceIoUsage Id="db363822-7687-42ab-8ae7-6e97339c41b0" sdsId="11" channelId="1" functionId="-852529" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="ca858ddc-43ef-48ef-b4a6-6e97b8be06d8">
<variableUsages Id="3113d5bc-9fd0-4c85-b1ef-09cf951032c0">
<usages>
<variableUsagesHasUsages Id="dfaf7d9d-58fb-49b2-b68a-366abbec8643">
<fbPortUsage Id="5cd99777-66d2-451b-b53b-a03f9548e970">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="ff0b5e0d-9dba-4a0a-9fe2-111d8e87e5e0">
<inPortMoniker name="//Network21/FBScaling1/AnalogIn" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="270c88a1-e4ab-48d1-a123-7eccb5c9b794">
<variable Id="eb5c9911-f3d7-409b-be85-4e7873326a01" name="xPumpShouldRun" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="858983f5-bfb1-4015-a4a5-f4c06204ba78">
<variableUsages Id="78f11b8b-4601-4f60-bbb5-ab50414f2949">
<usages>
<variableUsagesHasUsages Id="d772f35f-f7da-413a-b207-bac3cef1e3d0">
<aliasDeviceIoUsage Id="a243b568-891b-40d9-abe8-21e519e8e409" sdsId="2" channelId="3" functionId="1610679041" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="3224c600-ec6d-4e45-99e6-484e3ea3dcae">
<variableUsages Id="0d1c60ee-2dce-42d8-9917-ccaae9cdcec0">
<usages>
<variableUsagesHasUsages Id="ca7bf14c-050e-498a-8fa7-7850b0910d03">
<fbPortUsage Id="4881d7ce-006a-4414-b605-76ac0cdcea56">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="157e0641-d5ca-48bd-9e8e-0035039bc1cd">
<inPortMoniker name="//Network21/FBOr2/OrIn2" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="aff34310-4f73-4267-8953-0cac082efbbc">
<variable Id="64028009-8b2f-4190-88ba-dc29fdab5f8b" name="xEStopSpeed" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="3b2cb025-187b-41ec-ae37-a0d74005e474">
<variableUsages Id="d065b69b-7c17-4708-9583-230d95ab5c30">
<usages>
<variableUsagesHasUsages Id="e4ba5862-a00d-4a90-a84f-1b5b589bd0f5">
<fbPortUsage Id="4f56471a-6c70-4982-8e4e-4c19058af2af">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="71aad067-39ac-4115-94ca-b861058ea659">
<outPortMoniker name="//Network21/FBOr1/OrOut" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="9ba5f59d-d145-4cca-95fb-f522e25a7d4c">
<variableUsages Id="653389ec-f701-4bdc-b615-9a38acdb7b98">
<usages>
<variableUsagesHasUsages Id="518a269f-5603-44d4-b268-eb9bf38e69ef">
<fbPortUsage Id="ac8d435d-24ae-4199-8e03-cd4040ed0be7">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="28ea9c10-e188-42dc-b9d7-eb9b05b2f6da">
<inPortMoniker name="//Network2/FBEstop1/EStopIn3" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="677c8ca8-1217-4854-89bf-687fd7664c89">
<variable Id="f1845b4e-b8d0-411f-a2cb-5c2165486cde" name="xEStopOk" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="adc0d3ce-b90d-4d11-a360-dda8f224266c">
<variableUsages Id="08256c06-b22f-4796-a71b-27860b464ec2">
<usages>
<variableUsagesHasUsages Id="789a1d22-60d0-4a9c-a1fb-d099c4110c8e">
<fbPortUsage Id="95ca3ece-3eb8-402b-a59c-d60211c8c679">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="b2c2f93a-df3e-4566-be22-69aeda17a5e5">
<outPortMoniker name="//Network2/FBEstop1/EStopOut" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="b896cbd7-be79-47ae-b9c2-20690e582763">
<variableUsages Id="0c8b69dd-815f-442f-8679-6b687f88994e">
<usages>
<variableUsagesHasUsages Id="f5a0aedf-6887-4fe0-8e70-453bfa7ba438">
<aliasDeviceIoUsage Id="17908f0a-81a1-4f19-8182-2282ada826e0" sdsId="3" channelId="1" functionId="1879113985" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
</variables>
</safetyApplication>

View File

@@ -0,0 +1,366 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplicationLanguageDiagram Crc="3026409695" dslVersion="1.4.0.0" Id="e8471410-8c18-4331-b390-804749f9afec" absoluteBounds="0, 0, 30.75, 12.25" name="TwinSAFE">
<safetyApplicationMoniker name="/" />
<nestedChildShapes>
<networkSwimLane Id="9c50c0da-2eab-4748-bfba-ff18f94a278f" absoluteBounds="0, 0, 30.75, 7.25">
<networkMoniker name="//Network21" />
<nestedChildShapes>
<fBSpeedShape Id="04ac7650-b982-4d5a-84b5-bd70035eee1b" absoluteBounds="3, 0.625, 3.35, 2.25">
<fBSpeedMoniker name="//Network21/FBSpeed1" />
<relativeChildShapes>
<inPortShape Id="8be9e9a1-706f-4095-94ab-f6f16fb35cb9" absoluteBounds="2.92, 1.37, 0.15, 0.15">
<inPortMoniker name="//Network21/FBSpeed1/Position" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="120aa621-a2ec-4b26-b9fd-c4afc4360698" absoluteBounds="6.25, 1.6400000000000001, 0.15, 0.15">
<outPortMoniker name="//Network21/FBSpeed1/Error" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="ff81e5f7-4ebe-4eb1-a86f-7bef95a79793" absoluteBounds="6.25, 1.9100000000000001, 0.15, 0.15">
<outPortMoniker name="//Network21/FBSpeed1/Speed" />
<relativeChildShapes />
</outPortShape>
<paramPortShape Id="bf2f46ef-5b97-4ffc-a0cf-9b71fdc675f5" absoluteBounds="4.57, 2.3000000000000003, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBSpeed1/Time Interval (ms)" />
<relativeChildShapes />
</paramPortShape>
</relativeChildShapes>
</fBSpeedShape>
<fBScalingShape Id="b1643d14-c35f-4686-8f74-0f250207a7f7" absoluteBounds="3, 3, 3.35, 4">
<fBScalingMoniker name="//Network21/FBScaling1" />
<relativeChildShapes>
<inPortShape Id="d5238bf7-6fac-40fd-a2af-1e8f71168eba" absoluteBounds="2.92, 4.0150000000000006, 0.15, 0.15">
<inPortMoniker name="//Network21/FBScaling1/AnalogIn" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="70871297-15e9-434f-8718-12b8703fdc18" absoluteBounds="6.25, 4.0150000000000006, 0.15, 0.15">
<outPortMoniker name="//Network21/FBScaling1/Error" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="ae41be2d-7434-4890-9d00-dde47d409bdb" absoluteBounds="6.25, 4.285, 0.15, 0.15">
<outPortMoniker name="//Network21/FBScaling1/StuckAtError" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="d944ff7b-7585-4274-9428-a8ff43067f56" absoluteBounds="6.25, 4.555, 0.15, 0.15">
<outPortMoniker name="//Network21/FBScaling1/AnalogOut" />
<relativeChildShapes />
</outPortShape>
<paramPortShape Id="5adf4001-acbc-42d7-a35d-c1fcd7aa6b63" absoluteBounds="4.57, 5.075, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBScaling1/Scaling Factor Multiplier" />
<relativeChildShapes />
</paramPortShape>
<paramPortShape Id="d4bd4d01-3024-4d13-9546-335a4b52b7df" absoluteBounds="4.57, 5.475, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBScaling1/Scaling Factor Divisor" />
<relativeChildShapes />
</paramPortShape>
<paramPortShape Id="e449cb54-08e5-46f6-822c-dff83af53a9e" absoluteBounds="4.57, 6.0750000000000011, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBScaling1/Scaling Offset" />
<relativeChildShapes />
</paramPortShape>
<paramPortShape Id="5d72eb23-3545-4aa8-8fb2-9b5023f43fbd" absoluteBounds="4.57, 6.475, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBScaling1/Watchdog (ms)" />
<relativeChildShapes />
</paramPortShape>
</relativeChildShapes>
</fBScalingShape>
<fBCompareShape Id="81b35365-5839-4601-8679-533780674efc" absoluteBounds="8.25, 1.25, 3.35, 3.8">
<fBCompareMoniker name="//Network21/FBCompare1" />
<relativeChildShapes>
<inPortShape Id="58913998-7ecb-4487-8c01-08a299735fb8" absoluteBounds="8.17, 1.995, 0.15, 0.15">
<inPortMoniker name="//Network21/FBCompare1/CompIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="9416666b-7bff-4f1d-a91e-3ae591edfa2c" absoluteBounds="8.17, 2.265, 0.15, 0.15">
<inPortMoniker name="//Network21/FBCompare1/CompIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="f6de3cf5-ebe7-477d-85ec-ce71028bdf85" absoluteBounds="8.17, 2.535, 0.15, 0.15">
<inPortMoniker name="//Network21/FBCompare1/CompIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="e8e77624-a690-4d00-be40-d34411ac82c0" absoluteBounds="8.17, 2.805, 0.15, 0.15">
<inPortMoniker name="//Network21/FBCompare1/CompIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="1b09c307-3e79-4577-b9d5-866aca810259" absoluteBounds="8.17, 3.075, 0.15, 0.15">
<inPortMoniker name="//Network21/FBCompare1/CompIn5" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="e9c82c37-2ef0-4fa0-81d4-3a656e3d3156" absoluteBounds="11.5, 2.265, 0.15, 0.15">
<outPortMoniker name="//Network21/FBCompare1/Error" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="7f8540af-4a7a-4908-a71f-860c26f669a3" absoluteBounds="11.5, 2.535, 0.15, 0.15">
<outPortMoniker name="//Network21/FBCompare1/IsValid" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="85b8645c-687c-4723-877b-2f8aa01d4616" absoluteBounds="11.5, 2.805, 0.15, 0.15">
<outPortMoniker name="//Network21/FBCompare1/CompOut" />
<relativeChildShapes />
</outPortShape>
<paramPortShape Id="56fc7720-d547-498f-ba4c-8122210724e5" absoluteBounds="10.17, 3.775, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBCompare1/Allowed deviation" />
<relativeChildShapes />
</paramPortShape>
<paramPortShape Id="e11984e2-e6e9-4bac-8e44-1fec5911d47a" absoluteBounds="10.17, 4.1750000000000007, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBCompare1/Tolerance time (ms)" />
<relativeChildShapes />
</paramPortShape>
</relativeChildShapes>
</fBCompareShape>
<wiredLinkConnector Id="c873b487-88df-4e40-a815-f7dad6aa1f31" edgePoints="[(6.4 : 1.985); (6.775 : 1.985); (6.775 : 2.07); (8.17 : 2.07)]" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
<wiredLinkMoniker Id="482441d8-539d-41b3-b700-f2b84a1569d6" />
<nodes>
<outPortShapeMoniker Id="ff81e5f7-4ebe-4eb1-a86f-7bef95a79793" />
<inPortShapeMoniker Id="58913998-7ecb-4487-8c01-08a299735fb8" />
</nodes>
</wiredLinkConnector>
<wiredLinkConnector Id="8ee86714-a9e6-4aeb-ac94-0bb9aca057cf" edgePoints="[(6.4 : 4.63); (6.775 : 4.63); (6.775 : 2.34); (8.17 : 2.34)]" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
<wiredLinkMoniker Id="5922d18c-f030-4a6b-8f55-406ffd6fe56c" />
<nodes>
<outPortShapeMoniker Id="d944ff7b-7585-4274-9428-a8ff43067f56" />
<inPortShapeMoniker Id="9416666b-7bff-4f1d-a91e-3ae591edfa2c" />
</nodes>
</wiredLinkConnector>
<fBLimitShape Id="5c1ce843-885f-4db0-896e-c4bfe3ed7b77" absoluteBounds="14, 2.125, 3.35, 3">
<fBLimitMoniker name="//Network21/FBLimit1" />
<relativeChildShapes>
<inPortShape Id="ef73a825-6d45-4f58-a45d-2d7c2c30ab07" absoluteBounds="13.92, 2.87, 0.15, 0.15">
<inPortMoniker name="//Network21/FBLimit1/AnalogIn" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="2a8347c9-6ff5-432d-ac54-2970fd9c7a1e" absoluteBounds="13.92, 3.14, 0.15, 0.15">
<inPortMoniker name="//Network21/FBLimit1/MinValue" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="bf5da8ce-d94c-4ff7-bdad-0cf254ed4f3f" absoluteBounds="13.92, 3.41, 0.15, 0.15">
<inPortMoniker name="//Network21/FBLimit1/MaxValue" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="82960093-fa28-43f0-957f-8d546dee81c5" absoluteBounds="17.25, 2.87, 0.15, 0.15">
<outPortMoniker name="//Network21/FBLimit1/Error" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="bd904d5a-134a-45b9-be8d-168b891e6a46" absoluteBounds="17.25, 3.14, 0.15, 0.15">
<outPortMoniker name="//Network21/FBLimit1/InLimit" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="b6b93732-9099-477a-91f7-769980623477" absoluteBounds="17.25, 3.41, 0.15, 0.15">
<outPortMoniker name="//Network21/FBLimit1/BelowMin" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="45f3595f-b57a-4b85-90d0-60ef0b2b06f6" absoluteBounds="17.25, 3.68, 0.15, 0.15">
<outPortMoniker name="//Network21/FBLimit1/AboveMax" />
<relativeChildShapes />
</outPortShape>
<paramPortShape Id="905153a7-a96f-4837-be25-0c58571a6a3e" absoluteBounds="15.57, 4.2, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBLimit1/Minimum Value" />
<relativeChildShapes />
</paramPortShape>
<paramPortShape Id="29bc10a6-c8b4-46b2-b2a6-5df9d4053990" absoluteBounds="15.57, 4.6, 0.7, 0.2">
<parameterPortMoniker name="//Network21/FBLimit1/Maximum Value" />
<relativeChildShapes />
</paramPortShape>
</relativeChildShapes>
</fBLimitShape>
<wiredLinkConnector Id="3156a9c6-d127-4606-8f69-e3fac417e77a" edgePoints="[(11.65 : 2.88); (12.025 : 2.88); (12.025 : 2.945); (13.92 : 2.945)]" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
<wiredLinkMoniker Id="1e4f8e63-feb2-43e2-902f-adb5fe1d07c2" />
<nodes>
<outPortShapeMoniker Id="85b8645c-687c-4723-877b-2f8aa01d4616" />
<inPortShapeMoniker Id="ef73a825-6d45-4f58-a45d-2d7c2c30ab07" />
</nodes>
</wiredLinkConnector>
<fBOrShape Id="0e26224b-de97-4334-8dee-b016e46f9621" absoluteBounds="22.75, 0.25, 2.75, 3.25">
<fBOrMoniker name="//Network21/FBOr1" />
<relativeChildShapes>
<inPortShape Id="15146e81-9222-439d-b518-43c3decfec33" absoluteBounds="22.67, 0.995, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr1/OrIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="44701d0a-4bdd-447e-b408-ee9bf690aa6a" absoluteBounds="22.67, 1.2650000000000001, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr1/OrIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="cb2f7ec2-611e-438f-a82e-dce3de955b8b" absoluteBounds="22.67, 1.5350000000000001, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr1/OrIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="f9d37166-52dc-4443-b87e-c39cbb08607f" absoluteBounds="22.67, 1.8050000000000002, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr1/OrIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="db7aaf3f-329f-4515-9b37-f9842cad5a14" absoluteBounds="22.67, 2.075, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr1/OrIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="4c0be843-66c1-470a-95ac-41f94dfc57ca" absoluteBounds="22.67, 2.345, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr1/OrIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="96525793-4284-4a13-af03-189b168e869d" absoluteBounds="22.67, 2.615, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr1/OrIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="356cd677-87f0-4c3b-9b48-a14f1c80e0ff" absoluteBounds="22.67, 2.8850000000000002, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr1/OrIn8" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="57f7fc73-137c-40f5-b111-bbc73c5d5826" absoluteBounds="25.4, 2.615, 0.15, 0.15">
<outPortMoniker name="//Network21/FBOr1/OrOut" />
<relativeChildShapes />
</outPortShape>
</relativeChildShapes>
</fBOrShape>
<wiredLinkConnector Id="c6c63896-7097-458f-b610-a1f0370aaa4f" edgePoints="[(11.65 : 2.61); (12.025 : 2.61); (12.025 : 1.07); (22.67 : 1.07)]" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
<wiredLinkMoniker Id="f1538b15-a353-4670-b8a0-582bf63af946" />
<nodes>
<outPortShapeMoniker Id="7f8540af-4a7a-4908-a71f-860c26f669a3" />
<inPortShapeMoniker Id="15146e81-9222-439d-b518-43c3decfec33" />
</nodes>
</wiredLinkConnector>
<fBOrShape Id="2dfc4e9c-a956-4d6e-967a-3f383e8e0220" absoluteBounds="19, 2.375, 2.75, 3.25">
<fBOrMoniker name="//Network21/FBOr2" />
<relativeChildShapes>
<inPortShape Id="74dae78c-29d5-4188-ae75-cc0c45d09bec" absoluteBounds="18.92, 3.12, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr2/OrIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="84c63fea-2655-493b-b200-e6eef2212395" absoluteBounds="18.92, 3.39, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr2/OrIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="6dc95e01-8c5f-445b-988b-300e1a5d5cb5" absoluteBounds="18.92, 3.66, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr2/OrIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="c36f2b47-61fc-4f14-9a5b-b16b95391652" absoluteBounds="18.92, 3.93, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr2/OrIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="3b99e52d-c680-4f56-9ec1-51df1f3ce1a9" absoluteBounds="18.92, 4.2, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr2/OrIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="f1379ae0-e68c-4e2a-a7e8-b7e447072286" absoluteBounds="18.92, 4.4700000000000006, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr2/OrIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="a11bb89e-5fe1-4c9a-b5a7-c2aca07ad440" absoluteBounds="18.92, 4.74, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr2/OrIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="a9bc615b-e3cd-49b2-997b-638d67bb415b" absoluteBounds="18.92, 5.01, 0.15, 0.15">
<inPortMoniker name="//Network21/FBOr2/OrIn8" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="f7805f6e-c234-4ee6-abdd-43877adc4dad" absoluteBounds="21.65, 4.74, 0.15, 0.15">
<outPortMoniker name="//Network21/FBOr2/OrOut" />
<relativeChildShapes />
</outPortShape>
</relativeChildShapes>
</fBOrShape>
<wiredLinkConnector Id="321bae52-c2bf-4385-a6f6-224404775a08" edgePoints="[(17.4 : 3.215); (17.775 : 3.215); (17.775 : 3.195); (18.92 : 3.195)]" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
<wiredLinkMoniker Id="87c23819-4291-4102-a056-190d92a9b310" />
<nodes>
<outPortShapeMoniker Id="bd904d5a-134a-45b9-be8d-168b891e6a46" />
<inPortShapeMoniker Id="74dae78c-29d5-4188-ae75-cc0c45d09bec" />
</nodes>
</wiredLinkConnector>
<wiredLinkConnector Id="f7b38630-2437-4138-9c74-a52e888e76fc" edgePoints="[(21.8 : 4.815); (22.175 : 4.815); (22.175 : 1.34); (22.67 : 1.34)]" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
<wiredLinkMoniker Id="22f90d46-386f-4a68-bfe8-4c03375d6655" />
<nodes>
<outPortShapeMoniker Id="f7805f6e-c234-4ee6-abdd-43877adc4dad" />
<inPortShapeMoniker Id="44701d0a-4bdd-447e-b408-ee9bf690aa6a" />
</nodes>
</wiredLinkConnector>
</nestedChildShapes>
</networkSwimLane>
<networkSwimLane Id="beeaca4b-0498-42b4-a242-21f8e26c56a4" absoluteBounds="0, 7.25, 30.75, 4.9499999999999993">
<networkMoniker name="//Network2" />
<nestedChildShapes>
<fBEstopShape Id="0859b265-dcbd-482a-9423-7a3be5744b23" absoluteBounds="2.875, 7.5, 3.35, 4.45">
<fBEstopMoniker name="//Network2/FBEstop1" />
<relativeChildShapes>
<inPortShape Id="235c6d12-173d-4f0c-a672-f69dcf990f4c" absoluteBounds="2.795, 8.245, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/Restart" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="24a706ba-e296-479d-bc16-c28a1c6eb412" absoluteBounds="2.795, 8.807500000000001, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="b40901e8-2579-404b-8ebb-98ce942ad856" absoluteBounds="2.795, 9.0325, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="342f91a7-fdcf-4703-901b-0377655909d6" absoluteBounds="2.795, 9.3475, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="2fef2d16-b398-4fd3-8585-e7ecb78b4859" absoluteBounds="2.795, 9.5725, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="7a5e93af-438b-4f76-8dc8-b71ef8216336" absoluteBounds="2.795, 9.8875, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="283c42c5-9cdf-4b6e-827e-d87a7a007749" absoluteBounds="2.795, 10.1125, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="3dfbcb93-ce58-48e4-9938-364d7ac89ab9" absoluteBounds="2.795, 10.4275, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="2558b447-421e-4950-94f1-078cfc9e4d41" absoluteBounds="2.795, 10.6525, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn8" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="198ea68d-aa3a-471f-b6b2-53c31a5ea959" absoluteBounds="2.795, 11.2375, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EDM1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="559ec6e8-a9df-45f3-9ff0-d43dbe8d7212" absoluteBounds="2.795, 11.4625, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EDM2" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="1f82026c-c40d-4bbd-a4b7-57a840da63d0" absoluteBounds="6.125, 8.785, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/Error" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="0aa2f046-baa4-4a59-8232-db660e8ae7a3" absoluteBounds="6.125, 10.675, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/EStopOut" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="bce7e75c-58ed-4c30-8184-094608511e0f" absoluteBounds="6.125, 10.945, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/EStopDelOut" />
<relativeChildShapes />
</outPortShape>
<paramPortShape Id="50d44bf7-e7cb-4155-b004-a4131f5f945c" absoluteBounds="4.445, 10.775, 0.7, 0.2">
<parameterPortMoniker name="//Network2/FBEstop1/Delay Time (ms)" />
<relativeChildShapes />
</paramPortShape>
</relativeChildShapes>
</fBEstopShape>
<userFunctionBlockShape Id="a0408936-6cf1-4730-86a6-c62ec01e7965" absoluteBounds="8, 9.125, 2.15, 1.35">
<userFunctionBlockMoniker name="//Network2/UserFunctionBlock1" />
<relativeChildShapes>
<inPortShape Id="27d33ec2-9afb-4f15-a050-b32198a1d14d" absoluteBounds="7.92, 9.6, 0.15, 0.15">
<metaInPortMoniker name="//Network2/UserFunctionBlock1/AnySignal" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="8220bf10-9a01-4fb3-a0b0-35cd3b970182" absoluteBounds="7.92, 9.87, 0.15, 0.15">
<metaInPortMoniker name="//Network2/UserFunctionBlock1/AnySignal_" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="bbb711f8-fe34-4bfa-b50c-de147bd59ecc" absoluteBounds="10.05, 9.6, 0.15, 0.15">
<metaOutPortMoniker name="//Network2/UserFunctionBlock1/AlwaysTrue" />
<relativeChildShapes />
</outPortShape>
</relativeChildShapes>
</userFunctionBlockShape>
</nestedChildShapes>
</networkSwimLane>
</nestedChildShapes>
</safetyApplicationLanguageDiagram>

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplication Crc="904853738" xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.4.0.0" Id="40362a3f-2d6f-4ed4-899e-f95e68783932" name="" mapState="false" mapDiag="false" groupOrderId="0" passificationAllowed="false" temporaryDeactivationAllowed="false" permamentDeactivationAllowed="false" xmlid="0" analogFBOutputReplacementValues="Zero" verifyAnalogFBInputsIfStart="false" userFbId="40362a3f-2d6f-4ed4-899e-f95e68783932" xmlns="http://schemas.microsoft.com/dsltools/SafetyApplicationLanguage">
<networks>
<safetyApplicationHasNetworks Id="da62ccfd-251d-4986-82a4-8be058f260d3">
<Network Id="4222c61f-d53d-47ae-8d62-4481a715aa2a" name="Network1" networkName="Network1" intId="1" networkOrderId="0">
<functionBlocks>
<networkHasFunctionBlocks Id="306e33c9-2df0-4ec4-8106-fddac1aa0beb">
<fBOr Id="26483421-701a-498e-ae8d-f122103889ab" name="FBOr1" instanceName="FBOr1" orderOfExecution="1" mapState="false" mapDiag="false" functionName="safeOr">
<inPorts>
<functioBlockHasInPorts Id="af7af044-04da-40db-ac96-cd312f34ddd3">
<inPort Id="96029339-d090-4ae8-9d1c-7541b7b6bf52" name="OrIn1" portName="OrIn1" portNum="2" objectIndex="8" varId="2" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="191ce175-42c7-41fa-97ff-52c2d00191dd">
<inPort Id="26ef356f-a041-4b45-8dd8-cb44ac5f8558" name="OrIn2" portName="OrIn2" portNum="3" objectIndex="9" varId="3" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Make Contact (NO)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="5f76f130-9673-46ce-8b22-6933b5b65282">
<inPort Id="a080a9e1-e794-4d90-87e1-28cb6e9c9f38" name="OrIn3" portName="OrIn3" portNum="4" objectIndex="10" varId="4" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="9da443e1-ffaa-460b-8a58-17915286f992">
<inPort Id="4b254efc-24d3-4778-a2d5-249b3b59de1f" name="OrIn4" portName="OrIn4" portNum="5" objectIndex="11" varId="5" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="60d1554d-c91a-4039-b8aa-c51fce32f142">
<inPort Id="c903e049-bfc4-40fe-b0f6-e723e8ddb366" name="OrIn5" portName="OrIn5" portNum="6" objectIndex="12" varId="6" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="3e5fce94-1b7e-4e08-88d3-74bbf03ba0db">
<inPort Id="66588d79-8333-4b03-a432-0ed141af0170" name="OrIn6" portName="OrIn6" portNum="7" objectIndex="13" varId="7" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="d9d27c5d-857d-4e0e-8fa5-e59563b8710a">
<inPort Id="1f6a4aca-50b1-4ed5-8fd2-e109f967a110" name="OrIn7" portName="OrIn7" portNum="8" objectIndex="14" varId="8" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="01f4368d-8a47-4365-88ae-913da69e5d98">
<inPort Id="8e9912b5-244b-4057-817e-e77fcd058897" name="OrIn8" portName="OrIn8" portNum="9" objectIndex="15" varId="9" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="9dedfd7d-67ec-4ead-b5e1-802271ea7f8d">
<outPort Id="7df28e36-887d-43b0-a7a7-b5e9ca9ba267" name="OrOut" portName="OrOut" portNum="8" objectIndex="1" varId="20" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
</outPorts>
</fBOr>
</networkHasFunctionBlocks>
</functionBlocks>
</Network>
</safetyApplicationHasNetworks>
</networks>
<variables>
<safetyApplicationHasVariables Id="687df491-c1f5-4fb9-b1ef-a4373f93301f">
<variable Id="abfa5f60-fb3e-4982-ad23-5a9f298288d8" name="AnySignal" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="edfa5a45-7165-4b91-ae54-707daf65df22">
<variableUsages Id="f8cca5e4-b6b4-4719-aeee-cd5b62f9c63d" />
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="d2018365-22fd-4f81-ba46-7a9493bab510">
<variableUsages Id="57974f0e-2f85-45a3-a014-955c8f529a3a">
<usages>
<variableUsagesHasUsages Id="7db2adc2-608e-4922-990f-77b407da5ccd">
<fbPortUsage Id="694a85a7-716e-4976-bd07-47174664cb71">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="9a33d19a-c232-4c5e-8fae-c0c221909bec">
<inPortMoniker name="//Network1/FBOr1/OrIn1" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="a364a27c-259b-4d06-9558-df83729cd53b">
<variable Id="d2b59abb-f6b2-44b8-8e6c-9a7f79516f83" name="AnySignal_" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="79ccc519-7ecf-4497-b0ac-4ae5aa377a4a">
<variableUsages Id="b19e0ee0-5567-425f-9fa2-ac74c4401e48" />
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="e209c412-3fa0-46a0-a9d5-0ce88f0a4358">
<variableUsages Id="40d7b092-9bc3-4ed2-b370-124d6efcfdd4">
<usages>
<variableUsagesHasUsages Id="c11de4ca-2aaf-41e7-ab88-30760b4762f6">
<fbPortUsage Id="3102bdc4-9167-4e65-8e38-e3f568da757e">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="d7e1c99c-91d2-40e0-b024-7e9b6b8e2206">
<inPortMoniker name="//Network1/FBOr1/OrIn2" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="3de595ff-9b7f-4397-b425-b89d9e428287">
<variable Id="dcc233fa-9924-4295-aec8-ce87c9312e1a" name="AlwaysTrue" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="a5abe87d-cb83-452f-b098-ed7db0789a08">
<variableUsages Id="41fff3db-a418-47d6-aca2-8e59a253fb1e">
<usages>
<variableUsagesHasUsages Id="b1a648ad-37da-4bd3-ae33-90c7460c71c9">
<fbPortUsage Id="d2df8d56-a76e-4ad8-820d-9dd07ad83f0b">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="3026bf20-69a8-4ea3-925c-57b7559c7b1f">
<outPortMoniker name="//Network1/FBOr1/OrOut" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="a0a9cb73-295f-4af7-a2fb-30ac1962484f">
<variableUsages Id="8b656d3b-62dd-4a94-821a-49e486bf72b6" />
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
</variables>
</safetyApplication>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplicationLanguageDiagram Crc="3596951796" dslVersion="1.4.0.0" Id="61ac68f9-aa52-406c-9f77-7c688f708f87" absoluteBounds="0, 0, 11, 8.5" name="TwinSAFE">
<safetyApplicationMoniker name="/" />
<nestedChildShapes>
<networkSwimLane Id="a603425d-fc02-4486-9dc5-67e91f5ae702" absoluteBounds="0, 0, 11, 4.75">
<networkMoniker name="//Network1" />
<nestedChildShapes>
<fBOrShape Id="85b70908-1253-49a3-892f-6e390a2a4762" absoluteBounds="3, 1.25, 2.75, 3.25">
<fBOrMoniker name="//Network1/FBOr1" />
<relativeChildShapes>
<inPortShape Id="83334bbd-dcd0-4fe9-8539-7fdab47320f1" absoluteBounds="2.92, 1.995, 0.15, 0.15">
<inPortMoniker name="//Network1/FBOr1/OrIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="a35ed8f5-a793-404f-8d86-67c2e4d3d401" absoluteBounds="2.92, 2.265, 0.15, 0.15">
<inPortMoniker name="//Network1/FBOr1/OrIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="ea4502b8-b826-4f8e-bf07-085cfa841fa4" absoluteBounds="2.92, 2.535, 0.15, 0.15">
<inPortMoniker name="//Network1/FBOr1/OrIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="1be3bc2f-fa2f-40bb-b9a8-4429d113a2d1" absoluteBounds="2.92, 2.805, 0.15, 0.15">
<inPortMoniker name="//Network1/FBOr1/OrIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="79d2acf0-1fe7-4d30-acf8-da6e36a62f37" absoluteBounds="2.92, 3.075, 0.15, 0.15">
<inPortMoniker name="//Network1/FBOr1/OrIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="a2ce6710-45cb-4f1e-9718-98639e6e3523" absoluteBounds="2.92, 3.345, 0.15, 0.15">
<inPortMoniker name="//Network1/FBOr1/OrIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="37c3639b-d76c-44b2-a86d-3e6121884fe1" absoluteBounds="2.92, 3.615, 0.15, 0.15">
<inPortMoniker name="//Network1/FBOr1/OrIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="561b8117-222a-4b32-97cf-12761ba701fe" absoluteBounds="2.92, 3.8850000000000002, 0.15, 0.15">
<inPortMoniker name="//Network1/FBOr1/OrIn8" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="34e89e0e-3ddf-4ef0-b9c8-4bce8e004bab" absoluteBounds="5.65, 3.615, 0.15, 0.15">
<outPortMoniker name="//Network1/FBOr1/OrOut" />
<relativeChildShapes />
</outPortShape>
</relativeChildShapes>
</fBOrShape>
</nestedChildShapes>
</networkSwimLane>
</nestedChildShapes>
</safetyApplicationLanguageDiagram>

29
TrialLicense.tclrs Normal file
View File

@@ -0,0 +1,29 @@
<?xml version="1.0"?>
<TcLicenseInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2011/11/TcLicenseInfo">
<LicenseInfo>
<SystemId>{684D9EC5-1AA3-C34B-154B-66D6728C6461}</SystemId>
<IssueTime>2024-01-04T12:18:00</IssueTime>
<ExpireTime>2024-01-12T00:00:00</ExpireTime>
<LicenseKey>5166847cce58453b9ea56a8358da8bb58fd849397589e797b20438c85eada3cf10d3fbd0fba794e0e63959a51e666c59648269ca406c024ab220c6d4b2fe53a1bf29ceabdda5bd88f8dc9685568c3897f3a3204f0e5e09ecf6a196877dacfea21c4aeff201ee27b429a7571cbd86102f0bbd00fdaaec7703d1f0c8d958a333da78f94cb9c99bf86f59dcc3d8c24ce4774a10acc77082a991d3e55e79dc5c374728eefb08b8e494944db71a282199b8f2d666d3c853dfd8ad3b38608a65f3d0a06d8648febc8dd21c4c47b3cd244c660d86bfc6afdac47dc4032062a39c0613303577570de8866631ce2f76dec59ab228c8605a05d6a2f121e1e02ea81b33383f</LicenseKey>
<License>
<LicenseId>{6952449D-F68C-49A2-ADE4-8639D85B33A4}</LicenseId>
<Name>TC3 Modbus-TCP</Name>
<OrderNo>TF6250</OrderNo>
</License>
<License>
<LicenseId>{4C256767-E6E6-4AF5-BD68-9F7ABAD0C200}</LicenseId>
<Name>TC3 ADS</Name>
<OrderNo>TC1000</OrderNo>
</License>
<License>
<LicenseId>{66689887-CCBD-452C-AC9A-039D997C6E66}</LicenseId>
<Name>TC3 PLC</Name>
<OrderNo>TC1200</OrderNo>
</License>
<License>
<LicenseId>{3FF18E97-7754-401B-93FB-70544DE28A13}</LicenseId>
<Name>TC3 IO</Name>
<OrderNo>TC1100</OrderNo>
</License>
</LicenseInfo>
</TcLicenseInfo>

4
Uniper.project.~u Normal file
View File

@@ -0,0 +1,4 @@
Matthias.Heisig
IT-HYB-PW07LBG3
19292
638399745216198512

90
Uniper.sln Normal file
View File

@@ -0,0 +1,90 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# TcXaeShell Solution File, Format Version 11.00
VisualStudioVersion = 15.0.33403.129
MinimumVisualStudioVersion = 10.0.40219.1
Project("{B1E792BE-AA5F-4E3C-8C82-674BF9C0715B}") = "Uniper", "Uniper.tsproj", "{24BCEDE3-526F-4D87-A687-3DBA9D107213}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|TwinCAT CE7 (ARMV7) = Debug|TwinCAT CE7 (ARMV7)
Debug|TwinCAT OS (ARMT2) = Debug|TwinCAT OS (ARMT2)
Debug|TwinCAT RT (x64) = Debug|TwinCAT RT (x64)
Debug|TwinCAT RT (x86) = Debug|TwinCAT RT (x86)
Release|TwinCAT CE7 (ARMV7) = Release|TwinCAT CE7 (ARMV7)
Release|TwinCAT OS (ARMT2) = Release|TwinCAT OS (ARMT2)
Release|TwinCAT RT (x64) = Release|TwinCAT RT (x64)
Release|TwinCAT RT (x86) = Release|TwinCAT RT (x86)
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{24BCEDE3-526F-4D87-A687-3DBA9D107213}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{9AE64910-5EB2-4866-93FD-EFE059C38C36}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{3F028238-46CF-458C-8DF3-E9A8FAA6AF8B}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Debug|TwinCAT CE7 (ARMV7).ActiveCfg = Debug|TwinCAT CE7 (ARMV7)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Debug|TwinCAT CE7 (ARMV7).Build.0 = Debug|TwinCAT CE7 (ARMV7)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Debug|TwinCAT OS (ARMT2).ActiveCfg = Debug|TwinCAT OS (ARMT2)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Debug|TwinCAT OS (ARMT2).Build.0 = Debug|TwinCAT OS (ARMT2)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Release|TwinCAT CE7 (ARMV7).ActiveCfg = Release|TwinCAT CE7 (ARMV7)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Release|TwinCAT CE7 (ARMV7).Build.0 = Release|TwinCAT CE7 (ARMV7)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Release|TwinCAT OS (ARMT2).ActiveCfg = Release|TwinCAT OS (ARMT2)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Release|TwinCAT OS (ARMT2).Build.0 = Release|TwinCAT OS (ARMT2)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{EFB0A11F-989C-4D9E-B375-03735C7E3BFF}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {34898A43-AD77-443B-BC87-573FA5C09B00}
EndGlobalSection
EndGlobal

4646
Uniper.tsproj Normal file

File diff suppressed because it is too large Load Diff

4643
Uniper.tsproj.bak Normal file

File diff suppressed because it is too large Load Diff

18
UniperEvents.tmc Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<TcModuleClass>
<DataTypes>
<DataType>
<Name GUID="{449AFAF7-1CB8-43A8-977D-36C33E7AFF6C}">General</Name>
<DisplayName TxtId=""><![CDATA[General alarms and infos]]></DisplayName>
<EventId>
<Name Id="1">NotAllCompInAutomatic</Name>
<DisplayName TxtId=""><![CDATA[Unit {0} not all components in automatic mode]]></DisplayName>
<Severity>Warning</Severity>
</EventId>
<Hides>
<Hide GUID="{2AC7C19C-D057-4107-A9DC-D12E37F9C437}"/>
<Hide GUID="{B2B1693C-04F1-434F-9927-39B63A3B2C0A}"/>
</Hides>
</DataType>
</DataTypes>
</TcModuleClass>

Binary file not shown.

View File

@@ -0,0 +1,9 @@
<?xml version="1.0"?>
<TcTargetDesc>
<TargetVersion>
<Version>3</Version>
<Revision>1</Revision>
<Build>4024</Build>
<Subbuild>53</Subbuild>
</TargetVersion>
</TcTargetDesc>

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,103 @@
<?xml version="1.0"?>
<TcEventSources Version="2">
<Source>
<GUID>{E80DD7BA-FA01-494C-9EFA-D70175C5A769}</GUID>
<Name LcId="1033">NewEventClass_DisplayText</Name>
<Event>
<Id>1</Id>
<Message LcId="1033">Valve {0} did not open</Message>
</Event>
<Event>
<Id>2</Id>
<Message LcId="1033">Valve {0} did not close</Message>
</Event>
<Event>
<Id>3</Id>
<Message LcId="1033">Valve {0} feedback open circuit</Message>
</Event>
<Event>
<Id>4</Id>
<Message LcId="1033">Valve {0} setpoint open circuit</Message>
</Event>
<Event>
<Id>5</Id>
<Message LcId="1033">Valve {0} not in range</Message>
</Event>
</Source>
<Source>
<GUID>{0B767148-8FC5-4340-B6EB-6151E49FC9FF}</GUID>
<Name LcId="1033">EventClass2_DisplayText</Name>
<Event>
<Id>1</Id>
<Message LcId="1033">{0} input open circuit</Message>
</Event>
<Event>
<Id>2</Id>
<Message LcId="1033">Analog Input {0} card error</Message>
</Event>
<Event>
<Id>3</Id>
<Message LcId="1033">Analog Input {0} short circuit</Message>
</Event>
<Event>
<Id>4</Id>
<Message LcId="1033">Analog Input {0} configuration error</Message>
</Event>
<Event>
<Id>5</Id>
<Message LcId="1033">Analog Input {0}: Input Value below error limit ({1})</Message>
</Event>
<Event>
<Id>6</Id>
<Message LcId="1033">Analog Input {0}: Input Value below warning limit ({1})</Message>
</Event>
<Event>
<Id>7</Id>
<Message LcId="1033">Analog Input {0}: Input Value above warning limit ({1})</Message>
</Event>
<Event>
<Id>8</Id>
<Message LcId="1033">Analog Input {0}: Input Value above error limit ({1})</Message>
</Event>
</Source>
<Source>
<GUID>{8BFB4FDD-3EEC-40D7-987E-004CDA8B9B54}</GUID>
<Name LcId="1033">EventClass3_DisplayText</Name>
<Event>
<Id>1</Id>
<Message LcId="1033">Analog output {0} config error</Message>
</Event>
</Source>
<Source>
<GUID>{BF1D9A4D-48E1-4CE9-9A52-161E93CC0C6D}</GUID>
<Name LcId="1033">Motor events</Name>
<Event>
<Id>1</Id>
<Message LcId="1033">Motor {0} MCB tripped</Message>
</Event>
<Event>
<Id>2</Id>
<Message LcId="1033">Motor {0} repair switch open</Message>
</Event>
<Event>
<Id>3</Id>
<Message LcId="1033">Motor {0} not in target</Message>
</Event>
</Source>
<Source>
<GUID>{C1141D67-F77A-4C56-9A6D-82359097C6E6}</GUID>
<Name LcId="1033">Safety door errors</Name>
<Event>
<Id>1</Id>
<Message LcId="1033">Safety Door {0} not ok</Message>
</Event>
</Source>
<Source>
<GUID>{449AFAF7-1CB8-43A8-977D-36C33E7AFF6C}</GUID>
<Name LcId="1033">General alarms and infos</Name>
<Event>
<Id>1</Id>
<Message LcId="1033">Unit {0} not all components in automatic mode</Message>
</Event>
</Source>
</TcEventSources>

Binary file not shown.

View File

@@ -0,0 +1 @@
ө<EFBFBD><EFBFBD>6<EFBFBD><EFBFBD>FU<EFBFBD>Qr<EFBFBD>;<3B>u

Binary file not shown.

View File

View File

View File

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
<EFBFBD><01><>\<5C><>أ<EFBFBD><D8A3><EFBFBD>K9<07>

Binary file not shown.

View File

View File

View File

Binary file not shown.