Slot Feeders

383 views
Skip to first unread message

Jason von Nieda

unread,
Jan 16, 2017, 11:08:53 PM1/16/17
to ope...@googlegroups.com
Hi all,

I've just committed the first version of a new slot feeder system for OpenPnP. Slot feeders allow you to have auto feeders that can be moved around the machine without reconfiguring them. The release notes are below.

I want to personally thank Matt Brocklehurst for all the work he did in bringing this feature to OpenPnP. The ideas in his code are what lead the design of this module. This version does not have quite as much functionality as his design, but it moves us forward and will be improved in the future. Thank you Matt!

------

A new feeder called ReferenceSlotAutoFeeder has been added which provides the capability of a movable auto feeder.

ReferenceSlotAutoFeeder allows you to define any number of feeder slots on your machine and each one can contain a feeder. By changing the feeder in a slot you move it's settings from slot to slot without having to reconfigure it's position, part or other settings.

The primary purpose of this feeder is for machines that have auto feeders that can be readily moved from position to position.



------

Thanks,
Jason

Mark Harris

unread,
Jan 17, 2017, 4:37:49 AM1/17/17
to ope...@googlegroups.com
Very very awesome!

--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+unsubscribe@googlegroups.com.
To post to this group, send email to ope...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/CA%2BQw0jxDrbMDiVdZAtKx91cESxTDkwX8oVucTqHgkrQRqBJ%3D6w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Matt Brocklehurst

unread,
Jan 17, 2017, 4:51:29 AM1/17/17
to ope...@googlegroups.com
Hi Jason

Thanks for finishing this idea off - i'd of loved to have seen it through to the end but alas life got in the way.

Matt

To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.

To post to this group, send email to ope...@googlegroups.com.

Jason von Nieda

unread,
Jan 17, 2017, 9:59:44 PM1/17/17
to ope...@googlegroups.com
Over the years people have talked about loading feeders using barcodes. With the new slot feeder system, and the scripting system, this is pretty easy!


The script goes to the pick location for each slot in the system and scans for a QR code using the camera. If it finds one, it looks for a feeder with the same name as the QR code and sets that feeder to the slot. 

Scripts are in the video description if you'd like to try it.

Jason


To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To post to this group, send email to ope...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/CA%2BQw0jxDrbMDiVdZAtKx91cESxTDkwX8oVucTqHgkrQRqBJ%3D6w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To post to this group, send email to ope...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/CAJMBTyQgcoccGr%2BiobGZs0K3ss4VfmRtnAnPRo2ANrF0W6sTjg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To post to this group, send email to ope...@googlegroups.com.

Anthony Webb

unread,
Jan 17, 2017, 10:15:26 PM1/17/17
to ope...@googlegroups.com
I have a feeling this is going to come in handy very soon! :)

To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+unsubscribe@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+unsubscribe@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+unsubscribe@googlegroups.com.

--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+unsubscribe@googlegroups.com.

To post to this group, send email to ope...@googlegroups.com.

Mark Harris

unread,
Jan 17, 2017, 11:31:52 PM1/17/17
to ope...@googlegroups.com
That is even more awesome. Great work jason!

Michael Anton

unread,
Jan 18, 2017, 3:30:08 AM1/18/17
to OpenPnP
Wow, that looks great.  I remember talk of that in FPD days, so it is great to see it working!!!

Glen English

unread,
Jan 18, 2017, 5:22:05 AM1/18/17
to OpenPnP
Hi Jason
appreciate your efforts
However I am a little confused with the operation. . Actually I think the R/W from the XML file is not quite matching what's in the display/ GUI.

also, I think the flow is not quite right... I'll try and explain. I think I am confused because something I regard as a separate 'thing' has been welded to something else.
I'll start from scratch :

The machine has auto feeder positions, each of these has an nominal location and an actuator feed/postpick reference

Then, it has different feeders that plug into these auto feeders. "auto feeder types"

This feeder has a name, like "CL8x4", and a pick offset relative to the feeder nominal position, and a time delay value for the pick time (or the feeder in the driver could know this) . That's all it needs. The part that is loaded into it is NOT described in the feeder type.

so we end up with a tabbed folder of auto feeder types which can be added to. CL8x4, CL8x2, CL16  CL24 CL32 CL44 etc

In "machine setup" tab, we add feeder positions, just like adding actuators , with a name, actuator info, and nominal offset, 
----but we do not add feeder-types. just positions.
 in the TVM920, we have 56 of them each with their own offset and actuator data.

....
so, when it comes to importing a job , we need to tell it where the components are. 
there are a couple of ways to do this ---

one way :

so we import the job PnP data.
Now we have a list of parts in the PARTS tab grid.

in this case we tell  it in the PARTS tab  which feeder position it is located (has been located by the operator) 
AND what type of feeder has been loaded there.(8x4, 16mm, 24mm etc) 
it imports the package data from the import and therefore knows what package to use from the PACKAGE tab.

OR
the machine can walk through looking for the barcode which tells it component name and feeder type (8x2, 8x4, 16mm etc)
- auto filling the missing information in the PARTS tab.

other way :

the machine will likely already have feeders loaded  at positions, and have parts in those
like I might just leave 10k 0603 loaded in Feeder position # 1

In this case, OpenPNP needs to remember what was loaded there and populate the PARTS tab with parts that match already loaded on the machine parts.
OR
we have  a tab which deals with feeder positions and what is loaded.
SO, you can tell OpenPNP in a FEEDER LOCATIONS tab that it has a 0603 10k resistor loaded in a CL8x4 feeder in Feeder Position 4
or... you can tell OpenPNP in the PARTS tab which  feeder position the part is in and what type of feeder is in there
********************
hmm I know... brain dump

more thought required before I brain dump again.

However, as it is, there is too many steps in the one step (Reference AUtoFeeder). Maybe it is the wizard / the configuration dialog that has been all confused)

cheers
glen





Jason von Nieda

unread,
Jan 18, 2017, 10:54:07 AM1/18/17
to OpenPnP
Hi Glen,

I'm not sure if you are describing how you think it should work, or how it works in TVM land, or perhaps something else. I'm a little confused. 

For the sake of clarity, here is how things work in OpenPnP:

* OpenPnP is part centric, not feeder centric. This is different from a lot of other systems. Jobs reference parts, which are permanent, not feeders, which change.
* When you load a job into OpenPnP, we look for feeders that can feed the parts required by the job. If none can be found we flag the part is unavailable and the user will need to load it into a feeder.
* When there is at least one feeder for each part in the job the job can proceed.

The slot feeder system, which is brand new, works in the same way. It's not a new concept, it's just a new type of feeder.

* You set up slots (ReferenceSlotAutoFeeder) for each physical slot in your machine. They have a pick location and actuators. Once configured they should not need to change.
* You have physical feeders, each of which contains a reel. You can change the reel in the feeder. This is the equivalent of changing the Part in the feeder.
* When a job is loaded OpenPnP will look through the slots for the parts it needs. If any are missing, the user is expected to do one of two things:
    1. Load a feeder that contains the right part into a slot.
    2. Load a reel that contains the right part into a feeder.

The barcode demo I posted above is intended to demonstrate one scenario. It's not a "This is how it works" type of thing, but more just an idea of how someone might customize their flow. The scenario in the demo is:

* The operator has more feeders than slots.
* The feeders have reels loaded into them and they have been previously set up.
* The operator has loaded a job that needs a number of parts, so they load those feeders in that have those parts.
* The barcode script determines which feeders have been installed in which slots and mark them so the job can proceed.
* The barcode demo ignores the process of installing reels in the feeders. That's left as an exercise for the reader.

The UI for the slot feeder is confusing, I admit. It's mixing several concepts. It's also version 1. I'm open to suggestions :)

Jason



--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To post to this group, send email to ope...@googlegroups.com.

HauntBots

unread,
Jan 18, 2017, 11:58:30 AM1/18/17
to ope...@googlegroups.com
On my machine, 8mm, 12mm and 16mm feeders have a different pick location.  If I Don't have enough slots for all my feeders and for a particular job I need to add in a 16mm feeder in a slot that previously held and 8mm how does this work.

Pete

Jason von Nieda

unread,
Jan 18, 2017, 12:02:16 PM1/18/17
to ope...@googlegroups.com
Pete, you can set a nominal pick location for the slot and then use the per feeder offsets to adjust the final pick location. Nominal location stays with the slot, offsets stay with the feeder.

If this doesn't work, please explain your situation more fully, maybe with some pictures, and I'll see if it can work or if we need to make changes.

Jason

Jason von Nieda

unread,
Jan 18, 2017, 2:11:41 PM1/18/17
to ope...@googlegroups.com
Quick note on this feature: I just realized there is a rotation calculation bug in the pick location to offsets. If you are trying to use this and something seems wrong with non zero rotations, hang tight. I'll have a fix prepared this evening.

Jason

Glen English

unread,
Jan 18, 2017, 9:30:42 PM1/18/17
to OpenPnP
Hi Jason
thanks for the write up

that helps me understand your thinking. The way I describe it is the Yamaha way....

OK so what the confusion (for me)  is that in ReferenceAutoFeeder, everything is on the one property page, so the relationships are  not obvious 

Reference Auto feeder slot  position :
name, nominal position XYZC ,  and actuator data is the ONLY thing that should be on the property page for defining a reference auto feeder slot position
name : SLOT1
position : 50,100 , -17, 0 
actuator feed name : FEEDOPEN1
actuator postpickname : FEEDPOSTPICK1
then:

there needs to be (IMO)  a  separate  property page for the type of feeder
example :

name : CL8x4, 
pick-offset : XYZC : -5,-2,+1, 0 ; 
feederparam( usually air opening time) ; 250  (mS)

THEN
The parts list contains a feeder type (CL8x4) and the location (Slot position) it is plugged into...
package, feeder type, feeder location 
IE 0402R, CL8x4, SLOT1

AND
somewhere in there :

VISION pipeline information for the package (already in there I think)  

Glen English

unread,
Jan 18, 2017, 9:40:23 PM1/18/17
to OpenPnP
and
(in addition to me post 1 min ago) a clarification

"THEN
The parts list contains a feeder type (CL8x4) and the location (Slot position) it is plugged into...
package, feeder type, feeder location 
IE 0402R, CL8x4, SLOT1"


this stuff  with parts, feeder type, slot # is runtime /  project based, not MACHINE CONFIG.

g



Jason von Nieda

unread,
Jan 18, 2017, 9:55:12 PM1/18/17
to OpenPnP
Hi Glen,

I agree, the config dialog is confusing. I've already reworked it to be much clearer and I will be trying to release that tonight.

That being said, I should clarify further about parts and feeders. Parts list does not contain a feeder type and slot, and it won't. This is the inverse of how OpenPnP treats parts and feeders and it would be a major, major redesign of how the system works. 

As I said earlier, in OpenPnP everything is Part centric, not Feeder centric. In addition, Packages are a separate thing and have their own properties. It's important that we use the same terminology here so we're not crossing our wires.

In OpenPnP, the general model looks like this:

Job -> Board -> Placement -> Part -> Package

Feeder is completely separate from the rest of the model.

And a short summary of each of those:

Job: Contains one or more Boards along with locations of where to find them on the machine.
Board: Contains a list of Placements and some metadata.
Placement: Contains coordinates on the board for where to place a part, along with which Part to place.
Part: Contains a height property, a Package property and a vision pipeline for bottom vision.
Package: Footprint and size data.
Feeder: Primarily a pick location and a Part that it can feed.

When OpenPnP needs to feed a part it just looks for any feeder that claims to carry that part and uses it. There can be none, one, or many and it will automatically move between the ones that are available.

The reason for this model is that jobs, boards, parts and packages are all intended to be sharable. They are considered to be effectively "global". Your MCP1703 should basically have the same data as anyone else's. Your job and board files should be the same for any given PCB as any other.

The machine.xml is intended to be just that - stuff specific to your machine. That's why feeders are in machine.xml, and not in parts.xml, for instance. A feeder is where you join a part to the machine and tell OpenPnP how to find it.

Finally, I should note that a big part of the way this is designed the way it is is because OpenPnP is intended to be generally useful for nearly any machine. This is the reason that machine.xml is basically just a big list of serialized objects. It's extensible by default, but that also means that there are some limitations in how specific the UI can be to a given machine. By implementing feeders (and slots) in this way it keeps machine specific details in machine specific configuration panels and does not clutter up the UI with features and specifics that might not apply to another machine.

So, to summarize:

Slots have Feeders, Feeders have Parts. To move a feeder from slot to slot you change the feeder on the slot config. To move / change a reel in a feeder you change the part in that particular feeder.

Hope this helps. I recognize that this is not how most PnP software handles things, but most (all?) other PnP software is written for a specific machine where there are fixed constraints about what hardware will and will not be on the machine. We don't have that luxury, so we have to make some different design decisions, but I think in the end it works well once you give it a chance.

Jason




--
You received this message because you are subscribed to the Google Groups "OpenPnP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To post to this group, send email to ope...@googlegroups.com.

Jason von Nieda

unread,
Jan 18, 2017, 10:30:50 PM1/18/17
to ope...@googlegroups.com
The bug I mentioned below is now fixed. Slot rotation now applies to offsets.

Jason
Message has been deleted

Glen English

unread,
Jan 18, 2017, 10:35:29 PM1/18/17
to OpenPnP
Howdy
thanks for the hierarchy writeup, I will actually save this in my separate doc list for openPNP.

I agreed with your statement about how OPNP treats parts and feeders and parts list not containing a feeder type and slot.  

The way I am used to working is I think somewhere though there needs to be a parts <> feedertype<> slot# table. But that's not necessarily applicable to this setup.

Ahhh- I now understand why it is done this way IE part is tied to a feeder,- because that makes perfect sense for say a tape strip feeder .... there is no separate feeder device. 

You have a ReferenceStripFeeder loaded with a 1k 0603 as an object.

Where as I think of the feeder as a object, that can contain a package and a part. That is to say, no package or part is assigned to that feeder.

IE for me, a reference strip feeder is a object that is assigned a location, and can have assigned to it package and part.

It's like a second step then to assign a package and part to a feeder , which is in turn assigned to a slot / location

Maybe I am thinking about this the wrong way. hmm.

Sorry, I dont mean to chew up your coding hours with explanations. appreciated though.

I'll see hw the reworked config dialog looks

appreciate your work

cheers


On Thursday, January 19, ogle.com/d/optout.
Reply all
Reply to author
Forward
0 new messages