Fixed Modbus register access

This commit is contained in:
Matthias Heisig
2024-01-17 11:26:11 +01:00
parent 82826c258a
commit 57987cb19f
24 changed files with 1310 additions and 572 deletions

View File

@@ -37,13 +37,16 @@ VAR_OUTPUT
// String completely off
xOff : BOOL;
// All safetyinterlocks are ok
xSafetyIntlksOk : BOOL;
xError : BOOL;
xWarning : BOOL;
END_VAR
VAR
_fbModule1 : FB_Module(CONCAT(_sName, 'Module 1'));
_fbModule2 : FB_Module(CONCAT(_sName, 'Module 2'));
_fbModule3 : FB_Module(CONCAT(_sName, 'Module 3'));
_fbModule1 : FB_Module('Module 1');
_fbModule2 : FB_Module('Module 2');
_fbModule3 : FB_Module('Module 3');
// All modules are ready
_xAllModulesReady : BOOL;
@@ -54,6 +57,12 @@ VAR
// Flag for module balance checking
_xBalanceOk : BOOL;
// Modules out of balance alarm message
_fbModulesOutOfBalanceAlarm : Fb_TcAlarm;
// Safetyinterlocks pending alarm
_fbSafetyInterlocksNotOkAlarm : FB_TcAlarm;
// String name
_sName : STRING;
END_VAR
@@ -62,6 +71,9 @@ END_VAR
<ST><![CDATA[// Reset error flag
xError := FALSE;
// Reset safety interlocks flag
xSafetyIntlksOk := TRUE;
// ===============================
// Module 1
// ===============================
@@ -81,6 +93,10 @@ IF _fbModule1.xError THEN
xError := TRUE;
END_IF
IF NOT _fbModule1.xSafetyIntlksOk THEN
xSafetyIntlksOk := FALSE;
END_IF
// ===============================
// Module 2
@@ -101,6 +117,10 @@ IF _fbModule2.xError THEN
xError := TRUE;
END_IF
IF NOT _fbModule2.xSafetyIntlksOk THEN
xSafetyIntlksOk := FALSE;
END_IF
// ===============================
// Module 3
@@ -121,6 +141,22 @@ IF _fbModule3.xError THEN
xError := TRUE;
END_IF
IF NOT _fbModule3.xSafetyIntlksOk THEN
xSafetyIntlksOk := FALSE;
END_IF
// ===============================
// Handle safety interlock alarm
// ===============================
IF NOT xSafetyIntlksOk AND NOT _fbSafetyInterlocksNotOkAlarm.bRaised THEN
_fbSafetyInterlocksNotOkAlarm.Raise(0);
END_IF
IF xSafetyIntlksOk AND _fbSafetyInterlocksNotOkAlarm.bRaised THEN
_fbSafetyInterlocksNotOkAlarm.Clear(0, TRUE);
END_IF
// ===============================
// Modules ready check
@@ -179,6 +215,21 @@ IF _xAllModulesReady AND (NOT _xBalanceOk) THEN
xError := TRUE;
END_IF
// Raise error
IF (NOT _xBalanceOk) AND (NOT _fbModulesOutOfBalanceAlarm.bRaised) THEN
_fbModulesOutOfBalanceAlarm.Raise(0);
END_IF
// Clear error
IF _xBalanceOk AND _fbModulesOutOfBalanceAlarm.bRaised THEN
_fbModulesOutOfBalanceAlarm.Clear(0, FALSE);
END_IF
// Confirm error
IF _fbModulesOutOfBalanceAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xConfirmAlarms THEN
_fbModulesOutOfBalanceAlarm.Confirm(0);
END_IF
// ===============================
// String ready validation check
// ===============================
@@ -198,12 +249,56 @@ VAR_INPUT
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_sName := sName;]]></ST>
<ST><![CDATA[_sName := sName;
// Set names for modules
_fbModule1.Name := Concat(_sName, ' - Module 1');
_fbModule2.Name := Concat(_sName, ' - Module 2');
_fbModule3.Name := Concat(_sName, ' - Module 3');
// Create out of balance alarm
_fbModulesOutOfBalanceAlarm.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.StringImbalance, bWithConfirmation := TRUE, 0);
_fbModulesOutOfBalanceAlarm.ipArguments.Clear().AddString(_sName);
// Create safetyinterlocks active alarm
_fbSafetyInterlocksNotOkAlarm.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.SafetyIntlksActive, bWithConfirmation := FALSE, 0);
_fbSafetyInterlocksNotOkAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
</Implementation>
</Method>
<Property Name="Name" Id="{19fcb6d4-fd4b-49f9-9791-1e4c931b9e69}">
<Declaration><![CDATA[PROPERTY Name : String]]></Declaration>
<Get Name="Get" Id="{a4b6ba34-8ad9-46b1-939c-45cef957fd9a}">
<Declaration><![CDATA[VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[Name := _sName;]]></ST>
</Implementation>
</Get>
<Set Name="Set" Id="{c32997c5-bac4-4ef0-bc87-edcbbb2e542f}">
<Declaration><![CDATA[VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_sName := Name;
// Set modules names
_fbModule1.Name := CONCAT(_sName, ' - Module 1');
_fbModule2.Name := CONCAT(_sName, ' - Module 2');
_fbModule3.Name := CONCAT(_sName, ' - Module 3');
// Create alarm messages
_fbModulesOutOfBalanceAlarm.ipArguments.Clear().AddString(_sName);
_fbSafetyInterlocksNotOkAlarm.ipArguments.Clear().AddString(_sName);]]></ST>
</Implementation>
</Set>
</Property>
<LineIds Name="FB_String">
<LineId Id="266" Count="0" />
<LineId Id="268" Count="0" />
<LineId Id="335" Count="0" />
<LineId Id="334" Count="0" />
<LineId Id="336" Count="0" />
<LineId Id="267" Count="0" />
<LineId Id="69" Count="0" />
<LineId Id="67" Count="1" />
@@ -217,14 +312,26 @@ END_VAR
<LineId Id="66" Count="0" />
<LineId Id="63" Count="0" />
<LineId Id="59" Count="2" />
<LineId Id="338" Count="0" />
<LineId Id="337" Count="0" />
<LineId Id="339" Count="1" />
<LineId Id="71" Count="5" />
<LineId Id="141" Count="0" />
<LineId Id="77" Count="11" />
<LineId Id="70" Count="0" />
<LineId Id="342" Count="2" />
<LineId Id="341" Count="0" />
<LineId Id="90" Count="5" />
<LineId Id="142" Count="0" />
<LineId Id="96" Count="11" />
<LineId Id="89" Count="0" />
<LineId Id="346" Count="2" />
<LineId Id="345" Count="0" />
<LineId Id="433" Count="1" />
<LineId Id="432" Count="0" />
<LineId Id="435" Count="4" />
<LineId Id="441" Count="2" />
<LineId Id="440" Count="0" />
<LineId Id="183" Count="5" />
<LineId Id="245" Count="4" />
<LineId Id="244" Count="0" />
@@ -249,12 +356,38 @@ END_VAR
<LineId Id="212" Count="0" />
<LineId Id="237" Count="1" />
<LineId Id="236" Count="0" />
<LineId Id="215" Count="11" />
<LineId Id="215" Count="5" />
<LineId Id="353" Count="13" />
<LineId Id="352" Count="0" />
<LineId Id="221" Count="5" />
<LineId Id="239" Count="1" />
<LineId Id="214" Count="0" />
</LineIds>
<LineIds Name="FB_String.FB_init">
<LineId Id="7" Count="0" />
<LineId Id="33" Count="0" />
<LineId Id="32" Count="0" />
<LineId Id="34" Count="2" />
<LineId Id="16" Count="0" />
<LineId Id="15" Count="0" />
<LineId Id="17" Count="0" />
<LineId Id="20" Count="0" />
<LineId Id="31" Count="0" />
<LineId Id="29" Count="1" />
<LineId Id="28" Count="0" />
</LineIds>
<LineIds Name="FB_String.Name.Get">
<LineId Id="2" Count="0" />
</LineIds>
<LineIds Name="FB_String.Name.Set">
<LineId Id="2" Count="0" />
<LineId Id="9" Count="0" />
<LineId Id="6" Count="2" />
<LineId Id="5" Count="0" />
<LineId Id="13" Count="0" />
<LineId Id="11" Count="0" />
<LineId Id="10" Count="0" />
<LineId Id="12" Count="0" />
</LineIds>
</POU>
</TcPlcObject>