Pilotare passo passo da vb6

Sezione riservata ai sofware sviluppati in proprio
Rispondi
Seifter
Junior
Junior
Messaggi: 61
Iscritto il: mercoledì 30 aprile 2008, 15:21
Località: Gattinara (VC)

Pilotare passo passo da vb6

Messaggio da Seifter » mercoledì 10 febbraio 2010, 11:58

Ciao a tutti
Vi espongo il mio problema:
Dovrei creare un software che piloti un motore PP tramite parallela e vb6,la meccanica è già  pronta l'elettronica pure e con mach3 funziona tutto.
Ora però dovrei creare una piccola interfaccia che mi permetta in base alla lunghezza dell'utensile che inserisco di posizionare un finecorsa meccanico montato su di una barra filettata passo 1 nella posizione da mè programmata.
Ho montato un finecorsa di zero che mi serve a sapere la posizione esatta ogni volta che vado a spostare quello meccanico prima vado a toccare lo zero e poi vado alla quota z.
ho cercato sul forum e ho letto un post precedente copiando questo codice:

'Dichiarazione di Inp e Out per l'utilizzo di inpout32.dll

Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" _
(ByVal PortAddress As Integer) _
As Integer

Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" _
(ByVal PortAddress As Integer, _
ByVal Value As Integer)

Private Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)

Const PAR1 = &H378 'costante che si riferisce alla porta parallela

'costanti di step e dir degli assi
'Const DirX = 0
'Const StepX = 1
'Const DirY = 2
'Const StepY = 3
Const DirZ = 17
Const StepZ = 1


'Funzione che setta uno specifico bit della porta selezionata
Public Sub BitSet(ByVal Port As Long, ByVal Bit As Byte)
If Bit < 0 Or Bit > 7 Then Exit Sub
Out Port, Inp(Port) Or (2 ^ Bit)
End Sub


'Funzione che resetta uno specifico bit della porta selezionata
Public Sub BitReset(ByVal Port As Long, ByVal Bit As Byte)
If Bit < 0 Or Bit > 7 Then Exit Sub
Out Port, Inp(Port) And (255 - 2 ^ Bit)
End Sub


'Funzione di ritardo fra BitSet e BitReset (personalmente è meglio un
'ritardo con ciclo perchè il minimo ritardo applicabile con sleep è di 1 millisecondo)

Public Sub Wait(ByVal ms As Long)
Sleep (ms)
End Sub


'Questa è la routine di ritardo
Sub CicloRitZ()
Dim a As Long

For a = 0 To 70000
Next a
End Sub

Private Sub cmdEsegui_Click()
'Questo è il ciclo che sposterà  il motore in funzione di quanti passi deve fare
Dim nstep As String
nstep = txtMisura.Text
For ciclo = 1 To nstep
BitSet PAR1, StepZ 'setta il bit StepZ della porta PAR1
CicloRitZ 'ciclo di ritardo
BitReset PAR1, StepZ 'resetta il bit StepZ della porta PAR1
Next ciclo
txtTest.Text = nstep
End Sub


Ma naturalmente non succede nulla...
Su Mach 3 i pin sono impostati come Dir= 17 Step =1 e il finecorsa su pin 11.

Nel codice precedente non capisco dove settare il numero dei pin della porta.
Grazie
Giancarlo
Buone feste a tutti

Avatar utente
cusna
Junior
Junior
Messaggi: 99
Iscritto il: martedì 14 novembre 2006, 18:04
Località: Provincia Modena/Reggio
Contatta:

Re: Pilotare passo passo da vb6

Messaggio da cusna » mercoledì 10 febbraio 2010, 21:43

Premetto che sono già  molti anni che non lavoro + con il VB.
Controlla ad esempio qui o nel sito di Vicenzo Villa le caratteristiche della porta
parallela.
Come noterai ci sono 3 registri ad 8 bit:
1) Data Port = indirizzo base (LPT1 ->0x378)
2) Status Port = indirizzo base + 1 (LPT1 -> 0x379)
3) Control Port = indirizzo base +2 (LPT1 -> 0x37A)
Quindi se per esempio vuoi settare il pin 1 della parallela dovrai
(come visualizzato nella tabella del link di wikipedia) individuare
a quale regsitro appartiene e quale bit è'.
Nel nostro caso il pin 1 che è lo strobe fa parte del registro ad 8 bit
Control Port ed è il bit 0, pertanto dovrai fare una cosa simile a:

Codice: Seleziona tutto

Out Port, Inp(Port) Or (2 ^ Bit)
dove Port sarà  il registro Control port (cioe' indirizzo base +2= 0x37A) e bit
sarà  0.
Non conosco la sintassi per usare in modo corretto la libreria inpout32.dll ma il concetto
è quello che ti ho descritto
Ciao
Dino

Seifter
Junior
Junior
Messaggi: 61
Iscritto il: mercoledì 30 aprile 2008, 15:21
Località: Gattinara (VC)

Re: Pilotare passo passo da vb6

Messaggio da Seifter » venerdì 12 febbraio 2010, 17:28

Ciao
Sono riuscito ad inviare gli step all'interfaccia e vedo dai led che funziona ma purtroppo non posso provare il motore quindi mi chiedevo se poteste spiegarmi come funziona la rotazione.
Io se non sbaglio eleggo il bit del pin Dir a 1 o 0 ma come fà  a sapere da che parte ruotare?
Sono un pò confuso....
Grazie
Buone feste a tutti

francopuk
Junior
Junior
Messaggi: 185
Iscritto il: domenica 14 dicembre 2008, 8:11
Località: Quarto (PC)

Re: Pilotare passo passo da vb6

Messaggio da francopuk » venerdì 12 febbraio 2010, 20:36

ciao, mi sa che ti manca un pezzo, nessuno credo piloti dei passo passo direttamente dalla parallela, a meno che siano davvero piccoli.... ti manca la parte di potenza es: L297 L298 oppure L297 6203 ecc. nello specifico il L297 provvede partendo da segnali base DIR STEP H/F elabora le sequenze per i ponti (298 ecc) che pilotano i motori, quindi per ruotare es un motore in senso orario alza il segnale DIR, invia una serie di impulsi STEP, se nel frattempo abbassi a 0 il segnale DIR il motore ruoterà  in senso inverso
spero non averti confuso le idee e di esserti stato di aiuto
Franco
PS: procurati il datasheet del L297 ci sono le funzioni di tutti i pin

Seifter
Junior
Junior
Messaggi: 61
Iscritto il: mercoledì 30 aprile 2008, 15:21
Località: Gattinara (VC)

Re: Pilotare passo passo da vb6

Messaggio da Seifter » venerdì 12 febbraio 2010, 21:43

Ciao
Mi sono espresso male io nel senso che ho già  anche i driver collegati ma non potevo provare a far girare il motore.
Ho provato ad inviare gli step e vedevo nel led della parallela che gli step venivano inviati e mi cheidevo come funzionasse il segnale di dir.
Direi che ora ho capito grazie alla tua spiegazione.
Domani mattina finisco il programma e poi provo col motore sperando che non esploda tutto....
Grazie
Buone feste a tutti

Avatar utente
cusna
Junior
Junior
Messaggi: 99
Iscritto il: martedì 14 novembre 2006, 18:04
Località: Provincia Modena/Reggio
Contatta:

Re: Pilotare passo passo da vb6

Messaggio da cusna » sabato 13 febbraio 2010, 13:37

Seifter ha scritto:Ciao
... e mi cheidevo come funzionasse il segnale di dir.
Grazie
Il segnale di dir è semplice, prima di inviare gli step setti o resetti il segnale di dir a seconda della direzione e lo tieni in questa condizione per tutto il tempo che invii gli impulsi di step.
Poi ci sono tempistiche di attesa tra cambio di stato di dir ed inizio invio step ma dipende dalle caratteristiche del driver. Con Vb6 non dovresti avere problemi in quanto tra una istruzione e l' altra dovrebbe passare un sufficiente tempo superiore alla richiesta dei driver.
Ciao Dino

Seifter
Junior
Junior
Messaggi: 61
Iscritto il: mercoledì 30 aprile 2008, 15:21
Località: Gattinara (VC)

Re: Pilotare passo passo da vb6

Messaggio da Seifter » domenica 14 febbraio 2010, 12:13

Ciao
Grazie a tutti voi sono riuscito a far funzionare il tutto.
Diciamo che per quello che mi serve funziona ma ora devo provare a fare Multi-Threading per evitare che mentre sono inviati i segnali step l'applicazione resta bloccata e non posso fare niente fino alla fine del loop degli step.
Ho trovato degli esempi in rete ma mi fanno crashare l'applicazione.
Per ora lo userò cosi tanto ho il tempo di aspettare che finisca il loop essendo solo un posizionamento,nel frattempo cercherò di risolvere il problema.
Ogni consiglio è sempre ben gradito.
Allego il codice di vb6 funzionante,magari potrà  essere di spunto per qualcuno.
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login
Buone feste a tutti

Seifter
Junior
Junior
Messaggi: 61
Iscritto il: mercoledì 30 aprile 2008, 15:21
Località: Gattinara (VC)

Re: Pilotare passo passo da vb6

Messaggio da Seifter » martedì 16 febbraio 2010, 11:34

Ho risolto il problema del congelamento della finestra mentre è in esecuzione un ciclo.
Basta inserire un DoEvents nei cicli in questo modo:

Codice: Seleziona tutto

For ciclo = 1 To nstep
DoEvents 
BitSet PAR1, StepZ 'setta il bit StepZ della porta PAR1
CicloRitZ 'ciclo di ritardo
BitReset PAR1, StepZ 'resetta il bit StepZ della porta PAR1
Next ciclo
In questo modo l'interfaccia resta accessibile anche durante il loop.
Ciao
Buone feste a tutti

Seifter
Junior
Junior
Messaggi: 61
Iscritto il: mercoledì 30 aprile 2008, 15:21
Località: Gattinara (VC)

Re: Pilotare passo passo da vb6

Messaggio da Seifter » mercoledì 17 febbraio 2010, 11:14

Ciao
Per completezza riporto l'ultimo problema che mi si è presentato:
Il programma funzionava ma mi sono accorto che se accendevo il pc e lanciavo il programma non mi veniva rilevato lo zero inviato dal micro.
Se mandavo in esecuzione mach3 lo zero lo faceva e da lì in poi anche il mio programma lo leggeva.
Dopo varie prove e varie imprecazioni in nottata mi sono illuminato:
All'accensione del pc gli indirizzi erano:
&H378=255
&H379=135
&H37A=196
Dopo aver lanciato Mach3 diventavano:
&H378=0
&H379=135
&H37A=203
Mi è bastato nel form.load del mio programma portare le porte allo stesso valore e magicamente funziona tutto come deve.
La notte porta consiglio...
Grazie per l'aiuto,ora posso dire di aver completato l'applicazione.
Una breve spiegazione è d'obbligo:
In definitiva quest'applicazione non è nient'altro che un semplice posizionamento di un fermo rispetto allo zero rilevato al centro di una morsa di una macchina Transfer da rubinetteria.
Impostando la lunghezza dell'utensile montato sul mandrino dell'unità  e la misura del pezzo rispetto al centro morsa viene variata la posizione del fermo e quindi impostata la misura di lavorazione.
Al piazzamento successivo basta richiamare il codice dell'articolo da lavorare,inserire la nuova lunghezza utensile e lanciare la sequenza di posizionamento dei fermi.
Il programma calcola la differenza tra il vecchio utensile ed il nuovo e correggie il fermo.
Potrebbe sembrare inutile ma questa macchina ha 10 unità  di foratura con 10 utensili diversi ed ogni volta si doveva agire manualmente sulla vite di registro passo 1 per portare gli utensili a misura.
diciamo che una volta presettati gli utensili con una decina di click la macchina è in produzione.
Al più presto posterò il nuovo codice,magari servirà  a qualcuno come spunto per crearsi qualcosa.
Grazie
Buone feste a tutti

Avatar utente
cusna
Junior
Junior
Messaggi: 99
Iscritto il: martedì 14 novembre 2006, 18:04
Località: Provincia Modena/Reggio
Contatta:

Re: Pilotare passo passo da vb6

Messaggio da cusna » mercoledì 17 febbraio 2010, 12:28

Bene, sono contento che tu possa proseguire,
DoEvents serve appunto per evitare blocchi ed avere
multitasking.

Rispondi

Torna a “Home Made”