Vai al contenuto

Comunicazione Modbus con Modicon M241

Home Forum Programmazione IEC 61131 (LogicLab) Comunicazione Modbus con Modicon M241

Stai visualizzando 7 post - dal 1 a 7 (di 7 totali)
  • Autore
    Post
  • #83717
    Emilio Pantanali
    Partecipante

    Buongiorno, vorrei sapere se c’è un modo per far comunicare un PLC SlimLine MPS056xxxx Elsist su rete LAN in Modbus TCP con un PLC Modicon M241 della Schneider.

    #83721
    Sergio Bertana
    Amministratore del forum

    Dalla documentazione trovata in rete vedo che è possibile configurare M241 Logic Controller sia come come un dispositivo slave che master TCP Modbus, dipende da te come vuoi operare.

    M241 come dispositivo slave, sullo SlimLine dovrai istanziare il FB ModbusMaster, da documentazione Schneider vedo che puoi usare i comandi Modbus:

    • 16#03 per leggere gli oggetti %IW e %QW del M241
    • 16#06 per scrivere l’oggetto %IW del M241
    • 16#10 per scrivere l’oggetto %IW del M241

    M241 come dispositivo master, SlimLine ha acccessibile da Modbus TCP (Porta 502) tutta l’area DB100, indirizzabile con i comandi 16#01, 16#03, 16#06, 16#10 ed indirizzi a partire da 40000. In alternativa è possibile istanziare il FB ModbusSlave e configurare l’indirizzo e la dimensione dell’area indirizzabile.

    #83727
    Concetto
    Partecipante

    A parte quanto già detto per la parte Slimline, sul PLC M241 dovrà essere aggiunto un nuovo dispositivo Modbus TCP Slave all’interno del Dispositivo Ethernet esistente.

    La documentazione, anche se non particolarmente chiara, spiega come fare.

     

    #83892
    Emilio Pantanali
    Partecipante

    L’m241 fa da master, ad esso son connessi altri slave (inverter ed altri m241), sull’elsist c’è questo programma:

    PROGRAM Server
    VAR
        j : USINT; (* Auxiliary variable *)
        FirstLoop_t : BOOL := TRUE; (* First execution loop *)
        Fp : eFILEP; (* File pointer array *)
        TCPServer : SysTCPServer; (* TCPServer management *)
        SMdb : ModbusSlave_v5;
    END_VAR
    
        IF (FirstLoop_t) THEN
            FirstLoop_t:=FALSE; //First execution loop
            TCPServer.FilesArr:=ADR(Fp); //Files array
            TCPServer.LocalAdd:=ADR('0.0.0.0'); //Local address
            TCPServer.LocalPort:=502; //Local port
            TCPServer.MaxConn:=2; //Accepted connections
            TCPServer.FlushTm:=50; //Flush time (mS)
            TCPServer.LifeTm:=0; //Life time (S)
            TCPServer.RxSize:=128; //Rx buffer size
            TCPServer.TxSize:=128; //Tx buffer size
    
            SMdb.Absolute:=FALSE; //Absolute addressing
            SMdb.Node:=1; //Device modbus node
            SMdb.Offset:=40000; //Modbus address offset
            SMdb.Buffer:=eToPVoid(ADR(%MX100.0)); //Modbus buffer address
            SMdb.Size:=4096; //Modbus buffer size
            SMdb.Timeout:=T#1s; //Timeout
            SMdb.SpyOn:=TRUE;
        END_IF;
        
        // Manage the TCP server.
        
        TCPServer(Enable:=TRUE); //TCPServer management
        SMdb.File:=Fp; //File pointer
        SMdb.Type:=MODBUS_PROTOCOL#MDB_TCP; //Modbus type (TCP)
        SMdb(Enable:=SysFIsOpen(SMdb.File)); //Modbus slave
    
    // [End of file]

    Ma mi da errore (fault) nella parte TCP.

    #83896
    Sergio Bertana
    Amministratore del forum

    Il sistema operativo dello SlimLine gestisce già di default un Modbus slave sulla porta 502 a cui è possibile connettere fino a 3 dispositivi master. Quindi non puoi istanziare un tuo Modbus slave sulla stessa porta 502, ecco perchè ti dà errore.

    Ma poi lo slave Modbus di default già espone la memoria in DB100 con indirizzo Modbus a partire da 40000, quindi quello che stai facendo è completamente inutile. Elimina il programma e tutto funzionerà.

    Il FB ModbusSlave è utile nel caso si desideri istanziare un proprio slave Modbus su un’area di memoria diversa dall DB100 e magari che sia accessibile con indirizzo Modbus diverso dal 40000 predefinito nel Modbus slave gestito dal sistema operativo.

    Nel caso si desideri utilizzare il FB ModbusSlave sulla porta 502, occorre cambiare la porta definita per il Modbus del sistema operativo liberandola. Ricordo che comunque la programmazione del sistema da LogicLab può avvenire solo accedendo al Modbus salve gestito dal sistema operativo.

    #83899
    Emilio Pantanali
    Partecipante

    quindi elimino anche questa parte?

        FirstLoop_t:=FALSE; //First execution loop
        TCPServer.FilesArr:=ADR(Fp); //Files array
        TCPServer.LocalAdd:=ADR('0.0.0.0'); //Local address
        TCPServer.LocalPort:=502; //Local port
        TCPServer.MaxConn:=2; //Accepted connections
        TCPServer.FlushTm:=50; //Flush time (mS)
        TCPServer.LifeTm:=0; //Life time (S)
        TCPServer.RxSize:=128; //Rx buffer size
        TCPServer.TxSize:=128; //Tx buffer size
    

    ed il valore del nodo modbus rimane sempre 1?

    #83902
    Sergio Bertana
    Amministratore del forum

    Devi proprio eliminare tutto il file non serve avere quel file.

    Il Modbus è gestito già dal sistema operativo senza aggiungere programmi.

    Per testarlo puoi utilizzare l’utility ModbusMaster di Toolly.

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