Mach3-Kflop: problemi azzeramento assi

Sezione dedicata a Mach3
Rispondi
Avatar utente
arm
Senior
Senior
Messaggi: 2711
Iscritto il: venerdì 18 maggio 2007, 13:21
Località: arborea (OR) e firenze
Contatta:

Mach3-Kflop: problemi azzeramento assi

Messaggio da arm » giovedì 20 novembre 2014, 0:54

Salve, avrei bisogno d’aiuto.
Sto da poco usando la Kflop con Mach3 e avrei un paio di problemini. In mach3 ho solamente settato il motor tuning e tutto funziona bene, a parte:

1) Operazione senza Gcode, semplice operazione da tastiera
- sposto gli assi con la tastiera in un punto qualsiasi dell’area di lavoro;
- azzero gli assi nella schermata;
- sposto gli assi a tastiera (anche 1 solo)
- premo “reset” e disabilito il sistema
- ripremo “reset” e vedo a schermo che mi riazzera gli assi, ma la macchina rimane ferma. In questa maniera mi perde lo zero pezzo.
Lo fa anche non partendo dallo 0; in pratica una volta che disabilito con reset, quando riabilito mi torna, solo a schermo, alle coordinate da cui era partito prima che disabilitassi.
Il problema non l’ho mai riscontrato in precedenza e non sussiste su altro pc non collegato alla cnc.

2) Operazione con Gcode; ho utilizzato un gcode già usato senza problemi quando avevo la parallela e tutt’ora funziona bene se lo provo su un pc non collegato alla kflop
Quando parte il gcode, la prima operazione che fa la macchina è quella che di alzare la Z ad un certo valore, e qui stranamente la velocità è molto lenta; raggiunta la quota si sposta in x e y a velocità regolare e poi parte a lavorare.
Infine ho riscontrato che non appena parte a lavorare, dopo qualche riga di comando, si ferma per un paio di secondi e poi continua regolare.

Ringrazio in anticipo chi ha idea di cosa può essere, soprattutto il primo problema.
saluti
L'arte è l'espressione di piacere che l'uomo prova nel lavoro. (William Morris artigiano - architetto 1834-1896)
Cnc 3 assi per alluminio, 600x350, ponte fisso
Cnc 3 assi+1, 1200x800, doppia vite
Fresatrice verticale per acciaio

Avatar utente
Pedro
God
God
Messaggi: 7084
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da Pedro » giovedì 20 novembre 2014, 2:45

1) tutto dipende da come è fatto il file di configurazione che carica mach3 come indicato, sotto il plugin configuration, come Inizialize User Program e dal fatto che hai spuntato, come d'altronde ce l'ho anche io spuntato, Inizialize every mach3 reset, cioè lo ricarica ogni reset.

Dicevo, nel file di inizializzazione quando abiliti gli assi dipende come lo fai: se scrivi

EnableAxis(0);

abiliti l'asse 0

se scrivi

EnableAxisDest(0,0);

abiliti l'asse 0 e lo riporti al punto 0. Questo a volte è comodo ma crea al reset il ripristino dell'asse sulla sua coordinata "0". Penso che il problema sia questo, senza però vedere ne il file di inizializzazione, ne lo screen che usi, ne l'xml di mach3 di più non è possibile dirti. Quello che posso dire per certo è che a me non lo fa e quindi penso sia un problema nelle configurazioni


2)anche qui, difficile a dirsi senza saperne di pi, forse usi il CV invece dell'exact stop, o i parametri dell'asse Z sono sbagliati. Non si capisce ne quando ne come ne perchè ti fa quel difetto. Magari vedendo i file si potrebbe intuire, un filmato poi aiuterebbe
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da walgri » giovedì 20 novembre 2014, 9:01

Circa la 1) è praticamente certo che sia come dici tu Pedro. Infatti gli assi sono tutti abilitati con EnableAxisDest. Questa è una copia che ho da parte dell'init.c di Arm, anche se ora non ricordo più se abbiamo modificato i valori di velocità ed accelerazione.

Codice: Seleziona tutto

#include "KMotionDef.h"

#define ESTOP 36 // Pin Emergenze

// function prototypes for compiler
int DoPC(int cmd);
int DoPCFloat(int cmd, float f);
int Debounce(int n, int *cnt, int *last, int *lastsolid);

// state variables for switch debouncing
int elast=0,elastsolid=-1,ecount=0;

int main() 
{
   	FPGA(STEP_PULSE_LENGTH_ADD)=63 + 0x80;  // Imposta la durata dello step a ~4us (driver Z lento)

	
	// DEFINIZIONE ASSI ============================================
	// Asse X
	// _____________________________________________________________

	ch0->InputMode=NO_INPUT_MODE;
	ch0->OutputMode=STEP_DIR_MODE;
	ch0->Vel=40000;
	ch0->Accel=400000;
	ch0->Jerk=4e+006;
	ch0->P=0;
	ch0->I=0.01;
	ch0->D=0;
	ch0->FFAccel=0;
	ch0->FFVel=0;
	ch0->MaxI=200;
	ch0->MaxErr=1e+006;
	ch0->MaxOutput=200;
	ch0->DeadBandGain=1;
	ch0->DeadBandRange=0;
	ch0->InputChan0=0;
	ch0->InputChan1=0;
	ch0->OutputChan0=0;
	ch0->OutputChan1=0;
	ch0->MasterAxis=-1;
	ch0->LimitSwitchOptions=0x103;
	ch0->LimitSwitchNegBit=1;
	ch0->LimitSwitchPosBit=1;
	ch0->SoftLimitPos=1e+009;
	ch0->SoftLimitNeg=-1e+009;
	ch0->InputGain0=1;
	ch0->InputGain1=1;
	ch0->InputOffset0=0;
	ch0->InputOffset1=0;
	ch0->OutputGain=1;
	ch0->OutputOffset=0;
	ch0->SlaveGain=1;
	ch0->BacklashMode=BACKLASH_OFF;
	ch0->BacklashAmount=0;
	ch0->BacklashRate=0;
	ch0->invDistPerCycle=1;
	ch0->Lead=0;
	ch0->MaxFollowingError=1000000000;
	ch0->StepperAmplitude=20;

	ch0->iir[0].B0=1;
	ch0->iir[0].B1=0;
	ch0->iir[0].B2=0;
	ch0->iir[0].A1=0;
	ch0->iir[0].A2=0;

	ch0->iir[1].B0=1;
	ch0->iir[1].B1=0;
	ch0->iir[1].B2=0;
	ch0->iir[1].A1=0;
	ch0->iir[1].A2=0;

	ch0->iir[2].B0=0.000768788;
	ch0->iir[2].B1=0.00153758;
	ch0->iir[2].B2=0.000768788;
	ch0->iir[2].A1=1.92076;
	ch0->iir[2].A2=-0.923833;

    EnableAxisDest(0,0.0);
	
	
	// Asse Y
	// _____________________________________________________________

	ch1->InputMode=NO_INPUT_MODE;
	ch1->OutputMode=STEP_DIR_MODE;
	ch1->Vel=40000;
	ch1->Accel=400000;
	ch1->Jerk=4e+006;
	ch1->P=0;
	ch1->I=0.01;
	ch1->D=0;
	ch1->FFAccel=0;
	ch1->FFVel=0;
	ch1->MaxI=200;
	ch1->MaxErr=1e+006;
	ch1->MaxOutput=200;
	ch1->DeadBandGain=1;
	ch1->DeadBandRange=0;
	ch1->InputChan0=1;
	ch1->InputChan1=0;
	ch1->OutputChan0=1;
	ch1->OutputChan1=0;
	ch1->MasterAxis=-1;
	ch1->LimitSwitchOptions=0x103;
	ch1->LimitSwitchNegBit=1;
	ch1->LimitSwitchPosBit=1;
	ch1->SoftLimitPos=1e+009;
	ch1->SoftLimitNeg=-1e+009;
	ch1->InputGain0=1;
	ch1->InputGain1=1;
	ch1->InputOffset0=0;
	ch1->InputOffset1=0;
	ch1->OutputGain=1;
	ch1->OutputOffset=0;
	ch1->SlaveGain=1;
	ch1->BacklashMode=BACKLASH_OFF;
	ch1->BacklashAmount=0;
	ch1->BacklashRate=0;
	ch1->invDistPerCycle=1;
	ch1->Lead=0;
	ch1->MaxFollowingError=1000000000;
	ch1->StepperAmplitude=20;

	ch1->iir[0].B0=1;
	ch1->iir[0].B1=0;
	ch1->iir[0].B2=0;
	ch1->iir[0].A1=0;
	ch1->iir[0].A2=0;

	ch1->iir[1].B0=1;
	ch1->iir[1].B1=0;
	ch1->iir[1].B2=0;
	ch1->iir[1].A1=0;
	ch1->iir[1].A2=0;

	ch1->iir[2].B0=0.000769;
	ch1->iir[2].B1=0.001538;
	ch1->iir[2].B2=0.000769;
	ch1->iir[2].A1=1.92081;
	ch1->iir[2].A2=-0.923885;
	
	EnableAxisDest(1,0.0);
	
	
	// Asse Z
	// _____________________________________________________________

	ch2->InputMode=NO_INPUT_MODE;
	ch2->OutputMode=STEP_DIR_MODE;
	ch2->Vel=40000;
	ch2->Accel=400000;
	ch2->Jerk=4e+006;
	ch2->P=0;
	ch2->I=0.01;
	ch2->D=0;
	ch2->FFAccel=0;
	ch2->FFVel=0;
	ch2->MaxI=200;
	ch2->MaxErr=1e+006;
	ch2->MaxOutput=200;
	ch2->DeadBandGain=1;
	ch2->DeadBandRange=0;
	ch2->InputChan0=2;
	ch2->InputChan1=0;
	ch2->OutputChan0=2;
	ch2->OutputChan1=0;
	ch2->MasterAxis=-1;
	ch2->LimitSwitchOptions=0x103;
	ch2->LimitSwitchNegBit=1;
	ch2->LimitSwitchPosBit=1;
	ch2->SoftLimitPos=1e+009;
	ch2->SoftLimitNeg=-1e+009;
	ch2->InputGain0=1;
	ch2->InputGain1=1;
	ch2->InputOffset0=0;
	ch2->InputOffset1=0;
	ch2->OutputGain=1;
	ch2->OutputOffset=0;
	ch2->SlaveGain=1;
	ch2->BacklashMode=BACKLASH_OFF;
	ch2->BacklashAmount=0;
	ch2->BacklashRate=0;
	ch2->invDistPerCycle=1;
	ch2->Lead=0;
	ch2->MaxFollowingError=1000000000;
	ch2->StepperAmplitude=20;

	ch2->iir[0].B0=1;
	ch2->iir[0].B1=0;
	ch2->iir[0].B2=0;
	ch2->iir[0].A1=0;
	ch2->iir[0].A2=0;

	ch2->iir[1].B0=1;
	ch2->iir[1].B1=0;
	ch2->iir[1].B2=0;
	ch2->iir[1].A1=0;
	ch2->iir[1].A2=0;

	ch2->iir[2].B0=0.000769;
	ch2->iir[2].B1=0.001538;
	ch2->iir[2].B2=0.000769;
	ch2->iir[2].A1=1.92081;
	ch2->iir[2].A2=-0.923885;

	EnableAxisDest(2,0.0);
    
    
    // Asse Z
	// _____________________________________________________________

	ch3->InputMode=NO_INPUT_MODE;
	ch3->OutputMode=STEP_DIR_MODE;
	ch3->Vel=40000;
	ch3->Accel=400000;
	ch3->Jerk=4e+006;
	ch3->P=0;
	ch3->I=0.01;
	ch3->D=0;
	ch3->FFAccel=0;
	ch3->FFVel=0;
	ch3->MaxI=200;
	ch3->MaxErr=1e+006;
	ch3->MaxOutput=200;
	ch3->DeadBandGain=1;
	ch3->DeadBandRange=0;
	ch3->InputChan0=3;
	ch3->InputChan1=0;
	ch3->OutputChan0=3;
	ch3->OutputChan1=0;
	ch3->MasterAxis=-1;
	ch3->LimitSwitchOptions=0x103;
	ch3->LimitSwitchNegBit=1;
	ch3->LimitSwitchPosBit=1;
	ch3->SoftLimitPos=1e+009;
	ch3->SoftLimitNeg=-1e+009;
	ch3->InputGain0=1;
	ch3->InputGain1=1;
	ch3->InputOffset0=0;
	ch3->InputOffset1=0;
	ch3->OutputGain=1;
	ch3->OutputOffset=0;
	ch3->SlaveGain=1;
	ch3->BacklashMode=BACKLASH_OFF;
	ch3->BacklashAmount=0;
	ch3->BacklashRate=0;
	ch3->invDistPerCycle=1;
	ch3->Lead=0;
	ch3->MaxFollowingError=1000000000;
	ch3->StepperAmplitude=20;

	ch3->iir[0].B0=1;
	ch3->iir[0].B1=0;
	ch3->iir[0].B2=0;
	ch3->iir[0].A1=0;
	ch3->iir[0].A2=0;

	ch3->iir[1].B0=1;
	ch3->iir[1].B1=0;
	ch3->iir[1].B2=0;
	ch3->iir[1].A1=0;
	ch3->iir[1].A2=0;

	ch3->iir[2].B0=0.000769;
	ch3->iir[2].B1=0.001538;
	ch3->iir[2].B2=0.000769;
	ch3->iir[2].A1=1.92081;
	ch3->iir[2].A2=-0.923885;

	EnableAxisDest(3,0.0);
	
    DefineCoordSystem(0, 1, 2, 3);
	

    
    
	// Watchdogs
	// =====================================================
	
	// Enable dei drivers
	
	int result;

	for (;;) { // loop forever
		WaitNextTimeSlice();
		
		// Handle ESTOP
		result = Debounce(ReadBit(ESTOP),&ecount,&elast,&elastsolid);
		if  (result == 0){
			DoPC(PC_COMM_ESTOP);
		}
	}
    return 0;
}

// Put a Float as a parameter and pass the command to the App
int DoPCFloat(int cmd, float f){
	int result;
	persist.UserData[PC_COMM_PERSIST+1] = *(int*)&f;
	return DoPC(cmd);
}


// Pass a command to the PC and wait for it to handshake
// that it was received by either clearing the command
// or changing it to a negative error code
int DoPC(int cmd){
	int result;
	
	persist.UserData[PC_COMM_PERSIST]=cmd;
	
	do{
		WaitNextTimeSlice();	
	}while (result=persist.UserData[PC_COMM_PERSIST]>0);
	
	printf("Result = %d\n",result);

	return result;
}


// Debounce a bit
//
// return 1 one time when first debounced high 
// return 0 one time when first debounced low 
// return -1 otherwise 
#define DBTIME 300

int Debounce(int n, int *cnt, int *last, int *lastsolid){
	int v = -1;
	
	if (n == *last)  // same as last time?
	{
		if (*cnt == DBTIME-1)
		{
			if (n != *lastsolid)
			{
				v = *lastsolid = n;  // return debounced value
			}
		}
		if (*cnt < DBTIME)	(*cnt)++;
	}
	else
	{
		*cnt = 0;  // reset count
	}
	*last = n;
	return v;
}
Circa la 2) ha lo stesso comportamento sia se lanci il GCode in Mach3 che in KMotionCNC ? (posto che il preambolo sia gestito da KMotionCNC).
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Pedro
God
God
Messaggi: 7084
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da Pedro » giovedì 20 novembre 2014, 9:12

per il punto 1) lo immaginavo. La destination nell'enable serve per alcuni scopi molto specifici

per il punto 2) ho il server in "manutenzione di sistema" ora, e non posso accedere ai programmi cnc, all'ora di pranzo, o di cena perchè ste cose sono imprevedibili :lol: , vedrò di che si tratta meglio. A me non lo fa, non che io sia la pietra di paragone ma per dire che non è un errore ma una impostazione.
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da walgri » giovedì 20 novembre 2014, 9:14

Pedro, quando hai tempo e voglia, quali sono questi scopi molto specifici ?
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
arm
Senior
Senior
Messaggi: 2711
Iscritto il: venerdì 18 maggio 2007, 13:21
Località: arborea (OR) e firenze
Contatta:

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da arm » giovedì 20 novembre 2014, 9:16

Perfetto, grazie Pedro e Walgri.
1) Quindi devo modificare nel file Init, alla fine di ogni colonna di righe relativa ad ogni asse la dicitura:

Da "EnableAxisDest(0,0.0)" in "EnableAxis (0,0,0)",

Da "EnableAxisDest(1,0.0)" in "EnableAxis (1,0,0)

e così gli altri

2) stasera riprovo e metto un filmatino. Su pc che uso per disegnare quindi non colleggato alla cnc, non mi dà quel problema, il gcode parte subito alla velocità impostata nel gcode.
In realtà quando invece apro mach3 su Kflop, nella finestra del Feed vedo un valore molto basso, mi pare 6 o 60 e quando carico il gcode sembra che parta con quella velocità, poi quando la Z arriva a destinazione parte regolare.
Comunque forse con un pò di immagini è più chiaro. A stasera

grazie mille
L'arte è l'espressione di piacere che l'uomo prova nel lavoro. (William Morris artigiano - architetto 1834-1896)
Cnc 3 assi per alluminio, 600x350, ponte fisso
Cnc 3 assi+1, 1200x800, doppia vite
Fresatrice verticale per acciaio

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da walgri » giovedì 20 novembre 2014, 9:22

1) In EnableAxis devi mettere solo il numero dell'asse:

EnableAxis(0);
EnableAxis(1);
...
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Pedro
God
God
Messaggi: 7084
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da Pedro » giovedì 20 novembre 2014, 10:22

ehhh :lol:

gli scopi specifici sono quelli che ovviamente non riguardano il controllo diretto da parte del cam dell'asse in questione, abbiamo visto gli effetti, vanno fuori sync. Però si potrebbe usare un asse virtuale per altri scopi, io li uso in continuazione, come i float head. Oppure si potrebbe cambiare un asse tra due canali. Allora, facciamo l'esempio che per metà "lavorazione" (e per lavorazione intendo qualsiasi cosa anche diverso dal cnc classico) voglio che un asse abbia un certo tipo di controllo e per l'altra metà un altro. Che faccio? mi costruisco due ch diversi con impostazioni diverse e poi associo prima uno e poi l'altro a quest'asse. Quando, facciamola semplice associando ch0 o ch1 all'asse zero, sposti da ch0 a ch1, facile no?, ch1 non sa in che posizione ero sul ch0. Allora la leggo e quando inizializzo il ch1 la trasporto con EnableAxisDest(0,coordinate prese precedentemente). Semplice no?
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da walgri » giovedì 20 novembre 2014, 10:27

Love it !
Adoro questo controllo :D
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Pedro
God
God
Messaggi: 7084
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da Pedro » giovedì 20 novembre 2014, 10:34

mi chiedo, dopo aver rapidamente guardato il file di configurazione, perchè usi i filtri? sugli OL normalmente basta la vel e acc non ci sono diagrammi di bode da correggere più di un tot. Non è quella la causa del ritardo di z ma non capisco perchè hai messo i filtri
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da walgri » giovedì 20 novembre 2014, 10:44

Non sono lì volontariamente. Partii da un init.c "standard", che evidentemente non era abbastanza "standard". A orecchiometro e ad oculometro pareva tutto a posto e quindi sono rimasti lì. In effetti è meglio sistemare anche quello.

Sui filtri devo ancora iniziare gli studi. :doubt:
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
arm
Senior
Senior
Messaggi: 2711
Iscritto il: venerdì 18 maggio 2007, 13:21
Località: arborea (OR) e firenze
Contatta:

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da arm » giovedì 20 novembre 2014, 11:00

Siete mitici.
Mi sento come un bimbo nel grembo della mamma :lol:
L'arte è l'espressione di piacere che l'uomo prova nel lavoro. (William Morris artigiano - architetto 1834-1896)
Cnc 3 assi per alluminio, 600x350, ponte fisso
Cnc 3 assi+1, 1200x800, doppia vite
Fresatrice verticale per acciaio

Avatar utente
Pedro
God
God
Messaggi: 7084
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da Pedro » giovedì 20 novembre 2014, 11:38

arm, postaci anche il tuo gcode che "rallenta"
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Avatar utente
walgri
God
God
Messaggi: 4735
Iscritto il: giovedì 13 gennaio 2011, 18:37
Località: Cagliari

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da walgri » giovedì 20 novembre 2014, 15:51

Per dovere di cronaca, ma non a mia discolpa, il file init da cui partii era quello chiamato InitStepDir3Axis.c presente nella cartella "C Programs". :study:
...stop chasing shadows, just enjoy the ride.
Aìna pantografoTelemetria per KFlopBlenderCAM STL + DXF

Avatar utente
Pedro
God
God
Messaggi: 7084
Iscritto il: domenica 6 aprile 2008, 18:44
Località: Roma

Re: Mach3-Kflop: problemi azzeramento assi

Messaggio da Pedro » giovedì 20 novembre 2014, 16:02

ma si, mica è un problema; era solo per capire
"Ho controllato molto approfonditamente," disse il computer, "e questa è sicuramente la risposta. Ad essere sinceri, penso che il problema sia che voi non abbiate mai saputo veramente qual è la domanda."

Rispondi

Torna a “Mach3”