Elettro_Elettro Inserito: sabato alle 13:11 Segnala Inserito: sabato alle 13:11 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: sabato alle 13:39 Segnala Inserita: sabato alle 13:39 (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: sabato alle 13:42 da drn5
Elettro_Elettro Inserita: sabato alle 14:00 Autore Segnala Inserita: sabato alle 14:00 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: sabato alle 16:21 Segnala Inserita: sabato alle 16:21 (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: sabato alle 16:41 da drn5
pigroplc Inserita: sabato alle 20:00 Segnala Inserita: sabato alle 20:00 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: domenica alle 09:58 Autore Segnala Inserita: domenica alle 09:58 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: domenica alle 10:02 Autore Segnala Inserita: domenica alle 10:02 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: ieri dalle 06:10 Segnala Inserita: ieri dalle 06:10 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: 54 minuti fa Segnala Inserita: 54 minuti fa 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.
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