diff --git a/IOB-WIN/App.config b/IOB-WIN/App.config index 3eb5d071..d7763b44 100644 --- a/IOB-WIN/App.config +++ b/IOB-WIN/App.config @@ -23,7 +23,8 @@ - + + diff --git a/IOB-WIN/IobFanuc.cs b/IOB-WIN/IobFanuc.cs index ba2d9e30..de66f048 100644 --- a/IOB-WIN/IobFanuc.cs +++ b/IOB-WIN/IobFanuc.cs @@ -161,21 +161,7 @@ namespace IOB_WIN { lg.Fatal(string.Format("Errore nella connessione all'adapter FANUC: {0}{1}{2}", szStatusConnection, Environment.NewLine, exc)); connectionOk = false; - /* - * rifare meglio: manca - * - gestione contatore corretto (conda signalIN) - * - gestione invio - * - refresh vari display - * - gestione LAST BYTE in modo che quando va a zero NON continua ad inviare se non una volta ogni minuto (implementare...) ora invia ogni 5 sec... - */ - // resetto raw input!!! - RawInput = new byte[6]; - // invio POWEROFF... è ZERO valore IN --> accodo (valore già formattato)! - QueueIN.Enqueue(qEncodeIN); - // invio - svuotaCodaSignIN(); - // update display - displayInData(); + processMemoryDiscon(); // processo semafori ed invio... lg.Info(string.Format("Segnalo Adapter NON running, pausa di {0} msec prima di ulteriori tentativi di riconnessione", utils.CRI("waitRecMSec"))); } diff --git a/IOB-WIN/IobGeneric.cs b/IOB-WIN/IobGeneric.cs index b6376388..0be75f3b 100644 --- a/IOB-WIN/IobGeneric.cs +++ b/IOB-WIN/IobGeneric.cs @@ -50,6 +50,10 @@ namespace IOB_WIN /// public DateTime lastPeriodicLog; /// + /// dataOra ultimo segnale inviato... + /// + public DateTime lastWatchDog; + /// /// Oggetto della coda degli elementi letti (e non ancora trasmessi) /// public Queue QueueIN = new Queue(); @@ -83,10 +87,6 @@ namespace IOB_WIN /// public bool adpTryRestart; /// - /// Ultimo valore watchdog rilevato - /// - public bool lastWatchDog = false; - /// /// Verifica se sia in modalità DEMO x dati INPUT /// public bool DemoIn @@ -337,6 +337,7 @@ namespace IOB_WIN parentForm.commPlcActive = false; adpRunning = true; dtAvvioAdp = DateTime.Now; + lastWatchDog = dtAvvioAdp; TimingData.resetData(); // aggiungo altri defaults setDefaults(); @@ -1300,6 +1301,30 @@ namespace IOB_WIN } } /// + /// Processa gestione memoria x invio dati QUANDO IOB è disconensso da CNC... + /// + public void processMemoryDiscon() + { + // sono disconensso... x prima cosa RESETTO A ZERO VALORI... + RawInput = new byte[6]; + // controllo contatore invio "keepalive"... invio solo a scadenza + if (DateTime.Now.Subtract(lastWatchDog).TotalSeconds > utils.CRI("watchdogMaxSec")) + { + // accodo nuovo valore + // invio POWEROFF... è ZERO valore IN --> accodo (valore già formattato)! + QueueIN.Enqueue(qEncodeIN); + // aggiorno counters + nReadFilt++; + if (nReadFilt > int.MaxValue - 1) nReadFilt = 0; // per evitare buffer overflow... + counterSigIN++; + if (counterSigIN > 9999) counterSigIN = 0; // se supera 10k resetto... + // update display + displayInData(); + //// invio svuotando... + //svuotaCodaSignIN(); + } + } + /// /// Esegue filtraggio dati x bit blinking!!! /// private void filterData() @@ -1588,6 +1613,8 @@ namespace IOB_WIN nSendOut++; // riporto cosa inviato displayOutData(); + // aggiorno data ultimo watchdog... + lastWatchDog = DateTime.Now; } /// /// Effettua processing contapezzi (ed eventualmente alza il bit di contapezzo...) diff --git a/IOB-WIN/MainForm.cs b/IOB-WIN/MainForm.cs index 4ba39501..cb21b2f2 100644 --- a/IOB-WIN/MainForm.cs +++ b/IOB-WIN/MainForm.cs @@ -463,6 +463,8 @@ namespace IOB_WIN } private void gather_Tick(object sender, EventArgs e) { + // check esecuzione SendTask (VHF) COMUNQUE... + checkSendTask(); // eseguo cicli attivi SOLO se adapter è in EFFETTIVO running... if (iobObj.adpRunning) { @@ -490,8 +492,6 @@ namespace IOB_WIN checkSlowTask(); // check esecuzione AlarmSync checkVerySlowData(); - // check esecuzione SendTask (VHF) - checkSendTask(); if (utils.CRI("waitEndCycle") > 0) { Thread.Sleep(utils.CRI("waitEndCycle"));