Homing preciso...

Sezione dedicata a Mach3
Rispondi
Avatar utente
El Ventu
Senior
Senior
Messaggi: 728
Iscritto il: sabato 29 novembre 2008, 11:45
Località: Cesena

Re: Homing preciso...

Messaggio da El Ventu » mercoledì 19 marzo 2025, 0:56

Questa è (per ora) la macro.
Velocità e ritrazioni "da banco", al momento i motori non sono montati.
Si porta rapida al proximity, poi rallenta fino al sensore preciso e si sposta di tot distanza.
Se il proximity non viene attivato (per questioni di deviazione meccanica che aumenta la distanza del traferro, ad esempio), raggiunto il micro preciso la macchina si blocca in E-Stop, dato che prima dellinterv del proximity l'ingresso del micro preciso viene settato come tale.

Codice: Seleziona tutto

Config_ Config = new Config_{
 //X Axis
 X = new AxisConfig{ AxisName = "X",
      //Inputs
      ProximityPin = new Setting{ Value = 1, ScreenField = 5},
      ProximityPort = new Setting{ Value = 2, ScreenField = 245},
      MicroPin = new Setting{ Value = 2, ScreenField = 5},
      MicroPort = new Setting{ Value = 2, ScreenField = 245},
      EstopPin = new Setting{ Value = 2, ScreenField = 91},
      EstopPort = new Setting{ Value = 2, ScreenField = 271},
      HomePin = new Setting{ Value = 0, ScreenField = 91},
      HomePort = new Setting{ Value = 0, ScreenField = 271},
      //Feedrates
      FastHomingUp = new Setting{ Value = 1000, ScreenField = 6},
      FastHomingDown = new Setting{ Value = 250, ScreenField = 15},
      FastHomingBack = new Setting{ Value = 0, ScreenField = 2621},
      SlowHomingUp =  new Setting{ Value = 50, ScreenField = 6},
      SlowHomingDown = new Setting{ Value = 10, ScreenField = 15},
      SlowHomingBack = new Setting{ Value = 5, ScreenField = 2621},
      //Buttons
      HomingButton = 107
 },
 //Y Axis
 Y = new AxisConfig{ AxisName = "Y",
      //Inputs
      ProximityPin = new Setting{ Value = 1, ScreenField = 20},
      ProximityPort = new Setting{ Value = 2, ScreenField = 250},
      MicroPin = new Setting{ Value = 2, ScreenField = 20},
      MicroPort = new Setting{ Value = 2, ScreenField = 250},
      EstopPin = new Setting{ Value = 2, ScreenField = 91},
      EstopPort = new Setting{ Value = 2, ScreenField = 271},
      HomePin = new Setting{ Value = 0, ScreenField = 91},
      HomePort = new Setting{ Value = 0, ScreenField = 271},
      //Feedrates
      FastHomingUp = new Setting{ Value = 1000, ScreenField = 21},
      FastHomingDown = new Setting{ Value = 250, ScreenField = 30},
      FastHomingBack = new Setting{ Value = 0, ScreenField = 2622},
      SlowHomingUp =  new Setting{ Value = 50, ScreenField = 21},
      SlowHomingDown = new Setting{ Value = 10, ScreenField = 30},
      SlowHomingBack = new Setting{ Value = 3, ScreenField = 2622},
      //Buttons
      HomingButton = 108
 },
 //Z Axis
 Z = new AxisConfig{ AxisName = "Z",
      //Inputs
      ProximityPin = new Setting{ Value = 1, ScreenField = 35},
      ProximityPort = new Setting{ Value = 2, ScreenField = 255},
      MicroPin = new Setting{ Value = 2, ScreenField = 35},
      MicroPort = new Setting{ Value = 2, ScreenField = 255},
      EstopPin = new Setting{ Value = 2, ScreenField = 91},
      EstopPort = new Setting{ Value = 2, ScreenField = 271},
      HomePin = new Setting{ Value = 0, ScreenField = 91},
      HomePort = new Setting{ Value = 0, ScreenField = 271},
      //Feedrates
      FastHomingUp = new Setting{ Value = 500, ScreenField = 36},
      FastHomingDown = new Setting{ Value = 250, ScreenField = 45},
      FastHomingBack = new Setting{ Value = 0, ScreenField = 2623},
      SlowHomingUp =  new Setting{ Value = 50, ScreenField = 36},
      SlowHomingDown = new Setting{ Value = 10, ScreenField = 45},
      SlowHomingBack = new Setting{ Value = -3, ScreenField = 2623},
      //Buttons
      HomingButton = 109
 }
};


exec.AddStatusmessage( "!!!Double Homing Started!!!" );
DoubleHoming(Config.Z);
DoubleHoming(Config.X);
DoubleHoming(Config.Y);
exec.AddStatusmessage( "!!!Double Homing Finished!!!" );


#Events

int ApplysettingsButton = 168;

struct Setting {
 public double Value;
 public int ScreenField;
}

struct AxisConfig {
 public string AxisName;
 //Proximity Input
 public Setting ProximityPin;
 public Setting ProximityPort;
 public Setting EstopPin;
 public Setting EstopPort;
 public Setting MicroPin;
 public Setting MicroPort;
 public Setting HomePin;
 public Setting HomePort;
 //Feedrates
 public Setting FastHomingUp;
 public Setting FastHomingDown;
 public Setting FastHomingBack;
 public Setting SlowHomingUp;
 public Setting SlowHomingDown;
 public Setting SlowHomingBack;
 //Buttons
 public int HomingButton;
}

struct Config_{
 public AxisConfig X;
 public AxisConfig Y;
 public AxisConfig Z;
}

void DoubleHoming(AxisConfig AC)
{
 //Fast homing
 exec.AddStatusmessage( "- Fast Homing " + AC.AxisName + " Axis -");
 //set proximity as home sensor
 setFieldValue(AC.ProximityPin);
 setFieldValue(AC.ProximityPort);
 setFieldValue(AC.EstopPin);
 setFieldValue(AC.EstopPort);
 //set fast feedrates
 setFieldValue(AC.FastHomingUp);
 setFieldValue(AC.FastHomingDown);
 setFieldValue(AC.FastHomingBack);
 //Applysettings
 exec.Callbutton(ApplysettingsButton);
 //home axis
 exec.Callbutton(AC.HomingButton);
 while(exec.IsMoving()){}
 
 //Slow homing
 exec.AddStatusmessage( "- Slow Homing " + AC.AxisName + " Axis -");
 //set precision switch as home sensor
 setFieldValue(AC.MicroPin);
 setFieldValue(AC.MicroPort);
 setFieldValue(AC.HomePin);
 setFieldValue(AC.HomePort);
 //set slow feedrates
 setFieldValue(AC.SlowHomingUp);
 setFieldValue(AC.SlowHomingDown);
 setFieldValue(AC.SlowHomingBack);
 //Applysettings
 exec.Callbutton(ApplysettingsButton);
 //home axis
 exec.Callbutton(AC.HomingButton);
 while(exec.IsMoving()){}
}

void setFieldValue(Setting s){
 AS3.Setfield(s.Value, s.ScreenField);
 AS3.Validatefield(s.ScreenField);
}

Avatar utente
El Ventu
Senior
Senior
Messaggi: 728
Iscritto il: sabato 29 novembre 2008, 11:45
Località: Cesena

Re: Homing preciso...

Messaggio da El Ventu » domenica 20 aprile 2025, 23:10

Fiveaxis ha scritto:
martedì 17 settembre 2024, 22:11
@ El Ventu
Chi sperimenta di solito mi è simpatico! :mrgreen:
Detto questo, non avendo capito esattamente cosa intendi per "preciso", ti faccio il mio miglior "in bocca al lupo".

(Seguo con curiosità... :D)
Messaggio vecchio, ma mi sono accorto di non avere risposto.

Allora, come ho scritto, la necessità è di poter ripartire da un giorno all'altro senza dovermi rompere i maroni ad azzerarmi sul pezzo.

La questione è che, dovendo spendere poco e avendo poco spazio, le alternative per i sensori di homing sono limitate.
Ho avuto 'sta botta di culo trovando i micro della Metrol a poco, che sono, se vogliamo, anche troppo precisi, ma tant'è.
Se sei senza macchina e l'unica che trovi è una F40 a 1000€ la prendi e la usi, mica vai a piedi, no?

I proximity hanno deviazioni tra caldo e freddo (e anche a livello di ripetibilità da scheda tecnica) di un ordine di grandezza superiore ai Metrol.

Quello che volevo evitare era solo di avere un homing troppo inaffidabile, diciamo che con ripetibilità +/- 0.05 già mi andava poco bene.

L'unica paura era di andare a sbattere nei Metrol, che la botta di culo di trovarli a prezzo non capita spesso, e dato che so che con l'abitudine all'avvio mi sarei andato ad avvicinare sempre di più in manuale per ridurre i tempi, avrei rischiato di andarci contro.

Con la procedura che abbiamo implementato quando avvio l'homing la macchina parte "allegra" verso i proximity (in quel frangente i Metrol sono presi in considerazione come attivazione dell'emergenza, quindi se un proximity non viene letto per un qualsiasi motivo, all'intervento del Metrol la macchina si pianta), poi ritrae di un pelo finché il proximity non si disattiva come da procedura homing, e poi ripete la procedura di homing a velocità minima fino ai Metrol.

Da lì so che ho lo zero preciso.

Poi la macchina avrà i suoi giochi e limiti, senza dubbio alcuno, come ho detto non ho alcuna pretesa di ottenere i risultati di un centro di lavoro professionale.

Rimane il fatto che se ho il punto home preciso ai 5micron, da lì la macchina si sposta con la ripetibilità che gli viene dal resto della meccanica.
Se invece ho un punto home che varia di un decimo, questo si somma e potrebbe dare noia.

Insomma, se posso fare le cose meglio, perché no?
Poi la domanda era precisa, e ha ottenuto risposta precisa, purtroppo altrove.

Rispondi

Torna a “Mach3”