|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
[C++] Creare una classe per inviare comandi su un cavo seriale ad una pinza
Ragazzi,
mi appello alla vostra disponibilità per chiedervi questa cosa: Devo creare una classe per la gestione di una pinza elettrica della Schunk connessa via seriale al PC, in C++. Devo fare tutto da zero, e sinceramente non so proprio come partire...perchè il docente mi ha detto di cercare in rete la libreria da includere per le comunicazioni seriali (ovviamente da usare come output)... Qualcuno sa consigliarmi quale libreria usare? Mi postate un link da dove scaricarla? Considerate che devo usare un pc con Ubuntu e NetBeans IDE come ambiente per scrivere la classe ed il relativo programma che la usi...ed è un ambiente che non conosco affatto...visto che per gli esami, abbiamo usato il DevCpp e vi lascio immaginare quanto sia pessimo per fare una cosa del genere... Qualcuno sa come aiutarmi?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
|
Se il sistema operativo è Linux te la cavi senza nessuna libreria esterna: la seriale è solo un file (tipicamente "/dev/ttyS0") speciale. Quello che ci scrivi viene sparato sulla seriale fisica, quello che arriva sulla seriale fisica lo puoi leggere sempre dal file.
La cosa si complica un pelo se devi settare i parametri della seriale (parità, velocità ecc). ciao! |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
Quote:
Il sistema da cui verrà lanciato è Linux con Patch RealTime perchè il robot a cui questa pinza è collegata ha bisogno di istruzioni ogni 2millisecondi... come posso fare? Per questo mi hanno detto che serve la libreria...
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
A seconda delle patch probabilmente cambia la fase di configurazione (o nel caso migliore, i parametri). Anche per le letture e scritture potrebbe essere cosi' (con qualche eccezione).
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
Quote:
mamma mia...cominciano a venirmi le crisi!
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
In ogni caso a meno che non abbiate un simulatore o un qualcosa di analogo farai una fatica enorme a lavorare da casa secondo me (a parte forse la fase iniziale).
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
Quote:
Per il momento io devo solo creare la classe C++ che mi permetta di inviare comandi su una porta seriale e leggere la risposta di ritorno dalla seriale. Il realtime per il momento non interessa. In laboratorio non mi dicono granchè su come si fa, perchè ovviamente non vogliono visto che devo farlo io.... Allora io vi chiedo a voi delle delucidazioni: - Mi hanno detto che devo usare una libreria di comunicazione seriale, da includere nella classe. Quale uso (ovviamente su sistema linux ubunthu)? Quale mi consigliate? - Devo creare una classe che abbia due funzioni, una di comunicazione con la pinza e l'altra che gestisca gli errori. Però devo creare dei metodi più semplici (nei vari casi di parametri da inviare) che vengono poi richiamati dalla funzione di comunicazioni...praticamente quello che devo mandare alla pinza sono istruzioni in un buffer che deve essere così composto: D-Len [0x05] Cmd [0xB0] Param [0x00 0x00 0x20 0x41] (questo è un esempio di parametro) Allora, D-Len sta per Data Lenght è può trasferire massimo 255 bytes Cmd è il tipo di comando Param sono i parametri da dare. Che tipo di dato devo usare per fare un buffer di questo tipo? Come si fa un buffer?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. Ultima modifica di DomusP45 : 14-02-2012 alle 11:23. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
EDIT: Allora ecco la situazione.
Per il momento io devo solo creare la classe C++ che mi permetta di inviare comandi su una porta seriale e leggere la risposta di ritorno dalla seriale. Il realtime per il momento non interessa. In laboratorio non mi dicono granchè su come si fa, perchè ovviamente non vogliono visto che devo farlo io.... Allora io vi chiedo a voi delle delucidazioni: - Mi hanno detto che devo usare una libreria di comunicazione seriale, da includere nella classe. Quale uso (ovviamente su sistema linux ubunthu)? Quale mi consigliate? - Devo creare una classe che abbia due funzioni, una di comunicazione con la pinza e l'altra che gestisca gli errori. Però devo creare dei metodi più semplici (nei vari casi di parametri da inviare) che vengono poi richiamati dalla funzione di comunicazioni...praticamente quello che devo mandare alla pinza sono istruzioni in un buffer che deve essere così composto: D-Len [0x05] Cmd [0xB0] Param [0x00 0x00 0x20 0x41] (questo è un esempio di parametro) Allora, D-Len sta per Data Lenght è può trasferire massimo 255 bytes Cmd è il tipo di comando Param sono i parametri da dare. Che tipo di dato devo usare per fare un buffer di questo tipo? Come si fa un buffer?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
#9 | |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21985
|
Quote:
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 Ultima modifica di !fazz : 14-02-2012 alle 11:31. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
Quote:
Se avete qualche altra da consigliarmi... Per il fatto del buffer invece, come faccio? String? Devo creare un vettore o no?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
|
#11 | ||
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Quote:
In quest'ultimo caso la soluzione migliore e' scriverti una serie di classi differenti, ad esempio una che wrappi le chiamate per la seriale sotto linux, a cui poi aggiungerai con calma una (con medesima interfaccia) che wrappa le chiamate per linux realtime (le chiamate sono fondamentalmente le stesse, ma cambia potenzialmente l'inizializzazione) e una per quelle windows. In questo caso scrivere sulla seriale vuol dire usare le chiamate della libreria standard per aprire il device (come un file) e per scriverci i dati (come su un file). Niente librerie esterne. In alternativa puoi usare una libreria come boost-asio, pero' non so quanto facile sia poi usarla per l'ambiente real-time.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
||
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
Quote:
Il sistema su cui girerà questa benedetta classe sarà il computer linux collegato al robot che avrà questa pinza connessa. La pinza va gestita con pc con linux via porta seriale e non realtime a quanto ho capito, mentre il robot viene gestito con un altro pc per fatti suoi (che è ovviamente realtime). Devo scrivere una classe usando come ide NetBeans, che abbia i metodi per le varie funzioni della pinza, e due macro funzioni: una per la gestione della comunicazione e l'altra per gestione degli errori di ritorno dalla pinza. Il docente ha chiesto esplicitamente che sia fatta usando una libreria di comunicazione seriale, NON MI CHIEDETE PERCHE'....fatto sta che devo farla così. Ha detto che sulla rete ci stanno caterbe di librerie (ed è vero) e che io ho libertà su quale usare. Fatto sta che sono cose che non ho mai fatto prima...nel senso che pure in quanto a classi, negli esami di programmazione abbiamo fatto cose semplici (CLASS PERSONA--SOTTOCLASSE STUDENTE, LAVORATORE) che ovviamente fanno ridere a confronto con questa. Sono anni che non mi dedico alla programmazione perchè ho avuto tutti gli altri esami da fare, e quindi ora mi trovo spaesato. Ho capito cosa vuole...ma non so come farlo. NOn l'ho mai fatto. Insomma, so che sotto linux la porta seriale è vista come un file e ci si può scrivere direttamente...ma il docente vuole che utilizzi una libreria per comunicare sulla seriale e usi le funzioni della libreria per comunicare. Quindi, visto che non l'ho mai usate, qualcuno sa dirmi qualcosa in merito? Conosce qualche libreria da consigliarmi? Come posso poi strutturare un buffer per le istruzioni da inviare, che siano in quel formato che vi ho scritto? Scusatemi per la confusione, ma sono nella fase iniziale di "roadmap" per capire insomma cosa devo fare e come...
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
faccio un up anche per chiedere che simulatore usare per leggere un output della porta seriale dal programma che farò...
dicono che esistono simulatori di porte seriali....se me sapete consigliare uno ne sarei molto felice!
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
|
#14 |
|
Moderatore
Iscritto dal: Nov 2006
Messaggi: 21985
|
io uso free serial port monitor
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX) Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000 |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
|
puoi postarmi un link da dove si scarica? è per linux, vero?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:17.




















