• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
su uart modbus

Modbus su UART
#1
Ciao a tutti,
sono nuovo del forum e vorrei fare i complimenti a tutti.
Ho un problema che mi attanaglia da qualche giorno Dodgy  Dodgy  Dodgy .

Devo connettere il mio raspberry pi 2 B in ModBus con una scheda driver per motori brushless custom, che appunto parla in ModBus.

Sto usando la libreria libmodbus in c.

Il problema è che vorrei trasformare la UART del raspberry (Pin 8 e 10) in una RS-485 e non utilizzare un convertitore USB<->RS-485.
Io pensavo di mettere un max485 per convertire la UART in RS-485 ma come faccio a pilotare anche altri due GPIO per abilitare o meno il driver e la ricezione del chip max485 in maniera sincrona con la trama del messaggio Huh  Huh  Huh ????

Devo modificare la libmodbus  Huh  Huh  Huh ?????

Qualcuno a qualche idea?

Grazie Mille
 
Risposta
#2
Questo ti può essere utile?
 
Risposta
#3
Grazie Mille!!!!!
E' proprio quello che volevo  Big Grin  Big Grin  Big Grin  
Come ho fatto a non trovarlo prima..... Blush  Blush  Blush
 
Risposta
#4
Altra soluzione potrebbe essere l'utilizzo di WiringPi che ti consentirebbe di gestire le porte e la seriale in C. Questo potrebbe semplificare le cose dato che utilizzi una libreria in C (che non conosco). Quando ho utizzato il protocollo Modbus non mi sono servito di librerie ma mi sono scritto le funzioni ad hoc, quindi la gestione della commutazione Tx/Rx (sia sul master che sugli slaves) è stata semplice: prima della trasmissione davo l'enable (tramite un pin del raspy) Tx sul tranceiver (un SN.....) per poi riportarlo in Rx. In linea di massima la comunicazione RS485 è asincrona: il master interroga lo slave (ciascuno ha un proprio indirizzo univoco) e passa in ricezione aspettando la risposta (obbligata) di quest'ultimo. In ricezione è lo stesso contenuto del messaggio (nella distribuzione e significato dei byte) che determina la trama e quindi il contenuto "utile" del messaggio.
 
Risposta
#5
Ciao Ippogrifo,
avevo pensato anche io di fare così ma poi ho trovato la libreria libmodbus con la gestione degli errori e delle eccezioni già fatta, già tutta debuggata e quindi mi sono buttato su questa linea ma ora non so unire la libreria WiringPi, per dare l'enable alla trasmissione, alla libreria libmodbus (avrei già visto dove inserire la gestione del PIN... ma non so come fare ...) Angry Angry Angry
Dato che questa mi sembra una strada ceca sono passato al python con il modulo serial.
il problema è che quando vado a configurare la seriale in modalità 485

socket = serial.rs485.RS485(port='/dev/ttyAMA0', baudrate=115200, bytesize=8, parity='N', stopbits=1, rtscts=True, dsrdtr=False, timeout=pTimeout, xonxoff=0 )

socket.rs485_mode = serial.rs485.RS485Settings(rts_level_for_tx=True, rts_level_for_rx=False, loopback=False, delay_before_tx=None, delay_before_rx=None)

mi dice che l'oggetto non ha l'attributo rs485 Huh Huh Huh Huh

ho installato l'ultima libreria pyserial 3.1.1 ma continua a darmi questo errore...

avete idee???

Grazie
 
Risposta
#6
Non conoscendo python non ho idea del perchè dell'errore. Vedo però che viene adoperata la "ttyAMA0" che sino al raspy3 era ad uso esclusivo del terminale; per poter quindi utilizzare l'UART era (ed è) necessario disabilitare preventivamente questa associazione. Per quanto riguarda l'uso congiunto di wiringpi e la libreria Libmodbus penso (non ho al momento modo di verificare) che l'utilizzo dei vari "include" nel corpo del programma e in fase di compilazione inserire i vari "parametri" avrebbe risolto il problema. Riporto quanto previsto per l'utilizzo della libreria sul raspy: "To compile code, use, gcc -o filename filename.c pkg-config –libs –cflags lidmodbus".
 
Risposta
  


Vai al forum:


Navigazione:
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect