From f1badda3b05be665e2e69bcaa874ff9fe355f18c Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Sat, 2 Oct 2021 10:58:15 +0200 Subject: [PATCH] Modifica siemens torri x intercettare banchi allarmi (hard coded!!!) --- IOB-WIN-NEXT/IobSiemensTorri.cs | 54 ++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/IOB-WIN-NEXT/IobSiemensTorri.cs b/IOB-WIN-NEXT/IobSiemensTorri.cs index 0abcf29c..7e9192bc 100644 --- a/IOB-WIN-NEXT/IobSiemensTorri.cs +++ b/IOB-WIN-NEXT/IobSiemensTorri.cs @@ -75,6 +75,12 @@ namespace IOB_WIN_NEXT // salvo infine variabile bit x invio B_input = byteSem; + // se ho il bit di allarme + if ((RawInput[0] & (1 << 3)) != 0) + { + checkAlarms(); + } + // procedo SOLO SE รจ enabled IOB if (IobOnline) { @@ -202,6 +208,48 @@ namespace IOB_WIN_NEXT } } + private void checkAlarms() + { + // leggo i banchi allarmi : cablato D700.DBDW2 --> D700 DBDW14, sono 4 banchi a 32 bit da verificare + + int trovati = 0; + // ciclo nei 4 banchi... + trovati += checkAlarmBank("DB700.DBDW2"); + trovati += checkAlarmBank("DB700.DBDW6"); + trovati += checkAlarmBank("DB700.DBDW10"); + trovati += checkAlarmBank("DB700.DBDW14"); + } + + private int checkAlarmBank(string memAddrAlarms) + { + int trovato = 0; + uint valDW = 0; + var MemBlockPZ = new byte[4]; + bool fatto = S7ReadBB(ref MemBlockPZ, memAddrAlarms, 4); + if (fatto) + { + valDW = S7.Net.Types.DWord.FromByteArray(MemBlockPZ.ToArray()); + // se <> 0 --> log e accodo a dynData + if (valDW != 0) + { + string key = $"MTH_ALARM_{memAddrAlarms}_{valDW}"; + var biteVal = baseUtils.binaryForm(valDW); + lgInfo($"Stato allarmi rilevati: {key} | {valDW} | {biteVal}"); + // accodo a dictionary + string almMsg = $"{DateTime.Now} | val {valDW} | {biteVal}"; + // se non ci fosse aggiungo + if (!lastReadAlarms.ContainsKey(key)) + { + lastReadAlarms.Add(key, almMsg); + } + trovato++; + } + } + return trovato; + } + + protected Dictionary lastReadAlarms = new Dictionary(); + #endregion Protected Methods #region Public Methods @@ -277,7 +325,9 @@ namespace IOB_WIN_NEXT /// public override Dictionary getCncAlarms() { - Dictionary outVal = new Dictionary(); + // parto da ultimo vettore allarmi rilevato + Dictionary outVal = lastReadAlarms; + // se ho altro --> accodo try { string almMsg = string.Format("{0} | {1}", currPLC.LastErrorCode.ToString(), currPLC.LastErrorString); @@ -287,6 +337,8 @@ namespace IOB_WIN_NEXT { lgError(exc, "Errore in getCncAlarms"); } + // resetto vettore allarmi + lastReadAlarms = new Dictionary(); return outVal; }