Elettro_Elettro Inserito: 23 maggio Segnala Inserito: 23 maggio Ciao a tutti, ho necessità di comunicare con uno strumento modbus tcp tramite una cpu s7 1511. Ho problemi a scrivere le richieste usando la funzione Modbus Client. La prima richiesta funziona e riesco a leggere i dati mentre la seconda e la terza non vanno a buon fine e quindi non riesco a scrivere i valori che vorrei allo strumento. Non ho codice di errore ma il bit di done non si attiva mai e lo status passa da 7000 a 7004. In internet non ho trovato esempi o manuali a cui attingere per poter scrivere meglio la mia richiesta in tia portal. Allego come sto facendo le richieste. Avete documenti da condividere per piacere? Grazie mille a chi ha del tempo da dedicarmi.
drn5 Inserita: 23 maggio Segnala Inserita: 23 maggio (modificato) Hai dato un occhio alla documentazione qui ? C'è anche un progetto che ti può essere utile. Se è tutto li il ciclo di lettura/scrittura è un pò scarno. Ti serve il monitoraggio degli esiti e il controllo degli errori delle chiamate, con dei tempi di copertura. Modificato: 23 maggio da drn5
Elettro_Elettro Inserita: 23 maggio Autore Segnala Inserita: 23 maggio 19 minuti fa, drn5 ha scritto: Hai dato un occhio alla documentazione qui ? C'è anche un progetto che ti può essere utile. Se è tutto li il ciclo di lettura/scrittura è un pò scarno. Ti serve il monitoraggio degli esiti e il controllo degli errori delle chiamate, con dei tempi di copertura. grazie mille. Purtroppo il progetto è con tia portal 13 e io ho il 19 quindi non me lo apre. Il file l'ho visto ma non capisco come possa fare al caso mio. Con modbus client leggo e con modbus server scrivo? non credo.. Ciaoo
drn5 Inserita: 23 maggio Segnala Inserita: 23 maggio (modificato) Usi Mb_client se il tuo plc è client, sia per leggere che per scrivere i partner. Nel codice che hai postato dai per scontato che ogni secondo puoi intervistare un partner diverso. Sarebbe giusto farlo sempre che il client in uso abbia terminato il suo job e nel caso attendere un tempo T da definire. La gestione degli errori è un'altra cosa che va implementata. Questo iter dovrebbe essere seguito anche tra la lettura e la scrittura del singolo partner. La tua "macchina a stati" deve insomma procedere con delle verifiche tra stato e stato. Scrivi che il primo partner funziona e i successivi no, ma è sempre vero qualsiasi sia il primo partner oppure funziona solo con quel partner specifico? Hai provato a invertire l'ordine dei partner? Sei certo degli indirizzi dei partner? Se succede con qualsiasi partner è la logica da perfezionare (vedi sopra) se invece funziona sempre con un partner specifico allora è l'impostazione sbagliata dei dati dei partner da controllare. se hai dei dubbi qui puoi trovare delle info in più. Modificato: 23 maggio da drn5
pigroplc Inserita: 23 maggio Segnala Inserita: 23 maggio La prima cosa da fare è provare il funzionamento SENZA la logica che hai postato. assicurati che il REQ sia abilitato da una condizione vincolata solamente da un iput che setti da una tabella di variabili. se l'operazione lavori sul fronte di salita del segnale o lavora sullo stato true del segnale lo devi vedere dall'aiuto in linea. Se non funziona possibile che uno dei parametri MB_MODE - MB_DATA_ADDR - MB_DATA_LEN sia errato oppure che l'indirizzo / porta IP siano sbagliati.
Elettro_Elettro Inserita: 24 maggio Autore Segnala Inserita: 24 maggio 17 ore fa, drn5 ha scritto: Usi Mb_client se il tuo plc è client, sia per leggere che per scrivere i partner. Nel codice che hai postato dai per scontato che ogni secondo puoi intervistare un partner diverso. Sarebbe giusto farlo sempre che il client in uso abbia terminato il suo job e nel caso attendere un tempo T da definire. La gestione degli errori è un'altra cosa che va implementata. Questo iter dovrebbe essere seguito anche tra la lettura e la scrittura del singolo partner. La tua "macchina a stati" deve insomma procedere con delle verifiche tra stato e stato. Scrivi che il primo partner funziona e i successivi no, ma è sempre vero qualsiasi sia il primo partner oppure funziona solo con quel partner specifico? Hai provato a invertire l'ordine dei partner? Sei certo degli indirizzi dei partner? Se succede con qualsiasi partner è la logica da perfezionare (vedi sopra) se invece funziona sempre con un partner specifico allora è l'impostazione sbagliata dei dati dei partner da controllare. se hai dei dubbi qui puoi trovare delle info in più. Ciao, le richieste che faccio sono allo stesso partner. Con la prima richiesta vado a leggere la temperature delle sonde a lui collegate e con la seconda vado a scrivergli il setpoint di temperatura. Il Problema è che leggo solo la temperatura ma non riesco a scrivergli il setpoint. Credo sia propio la mia logica di richieste che sia sbagliata.
Elettro_Elettro Inserita: 24 maggio Autore Segnala Inserita: 24 maggio 13 ore fa, pigroplc ha scritto: La prima cosa da fare è provare il funzionamento SENZA la logica che hai postato. assicurati che il REQ sia abilitato da una condizione vincolata solamente da un iput che setti da una tabella di variabili. se l'operazione lavori sul fronte di salita del segnale o lavora sullo stato true del segnale lo devi vedere dall'aiuto in linea. Se non funziona possibile che uno dei parametri MB_MODE - MB_DATA_ADDR - MB_DATA_LEN sia errato oppure che l'indirizzo / porta IP siano sbagliati. ciao,i parametri son giusti perchè se abilito solo una richiesta la stessa funziona. è propio il campionamento / logica che ho messo che non permette di leggere e scrivere.
pigroplc Inserita: 25 maggio Segnala Inserita: 25 maggio 20 ore fa, Elettro_Elettro ha scritto: ciao,i parametri son giusti perchè se abilito solo una richiesta la stessa funziona. è propio il campionamento / logica che ho messo che non permette di leggere e scrivere. ergo fai una logica a passi. La seconda istanza la fai solamente quando la prima è terminata senza errori. Nel caso di errori (esempio dispositivo spento) prevedi un passo vuoto che dopo un certo tempo es. 15 sec. prevede il reset della catena sequenziale. Eviti così ri mandare richieste che resterebbero inevase.
Ale01 Inserita: 26 maggio Segnala Inserita: 26 maggio Usa solo il primo blocchetto di comunicazione MB_Client e cancella il secondo. Ad ogni richiesta che fai con "Rich_nanodac_X" devi cambiare i dati di "MB_MODE" - "MB_DATA_ADDR" - "MB_DATA_LEN" e poi attivare il "REQ" (Che lavora su fronte di salita). Ad ogni fronte di salita di Done o Error incrementa l'indice "Rich_nanodac_X". Inserisci anche un tempo di Timeout che assieme a "Done" o "Error" ti faccia uscire dalla richiesta di lettura o scrittura incrementando sempre "Rich_nanodac_X". Su fronte di salita di "Error" memorizza il valore "Status" su una DB cosi puoi vedere di che errore si tratta.
Elettro_Elettro Inserita: 1 ora fa Autore Segnala Inserita: 1 ora fa Il 26/05/2026 alle 08:39 , Ale01 ha scritto: Usa solo il primo blocchetto di comunicazione MB_Client e cancella il secondo. Ad ogni richiesta che fai con "Rich_nanodac_X" devi cambiare i dati di "MB_MODE" - "MB_DATA_ADDR" - "MB_DATA_LEN" e poi attivare il "REQ" (Che lavora su fronte di salita). Ad ogni fronte di salita di Done o Error incrementa l'indice "Rich_nanodac_X". Inserisci anche un tempo di Timeout che assieme a "Done" o "Error" ti faccia uscire dalla richiesta di lettura o scrittura incrementando sempre "Rich_nanodac_X". Su fronte di salita di "Error" memorizza il valore "Status" su una DB cosi puoi vedere di che errore si tratta. Grazie mille del consiglio, seguendo le tue indicazioni son riuscito!!! Grazie mille a tutti !!!!!
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora