Intanto grazie per la pazienza, anche se non mi spiego come leggere id del master e crc lato slave , per quanto riguarda lo slave quando acquisisce un nuovo dato dal o dai sensori da inserire nell'array questo come lo invia al master
io ti rimando a quanto chiesto nel mio primo post e cioè allo #3
Ok , ma è proprio da questi esempi che non riesco a capire se lo slave aggiornando l'array il master a sua volta come la rilegge se il metodo poll non ha parametri, ho devo creare 2 telegram uno in scrittura e uno in lettura
Ciao Andreaber , grazie al tuo aiuto ho rivisto gli esempi e la guida che mi hai inviato , e alla fine sono riuscito a inviare la risposta al master , ora mi rimane capire come gestire la variabili dei 2 telegram , anche se in un forum consigliavano di usarne una per questioni di memoria
Buongiorno, ho implementato due d1mini collegati in rs485 protocollo modbus usando la libreria di smarmengo, fin qui tutto ok , lo scopo finale è collegare lo slave al raspberry con su installato Ha ma verrà gestito da node red , il punto è che su quest' ultimo non va , quindi ho pensato di fare dei test con un simulatore ma da errori nel msg
Qualcuno ha qualche soluzione su come effettuare dei test
Grazie
che errori ti da?
per cercare di fare un minimo di debug sulla seriale ti consiglio QUESTO ; NON lo colleghi direttamente alla RS485 ma sul TTL; lo imposti per protocollo MODBUS e vedi se la seriale funziona come dovrebbe...se i problemi sono "hardware" (riferimenti sbagliati, echi etc) o "software" (invio sbagliato, tempi non rispettati etc)...
Ciao , errori su lunghezza msg eccezzioni -8 , sto utilizzando un programma cambus, impostando quello che è già su master : fc3, array0 che corrisponde indirizzo 4000 per una lunghezza 3 word , su master funziona su simulatore no
premetto che non mi è chiaro quello che scrivi...soprattutto "sto utilizzando un programma cambus" e "fc3, array0 che corrisponde indirizzo 4000 per una lunghezza 3 word ".
io trovo che:
"(08 hex) Memory Parity Error Specialized use in conjunction with function codes 20 and 21 and reference type 6, to indicate that the extended file area failed to pass a consistency check.
The slave attempted to read extended memory or record file, but detected a parity error in memory. The master can retry the request, but service may be required on the slave device."
...e ti suggerirei di guardare bene come "calcola" la numerazione dei registri la libreria che usi...
PS: cosa significa "con su installato Ha "?
Ok , mi spiego meglio , per verificare l'esattezza del messapi, sto utilizzando un simulatore , Cas Modbus Scanner, configurandolo per chiedere allo slave di passarmi dell'array 16 le prime 4 word , ma il messaggio di errore è invalid lenght, long con poll:01 03 00 00 00 03 05 CB.
Per HA intendo home assistant dove al suo interno ho installato node red che uso per leggere i registri di una pompa di calore con un convertitore usb to rs485
ciao...non conosco questo simulatore...ma penso non sia tanto diverso da altri.
l'emulatore lo usi come Master o come Slave?
con la query 01 03 00 00 00 03 05 CB stai chiedendo il valore di 3 registri a partire da indirizzo 0 ... cioè registro 0, 1 e 2...non 4.
Ciao si l'emulatore lo uso come master , già testato per leggere i registri di una pompa di calore con usci, la lunghezza delle word da leggere è il secondo 3 cioè il terzultimo immagino, anche perché il 2 e i registri da leggere.
Non se sbaglio io uso la com del d1mini per caricare lo schetck w per il simulatore, ma qui mi viene qualche dubbio .......
riesci a postare tutta la "risposta" che il simulatore ti mostra?
come crei la query 01 03 00 00 00 03 05 CB ?
prova a richiedere 3 registri a partire dal registro 1
Io li scrivo address 0 per una lunghezza di 3 word è la function 3 holding register, perché ho impostato lato slave un'array a 16 word , e sulle prime 3 li imposto il valore:
Esempio
Uint16_t A[16]
A[0]=20
A[1]=10
A[2]=30
Imposto dei variabili che su master li invia correttamente
ok...ma tu non sai qual'è la reale stringa che ti ritorna lo slave!?...hai solo il messaggio di errore.
se è così l'analizzatore di seriale che ti ho linkato ti aiuterebbe a capire cosa non funziona
Ciao , si ok , ma se io imposto quell' array con quelle word il ritorno del msg letto da simulatore dovrebbe essere quello, oppure mi viene da pensare che quello che gli inserisco lui la interpreta diversamente
se la tua richiesta è 01 03 00 00 00 03 05 CB e la tua array è come da tuo ultimo messaggio :
Uint16_t A[16]
A[0]=20
A[1]=10
A[2]=30
la risposta che il master deve ricevere è: 01 03 06 00 20 00 10 00 30 CRC CRC ...dove CRC sono i valori di verifica.
dal messaggio di errore sembra ricevere "dati" in più rispetto a questi...ma dato che non vedo la risposta (numeri) non so cosa dire in più.
Non riesco a capire il byte 06 perché scomponendo il msg 01 device- 03 function- 06 ?- a seguire dati e crc ok .In quanto all'errore per la lunghezza su simulatore, devo provare a ridurre l'array con 1 singola word da passare al master
hai letto il documento che ho condiviso?