Automatic nozzle change, software aspects

Post Reply
JuKu
Site Admin
Posts: 1114
Joined: Thu Feb 14, 2013 3:06 pm
Location: Tampere, Finland
Contact:

Automatic nozzle change, software aspects

Post by JuKu »

I'm opening a new thread for this to collect software issues for automatic nozzle change to one thread. Currently, there are a couple of thread about nozzles. Not all have same nozzles, which makes software support a bit more challenging. Also, I don't have an automatic nozzle change system myself (yet), so I don't have a crystal clear idea about how exactly automatic nozzle change should happen. How would you like that integrated to the software?

Some ideas or issues that come to mind:

- Maybe the job file should have a column for the nozzle used? Or would it be better to have an "auto nozzle change" operation with the nozzle as a parameter? The latter would give you clearer view on what will happen in what order when running a job.

- How would the software know what nozzle is attached in the startup?

- A manually triggered automatic change is probably needed. How?

- How to define nozzle change operation? My first idea is to have a table of coordinates defining a sequence of positions:

Code: Select all

nozzle   operation       position1                       position2                   position3                   (as many positions as needed)
1           release      X: ... Y: ... Z: ... A: ...   X: ... Y: ... Z: ... A: ...   X: ... Y: ... Z: ... A: ...  ...
1           attach       X: ... Y: ... Z: ... A: ...   X: ... Y: ... Z: ... A: ...   X: ... Y: ... Z: ... A: ...  ...
2           release      X: ... Y: ... Z: ... A: ...   X: ... Y: ... Z: ... A: ...   X: ... Y: ... Z: ... A: ...  ...
2           attach       X: ... Y: ... Z: ... A: ...   X: ... Y: ... Z: ... A: ...   X: ... Y: ... Z: ... A: ...  ...
...
But first ideas are not necessarily the best ones.

what other issues should be considered?

[Unrelated: The "everything visible" style UI was clean when I started, but isn't so clean anymore. Adding this would be the last straw and likely, result to a traditional menu bar and setup screens. But that is another discussion. Also, unless this turns out to be rather trivial to implement, I'll add first other stuff on my todo list.]
Pixopax
Posts: 122
Joined: Tue Feb 02, 2016 4:16 pm

Re: Automatic nozzle change, software aspects

Post by Pixopax »

You should add a field to the tapes, where one can add the needed nozzle-number, that way you do not have to look for the proper nozzle, you define it for every part.

Then you need to have a nozzle-table, where one can add his nozzles, numbered from 1 to x
These numbers stay the same, so the software can see on the nozzle-number in the tape which nozzle is needed.

In the Rmod-fork there is a nozzle changer, you can define your nozzles, together with a camera filter for each nozzle, if you like.
Then each nozzle has a number of movements, which can be taken from needle or camera positions too. As far as I know unlimited positions are possible, it is a list.
This way you can design every possible nozzle changer movement quite easy.

It also has a table where one can enter x1,y1,x2,y2-areas where the nozzle should keep out when changing.

Maybe you should have a look in the rmod-fork for that, it has an own page for the changer.

Louis
Pixopax
Posts: 122
Joined: Tue Feb 02, 2016 4:16 pm

Re: Automatic nozzle change, software aspects

Post by Pixopax »

I tested my changer yesterday, it really works simple.

I just entered the nozzles (1-5), and then added the movements for every nozzle.
In my case for nozzle 1

x200 y10 z1 Move to nozzle
x200 y10 z28 Go down to insert the nozzle
x200 y20 z28 Slip out of the nozzle holder
x200 y20 z1 Move up to get the nozzle out of the holder

For unloading, this sequense is done in backward direction.
Yshiron
Posts: 5
Joined: Tue May 10, 2016 8:54 pm

Re: Automatic nozzle change, software aspects

Post by Yshiron »

in my case i config every needlae movment
by built the 2 function

1: Put_back_Needle();
2: Take_on_Needle();

the code look like this

case "Change needle":
if (Component == "--")
{
ShowMessageBox(
"Please select the correct Needle",
"Data error",
MessageBoxButtons.OK);
return false;
}
if (Component == "Needle1_to_2") {
Put_back_Needle1();
Take_on_Needle2();
// return false;
}
if (Component == "Needle1_to_3")
{
Put_back_Needle1();
Take_on_Needle3();
// return false;
}

if (Component == "Needle2_to_1")
{
Put_back_Needle2();
Take_on_Needle1();
// return false;
}
if (Component == "Needle2_to_3")
{
Put_back_Needle2();
Take_on_Needle3();
// return false;
}
if (Component == "Needle3_to_1")
{
Put_back_Needle3();
Take_on_Needle1();
// return false;
}
if (Component == "Needle3_to_2")
{
Put_back_Needle3();
Take_on_Needle2();
// return false;
}
break;

and the function are:

// Put_back_Needle1
private bool Put_back_Needle1()
{
CNC_Write_m("{\"zsn\":0}");
CNC_Write_m("{\"zsx\":0}");
Thread.Sleep(20);
double Needle1posX = 24.5;
double Needle1posY = 15;
PumpOff();
Zlim_checkBox.Checked = true;
Zhome_checkBox.Checked = true;
Needle.Calibrated = false;
ValidMeasurement_checkBox.Checked = false;
Thread.Sleep(20);
CNC_Z_m(0.0);
CNC_XY_m(Needle1posX, Needle1posY);
Thread.Sleep(20);
CNC_Z_m(35.5);
Cnc.CurrentZ = 0;
CNC_XY_m(Needle1posX, Needle1posY - 12);
Thread.Sleep(20);
Cnc.CurrentZ = 35.5;
CNC_Z_m(0.0);
CNC_Write_m("{\"zsn\":3}");
CNC_Write_m("{\"zsx\":2}");
Thread.Sleep(20);
if (!BuildMachineCoordinateData_m())
{
return false;
}
//PumpOn();
return true;
}


// =================================================================================
// Take_on_Needle1
private bool Take_on_Needle1()
{
CNC_Write_m("{\"zsn\":0}");
CNC_Write_m("{\"zsx\":0}");
Thread.Sleep(20);
double Needle1posX = 24.5;
double Needle1posY = 3;
Zlim_checkBox.Checked = true;
Zhome_checkBox.Checked = true;
Needle.Calibrated = false;
ValidMeasurement_checkBox.Checked = false;
Thread.Sleep(20);
CNC_Z_m(0.0);
CNC_XY_m(Needle1posX, Needle1posY);
Thread.Sleep(20);
CNC_Z_m(38.5);
Thread.Sleep(200);
CNC_Z_m(35.5);
Cnc.CurrentZ = 0;
CNC_XY_m(Needle1posX, Needle1posY + 12);
Thread.Sleep(20);
Cnc.CurrentZ = 35.5;
CNC_Z_m(0.0);
CNC_Write_m("{\"zsn\":3}");
CNC_Write_m("{\"zsx\":2}");
Thread.Sleep(20);
if (!BuildMachineCoordinateData_m())
{
return false;
}
PumpOn();
return true;
}



// =================================================================================
// Put_back_Needle2
private bool Put_back_Needle2()
{
CNC_Write_m("{\"zsn\":0}");
CNC_Write_m("{\"zsx\":0}");
Thread.Sleep(20);
double Needle1posX = 39.8;
double Needle1posY = 15;
PumpOff();
Zlim_checkBox.Checked = true;
Zhome_checkBox.Checked = true;
Needle.Calibrated = false;
ValidMeasurement_checkBox.Checked = false;
Thread.Sleep(20);
CNC_Z_m(0.0);
CNC_XY_m(Needle1posX, Needle1posY);
Thread.Sleep(20);
CNC_Z_m(35.5);
Cnc.CurrentZ = 0;
CNC_XY_m(Needle1posX, Needle1posY - 12);
Thread.Sleep(20);
Cnc.CurrentZ = 35.5;
CNC_Z_m(0.0);
CNC_Write_m("{\"zsn\":3}");
CNC_Write_m("{\"zsx\":2}");
Thread.Sleep(20);
if (!BuildMachineCoordinateData_m())
{
return false;
}
//PumpOn();
return true;
}

// =================================================================================
// Take_on_Needle2
private bool Take_on_Needle2()
{
CNC_Write_m("{\"zsn\":0}");
CNC_Write_m("{\"zsx\":0}");
Thread.Sleep(20);
double Needle1posX = 39.8;
double Needle1posY = 3;
Zlim_checkBox.Checked = true;
Zhome_checkBox.Checked = true;
Needle.Calibrated = false;
ValidMeasurement_checkBox.Checked = false;
Thread.Sleep(20);
CNC_Z_m(0.0);
CNC_XY_m(Needle1posX, Needle1posY);
Thread.Sleep(20);
CNC_Z_m(38.5);
Thread.Sleep(200);
CNC_Z_m(35.5);
Cnc.CurrentZ = 0;
CNC_XY_m(Needle1posX, Needle1posY + 12);
Thread.Sleep(20);
Cnc.CurrentZ = 35.5;
CNC_Z_m(0.0);
CNC_Write_m("{\"zsn\":3}");
CNC_Write_m("{\"zsx\":2}");
Thread.Sleep(20);
if (!BuildMachineCoordinateData_m())
{
return false;
}
PumpOn();
return true;
}


// =================================================================================
// Put_back_Needle3
private bool Put_back_Needle3()
{
CNC_Write_m("{\"zsn\":0}");
CNC_Write_m("{\"zsx\":0}");
Thread.Sleep(20);
double Needle1posX = 54.8;
double Needle1posY = 15;
PumpOff();
Zlim_checkBox.Checked = true;
Zhome_checkBox.Checked = true;
Needle.Calibrated = false;
ValidMeasurement_checkBox.Checked = false;
Thread.Sleep(20);
CNC_Z_m(0.0);
CNC_XY_m(Needle1posX, Needle1posY);
Thread.Sleep(20);
CNC_Z_m(35.5);
Cnc.CurrentZ = 0;
CNC_XY_m(Needle1posX, Needle1posY - 12);
Thread.Sleep(20);
Cnc.CurrentZ = 35.5;
CNC_Z_m(0.0);
CNC_Write_m("{\"zsn\":3}");
CNC_Write_m("{\"zsx\":2}");
Thread.Sleep(20);
if (!BuildMachineCoordinateData_m())
{
return false;
}
//PumpOn();
return true;
}

// =================================================================================
// Take_on_Needle3
private bool Take_on_Needle3()
{
CNC_Write_m("{\"zsn\":0}");
CNC_Write_m("{\"zsx\":0}");
Thread.Sleep(20);
double Needle1posX = 54.8;
double Needle1posY = 3;
Zlim_checkBox.Checked = true;
Zhome_checkBox.Checked = true;
Needle.Calibrated = false;
ValidMeasurement_checkBox.Checked = false;
Thread.Sleep(20);
CNC_Z_m(0.0);
CNC_XY_m(Needle1posX, Needle1posY);
Thread.Sleep(20);
CNC_Z_m(38.5);
Thread.Sleep(200);
CNC_Z_m(35.5);
Cnc.CurrentZ = 0;
CNC_XY_m(Needle1posX, Needle1posY + 12);
Thread.Sleep(20);
Cnc.CurrentZ = 35.5;
CNC_Z_m(0.0);
CNC_Write_m("{\"zsn\":3}");
CNC_Write_m("{\"zsx\":2}");
Thread.Sleep(20);
if (!BuildMachineCoordinateData_m())
{
return false;
}
PumpOn();
return true;
}

the configuration in the Lite placer software is like that:
Attachments
needle config.jpg
needle config.jpg (156.33 KiB) Viewed 28132 times
Pixopax
Posts: 122
Joined: Tue Feb 02, 2016 4:16 pm

Re: Automatic nozzle change, software aspects

Post by Pixopax »

Far too complicated for me,
have a look at the rmod-release:
nozch.jpg
nozch.jpg (37.18 KiB) Viewed 28130 times
You just add the nozzle number to the tape, and the software changes the nozzle itself, no need for "change from 1 to 3" in the parts list.
Yshiron
Posts: 5
Joined: Tue May 10, 2016 8:54 pm

Re: Automatic nozzle change, software aspects

Post by Yshiron »

cool !!! :o

can you share the code ?
Pixopax
Posts: 122
Joined: Tue Feb 02, 2016 4:16 pm

Re: Automatic nozzle change, software aspects

Post by Pixopax »

It is in the rmod-fork of the software.
Yshiron
Posts: 5
Joined: Tue May 10, 2016 8:54 pm

Re: Automatic nozzle change, software aspects

Post by Yshiron »

can you direct me to it

i am not find it... :(
Yshiron
Posts: 5
Joined: Tue May 10, 2016 8:54 pm

Re: Automatic nozzle change, software aspects

Post by Yshiron »

Thanks lot friend...but where the installer file
my system is windows7

please your advice
Post Reply