Small changes after FAT and EMS Test

- Changed Modbus server config for EMS connectivity
- Changed some default EWL Limits
This commit is contained in:
Matthias Heisig
2025-06-13 16:37:14 +02:00
parent 6fe10cc58c
commit b6791f7951
8 changed files with 308 additions and 230 deletions

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplicationLanguageDiagram Crc="3764738484" dslVersion="1.4.0.0" Id="10165380-5ad4-4a1c-ba25-e8b86a8e4001" absoluteBounds="0, 0, 12.375, 8.5" name="TwinSAFE">
<safetyApplicationLanguageDiagram Crc="1400438383" dslVersion="1.5.0.0" Id="10165380-5ad4-4a1c-ba25-e8b86a8e4001" absoluteBounds="0, 0, 12.375, 8.5" name="TwinSAFE">
<safetyApplicationMoniker name="/" />
<nestedChildShapes>
<networkSwimLane Id="e01f4458-df70-481e-ae9d-4f44a16fbcf1" absoluteBounds="0, 0, 12.375, 5.325">

View File

@@ -87,7 +87,7 @@ VAR_GLOBAL PERSISTENT
// Pressure posolyt tank inlet
stConfigPosolytPressureTankInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 2000, rPVMin := 0, sUnit := 'mbar'),
stEWLPosolytPressureTankInlet := (rErrorMin := -20, rWarningMin := -10, rWarningMax := 15, rErrorMax := 25),
stEWLPosolytPressureTankInlet := (rErrorMin := -20, rWarningMin := -10, rWarningMax := 50, rErrorMax := 75),
stEWDPosolytPressureTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
@@ -104,7 +104,7 @@ VAR_GLOBAL PERSISTENT
// Pressure negolyt tank inlet
stConfigNegolytPressureTankInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 2000, rPVMin := 0, sUnit := 'mbar'),
stEWLNegolytPressureTankInlet := (rErrorMin := -20, rWarningMin := -10, rWarningMax := 15, rErrorMax := 25),
stEWLNegolytPressureTankInlet := (rErrorMin := -20, rWarningMin := -10, rWarningMax := 50, rErrorMax := 75),
stEWDNegolytPressureTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
@@ -121,7 +121,7 @@ VAR_GLOBAL PERSISTENT
// Temperature sensor posolyt tank inlet
stConfigPosolytTempTankInlet := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C'),
stEWLPosolytTempTankInlet := (rErrorMin := 10, rWarningMin := 15, rWarningMax := 50, rErrorMax := 60),
stEWLPosolytTempTankInlet := (rErrorMin := 10, rWarningMin := 15, rWarningMax := 42, rErrorMax := 45),
stEWDPosolytTempTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
@@ -138,7 +138,7 @@ VAR_GLOBAL PERSISTENT
// Temperature sensor negolyt tank inlet
stConfigNegolytTempTankInlet := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C'),
stEWLNegolytTempTankInlet := (rErrorMin := 15, rWarningMin := 15, rWarningMax := 50, rErrorMax := 60),
stEWLNegolytTempTankInlet := (rErrorMin := 15, rWarningMin := 15, rWarningMax := 42, rErrorMax := 45),
stEWDNegolytTempTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
@@ -158,7 +158,7 @@ VAR_GLOBAL PERSISTENT
// Index 0x80n0:02 "Presentation" = Signed(0) -> Resolution 1/10°C
// Index 0x80n0:19 "RTD Element" = PT100(0)
stConfigVoltageSegment := (iAIMax := 32767, iAIMin := 0, rPVMax := 150, rPVMin := 0, sUnit := 'V'),
stEWLVoltageSegment := (rErrorMin := 50, rWarningMin := 55, rWarningMax := 77, rErrorMax := 80),
stEWLVoltageSegment := (rErrorMin := 50, rWarningMin := 54, rWarningMax := 79, rErrorMax := 80),
stEWDVoltageSegment :=
(
timHardwareSignalLevelOn := T#0S,
@@ -195,10 +195,10 @@ VAR_GLOBAL PERSISTENT
rPumpNegolytOnPower : REAL := 70.0;
// Pump posolyt discharge segment without inverter power in %
rPumpPosolytDisChrgPower : REAL := 45.0;
rPumpPosolytDisChrgPower : REAL := 50.0;
// Pump posolyt discharge segment without inverter power in %
rPumpNegolytDisChrgPower : REAL := 45.0;
rPumpNegolytDisChrgPower : REAL := 50.0;
// Unit voltage pumps shutoff threshold (Volt)
rPumpshutoffThreshold : REAL := 15.0;
@@ -207,7 +207,7 @@ VAR_GLOBAL PERSISTENT
rMinimumUnitVoltage : REAL := 55.0;
// Maximum unit voltage for fully charged (Volt)
rMaximumUnitVoltage : REAL := 79.5;
rMaximumUnitVoltage : REAL := 78.5;
// Delta value to minimum unit voltage for shutdown discharge (Volt)
rDeltaUnitVoltageShutdownDischarge : REAL := 5.0;
@@ -225,11 +225,11 @@ VAR_GLOBAL PERSISTENT
// Maximum allowed charging power (Watt) per String
// 24.000 W -> 2.000 W per Unit
diMaxStringChargingPower : DINT := -50_000;
diMaxStringChargingPower : DINT := -48_000;
// Maximum allowed discharging power (Watt) per String
// 24.000 W -> 2.000 W per Unit
diMaxStringDischargePower : DINT := 50_000;
diMaxStringDischargePower : DINT := 48_000;
// Inverter ip address for string 1
sInverterIpString1 : STRING := '192.168.42.10';
@@ -252,7 +252,7 @@ VAR_GLOBAL PERSISTENT
rStringEmptyVoltage : REAL := 660.0;
// Unit wait startup time (was 1 minute, reduced because of Doppelhöcker-Test)
timUnitStartupTime : TIME := T#5S;
timUnitStartupTime : TIME := T#15S;
// Unit balancing wait startup time
timUnitBalancingStartupTime : TIME := T#3M;

File diff suppressed because one or more lines are too long

View File

@@ -549,6 +549,9 @@ CASE _iState OF
_tonErrorDCCBNotClosed.IN := FALSE;
xError := TRUE;
xReady := FALSE;
IF (NOT _fbDCMainSwitchNotClosed.bRaised) THEN
_fbDCMainSwitchNotClosed.Raise(0);
END_IF
_iState := 1000;
END_IF
@@ -770,6 +773,7 @@ CASE _iState OF
IF (NOT xEnable) AND (NOT _xErrorInternal) THEN
xError := FALSE;
_xReleaseSafetyIntlkErrors := FALSE;
ClearAlarms();
//eStatus := E_COMPONENT_STATUS.OFF;
_iState := 0;
END_IF
@@ -843,6 +847,13 @@ stHMIInterface.eStatus := eStatus;
// Reset Safety
xResetSafetyDCCB := xResetSafety;]]></ST>
</Implementation>
<Action Name="ClearAlarms" Id="{541a307f-e5d8-4588-8fd3-6f4bdf6a71dd}">
<Implementation>
<ST><![CDATA[IF _fbDCMainSwitchNotClosed.bRaised THEN
_fbDCMainSwitchNotClosed.Clear(0, FALSE);
END_IF]]></ST>
</Implementation>
</Action>
<Method Name="FB_init" Id="{9e8494eb-1b40-4be9-91c8-810ecbdf7f0c}">
<Declaration><![CDATA[METHOD FB_init : BOOL
VAR_INPUT

View File

@@ -156,6 +156,8 @@ VAR
_rMinCurrentInverterDCVoltage : REAL;
_fbModbusRead : FB_MBReadRegs;
// _fbModbusWrite : FB_MBWriteSingleReg;
// _fbModbusWriteMult : FB_MBWriteRegs;
//_wLength : WORD := 49;
xDebugTest : BOOL;
_wDebug1 : WORD;
@@ -172,12 +174,58 @@ VAR
_rPowerDH : REAL;
_fbTONDHCycleTime : TON := (PT := T#15M);
//_uiTest : UINT := 1;
//_diTest : DINT := 123;
//_fbKaco : FB_PowerSupplyKaco('Kaco');
//_xEnableKaco : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF _xFirstCycle THEN
<ST><![CDATA[(*
IF xDebugTest THEN
(*
_fbModbusWrite(
sIPAddr:= '127.0.0.1',
nTCPPort:= 502,
nUnitID:= 16#FF,
nMBAddr:= 13004,
nValue:= 1,
bExecute:= TRUE,
tTimeout:= T#10S,
bBusy=> ,
bError=> ,
nErrId=> );
IF (NOT _fbModbusWrite.bBusy) THEN
xDebugTest := FALSE;
_fbModbusWrite(bExecute := FALSE);
END_IF
*)
_fbModbusWriteMult(
sIPAddr:= '127.0.0.1',
nTCPPort:= 502,
nUnitID:= 16#FF,
nQuantity:= 2,
nMBAddr:= 12000,
cbLength:= SIZEOF(_diTest),
pSrcAddr:= ADR(_diTest),
bExecute:= TRUE,
tTimeout:= T#10S,
bBusy=> ,
bError=> ,
nErrId=> );
IF (NOT _fbModbusWriteMult.bBusy) THEN
xDebugTest := FALSE;
_fbModbusWriteMult(bExecute := FALSE);
END_IF
END_IF
*)
IF _xFirstCycle THEN
_xFirstCycle := FALSE;
_xGetPowerMeterData := TRUE;
@@ -217,6 +265,7 @@ IF GVL_MODBUS.stBMSErrorReg.wConfirmAlarms > 0 THEN
_xConfirmAlarms := TRUE;
END_IF
// Ack alarms from hardware button
_fbRTrigHardwareAck(CLK := _xHarwareResetButton);
IF _fbRTrigHardwareAck.Q THEN

View File

@@ -269,7 +269,7 @@
</System>
<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">
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{230A3C79-804C-4ED1-6C6E-6C3CE2FDFC9C}" TmcPath="PLC\PLC.tmc">
<Instance Id="#x08502000" TcSmClass="TComPlcObjDef" KeepUnrestoredLinks="2" TmcHash="{B6610D51-FC43-AAD1-46A6-1C271CAEF439}" TmcPath="PLC\PLC.tmc">
<Name>PLC Instance</Name>
<CLSID ClassFactory="TcPlc30">{08500001-0000-0000-F000-000000000064}</CLSID>
<Vars VarGrpType="2" AreaNo="1">
@@ -6889,11 +6889,6 @@
<Comment><![CDATA[ Hardware reset button]]></Comment>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._uiEtherCATState</Name>
<Comment><![CDATA[ String EtherCAT state]]></Comment>
<Type>UINT</Type>
</Var>
<Var>
<Name>MAIN._fbSafety.xVoltagesInRange</Name>
<Type>BOOL</Type>
@@ -6906,6 +6901,11 @@
<Name>MAIN._fbSafety.xTemperaturesInRange</Name>
<Type>BOOL</Type>
</Var>
<Var>
<Name>MAIN._uiEtherCATState</Name>
<Comment><![CDATA[ String EtherCAT state]]></Comment>
<Type>UINT</Type>
</Var>
</Vars>
<Contexts>
<Context>

View File

@@ -66,7 +66,7 @@
</Hides>
</DataType>
<DataType>
<Name GUID="{4B5D56D2-4431-41C5-8F0A-06E1FC56151A}">BMSEvents</Name>
<Name GUID="{58BB5280-6EA8-4841-8B84-F66A8442CCAE}">BMSEvents</Name>
<DisplayName TxtId=""><![CDATA[String event class]]></DisplayName>
<EventId>
<Name Id="1">NotAllCompInAuto</Name>
@@ -128,6 +128,11 @@
<DisplayName TxtId=""><![CDATA[{0}: Safetyinterlock reset timeout]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<EventId>
<Name Id="13">DCCBDidNotCloseInTime</Name>
<DisplayName TxtId=""><![CDATA[{} - DCCB could not be closed in time]]></DisplayName>
<Severity>Error</Severity>
</EventId>
<Hides>
<Hide GUID="{1D326C00-DF37-4B94-8E0D-C22524EB2E89}"/>
<Hide GUID="{E7132508-795D-4A6C-AFB1-FED6C1DE44FD}"/>
@@ -148,6 +153,7 @@
<Hide GUID="{E2F93DD0-9542-4F83-B1C1-7401F6E7E423}"/>
<Hide GUID="{F05A8F7C-1061-4AE4-AAAC-173C036FF4FC}"/>
<Hide GUID="{99721C04-AF32-4BF0-BB6B-A59D0F9957F2}"/>
<Hide GUID="{4B5D56D2-4431-41C5-8F0A-06E1FC56151A}"/>
</Hides>
</DataType>
<DataType>

View File

@@ -18,7 +18,7 @@
<EndAddress>11047</EndAddress>
<VarName>GVL_MODBUS.stModbusEMSComm.stModbusReg11</VarName>
</MappingInfo>
<!-- 12.000 Registers -->
<MappingInfo>
<AdsPort>851</AdsPort>
@@ -31,10 +31,11 @@
<MappingInfo>
<AdsPort>851</AdsPort>
<StartAddress>13000</StartAddress>
<EndAddress>13004</EndAddress>
<VarName>GVL_MODBUS.stBMSErrorReg</VarName>
<EndAddress>13003</EndAddress>
<VarName>GVL_MODBUS.stBMSErrorReg.wBMSWarningActive</VarName>
</MappingInfo>
<!-- 14.000 Registers -->
<MappingInfo>
<AdsPort>851</AdsPort>
@@ -50,6 +51,13 @@
<EndAddress>15047</EndAddress>
<VarName>GVL_MODBUS.awErrorsUnitsActive</VarName>
</MappingInfo>
<MappingInfo>
<AdsPort>851</AdsPort>
<StartAddress>13004</StartAddress>
<EndAddress>13004</EndAddress>
<VarName>GVL_MODBUS.stBMSErrorReg.wConfirmAlarms</VarName>
</MappingInfo>
</OutputRegisters>
</Mapping>
</Configuration>