OCR extra information?

45 views
Skip to first unread message

vespaman

unread,
Nov 14, 2025, 12:47:05 PM (7 days ago) Nov 14
to OpenPnP
Hi all,

I was loading my machine today, which is using the Reference Push Pull Feeders with OCR for part detection.

While doing this, I realized that it would be nice to put more data into the OCR, not just part.

The things I would like, are the things that are related to the part, and feeder;
Part pitch, Feed pitch, Rotation in tape, Multiplier. 

Reason is that every time one is changing to another component, these fields are likely to change. I guess one could argue that they could instead belong to the part data, at least Part pitch and Rotation in tape. But I guess there are historic reasons behind them being where they are.

I guess this might have been discussed before(?), if not, what are your thoughts on this?


Reason for asking, is that I have been considering doing a special feeder for chm-t machines, removing a lot of tedious & repetitive stuff (e.g. finding/setting up sprocket holes for drag feeding in relation to the Hole 1/ Hole 2 after auto setup), when loading new tapes. And before doing any real work, it would be nice to know if there are any thoughts on Part Pitch and Rotation in tape especially... 
I think I can simply encode them into part name of current identifyDetectedPart(), if nothing else, and then in my newish feeder decode/split part name from the rest.

 - Micael

vespaman

unread,
Nov 15, 2025, 3:13:00 AM (7 days ago) Nov 15
to OpenPnP
After some thought, I remembered that Tape Specification in Packages has Both width and part pitch, so I suppose I can use that.
Then it is really only (and the most important one) rotation in tape that needs to be handled. In my opinion, this would best fit on Part. 

I guess rotation could also be added into Tape Specification, but in my case, I have different jobs from different cad programs/libraries, and from different, external cad consultants, so a SOT23 transistor may have multiple rotation in tape, depending on where it came from.
Now I suppose one way to deal with this is to change the component rotation in the job on such components.

 - Micael

simpl...@tuta.io

unread,
Nov 15, 2025, 5:13:03 AM (7 days ago) Nov 15
to Openpnp
>> I guess rotation could also be added into Tape Specification, but in my case, I have different jobs from different cad programs/libraries, and from different, external cad consultants, so a SOT23 transistor may have multiple rotation in tape, depending on where it came from.

Just out of curiosity: do you have an example of the different rotation in the pocket with regard to SOT23 from different manufacturers?

I'm linking the Tape Width, the necessary Pitch, the Orientention (Quadrant) in the pocket and the Vision-Algorithm to the component package definition - only part height, speeds (Z and X/Y/Rot) and rotability are stored at the part definition. This makes setting up the feeders much easier, as all the necessary parameters are available and you can immediately see which pitch needs to be set on the feeder.


vespaman

unread,
Nov 15, 2025, 5:27:28 AM (7 days ago) Nov 15
to OpenPnP
lördag 15 november 2025 kl. 11:13:03 UTC+1 skrev simpl...@tuta.io:
>> I guess rotation could also be added into Tape Specification, but in my case, I have different jobs from different cad programs/libraries, and from different, external cad consultants, so a SOT23 transistor may have multiple rotation in tape, depending on where it came from.

Just out of curiosity: do you have an example of the different rotation in the pocket with regard to SOT23 from different manufacturers?

No, I don't think I have seen any difference from manufacturers. My problem is mainly with the job files coming from different sources. 



I'm linking the Tape Width, the necessary Pitch, the Orientention (Quadrant) in the pocket and the Vision-Algorithm to the component package definition - only part height, speeds (Z and X/Y/Rot) and rotability are stored at the part definition. This makes setting up the feeders much easier, as all the necessary parameters are available and you can immediately see which pitch needs to be set on the feeder.


Are you using the Tape Specification for this? 

The main issue, as it is now, with storing rotation in tape on the feeder, is that when changing to another component, the "old" rotation in tape is obviously lost, so every time, I have to find this out again (along with feed pitch, part pitch etc). So I would like to find a way to move all component/tape specifics out from the feeder, and only have component agnostics on the feeder. (Fixed placed drag feeder). 


 

simpl...@tuta.io

unread,
Nov 15, 2025, 11:00:27 AM (6 days ago) Nov 15
to Openpnp, OpenPnP
>> Are you using the Tape Specification for this? 

I have been using only electric slot feeders and/or trays on my machines since time immemorial - that was already the case with OpenPnP back then. In order to place the feeders (automatically) as effectively as possible when setting up a new project, the width of the tape (8, 12, 16, 24, 32, etc.) must be known, as wider feeders require more slots. So i save in my app the tape-width, part-pitch, and quadrant in the package, where this information cannot be lost. Regardless of whether the feeder is plugged into E/W/S/N, this information is used and you can be sure that the component will be rotated correctly - this saves a lot of time and hassle.
The feeder speed (depending on the feeder type and pitch) is also taken into account, so that the next component is fed immediately after the last pick, while the nozzle is still on its way there, minimizing any waiting times. However, there is considerable room for optimization in the feed/pick process in particular - for example, many commercial machines can pick up several components at the same time - but that's another story...

vespaman

unread,
Nov 15, 2025, 11:58:49 AM (6 days ago) Nov 15
to OpenPnP
Alright, I forgot that you have your own software. "Tape Specification" is a text field in the package db on OpenPnP, used mainly (only?) for grouping feeder settings together. (for cloning feeder settings). This is nothing I need, so I could use that field to be able to keep rotation etc with the components rather than with the feeders.

My idea is to just load the new tape, fixate the OCR badge, and press autodetect when camera is at pick location. Nothing else. Most of the pieces for this is already available in Reference push pull feeder, and since this is a fixed feeder machine all of geometric is known. Maybe the camera mustn't even be at pick position, or even nearby it should probably be able to find it itself.
But regardless, if I get half way to this Nirvana, I wouldn't have to spend so much time loading the machine.


simpl...@tuta.io

unread,
Nov 15, 2025, 1:02:40 PM (6 days ago) Nov 15
to Openpnp, OpenPnP

Yes, many makers have different philosophies. Some always leave the standard components in the same place and hardly change their position, some have cabinets full of preloaded electrical slot feeders on trolleys to save clamping time, and some empty the machine completely and store everything dust-proof because there is nothing to assemble for a few weeks.

Printing and sticking on OCR/QR badges is certainly an interesting way to keep track of things and to read the feeder parameters from the sticker and thus set up the feeder slot fully automatically – it's an interesting concept, especially for your pimped chmt48vb.


vespaman

unread,
Nov 15, 2025, 2:20:34 PM (6 days ago) Nov 15
to OpenPnP
I think my use case are changing over time as well. Last year, I hardly changed any feeders in my machine, since I did similar boards over and over. This year, I have done more prototypes and smaller/different batches, and now with radio/antenna matching (which means that there's a lot of components that are impossible to have as 'standard components'), I have one bank of my machine (~25 slots) that I primarily use for odd components/prototype stuff.

Last year, I wasn't too bothered with this, since I rarely changed, I basically just pressed play when I wanted a couple of panels, but now, after doing a couple of prototypes, I see the room for improvement. :-)



Jan

unread,
Nov 15, 2025, 3:19:16 PM (6 days ago) Nov 15
to ope...@googlegroups.com
Hi Micael!
IIRC Mark designed the ReferencePushPullFeeder with full one click auto
setup but I don't remember if/how he handles part pitch and rotation.
Maybe he has one feeder per part and associates the feeders using OCR
and updates it location.
From my experience loading a different part does not require setting up
locations again (on your/mine drag feeder bar). After the first dragging
the pick location is good enough.
If you plan to associate parts using OCR, you shall keep in mind, that
OpenPnP handles part rotation in an absolute fashion. That means that
even if you know how the part is rotation in tape, the rotation is
different depending on whether you load it on the west or east side.
If you automatically configure part pitch and rotation, you'd probably
also like to configure feed count to keep track how many parts you still
have...
Maybe the idea of having one feeder (definition) per part and just
moving it around based on OCR is what you actually wont...
Concerning the new feeder class. We discussed that earlier here, that
there are a lot of very useful features in the ReferencePushPullFeeder
that would be useful for others too, but it became so massive of the
years, that a split would be helpful. If eg. the push/pull feature is
removed or extended by a drag feature or a feed actuator, the feed setup
could be greatly simplified while keeping all the nice clone, vision and
auto-setup features. This would basically mean, to provide a new wizard
for feed/push/pull setup...

Jan
> --
> 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
> <mailto:openpnp+u...@googlegroups.com>.
> To view this discussion visit https://groups.google.com/d/msgid/
> openpnp/8bf2cdf3-f081-4fac-a733-880fb052bfb2n%40googlegroups.com
> <https://groups.google.com/d/msgid/openpnp/8bf2cdf3-f081-4fac-
> a733-880fb052bfb2n%40googlegroups.com?utm_medium=email&utm_source=footer>.

vespaman

unread,
Nov 15, 2025, 5:33:05 PM (6 days ago) Nov 15
to OpenPnP
Hi Jan,


IIRC Mark designed the ReferencePushPullFeeder with full one click auto
setup but I don't remember if/how he handles part pitch and rotation.

Yes, the Reference Push Pull Feeder is a great feeder, it has a lot of features, but it is designed to be for general use.
Part pitch, rotation and feed pitch, multiplier has to manually entered, since there's no place either part or package database/tables for it.
If you change feed pitch, you also need to change peel distance, drag mid + drag end and so on. It's a Swiss Knife :-) it can do most things, but if you know your screw, you only need one screwdriver.

I believe that rotation was once handled rather differently between the different feeders (maybe there's still some feeder that has not been updated!). 
My guess is that this is why it is still entered on feeders, and not in packages/part. 

From my experience loading a different part does not require setting up
locations again (on your/mine drag feeder bar). After the first dragging
the pick location is good enough.

My experience is not too far from that, but as you may remember, only Y can be automatically adjusted in drag, X cannot, so if you are not careful when loading the tape, first vision will adjust pick position/hole 1/hole 2, perhaps do first pick(s), then a feed which hopefully will be starting too far from its perfect position, but still not exact, so there will be more vision X adjustments after that (1st) feed, since it will be the one defining the remaining X vision pick adjustments. And if you have a thin plastic tape, if your drag start is a little off, there's always that risk that the tape feed will fail (drag pin pressing the flimsy tape down).
And:- of course, if the new reel is not having the same feed pitch, you anyway have to re-enter the drag + peel data.

Since we know the drag start is exactly 8mm away, we can get it correct from this knowledge alone from the first vision shot, before 1st drag. No matter how sloppy tape was loaded. Then we know drag mid, and drag end.
Since we also know max drag length, so we can automatically conclude multiplier, and set everything up automatically as needed.

If you plan to associate parts using OCR, you shall keep in mind, that
OpenPnP handles part rotation in an absolute fashion. That means that
even if you know how the part is rotation in tape, the rotation is
different depending on whether you load it on the west or east side.

Are you sure about that? I think it is related to the sprocket holes. If I am not mistaken, this is what the new rotation does, whereas before they where absolute.
 
If you automatically configure part pitch and rotation, you'd probably
also like to configure feed count to keep track how many parts you still
have...

Excellent idea! 
 
Maybe the idea of having one feeder (definition) per part and just
moving it around based on OCR is what you actually wont...

Yes. OCR in my case, but even if using the part drop down, I think I would have wanted this. But I'm a firm OCR/QR believer :-) 

Concerning the new feeder class. We discussed that earlier here, that
there are a lot of very useful features in the ReferencePushPullFeeder
that would be useful for others too, but it became so massive of the
years, that a split would be helpful.

It looks like parts of it has been broken out (vision stuff afaict). But I see what you mean.
 
I'll see where I land with this, I'll just play around (good to learn a bit more java while at it). Maybe it ends up with something that is only interesting for me.
To start with, to keep things simple, I'll use "Tape Specification" for all of it (csv separated or something alike). This way I will not interfere with anything else. 
We can always change this later (to real columns in the tables) if there's any interest in it for other feeders.


 - Micael

Jan

unread,
Nov 18, 2025, 6:30:30 AM (4 days ago) Nov 18
to ope...@googlegroups.com
Hi Micael!

On 15.11.2025 23:33, vespaman wrote:
> Hi Jan,
>
>
> IIRC Mark designed the ReferencePushPullFeeder with full one click auto
> setup but I don't remember if/how he handles part pitch and rotation.
>
>
> Yes, the Reference Push Pull Feeder is a great feeder, it has a lot of
> features, but it is designed to be for general use.
> Part pitch, rotation and feed pitch, multiplier has to manually entered,
> since there's no place either part or package database/tables for it.
> If you change feed pitch, you also need to change peel distance, drag
> mid + drag end and so on. It's a Swiss Knife :-) it can do most things,
> but if you know your screw, you only need one screwdriver.
>
> I believe that rotation was once handled rather differently between the
> different feeders (maybe there's still some feeder that has not been
> updated!).
> My guess is that this is why it is still entered on feeders, and not in
> packages/part.
>
I'd say that qualifies for the idea to setup one feeder per part and
swap it in/out (change its location, enabled/disable it) based on OCR.
This way you can have a prefect/individual setup per part and keep track
of each part without further modification.

> From my experience loading a different part does not require
> setting up
> locations again (on your/mine drag feeder bar). After the first
> dragging
> the pick location is good enough.
>
>
> My experience is not too far from that, but as you may remember, only Y
> can be automatically adjusted in drag, X cannot, so if you are not
> careful when loading the tape, first vision will adjust pick position/
> hole 1/hole 2, perhaps do first pick(s), then a feed which hopefully
> will be starting too far from its perfect position, but still not exact,
> so there will be more vision X adjustments after that (1st) feed, since
> it will be the one defining the remaining X vision pick adjustments. And
> if you have a thin plastic tape, if your drag start is a little off,
> there's always that risk that the tape feed will fail (drag pin pressing
> the flimsy tape down).
> And:- of course, if the new reel is not having the same feed pitch, you
> anyway have to re-enter the drag + peel data.
>
> Since we know the drag start is exactly 8mm away, we can get it correct
> from this knowledge alone from the first vision shot, before 1st drag.
> No matter how sloppy tape was loaded. Then we know drag mid, and drag end.
> Since we also know max drag length, so we can automatically conclude
> multiplier, and set everything up automatically as needed.
>
That's what I meant by splitting the ReferencePushFeeder and replacing
the push/pull wizard with something more specific for dragging. It can
be a kind of mask that hides the internals and only provides access to
the relevant details like offset (in units of holes) to first drag
location and the amount to go back to safely release the drag pin. This
information is sufficient to fill all the location data the current
wizard asks for.

> If you plan to associate parts using OCR, you shall keep in mind, that
> OpenPnP handles part rotation in an absolute fashion. That means that
> even if you know how the part is rotation in tape, the rotation is
> different depending on whether you load it on the west or east side.
>
>
> Are you sure about that? I think it is related to the sprocket holes. If
> I am not mistaken, this is what the new rotation does, whereas before
> they where absolute.
>
The ReferencePushPullFeeder uses a relative change in location when
updating its position based on vision. So if autosetup detects, that the
feeder is rotated by 90°, it rotates everything by 90°. This way it
makes no difference if part rotation is absolute or not.

> If you automatically configure part pitch and rotation, you'd probably
> also like to configure feed count to keep track how many parts you
> still
> have...
>
>
> Excellent idea!
>
> Maybe the idea of having one feeder (definition) per part and just
> moving it around based on OCR is what you actually wont...
>
>
> Yes. OCR in my case, but even if using the part drop down, I think I
> would have wanted this. But I'm a firm OCR/QR believer :-)
>
You may revisit the documentation and videos Mark posted. The more we
talk about it, the more I think his idea is to have one feeder per part
and let autosetup move feeders around as installed. You would setup a
feeder for a part once and afterwords not change anything except
install/load it somewhere and let autodetect/setup do its job. (maybe
the feeder-to-feeder offset needs adjustments and maybe help is required
to scan the entire west side followed by the east side. This could be
added to a machine specific variant of this feeder.)

Jan

vespaman

unread,
Nov 18, 2025, 6:52:19 AM (4 days ago) Nov 18
to OpenPnP
Hi Jan!

The more we
talk about it, the more I think his idea is to have one feeder per part
and let autosetup move feeders around as installed. You would setup a
feeder for a part once and afterwords not change anything except
install/load it somewhere and let autodetect/setup do its job. (maybe
the feeder-to-feeder offset needs adjustments and maybe help is required
to scan the entire west side followed by the east side. This could be
added to a machine specific variant of this feeder.)


Yes, I think this was probably his intention as well! But I also remember discussing some issues with this, with him. For example if you have a feeder setup with 0402 mounted, and then substituted the part to a 0603, it would not work, because of the part pitch. So there are some holes with the current logic.
IIRC, it is possible to get at least feed pitch working, if one would enable the concept of templates (which I have disabled), but I don't think rotation is taken care of.

Both east and west is scanned on my machine on job start, so that also works. 
 
 - Micael
Reply all
Reply to author
Forward
0 new messages