Libreria per comunicazione tra sistemi su Internet
Home › Forum › Programmazione IEC 61131 (LogicLab) › Libreria per comunicazione tra sistemi su Internet
- Questo topic ha 13 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 4 anni, 5 mesi fa da
Sergio Bertana.
-
AutorePost
-
Febbraio 13, 2016 alle 8:51 am #35941
Sergio Bertana
Amministratore del forumAbbiamo reso disponibile la libreria eLLabDataExchLib (Estratto manuale) che permette lo scambio dati tra sistemi con il protocollo TCP/IP sia su rete locale che tramite Internet. Il blocco funzione TCPDataExchServer in esecuzione su di un sistema agisce da server ed accetta connessioni da uno o più sistemi in cui è in esecuzione il blocco funzione TCPDataExchClient.
E’ evidente che in questo scenario se il sistema che agisce da server è connesso ad Internet tramite una connessione che prevede l’IP pubblico (Anche dinamico), tanti sistemi che agiscono da client, connessi ad Internet tramite reti ad IP privato e/o NATtate possono scambiarsi dati tra loro triangolando sul sistema server.
Ecco quindi che in uno scenario come quello delle public utilities esempio distribuzione acqua o gas dove abbiamo sistemi sparsi geograficamente sul teritorio e connessi ad Internet tramite connessioni ad IP NATtato possono scambiare con il server centrale e tra di loro i dati. E’ anche possibile tramite il server riportare su di un pannello operatore od un sistema SCADA i dati dei vari sistemi client connessi.
Febbraio 13, 2016 alle 9:22 am #39371Sergio Bertana
Amministratore del forumHo realizzato un programma dimostrativo per testare il funzionamento della nuova libreria (La libreria è inclusa nel dimostrativo), il programma si compone di due progetti TCPDEServer (Stampa) da trasferire sul sistema che agisce da server e TCPDEClient (Stampa) da trasferire sul sistema (Uno o più) che agisce da client.Come si vede il programma server accetta fino a due connessioni client, nel programma client è definito un indirizzo IP per il sistema server ma accetta anche un URL come si vede dalla linea commentata. Entrambi i programmi che possono funzionare su di un sistema Compact ethernet sono disponibili per il download (Download TCPDataExchange).
Marzo 19, 2016 alle 9:53 am #39470Sergio Bertana
Amministratore del forumPer chi non ha molta dimestichezza con i programmi testuali ho modificato l’esempio del post precedente realizzandolo utilizzando il linguaggio ladder. Per la valorizzazione della struttura dati TCPDEXCHNODEDEFS di definizione dei parametri dei nodi in comunicazione ho realizzato la funzione DataExchSet (Stampa) che ne permette la valorizzazione da linguaggio ladder.
Il programma dimostrativo per testare il funzionamento della nuova libreria (La libreria è inclusa nel dimostrativo), si compone di due progetti TCPDEServer (Stampa) da trasferire sul sistema che agisce da server e TCPDEClient (Stampa) da trasferire sul sistema (Uno o più) che agisce da client.
Come si vede il programma server accetta fino a due connessioni client, nel programma client è definito un indirizzo IP per il sistema server ma accetta anche un URL. Nell’esempio per comodità è gestito lo scambio di una sola variabile BOOL ma è possibile definire array di variabili.
Il FB BufferModified controlla eventuali variazioni nel buffer dati in trasmissione verso l’altro sistema e quando vi è una variazione comanda immediatamente la trasmissione del buffer, in questo modo si ha l’invio in tempo reale dello stato.
Entrambi i programmi che possono funzionare su di un sistema Compact ethernet sono disponibili per il download (Download TCPDataExchange).
Aprile 16, 2018 alle 8:51 am #40076Sergio Bertana
Amministratore del forumL’argomento è trattato in modo più dettagliato in questa knowledge.
Marzo 16, 2020 alle 8:50 am #53926Alberto
PartecipanteSul sistema che abilita le uscite come si può (se si può) fare per settare delle variabili di appoggio al posto delle uscite tra i due sistemi?
Marzo 16, 2020 alle 8:52 am #53946Sergio Bertana
Amministratore del forumI vari sistemi scambiano un’area di memoria, stà poi al programma che viene fatto a decidere se appoggiare la memoria su I/O fisici o su gestire variabili interne.
Ad esempio si potrebbe comunicare variabili acquisite e/o impostare variabili su altri sistemi connessi in Modbus.
Marzo 27, 2020 alle 11:04 am #54304Alessandro Campodonico
PartecipanteSto testando la libreria con un PLC master e 1 Slave (per ora), perche dovrei realizzare un programma di un macchinario (master) che trasferisce e riceve informazioni da qualche slave, per ora saranno un paio poi aumenteranno a circa 10. Mi servirebbero però alcuni chiarimenti a dei dubbi che mi sono venuti e che non sono riuscito a chiarirmi da solo.
1) Nel manuale allegato all’ultima versione di logiclab nella pagina dedicata a TCPDEXCHNODEDEFS si evidenziano ingressi e uscite che in realtà nel programma dimostratico non sono riuscito a trovare ad esempio AutoTxD, TxHeartbeat, RxHeartbeat. Nonostante abbia provato a eseguirlo.
Inoltre trovo un’incongruenza nella descrizione di RxOk | BOOL | R | Rx data Ok. Settato su ricezione dati dall’altro sistema, i dati sono stati trasferiti in RxBuffer. Deve essere resettato da programa utente.
Poi sotto si legge che
I campi RW devono essere impostati dal programma utente, i campi R non devono essere modificati da programma utente, possono solo essere letti. siccome RxOk fa parte del gruppo “R” non capisco se bisogna resettarlo oppure no, in caso affermativo come?
2) Nel FB TCPDataExchClient cè una variabile ingresso Heartbeat, impostata a 5 (s) da quello che ho capito è un atutomatismo per mandare un pacchetto per controllare la connessione giusto? in ogni caso ho provato a cambiare il valore, se provo a mettere un valore minore di 5 il TCPDEXCHNODEDEFS va in errore, 5 secondi è il tempo minimo?
3) Sempre nel manuale nella pagina riguardante TCPDataExchClient non riporta come variabili Heartbeat come se non ci fosse, ma in realta nel fb è presente.
4) Non mi è chiaro come si potrebbe gestire un controllo sulla comunicazione, l’unica cosa che mi è venuta in mente è controllare la variabile Active di TCPDEXCHNODEDEFS, in true quando connessione stabilita e false quando connessione non riuscita è esatto? ci sono altri metodi?
5) In caso i parametri da passare ai PLC fossero di size diverse (word, doppie word e real) come dovrei gestire il trasferimento dati a txbuffer. dovrei istanziare un altro FB TCPDataExchClient e TCPDEXCHNODEDEFS, ma non avendo un’uscita done non saprei.
Per adesso direi basta vediamo se mi vengono altri dubbi.
Marzo 27, 2020 alle 11:27 am #54349Sergio Bertana
Amministratore del forumQuesta libreria è in evoluzione, ora la documentazione ufficiale la trovi nel manuale sul sito di supporto, vedi questi articoli (TCPDEXCHNODEDEFS, TCPDataExchServer, TCPDataExchClient). Ti consiglio di coipiare ed incollare gli esempi riportati, come vedi utilizzando il localhost puoi testare il funzionamento eseguendo sia il server che il client (1 o più) su di un unico sistema.
Il bit RxOk non và resettato da programma, in realtà si attiva per un loop di programma ad ogni ricezione dei dati.
La variabile Heartbeat ora è definita nella struttura dati di configurazione.
La variabile Active presente nelle struttura dati di configurazione se è attiva indica che la connessione tra ia sistemi è attiva.
Non capisco la domanda sulla trasmissione dai dati, occorre definire un’area da inviare all’altro sistema, poi in quell’area puoi mettere tutti i tipi di dato che vuoi. Nel mio esempio ho usato per semplicità un array, ma nel caso reale conviene utilizzare una struttura dati in modo da poter raggruppare dati disomogenei.
Novembre 2, 2020 alle 3:10 pm #58097Andrea
PartecipanteHo notato che quando parte il sistema non sempre si attiva tempestivamente la TCPserver, a volte devo forzare la mano cambiando stato ad un bit diverse volte, sembra quasi che non vada a leggere il cambio stato del bit nel server client, dopo il primo avvio non visualizzo altri problemi di collegamento.
Ho risolto temporaneamente creando una specie di controllo comunicazione creando un ping pong di bit per controllare l’effettivo funzionamento della libreria per evitare che mi parta un macchinario senza l’altro collegato.
Novembre 2, 2020 alle 3:15 pm #58115Sergio Bertana
Amministratore del forumNon capisco cosa intendi per “non si attiva la TCPServer” hai provato a vedere il comando SysLog da Telnet per vedere che errori segnala ?
Stai utilizzando gli esempi copiati ed incollati dalla nostra Knowledge oppure hai qualcosa di diverso ?
Nel nostro esempio l’istanza del FB TCPDataExchServer è sempre attiva e gestisce 2 connessioni client ed avendo attivato il bit AutoTxD nella struttura dati provvede ad inviare i dati al client in modo automatico.
Novembre 7, 2020 alle 5:24 pm #58173sacost
PartecipanteBuongiorno, sto provando a testare lo scambio di informazioni tra più PLC utilizzando il client e server TCP. Ho seguito passo passo quanto indicato negli articoli TCPDataExchServer e TCPDataExchClient su di un unico SlimLine MPS053B410, ho aggiunto le librerie eLLabDataExchLib ed eLLabXTargetAdjLib ma client e server non si collegano.
Sono entrato in telnet (Utilizzando Toolly) sullo SlimLine ed con il comando netstat vedo che il server è su (in ascolto sulla porta configurata) il client tenta la connessione ma poi non ci riesce:
[Admin]> netstat Id Proto Local Address Foreign Address Status [00] UDP 0.0.0.0:9999 *.* [01] TCP 0.0.0.0:23 0.0.0.0:0 LISTENING [02] TCP 0.0.0.0:21 0.0.0.0:0 LISTENING [03] TCP 0.0.0.0:502 0.0.0.0:0 LISTENING [04] TCP 0.0.0.0:80 0.0.0.0:0 LISTENING [05] TCP 192.168.1.220:23 192.168.1.31:50414 ESTABLISHED [06] TCP 192.168.1.220:502 192.168.1.31:50356 ESTABLISHED [07] TCP 192.168.1.220:53280 127.0.0.1:10000 CONNECTING [08] TCP 0.0.0.0:10000 0.0.0.0:0 LISTENING
Dal syslog ho la conferma:
[E] SFR055 [06/11/2020 12:28:54] 6640, [7] IP:127.0.0.1:10000 [W] SFR055 [06/11/2020 12:28:54] 7720, eTCPClient connect error 15 [W] SFW184 [06/11/2020 12:28:58] 6000, User program error:9941140 [W] SFW184 [06/11/2020 12:29:28] 6000, User program error:9941140 [E] SFR055 [06/11/2020 12:29:33] 6640, [5] IP:127.0.0.1:10000 [W] SFR055 [06/11/2020 12:29:33] 7720, eTCPClient connect error 15 [W] SFW184 [06/11/2020 12:29:59] 6000, User program error:9941140
Ho provato a cambiare porta, tempo di heartbeat e indirizzo ip (mettendo nel client l’indirizzo del PLC: TCPClient.SAddress:=ADR(‘192.168.1.220’); al posto del 127.0.0.1 tra i parametri di configurazione ma ho sempre lo stesso risultato, quello che cambia è il messaggio di errore su syslog:
[W] SFR055 [06/11/2020 12:40:36] 7720, eTCPClient connect error 13 [W] SFW184 [06/11/2020 12:40:36] 6000, User program error:9941140 [W] SFR055 [06/11/2020 12:41:06] 7720, eTCPClient connect error 13 [W] SFW184 [06/11/2020 12:41:06] 6000, User program error:9941140
Qui sembra che la connessione non viene neanche tentata.
Altra cosa curiosa che ho notato che nonostante sia impostata a TRUE SpyOn (sia sul server che sul client) da telnet ho:
[Admin]> spydata Spy data not active
Ho l’impressione di fare un qualche errore macroscopico, ma non riesco proprio a vederlo. Può essere un problema di incompatibilità di qualche libreria?
Novembre 7, 2020 alle 5:37 pm #58177Sergio Bertana
Amministratore del forumStò verificando per scrupolo i due programmi di esempio presi dalla TCPDataExchServer e dalla TCPDataExchClient sono in smartworking e non ho a disposizione un MPS053, quindi lo stò provando su un MPS054 XUnified e non trovo problemi di funzionamento. Mi riservo lunedì di fare una prova su di un MPS053. Questo è il risultato del comando NetStat sul mio sistema.
[Admin]> netstat Id Proto Local Address Foreign Address Status [00] UDP 0.0.0.0:9999 *.* [01] TCP 0.0.0.0:23 0.0.0.0:0 LISTENING [02] TCP 0.0.0.0:502 0.0.0.0:0 LISTENING [03] TCP 0.0.0.0:80 0.0.0.0:0 LISTENING [04] TCP 0.0.0.0:21 0.0.0.0:0 LISTENING [05] TCP 192.168.0.181:502 10.242.2.2:61462 ESTABLISHED [06] TCP 192.168.0.181:23 10.242.2.2:61815 ESTABLISHED [07] TCP 0.0.0.0:10000 0.0.0.0:0 LISTENING [08] TCP 127.0.0.1:52054 127.0.0.1:10000 ESTABLISHED [09] TCP 127.0.0.1:10000 127.0.0.1:52054 ESTABLISHED
Come vedi c’è una connessione attiva tra la porta 52054 del client e la porta 10000 del server ed il server ha ancora una porta 10000 in ascolto, perchè nel programma server si accettano 2 connessioni TCPServer.Connections:=2;.
Nel tuo programma invece sembra proprio ci sia un problema di connessione, ma la stranezza è anche sullo spionaggio che non è attivo. Solo una verifica hai eseguito i due programmi clien e server in task Back. Ricordo che tutte le operazioni di comunicazione su socket vanno eseguite in background.
Novembre 9, 2020 alle 9:45 am #58179sacost
PartecipanteSi certamente entrambi i programmi sono in back.
E’ possibile/consigliabile aggiornare l’MPS053 per le librerie XUnified?
Novembre 9, 2020 alle 9:52 am #58182Sergio Bertana
Amministratore del forumHo svelato l’arcano, sui sistemi ARM7 non viene gestito il localhost “127.0.0.1” ecco perchè non riesci a testare il programma su di un unico sistema, cosa invece che è fattibile sui sistemi basati su CortexM7 come l’MPS54 od il nuovo modulo compact MPS056 che sostituisce l’MPS053.
Per quanto riguarda l’aggiornamento di un sistema basato su ARM7 a XUnified qui trovi le informazioni per eseguire l’upgrade, ho pubblicato la nuova versione del sistema operativo. Conviene fare l’upgrade se ti serve sfruttare le nuove caratteristiche.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.