Vai al contenuto

Programma demo modbus TCP/IP slave

Home Forum Controllori SlimLine e Netsyst (LogicLab) Programma demo modbus TCP/IP slave

  • Questo topic ha 15 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 4 anni fa da Giovanni.
Stai visualizzando 15 post - dal 1 a 15 (di 16 totali)
  • Autore
    Post
  • #35717
    Luciano
    Partecipante

    Avete una semplice demo per slimline mps046a100 che faccia da modbus TCP/IP slave ?

    #38675
    Sergio Bertana
    Amministratore del forum

    Ti ricordo cher il Modbus TCP/IP slave è nativo nei moduli CPU SlimLine, sono gestibili fino a 3 connessioni sulla porta standard 502. Indirizzo di nodo di default è 1. Dalla pagina web di configurazione è possibile modificare questi parametri (Screenshot).

    Se invece l’esigenza è di sviluppare un tuo protocollo di comunicazione TCP/IP puoi dare una occhiata a questo topic. Va da sè che utilizzando il programma postato nel topic, una volta che hai il FILEP del socket TCP/IP puoi inserire nel programma il FB ModbusSlave ed utilizzare il FB in alternativa alla gestione Modbus nativa.

    #38678
    Luis
    Partecipante

    Esiste la posibilità di leggere variabili di altri PLC SlimLine tramite modbus TCP/IP, utilizzando una funzione simile al ModbusSlave.

    #38679
    Sergio Bertana
    Amministratore del forum

    Per leggere variabili da altri PLC devi utilizzare il FB ModbsMaster che è utilizzabile su uno stream di comunicazione in questo topic trovi un esempio di comunicazione in RS485 tra un master e molti slaves. Purtroppo però allo stato attuale del sistema operativo è possibile aprire connessioni TCP/IP solo in modalità server e non è possibile aprire connessioni in modalità client. Quindi non è possibile aprire uno stream di comunicazione TCP/IP da collegare alla FB ModbusMaster.

    Per il dialogo tra diversi sistemi SlimLine in TCP/IP è disponibile il FB UDPDataTxfer (Topic).

    #38680
    Luciano
    Partecipante

    Molto interessante… se invece volessi leggere la memoria (variabili globali mi pare) quale è il comando ?

    #38681
    Sergio Bertana
    Amministratore del forum

    Il modbus slave nativo gestito dal sistema operativo opera sulla memoria della DB 100, pui accedere da Modbus con indirizzi a partire da 40000. Ti consiglio di leggere attentamente il capitolo relativo al protocollo Modbus sul Manuale programmazione IEC61131-3.

    Se invece non utilizzi il modbus slave nativo e vuoi implementare una tua gestione modbus slave puoi realizzare un tuo programma con il FB ModbusSlave. In questo caso il range di indirizzi Modbus e l’area di memoria su cui i comandi operano lo decidi parametrizzando opportunamente il FB.

    Stessa cosa vale per il FB UDPDataTxfer in cui è gestito lo scambio di una area di memoria definita nella parametrizzazione del FB.

    #38684
    Luciano
    Partecipante

    Ho fatto le prove con un simulatore di Modbus TCP/IP e mi va bene con il modbus slave nativo… Mi confermi che posso accedere allo stesso PLC con 3 master contemporaneamente ?

    #38685
    Sergio Bertana
    Amministratore del forum

    Si come puoi vedere da questo topic i sockets disponibili per il protocollo Modbus (Standard sulla porta 502) sono 3. Quindi puoi avere 3 connessioni Modbus TCP/IP contemporanee.

    Ti ricordo che l’ambiente di sviluppo LogicLab si connette in Modbus TCP/IP con il modulo CPU e quindi se vuoi connetterti con LogicLab devi lasciare una delle connessioni libera.

    #38686
    Luciano
    Partecipante

    Benissimo… ho provato anche col del codice php e risponde egregiamente…
    Oltre ad interrogare valori interi è possibile interrogare anche valori a virgola mobile ?

    #38687
    Sergio Bertana
    Amministratore del forum

    Certo tramite il protrocollo Modbus puoi leggere sia numeri a 32 bits DINT e UDINT che numeri REAL. Naturalmente dovrai leggere due registri modbus a 16 bit per ogni numero con il comando Modbus Read Holding Registers (16#03).

    Ti ricordo che siccome il protocollo Modbus non indica l’endianness dei dati a 32 bits dovrai stare attento alla compatibilità con l’endianness del stuo sistema eventualmente eseguendo uno swap MSB/LSB dei due registri a 16 bits letti/scritti con Modbus. Questo topic tratta l’endianness dei sistemi SlimLine.

    In questo topic è trattato il formato IEEE-754 utilizzato per la rappresentazione dei numeri REAL nei sistemi SlimLine.

    #38723
    Luciano
    Partecipante

    Ho uno SlimLine MPS046A100 posso usarlo come unità slave Modbus RTU su COM1 e contemporaneamente come slave Modbus TCP/IP ?

    in poche parole devo appoggiarci delle variabili da una unita master Modbus RTU (trattasi di schedina zbasic che già utilizzo) cosi facendo posso esporre sul web le variabili e interrogarle col Modbus TCP/IP…

    #38724
    Sergio Bertana
    Amministratore del forum

    Certo che è possibile, naturalmente dovrai agire sulle stesse variabili da entrambe le istanze Modbus, in pratica da Mobus RTU la tua schedina scrive/legge le stesse variabili che sono scritte/lette da Modbus TCP/IP.

    Se prendiamo ad esempio la variabile UINT DB 100.16 (Address Modbus 40008) potrai scrivere il valore da Modbus RTU e leggerlo da Modbus TCP/IP e viceversa.

    Se la tua schedina può operare come slave Modbus RTU puoi anche utilizzare l’FB ModbusTCPGateway (Topic) per accedervi da Modbus TCP/IP.

    #38733
    Luciano
    Partecipante

    Ho fatto le prove e funziona, posso aggiungere che in più funziona contemporaneamente anche come slave sulla COM0 con
    parametri di velocita anche diversi (baud rate)…

    Si la mia schedina può funzionare anche da slave e quando avrò un pò di tempo proverò anche la soluzione con il FB ModbusTCPGateway…

    #59716
    Giovanni
    Partecipante

    È possibile in qualche modo accedere da HMI direttamente tramite Modbus TCP/IP agli ingressi e uscite del PLC e dei Moduli (es. %IX255.5, %QX255.3)?

    #59723
    Sergio Bertana
    Amministratore del forum

    Tramite Modbus è possibile accedere solo all’area di memoria mappata in DB100, non è possibile agire direttamente sugli I/O.

    Paer acquisire gli ingressi digitali e per gestire le uscite digitali ti consiglio di mappare in DB100 variabili BOOL di appoggio degli I/O. Poi con un semplice programma in ladder o ST potrai copiare gli ingressi reali sulle varibili BOOL di appoggio e lo stato delle uscite dalle variabili BOOL di appoggio sulle uscite reali.

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