Rispondo subito alla tua domanda, l’apertura del socket e la sua forzatura in listening può essere fatta una sola volta se poi vengono sequenziate le varie acquisizioni dai moduli STE, allego la stampa e i files sorgenti, di un programma che acquisisce 2 STE, ma può essere esteso al numero desiderato solo aggiungendo chiamate alla FB STESnmpAcq.
Vediamo come funziona la comunicazione con protocollo UDP facendo riferimento al programma indicato. Con la chiamata alla funzione Sysfopen viene aperto un socket UDP, la FB SysSktListen lo pone in ascolto sulla porta 161, tutti i pacchetti UDP da qualsiasi IP che arriveranno su questa porta saranno ricevuti e bufferizzati.
Ad ogni secondo (Se si hanno molti STE consiglio di mettere un timer con tempo maggiore) la prima FB STESnmpAcq invia la richiesta SNMP al modulo con IP 192.168.0.174 sulla porta 161 ed aspetta la risposta. Su ricezione risposta Done o su timeout od errore Fault viene attivata la seconda FB STESnmpAcq che invia la richiesta SNMP al modulo con IP 192.168.0.101 ed aspetta la risposta. E così via per tutte le altre acquisizioni che fossero necessarie.
Anche se si potrebbero eseguire tutte in parallelo le abilitazioni alla FB STESnmpAcq, per evitare di intasare lo stack di ricezione pacchetti UDP consiglio di sequenziarle come fatto nell’esempio.