Passa al contenuto principale

SysPing, execute a ping

Questo blocco funzione da eseguire in task Back, controlla se un indirizzo IP è raggiungibile tramite l'invio del comando ping al sistema. Attivando Enable viene inviato il comando di ping ed al termine si attiva Done che rimane attivo fino alla disabilitazione di Enable questo permette esecuzione in cascata dei FBs. Se si ottiene risposta viene attivato per un loop Ok, in caso contrario Fault.

La variabile Length permette  di impostare la lunghezza del pacchetto di ping inviato, nella variabile Time viene ritornato il tempo necessario a completare il comando.

Approfondimenti

Monitoraggio sistemi con ping in questo articolo abbiamo riportato una serie di indicazioni su come eseguire il monitoraggio del funzionamento di sistemi tramite l'invio di messaggi di ping.

Accettare richieste ping su Windows

Di default sui sistemi Windows le richieste di ping sono disabilitate, per abilitarle da Windows Firewall, in Impostazioni avanzate, su Regole connessioni in entrata con il tasto destro del muose occorre definire una nuova regola personalizzata.

La regola và abilitata su tutti i programmi, definendo il protocollo ICMPv4, personalizzando l'impostazione solo alle richieste echo. Lasciare l'accesso abilitato da qualsiasi indirizzo IP. Consentire la connessione e per maggiore sicurezza abilitare solo il dominio privato. Infine definire un nome a questa regola (Esempio Allow echo).

Screenshot abilitazione ping su Windows

Descrizione​

Immagine FB SysPing

ParametroTipoDescrizione
EnableBOOLAbilitazione, attivandolo viene eseguito il comando di ping. Terminato il comando per eseguire un nuovo comando occorre disabilitare e poi riabilitare il FB.
Address@_STRINGDefinizione indirizzo IP o URL su cui eseguire il ping.
LengthUINTLunghezza in bytes del frame di ping inviato.
DelayREALTempo di attesa su attivazione Done (S).
DoneBOOLSi attiva al termine della esecuzione comando e rimane attiva fino alla disabilitazione di Enable.
OkBOOLAttivo se indirizzo IP è raggiungibile (Risposta da Ping).
FaultBOOLAttivo per un loop se errore esecuzione comando.
PTimeREALTempo di esecuzione ping (S).

Esempi​

Come utilizzare gli esempi.

ST_SysPing: Viene eseguito il ping su di un indirizzo IP o su un URL. Enable, viene resettato per un loop al termine del comando in questo modo viene ciclicamente eseguito un nuovo ping ogni tempo di Delay.

ST_ConnectionOk: Viene controllata la connettività Internet, si esegue un ping verso l'IP di Google "8.8.8.8". Se si desidera controllare anche l'accesso al server DNS è possibile utilizzare l'URL. Dopo un numero di ping consecutivi corretti si considera connessione attiva.

LogicLab (Ptp116, ST_SysPing)
PROGRAM ST_SysPing
VAR
IsReachable : BOOL; (* The IP is reachable *)
Ping : SysPing; (* Ping command *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysPing"
// *****************************************************************************
// It executed a ping to the specified IP address (e.g. Google).
// -----------------------------------------------------------------------------

// -------------------------------------------------------------------------
// EXECUTE PING
// -------------------------------------------------------------------------
// Execute ping to Google.

Ping.Address:=ADR('8.8.8.8'); //Address to ping
Ping.Length:=32; //Frame length
Ping.Delay:=5.0; //Delay (S)
Ping(Enable:=NOT(Ping.Done)); //Ping command

// Manage the reachable flag.

IF (Ping.Ok) THEN IsReachable:=TRUE; END_IF;
IF (Ping.Fault) THEN IsReachable:=FALSE; END_IF;

// [End of file]
LogicLab (Ptp181, ST_ConnectionOk)
PROGRAM ST_ConnectionOk
VAR
ConnectionOk : BOOL; (* Connection available *)
PCtr : USINT; (* Ping counter *)
Ping : SysPing; (* Ping command *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_ConnectionOk"
// *****************************************************************************
// This programs pings a Google site to check if a connection to Internet is
// available or not. Instead of to use the IP address use the URL to check also
// the DNS server availability.
// -----------------------------------------------------------------------------

// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// At first loop initializes variables.

IF (SysFirstLoop) THEN
Ping.Address:=ADR('8.8.8.8'); //Address to ping
Ping.Address:=ADR('www.google.com'); //URL to ping
Ping.Length:=32; //Frame length
Ping.Delay:=5.0; //Delay (S)
END_IF;

// -------------------------------------------------------------------------
// EXECUTE PING
// -------------------------------------------------------------------------
// Execute the ping and waits for connection available.

Ping(Enable:=NOT(Ping.Done)); //Ping command

IF (Ping.Fault) THEN
IF (PCtr = 0) THEN ConnectionOk:=FALSE; ELSE PCtr:=PCtr-1; END_IF;
END_IF;

IF (Ping.Ok) THEN
IF (PCtr = 3) THEN ConnectionOk:=TRUE; ELSE PCtr:=PCtr+1; END_IF;
END_IF;

// [End of file]