Messaggio
da Alex_live » martedì 3 novembre 2015, 12:57
Di seguito le dichiarazioni del file allegato.
Declare Sub VVIO_SetNtMode Lib "vvio.dll" ()
Declare Sub VVIO_SlowDown Lib "vvio.dll" (ByVal x1&)
Declare Function VVIO_in% Lib "vvio.dll" (ByVal x1&)
Declare Sub VVIO_out Lib "vvio.dll" (ByVal x1&, ByVal x2%)
Declare Function VVIO_LPT_Inizialize% Lib "vvio.dll" (ByVal x1%, ByVal x2&)
Declare Function VVIO_LPT_GetLptFromBios% Lib "vvio.dll" (x1&, x2&, x3&)
Declare Function VVIO_LPT_Lock% Lib "vvio.dll" (ByVal x1%)
Declare Function VVIO_LPT_GetStatus% Lib "vvio.dll" (ByVal x1%)
Declare Function VVIO_LPT_WriteData% Lib "vvio.dll" (ByVal x1%, ByVal x2%)
Declare Function VVIO_LPT_WriteControl% Lib "vvio.dll" (ByVal x1%, ByVal x2%, ByVal x3%, ByVal x4%, ByVal x5%)
Declare Function VVIO_MAX147_Inizialize% Lib "vvio.dll" (ByVal x1%, ByVal x2&)
Declare Function VVIO_MAX147_GetVolt% Lib "vvio.dll" (ByVal x1%, ByVal x2%, x3#)
Declare Function VVIO_MAX147_GetSamples% Lib "vvio.dll" (ByVal x1%, x2#)
Declare Function VVIO_CD4094_Inizialize% Lib "vvio.dll" (ByVal x1%, ByVal x2&)
Declare Function VVIO_CD4094_Write% Lib "vvio.dll" (ByVal x1%, ByVal x2%, ByVal x3%, ByVal x4%)
Declare Function VVIO_CD4094_18245% Lib "vvio.dll" (ByVal x1%, ByVal x2%, ByVal x3%, ByVal x4%, ByVal x5%)
Declare Function VVIO_CD4094_NextStepBipolar% Lib "vvio.dll" (ByVal x1%, ByVal x2%, ByVal x3%, ByVal x4%)
Declare Function VVIO_CD4094_NextStepUnipolar% Lib "vvio.dll" (ByVal x1%, ByVal x2%, ByVal x3%, ByVal x4%, ByVal x5%)
'subito all'inizio del programma devi resettare tutte le possibili parallele
'per essere certi che non siano presenti dei valori che potrebbero attivare
'arbitrariamente dei motori sbagliati
'azzera porte out parallela
R = VVIO_LPT_Inizialize%(4, 888)
R = VVIO_LPT_Inizialize%(4, 632)
R = VVIO_LPT_Inizialize%(4, 956)
R = VVIO_LPT_Inizialize%(4, 636)
R = VVIO_LPT_Inizialize%(4, 620)
R = VVIO_LPT_Inizialize%(4, 616)
'la funzione "VVIO_LPT_GetLptFromBios%" non so come vanno passati i parametri prova ad effettuare una ricerca.
Di seguito alcune indicazioni sul programma.
Ho riportato solo la parte da modificare (ho evidenziato le modifiche con un commento in maiuscolo)
Private Sub CommandButton12_Click()
''utilizzo l'apertura e la letturarigaper riga di unfile ditestoperchè almomento non sonoriuscitoad evitarlo.
''vorrei riuscire aleggereil contenuto della TextBox rinominata GCODE visto che è già a disposizione
''in modo da alleggerire il tutto, e leggendo riga perriga interpretare i comandi.
' Leggo il file Pin.txt dove ci sono dichiarati i valori dei pin per un massimo di 4 assi
Non capisco bene cosa intendi con leggere il contenuto della textbox GCODE.
Spero di aver interpretato bene e la soluzione proposta alla line della SUB possa essere corretta.
..........
t = ActiveWorkbook.path & "\FileCNC.tap" '(file completo di percorso)
Open t For Input As #1
Do While Not EOF(1)
Line Input #1, testo 'testo linea per linea dal file
ListBox1.AddItem testo 'AGGIUNTA
GCode.Text = GCode.Text & testo & Chr$(13) 'NON NECESSARIA
Call DividiStringa("0", testo) 'NON NECESSARIA
RigoVerticale = RigoVerticale + 1 ' NON NECESSARIA
Loop
Close #1 ' chiudo il file e libero la memoria
End Sub
senza scrivere il file "\FileCNC.tap" in un foglio excell
Sostituire il textbox GCode con un oggetto listbox1
listbox1.AddItem (utilizzare per aggiungere una riga di testo)
listbox1.List(n) (utilizzate per leggere riga per riga dove a 'n' deve essere inserito il numero della riga partendo da 0 per la prima riga. Utilizzare un ciclo while per leggere tutte le riche e bloccare il ciclo quando List(n) ritorna una striga vuota) dividere successivamente la riga di testo letta dal listbox passandola a Call DividiStringa modificata per essere immediatamente eseguita.
Private Sub CommandButton15_Click()
......
Out 888, 0
Do While countit > 0
MyTimer = AsseY_VelocitàMovimentazione
Out 888, PinAsseY_Dir
Do While MyTimer > 0
MyTimer = MyTimer - 1
Loop
Out 888, 0
countit = countit - 1
Loop
End Sub
Con il singolo movimento di un motore il listato va bene.
Se devono funzionare contemporaneamente più motori non puoi utilizzarea 'Out 888, 0' all'inizio e alla fine del ciclo While perchè spegni tutti i motori e non quello necessario.
Soluzione sommare o sotrarre il numero decimale del motore (utilizzare una variabile globale) per avviarlo o fermarlo senza broccare l'altro motore.
Un problema di non facile soluzione è avere un motore che gira più veloce rispetto all'altro/altri. Qui non saprei che soluzione trovare. Con qualche timer si possono gestire varie velocità ma VBA non supporta i timer.
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