Salve a tutti, sono nuovissimo del forum e anche del mondo di Arduino quindi scusate per le possibili castronerie dette. Veniamo al punto. Devo fare un progetto in Arduino utilizzando il protocollo modbus. Questo progetto consiste nel trasmettere i dati dal computer a un inverter, così che li legga e ritrasmetta "la risposta" al computer. In mezzo a questi due c'è un arduino dove verrà caricato il programma e una porta rs485 collegata all'inverter per trasmettere e ricevere. (inverter in questione : invt GD20)
Bene, ora chiedo dal punto di vista software come fare... perchè non sono esperto ma so che arduino deve fare una "doppia" mansione, ovvero leggere quello che viene trasmesso dal pc e trasmetterlo all'inverter e viceversa leggere la risposta dell'inverter e trasmetterla al pc. Qualunque sia la risposta mi sarete d'aiuto per aumentare le mie scarse conoscenze.
Vi ringrazio e saluti,
Giacomo
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.
Fattto
ciao Paso,
in primis bisognerebbe capire se arduino fa solo da "passa carte"...cioè il PC invia la querry modbus già formata, arduino la invia all'inverter, e poi sempre arduino riceve risposta che inoltrerà al pc....oppure se dal pc arriva un comando diverso che arduino interpreterà ed elaborerà la relativa query...riceverà risposta dall'inveter che dovrà a sua volta essere elaborata per inviare al PC quello che si aspetta.
poi...tra arduino ed inverter sei in RS485...tra arduino e PC come ti colleghi?
L'intento era che: Il pc inviasse una stringa di interi rispettando il protocollo modbus (indirizzo slave, funzione, dati, crc) e che arduino facesse solo da tramite.
Effettivamente i collegamenti sono un po' un casino ma in teoria pensavo un USB, solo che da rs485 a Arduino non c'è un attacco
Se Arduino deve fare solo tra passacarte la soluzione più semplice credo sia che il PC invii ad Arduino via seriale la stringa da trasmettere il quale con un adattatore RS485 e utilizzando la seriale software la manda all'inverter.
Seguendo questo schema quando l'inverter risponde sulla RS485 Arduino lo riceve (sempre tramite l'adattataore collegato ad arduino e la SoftwareSerial) il quale lo manda al pc via seriale
... visto che serve solo una seriale in più, mi permetto solo di suggerire la molto più efficiente AltSoftSerial al posto della SoftwareSerial
Guglielmo
Esatto Fab,
questa era l'idea. Esistono programmi già fatti secondo voi dove poter prendere spunto?
Io avevo trovato quelli in allegato, se ti va di darci un'occhiata
prova2.ino (1.57 KB)
examples.zip (12.4 KB)
gpb01:
... visto che serve solo una seriale in più, mi permetto solo di suggerire la molto più efficiente AltSoftSerial al posto della SoftwareSerialGuglielmo
Va bene grazie Guglielmo, però leggo che la AltSoftSerial è full duplex, cosa che a me non serve, dato che nel mio caso anche half duplex va bene. Correggimi se sbaglio
Da come descrivi il tuo progetto a te non serve assolutamente quel genere di programmi, quelli che hai trovato si occupano di comporre e trasmettere un messaggio con protocollo MODBUS usando una libreria scritta a tal scopo.
Tu su Arduino non devi comporre niente, non devi neanche conoscere come funziona il protocollo, ciò che ricevi dalla seriale hardware (collegata al PC) lo invii sulla seriale software (collegata al bus 485) e viceversa, nessuna libreria e nessun protocollo visto che Arduino viene usato come bridge tra il PC e il BUS 485.
E' sul PC che comporrai il messaggio da inviare e decodificherai quelli ricevuti.
fabpolli:
Da come descrivi il tuo progetto a te non serve assolutamente quel genere di programmi, quelli che hai trovato si occupano di comporre e trasmettere un messaggio con protocollo MODBUS usando una libreria scritta a tal scopo.
Tu su Arduino non devi comporre niente, non devi neanche conoscere come funziona il protocollo, ciò che ricevi dalla seriale hardware (collegata al PC) lo invii sulla seriale software (collegata al bus 485) e viceversa, nessuna libreria e nessun protocollo visto che Arduino viene usato come bridge tra il PC e il BUS 485.
E' sul PC che comporrai il messaggio da inviare e decodificherai quelli ricevuti.
Okay, però devo scrivere un software per comporre il messaggio da inviare e decodificare quello ricevuto, e avevo pensato di farlo con arduino. Sbaglio? Altrimenti non saprei con quale linguaggio o software già fatto agire
Allora devi cambiare l'analisi del tuo progetto, ovvero su pc un programma che scrivi tu invia via seriale ad arduino una serie di messaggi che deciderai (potrebbe anche essere uno solo) in base a questi Arduino comporrà il corretto messaggio MODBUS da inviare sul bus 485.
All'arrivo del messaggio di risposta Arduino lo decodifica e in base a ciò che riceve invia un messaggio che decidi tu al PC sul quale gira il tuo programma che farà ciò che vuoi in base al tipo di messaggio ricevuto.
In questo modo Arduino non è più un bridge trasparente ma di fatto si comporta come convertitore di messaggi tra due protocolli differenti, uno il MODBUS e l'altro quello che ti inventerai tu.
Visto che sei agli inizi e, secondo quanto indicato in presentazione, devi imparare le basi prima di lanciarti nell'acquisto dell'adattatore RS485 ti consiglio di partire da quello che hai e fare la parte di comunicazione da/verso il PC in questo modo apprenderai nozioni sul linguaggio senza spendere altri soldi, quando quella parte (Software PC che invia e riceve dati da Arduino) è pronta e funzionante (certo su Arduino dovrai simulare le varie risposte ma è cosa normale in debug) allora potrai pensare di integrare anche la seconda parte, ovvero invio e ricezione dei messaggi sul MODBUS
Paso_00:
Va bene grazie Guglielmo, però leggo che la AltSoftSerial è full duplex, cosa che a me non serve, dato che nel mio caso anche half duplex va bene. Correggimi se sbaglio
Sbagli, Arduino (e le varie librerie) è comunque full-duplex, che poi tu usi la cosa in modo half-duplex non ha alcuna importanza ... anche perché tanto NON ci sono né pin di handshaking, né protocolli già scritti che lo implementino via software ... devi fare tutto TU o, per alcuni tipi di comunicazione, senza reinventare l'acqua calda, dove ci sono, usare le librerie ch si trovano.
Guglielmo
Grazie a tutti, in futuro se avrò bisogno vi riscriverò
mi permetto...se arduino deve fare solo da "passacarte"...al di là del piacere di scrivere due righe di codice...forse conviene un convertitore USB-RS485...ne trovi da pochi euro in su.
io avevo preso QUESTO...per il costo che ha...mi ha dato (e mi da) tante soddisfazioni.
ORSO2001:
mi permetto...se arduino deve fare solo da "passacarte"...
... sembra di no ... messaggio del OP #10 e successiva risposta di fabpolli la post #11 ... :
Guglielmo