Questo blocco funzione da eseguire in task Back, invia una richiesta DNS. Indicando in DNSServer l’indirizzo IP di un server DNS (Esempio quello di Google 8.8.8.8) è possibile effettuare la richiesta di risoluzione di un dominio.
Attivando l’ingresso Enable viene effettuata la richiesta di risoluzione dell’URL indicato in Domain al server DNS. Se il server risolve l’URL viene attivata l’uscita Done e su DomainIP viene ritornato l’IP relativo e su TTL il Time To Live.
Descrizione
Enable (BOOL) Abilitazione esecuzione. Per rieseguire il comando disabilitare e poi riabilitare questo ingresso.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento del FB (Vedi articolo).
DNSServer (STRING[15]) Stringa di definizione indirizzo IP del server DNS.
Domain (@STRING) Indirizzo stringa definizione URL di cui si desidera risolvere l’IP.
QType (UINT) Tipo di query.
16#0001 A record (host addresses).
16#0002 Name servers (NS) records (Not managed).
16#000F Mail server (MX)
Done (BOOL) Si attiva al termine della esecuzione comando.
Fault (BOOL) Attivo per un loop se errore esecuzione comando.
DomainIP (STRING[15]) Stringa di definizione IP trovato.
TTL (UDINT) Time To Live (S).

Trigger di spy
Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Livelli di Trigger
Trigger | Descrizione |
---|---|
16#00000001 | Tx: Invio richiesta DNS. |
16#00000002 | Rx: Ricezione risposta DNS. |
16#10000000 | Lg: Messaggio di log. |
16#40000000 | Er: Messaggio di errore. |
Esempi
Come utilizzare gli esempi.
Ogni 5 secondi viene eseguita la richiesta di risoluzione dell’URL google.it al server DNS di Google “8.8.8.8”.
LogicLab (Ptp119, ST_DNSRequest)
PROGRAM ST_DNSRequest
VAR
TimeBf : UDINT; (* Time buffer (mS) *)
DNS : DNSRequest; (* DNS request *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_DNSRequest"
// *****************************************************************************
// It's request the IP of the "google.it" at the the Google DNS server.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initializations.
IF (SysFirstLoop) THEN
DNS.SpyOn:=TRUE; //Spy on
DNS.QType:=16#0001; //Query type (A record)
DNS.DNSServer:=ADR('8.8.8.8'); //DNS server IP
DNS.Domain:=ADR('google.it'); //URL to be solved
TimeBf:=SysTimeGetMs(); //Time buffer (mS)
END_IF;
// -------------------------------------------------------------------------
// DNS REQUEST
// -------------------------------------------------------------------------
// Execute the DNS request.
DNS(); //DNS request
IF (DNS.Done) THEN DNS.Enable:=FALSE; END_IF;
// Request delay.
IF ((SysTimeGetMs()-TimeBf) < TO_UDINT(T#5s)) THEN RETURN; END_IF;
TimeBf:=SysTimeGetMs(); //Time buffer (mS)
DNS.Enable:=TRUE; //Enable
// [End of file]