Comunicazione Modbus con Modicon M241
Home › Forum › Programmazione IEC 61131 (LogicLab) › Comunicazione Modbus con Modicon M241
Taggato: schneider ethernet modbus tcp
- Questo topic ha 6 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 1 settimana fa da
Sergio Bertana.
-
AutorePost
-
Agosto 18, 2025 alle 3:31 pm #83717
Emilio Pantanali
PartecipanteBuongiorno, 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.
Agosto 18, 2025 alle 4:05 pm #83721Sergio Bertana
Amministratore del forumDalla 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.
Agosto 18, 2025 alle 5:49 pm #83727Concetto
PartecipanteA 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.
Agosto 28, 2025 alle 6:41 pm #83892Emilio Pantanali
PartecipanteL’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.
Settembre 1, 2025 alle 8:12 am #83896Sergio Bertana
Amministratore del forumIl 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.
Settembre 1, 2025 alle 3:23 pm #83899Emilio Pantanali
Partecipantequindi 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?
Settembre 1, 2025 alle 5:08 pm #83902Sergio Bertana
Amministratore del forumDevi 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.