E' possibile fermare una macro in elaborazione e poi farla ripartire?

Sezione dedicata a Mach3
Rispondi
gia2005
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 15 ottobre 2020, 0:01

E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da gia2005 » venerdì 29 marzo 2024, 0:05

Buona sera a tutti, come da titolo chiedo se è possibile fermare momentaneamente una macro in esecuzione, fare dei movimenti degli assi manualmente e poi farla ripartire da questa nuova posizione creata manualmente. Ho provato in tanti modi, se la fermo non riesco poi a farla ripartire se non ricominciare dall'inizio. Potrei riuscirci con una variabile Global, ma non riesco ad attivarla bene. Quando finisce la funzione la variabile dichiarata globale perde il valore che gli ho fatto memorizzare. Evidentemente occorre fare qualcosa che io non riesco ad individuare.
Quindi per risolvere questo mio problema avrei due opzioni, ho fermare la macro e poi ripartire o creare una variabile global che funzioni.
Grazie

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da torn24 » venerdì 29 marzo 2024, 5:12

No non è possibile interrompere una macro e poi farla ripartire. Non so cosa fa esattamente la macro ma parli di nuova posizione?!

Puoi pensare, inventarti una macro che legga i dro x y z, la posizione attuale a inizio macro e ne tenga conto per le operazioni successive.

Supponiamo che la macro debba fare dei movimenti e questi sono coordinate nella macro valori costanti, a inizio macro legge la posizione degli assi può modificare gli spostamenti in base alla posizione attuale.


Senza sapere esattamente il compito che deve svolgere non si può consigliare altro, non si possono dare soluzioni se non si conosce il problema :D
CIAO A TUTTI !

gia2005
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 15 ottobre 2020, 0:01

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da gia2005 » venerdì 29 marzo 2024, 10:25

Grazie torn24 per la risposta, non devo fare un lavoro particolare, ho lavorato un pezzo da un lato e rifare la stessa lavorazione dall' altro lato in una posizione da decidere dopo la prima lavorazione e non volevo ricaricare il file, mi sembrava più comodo così, con un invio ricominciare la seconda. Se non è possibile fermare una macro sai indicarmi come inizializzare una macro global. In VB mi è facile dichiararla qui non sono riuscito a scoprirlo.
Grazie
Ciao

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da torn24 » venerdì 29 marzo 2024, 13:47

Il programma pezzo che non è una macro ma gicode si può fermare programmando nel programma m00 poi premendo start riparte. Per prendere l'origine in un punto qualsiasi dope m00 programmi G92 x0 y0. Il punto dove si trova il mandrino diventa l'origine x0 y0. Quindi quello che vuoi fare non si può fare con visual basic script ma si può fare con il gcode . Ho scritto dettando col telefono scusate gli errori
CIAO A TUTTI !

gia2005
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 15 ottobre 2020, 0:01

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da gia2005 » venerdì 29 marzo 2024, 16:03

Ok, grazie vedrò se riuscirò a fare con il gcode, infatti alcune cose si possono fare con il gcode ed altre con le macro.
Nel mio messaggio precedente ho sbagliato a scrivere, ho scritto "macro global" anziché variabile Global.
Nessuno sa dirmi come dichiararla correttamente? Negli esempi che ci sono nel manuale ISO non funzionano, ho provato in vari modi.
Grazie

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da torn24 » sabato 30 marzo 2024, 5:01

Globale significa che è visibile in ogni punto del programma, se dichiarata fuori da una sub o function è globale visibile in ogni punto del programma anche all'interno di funzioni.


dim VariabileGlobale=10



sub Main
dim variabileLocale=20

'la locale è visibile solo all'interno della sub, ma qui è visibile anche quella globale


end sub
CIAO A TUTTI !

gia2005
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 15 ottobre 2020, 0:01

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da gia2005 » sabato 30 marzo 2024, 9:47

Buongiorno, infatti io la dichiaro come dici te, però uscendo dalla funzione in cui la valorizzo non risulta più valorizzata. Quando cerco di confrontare il suo valore per delle condizioni che mi servono il suo valore è sempre vuoto o 0 se la dichiaro numerica

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da torn24 » sabato 30 marzo 2024, 10:16

Se l'hai dichiara fuori delle funzioni il suo valore si conserva ed è visibile in tutto lo script. C'è qualcosa di sbagliato nel tuo script non vedendolo non si puo sapere dove sia l'errore, parlare senza sapere altro non porta a nessun risultato :D
CIAO A TUTTI !

gia2005
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 15 ottobre 2020, 0:01

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da gia2005 » domenica 31 marzo 2024, 20:05

Buona Pasqua e buona serata a tutti,
torn24, provo a spiegarti quello che ho in testa, mi è difficile spiegare bene con la scrittura.
Ho creato una scheda personalizzata nel mach in cui ho messo dei controlli e dei pulsanti per poter muovere gli assi dei mm che mi occorrono nella fresatura di quel momento. Valorizzo il controllo e poi con un pulsante faccio iniziare la movimentazione per l'asse che mi occorre.
Così facendo freso come se avessi degli avanzamenti automatici per i 3 assi, compreso anche il feed rate, abbastanza pratici senza dover ricaricare con le freccette MDI o creare un Gcode ad occ.
Ora mi sono messo in testa di implementare questa .......chiamiamola procedura, con una macro facendo meno interventi di click possibili.
La mia idea era quella di iniziare la lavorazione rispondendo a dei MsgBox e poi finita la prima passata, continuare le altre passate facendo un solo click sullo stesso pulsante fino alla fine, magari facendo qualche spostamento manuale tra una passata e l'altra quando occorre. La mia è una piccola fresa e lavorando il ferro non posso fare passate che siano più di 0,5 mm sulla Z, soffre troppo.
Per fare questo mi serve un valore che rimanga memorizzato anche dopo finita la SUB, tipo la variabile GLOBAL.
Ti metto uno screenshot della schermata personalizzata e poi la sub che ho scritto.
Nella funzione faccio riferimento al primo textbox (quello della X) e a quello del FEED RATE che vengono valorizzati di volta in volta in questa scheda.
Scheda.jpg
Global varglobale As Integer


Sub Main()


Dim response
Dim button
Dim var, var1, var2, AxisNum

If varglobale>0 Then
response=MsgBox ("CONTINUARE IL LAVORO?" , 1 , "ATTENZIONE" )
If response =1 Then GoTo 6 Else Exit Sub

End If

response=MsgBox ("CONFERMARE INIZIO LAVORO?" , 4 , "ATTENZIONE POSIZIONARE L'UTENSILE VICINO AL PUNTO 0(ZERO)" )

If response = "6" Then GoTo 1 Else GoTo 2

1:

Begin Dialog GroupSampleA 331,132,220,96,"SELEZIONE DEGLI ASSI DA MOVIMENTARE"
OKButton 38,75,40,14
GroupBox 12,8,96,62,"ASSI DA SELEZIONARE",.GroupBox1
OptionGroup .OptionGroup1
OptionButton 20,24,40,8,"Z Axis",.OptionButton1
OptionButton 20,40,40,8,"X Axis",.OptionButton2
OptionButton 20,56,40,8,"Y Axis",.OptionButton3
OptionButton 67,24,40,8,"A Axis",.OptionButton4
'OptionButton 67,40,40,8,"B Axis",.OptionButton5
'OptionButton 67,56,40,8,"C Axis",.OptionButton6
End Dialog

Dim Dlg1 As GroupSampleA
Button = Dialog (Dlg1)
If Button = 0 Then
Exit Sub
End If
AxisNum = Dlg1.OptionGroup1

Select Case AxisNum
Case 0 'Z
3:
If GetOEMLED(1001)=true Then
var2="G91" ' sceglie il code G91
End If

If GetOEMLED(1002)=true Then
var2="G0" ' sceglie il Code G0
End If


If GetOemDRO(1006)=0 Then 'Predispone una velocita predefinita nel caso non sia stata impostata dall'operatore
FeedCurrent= "300"
Else

FeedCurrent = GetOemDRO(1006) 'memorizza il valore del controllo per il feedrate
End If
'imposta il ciclo

VAR= GetOemDRO(1003) 'memorizza il valore del controllo per lo spostamento

VAR1=var1 &"F" & FeedCurrent ' completa il valore nella variabile

Code var2 & "Z" & VAR & var1 'oppure fare cos Code "G91 Z" & VAR &"F300"


'Ritorno

While IsMoving()
Sleep 1000
Wend

VAR1="F" & 300 ' velocit di ritorno

Code var2 & "Z" & -VAR & var1 'oppure fare cos Code "G91 Z" & VAR &"F300"

varglobale=3


Case 1 'X
4:

If GetOEMLED(1001)=true Then
var2="G91" ' sceglie il code G91
End If

If GetOEMLED(1002)=true Then
var2="G0" ' sceglie il Code G0
End If


If GetOemDRO(1006)=0 Then 'Predispone una velocita predefinita nel caso non sia stata impostata dall'operatore
FeedCurrent= "300"
Else

FeedCurrent = GetOemDRO(1006) 'memorizza il valore del controllo per il feedrate
End If
'imposta il ciclo

VAR= GetOemDRO(1003) 'memorizza il valore del controllo per lo spostamento

VAR1=var1 &"F" & FeedCurrent ' completa il valore nella variabile

Code var2 & "X" & VAR & var1 'oppure fare cos Code "G91 X" & VAR &"F300"

'Ritorno

While IsMoving()
Sleep 1000
Wend

VAR1="F" & 300 ' velocit di ritorno

Code var2 & "X" & -VAR & var1 'oppure fare cos Code "G91 X" & VAR &"F300"

varglobale=4


Case 2 'Y
5:

If GetOEMLED(1001)=true Then
var2="G91" ' sceglie il code G91
End If

If GetOEMLED(1002)=true Then
var2="G0" ' sceglie il Code G0
End If


If GetOemDRO(1006)=0 Then 'Predispone una velocita predefinita nel caso non sia stata impostata dall'operatore
FeedCurrent= "300"
Else

FeedCurrent = GetOemDRO(1006) 'memorizza il valore del controllo per il feedrate
End If
'imposta il ciclo

VAR= GetOemDRO(1003) 'memorizza il valore del controllo per lo spostamento

VAR1=var1 &"F" & FeedCurrent ' completa il valore nella variabile

Code var2 & "Y" & VAR & var1 'oppure fare cos Code "G91 Y" & VAR &"F300"

'Ritorno

While IsMoving()
Sleep 1000
Wend

VAR1="F" & 300 ' velocit di ritorno

Code var2 & "Y" & -VAR & var1 'oppure fare cos Code "G91 Y" & VAR &"F300"

varglobale=5


End Select

Exit Sub

6:

Select Case varglobale
Case 1
GoTo 3
Case 2
GoTo 4
Case 3
GoTo 5

End Select


2:

End Sub
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

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da torn24 » lunedì 1 aprile 2024, 5:27

Non sono stato li a analizzare il programma, ma se ti serve una variabile numerica che conserva il valore forse potresti risolvere cosi, ma tutto da provare.

Le variabili stile FANUC #1000 esempio non fanno parte del linguaggio vbscript macro, ma del linguaggio ISO, servono per fare dei calcoli all'interno del GCODE. Ma è possibile settare e leggere il loro valore da macro in vbscript, queste variabili dovrebbero conservare sempre il loro valore fino alla chiusura di MACH3, penso sia cosi ma non ho mai provato.

Allora puoi usarle nel tuo programma in questo modo, ipotizziamo che usi la variabile #1000 ma potresti usare altre, #1100 #1001 ecc..

Nella macro

quando vuoi salvare un valore numerico scrivi

SetVar(1000, 2.34) 'salva nella variabile #1000 il valore numerico 2.34

Quando in un altro punto del programma devi leggere il valore userai questa funzione

var=getvar(1000)
CIAO A TUTTI !

gia2005
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 15 ottobre 2020, 0:01

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da gia2005 » martedì 2 aprile 2024, 0:33

Ok, questa variabile funziona, grazie.
Però fino a quando faccio le verifiche con F7 nel modulo va tutto bene , ma appena lancio il programma dalla scheda con il pulsante mi da errore di scrittura e mi segnala la parola SUB della riga end sub, e da questo momento in poi mi da sempre lo stesso errore anche nel modulo della funzione con F7 . Non posso far altro che ricancellare tutto e ricominciare, non sono riuscito a capire da che cosa dipende. Dalla variabile no sicuramente perchè ho provato al posto della variabile anche con un textbox (ho provato anche con questa alternativa che mi è venuta in mente ora) in cui facevo memorizzare i valori che mi servono per poi riprenderli in seguito.
Purtroppo niente da fare.
Per quanto riguarda gli errori del programma ce ne erano ma dal momento che potevo verificarli con la variabile che mi hai indicato li ho corretti ma non ho avuto la soddisfazione di vederlo funzionare.
Ciao

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da torn24 » martedì 2 aprile 2024, 7:42

Per trovare l'errore debbaggare, potresti togliere una parte di codice momentaneamente anche se la macro non puo svolgere il suo lavoro, di volta in volta togli una parte di codice sempre piu piccola, e trovi la porzione di codice che ti da errore. Sara piu facile capire il problema sapendo che è contenuto in poche righe, piuttosto che sapere solo che è in un punto qualsiasi del programma. Compilatori piu efficienti indicano la riga in cui si presenta l'errore o quella successiva.
CIAO A TUTTI !

gia2005
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 15 ottobre 2020, 0:01

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da gia2005 » martedì 2 aprile 2024, 8:44

Di solito provavo a togliere le ultime cose aggiunte ma non cambiava nulla, dovevo sempre ricominciare da capo. Proverò a togliere riga per riga e vedremo.
Ciao e grazie

gia2005
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 15 ottobre 2020, 0:01

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da gia2005 » martedì 2 aprile 2024, 8:52

Un' altra cosa, che ne dici di provare a trasportare questa funzione su un programma di access? forse li mi dirà dov'è l'errore .
Ci proverò
Grazie

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: E' possibile fermare una macro in elaborazione e poi farla ripartire?

Messaggio da torn24 » martedì 2 aprile 2024, 9:23

Nel programma usi tante funzioni API di mach3 queste esistono solo in mach3, se provi questo script in un compilatore diverso da quello di mach3, ti da errore praticamente in ogni riga di programma :D
CIAO A TUTTI !

Rispondi

Torna a “Mach3”