Minor bugfixes and future addons
This commit is contained in:
18
PLC/DUTs/E_CYCLE_STATUS.TcDUT
Normal file
18
PLC/DUTs/E_CYCLE_STATUS.TcDUT
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||||
|
<DUT Name="E_CYCLE_STATUS" Id="{163b5a12-1523-4982-80d8-ba87ebb439a8}">
|
||||||
|
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||||
|
{attribute 'strict'}
|
||||||
|
{attribute 'to_string'}
|
||||||
|
TYPE E_CYCLE_STATUS :
|
||||||
|
(
|
||||||
|
OFF := 0,
|
||||||
|
CHARGE_STARTED := 1,
|
||||||
|
CHARGE_ENDED := 2,
|
||||||
|
DISCHARGE_STARTED := 3,
|
||||||
|
DISCHARGE_ENDED := 4
|
||||||
|
);
|
||||||
|
END_TYPE
|
||||||
|
]]></Declaration>
|
||||||
|
</DUT>
|
||||||
|
</TcPlcObject>
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||||
<DUT Name="ST_MODBUS_REG_10" Id="{0c25ea41-552d-4ad4-8369-cc4ac1877b46}">
|
<DUT Name="ST_MODBUS_REG_10" Id="{0c25ea41-552d-4ad4-8369-cc4ac1877b46}">
|
||||||
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||||
|
{attribute 'pack_mode' := '1'}
|
||||||
TYPE ST_MODBUS_REG_10 :
|
TYPE ST_MODBUS_REG_10 :
|
||||||
STRUCT
|
STRUCT
|
||||||
// Addr: 10.000
|
// Addr: 10.000
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||||
<DUT Name="ST_MODBUS_REG_11" Id="{7e772293-d4e3-4809-9da8-3d4e0412ede6}">
|
<DUT Name="ST_MODBUS_REG_11" Id="{7e772293-d4e3-4809-9da8-3d4e0412ede6}">
|
||||||
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||||
|
{attribute 'pack_mode' := '1'}
|
||||||
TYPE ST_MODBUS_REG_11 :
|
TYPE ST_MODBUS_REG_11 :
|
||||||
STRUCT
|
STRUCT
|
||||||
// Addr: 11.000
|
// Addr: 11.000
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||||
<DUT Name="ST_MODBUS_REG_12" Id="{7c428918-2d8d-43ab-8096-edbee8bd4171}">
|
<DUT Name="ST_MODBUS_REG_12" Id="{7c428918-2d8d-43ab-8096-edbee8bd4171}">
|
||||||
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
|
||||||
|
{attribute 'pack_mode' := '1'}
|
||||||
TYPE ST_MODBUS_REG_12 :
|
TYPE ST_MODBUS_REG_12 :
|
||||||
STRUCT
|
STRUCT
|
||||||
// Unit: W
|
// Unit: W
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||||
<DUT Name="ST_MODULE_HMI_INTERFACE" Id="{11e89a54-55b7-4731-b5d2-c1f68fd12879}">
|
<DUT Name="ST_MODULE_HMI_INTERFACE" Id="{11e89a54-55b7-4731-b5d2-c1f68fd12879}">
|
||||||
<Declaration><![CDATA[TYPE ST_MODULE_HMI_INTERFACE :
|
<Declaration><![CDATA[TYPE ST_MODULE_HMI_INTERFACE :
|
||||||
STRUCT
|
STRUCT
|
||||||
@@ -12,6 +12,10 @@ STRUCT
|
|||||||
// ==============================
|
// ==============================
|
||||||
rVoltage : REAL;
|
rVoltage : REAL;
|
||||||
|
|
||||||
|
// Current current for HMI
|
||||||
|
// ==============================
|
||||||
|
rCurrent : REAL;
|
||||||
|
|
||||||
// Current status
|
// Current status
|
||||||
// ====================================
|
// ====================================
|
||||||
eStatus : E_COMPONENT_STATUS;
|
eStatus : E_COMPONENT_STATUS;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||||
<DUT Name="ST_STRING_HMI_INTERFACE" Id="{b74e184a-a1d0-4499-8ac0-7e2226af9a4f}">
|
<DUT Name="ST_STRING_HMI_INTERFACE" Id="{b74e184a-a1d0-4499-8ac0-7e2226af9a4f}">
|
||||||
<Declaration><![CDATA[TYPE ST_STRING_HMI_INTERFACE :
|
<Declaration><![CDATA[TYPE ST_STRING_HMI_INTERFACE :
|
||||||
STRUCT
|
STRUCT
|
||||||
@@ -11,13 +11,17 @@ STRUCT
|
|||||||
// ==============================
|
// ==============================
|
||||||
rVoltage : REAL;
|
rVoltage : REAL;
|
||||||
|
|
||||||
|
// Current current for HMI
|
||||||
|
// ==============================
|
||||||
|
rCurrent : REAL;
|
||||||
|
|
||||||
// Current status
|
// Current status
|
||||||
// ====================================
|
// ====================================
|
||||||
eStatus : E_COMPONENT_STATUS;
|
eStatus : E_COMPONENT_STATUS;
|
||||||
|
|
||||||
// Current string current
|
// Current string current
|
||||||
// ==============================
|
// ==============================
|
||||||
stStringCurrent : ST_HMI_ANALOG_VALUE;
|
//stStringCurrent : ST_HMI_ANALOG_VALUE;
|
||||||
|
|
||||||
// Current inverter data
|
// Current inverter data
|
||||||
// ==============================
|
// ==============================
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||||
<DUT Name="ST_UNIT_HMI_INTERFACE" Id="{a46d51f7-c17c-44e4-be59-edb877b3b5dc}">
|
<DUT Name="ST_UNIT_HMI_INTERFACE" Id="{a46d51f7-c17c-44e4-be59-edb877b3b5dc}">
|
||||||
<Declaration><![CDATA[TYPE ST_UNIT_HMI_INTERFACE :
|
<Declaration><![CDATA[TYPE ST_UNIT_HMI_INTERFACE :
|
||||||
STRUCT
|
STRUCT
|
||||||
@@ -54,6 +54,12 @@ STRUCT
|
|||||||
// ==============================
|
// ==============================
|
||||||
rVoltage : REAL;
|
rVoltage : REAL;
|
||||||
|
|
||||||
|
|
||||||
|
// Current current for HMI
|
||||||
|
// ==============================
|
||||||
|
rCurrent : REAL;
|
||||||
|
|
||||||
|
|
||||||
// Current status
|
// Current status
|
||||||
// ====================================
|
// ====================================
|
||||||
eStatus : E_COMPONENT_STATUS;
|
eStatus : E_COMPONENT_STATUS;
|
||||||
@@ -61,7 +67,7 @@ STRUCT
|
|||||||
|
|
||||||
// Aknowledge all alarms button
|
// Aknowledge all alarms button
|
||||||
// ===================================
|
// ===================================
|
||||||
stButtonAckAlarms : ST_HMI_CONTROL_BUTTON;
|
//stButtonAckAlarms : ST_HMI_CONTROL_BUTTON;
|
||||||
|
|
||||||
END_STRUCT
|
END_STRUCT
|
||||||
END_TYPE
|
END_TYPE
|
||||||
|
|||||||
@@ -180,75 +180,21 @@ VAR_GLOBAL PERSISTENT
|
|||||||
stEWLSCSCurrent : ST_ANALOG_EW_LEVELS;
|
stEWLSCSCurrent : ST_ANALOG_EW_LEVELS;
|
||||||
stEWDSCSCurrent : ST_ANALOG_EW_DELAYS;
|
stEWDSCSCurrent : ST_ANALOG_EW_DELAYS;
|
||||||
|
|
||||||
// ===========================
|
|
||||||
// Part shortage workaround
|
|
||||||
// ===========================
|
|
||||||
stConfigVoltageSegment1500 : ST_ANALOG_IO_CONFIG := (iAIMax := 32767, iAIMin := 0, rPVMax := 1500, rPVMin := 0, sUnit := 'V');
|
|
||||||
stString1VoltageConfig : ST_STRING_VOLT_CONFIG :=
|
|
||||||
(
|
|
||||||
stModule1VoltConfig :=
|
|
||||||
(
|
|
||||||
xUnit1Is1500V := FALSE,
|
|
||||||
xUnit2Is1500V := TRUE,
|
|
||||||
xUnit3Is1500V := TRUE,
|
|
||||||
xUnit4Is1500V := TRUE
|
|
||||||
),
|
|
||||||
|
|
||||||
stModule2VoltConfig :=
|
|
||||||
(
|
|
||||||
xUnit1Is1500V := FALSE,
|
|
||||||
xUnit2Is1500V := FALSE,
|
|
||||||
xUnit3Is1500V := FALSE,
|
|
||||||
xUnit4Is1500V := FALSE
|
|
||||||
),
|
|
||||||
|
|
||||||
stModule3VoltConfig :=
|
|
||||||
(
|
|
||||||
xUnit1Is1500V := FALSE,
|
|
||||||
xUnit2Is1500V := TRUE,
|
|
||||||
xUnit3Is1500V := TRUE,
|
|
||||||
xUnit4Is1500V := TRUE
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
stString2VoltageConfig : ST_STRING_VOLT_CONFIG :=
|
|
||||||
(
|
|
||||||
stModule1VoltConfig :=
|
|
||||||
(
|
|
||||||
xUnit1Is1500V := FALSE,
|
|
||||||
xUnit2Is1500V := TRUE,
|
|
||||||
xUnit3Is1500V := TRUE,
|
|
||||||
xUnit4Is1500V := TRUE
|
|
||||||
),
|
|
||||||
|
|
||||||
stModule2VoltConfig :=
|
|
||||||
(
|
|
||||||
xUnit1Is1500V := FALSE,
|
|
||||||
xUnit2Is1500V := TRUE,
|
|
||||||
xUnit3Is1500V := TRUE,
|
|
||||||
xUnit4Is1500V := TRUE
|
|
||||||
),
|
|
||||||
|
|
||||||
stModule3VoltConfig :=
|
|
||||||
(
|
|
||||||
xUnit1Is1500V := FALSE,
|
|
||||||
xUnit2Is1500V := TRUE,
|
|
||||||
xUnit3Is1500V := TRUE,
|
|
||||||
xUnit4Is1500V := TRUE
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// ===========================
|
// ===========================
|
||||||
// General settings
|
// General settings
|
||||||
// ===========================
|
// ===========================
|
||||||
|
|
||||||
// Pump on power (%)
|
// Pump posolyt on power in %
|
||||||
rPumpPosolytOnPower : REAL := 65.0;
|
rPumpPosolytOnPower : REAL := 65.0;
|
||||||
|
|
||||||
|
// Pump negolyt on power in %
|
||||||
rPumpNegolytOnPower : REAL := 65.0;
|
rPumpNegolytOnPower : REAL := 65.0;
|
||||||
|
|
||||||
// Pump discharge segment without inverter power (%)
|
// Pump posolyt discharge segment without inverter power in %
|
||||||
rPumpPosolytDisChrgPower : REAL := 45.0;
|
rPumpPosolytDisChrgPower : REAL := 45.0;
|
||||||
|
|
||||||
|
// Pump posolyt discharge segment without inverter power in %
|
||||||
rPumpNegolytDisChrgPower : REAL := 45.0;
|
rPumpNegolytDisChrgPower : REAL := 45.0;
|
||||||
|
|
||||||
// Unit voltage pumps shutoff threshold (Volt)
|
// Unit voltage pumps shutoff threshold (Volt)
|
||||||
@@ -315,6 +261,7 @@ VAR_GLOBAL PERSISTENT
|
|||||||
timIsoErrorTimeout : TIME := T#20s;
|
timIsoErrorTimeout : TIME := T#20s;
|
||||||
|
|
||||||
// Dummy to deactivate functions
|
// Dummy to deactivate functions
|
||||||
|
{attribute 'analysis' := '-33'}
|
||||||
xDummy : BOOL := FALSE;
|
xDummy : BOOL := FALSE;
|
||||||
|
|
||||||
END_VAR]]></Declaration>
|
END_VAR]]></Declaration>
|
||||||
|
|||||||
@@ -1,18 +1,15 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.7">
|
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
|
||||||
<GVL Name="GVL_SCADA" Id="{8186ff04-764f-4b24-8a6b-d0a44d528e6f}">
|
<GVL Name="GVL_SCADA" Id="{8186ff04-764f-4b24-8a6b-d0a44d528e6f}">
|
||||||
<Declaration><![CDATA[{attribute 'qualified_only'}
|
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||||
VAR_GLOBAL
|
VAR_GLOBAL
|
||||||
|
// Array for string HMI
|
||||||
stHMIInterface : ARRAY [0..1] OF ST_STRING_HMI_INTERFACE;
|
stHMIInterface : ARRAY [0..1] OF ST_STRING_HMI_INTERFACE;
|
||||||
|
|
||||||
|
// Acknowledge alarm button
|
||||||
stAckAlarmsButton : ST_HMI_CONTROL_BUTTON := (xRelease := TRUE);
|
stAckAlarmsButton : ST_HMI_CONTROL_BUTTON := (xRelease := TRUE);
|
||||||
|
|
||||||
// Butotn to switch all components into manual mode
|
// HMI interface to control the battery throught the HMI
|
||||||
stAllToManualModeButton : ST_HMI_CONTROL_BUTTON;
|
|
||||||
|
|
||||||
// Button to switch all components in to automatic mode
|
|
||||||
stAllToAutoModeButton : ST_HMI_CONTROL_BUTTON;
|
|
||||||
|
|
||||||
stAutomaticModeHMI : ST_AUTO_HMI_INTERFACE;
|
stAutomaticModeHMI : ST_AUTO_HMI_INTERFACE;
|
||||||
|
|
||||||
// Requested control mode by HMI
|
// Requested control mode by HMI
|
||||||
@@ -27,6 +24,18 @@ VAR_GLOBAL
|
|||||||
// Current battery power
|
// Current battery power
|
||||||
diCurrentBatteryPower : DINT;
|
diCurrentBatteryPower : DINT;
|
||||||
|
|
||||||
|
// Last power charged value
|
||||||
|
lrChargedPowerValueWH : LREAL;
|
||||||
|
|
||||||
|
// Last power discharged value
|
||||||
|
lrDischargedPowerValueWH : LREAL;
|
||||||
|
|
||||||
|
// Last discharged utility power value
|
||||||
|
lrLastCycleUtilityPowerValueWh : LREAL;
|
||||||
|
|
||||||
|
// Cycle status
|
||||||
|
eCycleStatus : E_CYCLE_STATUS;
|
||||||
|
|
||||||
xDummy : BOOL := FALSE;
|
xDummy : BOOL := FALSE;
|
||||||
END_VAR]]></Declaration>
|
END_VAR]]></Declaration>
|
||||||
</GVL>
|
</GVL>
|
||||||
|
|||||||
@@ -18,17 +18,11 @@
|
|||||||
<LibraryReferences>{106b5199-0018-4919-a06c-2ea0dd3e1070}</LibraryReferences>
|
<LibraryReferences>{106b5199-0018-4919-a06c-2ea0dd3e1070}</LibraryReferences>
|
||||||
<DeploymentEvents>
|
<DeploymentEvents>
|
||||||
<Events>
|
<Events>
|
||||||
<Event>
|
|
||||||
<CommandType RunAsAdmin="false">Execute</CommandType>
|
|
||||||
<DeploymentType>ActivateConfiguration</DeploymentType>
|
|
||||||
<Command1>get_commit_hash.bat</Command1>
|
|
||||||
<Command2 />
|
|
||||||
</Event>
|
|
||||||
<Event>
|
<Event>
|
||||||
<CommandType>Copy</CommandType>
|
<CommandType>Copy</CommandType>
|
||||||
<DeploymentType>ActivateConfiguration</DeploymentType>
|
<DeploymentType>ActivateConfiguration</DeploymentType>
|
||||||
<Command1>%SOLUTIONPATH%\commit.txt</Command1>
|
<Command1 />
|
||||||
<Command2>%TC_BOOTPRJPATH%\commit.txt</Command2>
|
<Command2 />
|
||||||
</Event>
|
</Event>
|
||||||
</Events>
|
</Events>
|
||||||
</DeploymentEvents>
|
</DeploymentEvents>
|
||||||
@@ -54,6 +48,9 @@
|
|||||||
<Compile Include="DUTs\E_CHARGE_STATUS.TcDUT">
|
<Compile Include="DUTs\E_CHARGE_STATUS.TcDUT">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="DUTs\E_CYCLE_STATUS.TcDUT">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="DUTs\E_REACTIVE_POWER_TYPE.TcDUT">
|
<Compile Include="DUTs\E_REACTIVE_POWER_TYPE.TcDUT">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -215,8 +212,8 @@
|
|||||||
<ProjectExtensions>
|
<ProjectExtensions>
|
||||||
<PlcProjectOptions>
|
<PlcProjectOptions>
|
||||||
<XmlArchive>
|
<XmlArchive>
|
||||||
<Data>
|
<Data>
|
||||||
<o xml:space="preserve" t="OptionKey">
|
<o xml:space="preserve" t="OptionKey">
|
||||||
<v n="Name">"<ProjectRoot>"</v>
|
<v n="Name">"<ProjectRoot>"</v>
|
||||||
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
|
<d n="SubKeys" t="Hashtable" ckt="String" cvt="OptionKey">
|
||||||
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
|
<v>{192FAD59-8248-4824-A8DE-9177C94C195A}</v>
|
||||||
@@ -2574,7 +2571,7 @@
|
|||||||
<d n="SubKeys" t="Hashtable" />
|
<d n="SubKeys" t="Hashtable" />
|
||||||
<d n="Values" t="Hashtable" ckt="String" cvt="String">
|
<d n="Values" t="Hashtable" ckt="String" cvt="String">
|
||||||
<v>ActiveVisuProfile</v>
|
<v>ActiveVisuProfile</v>
|
||||||
<v>IR0whWr8bwcQCAAAvtPOEQAAAACAAgAA+0n2LwAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA2AC4ANAAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVHlYAaQBzAHUARQBsAGUAbQBYAFkAQwBoAGEAcgB0ABYiVgBpAHMAdQBOAGEAdABpAHYAZQBDAG8AbgB0AHIAbwBsABcUVgBpAHMAdQBJAG4AcAB1AHQAcwAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC0McwB5AHMAdABlAG0ALkg2AGMAYgAxAGMAZABlADEALQBkADUAZABjAC0ANABhADMAYgAtADkAMAA1ADQALQAyADEAZgBhADcANQA2AGEAMwBmAGEANAAvKEkAbgB0AGUAcgBmAGEAYwBlAFYAZQByAHMAaQBvAG4ASQBuAGYAbwAwTHsAYwA2ADEAMQBlADQAMAAwAC0ANwBmAGIAOQAtADQAYwAzADUALQBiADkAYQBjAC0ANABlADMAMQA0AGIANQA5ADkANgA0ADMAfQAxGE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuADIYTQBpAG4AbwByAFYAZQByAHMAaQBvAG4AMwxMAGUAZwBhAGMAeQA0MEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwAVgBlAHIAcwBpAG8AbgBJAG4AZgBvADUwTABvAGEAZABMAGkAYgByAGEAcgBpAGUAcwBJAG4AdABvAFAAcgBvAGoAZQBjAHQANhpDAG8AbQBwAGEAdABpAGIAaQBsAGkAdAB5ANAAAhoD0AMBLQTQBQYaB9AHCBoBRQcJCdAACRoERQoLBAQAAAAFAAAAAAAAAAAAAADQDAutAgAAANANAS0O0A8BLRDQAAkaBEUKCwQEAAAABQAAAAAAAAAAAAAA0AwLrQEAAADQDQEtEdAPAS0Q0AAJGgRFCgsEBAAAAAUAAAAAAAAAAAAAANAMC60CAAAA0A0BLRLQDwEtENAACRoERQoLBAQAAAAFAAAAAAAAAAAAAADQDAutAgAAANANAS0T0A8BLRDQAAkaBEUKCwQEAAAABQAAAAAAAAAAAAAA0AwLrQIAAADQDQEtFNAPAS0Q0AAJGgRFCgsEBAAAAAUAAAAAAAAAAAAAANAMC60CAAAA0A0BLRXQDwEtENAACRoERQoLBAQAAAAFAAAAAAAAAAAAAADQDAutAgAAANANAS0W0A8BLRDQAAkaBEUKCwQEAAAABQAAAAAAAAAAAAAA0AwLrQIAAADQDQEtF9APAS0Q0AAJGgRFCgsEBAAAAAUAAAAAAAAAAAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAQAAAACAAAAAAAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtLdAAHy0u0C8wGgPQMQutAQAAANAyC60jAAAA0DMarQDQNDAaA9AxC60CAAAA0DILrQYAAADQMxqtANA1Gq0A0DYarQA=</v>
|
<v>IR0whWr8bwcQCAAAY7rhNAAAAACAAgAAGMPQIgAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDBUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA2AC4ANwAFFlAAcgBvAGYAaQBsAGUARABhAHQAYQAGTHsAMQA2AGUANQA1AGIANgAwAC0ANwAwADQAMwAtADQAYQA2ADMALQBiADYANQBiAC0ANgAxADQANwAxADMAOAA3ADgAZAA0ADIAfQAHEkwAaQBiAHIAYQByAGkAZQBzAAhMewAzAGIAZgBkADUANAA1ADkALQBiADAANwBmAC0ANABkADYAZQAtAGEAZQAxAGEALQBhADgAMwAzADUANgBhADUANQAxADQAMgB9AAlMewA5AGMAOQA1ADgAOQA2ADgALQAyAGMAOAA1AC0ANAAxAGIAYgAtADgAOAA3ADEALQA4ADkANQBmAGYAMQBmAGUAZABlADEAYQB9AAoOVgBlAHIAcwBpAG8AbgALBmkAbgB0AAwKVQBzAGEAZwBlAA0KVABpAHQAbABlAA4aVgBpAHMAdQBFAGwAZQBtAE0AZQB0AGUAcgAPDkMAbwBtAHAAYQBuAHkAEAxTAHkAcwB0AGUAbQARElYAaQBzAHUARQBsAGUAbQBzABIwVgBpAHMAdQBFAGwAZQBtAHMAUwBwAGUAYwBpAGEAbABDAG8AbgB0AHIAbwBsAHMAEyhWAGkAcwB1AEUAbABlAG0AcwBXAGkAbgBDAG8AbgB0AHIAbwBsAHMAFCRWAGkAcwB1AEUAbABlAG0AVABlAHgAdABFAGQAaQB0AG8AcgAVIlYAaQBzAHUATgBhAHQAaQB2AGUAQwBvAG4AdAByAG8AbAAWHlYAaQBzAHUARQBsAGUAbQBYAFkAQwBoAGEAcgB0ABcUVgBpAHMAdQBJAG4AcAB1AHQAcwAYGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABkmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAaCGIAbwBvAGwAGyJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAHEx7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHRxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHhRQAGwAdQBnAGkAbgBHAHUAaQBkAB8WUwB5AHMAdABlAG0ALgBHAHUAaQBkACBIYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIRRVAHAAZABhAHQAZQBJAG4AZgBvACJMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACMOVQBwAGQAYQB0AGUAcwAkTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAlTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAmFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAnVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACgQTABpAGIAVABpAHQAbABlACkUTABpAGIAQwBvAG0AcABhAG4AeQAqHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACs4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQAsEnYAaQBzAHUAZQBsAGUAbQBzAC0McwB5AHMAdABlAG0ALkg2AGMAYgAxAGMAZABlADEALQBkADUAZABjAC0ANABhADMAYgAtADkAMAA1ADQALQAyADEAZgBhADcANQA2AGEAMwBmAGEANAAvKEkAbgB0AGUAcgBmAGEAYwBlAFYAZQByAHMAaQBvAG4ASQBuAGYAbwAwTHsAYwA2ADEAMQBlADQAMAAwAC0ANwBmAGIAOQAtADQAYwAzADUALQBiADkAYQBjAC0ANABlADMAMQA0AGIANQA5ADkANgA0ADMAfQAxGE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuADIYTQBpAG4AbwByAFYAZQByAHMAaQBvAG4AMwxMAGUAZwBhAGMAeQA0MEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwAVgBlAHIAcwBpAG8AbgBJAG4AZgBvADUwTABvAGEAZABMAGkAYgByAGEAcgBpAGUAcwBJAG4AdABvAFAAcgBvAGoAZQBjAHQANhpDAG8AbQBwAGEAdABpAGIAaQBsAGkAdAB5ANAAAhoD0AMBLQTQBQYaB9AHCBoBRQcJCdAACRoERQoLBAQAAAAGAAAAAAAAAAAAAADQDAutAgAAANANAS0O0A8BLRDQAAkaBEUKCwQEAAAABgAAAAAAAAAAAAAA0AwLrQEAAADQDQEtEdAPAS0Q0AAJGgRFCgsEBAAAAAYAAAAAAAAAAAAAANAMC60CAAAA0A0BLRLQDwEtENAACRoERQoLBAQAAAAGAAAAAAAAAAAAAADQDAutAgAAANANAS0T0A8BLRDQAAkaBEUKCwQEAAAABgAAAAAAAAAAAAAA0AwLrQIAAADQDQEtFNAPAS0Q0AAJGgRFCgsEBAAAAAYAAAAAAAAAAAAAANAMC60CAAAA0A0BLRXQDwEtENAACRoERQoLBAQAAAAGAAAAAAAAAAAAAADQDAutAgAAANANAS0W0A8BLRDQAAkaBEUKCwQEAAAABgAAAAAAAAAAAAAA0AwLrQIAAADQDQEtF9APAS0Q0AAJGgRFCgsEBAAAAAYAAAAAAAAAAAAAANAMC60EAAAA0A0BLRjQDwEtENAZGq0BRRscAdAAHBoCRR0LBAQAAAACAAAAAAAAAAAAAADQHh8tINAhIhoCRSMkAtAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAAAAANADAS0n0CgBLRHQKQEtENAAJRoFRQoLBAMAAAADAAAAAAAAAAoAAADQJgutAQAAANADAS0n0CgBLRHQKQEtEJoqKwFFAAEC0AABLSzQAAEtLdAAHy0u0C8wGgPQMQutAQAAANAyC60jAAAA0DMarQDQNDAaA9AxC60CAAAA0DILrQYAAADQMxqtANA1Gq0A0DYarQA=</v>
|
||||||
</d>
|
</d>
|
||||||
</o>
|
</o>
|
||||||
<v>{8A0FB252-96EB-4DCC-A5B4-B4804D05E2D6}</v>
|
<v>{8A0FB252-96EB-4DCC-A5B4-B4804D05E2D6}</v>
|
||||||
@@ -2598,16 +2595,16 @@
|
|||||||
</d>
|
</d>
|
||||||
<d n="Values" t="Hashtable" />
|
<d n="Values" t="Hashtable" />
|
||||||
</o>
|
</o>
|
||||||
</Data>
|
</Data>
|
||||||
<TypeList>
|
<TypeList>
|
||||||
<Type n="Boolean">System.Boolean</Type>
|
<Type n="Boolean">System.Boolean</Type>
|
||||||
<Type n="Hashtable">System.Collections.Hashtable</Type>
|
<Type n="Hashtable">System.Collections.Hashtable</Type>
|
||||||
<Type n="Int32">System.Int32</Type>
|
<Type n="Int32">System.Int32</Type>
|
||||||
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
|
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
|
||||||
<Type n="String">System.String</Type>
|
<Type n="String">System.String</Type>
|
||||||
<Type n="UInt32">System.UInt32</Type>
|
<Type n="UInt32">System.UInt32</Type>
|
||||||
</TypeList>
|
</TypeList>
|
||||||
</XmlArchive>
|
</XmlArchive>
|
||||||
</PlcProjectOptions>
|
</PlcProjectOptions>
|
||||||
</ProjectExtensions>
|
</ProjectExtensions>
|
||||||
</Project>
|
</Project>
|
||||||
506
PLC/PLC.tmc
506
PLC/PLC.tmc
File diff suppressed because one or more lines are too long
@@ -12,9 +12,6 @@ VAR_INPUT
|
|||||||
// Start balancing
|
// Start balancing
|
||||||
xStartBalancing : BOOL;
|
xStartBalancing : BOOL;
|
||||||
|
|
||||||
// Component shortage workaround
|
|
||||||
stModuleVoltageConfig : ST_MODULE_VOLT_CONFIG;
|
|
||||||
|
|
||||||
// Module in safety check mode
|
// Module in safety check mode
|
||||||
xInSafetyCheckMode : BOOL;
|
xInSafetyCheckMode : BOOL;
|
||||||
|
|
||||||
@@ -57,6 +54,10 @@ VAR_INPUT
|
|||||||
// Leakage tank
|
// Leakage tank
|
||||||
xLeakageTank AT %I* : BOOL;
|
xLeakageTank AT %I* : BOOL;
|
||||||
|
|
||||||
|
// Current current value from string to copy to HMI interface
|
||||||
|
rCurrent : REAL;
|
||||||
|
|
||||||
|
// Current EtherCAT state
|
||||||
uiECState AT %I* : UINT;
|
uiECState AT %I* : UINT;
|
||||||
END_VAR
|
END_VAR
|
||||||
VAR_OUTPUT
|
VAR_OUTPUT
|
||||||
@@ -117,16 +118,9 @@ VAR
|
|||||||
// Connection lost alarm
|
// Connection lost alarm
|
||||||
_fbConnLostAlarm : FB_TcAlarm;
|
_fbConnLostAlarm : FB_TcAlarm;
|
||||||
|
|
||||||
// Enable balance check
|
|
||||||
_xEnableBalanceCheck : BOOL;
|
|
||||||
|
|
||||||
// Module name
|
// Module name
|
||||||
_sName : STRING;
|
_sName : STRING;
|
||||||
|
|
||||||
// Moving average filter for module voltage
|
|
||||||
//_fbMAFVoltage : FB_MovingAverageFilter;
|
|
||||||
//_arMAFVoltage : ARRAY[0..9] OF REAL;
|
|
||||||
|
|
||||||
_fbBalanceNotOkSignal : FB_ReleaseSignal;
|
_fbBalanceNotOkSignal : FB_ReleaseSignal;
|
||||||
|
|
||||||
_xECModuleInOP : BOOL;
|
_xECModuleInOP : BOOL;
|
||||||
@@ -220,7 +214,6 @@ _fbUnit1(
|
|||||||
xEnable := xEnable,
|
xEnable := xEnable,
|
||||||
xStartBalancing := xStartBalancing,
|
xStartBalancing := xStartBalancing,
|
||||||
xInverterEnabled := xInverterEnabled,
|
xInverterEnabled := xInverterEnabled,
|
||||||
xVoltageSensorIs1500V := stModuleVoltageConfig.xUnit1Is1500V,
|
|
||||||
xInSafetyCheckMode := xInSafetyCheckMode,
|
xInSafetyCheckMode := xInSafetyCheckMode,
|
||||||
stUnitConfig:= GVL_CONFIG.stUnitConfig,
|
stUnitConfig:= GVL_CONFIG.stUnitConfig,
|
||||||
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit1,
|
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit1,
|
||||||
@@ -230,8 +223,9 @@ _fbUnit1(
|
|||||||
xConfirmAlarms:= xConfirmAlarms,
|
xConfirmAlarms:= xConfirmAlarms,
|
||||||
xReleaseManualMode := xReleaseManualMode,
|
xReleaseManualMode := xReleaseManualMode,
|
||||||
rBalancingTargetVoltage := rBalancingTargetVoltage,
|
rBalancingTargetVoltage := rBalancingTargetVoltage,
|
||||||
xAllToManualMode := xAllToManualMode,
|
xAllToManualMode := xAllToManualMode);
|
||||||
_xWarningConfirmPending=> );
|
|
||||||
|
refstHMIInterface.stHMIInterfaceUnit1.rCurrent := rCurrent;
|
||||||
|
|
||||||
IF _fbUnit1.xWarning THEN
|
IF _fbUnit1.xWarning THEN
|
||||||
xWarning := TRUE;
|
xWarning := TRUE;
|
||||||
@@ -258,7 +252,6 @@ _fbUnit2(
|
|||||||
xEnable := xEnable,
|
xEnable := xEnable,
|
||||||
xStartBalancing := xStartBalancing,
|
xStartBalancing := xStartBalancing,
|
||||||
xInverterEnabled := xInverterEnabled,
|
xInverterEnabled := xInverterEnabled,
|
||||||
xVoltageSensorIs1500V := stModuleVoltageConfig.xUnit2Is1500V,
|
|
||||||
xInSafetyCheckMode := xInSafetyCheckMode,
|
xInSafetyCheckMode := xInSafetyCheckMode,
|
||||||
stUnitConfig:= GVL_CONFIG.stUnitConfig,
|
stUnitConfig:= GVL_CONFIG.stUnitConfig,
|
||||||
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit2,
|
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit2,
|
||||||
@@ -268,8 +261,9 @@ _fbUnit2(
|
|||||||
xConfirmAlarms:= xConfirmAlarms,
|
xConfirmAlarms:= xConfirmAlarms,
|
||||||
xReleaseManualMode := xReleaseManualMode,
|
xReleaseManualMode := xReleaseManualMode,
|
||||||
rBalancingTargetVoltage := rBalancingTargetVoltage,
|
rBalancingTargetVoltage := rBalancingTargetVoltage,
|
||||||
xAllToManualMode := xAllToManualMode,
|
xAllToManualMode := xAllToManualMode);
|
||||||
_xWarningConfirmPending=> );
|
|
||||||
|
refstHMIInterface.stHMIInterfaceUnit2.rCurrent := rCurrent;
|
||||||
|
|
||||||
IF _fbUnit2.xWarning THEN
|
IF _fbUnit2.xWarning THEN
|
||||||
xWarning := TRUE;
|
xWarning := TRUE;
|
||||||
@@ -296,7 +290,6 @@ _fbUnit3(
|
|||||||
xEnable := xEnable,
|
xEnable := xEnable,
|
||||||
xStartBalancing := xStartBalancing,
|
xStartBalancing := xStartBalancing,
|
||||||
xInverterEnabled := xInverterEnabled,
|
xInverterEnabled := xInverterEnabled,
|
||||||
xVoltageSensorIs1500V := stModuleVoltageConfig.xUnit3Is1500V,
|
|
||||||
xInSafetyCheckMode := xInSafetyCheckMode,
|
xInSafetyCheckMode := xInSafetyCheckMode,
|
||||||
stUnitConfig:= GVL_CONFIG.stUnitConfig,
|
stUnitConfig:= GVL_CONFIG.stUnitConfig,
|
||||||
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit3,
|
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit3,
|
||||||
@@ -306,8 +299,9 @@ _fbUnit3(
|
|||||||
xConfirmAlarms:= xConfirmAlarms,
|
xConfirmAlarms:= xConfirmAlarms,
|
||||||
xReleaseManualMode := xReleaseManualMode,
|
xReleaseManualMode := xReleaseManualMode,
|
||||||
rBalancingTargetVoltage := rBalancingTargetVoltage,
|
rBalancingTargetVoltage := rBalancingTargetVoltage,
|
||||||
xAllToManualMode := xAllToManualMode,
|
xAllToManualMode := xAllToManualMode);
|
||||||
_xWarningConfirmPending=> );
|
|
||||||
|
refstHMIInterface.stHMIInterfaceUnit3.rCurrent := rCurrent;
|
||||||
|
|
||||||
IF _fbUnit3.xWarning THEN
|
IF _fbUnit3.xWarning THEN
|
||||||
xWarning := TRUE;
|
xWarning := TRUE;
|
||||||
@@ -334,7 +328,6 @@ _fbUnit4(
|
|||||||
xEnable := xEnable,
|
xEnable := xEnable,
|
||||||
xStartBalancing := xStartBalancing,
|
xStartBalancing := xStartBalancing,
|
||||||
xInverterEnabled := xInverterEnabled,
|
xInverterEnabled := xInverterEnabled,
|
||||||
xVoltageSensorIs1500V := stModuleVoltageConfig.xUnit4Is1500V,
|
|
||||||
xInSafetyCheckMode := xInSafetyCheckMode,
|
xInSafetyCheckMode := xInSafetyCheckMode,
|
||||||
stUnitConfig:= GVL_CONFIG.stUnitConfig,
|
stUnitConfig:= GVL_CONFIG.stUnitConfig,
|
||||||
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit4,
|
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit4,
|
||||||
@@ -344,8 +337,9 @@ _fbUnit4(
|
|||||||
xConfirmAlarms:= xConfirmAlarms,
|
xConfirmAlarms:= xConfirmAlarms,
|
||||||
xReleaseManualMode := xReleaseManualMode,
|
xReleaseManualMode := xReleaseManualMode,
|
||||||
rBalancingTargetVoltage := rBalancingTargetVoltage,
|
rBalancingTargetVoltage := rBalancingTargetVoltage,
|
||||||
xAllToManualMode := xAllToManualMode,
|
xAllToManualMode := xAllToManualMode);
|
||||||
_xWarningConfirmPending=> );
|
|
||||||
|
refstHMIInterface.stHMIInterfaceUnit4.rCurrent := rCurrent;
|
||||||
|
|
||||||
IF _fbUnit4.xWarning THEN
|
IF _fbUnit4.xWarning THEN
|
||||||
xWarning := TRUE;
|
xWarning := TRUE;
|
||||||
@@ -394,12 +388,11 @@ xShutdownDischargeAllowed := _fbUnit1.xShutdownDischargeAllowed AND _fbUnit2.xSh
|
|||||||
// ===============================
|
// ===============================
|
||||||
xOff := _fbUnit1.xOff AND _fbUnit2.xOff AND _fbUnit3.xOff AND _fbUnit4.xOff;
|
xOff := _fbUnit1.xOff AND _fbUnit2.xOff AND _fbUnit3.xOff AND _fbUnit4.xOff;
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Calculate module voltage
|
// Calculate module voltage
|
||||||
// ===============================
|
// ===============================
|
||||||
rCurrentVoltage := _fbUnit1.rCurrentVoltage + _fbUnit2.rCurrentVoltage + _fbUnit3.rCurrentVoltage + _fbUnit4.rCurrentVoltage;
|
rCurrentVoltage := _fbUnit1.rCurrentVoltage + _fbUnit2.rCurrentVoltage + _fbUnit3.rCurrentVoltage + _fbUnit4.rCurrentVoltage;
|
||||||
//_fbMAFVoltage(pValues := ADR(_arMAFVoltage), iArraySize := 10, rCurrentValue := rCurrentVoltage, rAverage => stHMIInterface.rVoltage);
|
|
||||||
//stHMIInterface.rVoltage := rCurrentVoltage;
|
|
||||||
refstHMIInterface.rVoltage := refstHMIInterface.rVoltage * 0.9 + rCurrentVoltage * 0.1;
|
refstHMIInterface.rVoltage := refstHMIInterface.rVoltage * 0.9 + rCurrentVoltage * 0.1;
|
||||||
|
|
||||||
|
|
||||||
@@ -484,25 +477,35 @@ END_IF
|
|||||||
rSmallestSegmentVoltage := MIN(_fbUnit1.rCurrentVoltage, _fbUnit2.rCurrentVoltage, _fbUnit3.rCurrentVoltage, _fbUnit4.rCurrentVoltage);
|
rSmallestSegmentVoltage := MIN(_fbUnit1.rCurrentVoltage, _fbUnit2.rCurrentVoltage, _fbUnit3.rCurrentVoltage, _fbUnit4.rCurrentVoltage);
|
||||||
rHighestSegmentVoltage := MAX(_fbUnit1.rCurrentVoltage, _fbUnit2.rCurrentVoltage, _fbUnit3.rCurrentVoltage, _fbUnit4.rCurrentVoltage);
|
rHighestSegmentVoltage := MAX(_fbUnit1.rCurrentVoltage, _fbUnit2.rCurrentVoltage, _fbUnit3.rCurrentVoltage, _fbUnit4.rCurrentVoltage);
|
||||||
|
|
||||||
|
// ===============================
|
||||||
|
// Copy string current to module current
|
||||||
|
// ===============================
|
||||||
|
refstHMIInterface.rCurrent := rCurrent;
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Module status sum
|
// Module status sum
|
||||||
// ===============================
|
// ===============================
|
||||||
|
// Module ready
|
||||||
IF xReady AND (NOT xError) THEN
|
IF xReady AND (NOT xError) THEN
|
||||||
refstHMIInterface.eStatus := E_COMPONENT_STATUS.ON;
|
refstHMIInterface.eStatus := E_COMPONENT_STATUS.ON;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
IF (_fbUnit1.eUnitState = E_COMPONENT_STATUS.STARTING OR _fbUnit1.eUnitState = E_COMPONENT_STATUS.STARTING OR _fbUnit1.eUnitState = E_COMPONENT_STATUS.STARTING OR _fbUnit1.eUnitState = E_COMPONENT_STATUS.STARTING) AND (NOT xError) THEN
|
// Module starting
|
||||||
|
IF (NOT xOff) AND (NOT xReady) AND xEnable AND (NOT xError) THEN
|
||||||
refstHMIInterface.eStatus := E_COMPONENT_STATUS.STARTING;
|
refstHMIInterface.eStatus := E_COMPONENT_STATUS.STARTING;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
IF (_fbUnit1.eUnitState = E_COMPONENT_STATUS.SHUTDOWN OR _fbUnit1.eUnitState = E_COMPONENT_STATUS.SHUTDOWN OR _fbUnit1.eUnitState = E_COMPONENT_STATUS.SHUTDOWN OR _fbUnit1.eUnitState = E_COMPONENT_STATUS.SHUTDOWN) AND (NOT xError) THEN
|
// Module shutdown
|
||||||
|
IF (NOT xOff) AND (NOT xReady) AND (NOT xEnable) AND (NOT xError) THEN
|
||||||
refstHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
refstHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
IF (_fbUnit1.eUnitState = E_COMPONENT_STATUS.OFF AND _fbUnit1.eUnitState = E_COMPONENT_STATUS.OFF AND _fbUnit1.eUnitState = E_COMPONENT_STATUS.OFF AND _fbUnit1.eUnitState = E_COMPONENT_STATUS.OFF) AND (NOT xError) THEN
|
// Module off
|
||||||
|
IF xOff AND (NOT xError) THEN
|
||||||
refstHMIInterface.eStatus := E_COMPONENT_STATUS.OFF;
|
refstHMIInterface.eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
// Module error
|
||||||
IF xError THEN
|
IF xError THEN
|
||||||
refstHMIInterface.eStatus := E_COMPONENT_STATUS.ERROR;
|
refstHMIInterface.eStatus := E_COMPONENT_STATUS.ERROR;
|
||||||
END_IF
|
END_IF
|
||||||
@@ -584,5 +587,37 @@ _fbLeackageSegment34Alarm.ipArguments.Clear().AddString(_sName);]]></ST>
|
|||||||
</Implementation>
|
</Implementation>
|
||||||
</Set>
|
</Set>
|
||||||
</Property>
|
</Property>
|
||||||
|
<LineIds Name="FB_Module">
|
||||||
|
<LineId Id="3" Count="81" />
|
||||||
|
<LineId Id="86" Count="9" />
|
||||||
|
<LineId Id="371" Count="1" />
|
||||||
|
<LineId Id="96" Count="25" />
|
||||||
|
<LineId Id="123" Count="9" />
|
||||||
|
<LineId Id="373" Count="1" />
|
||||||
|
<LineId Id="133" Count="25" />
|
||||||
|
<LineId Id="160" Count="9" />
|
||||||
|
<LineId Id="375" Count="1" />
|
||||||
|
<LineId Id="170" Count="25" />
|
||||||
|
<LineId Id="197" Count="9" />
|
||||||
|
<LineId Id="377" Count="1" />
|
||||||
|
<LineId Id="207" Count="135" />
|
||||||
|
<LineId Id="380" Count="1" />
|
||||||
|
<LineId Id="383" Count="0" />
|
||||||
|
<LineId Id="379" Count="0" />
|
||||||
|
<LineId Id="384" Count="0" />
|
||||||
|
<LineId Id="343" Count="27" />
|
||||||
|
<LineId Id="2" Count="0" />
|
||||||
|
</LineIds>
|
||||||
|
<LineIds Name="FB_Module.FB_init">
|
||||||
|
<LineId Id="3" Count="26" />
|
||||||
|
<LineId Id="2" Count="0" />
|
||||||
|
</LineIds>
|
||||||
|
<LineIds Name="FB_Module.Name.Get">
|
||||||
|
<LineId Id="2" Count="0" />
|
||||||
|
</LineIds>
|
||||||
|
<LineIds Name="FB_Module.Name.Set">
|
||||||
|
<LineId Id="3" Count="16" />
|
||||||
|
<LineId Id="2" Count="0" />
|
||||||
|
</LineIds>
|
||||||
</POU>
|
</POU>
|
||||||
</TcPlcObject>
|
</TcPlcObject>
|
||||||
@@ -3,49 +3,119 @@
|
|||||||
<POU Name="FB_PowerMeter" Id="{9d4159f4-2d3f-4522-a770-c038a26d9d77}" SpecialFunc="None">
|
<POU Name="FB_PowerMeter" Id="{9d4159f4-2d3f-4522-a770-c038a26d9d77}" SpecialFunc="None">
|
||||||
<Declaration><![CDATA[FUNCTION_BLOCK FB_PowerMeter
|
<Declaration><![CDATA[FUNCTION_BLOCK FB_PowerMeter
|
||||||
VAR_INPUT
|
VAR_INPUT
|
||||||
xResetEnergyCounter : BOOL;
|
xGetEnergyCounters : BOOL;
|
||||||
|
// IP 75 -> Umrichter
|
||||||
|
// IP 80 -> Hilfsenergie
|
||||||
|
sIpAddress : STRING(80);
|
||||||
END_VAR
|
END_VAR
|
||||||
VAR_OUTPUT
|
VAR_OUTPUT
|
||||||
|
lrEnergyFromGrid : LREAL;
|
||||||
|
lrEnergyIntoGrid : LREAL;
|
||||||
|
|
||||||
|
xBusy : BOOL;
|
||||||
|
xError : BOOL;
|
||||||
END_VAR
|
END_VAR
|
||||||
VAR
|
VAR
|
||||||
_fbReadRegs : FB_MBReadInputRegs;
|
_fbReadRegs : FB_MBReadRegs;
|
||||||
_fbWriteRegs : FB_MBWriteRegs;
|
_awWordArray : ARRAY[0..3] OF WORD;
|
||||||
|
_awSwapped : ARRAY[0..3] OF WORD;
|
||||||
|
_udiErrorId : UDINT;
|
||||||
|
|
||||||
_fbREResetEnergyCounter : R_TRIG;
|
_fbGetEnergyCounters : R_TRIG;
|
||||||
_xResetEnergyCounter : BOOL;
|
_xResetEnergyCounter : BOOL;
|
||||||
|
|
||||||
_iState : INT := 0;
|
_iState : INT := 0;
|
||||||
END_VAR
|
END_VAR
|
||||||
]]></Declaration>
|
]]></Declaration>
|
||||||
<Implementation>
|
<Implementation>
|
||||||
<ST><![CDATA[_fbREResetEnergyCounter(CLK := xResetEnergyCounter);
|
<ST><![CDATA[_fbGetEnergyCounters(CLK := xGetEnergyCounters);
|
||||||
|
|
||||||
IF _fbREResetEnergyCounter.Q THEN
|
IF _fbGetEnergyCounters.Q THEN
|
||||||
_xResetEnergyCounter := TRUE;
|
_xResetEnergyCounter := TRUE;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
CASE _iState OF
|
CASE _iState OF
|
||||||
0: // Idle
|
0: // Idle
|
||||||
IF _xResetEnergyCounter THEN
|
IF _xResetEnergyCounter THEN
|
||||||
|
xBusy := TRUE;
|
||||||
|
xError := FALSE;
|
||||||
_xResetEnergyCounter := FALSE;
|
_xResetEnergyCounter := FALSE;
|
||||||
_iState := 10;
|
_iState := 10;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
10: // Reset energy counters
|
10: // Read energy from grid
|
||||||
_fbWriteRegs(
|
_fbReadRegs(
|
||||||
sIPAddr:= '192.168.42.80',
|
sIPAddr:= sIpAddress,
|
||||||
nTCPPort:= 502,
|
nTCPPort:= 502,
|
||||||
nUnitID:= 16#FF ,
|
nUnitID:= 16#FF,
|
||||||
nQuantity:= ,
|
nQuantity:= 4,
|
||||||
nMBAddr:= 16#0600,
|
nMBAddr:= 8192,
|
||||||
cbLength:= ,
|
cbLength:= SIZEOF(_awWordArray),
|
||||||
pSrcAddr:= ,
|
pDestAddr:= ADR(_awWordArray),
|
||||||
bExecute:= ,
|
bExecute:= TRUE,
|
||||||
tTimeout:= ,
|
tTimeout:= ,
|
||||||
bBusy=> ,
|
bBusy=> ,
|
||||||
bError=> ,
|
bError=> ,
|
||||||
nErrId=> );
|
nErrId=> ,
|
||||||
|
cbRead=> );
|
||||||
|
|
||||||
|
IF (NOT _fbReadRegs.bBusy) AND (NOT _fbReadRegs.bError) THEN
|
||||||
|
_fbReadRegs(bExecute := FALSE);
|
||||||
|
SwapArray();
|
||||||
|
MEMCPY(ADR(lrEnergyFromGrid), ADR(_awSwapped), 8);
|
||||||
|
_iState := 20;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
IF _fbReadRegs.bError THEN
|
||||||
|
xBusy := FALSE;
|
||||||
|
xError := TRUE;
|
||||||
|
_udiErrorId := _fbReadRegs.nErrId;
|
||||||
|
lrEnergyFromGrid := 0;
|
||||||
|
_fbReadRegs(bExecute := FALSE);
|
||||||
|
_iState := 1000;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
20: // Read energy to grid
|
||||||
|
_fbReadRegs(
|
||||||
|
sIPAddr:= '192.168.42.75',
|
||||||
|
nTCPPort:= 502,
|
||||||
|
nUnitID:= 16#FF,
|
||||||
|
nQuantity:= 4,
|
||||||
|
nMBAddr:= 8196,
|
||||||
|
cbLength:= SIZEOF(_awWordArray),
|
||||||
|
pDestAddr:= ADR(_awWordArray),
|
||||||
|
bExecute:= TRUE,
|
||||||
|
tTimeout:= ,
|
||||||
|
bBusy=> ,
|
||||||
|
bError=> ,
|
||||||
|
nErrId=> ,
|
||||||
|
cbRead=> );
|
||||||
|
|
||||||
|
IF (NOT _fbReadRegs.bBusy) AND (NOT _fbReadRegs.bError) THEN
|
||||||
|
_fbReadRegs(bExecute := FALSE);
|
||||||
|
SwapArray();
|
||||||
|
MEMCPY(ADR(lrEnergyIntoGrid), ADR(_awSwapped), 8);
|
||||||
|
_iState := 0;
|
||||||
|
xBusy := FALSE;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
IF _fbReadRegs.bError THEN
|
||||||
|
xBusy := FALSE;
|
||||||
|
xError := TRUE;
|
||||||
|
_udiErrorId := _fbReadRegs.nErrId;
|
||||||
|
lrEnergyIntoGrid := 0;
|
||||||
|
_fbReadRegs(bExecute := FALSE);
|
||||||
|
_iState := 0;
|
||||||
|
END_IF
|
||||||
END_CASE]]></ST>
|
END_CASE]]></ST>
|
||||||
</Implementation>
|
</Implementation>
|
||||||
|
<Action Name="SwapArray" Id="{96198008-b45e-42ee-9345-377fed90aab6}">
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[_awSwapped[0] := _awWordArray[3];
|
||||||
|
_awSwapped[1] := _awWordArray[2];
|
||||||
|
_awSwapped[2] := _awWordArray[1];
|
||||||
|
_awSwapped[3] := _awWordArray[0];]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
</Action>
|
||||||
</POU>
|
</POU>
|
||||||
</TcPlcObject>
|
</TcPlcObject>
|
||||||
@@ -6,6 +6,9 @@ VAR_INPUT
|
|||||||
// Enable
|
// Enable
|
||||||
xEnable : BOOL;
|
xEnable : BOOL;
|
||||||
|
|
||||||
|
// Error shutdown -> No discharge throught inverter
|
||||||
|
xErrorShutdown : BOOL;
|
||||||
|
|
||||||
// Start in balancing mode
|
// Start in balancing mode
|
||||||
xStartBalancing : BOOL;
|
xStartBalancing : BOOL;
|
||||||
|
|
||||||
@@ -14,11 +17,8 @@ VAR_INPUT
|
|||||||
|
|
||||||
// Requested inverter power
|
// Requested inverter power
|
||||||
rPowerInverter : REAL;
|
rPowerInverter : REAL;
|
||||||
|
|
||||||
// Components shortage workaround
|
|
||||||
stStringModuleVoltageConfig : ST_STRING_VOLT_CONFIG;
|
|
||||||
|
|
||||||
// Module 1 HMI interface
|
// String HMI interface
|
||||||
stHMIInterface : REFERENCE TO ST_STRING_HMI_INTERFACE;
|
stHMIInterface : REFERENCE TO ST_STRING_HMI_INTERFACE;
|
||||||
|
|
||||||
// Emergency stop ok
|
// Emergency stop ok
|
||||||
@@ -31,6 +31,7 @@ VAR_INPUT
|
|||||||
xSafetyIntlksOk AT %I* : BOOL;
|
xSafetyIntlksOk AT %I* : BOOL;
|
||||||
|
|
||||||
// Safety communication error
|
// Safety communication error
|
||||||
|
{attribute 'analysis' := '-33'}
|
||||||
xSafetyComError AT %I* : BOOL;
|
xSafetyComError AT %I* : BOOL;
|
||||||
|
|
||||||
// Release alarms
|
// Release alarms
|
||||||
@@ -294,7 +295,10 @@ _fbStringCurrent(
|
|||||||
xWarningLow=> ,
|
xWarningLow=> ,
|
||||||
xWarningHigh=> ,
|
xWarningHigh=> ,
|
||||||
xErrorHigh=> ,
|
xErrorHigh=> ,
|
||||||
stHMIInterface=> stHMIInterface.stStringCurrent);
|
stHMIInterface=> );
|
||||||
|
|
||||||
|
// Copy scaled current value to HMI
|
||||||
|
stHMIInterface.rCurrent := _fbStringCurrent.stHMIInterface.rValue;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -303,9 +307,9 @@ _fbStringCurrent(
|
|||||||
// ===============================
|
// ===============================
|
||||||
_fbModule1(
|
_fbModule1(
|
||||||
xEnable := _xEnable,
|
xEnable := _xEnable,
|
||||||
|
rCurrent := stHMIInterface.rCurrent,
|
||||||
xStartBalancing := _xStartBalancing,
|
xStartBalancing := _xStartBalancing,
|
||||||
xInverterEnabled := _fbInverter.xActive,
|
xInverterEnabled := _fbInverter.xActive,
|
||||||
stModuleVoltageConfig := stStringModuleVoltageConfig.stModule1VoltConfig,
|
|
||||||
xInSafetyCheckMode := xInSafetyCheckMode,
|
xInSafetyCheckMode := xInSafetyCheckMode,
|
||||||
xEmergencyStopOk:= xEmergencyStopOk,
|
xEmergencyStopOk:= xEmergencyStopOk,
|
||||||
refstHMIInterface:= stHMIInterface.stHMIInterfaceModule1,
|
refstHMIInterface:= stHMIInterface.stHMIInterfaceModule1,
|
||||||
@@ -315,6 +319,8 @@ _fbModule1(
|
|||||||
xConfirmAlarms:= xConfirmAlarms,
|
xConfirmAlarms:= xConfirmAlarms,
|
||||||
xAllToManualMode := xAllToManualMode,
|
xAllToManualMode := xAllToManualMode,
|
||||||
rBalancingTargetVoltage := rSmallestSegmentVoltage);
|
rBalancingTargetVoltage := rSmallestSegmentVoltage);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
@@ -323,9 +329,9 @@ _fbModule1(
|
|||||||
|
|
||||||
_fbModule2(
|
_fbModule2(
|
||||||
xEnable := _xEnable,
|
xEnable := _xEnable,
|
||||||
|
rCurrent := stHMIInterface.rCurrent,
|
||||||
xStartBalancing := _xStartBalancing,
|
xStartBalancing := _xStartBalancing,
|
||||||
xInverterEnabled := _fbInverter.xActive,
|
xInverterEnabled := _fbInverter.xActive,
|
||||||
stModuleVoltageConfig := stStringModuleVoltageConfig.stModule2VoltConfig,
|
|
||||||
xInSafetyCheckMode := xInSafetyCheckMode,
|
xInSafetyCheckMode := xInSafetyCheckMode,
|
||||||
xEmergencyStopOk:= xEmergencyStopOk,
|
xEmergencyStopOk:= xEmergencyStopOk,
|
||||||
refstHMIInterface:= stHMIInterface.stHMIInterfaceModule2,
|
refstHMIInterface:= stHMIInterface.stHMIInterfaceModule2,
|
||||||
@@ -335,6 +341,8 @@ _fbModule2(
|
|||||||
xConfirmAlarms:= xConfirmAlarms,
|
xConfirmAlarms:= xConfirmAlarms,
|
||||||
xAllToManualMode := xAllToManualMode,
|
xAllToManualMode := xAllToManualMode,
|
||||||
rBalancingTargetVoltage := rSmallestSegmentVoltage);
|
rBalancingTargetVoltage := rSmallestSegmentVoltage);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
@@ -342,9 +350,9 @@ _fbModule2(
|
|||||||
// ===============================
|
// ===============================
|
||||||
_fbModule3(
|
_fbModule3(
|
||||||
xEnable := _xEnable,
|
xEnable := _xEnable,
|
||||||
|
rCurrent := stHMIInterface.rCurrent,
|
||||||
xStartBalancing := _xStartBalancing,
|
xStartBalancing := _xStartBalancing,
|
||||||
xInverterEnabled := _fbInverter.xActive,
|
xInverterEnabled := _fbInverter.xActive,
|
||||||
stModuleVoltageConfig := stStringModuleVoltageConfig.stModule3VoltConfig,
|
|
||||||
xInSafetyCheckMode := xInSafetyCheckMode,
|
xInSafetyCheckMode := xInSafetyCheckMode,
|
||||||
xEmergencyStopOk:= xEmergencyStopOk,
|
xEmergencyStopOk:= xEmergencyStopOk,
|
||||||
refstHMIInterface:= stHMIInterface.stHMIInterfaceModule3,
|
refstHMIInterface:= stHMIInterface.stHMIInterfaceModule3,
|
||||||
@@ -355,6 +363,7 @@ _fbModule3(
|
|||||||
xAllToManualMode := xAllToManualMode,
|
xAllToManualMode := xAllToManualMode,
|
||||||
rBalancingTargetVoltage := rSmallestSegmentVoltage);
|
rBalancingTargetVoltage := rSmallestSegmentVoltage);
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Handle modules error state
|
// Handle modules error state
|
||||||
// ===============================
|
// ===============================
|
||||||
@@ -393,29 +402,63 @@ END_IF
|
|||||||
// ===============================
|
// ===============================
|
||||||
_xAllModulesReady := _fbModule1.xReady AND _fbModule2.xReady AND _fbModule3.xReady;
|
_xAllModulesReady := _fbModule1.xReady AND _fbModule2.xReady AND _fbModule3.xReady;
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Balancing done check
|
// Balancing done check
|
||||||
// ===============================
|
// ===============================
|
||||||
_xBalancingDone := _fbModule1.xBalancingDone AND _fbModule2.xBalancingDone AND _fbModule3.xBalancingDone;
|
_xBalancingDone := _fbModule1.xBalancingDone AND _fbModule2.xBalancingDone AND _fbModule3.xBalancingDone;
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Modules in shutdown discharge mode
|
// Modules in shutdown discharge mode
|
||||||
// ===============================
|
// ===============================
|
||||||
xInShutdownDischargeMode := _fbModule1.xInShutdownDischargeMode AND _fbModule2.xInShutdownDischargeMode AND _fbModule3.xInShutdownDischargeMode;
|
xInShutdownDischargeMode := _fbModule1.xInShutdownDischargeMode OR _fbModule2.xInShutdownDischargeMode OR _fbModule3.xInShutdownDischargeMode;
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Units shutdown discharge allowed
|
// Units shutdown discharge allowed
|
||||||
// ===============================
|
// ===============================
|
||||||
xShutdownDischargeAllowed := _fbModule1.xShutdownDischargeAllowed AND _fbModule2.xShutdownDischargeAllowed AND _fbModule3.xShutdownDischargeAllowed;
|
xShutdownDischargeAllowed := _fbModule1.xShutdownDischargeAllowed AND _fbModule2.xShutdownDischargeAllowed AND _fbModule3.xShutdownDischargeAllowed;
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// All modules off
|
// All modules off
|
||||||
// ===============================
|
// ===============================
|
||||||
xOff := _fbModule1.xOff AND _fbModule2.xOff AND _fbModule3.xOff;
|
xOff := _fbModule1.xOff AND _fbModule2.xOff AND _fbModule3.xOff;
|
||||||
|
|
||||||
|
|
||||||
|
// ===============================
|
||||||
|
// Handle status
|
||||||
|
// ===============================
|
||||||
|
// String off
|
||||||
|
IF xOff AND (NOT xError) THEN
|
||||||
|
eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// String starting
|
||||||
|
IF _xEnable AND (NOT _xAllModulesReady) AND (NOT xError) THEN
|
||||||
|
eStatus := E_COMPONENT_STATUS.STARTING;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// String on
|
||||||
|
IF _xAllModulesReady AND _fbInverter.xActive AND (NOT xError) THEN
|
||||||
|
IF _rPowerInverterInternal < 0.0 THEN
|
||||||
|
eStatus := E_COMPONENT_STATUS.CHARGING;
|
||||||
|
ELSIF _rPowerInverterInternal > 0.0 THEN
|
||||||
|
eStatus := E_COMPONENT_STATUS.DISCHARGING;
|
||||||
|
ELSE
|
||||||
|
eStatus := E_COMPONENT_STATUS.ON;
|
||||||
|
END_IF
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// String in shutdown
|
||||||
|
IF xInShutdownDischargeMode AND (NOT xError) THEN
|
||||||
|
eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// String in error state
|
||||||
|
IF xError THEN
|
||||||
|
eStatus := E_COMPONENT_STATUS.ERROR;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Calculate string voltage
|
// Calculate string voltage
|
||||||
// ===============================
|
// ===============================
|
||||||
@@ -512,7 +555,7 @@ CASE _iState OF
|
|||||||
// Start in normal mode
|
// Start in normal mode
|
||||||
IF xEnable AND (NOT xStartBalancing) AND xAllModulesInAutoMode AND xRepairSwitchOk THEN
|
IF xEnable AND (NOT xStartBalancing) AND xAllModulesInAutoMode AND xRepairSwitchOk THEN
|
||||||
_xEnable := TRUE;
|
_xEnable := TRUE;
|
||||||
eStatus := E_COMPONENT_STATUS.STARTING;
|
//eStatus := E_COMPONENT_STATUS.STARTING;
|
||||||
IF xInSafetyCheckMode THEN
|
IF xInSafetyCheckMode THEN
|
||||||
_iState := 1;
|
_iState := 1;
|
||||||
ELSE
|
ELSE
|
||||||
@@ -524,10 +567,11 @@ CASE _iState OF
|
|||||||
IF (NOT xEnable) AND xStartBalancing AND xAllModulesInAutoMode THEN
|
IF (NOT xEnable) AND xStartBalancing AND xAllModulesInAutoMode THEN
|
||||||
_xStartBalancing := TRUE;
|
_xStartBalancing := TRUE;
|
||||||
_xReleaseLimitErrorsInternal := FALSE;
|
_xReleaseLimitErrorsInternal := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.STARTING;
|
//eStatus := E_COMPONENT_STATUS.STARTING;
|
||||||
_iState := 7;
|
_iState := 7;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
1: // Wait for ready in safety check mode
|
1: // Wait for ready in safety check mode
|
||||||
IF _xAllModulesReady THEN
|
IF _xAllModulesReady THEN
|
||||||
xResetSafetyDCCB := TRUE;
|
xResetSafetyDCCB := TRUE;
|
||||||
@@ -547,7 +591,7 @@ CASE _iState OF
|
|||||||
|
|
||||||
IF (NOT xEnable) THEN
|
IF (NOT xEnable) THEN
|
||||||
_xEnable := FALSE;
|
_xEnable := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.OFF;
|
//eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -563,7 +607,7 @@ CASE _iState OF
|
|||||||
|
|
||||||
IF (NOT xStartBalancing) THEN
|
IF (NOT xStartBalancing) THEN
|
||||||
_xStartBalancing := FALSE;
|
_xStartBalancing := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.OFF;
|
//eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -589,10 +633,10 @@ CASE _iState OF
|
|||||||
_iState := 20;
|
_iState := 20;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
IF NOT xEnable THEN
|
IF (NOT xEnable) THEN
|
||||||
_tonSafetyOkTimeout.IN := FALSE;
|
_tonSafetyOkTimeout.IN := FALSE;
|
||||||
_xEnable := FALSE;
|
_xEnable := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
//eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 40;
|
_iState := 40;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -615,6 +659,7 @@ CASE _iState OF
|
|||||||
//_rPowerInverterInternal := 0.0;
|
//_rPowerInverterInternal := 0.0;
|
||||||
IF xInSafetyCheckMode THEN
|
IF xInSafetyCheckMode THEN
|
||||||
_iState := 29;
|
_iState := 29;
|
||||||
|
//eStatus := E_COMPONENT_STATUS.ON;
|
||||||
ELSE
|
ELSE
|
||||||
_iState := 21;
|
_iState := 21;
|
||||||
END_IF
|
END_IF
|
||||||
@@ -628,10 +673,10 @@ CASE _iState OF
|
|||||||
_iState := 1000;
|
_iState := 1000;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
IF NOT xEnable THEN
|
IF (NOT xEnable) THEN
|
||||||
_tonSafetyOkTimeout.IN := FALSE;
|
_tonSafetyOkTimeout.IN := FALSE;
|
||||||
_xEnable := FALSE;
|
_xEnable := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
//eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 40;
|
_iState := 40;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -639,7 +684,7 @@ CASE _iState OF
|
|||||||
_tonInverterStartupTimeout(IN := TRUE);
|
_tonInverterStartupTimeout(IN := TRUE);
|
||||||
IF _fbInverter.xActive AND (NOT _fbInverter.xError) THEN
|
IF _fbInverter.xActive AND (NOT _fbInverter.xError) THEN
|
||||||
_iState := 30;
|
_iState := 30;
|
||||||
eStatus := E_COMPONENT_STATUS.ON;
|
//eStatus := E_COMPONENT_STATUS.ON;
|
||||||
xReady := TRUE;
|
xReady := TRUE;
|
||||||
_tonInverterStartupTimeout(IN := FALSE);
|
_tonInverterStartupTimeout(IN := FALSE);
|
||||||
END_IF
|
END_IF
|
||||||
@@ -648,7 +693,7 @@ CASE _iState OF
|
|||||||
_xEnableInverter := FALSE;
|
_xEnableInverter := FALSE;
|
||||||
_rPowerInverterInternal := 0.0;
|
_rPowerInverterInternal := 0.0;
|
||||||
_xEnable := FALSE;
|
_xEnable := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
//eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 31;
|
_iState := 31;
|
||||||
_tonInverterStartupTimeout(IN := FALSE);
|
_tonInverterStartupTimeout(IN := FALSE);
|
||||||
END_IF
|
END_IF
|
||||||
@@ -674,7 +719,7 @@ CASE _iState OF
|
|||||||
IF (NOT xEnable) THEN
|
IF (NOT xEnable) THEN
|
||||||
_xEnable := FALSE;
|
_xEnable := FALSE;
|
||||||
_xReleaseLimitErrorsInternal := FALSE;
|
_xReleaseLimitErrorsInternal := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
//eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 31;
|
_iState := 31;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -694,6 +739,7 @@ CASE _iState OF
|
|||||||
_rPowerInverterInternal := rPowerInverter;
|
_rPowerInverterInternal := rPowerInverter;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
(*
|
||||||
IF _rPowerInverterInternal > 0.0 THEN
|
IF _rPowerInverterInternal > 0.0 THEN
|
||||||
eStatus := E_COMPONENT_STATUS.DISCHARGING;
|
eStatus := E_COMPONENT_STATUS.DISCHARGING;
|
||||||
ELSIF _rPowerInverterInternal < 0.0 THEN
|
ELSIF _rPowerInverterInternal < 0.0 THEN
|
||||||
@@ -701,6 +747,7 @@ CASE _iState OF
|
|||||||
ELSE
|
ELSE
|
||||||
eStatus := E_COMPONENT_STATUS.ON;
|
eStatus := E_COMPONENT_STATUS.ON;
|
||||||
END_IF
|
END_IF
|
||||||
|
*)
|
||||||
|
|
||||||
// Shutdown
|
// Shutdown
|
||||||
IF (NOT xEnable) THEN
|
IF (NOT xEnable) THEN
|
||||||
@@ -708,12 +755,12 @@ CASE _iState OF
|
|||||||
_xReleaseLimitErrorsInternal := FALSE;
|
_xReleaseLimitErrorsInternal := FALSE;
|
||||||
IF GVL_CONFIG.xShutdownDischargeWithInverter THEN
|
IF GVL_CONFIG.xShutdownDischargeWithInverter THEN
|
||||||
_rPowerInverterInternal := GVL_CONFIG.rAbsShutdownDischargePower;
|
_rPowerInverterInternal := GVL_CONFIG.rAbsShutdownDischargePower;
|
||||||
eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
//eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 31;
|
_iState := 31;
|
||||||
ELSE
|
ELSE
|
||||||
_rPowerInverterInternal := 0.0;
|
_rPowerInverterInternal := 0.0;
|
||||||
_xEnableInverter := FALSE;
|
_xEnableInverter := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
//eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 40;
|
_iState := 40;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -738,7 +785,7 @@ CASE _iState OF
|
|||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
32: // Shutdown discharge mode
|
32: // Shutdown discharge mode
|
||||||
IF xShutdownDischargeAllowed AND GVL_CONFIG.xShutdownDischargeWithInverter AND xSafetyIntlksOk AND (stInverterData.rActDCVoltage > 620.0) THEN
|
IF xShutdownDischargeAllowed AND (NOT xErrorShutdown) AND GVL_CONFIG.xShutdownDischargeWithInverter AND xSafetyIntlksOk AND (stInverterData.rActDCVoltage > 620.0) THEN
|
||||||
_rPowerInverterInternal := GVL_CONFIG.rAbsShutdownDischargePower;
|
_rPowerInverterInternal := GVL_CONFIG.rAbsShutdownDischargePower;
|
||||||
ELSE
|
ELSE
|
||||||
// Send shutdown message
|
// Send shutdown message
|
||||||
@@ -773,7 +820,7 @@ CASE _iState OF
|
|||||||
IF _tonInverterShutdownDelay.Q THEN
|
IF _tonInverterShutdownDelay.Q THEN
|
||||||
_tonInverterShutdownDelay(IN := FALSE);
|
_tonInverterShutdownDelay(IN := FALSE);
|
||||||
xCloseDCCB := FALSE;
|
xCloseDCCB := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.OFF;
|
//eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -785,7 +832,7 @@ CASE _iState OF
|
|||||||
|
|
||||||
51: // Check if start balancing has been releases to avoid a restart
|
51: // Check if start balancing has been releases to avoid a restart
|
||||||
IF (NOT xStartBalancing) THEN
|
IF (NOT xStartBalancing) THEN
|
||||||
eStatus := E_COMPONENT_STATUS.OFF;
|
//eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -801,7 +848,7 @@ CASE _iState OF
|
|||||||
_tonResetPulseLength(IN := FALSE);
|
_tonResetPulseLength(IN := FALSE);
|
||||||
_tonErrorDCCBNotClosed(IN := FALSE);
|
_tonErrorDCCBNotClosed(IN := FALSE);
|
||||||
|
|
||||||
eStatus := E_COMPONENT_STATUS.ERROR;
|
//eStatus := E_COMPONENT_STATUS.ERROR;
|
||||||
|
|
||||||
_iState := 1005;
|
_iState := 1005;
|
||||||
|
|
||||||
@@ -821,7 +868,7 @@ CASE _iState OF
|
|||||||
// Leave error state only if modules are deactivated
|
// Leave error state only if modules are deactivated
|
||||||
IF (NOT xEnable) AND (NOT _xModuleError) THEN
|
IF (NOT xEnable) AND (NOT _xModuleError) THEN
|
||||||
xError := FALSE;
|
xError := FALSE;
|
||||||
eStatus := E_COMPONENT_STATUS.OFF;
|
//eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
END_CASE
|
END_CASE
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ VAR_INPUT
|
|||||||
stHMIInterface : REFERENCE TO ST_UNIT_HMI_INTERFACE;
|
stHMIInterface : REFERENCE TO ST_UNIT_HMI_INTERFACE;
|
||||||
|
|
||||||
// Components shortage workaround
|
// Components shortage workaround
|
||||||
xVoltageSensorIs1500V : BOOL;
|
// xVoltageSensorIs1500V : BOOL;
|
||||||
|
|
||||||
// Start unit
|
// Start unit
|
||||||
xEnable : BOOL;
|
xEnable : BOOL;
|
||||||
@@ -50,7 +50,7 @@ VAR_INPUT
|
|||||||
END_VAR
|
END_VAR
|
||||||
VAR_OUTPUT
|
VAR_OUTPUT
|
||||||
// Unit state
|
// Unit state
|
||||||
eUnitState : E_COMPONENT_STATUS := E_COMPONENT_STATUS.OFF;
|
//eUnitState : E_COMPONENT_STATUS := E_COMPONENT_STATUS.OFF;
|
||||||
|
|
||||||
// Unit ready
|
// Unit ready
|
||||||
xReady : BOOL;
|
xReady : BOOL;
|
||||||
@@ -70,9 +70,6 @@ VAR_OUTPUT
|
|||||||
// Warning active
|
// Warning active
|
||||||
xWarning : BOOL;
|
xWarning : BOOL;
|
||||||
|
|
||||||
// Warning confirmation still pending
|
|
||||||
_xWarningConfirmPending : BOOL;
|
|
||||||
|
|
||||||
// Current Unit voltage
|
// Current Unit voltage
|
||||||
rCurrentVoltage : REAL;
|
rCurrentVoltage : REAL;
|
||||||
|
|
||||||
@@ -219,6 +216,9 @@ VAR
|
|||||||
// Filtered pressure sensor posolyt tank inlet data for HMI
|
// Filtered pressure sensor posolyt tank inlet data for HMI
|
||||||
_rFilteredPressNegolytTank : REAL;
|
_rFilteredPressNegolytTank : REAL;
|
||||||
|
|
||||||
|
// Pumps ready
|
||||||
|
_xPumpsReady : BOOL;
|
||||||
|
|
||||||
// Indicate if it ise the first cycle
|
// Indicate if it ise the first cycle
|
||||||
xFirstCycle : BOOL := TRUE;
|
xFirstCycle : BOOL := TRUE;
|
||||||
END_VAR
|
END_VAR
|
||||||
@@ -442,6 +442,7 @@ IF NOT stHMIInterface.stNS21.stInterlock.xSafetyINTLKOk THEN
|
|||||||
xSafetyIntlksOk := FALSE;
|
xSafetyIntlksOk := FALSE;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
_xPumpsReady := stHMIInterface.stNS21.stInterlock.xProcessINTLKOk AND stHMIInterface.stNS21.stInterlock.xSafetyINTLKOk AND stHMIInterface.stNS11.stInterlock.xProcessINTLKOk AND stHMIInterface.stNS11.stInterlock.xSafetyINTLKOk;
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Pressure sensor posolyt segment inlet
|
// Pressure sensor posolyt segment inlet
|
||||||
@@ -602,29 +603,16 @@ END_IF
|
|||||||
// ===============================
|
// ===============================
|
||||||
// Voltage segment
|
// Voltage segment
|
||||||
// ===============================
|
// ===============================
|
||||||
IF xVoltageSensorIs1500V THEN
|
_fbVoltageSegment(
|
||||||
_fbVoltageSegment(
|
stScalingConfig:= GVL_CONFIG.stUnitConfig.stConfigVoltageSegment,
|
||||||
stScalingConfig:= GVL_CONFIG.stConfigVoltageSegment1500,
|
stEWConfig:= GVL_CONFIG.stUnitConfig.stEWLVoltageSegment,
|
||||||
stEWConfig:= GVL_CONFIG.stUnitConfig.stEWLVoltageSegment,
|
stEWDelayConfig:= GVL_CONFIG.stUnitConfig.stEWDVoltageSegment,
|
||||||
stEWDelayConfig:= GVL_CONFIG.stUnitConfig.stEWDVoltageSegment,
|
xReleaseErrors:= xReleaseErrors,
|
||||||
xReleaseErrors:= xReleaseErrors,
|
xReleaseLimitErrors:= xReleaseLimitErrors AND _xEnableVoltageLimitChecks,
|
||||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _xEnableVoltageLimitChecks,
|
xReleaseHardwareErrors:= xReleaseErrors,
|
||||||
xReleaseHardwareErrors:= xReleaseErrors,
|
xConfirmAlarms:= xConfirmAlarms,
|
||||||
xConfirmAlarms:= xConfirmAlarms,
|
stHMIInterface=> stHMIInterface.stE31,
|
||||||
stHMIInterface=> stHMIInterface.stE31,
|
rScaledValue => rCurrentVoltage);
|
||||||
rScaledValue => rCurrentVoltage);
|
|
||||||
ELSE
|
|
||||||
_fbVoltageSegment(
|
|
||||||
stScalingConfig:= GVL_CONFIG.stUnitConfig.stConfigVoltageSegment,
|
|
||||||
stEWConfig:= GVL_CONFIG.stUnitConfig.stEWLVoltageSegment,
|
|
||||||
stEWDelayConfig:= GVL_CONFIG.stUnitConfig.stEWDVoltageSegment,
|
|
||||||
xReleaseErrors:= xReleaseErrors,
|
|
||||||
xReleaseLimitErrors:= xReleaseLimitErrors AND _xEnableVoltageLimitChecks,
|
|
||||||
xReleaseHardwareErrors:= xReleaseErrors,
|
|
||||||
xConfirmAlarms:= xConfirmAlarms,
|
|
||||||
stHMIInterface=> stHMIInterface.stE31,
|
|
||||||
rScaledValue => rCurrentVoltage);
|
|
||||||
END_IF
|
|
||||||
|
|
||||||
// Set error active if fb has error
|
// Set error active if fb has error
|
||||||
IF _fbVoltageSegment.xError THEN
|
IF _fbVoltageSegment.xError THEN
|
||||||
@@ -637,6 +625,14 @@ IF _fbVoltageSegment.xWarning THEN
|
|||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
|
// ===============================
|
||||||
|
// Check for EStop
|
||||||
|
// ===============================
|
||||||
|
IF (NOT xEmergencyStopOk) THEN
|
||||||
|
_xErrorActive := TRUE;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
// Write Voltage to HMI
|
// Write Voltage to HMI
|
||||||
// ===============================
|
// ===============================
|
||||||
@@ -696,6 +692,8 @@ _rShutdownDischargeVoltageThreshold := GVL_CONFIG.rMinimumUnitVoltage + GVL_CONF
|
|||||||
// ===============================
|
// ===============================
|
||||||
// Run state machine for startup
|
// Run state machine for startup
|
||||||
// and shutdown
|
// and shutdown
|
||||||
|
// NEEDS TO BE CALLED AFTER ALL COMPONENTS BECAUSE OF RESET AND ALARM ACKNOWLEDGEMENT!!!
|
||||||
|
// (e.g. restart pumps after estop if segment voltage is still to high)
|
||||||
// ===============================
|
// ===============================
|
||||||
StateMachine();
|
StateMachine();
|
||||||
|
|
||||||
@@ -783,7 +781,7 @@ CASE _iState OF
|
|||||||
_xReleaseManualMode := FALSE;
|
_xReleaseManualMode := FALSE;
|
||||||
_timUnitStartupWaitTime := GVL_CONFIG.timUnitStartupTime;
|
_timUnitStartupWaitTime := GVL_CONFIG.timUnitStartupTime;
|
||||||
_iState := 10;
|
_iState := 10;
|
||||||
eUnitState := E_COMPONENT_STATUS.STARTING;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.STARTING;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
// Start in balancing mode
|
// Start in balancing mode
|
||||||
@@ -793,6 +791,10 @@ CASE _iState OF
|
|||||||
_timUnitStartupWaitTime := GVL_CONFIG.timUnitBalancingStartupTime;
|
_timUnitStartupWaitTime := GVL_CONFIG.timUnitBalancingStartupTime;
|
||||||
_iState := 10;
|
_iState := 10;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
IF _xErrorActive THEN
|
||||||
|
_iState := 1000;
|
||||||
|
END_IF
|
||||||
|
|
||||||
10: // Open all valves
|
10: // Open all valves
|
||||||
_fbPosolytValveTankOutlet.ReqAutomaticOpen();
|
_fbPosolytValveTankOutlet.ReqAutomaticOpen();
|
||||||
@@ -809,7 +811,7 @@ CASE _iState OF
|
|||||||
|
|
||||||
// If enable signal is lost
|
// If enable signal is lost
|
||||||
IF ((NOT xEnable) AND (NOT xStartBalancing)) THEN
|
IF ((NOT xEnable) AND (NOT xStartBalancing)) THEN
|
||||||
eUnitState := E_COMPONENT_STATUS.SHUTDOWN;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 40;
|
_iState := 40;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -818,6 +820,10 @@ CASE _iState OF
|
|||||||
_xReleaseManualMode := TRUE;
|
_xReleaseManualMode := TRUE;
|
||||||
_iState := 1000;
|
_iState := 1000;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
IF (NOT xEnable) THEN
|
||||||
|
_iState := 51;
|
||||||
|
END_IF
|
||||||
|
|
||||||
20: // Start pumps
|
20: // Start pumps
|
||||||
_fbPosolytPumpInlet.ReqAutomaticStart();
|
_fbPosolytPumpInlet.ReqAutomaticStart();
|
||||||
@@ -835,7 +841,7 @@ CASE _iState OF
|
|||||||
|
|
||||||
// If enable signal is lost, goto shutdown
|
// If enable signal is lost, goto shutdown
|
||||||
IF ((NOT xEnable) AND (NOT xStartBalancing)) THEN
|
IF ((NOT xEnable) AND (NOT xStartBalancing)) THEN
|
||||||
eUnitState := E_COMPONENT_STATUS.SHUTDOWN;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 40; // 40
|
_iState := 40; // 40
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -859,7 +865,7 @@ CASE _iState OF
|
|||||||
|
|
||||||
// If enable signal is lost, goto shutdown
|
// If enable signal is lost, goto shutdown
|
||||||
IF (NOT xEnable) AND (NOT xStartBalancing) THEN
|
IF (NOT xEnable) AND (NOT xStartBalancing) THEN
|
||||||
eUnitState := E_COMPONENT_STATUS.SHUTDOWN;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 40;
|
_iState := 40;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -882,7 +888,7 @@ CASE _iState OF
|
|||||||
|
|
||||||
// Continue on normal startup path
|
// Continue on normal startup path
|
||||||
IF xEnable THEN
|
IF xEnable THEN
|
||||||
eUnitState := E_COMPONENT_STATUS.ON;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.ON;
|
||||||
_iState := 35;
|
_iState := 35;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -904,7 +910,7 @@ CASE _iState OF
|
|||||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytOnPower;
|
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytOnPower;
|
||||||
|
|
||||||
IF (NOT xEnable) THEN
|
IF (NOT xEnable) THEN
|
||||||
eUnitState := E_COMPONENT_STATUS.SHUTDOWN;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
|
||||||
_iState := 40;
|
_iState := 40;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -961,6 +967,10 @@ CASE _iState OF
|
|||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
IF _xErrorActive THEN
|
||||||
|
_iState := 1000;
|
||||||
|
END_IF
|
||||||
|
|
||||||
51: // Discharge without inverter
|
51: // Discharge without inverter
|
||||||
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytDisChrgPower;
|
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytDisChrgPower;
|
||||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytDisChrgPower;
|
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytDisChrgPower;
|
||||||
@@ -978,6 +988,10 @@ CASE _iState OF
|
|||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
IF _xErrorActive THEN
|
||||||
|
_iState := 1000;
|
||||||
|
END_IF
|
||||||
|
|
||||||
60: // Disable pumps
|
60: // Disable pumps
|
||||||
_fbPosolytPumpInlet.ReqAutomaticStop();
|
_fbPosolytPumpInlet.ReqAutomaticStop();
|
||||||
_fbNegolytPumpInlet.ReqAutomaticStop();
|
_fbNegolytPumpInlet.ReqAutomaticStop();
|
||||||
@@ -988,14 +1002,14 @@ CASE _iState OF
|
|||||||
xOff := TRUE;
|
xOff := TRUE;
|
||||||
_xReleaseManualMode := TRUE;
|
_xReleaseManualMode := TRUE;
|
||||||
IF NOT _xErrorActive THEN
|
IF NOT _xErrorActive THEN
|
||||||
eUnitState := E_COMPONENT_STATUS.OFF;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
// Check for restart condition
|
// Check for restart condition
|
||||||
IF xEnable AND (NOT _xErrorActive) THEN
|
IF xEnable AND (NOT _xErrorActive) THEN
|
||||||
eUnitState := E_COMPONENT_STATUS.OFF;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.OFF;
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -1059,6 +1073,9 @@ CASE _iState OF
|
|||||||
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytDisChrgPower;
|
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytDisChrgPower;
|
||||||
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytDisChrgPower;
|
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytDisChrgPower;
|
||||||
|
|
||||||
|
_fbNegolytPumpInlet.ReqAutomaticStart();
|
||||||
|
_fbPosolytPumpInlet.ReqAutomaticStart();
|
||||||
|
|
||||||
_xEnableVoltageLimitChecks := FALSE;
|
_xEnableVoltageLimitChecks := FALSE;
|
||||||
xShutdownDischargeAllowed := FALSE;
|
xShutdownDischargeAllowed := FALSE;
|
||||||
xInShutdownDischargeMode := FALSE;
|
xInShutdownDischargeMode := FALSE;
|
||||||
@@ -1082,9 +1099,12 @@ CASE _iState OF
|
|||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
IF _xErrorActive THEN
|
||||||
|
_iState := 1000;
|
||||||
|
END_IF
|
||||||
|
|
||||||
1000: // Error shutdown
|
1000: // Error shutdown
|
||||||
eUnitState := E_COMPONENT_STATUS.ERROR;
|
stHMIInterface.eStatus := E_COMPONENT_STATUS.ERROR;
|
||||||
_fbNegolytValveTankOutlet.ReqAutomaticClose();
|
_fbNegolytValveTankOutlet.ReqAutomaticClose();
|
||||||
_fbPosolytValveTankOutlet.ReqAutomaticClose();
|
_fbPosolytValveTankOutlet.ReqAutomaticClose();
|
||||||
_fbPosolytPumpInlet.ReqAutomaticStop();
|
_fbPosolytPumpInlet.ReqAutomaticStop();
|
||||||
@@ -1100,10 +1120,22 @@ CASE _iState OF
|
|||||||
1001: // Alarm active
|
1001: // Alarm active
|
||||||
// Only allow reset when enable is deactivated to avoid an
|
// Only allow reset when enable is deactivated to avoid an
|
||||||
// automatic restart of the unit
|
// automatic restart of the unit
|
||||||
IF (NOT _xErrorActive) AND (NOT xEnable) AND (NOT xStartBalancing) AND xConfirmAlarms THEN
|
IF (NOT _xErrorActive) AND (NOT xEnable) AND (NOT xStartBalancing) AND _xPumpsReady AND xConfirmAlarms THEN
|
||||||
xError := FALSE;
|
xError := FALSE;
|
||||||
_iState := 51;
|
IF (_fbVoltageSegment.rScaledValue >= GVL_CONFIG.rPumpshutoffThreshold) THEN
|
||||||
|
_iState := 1002;
|
||||||
|
ELSE
|
||||||
|
_iState := 0;
|
||||||
|
END_IF
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
1002:
|
||||||
|
_rSetpointNegolytPumpInlet := GVL_CONFIG.rPumpNegolytDisChrgPower;
|
||||||
|
_rSetpointPosolytPumpInlet := GVL_CONFIG.rPumpPosolytDisChrgPower;
|
||||||
|
|
||||||
|
_fbNegolytPumpInlet.ReqAutomaticStart();
|
||||||
|
_fbPosolytPumpInlet.ReqAutomaticStart();
|
||||||
|
_iState := 51;
|
||||||
END_CASE]]></ST>
|
END_CASE]]></ST>
|
||||||
</Implementation>
|
</Implementation>
|
||||||
</Action>
|
</Action>
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
VAR
|
VAR
|
||||||
_xEmergencyStopOk AT %I* : BOOL;
|
_xEmergencyStopOk AT %I* : BOOL;
|
||||||
_xShowAckEmergencyStop AT %Q* : BOOL;
|
_xShowAckEmergencyStop AT %Q* : BOOL;
|
||||||
_xString1DCSafetyOk AT %I* : BOOL;
|
|
||||||
_xReleaseErrors : BOOL := TRUE;
|
_xReleaseErrors : BOOL := TRUE;
|
||||||
_xReleaseLimitsErrors : BOOL := TRUE;
|
_xReleaseLimitsErrors : BOOL := TRUE;
|
||||||
_xConfirmAlarms : BOOL;
|
_xConfirmAlarms : BOOL;
|
||||||
@@ -18,9 +17,12 @@ VAR
|
|||||||
_afbStrings : ARRAY[0..1] OF FB_String[('String 1'), ('String 2')];
|
_afbStrings : ARRAY[0..1] OF FB_String[('String 1'), ('String 2')];
|
||||||
|
|
||||||
// Variable to detect charge status change
|
// Variable to detect charge status change
|
||||||
_eLastChargeStatus : E_CHARGE_STATUS;
|
//_eLastChargeStatus : E_CHARGE_STATUS;
|
||||||
// Variable to detect battery status change
|
// Variable to detect battery status change
|
||||||
_eLastBatteryStatus : E_BATTERY_STATUS;
|
//_eLastBatteryStatus : E_BATTERY_STATUS;
|
||||||
|
|
||||||
|
// Battery shutdown due to error
|
||||||
|
_xErrorShutdown : BOOL := FALSE;
|
||||||
|
|
||||||
// State machine state
|
// State machine state
|
||||||
_iState : INT;
|
_iState : INT;
|
||||||
@@ -46,7 +48,7 @@ VAR
|
|||||||
_tonBeginShutdown : TON := (PT := T#30S);
|
_tonBeginShutdown : TON := (PT := T#30S);
|
||||||
|
|
||||||
// Not all strings in automatic mode
|
// Not all strings in automatic mode
|
||||||
_fbNoAutomaticModeAlarm : Fb_TcAlarm;
|
_fbNoAutomaticModeAlarm : FB_TcAlarm;
|
||||||
|
|
||||||
// Emergency stop not ok alarm
|
// Emergency stop not ok alarm
|
||||||
_fbEStopNotOk : FB_TcAlarm;
|
_fbEStopNotOk : FB_TcAlarm;
|
||||||
@@ -73,11 +75,6 @@ VAR
|
|||||||
// Release manual mode
|
// Release manual mode
|
||||||
_xReleaseManualMode : BOOL;
|
_xReleaseManualMode : BOOL;
|
||||||
|
|
||||||
// Current internal set inverter power value
|
|
||||||
_diInternalPowerSetpoint : DINT;
|
|
||||||
|
|
||||||
_diSetpointActivePower : DINT;
|
|
||||||
|
|
||||||
// Current BMS control mode (Auto local, Auto remote, etc...)
|
// Current BMS control mode (Auto local, Auto remote, etc...)
|
||||||
// On restart star in manual mode (so the ems can not directly start the bms)
|
// On restart star in manual mode (so the ems can not directly start the bms)
|
||||||
_eBMSControlMode : E_BMS_CONTROL_MODE := E_BMS_CONTROL_MODE.AUTO_LOCAL;
|
_eBMSControlMode : E_BMS_CONTROL_MODE := E_BMS_CONTROL_MODE.AUTO_LOCAL;
|
||||||
@@ -86,6 +83,7 @@ VAR
|
|||||||
_fbUPS : FB_S_UPS_BAPI;
|
_fbUPS : FB_S_UPS_BAPI;
|
||||||
|
|
||||||
// Safety
|
// Safety
|
||||||
|
{attribute 'analysis' := '-33'}
|
||||||
xSafetyRun AT %Q* : BOOL := TRUE;
|
xSafetyRun AT %Q* : BOOL := TRUE;
|
||||||
xSafetyErrAck AT %Q* : BOOL;
|
xSafetyErrAck AT %Q* : BOOL;
|
||||||
xSafetyResterTaster AT %I* : BOOL;
|
xSafetyResterTaster AT %I* : BOOL;
|
||||||
@@ -126,8 +124,6 @@ VAR
|
|||||||
// DEBUG
|
// DEBUG
|
||||||
_xRestart : BOOL;
|
_xRestart : BOOL;
|
||||||
|
|
||||||
_xDebug : BOOL;
|
|
||||||
|
|
||||||
_ModbusDebugTest : ST_MODBUS_REG_11;
|
_ModbusDebugTest : ST_MODBUS_REG_11;
|
||||||
|
|
||||||
_fbStringReadyTimeout : TON;
|
_fbStringReadyTimeout : TON;
|
||||||
@@ -144,15 +140,21 @@ VAR
|
|||||||
_xStringsAllInAutomaticMode : BOOL;
|
_xStringsAllInAutomaticMode : BOOL;
|
||||||
_xStringsOff : BOOL;
|
_xStringsOff : BOOL;
|
||||||
_xStringsBalancingDone : BOOL;
|
_xStringsBalancingDone : BOOL;
|
||||||
|
_xStringsInAutoMode : BOOL;
|
||||||
|
|
||||||
_rMaxCurrentInverterDCVoltage : REAL;
|
_rMaxCurrentInverterDCVoltage : REAL;
|
||||||
_rMinCurrentInverterDCVoltage : REAL;
|
_rMinCurrentInverterDCVoltage : REAL;
|
||||||
|
|
||||||
_fbModbusRead : FB_MBReadRegs;
|
_fbModbusRead : FB_MBReadRegs;
|
||||||
_wLength : WORD := 49;
|
//_wLength : WORD := 49;
|
||||||
xDebugTest : BOOL;
|
xDebugTest : BOOL;
|
||||||
_wDebug1 : WORD;
|
_wDebug1 : WORD;
|
||||||
_wDebug2 : WORD;
|
_wDebug2 : WORD;
|
||||||
|
|
||||||
|
_fbPowerMeterPower : FB_PowerMeter;
|
||||||
|
_fbPowerMeter24V : FB_PowerMeter;
|
||||||
|
|
||||||
|
_xGetPowerMeterData : BOOL;
|
||||||
END_VAR
|
END_VAR
|
||||||
]]></Declaration>
|
]]></Declaration>
|
||||||
<Implementation>
|
<Implementation>
|
||||||
@@ -172,6 +174,7 @@ END_IF
|
|||||||
|
|
||||||
IF _xFirstCycle THEN
|
IF _xFirstCycle THEN
|
||||||
_xFirstCycle := FALSE;
|
_xFirstCycle := FALSE;
|
||||||
|
_xGetPowerMeterData := TRUE;
|
||||||
|
|
||||||
_fbBatteryFullMessage.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.BatteryFull, 0);
|
_fbBatteryFullMessage.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.BatteryFull, 0);
|
||||||
_fbBatteryEmptyMessage.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.BatteryEmpty, 0);
|
_fbBatteryEmptyMessage.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.BatteryEmpty, 0);
|
||||||
@@ -299,8 +302,8 @@ _tonStartupDelay(IN := TRUE);
|
|||||||
|
|
||||||
// Call string 1
|
// Call string 1
|
||||||
_afbStrings[0](
|
_afbStrings[0](
|
||||||
stStringModuleVoltageConfig := GVL_CONFIG.stString1VoltageConfig,
|
|
||||||
xEnable := _xEnableString,
|
xEnable := _xEnableString,
|
||||||
|
xErrorShutdown := _xErrorShutdown,
|
||||||
xStartBalancing := _xStartBalancing,
|
xStartBalancing := _xStartBalancing,
|
||||||
sInverterIP := GVL_CONFIG.sInverterIpString1,
|
sInverterIP := GVL_CONFIG.sInverterIpString1,
|
||||||
rPowerInverter := _arPowerString[0],
|
rPowerInverter := _arPowerString[0],
|
||||||
@@ -320,8 +323,8 @@ END_IF
|
|||||||
|
|
||||||
// Call string 2
|
// Call string 2
|
||||||
_afbStrings[1](
|
_afbStrings[1](
|
||||||
stStringModuleVoltageConfig := GVL_CONFIG.stString2VoltageConfig,
|
|
||||||
xEnable := _xEnableString,
|
xEnable := _xEnableString,
|
||||||
|
xErrorShutdown := _xErrorShutdown,
|
||||||
xStartBalancing := _xStartBalancing,
|
xStartBalancing := _xStartBalancing,
|
||||||
sInverterIP := GVL_CONFIG.sInverterIpString2,
|
sInverterIP := GVL_CONFIG.sInverterIpString2,
|
||||||
rPowerInverter := _arPowerString[1],
|
rPowerInverter := _arPowerString[1],
|
||||||
@@ -353,6 +356,7 @@ _rMaxCurrentInverterDCVoltage := 0.0;
|
|||||||
_rMinCurrentInverterDCVoltage := 10_000;
|
_rMinCurrentInverterDCVoltage := 10_000;
|
||||||
_rHighestSegmentVoltage := 0.0;
|
_rHighestSegmentVoltage := 0.0;
|
||||||
_rSmallestSegmentVoltage := 1_000.0;
|
_rSmallestSegmentVoltage := 1_000.0;
|
||||||
|
_xStringsInAutoMode := TRUE;
|
||||||
|
|
||||||
FOR _ui := 0 TO (GVL_CONFIG.uiNumberOfStrings-1) DO
|
FOR _ui := 0 TO (GVL_CONFIG.uiNumberOfStrings-1) DO
|
||||||
// Check ready state
|
// Check ready state
|
||||||
@@ -409,6 +413,11 @@ FOR _ui := 0 TO (GVL_CONFIG.uiNumberOfStrings-1) DO
|
|||||||
IF _rHighestSegmentVoltage < _afbStrings[_ui].rHighestSegmentVoltage THEN
|
IF _rHighestSegmentVoltage < _afbStrings[_ui].rHighestSegmentVoltage THEN
|
||||||
_rHighestSegmentVoltage := _afbStrings[_ui].rHighestSegmentVoltage;
|
_rHighestSegmentVoltage := _afbStrings[_ui].rHighestSegmentVoltage;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
// Get auto mode status
|
||||||
|
IF NOT _afbStrings[_ui].xAllModulesInAutoMode THEN
|
||||||
|
_xStringsInAutoMode := FALSE;
|
||||||
|
END_IF
|
||||||
END_FOR
|
END_FOR
|
||||||
|
|
||||||
// ===============================
|
// ===============================
|
||||||
@@ -489,7 +498,6 @@ FOR _ui := 0 TO (GVL_CONFIG.uiNumberOfStrings-1) DO
|
|||||||
END_FOR
|
END_FOR
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Set Modbus mirror values
|
// Set Modbus mirror values
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.diSetpointActivePowerMirror := GVL_MODBUS.stModbusEMSComm.stModbusReg12.diSetpointActivePower;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.diSetpointActivePowerMirror := GVL_MODBUS.stModbusEMSComm.stModbusReg12.diSetpointActivePower;
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.rSetpointCosPhiMirror := GVL_MODBUS.stModbusEMSComm.stModbusReg12.rSetpointCosPhi;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.rSetpointCosPhiMirror := GVL_MODBUS.stModbusEMSComm.stModbusReg12.rSetpointCosPhi;
|
||||||
@@ -563,7 +571,7 @@ CASE _eBMSControlMode OF
|
|||||||
_xAllComponentsToManualMode := FALSE;
|
_xAllComponentsToManualMode := FALSE;
|
||||||
_xInSafetyCheckMode := FALSE;
|
_xInSafetyCheckMode := FALSE;
|
||||||
_xReleaseManualMode := FALSE;
|
_xReleaseManualMode := FALSE;
|
||||||
IF (_iState <> 30) OR _rAutoPowerRequest = 0.0 THEN
|
IF (_iState <> 30) OR GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic = 0 THEN
|
||||||
_rAutoPowerRequest := DINT_TO_REAL(GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic);
|
_rAutoPowerRequest := DINT_TO_REAL(GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic);
|
||||||
END_IF
|
END_IF
|
||||||
IF (GVL_SCADA.eRequestedControlMode <> _eBMSControlMode) AND (GVL_SCADA.xCanChangeControlMode) THEN
|
IF (GVL_SCADA.eRequestedControlMode <> _eBMSControlMode) AND (GVL_SCADA.xCanChangeControlMode) THEN
|
||||||
@@ -578,8 +586,36 @@ GVL_SCADA.eCurrentControlMode := _eBMSControlMode;
|
|||||||
// Calculate current battery dc power
|
// Calculate current battery dc power
|
||||||
GVL_SCADA.diCurrentBatteryPower := REAL_TO_DINT(_afbStrings[0].stInverterData.rActDCPower + _afbStrings[1].stInverterData.rActDCPower);
|
GVL_SCADA.diCurrentBatteryPower := REAL_TO_DINT(_afbStrings[0].stInverterData.rActDCPower + _afbStrings[1].stInverterData.rActDCPower);
|
||||||
|
|
||||||
|
// Read power values if commanded
|
||||||
|
_fbPowerMeterPower(
|
||||||
|
xGetEnergyCounters:= _xGetPowerMeterData,
|
||||||
|
sIpAddress:= '192.168.42.75',
|
||||||
|
lrEnergyFromGrid=> GVL_SCADA.lrChargedPowerValueWH,
|
||||||
|
lrEnergyIntoGrid=> GVL_SCADA.lrDischargedPowerValueWH,
|
||||||
|
xBusy=> ,
|
||||||
|
xError=> );
|
||||||
|
|
||||||
|
_fbPowerMeter24V(
|
||||||
|
xGetEnergyCounters:= _xGetPowerMeterData,
|
||||||
|
sIpAddress:= '192.168.42.80',
|
||||||
|
lrEnergyFromGrid=> GVL_SCADA.lrLastCycleUtilityPowerValueWh,
|
||||||
|
lrEnergyIntoGrid=> ,
|
||||||
|
xBusy=> ,
|
||||||
|
xError=> );
|
||||||
|
|
||||||
|
IF _xGetPowerMeterData THEN
|
||||||
|
_xGetPowerMeterData := FALSE;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
|
// Call safety fb
|
||||||
_fbSafety();
|
_fbSafety();
|
||||||
|
|
||||||
|
// Check if all modules are in auto mode
|
||||||
|
IF _xStringsInAutoMode AND _fbNoAutomaticModeAlarm.bRaised THEN
|
||||||
|
_fbNoAutomaticModeAlarm.Clear(0, TRUE);
|
||||||
|
END_IF
|
||||||
|
|
||||||
// Reset automatic buttons
|
// Reset automatic buttons
|
||||||
IF GVL_SCADA.stAutomaticModeHMI.stStartAutoButton.xRequest THEN
|
IF GVL_SCADA.stAutomaticModeHMI.stStartAutoButton.xRequest THEN
|
||||||
GVL_SCADA.stAutomaticModeHMI.stStartAutoButton.xRequest := FALSE;
|
GVL_SCADA.stAutomaticModeHMI.stStartAutoButton.xRequest := FALSE;
|
||||||
@@ -591,16 +627,24 @@ END_IF
|
|||||||
// Reset alarm confirmation
|
// Reset alarm confirmation
|
||||||
IF _xConfirmAlarms OR _rtHardwareResetButton.Q THEN
|
IF _xConfirmAlarms OR _rtHardwareResetButton.Q THEN
|
||||||
_xConfirmAlarms := FALSE;
|
_xConfirmAlarms := FALSE;
|
||||||
END_IF]]></ST>
|
END_IF
|
||||||
|
|
||||||
|
_fbPowerMeter24V();]]></ST>
|
||||||
</Implementation>
|
</Implementation>
|
||||||
<Action Name="SM_AUTO" Id="{b5166e16-4fea-442b-9560-02c156f9a9ad}">
|
<Action Name="SM_AUTO" Id="{b5166e16-4fea-442b-9560-02c156f9a9ad}">
|
||||||
<Implementation>
|
<Implementation>
|
||||||
<ST><![CDATA[CASE _iState OF
|
<ST><![CDATA[CASE _iState OF
|
||||||
0: // Idle
|
0: // Idle
|
||||||
|
// Check for all in auto mode
|
||||||
|
IF (NOT _xStringsInAutoMode) AND (NOT _fbNoAutomaticModeAlarm.bRaised) THEN
|
||||||
|
_fbNoAutomaticModeAlarm.Raise(0);
|
||||||
|
END_IF
|
||||||
|
|
||||||
// Wait for power command
|
// Wait for power command
|
||||||
IF (ABS(_rAutoPowerRequest) > DINT_TO_REAL(GVL_CONFIG.diMinimumAbsPowerForEnable)) AND (NOT _xStringsErrorActive) AND _xStringsAllInAutomaticMode THEN
|
IF (ABS(_rAutoPowerRequest) > DINT_TO_REAL(GVL_CONFIG.diMinimumAbsPowerForEnable)) AND (NOT _xStringsErrorActive) AND _xStringsAllInAutomaticMode THEN
|
||||||
_iState := 5;
|
_iState := 5;
|
||||||
_xCanChangeMode := FALSE;
|
_xCanChangeMode := FALSE;
|
||||||
|
_xErrorShutdown := FALSE;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
5: // Check if power command is within limits
|
5: // Check if power command is within limits
|
||||||
@@ -621,8 +665,12 @@ END_IF]]></ST>
|
|||||||
_fbStringReadyTimeout(IN := TRUE, PT := GVL_CONFIG.timStringReadyTimeout);
|
_fbStringReadyTimeout(IN := TRUE, PT := GVL_CONFIG.timStringReadyTimeout);
|
||||||
|
|
||||||
IF _xStringsReady AND (NOT _xStringsErrorActive) THEN
|
IF _xStringsReady AND (NOT _xStringsErrorActive) THEN
|
||||||
|
_xGetPowerMeterData := TRUE;
|
||||||
_fbStringReadyTimeout(IN := FALSE);
|
_fbStringReadyTimeout(IN := FALSE);
|
||||||
_rPowerInverter := 0.0;
|
_rPowerInverter := 0.0;
|
||||||
|
// Set active parallel members (modbus)
|
||||||
|
GVL_MODBUS.stModbusEMSComm.stModbusReg10.uiActiveParallelMembers := GVL_CONFIG.uiNumberOfStrings;
|
||||||
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eBatteryStatus := E_BATTERY_STATUS.ACTIVE;
|
||||||
_iState := 30;
|
_iState := 30;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -656,10 +704,13 @@ END_IF]]></ST>
|
|||||||
|
|
||||||
// Set battery status
|
// Set battery status
|
||||||
IF _rAutoPowerRequest > 0 THEN
|
IF _rAutoPowerRequest > 0 THEN
|
||||||
|
GVL_SCADA.eCycleStatus := E_CYCLE_STATUS.DISCHARGE_STARTED;
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.DISCHARGING;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.DISCHARGING;
|
||||||
ELSIF _rAutoPowerRequest < 0 THEN
|
ELSIF _rAutoPowerRequest < 0 THEN
|
||||||
|
GVL_SCADA.eCycleStatus := E_CYCLE_STATUS.CHARGE_STARTED;
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.CHARGING;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.CHARGING;
|
||||||
ELSE
|
ELSE
|
||||||
|
GVL_SCADA.eCycleStatus := E_CYCLE_STATUS.OFF;
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.UNDEFINED;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.UNDEFINED;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -670,6 +721,12 @@ END_IF]]></ST>
|
|||||||
IF _tonBeginShutdown.Q THEN
|
IF _tonBeginShutdown.Q THEN
|
||||||
_tonBeginShutdown(In := FALSE);
|
_tonBeginShutdown(In := FALSE);
|
||||||
|
|
||||||
|
IF _rPowerInverter < 0 THEN
|
||||||
|
GVL_SCADA.eCycleStatus := E_CYCLE_STATUS.CHARGE_ENDED;
|
||||||
|
ELSIF _rPowerInverter > 0 THEN
|
||||||
|
GVL_SCADA.eCycleStatus := E_CYCLE_STATUS.DISCHARGE_ENDED;
|
||||||
|
END_IF
|
||||||
|
|
||||||
// Set inverter to zero power
|
// Set inverter to zero power
|
||||||
_rPowerInverter := 0.0;
|
_rPowerInverter := 0.0;
|
||||||
|
|
||||||
@@ -682,11 +739,11 @@ END_IF]]></ST>
|
|||||||
|
|
||||||
// Shutdown triggered by battery fully charged
|
// Shutdown triggered by battery fully charged
|
||||||
IF GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus = E_CHARGE_STATUS.CHARGING AND ((_rMaxCurrentInverterDCVoltage >= GVL_CONFIG.rStringFullyChargedVoltage) OR _rHighestSegmentVoltage >= GVL_CONFIG.rMaximumUnitVoltage) THEN
|
IF GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus = E_CHARGE_STATUS.CHARGING AND ((_rMaxCurrentInverterDCVoltage >= GVL_CONFIG.rStringFullyChargedVoltage) OR _rHighestSegmentVoltage >= GVL_CONFIG.rMaximumUnitVoltage) THEN
|
||||||
|
_xGetPowerMeterData := TRUE;
|
||||||
IF (_eBMSControlMode = E_BMS_CONTROL_MODE.CYCLING) THEN
|
IF (_eBMSControlMode = E_BMS_CONTROL_MODE.CYCLING) THEN
|
||||||
|
GVL_SCADA.eCycleStatus := E_CYCLE_STATUS.DISCHARGE_STARTED;
|
||||||
_rAutoPowerRequest := _rAutoPowerRequest * -1;
|
_rAutoPowerRequest := _rAutoPowerRequest * -1;
|
||||||
// Change of charge discharge should be handled in next cycle by same state
|
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := REAL_TO_DINT(_rAutoPowerRequest);
|
||||||
// GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.DISCHARGING;
|
|
||||||
ELSE
|
ELSE
|
||||||
_tonBeginShutdown(In := FALSE);
|
_tonBeginShutdown(In := FALSE);
|
||||||
|
|
||||||
@@ -712,10 +769,11 @@ END_IF]]></ST>
|
|||||||
|
|
||||||
// Shutdown triggered by battery empty
|
// Shutdown triggered by battery empty
|
||||||
IF GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus = E_CHARGE_STATUS.DISCHARGING AND ((_rMinCurrentInverterDCVoltage <= GVL_CONFIG.rStringEmptyVoltage) OR _rSmallestSegmentVoltage <= GVL_CONFIG.rMinimumUnitVoltage) THEN
|
IF GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus = E_CHARGE_STATUS.DISCHARGING AND ((_rMinCurrentInverterDCVoltage <= GVL_CONFIG.rStringEmptyVoltage) OR _rSmallestSegmentVoltage <= GVL_CONFIG.rMinimumUnitVoltage) THEN
|
||||||
|
_xGetPowerMeterData := TRUE;
|
||||||
IF (_eBMSControlMode = E_BMS_CONTROL_MODE.CYCLING) THEN
|
IF (_eBMSControlMode = E_BMS_CONTROL_MODE.CYCLING) THEN
|
||||||
|
GVL_SCADA.eCycleStatus := E_CYCLE_STATUS.CHARGE_STARTED;
|
||||||
_rAutoPowerRequest := _rAutoPowerRequest * -1;
|
_rAutoPowerRequest := _rAutoPowerRequest * -1;
|
||||||
// Change of charge discharge should be handled in next cycle by same state
|
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := REAL_TO_DINT(_rAutoPowerRequest);
|
||||||
// GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.CHARGING;
|
|
||||||
ELSE
|
ELSE
|
||||||
_tonBeginShutdown(In := FALSE);
|
_tonBeginShutdown(In := FALSE);
|
||||||
|
|
||||||
@@ -741,6 +799,7 @@ END_IF]]></ST>
|
|||||||
// Check for errors
|
// Check for errors
|
||||||
IF _xStringsErrorActive THEN
|
IF _xStringsErrorActive THEN
|
||||||
_xEnableString := FALSE;
|
_xEnableString := FALSE;
|
||||||
|
_xErrorShutdown := TRUE;
|
||||||
_tonBeginShutdown(In := FALSE);
|
_tonBeginShutdown(In := FALSE);
|
||||||
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
|
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
|
||||||
_xCanChangeMode := TRUE;
|
_xCanChangeMode := TRUE;
|
||||||
@@ -757,12 +816,15 @@ END_IF]]></ST>
|
|||||||
_xEnableString := FALSE;
|
_xEnableString := FALSE;
|
||||||
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
|
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
|
||||||
_xCanChangeMode := TRUE;
|
_xCanChangeMode := TRUE;
|
||||||
|
GVL_MODBUS.stModbusEMSComm.stModbusReg10.uiActiveParallelMembers := 0;
|
||||||
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eBatteryStatus := E_BATTERY_STATUS.OFF;
|
||||||
_iState := 45;
|
_iState := 45;
|
||||||
END_IF
|
END_IF
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
// Check for errors
|
// Check for errors
|
||||||
IF _xStringsErrorActive THEN
|
IF _xStringsErrorActive THEN
|
||||||
|
_xErrorShutdown := TRUE;
|
||||||
_iState := 1000;
|
_iState := 1000;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -770,6 +832,8 @@ END_IF]]></ST>
|
|||||||
IF _xStringsShutdownDischargeAllowed THEN
|
IF _xStringsShutdownDischargeAllowed THEN
|
||||||
_rPowerInverter := GVL_CONFIG.rAbsShutdownDischargePower;
|
_rPowerInverter := GVL_CONFIG.rAbsShutdownDischargePower;
|
||||||
ELSE
|
ELSE
|
||||||
|
_xGetPowerMeterData := TRUE;
|
||||||
|
GVL_MODBUS.stModbusEMSComm.stModbusReg10.uiActiveParallelMembers := 0;
|
||||||
_rPowerInverter := 0.0;
|
_rPowerInverter := 0.0;
|
||||||
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
|
GVL_SCADA.stAutomaticModeHMI.diSetpointAutomatic := 0;
|
||||||
_xEnableString := FALSE;
|
_xEnableString := FALSE;
|
||||||
@@ -779,6 +843,7 @@ END_IF]]></ST>
|
|||||||
|
|
||||||
// Check for errors
|
// Check for errors
|
||||||
IF _xStringsErrorActive THEN
|
IF _xStringsErrorActive THEN
|
||||||
|
_xErrorShutdown := TRUE;
|
||||||
_iState := 1000;
|
_iState := 1000;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -791,6 +856,7 @@ END_IF]]></ST>
|
|||||||
IF (NOT _xStringsInSchutdownDischargeMode) AND _xStringsOff THEN
|
IF (NOT _xStringsInSchutdownDischargeMode) AND _xStringsOff THEN
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eBatteryStatus := E_BATTERY_STATUS.OFF;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eBatteryStatus := E_BATTERY_STATUS.OFF;
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.UNDEFINED;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eChargeStatus := E_CHARGE_STATUS.UNDEFINED;
|
||||||
|
GVL_SCADA.eCycleStatus := E_CYCLE_STATUS.OFF;
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
@@ -802,11 +868,13 @@ END_IF]]></ST>
|
|||||||
|
|
||||||
// Check for errors
|
// Check for errors
|
||||||
IF _xStringsErrorActive THEN
|
IF _xStringsErrorActive THEN
|
||||||
|
_xErrorShutdown := TRUE;
|
||||||
_iState := 1000;
|
_iState := 1000;
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
1000: // Error state
|
1000: // Error state
|
||||||
|
GVL_MODBUS.stModbusEMSComm.stModbusReg10.uiActiveParallelMembers := 0;
|
||||||
_xEnableString := FALSE;
|
_xEnableString := FALSE;
|
||||||
_rPowerInverter := 0.0;
|
_rPowerInverter := 0.0;
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eBatteryStatus := E_BATTERY_STATUS.ERROR;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eBatteryStatus := E_BATTERY_STATUS.ERROR;
|
||||||
@@ -820,6 +888,9 @@ END_IF]]></ST>
|
|||||||
// Reset modbus error flag
|
// Reset modbus error flag
|
||||||
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eBatteryStatus := E_BATTERY_STATUS.OFF;
|
GVL_MODBUS.stModbusEMSComm.stModbusReg11.eBatteryStatus := E_BATTERY_STATUS.OFF;
|
||||||
|
|
||||||
|
// Reset error shutdown flag
|
||||||
|
_xErrorShutdown := FALSE;
|
||||||
|
|
||||||
// Goto init state
|
// Goto init state
|
||||||
_iState := 0;
|
_iState := 0;
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ VAR_INPUT
|
|||||||
sInverterIPAddr : STRING;
|
sInverterIPAddr : STRING;
|
||||||
xEnable : BOOL;
|
xEnable : BOOL;
|
||||||
rPower : REAL;
|
rPower : REAL;
|
||||||
rReactivePower : REAL := 0.0;
|
//rReactivePower : REAL := 0.0;
|
||||||
xReset : BOOL;
|
xReset : BOOL;
|
||||||
rMaxBattPower : REAL := 40_000; // 24kW
|
rMaxBattPower : REAL := 40_000; // 24kW
|
||||||
END_VAR
|
END_VAR
|
||||||
@@ -34,7 +34,7 @@ VAR
|
|||||||
_fbWriteRegister : FB_MBWriteRegs;
|
_fbWriteRegister : FB_MBWriteRegs;
|
||||||
|
|
||||||
// Timer for checking if the inverter started in a reasonable amount of time
|
// Timer for checking if the inverter started in a reasonable amount of time
|
||||||
_tonInverterStartup : TON;
|
//_tonInverterStartup : TON;
|
||||||
|
|
||||||
// converter max power scaling factor
|
// converter max power scaling factor
|
||||||
_iWMaxSF : INT;
|
_iWMaxSF : INT;
|
||||||
@@ -52,17 +52,17 @@ VAR
|
|||||||
_iVarPctSF : INT;
|
_iVarPctSF : INT;
|
||||||
|
|
||||||
// Reread set power limit
|
// Reread set power limit
|
||||||
_iWMaxLimPctRead : INT;
|
//_iWMaxLimPctRead : INT;
|
||||||
_rWMaxLimPctReadScaled : REAL;
|
//_rWMaxLimPctReadScaled : REAL;
|
||||||
|
|
||||||
// Scaling factor for power limiting
|
// Scaling factor for power limiting
|
||||||
_iWMaxLimPctSF : INT;
|
_iWMaxLimPctSF : INT;
|
||||||
|
|
||||||
// Unscaled maximum power from type label
|
// Unscaled maximum power from type label
|
||||||
_iWRTGSF : INT;
|
//_iWRTGSF : INT;
|
||||||
|
|
||||||
// Scaling for maximum power from type label
|
// Scaling for maximum power from type label
|
||||||
_rWRTGScaling : REAL;
|
//_rWRTGScaling : REAL;
|
||||||
|
|
||||||
// Current state of the inverters internal statemachine
|
// Current state of the inverters internal statemachine
|
||||||
_uiInverterState : UINT;
|
_uiInverterState : UINT;
|
||||||
@@ -121,6 +121,9 @@ VAR
|
|||||||
|
|
||||||
_sName : STRING;
|
_sName : STRING;
|
||||||
|
|
||||||
|
_uiSetPowerLimitErrorCounter : UINT;
|
||||||
|
_uiLastSetPowerLimitErrorCounter : UINT;
|
||||||
|
|
||||||
END_VAR
|
END_VAR
|
||||||
VAR CONSTANT
|
VAR CONSTANT
|
||||||
// Inverter statemachine status register
|
// Inverter statemachine status register
|
||||||
@@ -157,11 +160,11 @@ VAR CONSTANT
|
|||||||
|
|
||||||
// Maximum inverter output power from type label
|
// Maximum inverter output power from type label
|
||||||
// Size 1, uint16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
|
// Size 1, uint16 (Range = 0 .. 65534, Not implemented = 0xFFFF)
|
||||||
W_RTG_REGISTER : WORD := 40125;
|
//W_RTG_REGISTER : WORD := 40125;
|
||||||
|
|
||||||
// Maximum inverter output power from type label scaling factor
|
// Maximum inverter output power from type label scaling factor
|
||||||
// Size 1, sunssf (int16) (Range = -10 .. 10, Not implemented 0x8000)
|
// Size 1, sunssf (int16) (Range = -10 .. 10, Not implemented 0x8000)
|
||||||
W_RTG_SF_REGISTER : WORD := 40126;
|
//W_RTG_SF_REGISTER : WORD := 40126;
|
||||||
|
|
||||||
// Start of register with the current dc values
|
// Start of register with the current dc values
|
||||||
// Size 4
|
// Size 4
|
||||||
@@ -229,9 +232,6 @@ CASE _iState OF
|
|||||||
_tonPollingTimer(IN := TRUE, PT := _timPollingDelay);
|
_tonPollingTimer(IN := TRUE, PT := _timPollingDelay);
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1: // Read inverter status
|
1: // Read inverter status
|
||||||
_fbReadRegister(
|
_fbReadRegister(
|
||||||
sIPAddr:= sInverterIPAddr,
|
sIPAddr:= sInverterIPAddr,
|
||||||
@@ -631,18 +631,30 @@ CASE _iState OF
|
|||||||
_iState := 50;
|
_iState := 50;
|
||||||
_rOldPower := rPower;
|
_rOldPower := rPower;
|
||||||
_uiMaxLimEn := 1;
|
_uiMaxLimEn := 1;
|
||||||
|
_uiLastSetPowerLimitErrorCounter := _uiSetPowerLimitErrorCounter;
|
||||||
|
_uiSetPowerLimitErrorCounter := 0;
|
||||||
// Calculate reactive power setting
|
// Calculate reactive power setting
|
||||||
//_iMaxPowerVar := LREAL_TO_INT((rReactivePower*100)/(_iMaxPowerVar * EXPT(10,_iVarPctSF)));
|
//_iMaxPowerVar := LREAL_TO_INT((rReactivePower*100)/(_iMaxPowerVar * EXPT(10,_iVarPctSF)));
|
||||||
ELSE
|
ELSE
|
||||||
xError := TRUE;
|
_uiSetPowerLimitErrorCounter := _uiSetPowerLimitErrorCounter + 1;
|
||||||
// Goto error state
|
IF _uiSetPowerLimitErrorCounter > 5 THEN
|
||||||
_iState := 1000;
|
// Goto error state
|
||||||
|
_iState := 1000;
|
||||||
|
ELSE
|
||||||
|
_iState := 41;
|
||||||
|
END_IF
|
||||||
END_IF
|
END_IF
|
||||||
_fbWriteRegister(bExecute := FALSE);
|
_fbWriteRegister(bExecute := FALSE);
|
||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
41: // Retry send power limit delay
|
||||||
|
_tonPollingTimer(IN := TRUE, PT := _timPollingDelay);
|
||||||
|
IF _tonPollingTimer.Q THEN
|
||||||
|
_tonPollingTimer(IN := FALSE);
|
||||||
|
_iState := 40;
|
||||||
|
END_IF
|
||||||
|
|
||||||
41: // Set max reactive power in percent
|
42: // Set max reactive power in percent
|
||||||
_iErrorInState := _iState;
|
_iErrorInState := _iState;
|
||||||
_fbWriteRegister(
|
_fbWriteRegister(
|
||||||
sIPAddr:= sInverterIPAddr,
|
sIPAddr:= sInverterIPAddr,
|
||||||
@@ -672,7 +684,7 @@ CASE _iState OF
|
|||||||
END_IF
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
42: // Enable reactive power percent limiting
|
43: // Enable reactive power percent limiting
|
||||||
_iErrorInState := _iState;
|
_iErrorInState := _iState;
|
||||||
_fbWriteRegister(
|
_fbWriteRegister(
|
||||||
sIPAddr:= sInverterIPAddr,
|
sIPAddr:= sInverterIPAddr,
|
||||||
@@ -799,7 +811,7 @@ CASE _iState OF
|
|||||||
_iState := 70;
|
_iState := 70;
|
||||||
ELSIF (ABS(rPower - _rOldPower) > 0.1) THEN
|
ELSIF (ABS(rPower - _rOldPower) > 0.1) THEN
|
||||||
//_tonPollingTimer(IN := FALSE);
|
//_tonPollingTimer(IN := FALSE);
|
||||||
// If power has ben changed, goto set power limit mode
|
// If power has been changed, goto set power limit mode
|
||||||
_iState := 40;
|
_iState := 40;
|
||||||
// Calculate power to write to register
|
// Calculate power to write to register
|
||||||
_iWMaxLimPct := LREAL_TO_INT((rPower*100)/(_rWMax * EXPT(10,_iWMaxLimPctSF)));
|
_iWMaxLimPct := LREAL_TO_INT((rPower*100)/(_rWMax * EXPT(10,_iWMaxLimPctSF)));
|
||||||
@@ -833,7 +845,7 @@ CASE _iState OF
|
|||||||
// Check if reading mudbus register is done
|
// Check if reading mudbus register is done
|
||||||
IF NOT _fbReadRegister.bBusy THEN
|
IF NOT _fbReadRegister.bBusy THEN
|
||||||
// If there was no error and the converter has no error continue
|
// If there was no error and the converter has no error continue
|
||||||
IF NOT _fbReadRegister.bError AND (_uiInverterState <> 7) THEN
|
IF (NOT _fbReadRegister.bError) AND (_uiInverterState <> 7) THEN
|
||||||
_iState := 80;
|
_iState := 80;
|
||||||
IF (_uiInverterState = 4) OR (_uiInverterState = 5) THEN
|
IF (_uiInverterState = 4) OR (_uiInverterState = 5) THEN
|
||||||
xActive := TRUE;
|
xActive := TRUE;
|
||||||
@@ -842,6 +854,7 @@ CASE _iState OF
|
|||||||
END_IF
|
END_IF
|
||||||
ELSE
|
ELSE
|
||||||
xError := TRUE;
|
xError := TRUE;
|
||||||
|
xActive := FALSE;
|
||||||
_uiPCSSetOperation := 3;
|
_uiPCSSetOperation := 3;
|
||||||
// Read error register
|
// Read error register
|
||||||
_iState := 200;
|
_iState := 200;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<MultiSetting Crc="227871081" Version="1.2">
|
<MultiSetting Crc="1554816737" Version="1.2">
|
||||||
<ProjectData>
|
<ProjectData>
|
||||||
<Id>1</Id>
|
<Id>1</Id>
|
||||||
<TargetSystem>
|
<TargetSystem>
|
||||||
@@ -214,9 +214,6 @@
|
|||||||
<SubType>EL2912</SubType>
|
<SubType>EL2912</SubType>
|
||||||
<ObjectId>50462856</ObjectId>
|
<ObjectId>50462856</ObjectId>
|
||||||
<SafeAddress>28</SafeAddress>
|
<SafeAddress>28</SafeAddress>
|
||||||
<Customizing>
|
|
||||||
<Group Id="87605930-f4c2-4c12-816d-f0103cb2103d" Value="3" />
|
|
||||||
</Customizing>
|
|
||||||
</TargetSystem>
|
</TargetSystem>
|
||||||
<SafetyAliasDevice>
|
<SafetyAliasDevice>
|
||||||
<SdsId>36</SdsId>
|
<SdsId>36</SdsId>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<TargetSystemConfig Crc="2950660737" Version="1.5">
|
<TargetSystemConfig Crc="960810402" Version="1.5">
|
||||||
<TargetSystemType>HSafetyPLC</TargetSystemType>
|
<TargetSystemType>HSafetyPLC</TargetSystemType>
|
||||||
<TargetSystemSubType>EL2912</TargetSystemSubType>
|
<TargetSystemSubType>EL2912</TargetSystemSubType>
|
||||||
<IsExternalDevice>false</IsExternalDevice>
|
<IsExternalDevice>false</IsExternalDevice>
|
||||||
@@ -19,7 +19,4 @@
|
|||||||
<TakeOverSafetyAliasDeviceNamesInProcessImage>true</TakeOverSafetyAliasDeviceNamesInProcessImage>
|
<TakeOverSafetyAliasDeviceNamesInProcessImage>true</TakeOverSafetyAliasDeviceNamesInProcessImage>
|
||||||
<TakeOverStandardAliasDeviceNamesInProcessImage>true</TakeOverStandardAliasDeviceNamesInProcessImage>
|
<TakeOverStandardAliasDeviceNamesInProcessImage>true</TakeOverStandardAliasDeviceNamesInProcessImage>
|
||||||
<BackupRestore Needed="0" Activated="false" RestoreUserAdministration="false" />
|
<BackupRestore Needed="0" Activated="false" RestoreUserAdministration="false" />
|
||||||
<Customizing>
|
|
||||||
<Group Id="87605930-f4c2-4c12-816d-f0103cb2103d" Value="3" />
|
|
||||||
</Customizing>
|
|
||||||
</TargetSystemConfig>
|
</TargetSystemConfig>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<safetyApplicationLanguageDiagram Crc="869283338" dslVersion="1.5.0.0" Id="9a7b4433-819d-4434-a4a1-e2355dd620be" absoluteBounds="0, 0, 21.25, 8.875" name="TwinSAFE">
|
<safetyApplicationLanguageDiagram Crc="4118129176" dslVersion="1.5.0.0" Id="9a7b4433-819d-4434-a4a1-e2355dd620be" absoluteBounds="0, 0, 21.25, 8.875" name="TwinSAFE">
|
||||||
<safetyApplicationMoniker name="/" />
|
<safetyApplicationMoniker name="/" />
|
||||||
<nestedChildShapes>
|
<nestedChildShapes>
|
||||||
<networkSwimLane Id="89d3a4cb-3555-4abf-9fc8-512ca8807374" absoluteBounds="0, 0, 21.25, 8.875">
|
<networkSwimLane Id="89d3a4cb-3555-4abf-9fc8-512ca8807374" absoluteBounds="0, 0, 21.25, 8.875">
|
||||||
@@ -227,7 +227,7 @@
|
|||||||
<inPortShapeMoniker Id="d0e8181c-bfb6-4014-b3e7-1b842ad2d7bf" />
|
<inPortShapeMoniker Id="d0e8181c-bfb6-4014-b3e7-1b842ad2d7bf" />
|
||||||
</nodes>
|
</nodes>
|
||||||
</wiredLinkConnector>
|
</wiredLinkConnector>
|
||||||
<wiredLinkConnector Id="df04cf89-8c9c-4217-9a39-1165f1d5ef35" edgePoints="[(11.65 : 3.36); (12.025 : 3.36); (12.025 : 3.32); (17.045 : 3.32)]" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
|
<wiredLinkConnector Id="df04cf89-8c9c-4217-9a39-1165f1d5ef35" edgePoints="[(11.65 : 3.36); (12.025 : 3.36); (12.025 : 1.85224353351659); (15.3884 : 1.85224353351659); (15.3884 : 3.32); (17.045 : 3.32)]" manuallyRouted="true" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
|
||||||
<wiredLinkMoniker Id="18efdc2f-a834-43f7-aa67-b3315207b846" />
|
<wiredLinkMoniker Id="18efdc2f-a834-43f7-aa67-b3315207b846" />
|
||||||
<nodes>
|
<nodes>
|
||||||
<outPortShapeMoniker Id="e4215917-e138-4686-8a29-bcc83250733a" />
|
<outPortShapeMoniker Id="e4215917-e138-4686-8a29-bcc83250733a" />
|
||||||
|
|||||||
@@ -269,7 +269,7 @@
|
|||||||
</System>
|
</System>
|
||||||
<Plc>
|
<Plc>
|
||||||
<Project GUID="{9AE64910-5EB2-4866-93FD-EFE059C38C36}" Name="PLC" PrjFilePath="PLC\PLC.plcproj" TmcFilePath="PLC\PLC.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true">
|
<Project GUID="{9AE64910-5EB2-4866-93FD-EFE059C38C36}" Name="PLC" PrjFilePath="PLC\PLC.plcproj" TmcFilePath="PLC\PLC.tmc" ReloadTmc="true" AmsPort="851" FileArchiveSettings="#x000e" CopyTmcToTarget="true" CopyTpyToTarget="false" SymbolicMapping="true">
|
||||||
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{D38151DB-7B35-9BBB-5607-C6EF9594E4EB}" TmcPath="PLC\PLC.tmc">
|
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{A93E0B35-31B3-621B-91F7-8267E02F5B8B}" TmcPath="PLC\PLC.tmc">
|
||||||
<Name>PLC Instance</Name>
|
<Name>PLC Instance</Name>
|
||||||
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
|
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
|
||||||
<Vars VarGrpType="2" AreaNo="1">
|
<Vars VarGrpType="2" AreaNo="1">
|
||||||
@@ -1302,10 +1302,6 @@
|
|||||||
<Name>MAIN._xEmergencyStopOk</Name>
|
<Name>MAIN._xEmergencyStopOk</Name>
|
||||||
<Type>BOOL</Type>
|
<Type>BOOL</Type>
|
||||||
</Var>
|
</Var>
|
||||||
<Var>
|
|
||||||
<Name>MAIN._xString1DCSafetyOk</Name>
|
|
||||||
<Type>BOOL</Type>
|
|
||||||
</Var>
|
|
||||||
<Var>
|
<Var>
|
||||||
<Name>MAIN._afbStrings[0].xSafetyIntlksOk</Name>
|
<Name>MAIN._afbStrings[0].xSafetyIntlksOk</Name>
|
||||||
<Comment><![CDATA[ All safetyinterlocks from safety plc are ok]]></Comment>
|
<Comment><![CDATA[ All safetyinterlocks from safety plc are ok]]></Comment>
|
||||||
@@ -1355,6 +1351,7 @@
|
|||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
<Name>MAIN._afbStrings[0]._fbModule1.uiECState</Name>
|
<Name>MAIN._afbStrings[0]._fbModule1.uiECState</Name>
|
||||||
|
<Comment><![CDATA[ Current EtherCAT state]]></Comment>
|
||||||
<Type>UINT</Type>
|
<Type>UINT</Type>
|
||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
@@ -2266,6 +2263,7 @@
|
|||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
<Name>MAIN._afbStrings[0]._fbModule2.uiECState</Name>
|
<Name>MAIN._afbStrings[0]._fbModule2.uiECState</Name>
|
||||||
|
<Comment><![CDATA[ Current EtherCAT state]]></Comment>
|
||||||
<Type>UINT</Type>
|
<Type>UINT</Type>
|
||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
@@ -3177,6 +3175,7 @@
|
|||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
<Name>MAIN._afbStrings[0]._fbModule3.uiECState</Name>
|
<Name>MAIN._afbStrings[0]._fbModule3.uiECState</Name>
|
||||||
|
<Comment><![CDATA[ Current EtherCAT state]]></Comment>
|
||||||
<Type>UINT</Type>
|
<Type>UINT</Type>
|
||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
@@ -4141,6 +4140,7 @@
|
|||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
<Name>MAIN._afbStrings[1]._fbModule1.uiECState</Name>
|
<Name>MAIN._afbStrings[1]._fbModule1.uiECState</Name>
|
||||||
|
<Comment><![CDATA[ Current EtherCAT state]]></Comment>
|
||||||
<Type>UINT</Type>
|
<Type>UINT</Type>
|
||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
@@ -5052,6 +5052,7 @@
|
|||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
<Name>MAIN._afbStrings[1]._fbModule2.uiECState</Name>
|
<Name>MAIN._afbStrings[1]._fbModule2.uiECState</Name>
|
||||||
|
<Comment><![CDATA[ Current EtherCAT state]]></Comment>
|
||||||
<Type>UINT</Type>
|
<Type>UINT</Type>
|
||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
@@ -5963,6 +5964,7 @@
|
|||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
<Name>MAIN._afbStrings[1]._fbModule3.uiECState</Name>
|
<Name>MAIN._afbStrings[1]._fbModule3.uiECState</Name>
|
||||||
|
<Comment><![CDATA[ Current EtherCAT state]]></Comment>
|
||||||
<Type>UINT</Type>
|
<Type>UINT</Type>
|
||||||
</Var>
|
</Var>
|
||||||
<Var>
|
<Var>
|
||||||
@@ -43956,13 +43958,16 @@ Bit1: Value smaller than Limit2]]></Comment>
|
|||||||
<Link VarA="-41K1 (EK1100)^-42K1 (EL6910)^ConnectionOutputs^NotHaltString1.NotHaltInterface_26 RxPDO" VarB="ConnectionInputs^LocalSafety.GlobalSlaveEStopInterface_33 TxPDO"/>
|
<Link VarA="-41K1 (EK1100)^-42K1 (EL6910)^ConnectionOutputs^NotHaltString1.NotHaltInterface_26 RxPDO" VarB="ConnectionInputs^LocalSafety.GlobalSlaveEStopInterface_33 TxPDO"/>
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-14K1 (EL1904)^Module 1 (FSOES)^RxPDO^FSOE" VarB="ConnectionInputs^LocalSafety.-14K1 (EL1904) - Module 1 (FSOES)_32 TxPDO"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-14K1 (EL1904)^Module 1 (FSOES)^RxPDO^FSOE" VarB="ConnectionInputs^LocalSafety.-14K1 (EL1904) - Module 1 (FSOES)_32 TxPDO"/>
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-14K1 (EL1904)^Module 1 (FSOES)^TxPDO^FSOE" VarB="ConnectionOutputs^LocalSafety.-14K1 (EL1904) - Module 1 (FSOES)_32 RxPDO"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-14K1 (EL1904)^Module 1 (FSOES)^TxPDO^FSOE" VarB="ConnectionOutputs^LocalSafety.-14K1 (EL1904) - Module 1 (FSOES)_32 RxPDO"/>
|
||||||
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^S1M3 (EK1100)^=STRNG01++BATMOD03-40K1 (EL3214-0090)^Module 1 (EL3214-0090)^TSC Outputs^TSC" VarB="ConnectionInputs^TempCheck.++BATMOD03-40K1 (EL3214-0090) - Module 1 (EL3214-0090)_51 TxPDO"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)">
|
||||||
<Link VarA="-41K1 (EK1100)^-42K1 (EL6910)^ConnectionInputs^NotHaltString2.NotHAltInterface_27 TxPDO" VarB="ConnectionOutputs^LocalSafety.GlobalSlaveEStopInterface_33 RxPDO"/>
|
<Link VarA="-41K1 (EK1100)^-42K1 (EL6910)^ConnectionInputs^NotHaltString2.NotHAltInterface_27 TxPDO" VarB="ConnectionOutputs^LocalSafety.GlobalSlaveEStopInterface_33 RxPDO"/>
|
||||||
<Link VarA="-41K1 (EK1100)^-42K1 (EL6910)^ConnectionOutputs^NotHaltString2.NotHAltInterface_27 RxPDO" VarB="ConnectionInputs^LocalSafety.GlobalSlaveEStopInterface_33 TxPDO"/>
|
<Link VarA="-41K1 (EK1100)^-42K1 (EL6910)^ConnectionOutputs^NotHaltString2.NotHAltInterface_27 RxPDO" VarB="ConnectionInputs^LocalSafety.GlobalSlaveEStopInterface_33 TxPDO"/>
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-14K1 (EL1904)^Module 1 (FSOES)^RxPDO^FSOE" VarB="ConnectionInputs^LocalSafety.-14K1 (EL1904) - Module 1 (FSOES)_32 TxPDO"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-14K1 (EL1904)^Module 1 (FSOES)^RxPDO^FSOE" VarB="ConnectionInputs^LocalSafety.-14K1 (EL1904) - Module 1 (FSOES)_32 TxPDO"/>
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-14K1 (EL1904)^Module 1 (FSOES)^TxPDO^FSOE" VarB="ConnectionOutputs^LocalSafety.-14K1 (EL1904) - Module 1 (FSOES)_32 RxPDO"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-14K1 (EL1904)^Module 1 (FSOES)^TxPDO^FSOE" VarB="ConnectionOutputs^LocalSafety.-14K1 (EL1904) - Module 1 (FSOES)_32 RxPDO"/>
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K2 (EL3124-0090)^Module 1 (TwinSAFE Single Channel)^TSC Inputs^TSC" VarB="ConnectionOutputs^PressureCheck.++BATMOD01-34K2 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_24 RxPDO"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K1 (EL3124-0090)^Module 1 (TwinSAFE Single Channel)^TSC Outputs^TSC" VarB="ConnectionInputs^VoltageCheck.++BATMOD01-34K1 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_36 TxPDO"/>
|
||||||
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K2 (EL3124-0090)^Module 1 (TwinSAFE Single Channel)^TSC Outputs^TSC" VarB="ConnectionInputs^PressureCheck.++BATMOD01-34K2 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_24 TxPDO"/>
|
||||||
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-40K1 (EL3214-0090)^Module 1 (EL3214-0090)^TSC Outputs^TSC" VarB="ConnectionInputs^TempCheck.-40K1 (EL3214-0090) - Module 1 (EL3214-0090)_30 TxPDO"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S1M1 (EK1100)^=STRNG01++BATMOD01-34K1 (EL3124-0090)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S1M1 (EK1100)^=STRNG01++BATMOD01-34K1 (EL3124-0090)">
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionInputs^VoltageCheck.++BATMOD01-34K1 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_36 TxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Outputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionInputs^VoltageCheck.++BATMOD01-34K1 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_36 TxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Outputs^TSC"/>
|
||||||
@@ -44041,7 +44046,6 @@ Bit1: Value smaller than Limit2]]></Comment>
|
|||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionOutputs^PressureCheck.++BATMOD03-34K5 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_60 RxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Inputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionOutputs^PressureCheck.++BATMOD03-34K5 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_60 RxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Inputs^TSC"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S1M3 (EK1100)^=STRNG01++BATMOD03-40K1 (EL3214-0090)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S1M3 (EK1100)^=STRNG01++BATMOD03-40K1 (EL3214-0090)">
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionInputs^TempCheck.++BATMOD03-40K1 (EL3214-0090) - Module 1 (EL3214-0090)_51 TxPDO" VarB="Module 1 (EL3214-0090)^TSC Outputs^TSC"/>
|
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionOutputs^TempCheck.++BATMOD03-40K1 (EL3214-0090) - Module 1 (EL3214-0090)_51 RxPDO" VarB="Module 1 (EL3214-0090)^TSC Inputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionOutputs^TempCheck.++BATMOD03-40K1 (EL3214-0090) - Module 1 (EL3214-0090)_51 RxPDO" VarB="Module 1 (EL3214-0090)^TSC Inputs^TSC"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S1M3 (EK1100)^=STRNG01++BATMOD03-40K2 (EL3214-0090)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S1M3 (EK1100)^=STRNG01++BATMOD03-40K2 (EL3214-0090)">
|
||||||
@@ -44049,11 +44053,10 @@ Bit1: Value smaller than Limit2]]></Comment>
|
|||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionOutputs^TempCheck.++BATMOD03-40K2 (EL3214-0090) - Module 1 (EL3214-0090)_52 RxPDO" VarB="Module 1 (EL3214-0090)^TSC Inputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S1 (EK1100)^=STRNG01-15K1 (EL2912)^ConnectionOutputs^TempCheck.++BATMOD03-40K2 (EL3214-0090) - Module 1 (EL3214-0090)_52 RxPDO" VarB="Module 1 (EL3214-0090)^TSC Inputs^TSC"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K1 (EL3124-0090)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K1 (EL3124-0090)">
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionInputs^VoltageCheck.++BATMOD01-34K1 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_36 TxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Outputs^TSC"/>
|
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionOutputs^VoltageCheck.++BATMOD01-34K1 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_36 RxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Inputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionOutputs^VoltageCheck.++BATMOD01-34K1 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_36 RxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Inputs^TSC"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K2 (EL3124-0090)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K2 (EL3124-0090)">
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionInputs^PressureCheck.++BATMOD01-34K2 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_24 TxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Outputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionOutputs^PressureCheck.++BATMOD01-34K2 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_24 RxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Inputs^TSC"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K3 (EL3124-0090)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-34K3 (EL3124-0090)">
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionInputs^PressureCheck.++BATMOD01-34K3 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_25 TxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Outputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionInputs^PressureCheck.++BATMOD01-34K3 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_25 TxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Outputs^TSC"/>
|
||||||
@@ -44068,7 +44071,6 @@ Bit1: Value smaller than Limit2]]></Comment>
|
|||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionOutputs^PressureCheck.++BATMOD01-34K5 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_27 RxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Inputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionOutputs^PressureCheck.++BATMOD01-34K5 (EL3124-0090) - Module 1 (TwinSAFE Single Channel)_27 RxPDO" VarB="Module 1 (TwinSAFE Single Channel)^TSC Inputs^TSC"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-40K1 (EL3214-0090)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-40K1 (EL3214-0090)">
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionInputs^TempCheck.-40K1 (EL3214-0090) - Module 1 (EL3214-0090)_30 TxPDO" VarB="Module 1 (EL3214-0090)^TSC Outputs^TSC"/>
|
|
||||||
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionOutputs^TempCheck.-40K1 (EL3214-0090) - Module 1 (EL3214-0090)_30 RxPDO" VarB="Module 1 (EL3214-0090)^TSC Inputs^TSC"/>
|
<Link VarA="-41K1 (EK1100)^-47K1 (EK1122)^-10K1 X1 SCS S2 (EK1100)^=STRNG02-15K1 (EL2912)^ConnectionOutputs^TempCheck.-40K1 (EL3214-0090) - Module 1 (EL3214-0090)_30 RxPDO" VarB="Module 1 (EL3214-0090)^TSC Inputs^TSC"/>
|
||||||
</OwnerB>
|
</OwnerB>
|
||||||
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-40K2 (EL3214-0090)">
|
<OwnerB Name="TIID^X103 (EtherCAT)^-41K1 (EK1100)^-47K1 (EK1122)^S2M1 (EK1100)^=STRNG02++BATMOD01-40K2 (EL3214-0090)">
|
||||||
|
|||||||
@@ -42,4 +42,6 @@ xRepairSwitchOkPumpPosolyt -> Kein Reparaturschalter vorhanden
|
|||||||
xMCBOkPumpNegolyt -> OK
|
xMCBOkPumpNegolyt -> OK
|
||||||
|
|
||||||
// Repair switch ok pump negolyt
|
// Repair switch ok pump negolyt
|
||||||
xRepairSwitchOkPumpNegolyt -> Kein Reparaturschalter vorhanden
|
xRepairSwitchOkPumpNegolyt -> Kein Reparaturschalter vorhanden
|
||||||
|
|
||||||
|
kihBf4Y8SKLdcZ
|
||||||
Reference in New Issue
Block a user