From ad4a555865a610f1ed8ddbfa7fe04b9164dd0bf0 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 26 Oct 2021 17:28:38 +0200 Subject: [PATCH] Gestione strobe/ack su comeca x scrittura parametri --- IOB-WIN-NEXT/IobGeneric.cs | 9 +++---- IOB-WIN-NEXT/IobSiemensComeca.cs | 43 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs index 764ce09f..ea1c431a 100644 --- a/IOB-WIN-NEXT/IobGeneric.cs +++ b/IOB-WIN-NEXT/IobGeneric.cs @@ -2032,7 +2032,7 @@ namespace IOB_WIN_NEXT /// private void svuotaCodaFLog() { - //controllo se è passato oltre watchdog e non ho inviato nulla --> RE-INVIO (ultimo inviato)!!!! + // controllo se è passato oltre watchdog e non ho inviato nulla --> RE-INVIO (ultimo inviato)!!!! if (DateTime.Now.Subtract(lastWatchDog).TotalSeconds > utils.CRI("watchdogMaxSec")) { string wdStatus = "elapsed"; @@ -2069,6 +2069,7 @@ namespace IOB_WIN_NEXT listaValori.Add(currVal); } sendDataBlock(urlType.FLog, listaValori); + lastWatchDog = DateTime.Now; } else { @@ -2078,6 +2079,7 @@ namespace IOB_WIN_NEXT sendDataBlock(urlType.FLog, listaValori); // svuoto! QueueFLog = new ConcurrentQueue(); + lastWatchDog = DateTime.Now; } } else @@ -2085,6 +2087,7 @@ namespace IOB_WIN_NEXT // INVIO SINGOLO...!!! QueueFLog.TryDequeue(out currVal); sendToMoonPro(urlType.FLog, currVal); + lastWatchDog = DateTime.Now; } } else @@ -4753,10 +4756,6 @@ namespace IOB_WIN_NEXT lgInfo(string.Format("{0} -> [SIM]", queueVal)); } nSendOut++; - // riporto cosa inviato -#if false - displayOutData(); -#endif currDispData.newUrlCallData = lastUrl; // aggiorno data ultimo watchdog... lastWatchDog = DateTime.Now; diff --git a/IOB-WIN-NEXT/IobSiemensComeca.cs b/IOB-WIN-NEXT/IobSiemensComeca.cs index 12339100..10fc1fed 100644 --- a/IOB-WIN-NEXT/IobSiemensComeca.cs +++ b/IOB-WIN-NEXT/IobSiemensComeca.cs @@ -35,6 +35,12 @@ namespace IOB_WIN_NEXT * * -------------------------------------------------------------------------------- */ + #region Protected Fields + + protected int strobeVal = 0; + + #endregion Protected Fields + #region Public Constructors /// @@ -91,6 +97,35 @@ namespace IOB_WIN_NEXT #endregion Protected Properties + #region Private Methods + + private void checkStrobeHack() + { + // verifico SE ho un hack sulla var DB85.DB268 + byte[] byteCtrlW = new byte[2]; + bool fatto = S7ReadBB(ref byteCtrlW, "DB85.DBB268", 2); + ushort valCtrlW = S7.Net.Types.Word.FromByteArray(byteCtrlW.ToArray()); + // se vale 1 --> resetto strobe! + if (valCtrlW == 1) + { + // aggiunta finale bit a 0 x chiusura processing.. + var MemBlock = S7.Net.Types.Int.ToByteArray(0); + var memAddrWrite = "DB85.DBB308"; + // imposto valore strobe x check successivi + var taskOk = S7WriteBB(ref MemBlock, memAddrWrite); + if (taskOk) + { + strobeVal = 0; + } + } + else + { + lgInfo("SiemensComeca: Strobe attivo su DBB308, ack non rilevato su DBB268"); + } + } + + #endregion Private Methods + #region Protected Methods /// @@ -133,6 +168,11 @@ namespace IOB_WIN_NEXT byteSignals += (1 << 1); } + // verifico SE ho strobe/hack da chiudere + if (strobeVal != 0) + { + checkStrobeHack(); + } // salvo! B_input = byteSignals; } @@ -185,6 +225,7 @@ namespace IOB_WIN_NEXT case taskType.setParameter: // richiedo da URL i parametri WRITE da popolare lgInfo("Chiamata processMemWriteRequests"); + taskVal = processMemWriteRequests(); // se restituiscce "" faccio altra prova... if (string.IsNullOrEmpty(taskVal)) @@ -204,6 +245,8 @@ namespace IOB_WIN_NEXT // aggiunta finale bit a 1 x richiesta processing.. MemBlock = S7.Net.Types.Int.ToByteArray(1); memAddrWrite = "DB85.DBB308"; + // imposto valore strobe x check successivi + strobeVal = 1; break;