Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale

Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale (http://forum.roboitalia.com/index.php)
-   P. in Visual Basic (http://forum.roboitalia.com/forumdisplay.php?f=29)
-   -   problemino con la rs232 (http://forum.roboitalia.com/showthread.php?t=6284)

luigi91 15-03-2010 22.37.31

problemino con la rs232
 
salve a tutti... avrei un problema riguardante la programmazione in VB; allora:
sto creando un CNC con dei microcontrollori, circuito elettronico ( logico e di potenza ) già testati e funzionanti, adesso ,amca solo un programma in visual basic che mi invia i dati al CNC, questi dati devono essere immessi su delle text box e poi trasferite in seriale ad un microcontrollore, quest'ultimo aspetta inizialmente un comando di inizializzazione, poi invia una richiesta di trasmissione, aspetta che gli sia inviata la posizione da raggiungere, una volta raggiunta quella posizione reinvia una richiesta di trasmissione al PC, che invierà la nuova posizione da raggiungere, qualcuno saprebbe darmi qualche dritta?!... meglio se mi butto sulle USB e poi metto un USB-> RS232 ... avevo in mente di utilizare VB6, meglio qualche altra versione?!...

procedure particolari?!... quali librerie dovrò studiare?!....

qualcuno potrebbe postarmi qualche tutorial da seguire?!.... grazie mille a tutti...

sergio_camici 15-03-2010 23.01.24

VB6?
Perchè vuoi usare un prodotto morto, che ti darà solo problemi?
Prendi in considerazione C#.

gyppe 16-03-2010 05.24.10

Tempo fa cominciai anche io un progetto simile, con il software sul pc aprivo un file dxf(si trovano delle librerie già pronte per visual studio), leggevo una per una le coordinate di tutti i segmenti, scomponevo i cerchi anche loro in segmenti e ne memorizzavo le coordinate, mi fermai solo sul testo quello era un po troppo complicato, avrei poi inviato le coordinate ad una scheda di controllo che a quel punto doveva solo gestire i motori.
Però è un lavoro davvero inutile, ci si reinventa l'acqua calda, ci sono software già pronti, alcuni anche free che fanno esattamente lo stesso ma in modo molto evoluto, esempio mach3.

Anche perchè non ci si può limitare a salvarsi le coordinate ma vanno eseguiti molti controlli e la fresa va mossa in una certa maniera, esempio c'è la fase di affondamento, bisogna gestire la profondità e in quantità diversa per ogni punto, bisogna considerare il diametro fresa e ricalcolare in modo opportuno tutte le coordinate, bisogna limitare la velocità di avanzamento per non spaccare le frese, bisogna tener conto che fresando esternamente viene fuori una cosa mentre internamente è completamente diversa, bisogna anche tener conto che molte aree vanno svuotate e quindi generati i percorsi per farlo, e chissà quante altre mille cose che non ricordo e quante altre milioni non so.

Usando i software appositi è molto più semplice, basta un pc e una scheda finali senza nient'altro ma avrai un prodotto professionale.
Oppure visto che hai già l'elettronica personale pronta, pensa piuttosto ad interfacciarti con questi software, ho visto che alcuni hanno la possibilità di inviare i dati anche tramite seriale, un tipo tempo fa infatti fece la movimentazione da solo, usando dei servomotori industriali e alcuni microcontrollori che gestivano il posizionamento pid per tutti gli assi, gran lavorone davvero!

marnic 16-03-2010 09.25.44

Dal post non ho capito bene, di solito i SW sono due:
un cad/cam che dal disegno ti permette di generare il percorso utensile con tutti i parametri che dice gyppe, velocità, lavorazione interna esterna ecc. Questo sw genera un file tipo GCode che è un file di testo con la sequenza delle operazioni e dei parametri utili alla macchina, è uno standard, poi ce ne sono anche altri ma il GCode è tra i più comuni e trovi facilmente in rete tutte le specifiche.
Altro sw è quello che prende il gcode e invia sotto varie forme i comandi alla macchina, nel caso più semplice si usa direttamente la parallela LPT e in sostanza viene posto alto o basso il pin necessario ad esempio all'avvio della fresa, al selettore di direzione fino ad arrivare alla sequenza di 101010.... che sono gli step che devono fare i motori.
Mentre credo che il primo sw sia molto complesso da realizzare (non a caso costano un botto) per il secondo ho visto alcune realizzazioni che se pur "essenziali" fanno il loro lavoro, la vera difficoltà è mandare segnali nei tempi voluti alla periferica, questo perchè windows non sempre è trasparente su questi aspetti provocando limiti importanti nella massima velocità

gyppe 16-03-2010 10.06.20

In effetti è un bel macello e ancora non ho capito perfettamente come funziona tutto quanto, all'inizio sembrava facile, prendo un file con le coordinate e le invio alla fresa, quando poi ho cominciato ad approfondire ho lasciato perdere :)

luigi91 16-03-2010 17.35.39

ragazzi, grazie a tutti... parto dal con dare la risposta a sergio :

sergio_camici
VB6?
Perchè vuoi usare un prodotto morto, che ti darà solo problemi?
Prendi in considerazione C#.

risp: beh, dato che l'intero progetto dovrà essere presentato a scuola entro la fine dell'anno per portarlo all'esame di stato devo mentenermi in quegli che sono gli argomenti scolastici, e dato che il C a scuola non l'hanno fatto affrontare, sono costretto al visual basic.

per gli altri che mi consigliano di appoggiarmi ad un software gia fatto:
potreste spiegarvi meglio?!... mi sapreste dare qualche nome, indicare le tecniche di colloquio?!... grazie mille....

per gyppe :
non sai che voglia ho di mandare tutto all'aria anch'io, solo che è un bel peccato, sono arrivato fino a questo punto, non posso farmi buttare a terra da una comunicazione seriale... XD

Caronte 17-03-2010 22.21.00

Anche se ti consiglio Visual Studio 2008, con questo sorgente VB6 puoi inviare, tramite il controllo MSComm (devi inserirlo da: project>component>controls>Microsoft Comm Control 6.0), dati seriali.

Codice:

Dim DATI As String

Private Sub Apri_COM_Click()
On Error GoTo Port_Open_Error

MSComm1.CommPort = cmbCom.Text
MSComm1.Settings = "115200,n,8,1"

MSComm1.PortOpen = True



Port_Open_Error:
   
    If Err.Number = 8002 Then
        MsgBox "Questa porta COM non è disponibile !", vbExclamation
    End If
    If Err.Number = 8005 Then
        MsgBox "Questa porta COM è già in uso!", vbExclamation
       
        End If
        If Err.Number = 8018 Then
        MsgBox "Devi prima conneterti !", vbExclamation
    End If
    Err.Clear
End Sub

Private Sub Invia_Click()

DATI = Text1.text

MSComm1.Output = "DATI"

End Sub

Private Sub Form_Load()
        With MSComm1
          cmbCom.Clear
          For X = 1 To 255
            Err.Clear
            If .PortOpen = True Then .PortOpen = False
            On Error Resume Next
            .CommPort = X
            .PortOpen = True
            If Err.Number = 0 Then
              cmbCom.AddItem Trim(CStr(X))
            End If
            .PortOpen = False
          Next X
        End With
End Sub


Private Sub Command3_Click()

MSComm1.PortOpen = False
Unload Me
End Sub

http://www.mattiolirov.net/wp-conten...mcionf_vb6.jpg

Nel codice esempio ho messo una variabile stringa, dovrai poi adattare sia la variabile che la sintassi in base alle esigenze del dispositivo con il quale devi comunicare e sempre in conformità a quest'ultimo dovrai adattare i parametri velocità, bit, parità, bit di stop (nella parte in rosso). Quando darai lo start, nel combo ti appariranno le com disponibili: seleziona quella giusta. Verifica inoltre che la com, oltre che essere quella giusta, sia settata anche nel sistema nella maniera corretta (start > pannello di controllo > sistema > gestione dispositivi > porte com > [trovi quella giusta] click dx > proprietà > [metti a posto i parametri] > applica ). Inserici ciò che devi inviare nel textbox e premi invia. Auguri e spero che vada :)

Ciao Antonio

luigi91 18-03-2010 15.39.51

caronte, sei un grande!!!... testo subito il tutto e ti faccio sapere... grazie mille!!!!!...

luigi91 18-03-2010 16.31.58

ciao caronte... allora ti posto i miei problemi:

nell'andare ad inviare un dato sulla seriale per esempio 4 (00000100)
succede che il microcontrollore che deve recepire questo numero legge 52 (000110100), ho cercato di cambiare l'impostazione del programma facendo :

Private Sub Invia_Click()
Dim DATI As Integer
DATI = Val(Text1.Text)
MSComm1.Output = DATI
End Sub

succede che VB ritorna l'errore:
Run-time'380':
invalid property value

indicando la riga:
MSComm1.Output = DATI
................................
a questo punto mi chiedo perchè il valore è inappropriato?!.... cos è k sto sbagliando?!

sergio_camici 18-03-2010 16.44.39

Devi trasmettere un carattere alla volta e di ciscun carattere devi trasmettere il suo codice ASCII.

Infatti il carattere "4" ha codice ASCII 52
Se volevi trasmettere 4 dovevi mettere CHR(4)

MID per prendere il singolo carattere
ASC per ricavare il codice ASCII
CHR per ottenere un preciso char.


Tutti gli orari sono GMT. Adesso sono le: 22.27.38.

Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.