Il Simple Network Management Protocol (SNMP) è un protocollo di rete senza connessione che utilizzando connessioni UDP sulle porte 161 e 162, consente di semplificare la configurazione, gestione e supervisione (monitoring) di apparati collegati in una rete. Questo blocco funzione esegue la gestione del protocollo SNMP agendo come Manager.
In Community occorre definire l'indirizzo della stringa di definizione della comunità accettata dall'Agent. Attivando Enable viene inviato all'Agent con indirizzo Address sulla porta Port il messaggio SNMP di tipo PDUType con OID definito. Eseguito l'invio e ricevuta la risposta dall'Agent viene attivata l'uscita Done. Per inviare un nuovo pacchetto occorre disabilitare e poi riabilitare il FB.
Se il messaggio è di lettura, al termine, nella variabile indicata sarà trasferito il valore della variabile acquisita dall'Agent. Se il messaggio è di scrittura, al termine il valore della variabile definita sarà stato trasferito nell'Agent.
Function block
CODESYS: Non disponibile
LogicLab: eLLabSNMPLib
Enable (BOOL) Comando invio richiesta SNMP.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.
Address (@STRING) Indirizzo IP o URL dell'Agent a cui inviare la query SNMP.
Port (UINT) Porta UDP a cui inviare la query. Solitamente si utilizza la porta 161.
Community (@STRING) Indirizzo allocazione stringa definizione Community.
PDUType (SNMP_PDU) Tipo di query SNMP da inviare.
OID (@STRING) Indirizzo stringa definizione Object Identifier.
VType (SNMP_VT) Tipo variabile ricevuta/da inviare (Vedi tabella sotto).
VAddress (@BYTE) Indirizzo allocazione variabile ricevuta/da inviare.
VLength (UDINT) Lunghezza variabile ricevuta/da inviare.
Delay (REAL) Tempo pausa di ritardo invio richiesta SNMP (S).
Timeout (REAL) Timeout esecuzione query SNMP (S).
Done (BOOL) Esecuzione comando terminata.
Ok (BOOL) Attiva per un loop di programma se comando eseguito correttamente.
Fault (BOOL) Attivo per un loop di programma se errore esecuzione.
ECode (USINT) Riporta l'eventuale codice di errore ricevuto dall'Agent.
EIndex (USINT) Riporta l'eventuale indice di errore ricevuto dall'Agent.
Trigger di spy
Se SpyOn attivo è possibile utilizzare utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Errori
In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.
Esempi
ST_SNMPManager: Vengono eseguite due richieste SNMP verso un Agent su localhost (127.0.0.1), è possibile testarne il funzionamento eseguendolo su di un sistema dove è in esecuzione il programma dimostrativo del FB SNMPAgent. Viene eseguita ciclicamente una richiesta SNMP_PDU#GETRQ di un variabile SNMP_VT#INTEGER dall'agent ed il valore letto viene trasferito in Value. Value viene poi incrementato e tramite una richiesta SNMP_PDU#SETRQ inviato all'agent. In questo modo visualizzando il valore della variabile si vedrà il suo incremento nel tempo
ST_SNMPSTEDataRead: Vengono eseguite due richieste SNMP verso un dispositivo STE acquisendo il valore di temperatura e di umidità.
Per eseguire gli esempi occorre importare la libreria eLLabSNMPLib nel progetto (Articolo).
PROGRAM ST_SNMPManager
VAR
IDx : USINT; (* Index *)
Value : DINT; (* Variable value *)
SNMPMng : SNMPManager; (* SNMP manager *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_SNMPManager"
// *****************************************************************************
// A simple SNMP manager that makes SNMP queries.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// Program initialization.
IF (SysFirstLoop) THEN
SNMPMng.Port:=161; //Peer port
SNMPMng.SpyOn:=TRUE; //Spy command
SNMPMng.Community:=ADR('public'); //Community
SNMPMng.Delay:=2.0; //Execution delay (S)
SNMPMng.Timeout:=1.0; //Execution timeout (S)
END_IF;
// -------------------------------------------------------------------------
// SNMP MANAGER
// -------------------------------------------------------------------------
// Check if the answer from Agent has been received and manage it.
IF (SysFirstLoop OR SNMPMng.Done) THEN
CASE (IDx) OF
// -----------------------------------------------------------------
// This query reads the variable value from the agent.
0:
IDx:=IDx+1; //Index
SNMPMng.PDUType:=SNMP_PDU#GETRQ; //PDU type
SNMPMng.VType:=SNMP_VT#INTEGER; //Variable type
SNMPMng.VLength:=SIZEOF(Value); //Variable length
SNMPMng.VAddress:=ADR(Value); //Variable address
SNMPMng.Address:=ADR('127.0.0.1'); //Agent address
SNMPMng.OID:=ADR('1.3.6.1.4.1.36955.1'); //OID
// -----------------------------------------------------------------
// This query writes the variable value to the agent.
1:
IDx:=0; //Index
Value:=Value+1; //Variable value
SNMPMng.PDUType:=SNMP_PDU#SETRQ; //PDU type
SNMPMng.VType:=SNMP_VT#INTEGER; //Variable type
SNMPMng.VLength:=SIZEOF(Value); //Variable length
SNMPMng.VAddress:=ADR(Value); //Variable address
SNMPMng.Address:=ADR('127.0.0.1'); //Agent address
SNMPMng.OID:=ADR('1.3.6.1.4.1.36955.1'); //OID
END_CASE;
END_IF;
// -------------------------------------------------------------------------
// SNMP MANAGER
// -------------------------------------------------------------------------
// SNMP manager.
SNMPMng(); //SNMP manager
SNMPMng.Enable:=NOT(SNMPMng.Done);
// [End of file]
Ultimo aggiornamento: 11 Gennaio 2021