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"));