Vai al contenuto

Libreria per comunicazione tra sistemi su Internet

Home Forum Programmazione IEC 61131 (LogicLab) Libreria per comunicazione tra sistemi su Internet

Stai visualizzando 14 post - dal 1 a 14 (di 14 totali)
  • Autore
    Post
  • #35941
    Sergio Bertana
    Amministratore del forum

    Abbiamo 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.

    #39371
    Sergio Bertana
    Amministratore del forum

    Ho 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).

    #39470
    Sergio Bertana
    Amministratore del forum

    Per 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).

    #40076
    Sergio Bertana
    Amministratore del forum

    L’argomento è trattato in modo più dettagliato in questa knowledge.

    #53926
    Alberto
    Partecipante

    Sul  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?

     

    #53946
    Sergio Bertana
    Amministratore del forum

    I 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.

    #54304

    Sto 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.

    #54349
    Sergio Bertana
    Amministratore del forum

    Questa 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.

    #58097
    Andrea
    Partecipante

    Ho 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.

     

    #58115
    Sergio Bertana
    Amministratore del forum

    Non 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.

    #58173
    sacost
    Partecipante

    Buongiorno, 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?

    #58177
    Sergio Bertana
    Amministratore del forum

    Stò 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.

    #58179
    sacost
    Partecipante

    Si certamente entrambi i programmi sono in back.

    E’ possibile/consigliabile aggiornare l’MPS053 per le librerie XUnified?

    #58182
    Sergio Bertana
    Amministratore del forum

    Ho 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.

Stai visualizzando 14 post - dal 1 a 14 (di 14 totali)
  • Devi essere connesso per rispondere a questo topic.