IBN changes

added sync units for cabinet temperature, changes in modbus interface to EMS (1.0.4 and 1.0.5), added error counter to modbus communication, lot of changes to kaco (faults, consecutive errors, bms error messages), isolation error ledge, allowed startbalancing when on shutdown, tower light integration
This commit is contained in:
Markus.Neukirch
2025-09-05 14:24:37 +02:00
parent 69749409a3
commit f0e6143997
33 changed files with 1321 additions and 955 deletions

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="1631964590" FileFormatVersion="1.8">
<SafetyDeviceDesc Crc="3807308941" FileFormatVersion="1.9">
<AliasDeviceType>
<Type>16</Type>
<SubType>0</SubType>
@@ -20,7 +20,7 @@
<SafeAddress>100</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Messages InputMessageSize="6" OutputMessageSize="6" Tc2ConnectionType="452853760" CustomFSoEConnectionId="abaabd0a-ce90-4f58-aa2b-1505f1e3352d">
<Messages InputMessageSize="6" OutputMessageSize="6" Tc2ConnectionType="190853202" CustomFSoEConnectionId="abaabd0a-ce90-4f58-aa2b-1505f1e3352d">
<IO>
<Name>FSoE Cmd</Name>
<DataType>USINT</DataType>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="2131990763" FileFormatVersion="1.8">
<SafetyDeviceDesc Crc="4239964616" FileFormatVersion="1.9">
<AliasDeviceType>
<Type>16</Type>
<SubType>0</SubType>
@@ -20,7 +20,7 @@
<SafeAddress>101</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Messages InputMessageSize="6" OutputMessageSize="6" Tc2ConnectionType="452853760" CustomFSoEConnectionId="0cd2d33d-0aa6-477d-a159-9ea1f745f3fb">
<Messages InputMessageSize="6" OutputMessageSize="6" Tc2ConnectionType="190853202" CustomFSoEConnectionId="0cd2d33d-0aa6-477d-a159-9ea1f745f3fb">
<IO>
<Name>FSoE Cmd</Name>
<DataType>USINT</DataType>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TargetSystemConfig Crc="1876330355" Version="1.5">
<TargetSystemConfig Crc="2701606460" Version="1.5">
<TargetSystemType>HSafetyPLC</TargetSystemType>
<TargetSystemSubType>EL6910</TargetSystemSubType>
<IsExternalDevice>false</IsExternalDevice>
@@ -7,7 +7,7 @@
<TargetSystemObjectName>-42K1 (EL6910)</TargetSystemObjectName>
<SoftwareVersion>05 (V01.14) </SoftwareVersion>
<SerialNumber>4238305</SerialNumber>
<ProjectCRC>40393</ProjectCRC>
<ProjectCRC>48559</ProjectCRC>
<MapProjectCRC>false</MapProjectCRC>
<MapSerialNumber>false</MapSerialNumber>
<VersionNumber>1</VersionNumber>

View File

@@ -3,12 +3,14 @@
<DUT Name="ST_WORD_BMS_ERROR_BITMAP" Id="{33fc17c1-ae64-4c44-aa8c-117a09c656ef}">
<Declaration><![CDATA[TYPE ST_WORD_BMS_ERROR_BITMAP :
STRUCT
bEStop : BIT; // Bit 0
bEthercat : BIT; // Bit 1
bDCSwitchS1 : BIT; // Bit 2
bDCSwitchS2 : BIT; // Bit 3
bError : BIT; // Bit 4
bEMSHeartbeatError : BIT; // Bit 5
bEStop : BIT; // Bit 0
bEthercat : BIT; // Bit 1
bError : BIT; // Bit 2
bNAProtectionTripped : BIT; // Bit 3
bEMSHeartbeatError : BIT; // Bit 4
bSafetyErrorVoltage : BIT; // Bit 5
bSafetyErrorPressure : BIT; // Bit 6
bSafetyErrorTemperature : BIT; // Bit 7
END_STRUCT
END_TYPE
]]></Declaration>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_WORD_EMS_CONTROLS_BITMAP" Id="{7d022e67-048d-4e23-8921-2f5f928e5544}">
<Declaration><![CDATA[TYPE ST_WORD_EMS_CONTROLS_BITMAP :
STRUCT
bScheduleActive : BIT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_WORD_STRING_ERROR_BITMAP" Id="{3924c412-c367-4ea8-9118-864977c416ec}">
<Declaration><![CDATA[TYPE ST_WORD_STRING_ERROR_BITMAP :
STRUCT
bDCSwitch : BIT; // Bit 0
bInverterError : BIT; // Bit 1
bIsolationError : BIT; // Bit 2
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_EMS_CONTROLS_REGISTER" Id="{a1ff95b9-162c-49e5-b53b-4cd068746597}">
<Declaration><![CDATA[TYPE U_EMS_CONTROLS_REGISTER :
UNION
wRegister : WORD;
stBitmap : ST_WORD_EMS_CONTROLS_BITMAP;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_STRING_ERROR_REGISTER" Id="{7b446cc8-a059-4d03-be7a-fed0256cd889}">
<Declaration><![CDATA[TYPE U_STRING_ERROR_REGISTER :
UNION
wRegister : WORD;
stBitmap : ST_WORD_STRING_ERROR_BITMAP;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_MODBUS_REG_12" Id="{7c428918-2d8d-43ab-8096-edbee8bd4171}">
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
{attribute 'pack_mode' := '1'}
@@ -14,6 +14,9 @@ STRUCT
// Addr: 12.004
// Can be removed if cosphi can be written in pos and neg range
eReactivePowerType : E_REACTIVE_POWER_TYPE;
// Addr: 12.005
wBMSControlsRegister : U_EMS_CONTROLS_REGISTER;
END_STRUCT
END_TYPE
]]></Declaration>

View File

@@ -21,6 +21,14 @@ STRUCT
// (Bit 0 -> Error in string 1 active, Bit 1 -> String 2, etc.)
// Addr: 13.003
wStringErrorActive : WORD;
// String 1 error active
// Addr: 13.004
wString1ErrorActive : U_STRING_ERROR_REGISTER;
// String 2 error active
// Addr: 13.005
wString2ErrorActive : U_STRING_ERROR_REGISTER;
END_STRUCT
END_TYPE
]]></Declaration>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<GVL Name="GVL_CONFIG" Id="{0773bf51-0237-454d-a970-cfd896054edb}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL CONSTANT
@@ -293,6 +293,8 @@ VAR_GLOBAL PERSISTENT
{attribute 'analysis' := '-33'}
xDummy : BOOL := FALSE;
udiMaxConsecutiveInvError : UDINT := 10;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

View File

@@ -21,7 +21,7 @@ VAR_GLOBAL
stBMSErrorReg : ST_MODBUS_REG_13;
// Confirm alarms through modbus
// Addr: 13.004
// Addr: 13.006
wConfirmAlarms : WORD;
// Addr: 14.000 -> 14.047

View File

@@ -9,7 +9,7 @@
<WriteProductVersion>true</WriteProductVersion>
<GenerateTpy>false</GenerateTpy>
<Name>PLC</Name>
<ProgramVersion>3.1.4026.17</ProgramVersion>
<ProgramVersion>3.1.4026.18</ProgramVersion>
<Application>{afd0b275-de2f-4006-ab0f-6826ccfce7be}</Application>
<TypeSystem>{18a2eab9-0077-4cea-9d3b-9a168bdf0814}</TypeSystem>
<Implicit_Task_Info>{6e35f35d-280b-4da2-9c5b-fc35ab6da425}</Implicit_Task_Info>
@@ -68,15 +68,27 @@
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\ST_WORD_BMS_ERROR_BITMAP.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\ST_WORD_STRING_ERROR_BITMAP.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\ST_WORD_BMS_WARNING_BITMAP.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\ST_WORD_EMS_CONTROLS_BITMAP.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\U_BMS_ERROR_REGISTER.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\U_STRING_ERROR_REGISTER.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\U_BMS_WARNING_REGISTER.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\U_EMS_CONTROLS_REGISTER.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="DUTs\Modbus\ErrorWarningRegisters\U_UNIT_ERROR_REGISTER.TcDUT">
<SubType>Code</SubType>
</Compile>
@@ -237,12 +249,6 @@
<DefaultResolution>Tc3_Module, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc3_Module</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="UML State Chart Types">
<DefaultResolution>UML Statechart Types, 4.2.2.0 (3S - Smart Software Solutions GmbH)</DefaultResolution>
<Namespace>UML_SC</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>d9a6b70a-92f0-4827-8ca3-8ce8a61652d9</ResolverGuid>
</PlaceholderReference>
</ItemGroup>
<ItemGroup>
<None Include="PLC.tmc">
@@ -2616,7 +2622,7 @@
<d n="SubKeys" t="Hashtable" />
<d n="Values" t="Hashtable" ckt="String" cvt="String">
<v>ActiveVisuProfile</v>
<v>IR0whWr8bwfyBwAAaCbC8QAAAABVAgAA1xHl6QAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDJUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA2AC4AMQA1AAUWUAByAG8AZgBpAGwAZQBEAGEAdABhAAZMewAxADYAZQA1ADUAYgA2ADAALQA3ADAANAAzAC0ANABhADYAMwAtAGIANgA1AGIALQA2ADEANAA3ADEAMwA4ADcAOABkADQAMgB9AAcSTABpAGIAcgBhAHIAaQBlAHMACEx7ADMAYgBmAGQANQA0ADUAOQAtAGIAMAA3AGYALQA0AGQANgBlAC0AYQBlADEAYQAtAGEAOAAzADMANQA2AGEANQA1ADEANAAyAH0ACUx7ADkAYwA5ADUAOAA5ADYAOAAtADIAYwA4ADUALQA0ADEAYgBiAC0AOAA4ADcAMQAtADgAOQA1AGYAZgAxAGYAZQBkAGUAMQBhAH0ACg5WAGUAcgBzAGkAbwBuAAsGaQBuAHQADApVAHMAYQBnAGUADQpUAGkAdABsAGUADhpWAGkAcwB1AEUAbABlAG0ATQBlAHQAZQByAA8OQwBvAG0AcABhAG4AeQAQDFMAeQBzAHQAZQBtABESVgBpAHMAdQBFAGwAZQBtAHMAEjBWAGkAcwB1AEUAbABlAG0AcwBTAHAAZQBjAGkAYQBsAEMAbwBuAHQAcgBvAGwAcwATKFYAaQBzAHUARQBsAGUAbQBzAFcAaQBuAEMAbwBuAHQAcgBvAGwAcwAUJFYAaQBzAHUARQBsAGUAbQBUAGUAeAB0AEUAZABpAHQAbwByABUiVgBpAHMAdQBOAGEAdABpAHYAZQBDAG8AbgB0AHIAbwBsABYUVgBpAHMAdQBJAG4AcAB1AHQAcwAXGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABgmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAZCGIAbwBvAGwAGiJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAG0x7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHBxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHRRQAGwAdQBnAGkAbgBHAHUAaQBkAB4WUwB5AHMAdABlAG0ALgBHAHUAaQBkAB9IYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIBRVAHAAZABhAHQAZQBJAG4AZgBvACFMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACIOVQBwAGQAYQB0AGUAcwAjTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAkTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAlFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAmVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACcQTABpAGIAVABpAHQAbABlACgUTABpAGIAQwBvAG0AcABhAG4AeQApHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACo4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQArEnYAaQBzAHUAZQBsAGUAbQBzACwMcwB5AHMAdABlAG0ALUg2AGMAYgAxAGMAZABlADEALQBkADUAZABjAC0ANABhADMAYgAtADkAMAA1ADQALQAyADEAZgBhADcANQA2AGEAMwBmAGEANAAuKEkAbgB0AGUAcgBmAGEAYwBlAFYAZQByAHMAaQBvAG4ASQBuAGYAbwAvTHsAYwA2ADEAMQBlADQAMAAwAC0ANwBmAGIAOQAtADQAYwAzADUALQBiADkAYQBjAC0ANABlADMAMQA0AGIANQA5ADkANgA0ADMAfQAwGE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuADEYTQBpAG4AbwByAFYAZQByAHMAaQBvAG4AMgxMAGUAZwBhAGMAeQAzMEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwAVgBlAHIAcwBpAG8AbgBJAG4AZgBvADQwTABvAGEAZABMAGkAYgByAGEAcgBpAGUAcwBJAG4AdABvAFAAcgBvAGoAZQBjAHQANRpDAG8AbQBwAGEAdABpAGIAaQBsAGkAdAB5ANAAAhoD0AMBLQTQBQYaB9AHCBoBRQcJCNAACRoERQoLBAQAAAAHAAAAAAAAAAAAAADQDAutAgAAANANAS0O0A8BLRDQAAkaBEUKCwQEAAAABwAAAAAAAAAAAAAA0AwLrQEAAADQDQEtEdAPAS0Q0AAJGgRFCgsEBAAAAAcAAAAAAAAAAAAAANAMC60CAAAA0A0BLRLQDwEtENAACRoERQoLBAQAAAAHAAAAAAAAAAAAAADQDAutAgAAANANAS0T0A8BLRDQAAkaBEUKCwQEAAAABwAAAAAAAAAAAAAA0AwLrQIAAADQDQEtFNAPAS0Q0AAJGgRFCgsEBAAAAAcAAAAAAAAAAAAAANAMC60CAAAA0A0BLRXQDwEtENAACRoERQoLBAQAAAAHAAAAAAAAAAAAAADQDAutAgAAANANAS0W0A8BLRDQAAkaBEUKCwQEAAAABwAAAAAAAAAAAAAA0AwLrQQAAADQDQEtF9APAS0Q0BgZrQFFGhsB0AAbGgJFHAsEBAAAAAIAAAAAAAAAAAAAANAdHi0f0CAhGgJFIiMC0AAkGgVFCgsEAwAAAAMAAAAAAAAACgAAANAlC60AAAAA0AMBLSbQJwEtEdAoAS0Q0AAkGgVFCgsEAwAAAAMAAAAAAAAACgAAANAlC60BAAAA0AMBLSbQJwEtEdAoAS0QmikqAUUAAQLQAAEtK9AAAS0s0AAeLS3QLi8aA9AwC60BAAAA0DELrSQAAADQMhmtANAzLxoD0DALrQIAAADQMQutBgAAANAyGa0A0DQZrQDQNRmtAA==</v>
<v>IR0whWr8bwfyBwAAMxnWswAAAABVAgAADu3eawAAAAABAAAAAAAAAAEaUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwACTHsAZgA5ADUAYgBiADQAMgA2AC0ANQA1ADIANAAtADQAYgA0ADUALQA5ADQAMAAwAC0AZgBiADAAZgAyAGUANwA3AGUANQAxAGIAfQADCE4AYQBtAGUABDJUAHcAaQBuAEMAQQBUACAAMwAuADEAIABCAHUAaQBsAGQAIAA0ADAAMgA2AC4AMQA4AAUWUAByAG8AZgBpAGwAZQBEAGEAdABhAAZMewAxADYAZQA1ADUAYgA2ADAALQA3ADAANAAzAC0ANABhADYAMwAtAGIANgA1AGIALQA2ADEANAA3ADEAMwA4ADcAOABkADQAMgB9AAcSTABpAGIAcgBhAHIAaQBlAHMACEx7ADMAYgBmAGQANQA0ADUAOQAtAGIAMAA3AGYALQA0AGQANgBlAC0AYQBlADEAYQAtAGEAOAAzADMANQA2AGEANQA1ADEANAAyAH0ACUx7ADkAYwA5ADUAOAA5ADYAOAAtADIAYwA4ADUALQA0ADEAYgBiAC0AOAA4ADcAMQAtADgAOQA1AGYAZgAxAGYAZQBkAGUAMQBhAH0ACg5WAGUAcgBzAGkAbwBuAAsGaQBuAHQADApVAHMAYQBnAGUADQpUAGkAdABsAGUADhpWAGkAcwB1AEUAbABlAG0ATQBlAHQAZQByAA8OQwBvAG0AcABhAG4AeQAQDFMAeQBzAHQAZQBtABESVgBpAHMAdQBFAGwAZQBtAHMAEjBWAGkAcwB1AEUAbABlAG0AcwBTAHAAZQBjAGkAYQBsAEMAbwBuAHQAcgBvAGwAcwATKFYAaQBzAHUARQBsAGUAbQBzAFcAaQBuAEMAbwBuAHQAcgBvAGwAcwAUJFYAaQBzAHUARQBsAGUAbQBUAGUAeAB0AEUAZABpAHQAbwByABUiVgBpAHMAdQBOAGEAdABpAHYAZQBDAG8AbgB0AHIAbwBsABYUVgBpAHMAdQBJAG4AcAB1AHQAcwAXGFYAaQBzAHUARQBsAGUAbQBCAGEAcwBlABgmRABlAHYAUABsAGEAYwBlAGgAbwBsAGQAZQByAHMAVQBzAGUAZAAZCGIAbwBvAGwAGiJQAGwAdQBnAGkAbgBDAG8AbgBzAHQAcgBhAGkAbgB0AHMAG0x7ADQAMwBkADUAMgBiAGMAZQAtADkANAAyAGMALQA0ADQAZAA3AC0AOQBlADkANAAtADEAYgBmAGQAZgAzADEAMABlADYAMwBjAH0AHBxBAHQATABlAGEAcwB0AFYAZQByAHMAaQBvAG4AHRRQAGwAdQBnAGkAbgBHAHUAaQBkAB4WUwB5AHMAdABlAG0ALgBHAHUAaQBkAB9IYQBmAGMAZAA1ADQANAA2AC0ANAA5ADEANAAtADQAZgBlADcALQBiAGIANwA4AC0AOQBiAGYAZgBlAGIANwAwAGYAZAAxADcAIBRVAHAAZABhAHQAZQBJAG4AZgBvACFMewBiADAAMwAzADYANgBhADgALQBiADUAYwAwAC0ANABiADkAYQAtAGEAMAAwAGUALQBlAGIAOAA2ADAAMQAxADEAMAA0AGMAMwB9ACIOVQBwAGQAYQB0AGUAcwAjTHsAMQA4ADYAOABmAGYAYwA5AC0AZQA0AGYAYwAtADQANQAzADIALQBhAGMAMAA2AC0AMQBlADMAOQBiAGIANQA1ADcAYgA2ADkAfQAkTHsAYQA1AGIAZAA0ADgAYwAzAC0AMABkADEANwAtADQAMQBiADUALQBiADEANgA0AC0ANQBmAGMANgBhAGQAMgBiADkANgBiADcAfQAlFk8AYgBqAGUAYwB0AHMAVAB5AHAAZQAmVFUAcABkAGEAdABlAEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwARgBvAHIAQwBvAG4AdgBlAHIAdABpAGIAbABlAEwAaQBiAHIAYQByAGkAZQBzACcQTABpAGIAVABpAHQAbABlACgUTABpAGIAQwBvAG0AcABhAG4AeQApHlUAcABkAGEAdABlAFAAcgBvAHYAaQBkAGUAcgBzACo4UwB5AHMAdABlAG0ALgBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBIAGEAcwBoAHQAYQBiAGwAZQArEnYAaQBzAHUAZQBsAGUAbQBzACwMcwB5AHMAdABlAG0ALUg2AGMAYgAxAGMAZABlADEALQBkADUAZABjAC0ANABhADMAYgAtADkAMAA1ADQALQAyADEAZgBhADcANQA2AGEAMwBmAGEANAAuKEkAbgB0AGUAcgBmAGEAYwBlAFYAZQByAHMAaQBvAG4ASQBuAGYAbwAvTHsAYwA2ADEAMQBlADQAMAAwAC0ANwBmAGIAOQAtADQAYwAzADUALQBiADkAYQBjAC0ANABlADMAMQA0AGIANQA5ADkANgA0ADMAfQAwGE0AYQBqAG8AcgBWAGUAcgBzAGkAbwBuADEYTQBpAG4AbwByAFYAZQByAHMAaQBvAG4AMgxMAGUAZwBhAGMAeQAzMEwAYQBuAGcAdQBhAGcAZQBNAG8AZABlAGwAVgBlAHIAcwBpAG8AbgBJAG4AZgBvADQwTABvAGEAZABMAGkAYgByAGEAcgBpAGUAcwBJAG4AdABvAFAAcgBvAGoAZQBjAHQANRpDAG8AbQBwAGEAdABpAGIAaQBsAGkAdAB5ANAAAhoD0AMBLQTQBQYaB9AHCBoBRQcJCNAACRoERQoLBAQAAAAHAAAAAAAAAAAAAADQDAutAgAAANANAS0O0A8BLRDQAAkaBEUKCwQEAAAACAAAAAAAAAAAAAAA0AwLrQEAAADQDQEtEdAPAS0Q0AAJGgRFCgsEBAAAAAcAAAAAAAAAAAAAANAMC60CAAAA0A0BLRLQDwEtENAACRoERQoLBAQAAAAIAAAAAAAAAAAAAADQDAutAgAAANANAS0T0A8BLRDQAAkaBEUKCwQEAAAACAAAAAAAAAAAAAAA0AwLrQIAAADQDQEtFNAPAS0Q0AAJGgRFCgsEBAAAAAgAAAAAAAAAAAAAANAMC60CAAAA0A0BLRXQDwEtENAACRoERQoLBAQAAAAHAAAAAAAAAAAAAADQDAutAgAAANANAS0W0A8BLRDQAAkaBEUKCwQEAAAACAAAAAAAAAAAAAAA0AwLrQQAAADQDQEtF9APAS0Q0BgZrQFFGhsB0AAbGgJFHAsEBAAAAAIAAAAAAAAAAAAAANAdHi0f0CAhGgJFIiMC0AAkGgVFCgsEAwAAAAMAAAAAAAAACgAAANAlC60AAAAA0AMBLSbQJwEtEdAoAS0Q0AAkGgVFCgsEAwAAAAMAAAAAAAAACgAAANAlC60BAAAA0AMBLSbQJwEtEdAoAS0QmikqAUUAAQLQAAEtK9AAAS0s0AAeLS3QLi8aA9AwC60BAAAA0DELrSQAAADQMhmtANAzLxoD0DALrQIAAADQMQutBgAAANAyGa0A0DQZrQDQNRmtAA==</v>
</d>
</o>
<v>{8A0FB252-96EB-4DCC-A5B4-B4804D05E2D6}</v>

File diff suppressed because one or more lines are too long

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_Safety" Id="{f74eb8e4-e878-485f-9706-8dd039061a6b}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Safety
VAR_INPUT
@@ -8,6 +8,7 @@ VAR_INPUT
xTemperaturesInRange AT %I* : BOOL;
xReset : BOOL;
refuStringErrorsModbus : REFERENCE TO U_BMS_ERROR_REGISTER;
END_VAR
VAR_OUTPUT
END_VAR
@@ -31,35 +32,20 @@ END_IF
IF (NOT xVoltagesInRange) AND NOT _xErrorLatched THEN
_latchedVoltages := TRUE;
_xErrorLatched := TRUE;
refuStringErrorsModbus.stBitmap.bSafetyErrorVoltage := 1;
END_IF
IF (NOT xPressureInRange) AND NOT _xErrorLatched THEN
_latchedPressures := TRUE;
_xErrorLatched := TRUE;
refuStringErrorsModbus.stBitmap.bSafetyErrorPressure := 1;
END_IF
IF (NOT xTemperaturesInRange) AND NOT _xErrorLatched THEN
_latechedTemperatures := TRUE;
_xErrorLatched := TRUE;
refuStringErrorsModbus.stBitmap.bSafetyErrorTemperature := 1;
END_IF]]></ST>
</Implementation>
<LineIds Name="FB_Safety">
<LineId Id="28" Count="0" />
<LineId Id="30" Count="0" />
<LineId Id="32" Count="2" />
<LineId Id="40" Count="0" />
<LineId Id="31" Count="0" />
<LineId Id="29" Count="0" />
<LineId Id="9" Count="0" />
<LineId Id="18" Count="0" />
<LineId Id="37" Count="0" />
<LineId Id="19" Count="0" />
<LineId Id="21" Count="2" />
<LineId Id="38" Count="0" />
<LineId Id="20" Count="0" />
<LineId Id="25" Count="2" />
<LineId Id="39" Count="0" />
<LineId Id="24" Count="0" />
</LineIds>
</POU>
</TcPlcObject>

View File

@@ -56,8 +56,10 @@ VAR_INPUT
xECWcState AT %I* : BOOL;
xIsoErrorL1 AT %I* : BOOL;
xIsoErrorL2 AT %I* : BOOL;
xIsolationOKL1 AT %I* : BOOL;
xIsolationOKL2 AT %I* : BOOL;
refuStringErrorsModbus : REFERENCE TO U_STRING_ERROR_REGISTER;
END_VAR
VAR_OUTPUT
// Repair switch closed
@@ -218,6 +220,7 @@ VAR
// Start balancing internal signal
_xStartBalancing : BOOL;
_xIsoErrorActive : BOOL;
_xIsoError : BOOL;
// Iso error timeout
@@ -387,6 +390,8 @@ _fbInverter(
rMaxBattPower:= DINT_TO_REAL(GVL_CONFIG.diMaxStringDischargePower),
stCurrentValues => stInverterData);
refuStringErrorsModbus.stBitmap.bInverterError := _fbInverter.xError;
IF (_iState >= 30) AND (_iState < 40) THEN
rCapacityAH := rCapacityAH + ((stInverterData.rActDCCurrent * 0.01) / 3600);
rCapacityWH := rCapacityWH + ((stInverterData.rActACPower * 0.01) / 3600);
@@ -862,7 +867,9 @@ END_IF
stHMIInterface.eStatus := eStatus;
// Reset Safety
xResetSafetyDCCB := xResetSafety;]]></ST>
xResetSafetyDCCB := xResetSafety;
xCloseDCCB := TRUE;]]></ST>
</Implementation>
<Action Name="ClearAlarms" Id="{541a307f-e5d8-4588-8fd3-6f4bdf6a71dd}">
<Implementation>
@@ -980,8 +987,8 @@ END_IF
// ISO Error handling
// ===============================
// Mute iso error when inverter is enabled
_xIsoError := ((NOT xIsoErrorL1) OR (NOT xIsoErrorL2)) AND (NOT _fbInverter.xActive) AND (xDCCBOpen);
_fbTONIsoError(IN := _xIsoError, PT := GVL_CONFIG.timIsoErrorTimeout);
_xIsoErrorActive := ((NOT xIsolationOKL1) OR (NOT xIsolationOKL2)) AND (NOT _fbInverter.xActive) AND (xDCCBOpen);
_fbTONIsoError(IN := _xIsoErrorActive, PT := GVL_CONFIG.timIsoErrorTimeout);
IF _fbTONIsoError.Q AND (NOT _fbIsolationAlarm.bRaised) AND xReleaseErrors THEN
_fbIsolationAlarm.Raise(0);
@@ -996,7 +1003,16 @@ IF _fbIsolationAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfir
END_IF
IF _fbTONIsoError.Q THEN
_xIsoError := TRUE;
END_IF
IF xConfirmAlarms AND (NOT _fbTONIsoError.Q) THEN
_xIsoError := FALSE;
END_IF
IF _xIsoError THEN
_xErrorInternal := TRUE;
refuStringErrorsModbus.stBitmap.bIsolationError := 1;
END_IF

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_Unit" Id="{e9bb815b-eb46-4920-800d-910484e58b22}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Unit
VAR_INPUT
@@ -1165,6 +1165,13 @@ CASE _iState OF
_iState := 0;
END_IF
// check for balancing condition
IF xStartBalancing AND (NOT _xErrorActive) THEN
xShutdownDischargeAllowed := FALSE;
xInShutdownDischargeMode := FALSE;
_iState := 0;
END_IF
IF _xErrorActive THEN
_iState := 1000;
END_IF

View File

@@ -5,6 +5,8 @@
VAR
_xEmergencyStopOk AT %I* : BOOL;
_xShowAckEmergencyStop AT %Q* : BOOL;
xNAProtectionOK AT %I* : BOOL;
_xNAProtectionTripped : BOOL := FALSE;
_xReleaseErrors : BOOL := TRUE;
_xReleaseLimitsErrors : BOOL := TRUE;
_xConfirmAlarms : BOOL;
@@ -46,7 +48,7 @@ VAR
_tonStartupDelay : TON := (PT := T#10S);
// Small delay for inverter shutdown
_tonBeginShutdown : TON := (PT := T#30S);
_tonBeginShutdown : TON := (PT := T#10S);
// Not all strings in automatic mode
_fbNoAutomaticModeAlarm : FB_TcAlarm;
@@ -65,6 +67,9 @@ VAR
// EMS heartbeat alarm
_fbEMSHeartbeatAlarm : FB_TcAlarm;
// NA Protection Alarm
_fbNAProtectionAlarm : FB_TcAlarm;
// First cycle tag
_xFirstCycle : BOOL := TRUE;
@@ -114,6 +119,7 @@ VAR
_rtHardwareResetButton : R_TRIG;
_xErrorActive : BOOL;
_xWarningActive : BOOL;
// Battery in safety check mode
_xInSafetyCheckMode : BOOL;
@@ -188,6 +194,9 @@ VAR
_rPowerDH : REAL;
_fbTONDHCycleTime : TON := (PT := T#15M);
// tower light
_fbTowerLight : FB_TowerLight;
END_VAR
]]></Declaration>
<Implementation>
@@ -216,11 +225,16 @@ END_VAR
_afbStrings[1].Name := 'String 2';
_fbEMSHeartbeatAlarm.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.EMSHeartbeatTimeout, TRUE, 0);
_fbNAProtectionAlarm.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.NAProtectionTripped, TRUE, 0);
END_IF
// Reset error flag
_xErrorActive := FALSE;
// Reset warning flag
_xWarningActive := FALSE;
// Ack alarms from HMI
_xConfirmAlarms := GVL_SCADA.stAckAlarmsButton.xRequest;
IF GVL_SCADA.stAckAlarmsButton.xRequest THEN
@@ -298,6 +312,34 @@ END_IF
GVL_MODBUS.stBMSErrorReg.wBMSErrorActive.stBitmap.bEStop := (NOT _xEmergencyStopOk) OR _fbEStopNotOk.bRaised OR (_fbEStopNotOk.eConfirmationState <> TcEventConfirmationState.Confirmed);
// ===============================
// handle NA Protection
// ===============================
IF _xConfirmAlarms THEN
_xNAProtectionTripped := FALSE;
END_IF
IF NOT xNAProtectionOK THEN
_xNAProtectionTripped := TRUE;
IF NOT _fbNAProtectionAlarm.bRaised THEN
_fbNAProtectionAlarm.Raise();
END_IF
END_IF
IF _xNAProtectionTripped THEN
_xErrorActive := TRUE;
END_IF
IF xNAProtectionOK AND _fbNAProtectionAlarm.bRaised THEN
_fbNAProtectionAlarm.Clear(0, FALSE);
END_IF
IF _fbNAProtectionAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND _xConfirmAlarms THEN
_fbNAProtectionAlarm.Confirm(0);
END_IF
GVL_MODBUS.stBMSErrorReg.wBMSErrorActive.stBitmap.bNAProtectionTripped := _xNAProtectionTripped;
// ===============================
// Hardware reset button part 1
// ===============================
@@ -356,13 +398,17 @@ IF _fbTempCabinetBMS.xWarningHigh THEN
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetBMSHigh := TRUE;
END_IF
IF _fbTempCabinetBMS.xWarning THEN
_xWarningActive := TRUE;
END_IF
IF _fbTempCabinetBMS.xError THEN
_xErrorActive := TRUE;
END_IF
// Call string 1
_afbStrings[0](
xEnable := _xEnableString AND GVL_CONFIG.axStringEnabled[0],
xEnable := _xEnableString AND GVL_CONFIG.axStringEnabled[0] AND xNAProtectionOK,
xReleaseInverterPower := _xReleaseInverterPower,
uiStringNumber := 0,
eOperationMode := _eStringOpMode,
@@ -378,7 +424,12 @@ _afbStrings[0](
xReleaseManualMode := _xReleaseManualMode,
xConfirmAlarms:= _xConfirmAlarms,
xAllToManualMode := _xAllComponentsToManualMode,
xResetSafety := xSafetyResterTaster);
xResetSafety := xSafetyResterTaster,
refuStringErrorsModbus := GVL_MODBUS.stBMSErrorReg.wString1ErrorActive);
IF _afbStrings[0].xWarning THEN
_xWarningActive := TRUE;
END_IF
IF _afbStrings[0].xError THEN
_xErrorActive := TRUE;
@@ -396,6 +447,10 @@ _fbTempCabinetSCSString1(
xReleaseHardwareErrors:= _xReleaseErrors,
xConfirmAlarms:= _xConfirmAlarms,
stHMIInterface=> GVL_SCADA.stHMIInterface[0].stTempCabinetSCS);
IF _fbTempCabinetSCSString1.xWarning THEN
_xWarningActive := TRUE;
END_IF
IF _fbTempCabinetSCSString1.xError THEN
_xErrorActive := TRUE;
@@ -405,7 +460,7 @@ END_IF
// Handle string 1 modbus error and warning
GVL_MODBUS.stBMSErrorReg.wStringErrorActive.0 := _afbStrings[0].xError;
GVL_MODBUS.stBMSErrorReg.wStringWarningActive.0 := _afbStrings[0].xWarning;
GVL_MODBUS.stBMSErrorReg.wBMSErrorActive.stBitmap.bDCSwitchS1 := (NOT _afbStrings[0].xRepairSwitchOk);
GVL_MODBUS.stBMSErrorReg.wString1ErrorActive.stBitmap.bDCSwitch := (NOT _afbStrings[0].xRepairSwitchOk);
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bSafetyIntlkString1 := (NOT _afbStrings[0].xSafetyIntlksOk);
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString1Module1High := _afbStrings[0].xTempCabinetModule1Warning;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString1Module2High := _afbStrings[0].xTempCabinetModule2Warning;
@@ -415,7 +470,7 @@ GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetSCSString1High := _
// Call string 2
_afbStrings[1](
xEnable := _xEnableString AND GVL_CONFIG.axStringEnabled[1],
xEnable := _xEnableString AND GVL_CONFIG.axStringEnabled[1] AND xNAProtectionOK,
xReleaseInverterPower := _xReleaseInverterPower,
uiStringNumber := 1,
eOperationMode := _eStringOpMode,
@@ -431,8 +486,13 @@ _afbStrings[1](
xReleaseManualMode := _xReleaseManualMode,
xConfirmAlarms:= _xConfirmAlarms,
xAllToManualMode := _xAllComponentsToManualMode,
xResetSafety := xSafetyResterTaster);
xResetSafety := xSafetyResterTaster,
refuStringErrorsModbus := GVL_MODBUS.stBMSErrorReg.wString2ErrorActive);
IF _afbStrings[1].xWarning THEN
_xWarningActive := TRUE;
END_IF
IF _afbStrings[1].xError THEN
_xErrorActive := TRUE;
END_IF
@@ -450,6 +510,10 @@ _fbTempCabinetSCSString2(
xConfirmAlarms:= _xConfirmAlarms,
stHMIInterface=> GVL_SCADA.stHMIInterface[1].stTempCabinetSCS);
IF _fbTempCabinetSCSString2.xWarning THEN
_xWarningActive := TRUE;
END_IF
IF _fbTempCabinetSCSString2.xError THEN
_xErrorActive := TRUE;
END_IF
@@ -457,7 +521,7 @@ END_IF
// Handle string 1 modbus error and warning
GVL_MODBUS.stBMSErrorReg.wStringErrorActive.1 := _afbStrings[1].xError;
GVL_MODBUS.stBMSErrorReg.wStringWarningActive.1 := _afbStrings[1].xWarning;
GVL_MODBUS.stBMSErrorReg.wBMSErrorActive.stBitmap.bDCSwitchS2 := (NOT _afbStrings[1].xRepairSwitchOk);
GVL_MODBUS.stBMSErrorReg.wString2ErrorActive.stBitmap.bDCSwitch := (NOT _afbStrings[1].xRepairSwitchOk);
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bSafetyIntlkString2 := (NOT _afbStrings[1].xSafetyIntlksOk);
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString2Module1High := _afbStrings[1].xTempCabinetModule1Warning;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.stBitmap.bTCabinetString2Module2High := _afbStrings[1].xTempCabinetModule2Warning;
@@ -669,7 +733,6 @@ FOR _ui := 0 TO (GVL_CONFIG.uiNumberOfStrings-1) DO
GVL_MODBUS.stModbusEMSComm.stModbusReg11.diTotalACCurrentPhase3 := GVL_MODBUS.stModbusEMSComm.stModbusReg11.diTotalACCurrentPhase3 + REAL_TO_DINT(_afbStrings[_ui].stInverterData.rActtACPhaseCCurrent);
END_FOR
// Set Modbus mirror values
GVL_MODBUS.stModbusEMSComm.stModbusReg11.diSetpointActivePowerMirror := GVL_MODBUS.stModbusEMSComm.stModbusReg12.diSetpointActivePower;
GVL_MODBUS.stModbusEMSComm.stModbusReg11.rSetpointCosPhiMirror := GVL_MODBUS.stModbusEMSComm.stModbusReg12.rSetpointCosPhi;
@@ -887,7 +950,7 @@ END_IF
// Call safety fb
_fbSafety();
_fbSafety(refuStringErrorsModbus := GVL_MODBUS.stBMSErrorReg.wBMSErrorActive);
// Check if all modules are in auto mode
IF _xStringsInAutoMode AND _fbNoAutomaticModeAlarm.bRaised THEN
@@ -909,10 +972,19 @@ END_IF
IF _xConfirmAlarms OR _rtHardwareResetButton.Q THEN
GVL_MODBUS.stBMSErrorReg.wBMSErrorActive.wRegister := 0;
GVL_MODBUS.stBMSErrorReg.wBMSWarningActive.wRegister := 0;
GVL_MODBUS.stBMSErrorReg.wString1ErrorActive.wRegister := 0;
GVL_MODBUS.stBMSErrorReg.wString2ErrorActive.wRegister := 0;
_xConfirmAlarms := FALSE;
END_IF
_fbPowerMeter24V();]]></ST>
_fbPowerMeter24V();
_fbTowerLight(
xAutoInStop := FALSE,
xWarningActive := FALSE,
xWarningConfirmPending := FALSE,
xErrorActive := _xErrorActive,
xErrorConfirmPending := FALSE);]]></ST>
</Implementation>
<Action Name="SM_AUTO" Id="{b5166e16-4fea-442b-9560-02c156f9a9ad}">
<Implementation>
@@ -924,7 +996,8 @@ _fbPowerMeter24V();]]></ST>
END_IF
// Wait for power command
IF (ABS(_rAutoPowerRequest) > DINT_TO_REAL(GVL_CONFIG.diMinimumAbsPowerForEnable)) AND (NOT _xStringsErrorActive) AND _xStringsAllInAutomaticMode AND (NOT _xEMSHeartbeatNotOK) THEN
IF ((ABS(_rAutoPowerRequest) > DINT_TO_REAL(GVL_CONFIG.diMinimumAbsPowerForEnable)) OR GVL_MODBUS.stModbusEMSComm.stModbusReg12.wBMSControlsRegister.stBitmap.bScheduleActive)
AND (NOT _xStringsErrorActive) AND _xStringsAllInAutomaticMode AND (NOT _xEMSHeartbeatNotOK) THEN
_iState := 5;
_xReleaseInverterPower := FALSE;
_xCanChangeMode := FALSE;
@@ -932,8 +1005,8 @@ _fbPowerMeter24V();]]></ST>
END_IF
5: // Check if power command is within limits
IF _rAutoPowerRequest < DINT_TO_REAL(GVL_CONFIG.diMaxStringDischargePower)
AND _rAutoPowerRequest > DINT_TO_REAL(GVL_CONFIG.diMaxStringChargingPower) THEN
IF _rAutoPowerRequest <= DINT_TO_REAL(GVL_CONFIG.diMaxStringDischargePower)
AND _rAutoPowerRequest >= DINT_TO_REAL(GVL_CONFIG.diMaxStringChargingPower) THEN
_xEnableString := TRUE;
_xStartBalancing := FALSE;
_iState := 10;
@@ -981,7 +1054,7 @@ _fbPowerMeter24V();]]></ST>
_xReleaseInverterPower := TRUE;
// Check if the battery should still be active
IF (_rAutoPowerRequest = 0.0) THEN
IF (_rAutoPowerRequest = 0.0) AND NOT GVL_MODBUS.stModbusEMSComm.stModbusReg12.wBMSControlsRegister.stBitmap.bScheduleActive THEN
_xNoPowerRequested := TRUE;
ELSE
_xNoPowerRequested := FALSE;

View File

@@ -82,7 +82,7 @@ VAR
_fbReadACValues : FB_MBReadRegs;
// Time for polling for current dc values and check for inverter error
_timPollingDelay : TIME := T#500MS;
_timPollingDelay : TIME := T#1S;
// Time for setting the current power
_timSetPowerDelay : TIME := T#250MS;
@@ -101,6 +101,12 @@ VAR
// Inverter alarm
_fbErrorInverterAlarm : FB_TcAlarm;
// Error when reading cyclic data
_fbCyclicDataAlarm : FB_TcAlarm;
// Error when reading heartbeat
_fbHeartBeatAlarm : FB_TcAlarm;
// Flag if battery limits have been set
_xBatteryLimitsSet : BOOL := FALSE;
@@ -143,12 +149,48 @@ VAR
// Current PCU state and alarm messages
_stPCUState : ST_KACU_PCU;
// Current PCU cabinet temperature
_iCabTemp : INT;
// Current PCU state and alarm messages
_stPCUStateDebug : ST_KACU_PCU;
// Current PCU state and alarm messages
_stPCUStateDebug2 : ST_KACU_PCU;
_iCurrentErrorCountHB : UDINT := 0; // Error count since last successfull read on writeRequestedState
_iErrorCountHB : UDINT := 0; // Total error count on writeRequestedState
_iErrorIDHB : UDINT := 0; // Error ID on writeRequestedState
_iCurrentErrorCountWRS : UDINT := 0; // Error count since last successfull read on writeRequestedState
_iErrorCountWRS : UDINT := 0; // Total error count on writeRequestedState
_iErrorIDWRS : UDINT := 0; // Error ID on writeRequestedState
_iCurrentErrorCountWPC : UDINT := 0; // Error count since last successfull read on writePowerCommand
_iErrorCountWPC : UDINT := 0; // Total error count on writePowerCommand
_iErrorIDWPC : UDINT := 0; // Error ID on writePowerCommand
_iCurrentErrorCountRCS : UDINT := 0; // Error count since last successfull read on readCurrentState
_iErrorCountRCS : UDINT := 0; // Total error count on readCurrentState
_iErrorIDRCS : UDINT := 0; // Error ID on readCurrentState
_iCurrentErrorCountRPCUS : UDINT := 0; // Error count since last successfull read on readPCUState
_iErrorCountRPCUS : UDINT := 0; // Total error count on readPCUState
_iErrorIDRPCUS : UDINT := 0; // Error ID on readPCUState
_iErrorCountRDCV : UDINT := 0; // Total error count on readDCValues
_iErrorIDRDCV : UDINT := 0; // Error ID on readDCValues
_iErrorCountRACV : UDINT := 0; // Total error count on readACValues
_iErrorIDRACV : UDINT := 0; // Error ID on readACValues
_xResetCounter : BOOL := FALSE; // Reset error counter
// Error during cyclic reading
_xErrorCyclicData : BOOL;
_xErrorCyclicDataLedge : BOOL; // cyclic data ledge
_xHeartBeatNOK : BOOL; // heartbeat error ledge
// Internal inverter error
_xErrorInverter : BOOL;
// Inverterfault (introduced by NA-Schutz)
_xFaultInverter : BOOL;
// Inverter name for alarm message
_sName : STRING;
END_VAR
@@ -331,7 +373,7 @@ CASE _iState OF
// Dont set inverter into off state when an internal error occured
// because this will reset the error message
IF _xErrorInverter THEN
IF _xErrorInverter OR _xErrorCyclicData OR (NOT xHeartbeatOk) THEN
_iWSetPct := 0;
_iState := 1000;
END_IF
@@ -341,9 +383,12 @@ CASE _iState OF
_iState := 1001;
1001: // Error state, wait for reset
IF xReset AND (NOT xEnable) AND (NOT _xErrorCyclicData) AND (NOT _xErrorInverter) THEN
IF xReset AND (NOT xEnable) AND (NOT _xErrorInverter) AND (NOT _xErrorCyclicData) AND xHeartbeatOk THEN
_eRequestedState := OFF;
xError := FALSE;
_xFaultInverter := FALSE;
_xErrorCyclicDataLedge := FALSE;
_xHeartBeatNOK := FALSE;
_iState := 0;
END_IF
@@ -382,18 +427,44 @@ END_VAR]]></Declaration>
// Create inverter main alarm
_fbErrorInverterAlarm.CreateEx(stEventEntry := TC_EVENTS.Inverter.InverterError, bWithConfirmation := TRUE, 0);
_fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
_fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);
// Create inverter heartbeat alarm
_fbHeartBeatAlarm.CreateEx(stEventEntry := TC_EVENTS.Inverter.InverterHeartbeatError, bWithConfirmation := TRUE, 0);
_fbHeartBeatAlarm.ipArguments.Clear().AddString(_sName);
// Create inverter cyclic data alarm
_fbCyclicDataAlarm.CreateEx(stEventEntry := TC_EVENTS.Inverter.InverterCyclicError, bWithConfirmation := TRUE, 0);
_fbCyclicDataAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
</Implementation>
</Method>
<Action Name="HandleCyclicData" Id="{4343583a-b80a-437e-8fc8-9963ab894fbc}">
<Implementation>
<ST><![CDATA[// Reset error flags on reset command
IF _xErrorCyclicData AND xReset THEN
_xErrorCyclicData := FALSE;
<ST><![CDATA[IF _xResetCounter THEN
_xResetCounter := FALSE;
_iCurrentErrorCountHB := 0;
_iErrorCountHB := 0;
_iErrorIDHB := 0;
_iCurrentErrorCountWRS := 0;
_iErrorCountWRS := 0;
_iErrorIDWRS := 0;
_iCurrentErrorCountWPC := 0;
_iErrorCountWPC := 0;
_iErrorIDWPC := 0;
_iCurrentErrorCountRCS := 0;
_iErrorCountRCS := 0;
_iErrorIDRCS := 0;
_iCurrentErrorCountRPCUS := 0;
_iErrorCountRPCUS := 0;
_iErrorIDRPCUS := 0;
_iErrorCountRDCV := 0;
_iErrorIDRDCV := 0;
_iErrorCountRACV := 0;
_iErrorIDRACV := 0;
END_IF
// Fetch cyclic data with polling timer
_tonPollingTimer(IN := TRUE);
_tonPollingTimer(IN := TRUE, PT := _timPollingDelay);
// Write requested state
_fbWriteRequestedState(
@@ -408,8 +479,14 @@ _fbWriteRequestedState(
bError=> ,
nErrId=> );
IF (NOT _fbWriteRequestedState.bBusy) AND _fbWriteRequestedState.bError THEN
_xErrorCyclicData := TRUE;
IF (NOT _fbWriteRequestedState.bBusy) THEN
IF _fbWriteRequestedState.bError THEN
_iCurrentErrorCountWRS := _iCurrentErrorCountWRS + 1;
_iErrorCountWRS := _iErrorCountWRS + 1;
_iErrorIDWRS := _fbWriteRequestedState.nErrId;
ELSE
_iCurrentErrorCountWRS := 0;
END_IF
END_IF
@@ -428,8 +505,14 @@ _fbWritePowerCommand(
bError=> ,
nErrId=> );
IF (NOT _fbWritePowerCommand.bBusy) AND _fbWritePowerCommand.bError THEN
_xErrorCyclicData := TRUE;
IF (NOT _fbWritePowerCommand.bBusy) THEN
IF _fbWritePowerCommand.bError THEN
_iCurrentErrorCountWPC := _iCurrentErrorCountWPC + 1;
_iErrorCountWPC := _iErrorCountWPC + 1;
_iErrorIDWPC := _fbWritePowerCommand.nErrId;
ELSE
_iCurrentErrorCountWPC := 0;
END_IF
END_IF
@@ -449,8 +532,14 @@ _fbReadCurrentState(
nErrId=> ,
cbRead=> );
IF (NOT _fbReadCurrentState.bBusy) AND _fbReadCurrentState.bError THEN
_xErrorCyclicData := TRUE;
IF (NOT _fbReadCurrentState.bBusy) THEN
IF _fbReadCurrentState.bError THEN
_iCurrentErrorCountRCS := _iCurrentErrorCountRCS + 1;
_iErrorCountRCS := _iErrorCountRCS + 1;
_iErrorIDRCS := _fbReadCurrentState.nErrId;
ELSE
_iCurrentErrorCountRCS := 0;
END_IF
END_IF
IF _eCurrentState = E_KACO_CURRENT_STATE.GRID_CONNECTED OR _eCurrentState = E_KACO_CURRENT_STATE.THROTTLED THEN
@@ -476,16 +565,35 @@ _fbReadPCUState(
nErrId=> ,
cbRead=> );
IF (NOT _fbReadPCUState.bBusy) AND _fbReadPCUState.bError THEN
_xErrorCyclicData := TRUE;
IF (NOT _fbReadPCUState.bBusy) THEN
IF _fbReadPCUState.bError THEN
_iCurrentErrorCountRPCUS := _iCurrentErrorCountRPCUS + 1;
_iErrorCountRPCUS := _iErrorCountRPCUS + 1;
_iErrorIDRPCUS := _fbReadPCUState.nErrId;
IF _iCurrentErrorCountRPCUS >= GVL_CONFIG.udiMaxConsecutiveInvError THEN
_xErrorCyclicData := TRUE;
END_IF
ELSE
_iCurrentErrorCountRPCUS := 0;
END_IF
END_IF
IF (_stPCUState.ePCUState = E_KACO_PCU_STATE.ERROR) OR (_stPCUState.ePCUError <> E_KACO_PCU_ERROR.NO_EVENT) THEN
_xErrorInverter := TRUE;
IF ((_stPCUState.ePCUState = E_KACO_PCU_STATE.ERROR) OR (_stPCUState.ePCUError <> E_KACO_PCU_ERROR.NO_EVENT)) AND (_stPCUState.ePCUError <> 11) THEN
// ignore undervoltage error when not enabled
_stPCUStateDebug := _stPCUState;
IF NOT xReleasePower AND _stPCUState.ePCUError = E_KACO_PCU_ERROR.UNDER_VOLT THEN
_xErrorInverter := FALSE;
ELSE
_xErrorInverter := TRUE;
_stPCUStateDebug2 := _stPCUState;
END_IF
ELSE
_xErrorInverter := FALSE;
END_IF
IF _eCurrentState = E_KACO_CURRENT_STATE.FAULT AND xReleasePower THEN
_xErrorInverter := TRUE;
END_IF
// Read current dc values
_fbReadDCValues(
@@ -516,6 +624,8 @@ IF (NOT _fbReadDCValues.bBusy) THEN
stCurrentValues.rActDCCurrent := 0.0;
stCurrentValues.rActDCVoltage := 0.0;
stCurrentValues.rActDCPower := 0.0;
_iErrorCountRDCV := _iErrorCountRDCV + 1;
_iErrorIDRDCV := _fbReadDCValues.nErrId;
END_IF
END_IF
@@ -561,9 +671,39 @@ IF (NOT _fbReadACValues.bBusy) THEN
stCurrentValues.rActApparentPower := 0.0;
stCurrentValues.rActReactivePower := 0.0;
stCurrentValues.rActPowerFactor := 0.0;
_iErrorCountRACV := _iErrorCountRACV + 1;
_iErrorIDRACV := _fbReadACValues.nErrId;
END_IF
END_IF
IF _iCurrentErrorCountRPCUS >= GVL_CONFIG.udiMaxConsecutiveInvError OR
_iCurrentErrorCountRCS >= GVL_CONFIG.udiMaxConsecutiveInvError OR
_iCurrentErrorCountWPC >= GVL_CONFIG.udiMaxConsecutiveInvError OR
_iCurrentErrorCountWRS >= GVL_CONFIG.udiMaxConsecutiveInvError OR
_iCurrentErrorCountHB >= GVL_CONFIG.udiMaxConsecutiveInvError THEN
_xErrorCyclicData := TRUE;
ELSE
_xErrorCyclicData := FALSE;
END_IF
// set fault flag when error active
IF _xErrorCyclicData THEN
_xErrorCyclicDataLedge := TRUE;
END_IF
// handle alarm
IF _xErrorCyclicData AND NOT _fbCyclicDataAlarm.bRaised THEN
_fbCyclicDataAlarm.Raise();
END_IF
IF NOT _xErrorCyclicData AND _fbCyclicDataAlarm.bRaised THEN
_fbCyclicDataAlarm.Clear(0, FALSE);
END_IF
IF _fbCyclicDataAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xReset THEN
_fbCyclicDataAlarm.Confirm(0);
END_IF
// Reset polling timer
IF _tonPollingTimer.Q THEN
_tonPollingTimer(IN := FALSE);
@@ -572,12 +712,7 @@ END_IF]]></ST>
</Action>
<Action Name="HandleHeartbeat" Id="{eeb5f65a-fd91-4c22-ab2e-3080c24e87fb}">
<Implementation>
<ST><![CDATA[// Reset hearbeat signal only with reset signal
IF (NOT xHeartbeatOk) AND xReset THEN
xHeartbeatOk := TRUE;
END_IF
// Self resetting watchdog timer
<ST><![CDATA[// Self resetting watchdog timer
_tonWatchdogResetTimer(IN := TRUE);
// Timeout should be less than timer interval
@@ -595,9 +730,37 @@ _fbWriteHearbeatRegister(
// Because there is no heartbeat register to read,
// we will use a successfull write as a valid heartbeat signal
IF _fbWriteHearbeatRegister.bError THEN
xHeartbeatOk := FALSE;
xError := TRUE;
IF NOT _fbWriteHearbeatRegister.bBusy THEN
IF _fbWriteHearbeatRegister.bError THEN
_iCurrentErrorCountHB := _iCurrentErrorCountHB + 1;
_iErrorCountHB := _iErrorCountHB + 1;
_iErrorIDHB := _fbWriteHearbeatRegister.nErrId;
IF _iCurrentErrorCountHB >= GVL_CONFIG.udiMaxConsecutiveInvError THEN
xHeartbeatOk := FALSE;
xError := TRUE;
END_IF
ELSE
_iCurrentErrorCountHB := 0;
xHeartbeatOk := TRUE;
END_IF
END_IF
// set fault flag when error active
IF NOT xHeartbeatOk THEN
_xHeartBeatNOK := TRUE;
END_IF
// handle alarm
IF NOT xHeartbeatOk AND NOT _fbHeartBeatAlarm.bRaised THEN
_fbHeartBeatAlarm.Raise();
END_IF
IF xHeartbeatOk AND _fbHeartBeatAlarm.bRaised THEN
_fbHeartBeatAlarm.Clear(0, FALSE);
END_IF
IF _fbHeartBeatAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xReset THEN
_fbHeartBeatAlarm.Confirm(0);
END_IF
// Reset timer
@@ -640,7 +803,7 @@ _fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
_fbReadRegisters(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nUnitID:= 16#01, // 16#FF for Modbus TCP
nQuantity:= 2,
nMBAddr:= BATTERY_LIMIT_SF_START,
cbLength:= SIZEOF(_arBattScalingFactors),
@@ -668,7 +831,7 @@ _fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
_fbWriteRegisters(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nUnitID:= 16#01, // 16#FF for Modbus TCP
nQuantity:= 6,
nMBAddr:= BATTERY_SET_LIMITS_START,
cbLength:= SIZEOF(_auiBatteryLimitValues),
@@ -695,7 +858,7 @@ _fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nUnitID:= 16#01, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= DIS_MIN_V,
cbLength:= SIZEOF(uiMinDisVoltage),
@@ -723,7 +886,7 @@ _fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nUnitID:= 16#01, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= CHA_MAX_V,
cbLength:= SIZEOF(uiMaxChaVoltage),
@@ -751,7 +914,7 @@ _fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nUnitID:= 16#01, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= CHA_MAX_A,
cbLength:= SIZEOF(uiMaxChaCurrent),
@@ -779,7 +942,7 @@ _fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
_fbWriteRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nUnitID:= 16#01, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= DIS_MAX_A,
cbLength:= SIZEOF(uiMaxDisCurrent),
@@ -808,7 +971,7 @@ _fbErrorInverterAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
_fbWriteRegisters(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nUnitID:= 16#01, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= EN_LIMIT,
cbLength:= SIZEOF(_uiEnableLimit),

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="894178923" FileFormatVersion="1.8">
<SafetyDeviceDesc Crc="2701968244" FileFormatVersion="1.9">
<AliasDeviceType>
<Type>16</Type>
<SubType>0</SubType>
@@ -21,7 +21,7 @@
<DynPortSafeAddress Type="Unset" />
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Messages InputMessageSize="6" OutputMessageSize="6" Tc2ConnectionType="190853202" CustomFSoEConnectionId="abaabd0a-ce90-4f58-aa2b-1505f1e3352d">
<Messages InputMessageSize="6" OutputMessageSize="6" Tc2ConnectionType="452853760" CustomFSoEConnectionId="abaabd0a-ce90-4f58-aa2b-1505f1e3352d">
<IO>
<Name>FSoE Cmd</Name>
<DataType>USINT</DataType>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<MultiSetting Crc="3276432870" Version="1.2">
<MultiSetting Crc="1463580335" Version="1.2">
<ProjectData>
<Id>1</Id>
<TargetSystem>
@@ -154,6 +154,9 @@
<SubType>EL2912</SubType>
<ObjectId>50462856</ObjectId>
<SafeAddress>28</SafeAddress>
<Customizing>
<Group Id="87605930-f4c2-4c12-816d-f0103cb2103d" Value="3" />
</Customizing>
</TargetSystem>
<SafetyAliasDevice>
<SdsId>36</SdsId>

View File

@@ -1,22 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<TargetSystemConfig Crc="355341850" Version="1.5">
<TargetSystemConfig Crc="1072418847" Version="1.5">
<TargetSystemType>HSafetyPLC</TargetSystemType>
<TargetSystemSubType>EL2912</TargetSystemSubType>
<IsExternalDevice>false</IsExternalDevice>
<TargetSystemObjectId>50462744</TargetSystemObjectId>
<TargetSystemObjectName>=STRNG01-15K1 (EL2912)</TargetSystemObjectName>
<SoftwareVersion />
<SerialNumber />
<ProjectCRC>6170</ProjectCRC>
<SoftwareVersion>01 (V01.04) </SoftwareVersion>
<SerialNumber>4210722</SerialNumber>
<ProjectCRC>17348</ProjectCRC>
<MapProjectCRC>false</MapProjectCRC>
<MapSerialNumber>false</MapSerialNumber>
<VersionNumber>1</VersionNumber>
<FSOEAddress>5</FSOEAddress>
<DipSwitch />
<DipSwitch>5</DipSwitch>
<AmsNetID>10.103.32.50.2.1</AmsNetID>
<AmsPort>1018</AmsPort>
<AmsPort>1019</AmsPort>
<ConnectionInfoDataConfigOld>false</ConnectionInfoDataConfigOld>
<TakeOverSafetyAliasDeviceNamesInProcessImage>true</TakeOverSafetyAliasDeviceNamesInProcessImage>
<TakeOverStandardAliasDeviceNamesInProcessImage>true</TakeOverStandardAliasDeviceNamesInProcessImage>
<BackupRestore Needed="0" Activated="false" RestoreUserAdministration="false" />
<Customizing>
<Group Id="87605930-f4c2-4c12-816d-f0103cb2103d" Value="3" />
</Customizing>
</TargetSystemConfig>

File diff suppressed because it is too large Load Diff

View File

@@ -66,7 +66,7 @@
</Hides>
</DataType>
<DataType>
<Name GUID="{533FD64E-DB47-4CEE-B1FE-56FF11855B32}">BMSEvents</Name>
<Name GUID="{38B06309-F943-4A07-B886-7794168DA12C}">BMSEvents</Name>
<DisplayName TxtId=""><![CDATA[String event class]]></DisplayName>
<EventId>
<Name Id="1">NotAllCompInAuto</Name>
@@ -138,6 +138,11 @@
<DisplayName TxtId=""><![CDATA[Lost connection to EMS]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="15">NAProtectionTripped</Name>
<DisplayName TxtId=""><![CDATA[NAProtection tripped]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<Hides>
<Hide GUID="{1D326C00-DF37-4B94-8E0D-C22524EB2E89}"/>
<Hide GUID="{E7132508-795D-4A6C-AFB1-FED6C1DE44FD}"/>
@@ -160,10 +165,12 @@
<Hide GUID="{99721C04-AF32-4BF0-BB6B-A59D0F9957F2}"/>
<Hide GUID="{4B5D56D2-4431-41C5-8F0A-06E1FC56151A}"/>
<Hide GUID="{58BB5280-6EA8-4841-8B84-F66A8442CCAE}"/>
<Hide GUID="{533FD64E-DB47-4CEE-B1FE-56FF11855B32}"/>
<Hide GUID="{A9772971-CD78-465C-8E48-55EB7EA9B235}"/>
</Hides>
</DataType>
<DataType>
<Name GUID="{A81DA913-2653-4965-B95F-B789E5F910DF}">Inverter</Name>
<Name GUID="{0B9A0CFC-36E3-4BF3-A72D-CCEB6A13D525}">Inverter</Name>
<DisplayName TxtId=""><![CDATA[Inverter events]]></DisplayName>
<EventId>
<Name Id="1">InverterOverTemp</Name>
@@ -210,6 +217,16 @@
<DisplayName TxtId=""><![CDATA[{0}: Inverter Error]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="10">InverterHeartbeatError</Name>
<DisplayName TxtId=""><![CDATA[{0}: Inverter Heartbeat Error]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="11">InverterCyclicError</Name>
<DisplayName TxtId=""><![CDATA[{0}: Inverter Cyclic Data Error]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<Hides>
<Hide GUID="{28E546A6-2746-43B7-9F65-F66DF048AD33}"/>
<Hide GUID="{2C22B9AB-C9C6-4557-8123-18F3D712FA19}"/>
@@ -222,6 +239,8 @@
<Hide GUID="{86A2A820-4D64-4C1F-87D8-07667F4EA902}"/>
<Hide GUID="{71BB472B-94DE-4D07-A2C4-A75D33C5049A}"/>
<Hide GUID="{2B097BE6-5FA1-4489-9C48-249D306057A8}"/>
<Hide GUID="{A81DA913-2653-4965-B95F-B789E5F910DF}"/>
<Hide GUID="{60409EE0-D8AA-478C-8F5C-28E9C977A99A}"/>
</Hides>
</DataType>
</DataTypes>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>BMS</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -14,7 +14,7 @@
<ImageDatas>
<ImageData Id="1000">424dd6020000000000003600000028000000100000000e0000000100180000000000a0020000c40e0000c40e00000000000000000000ff00ffff00ffff00ffff00ffff00ffff00ff808080808080808080808080808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0000000c0c0c0000000808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c000ffffc0c0c000ffff808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0000000c0c0c0000000808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0ff0000c0c0c0ff0000808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0000000c0c0c0000000808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c00000ffc0c0c00000ff808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0000000c0c0c0000000808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0008000c0c0c0008000808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ff</ImageData>
</ImageDatas>
<Box Id="227" BoxType="9099" BoxFlags="#x00000020">
<Box Id="228" BoxType="9099" BoxFlags="#x00000020">
<Name>__FILENAME__</Name>
<ImageId>1000</ImageId>
<EtherCAT SlaveType="2" PdiType="#x0005" MboxDataLinkLayer="true" StateMBoxPolling="true" CycleMBoxPollingTime="0" CoeType="3" FoeType="1" VendorId="#x00000002" ProductCode="#x0c823052" RevisionNo="#x00160000" InfoDataAddr="true" TimeoutMailbox2="2000" CheckRevisionNoType="3" PortPhys="51" MaxSlotCount="256" MaxSlotGroupCount="1" SlotPdoIncrement="1" SlotIndexIncrement="16" Type="EL3202 2K.Ana. Eingang PT100 (RTD)" Desc="EL3202">
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>String1</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -14,7 +14,7 @@
<ImageDatas>
<ImageData Id="1000">424dd6020000000000003600000028000000100000000e0000000100180000000000a0020000c40e0000c40e00000000000000000000ff00ffff00ffff00ffff00ffff00ffff00ff808080808080808080808080808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0000000c0c0c0000000808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c000ffffc0c0c000ffff808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0000000c0c0c0000000808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0ff0000c0c0c0ff0000808080ff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffff00ffc0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0000000c0c0c0000000808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c00000ffc0c0c00000ff808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0000000c0c0c0000000808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0008000c0c0c0008000808080ff00ffff00ffff00ffff00ffff00ff00ff0000ff0000ff0000ff0000ff0000ff00c0c0c0c0c0c0c0c0c0c0c0c0808080ff00ffff00ffff00ffff00ffff00ff</ImageData>
</ImageDatas>
<Box Id="226" BoxType="9099" BoxFlags="#x00000020">
<Box Id="229" BoxType="9099" BoxFlags="#x00000020">
<Name>__FILENAME__</Name>
<ImageId>1000</ImageId>
<EtherCAT SlaveType="2" PdiType="#x0005" MboxDataLinkLayer="true" StateMBoxPolling="true" CycleMBoxPollingTime="0" CoeType="3" FoeType="1" VendorId="#x00000002" ProductCode="#x0c823052" RevisionNo="#x00160000" InfoDataAddr="true" TimeoutMailbox2="2000" CheckRevisionNoType="3" PortPhys="51" MaxSlotCount="256" MaxSlotGroupCount="1" SlotPdoIncrement="1" SlotIndexIncrement="16" Type="EL3202 2K.Ana. Eingang PT100 (RTD)" Desc="EL3202">
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>String2</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>String1</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>String1</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>String1</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>String2</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>String2</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.12" ClassName="CFlbTermDef" SubType="9099">
<TcSmItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.18" ClassName="CFlbTermDef" SubType="9099">
<DataTypes>
<DataType>
<Name GUID="{18071995-0000-0000-0000-002000000007}" IecBaseType="true" AutoDeleteType="true" HideSubItems="true">ARRAY [0..6] OF BIT</Name>
@@ -25,6 +25,7 @@
<Fmmu>0000000000000000801100010100000002000000000000000000000000000000</Fmmu>
<Fmmu>00000000000000000d0800010100000003000000000000000000000000000000</Fmmu>
<BootStrapData>0010f400f410f400</BootStrapData>
<SuName>String2</SuName>
<Pdo Name="RTD Inputs Channel 1" Index="#x1a00" Flags="#x0011" SyncMan="3">
<Entry Name="Status__Underrange" Index="#x6000" Sub="#x01">
<Type>BIT</Type>