From 212dec7a3b73d1ab777664f113c2e8bb5f786ac1 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 13 Oct 2021 11:48:59 +0200 Subject: [PATCH 1/2] Inizio adapter x gestione PING di watchdog poweroff --- IOB-UT-NEXT/Enums.cs | 5 ++++ IOB-WIN-NEXT/AdapterForm.cs | 5 ++++ IOB-WIN-NEXT/DATA/CONF/MAIN.ini | 4 ++- IOB-WIN-NEXT/DATA/CONF/PING.ini | 39 +++++++++++++++++++++++++++ IOB-WIN-NEXT/IOB-WIN-NEXT.csproj | 4 +++ IOB-WIN-NEXT/IobPing.cs | 46 ++++++++++++++++++++++++++++++++ 6 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 IOB-WIN-NEXT/DATA/CONF/PING.ini create mode 100644 IOB-WIN-NEXT/IobPing.cs diff --git a/IOB-UT-NEXT/Enums.cs b/IOB-UT-NEXT/Enums.cs index 52a04d7f..9099ec4f 100644 --- a/IOB-UT-NEXT/Enums.cs +++ b/IOB-UT-NEXT/Enums.cs @@ -324,6 +324,11 @@ namespace IOB_UT_NEXT /// OSAI_VB6, + /// + /// Adapter tipo watchdog via ping (per impianti spenti e non rilevati) + /// + PingWatchdog, + /// /// Adapter SIEMENS /// diff --git a/IOB-WIN-NEXT/AdapterForm.cs b/IOB-WIN-NEXT/AdapterForm.cs index ece6dab5..e3510dc1 100644 --- a/IOB-WIN-NEXT/AdapterForm.cs +++ b/IOB-WIN-NEXT/AdapterForm.cs @@ -1222,6 +1222,11 @@ namespace IOB_WIN_NEXT start.Enabled = true; break; + case tipoAdapter.PingWatchdog: + iobObj = new IobPing(this, IOBConf); + start.Enabled = true; + break; + case tipoAdapter.OSAI_OPEN: case tipoAdapter.OSAI_CNDEX: case tipoAdapter.OSAI_VB6: diff --git a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini index 735286f9..2dcbed0a 100644 --- a/IOB-WIN-NEXT/DATA/CONF/MAIN.ini +++ b/IOB-WIN-NEXT/DATA/CONF/MAIN.ini @@ -71,5 +71,7 @@ CLI_INST=SteamWareSim ;STARTLIST=OPC_UA ;STARTLIST=SIM_PIZ03 ;STARTLIST=FOV062 -STARTLIST=FP_TR2 +STARTLIST=PING +;STARTLIST=FP_TR2 + MAXCNC=10 \ No newline at end of file diff --git a/IOB-WIN-NEXT/DATA/CONF/PING.ini b/IOB-WIN-NEXT/DATA/CONF/PING.ini new file mode 100644 index 00000000..304d388f --- /dev/null +++ b/IOB-WIN-NEXT/DATA/CONF/PING.ini @@ -0,0 +1,39 @@ +;Configurazione IOB-WIN +[IOB] +CNCTYPE=PingWatchdog +PING_MS_TIMEOUT=500 + +[MACHINE] +VENDOR=STEAMWARE +MODEL=WATCHDOG + +[CNC] +IP=127.0.0.1 +PORT=0000 + +[SERVER] +MPIP=http://10.74.82.218 +MPURL=/MP/IO +CMDBASE=/IOB/input/ +CMDFLOG=/IOB/flog/ +CMDALIVE=/IOB +CMDENABLED=/IOB/enabled/ +CMDADV1=?valore= +CMDREBO=/sendReboot.aspx?idxMacchina= +CMD_ODL_STARTED=/IOB/getCurrOdlStart/ +CMD_FORCLE_SPLIT_ODL=/IOB/forceSplitOdlFull/ +CMD_IDLE_TIME=/IOB/getIdlePeriod/ + +[MEMORY] + +[BLINK] +MAX_COUNTER_BLINK = 15 +BLINK_FILT=0 + +[OPTPAR] +AUTO_CHANGE_ODL=false +POWEROFF_TIMEOUT_SEC=180 + + +[BRANCH] +NAME=master \ No newline at end of file diff --git a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj index f42062ec..f1b385aa 100644 --- a/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj +++ b/IOB-WIN-NEXT/IOB-WIN-NEXT.csproj @@ -184,6 +184,7 @@ + @@ -409,6 +410,9 @@ Always + + Always + Always diff --git a/IOB-WIN-NEXT/IobPing.cs b/IOB-WIN-NEXT/IobPing.cs new file mode 100644 index 00000000..f2348f50 --- /dev/null +++ b/IOB-WIN-NEXT/IobPing.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace IOB_WIN_NEXT +{ + public class IobPing : IobGeneric + { + #region Protected Fields + + protected int PoweroffTimeoutSec = 100; + + /// + /// Veto controllo status x log... + /// + protected DateTime vetoCheckStatus = DateTime.Now; + + #endregion Protected Fields + + #region Public Constructors + + /// + /// Estende l'init della classe base + /// + /// + public IobPing(AdapterForm caller, IobConfiguration IOBConf) : base(caller, IOBConf) + { + lgInfo("NEW IobPing (WatchDog)"); + // init datetime counters + DateTime adesso = DateTime.Now; + lastPzCountSend = adesso; + lastWarnODL = adesso; + vetoCheckStatus = adesso; + var POWEROFF_TIMEOUT_SEC = getOptPar("POWEROFF_TIMEOUT_SEC"); + if (!string.IsNullOrEmpty(POWEROFF_TIMEOUT_SEC)) + { + int.TryParse(POWEROFF_TIMEOUT_SEC, out PoweroffTimeoutSec); + } + lgInfo($"L'adapter effettuerà PING di controllo all'indirizzo {IOBConf.cncIpAddr} per forzare stato poweroff dopo {PoweroffTimeoutSec} sec"); + } + + #endregion Public Constructors + } +} \ No newline at end of file From e1e33d1536ecf4ba59e72c54196b232711323b9f Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 13 Oct 2021 16:56:00 +0200 Subject: [PATCH 2/2] COmpletamento IOB x testing PING disconnessioni/spegnimenti --- IOB-WIN-NEXT/DATA/CONF/PING.ini | 2 +- IOB-WIN-NEXT/IobGeneric.cs | 9 +++ IOB-WIN-NEXT/IobPing.cs | 118 +++++++++++++++++++++++++++++++- 3 files changed, 126 insertions(+), 3 deletions(-) diff --git a/IOB-WIN-NEXT/DATA/CONF/PING.ini b/IOB-WIN-NEXT/DATA/CONF/PING.ini index 304d388f..3a79aecf 100644 --- a/IOB-WIN-NEXT/DATA/CONF/PING.ini +++ b/IOB-WIN-NEXT/DATA/CONF/PING.ini @@ -8,7 +8,7 @@ VENDOR=STEAMWARE MODEL=WATCHDOG [CNC] -IP=127.0.0.1 +IP=10.74.83.112 PORT=0000 [SERVER] diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs index 6009ee23..17a18b0d 100644 --- a/IOB-WIN-NEXT/IobGeneric.cs +++ b/IOB-WIN-NEXT/IobGeneric.cs @@ -433,6 +433,7 @@ namespace IOB_WIN_NEXT if (DemoOut) { answ = (QueueIN.Count + QueueFLog.Count >= nMaxSend); + IobOnline = answ; } else { @@ -3589,6 +3590,7 @@ namespace IOB_WIN_NEXT } } currDispData.semIn = Semaforo.SR; + processDisconnectedTask(); } raiseRefresh(currDispData); } @@ -4105,6 +4107,13 @@ namespace IOB_WIN_NEXT public virtual void processContapezzi() { } + /// + /// Task periodici SE disconnesso + /// + public virtual void processDisconnectedTask() + { + } + /// /// Effettua processing del recupero dei valori dinamici: /// es: speed (RPM, feedrate) degli assi, valori pressioni, temeprature diff --git a/IOB-WIN-NEXT/IobPing.cs b/IOB-WIN-NEXT/IobPing.cs index f2348f50..2e9fe19e 100644 --- a/IOB-WIN-NEXT/IobPing.cs +++ b/IOB-WIN-NEXT/IobPing.cs @@ -1,6 +1,9 @@ -using System; +using IOB_UT_NEXT; +using MapoSDK; +using System; using System.Collections.Generic; using System.Linq; +using System.Net.NetworkInformation; using System.Text; using System.Threading.Tasks; @@ -38,9 +41,120 @@ namespace IOB_WIN_NEXT { int.TryParse(POWEROFF_TIMEOUT_SEC, out PoweroffTimeoutSec); } - lgInfo($"L'adapter effettuerà PING di controllo all'indirizzo {IOBConf.cncIpAddr} per forzare stato poweroff dopo {PoweroffTimeoutSec} sec"); + lgInfo($"L'adapter effettuera' PING di controllo all'indirizzo {IOBConf.cncIpAddr} per forzare stato poweroff dopo {PoweroffTimeoutSec} sec"); } #endregion Public Constructors + + #region Public Methods + + /// + /// metodo controllo ping lento, override AutoODL + /// + public override void processDisconnectedTask() + { + // effettuo check ping! + DateTime adesso = DateTime.Now; + if (adesso.Subtract(lastPING).TotalSeconds >= PoweroffTimeoutSec) + { + // invio poweroff! + newDisplayData currDispData = new newDisplayData(); + readSemafori(ref currDispData); + // SOLO SE ho poweroff da inviare... + if (B_output == 0) + { + accodaSigIN(ref currDispData); + // reset last ping... + lastPING = DateTime.Now; + } + } + } + + /// + /// Effettua lettura semafori principale + /// Parametri da aggiornare x display in form + /// + public override void readSemafori(ref newDisplayData currDispData) + { + byte[] MemBlock = new byte[2]; + try + { + currDispData.semIn = Semaforo.SV; + + // se passa il ping faccio il resto... + if (testPingMachine == IPStatus.Success) + { + // in primis salvo data ping... + lastPING = DateTime.Now; + connectionOk = true; + } + else + { + connectionOk = false; + } + + if (connectionOk) + { + B_input = 1; + } + else + { + B_input = 0; + } + // annullo lettura bit signal IN pre/post x evitare invio automatico... + B_output = B_input; + B_previous = B_input; + } + catch + { + currDispData.semIn = Semaforo.SR; + } + } + + /// Override connessione + /// + public override void tryConnect() + { + bool doLog = (verboseLog || periodicLog); + lgInfo("PING: tryConnect step 01"); + if (!connectionOk) + { + // controllo che il ping sia stato tentato almeno pingTestSec fa... + if (DateTime.Now.Subtract(lastPING).TotalSeconds > utils.CRI("pingTestSec")) + { + if (doLog) + { + lgInfo("PING: ConnKO - tryConnect"); + } + lgInfo("PING: tryConnect step 04"); + + // se passa il ping faccio il resto... + if (testPingMachine == IPStatus.Success) + { + // in primis salvo data ping... + lastPING = DateTime.Now; + connectionOk = true; + lgInfo("PING OK"); + } + else + { + // loggo no risposta ping ... + connectionOk = false; + lgInfo("PING KO"); + } + } + } + } + + /// + /// Override disconnessione + /// + public override void tryDisconnect() + { + lgInfo("Richiesta disconnessione adapter PING!"); + connectionOk = false; + } + + #endregion Public Methods } } \ No newline at end of file