From 55b97a540aee07be3ee524099b8bcd45cd93d7fa Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 20 Dec 2023 16:04:18 +0100 Subject: [PATCH] Continuo modifica Adige x gestione allarmi nuovi --- IOB-WIN-NEXT/DATA/CONF/STEL_210.ini | 2 + IOB-WIN-NEXT/DATA/CONF/STEL_210.json | 42 ++++++++ IOB-WIN-NEXT/DATA/CONF/STEL_210_alarm.json | 110 +++++++++++++++++++++ IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json | 2 +- IOB-WIN-NEXT/IOB-WIN-NEXT.csproj | 3 + IOB-WIN-NEXT/IobOpc/OpcUaEwonAdige.cs | 68 +++++++++++++ IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs | 47 --------- 7 files changed, 226 insertions(+), 48 deletions(-) create mode 100644 IOB-WIN-NEXT/DATA/CONF/STEL_210_alarm.json diff --git a/IOB-WIN-NEXT/DATA/CONF/STEL_210.ini b/IOB-WIN-NEXT/DATA/CONF/STEL_210.ini index 445c4994..42d9689e 100644 --- a/IOB-WIN-NEXT/DATA/CONF/STEL_210.ini +++ b/IOB-WIN-NEXT/DATA/CONF/STEL_210.ini @@ -69,6 +69,8 @@ DISABLE_SEND_WDST=TRUE ; conf parametri memoria READ/WRITE OPC_PARAM_CONF=STEL_210.json +; conf aree allarme +ALARM_CONF=STEL_210_alarm.json [BRANCH] NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/STEL_210.json b/IOB-WIN-NEXT/DATA/CONF/STEL_210.json index a96b130c..e33fefc0 100644 --- a/IOB-WIN-NEXT/DATA/CONF/STEL_210.json +++ b/IOB-WIN-NEXT/DATA/CONF/STEL_210.json @@ -99,6 +99,7 @@ ] }, "fluxLogVeto": [ + "AlarmCode(0)", "AlarmCode(1)", "AlarmCode(2)", "AlarmCode(3)", @@ -118,6 +119,7 @@ "AlarmCode(17)", "AlarmCode(18)", "AlarmCode(19)", + "AlarmText(0)", "AlarmText(1)", "AlarmText(2)", "AlarmText(3)", @@ -202,6 +204,16 @@ "ns=4;s=AlarmCode(7)", "ns=4;s=AlarmCode(8)", "ns=4;s=AlarmCode(9)", + "ns=4;s=AlarmCode(10)", + "ns=4;s=AlarmCode(11)", + "ns=4;s=AlarmCode(12)", + "ns=4;s=AlarmCode(13)", + "ns=4;s=AlarmCode(14)", + "ns=4;s=AlarmCode(15)", + "ns=4;s=AlarmCode(16)", + "ns=4;s=AlarmCode(17)", + "ns=4;s=AlarmCode(18)", + "ns=4;s=AlarmCode(19)", "ns=4;s=AlarmText(0)", "ns=4;s=AlarmText(1)", "ns=4;s=AlarmText(2)", @@ -212,6 +224,16 @@ "ns=4;s=AlarmText(7)", "ns=4;s=AlarmText(8)", "ns=4;s=AlarmText(9)", + "ns=4;s=AlarmText(10)", + "ns=4;s=AlarmText(11)", + "ns=4;s=AlarmText(12)", + "ns=4;s=AlarmText(13)", + "ns=4;s=AlarmText(14)", + "ns=4;s=AlarmText(15)", + "ns=4;s=AlarmText(16)", + "ns=4;s=AlarmText(17)", + "ns=4;s=AlarmText(18)", + "ns=4;s=AlarmText(19)", "ns=4;s=MessageCode(0)", "ns=4;s=MessageCode(1)", "ns=4;s=MessageCode(2)", @@ -222,6 +244,16 @@ "ns=4;s=MessageCode(7)", "ns=4;s=MessageCode(8)", "ns=4;s=MessageCode(9)", + "ns=4;s=MessageCode(10)", + "ns=4;s=MessageCode(11)", + "ns=4;s=MessageCode(12)", + "ns=4;s=MessageCode(13)", + "ns=4;s=MessageCode(14)", + "ns=4;s=MessageCode(15)", + "ns=4;s=MessageCode(16)", + "ns=4;s=MessageCode(17)", + "ns=4;s=MessageCode(18)", + "ns=4;s=MessageCode(19)", "ns=4;s=MessageText(0)", "ns=4;s=MessageText(1)", "ns=4;s=MessageText(2)", @@ -232,6 +264,16 @@ "ns=4;s=MessageText(7)", "ns=4;s=MessageText(8)", "ns=4;s=MessageText(9)", + "ns=4;s=MessageText(10)", + "ns=4;s=MessageText(11)", + "ns=4;s=MessageText(12)", + "ns=4;s=MessageText(13)", + "ns=4;s=MessageText(14)", + "ns=4;s=MessageText(15)", + "ns=4;s=MessageText(16)", + "ns=4;s=MessageText(17)", + "ns=4;s=MessageText(18)", + "ns=4;s=MessageText(19)", "ns=4;s=BladeName", "ns=4;s=BladeCutSpeed", "ns=4;s=BladeRotSpeed", diff --git a/IOB-WIN-NEXT/DATA/CONF/STEL_210_alarm.json b/IOB-WIN-NEXT/DATA/CONF/STEL_210_alarm.json new file mode 100644 index 00000000..64c487e8 --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/STEL_210_alarm.json @@ -0,0 +1,110 @@ +[ + { + "description": "Messaggi", + "tipoMem": "UInt", + "memAddr": "Message", + "index": 0, + "size": 20, + "blockType": "ActiveList", + "blockLevel": "Message", + "activeCountKey": "NumOfMessages", + "activeKeys": [ + "MessageCode(0)", + "MessageCode(1)", + "MessageCode(2)", + "MessageCode(3)", + "MessageCode(4)", + "MessageCode(5)", + "MessageCode(6)", + "MessageCode(7)", + "MessageCode(8)", + "MessageCode(9)", + "MessageCode(10)", + "MessageCode(11)", + "MessageCode(12)", + "MessageCode(13)", + "MessageCode(14)", + "MessageCode(15)", + "MessageCode(16)", + "MessageCode(17)", + "MessageCode(18)", + "MessageCode(19)" + ], + "activeValues": [ + "MessageText(0)", + "MessageText(1)", + "MessageText(2)", + "MessageText(3)", + "MessageText(4)", + "MessageText(5)", + "MessageText(6)", + "MessageText(7)", + "MessageText(8)", + "MessageText(9)", + "MessageText(10)", + "MessageText(11)", + "MessageText(12)", + "MessageText(13)", + "MessageText(14)", + "MessageText(15)", + "MessageText(16)", + "MessageText(17)", + "MessageText(18)", + "MessageText(19)" + ] + }, + { + "description": "Allarmi", + "tipoMem": "UInt", + "memAddr": "Alarm", + "index": 0, + "size": 20, + "blockType": "ActiveList", + "blockLevel": "Alarm", + "activeCountKey": "NumOfAlarms", + "activeKeys": [ + "AlarmCode(0)", + "AlarmCode(1)", + "AlarmCode(2)", + "AlarmCode(3)", + "AlarmCode(4)", + "AlarmCode(5)", + "AlarmCode(6)", + "AlarmCode(7)", + "AlarmCode(8)", + "AlarmCode(9)", + "AlarmCode(10)", + "AlarmCode(11)", + "AlarmCode(12)", + "AlarmCode(13)", + "AlarmCode(14)", + "AlarmCode(15)", + "AlarmCode(16)", + "AlarmCode(17)", + "AlarmCode(18)", + "AlarmCode(19)" + ], + "activeValues": [ + "AlarmText(0)", + "AlarmText(1)", + "AlarmText(2)", + "AlarmText(3)", + "AlarmText(4)", + "AlarmText(5)", + "AlarmText(6)", + "AlarmText(7)", + "AlarmText(8)", + "AlarmText(9)", + "AlarmText(10)", + "AlarmText(11)", + "AlarmText(12)", + "AlarmText(13)", + "AlarmText(14)", + "AlarmText(15)", + "AlarmText(16)", + "AlarmText(17)", + "AlarmText(18)", + "AlarmText(19)" + ] + } +] \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json index fdf36e51..fd1d7891 100644 --- a/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json +++ b/IOB-WIN-NEXT/DATA/CONF/Tend_FIMAT_01.json @@ -59,7 +59,7 @@ }, "NumAllarmi": { "name": "NumAllarmi", - "description": "NUmero Allarmi Presenti", + "description": "Numero Allarmi Presenti", "memAddr": "40005", "tipoMem": "Int", "index": 5, diff --git a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj index c4ae2328..b3af7cb8 100644 --- a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj +++ b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj @@ -503,6 +503,9 @@ Always + + Always + Always diff --git a/IOB-WIN-NEXT/IobOpc/OpcUaEwonAdige.cs b/IOB-WIN-NEXT/IobOpc/OpcUaEwonAdige.cs index 0eb10eda..4c2aeb47 100644 --- a/IOB-WIN-NEXT/IobOpc/OpcUaEwonAdige.cs +++ b/IOB-WIN-NEXT/IobOpc/OpcUaEwonAdige.cs @@ -99,5 +99,73 @@ namespace IOB_WIN_NEXT.IobOpc } #endregion Protected Methods + + /// + /// Verifica presenza eventuali allarmi in modalità BLM/Adige + /// + /// + protected override bool hasAlarms() + { + /*---------------------------------------------- + * verifica lo stato allarmi da + * - condizione allarme (key) + * - numero allarmi presenti + * - lettura relative chiavi OPC-UA dei codici + * - lettura relative chiavi OPC-UA del testo allarme + * - verifica variazione dell'insieme dei codici attivi (INT) + * - costruzione della stringa finale allarmi attivi (unico banco) + ----------------------------------------------*/ + bool answ = false; + int numErrors = 0; + int currStatus = 0; + ushort full16 = 65535; + int[] listInt = new int[2]; + if (alarmMaps != null) + { + // leggo a ciclo le aree degli allarmi CONFIGURATI, se ne trovo --> segnalo allarme... + foreach (var item in alarmMaps) + { + // banchi in array Int16 --> scompongo + for (int i = 0; i < item.size / 2; i++) + { + currStatus = getAlarmStatus(item); + // ora filtro x l'i-esimo banco a 16 bit... + if (i == 0) + { + currStatus = (ushort)(currStatus & full16); + } + else + { + var temp = currStatus >> 16; + currStatus = (ushort)temp; + } + + // aggiornamento blink counters dato nuovo valore + item.checkBlinkCounter(i, (uint)currStatus); + + // calcolo indice errori + if ((uint)(item.alarmsMask[i] & currStatus) > 0) + { + numErrors++; + } + // verifico SE sia variato... confronto allarmi filtrato stile blink per bit status: + // - allarmi che iniziano per # IGNORATI + // - altri allarmi con un countdown da MAX_COUNTER_BLINK a 0 per il fronte + // di discesa + if (item.isChanged(i, (uint)currStatus)) + { + // registro gli allarmi attivi e trasmetto... + if (sendAlarmVariations(item.memAddr, i, item.alarmsState[i], (uint)(item.alarmsMask[i] & currStatus), item.messages)) + { + // se inviato --> salvo stato da current... + item.updStatusVal(i, (uint)(item.alarmsMask[i] & currStatus)); + } + } + } + } + } + answ = numErrors > 0; + return answ; + } } } \ No newline at end of file diff --git a/IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs b/IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs index 155a5510..fd027151 100644 --- a/IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs +++ b/IOB-WIN-NEXT/IobSiemens/SiemensComeca.cs @@ -148,53 +148,6 @@ namespace IOB_WIN_NEXT.IobSiemens #endregion Protected Fields -#if false - protected bool hasAlarms - { - get - { - bool answ = false; - int numErrors = 0; - uint currStatus = 0; - if (alarmMaps != null) - { - // leggo a ciclo le aree degli allarmi CONFIGURATI, se ne trovo --> segnalo allarme... - foreach (var item in alarmMaps) - { - // banchi in WORD (2 byte) --> scompongo - for (int i = 0; i < item.size / 2; i++) - { - currStatus = S7.Net.Types.Counter.FromByteArray(RawInput.Skip(item.index + 2 * i).Take(2).ToArray()); - // verifica e decremento blink... - item.checkBlinkCounter(i, (uint)currStatus); - - // verifico SE sia variato... confronto allarmi filtrato stile blink per - // bit status: - // - allarmi che iniziano per # IGNORATI - // - altri allarmi con un countdown da MAX_COUNTER_BLINK a 0 per il - // fronte di discesa - if (item.isChanged(i, currStatus)) - { - if (currStatus > 0) - { - numErrors++; - } - // registro gli allarmi attivi e trasmetto... - if (sendAlarmVariations(item.memAddr, i, item.alarmsState[i], (uint)(item.alarmsMask[i] & currStatus), item.messages)) - { - // se inviato --> salvo stato da current... - item.updStatusVal(i, (uint)(item.alarmsMask[i] & currStatus)); - } - } - } - } - } - answ = numErrors > 0; - return answ; - } - } -#endif - #region Protected Methods ///