Beginner needs help with Issues and Solutions (motor setup).

422 views
Skip to first unread message

Eli Bridge

unread,
Dec 30, 2024, 10:01:51 PM12/30/24
to OpenPnP
I have a old Madell SX1010 PnP that I have used for about 13 years. When the Z motor died a few weeks ago, I decided to get a new dual nozzle head and get the machine running with a Smoothieboard and openPnP. I was inspired by Xavier, who did a similar retrofit and kindly provided helpful files and diagrams. 

 I've got the hardware set up to the point that I should be able to start working with OpenPnp. So far I have done the following:

1. Compiled and loaded five-axis firmware for the Smoothieboard
2. Modified a config file to match my hardware setup
3. Installed openPnP and played with the demo simulation
4. Used Issues and Solutions to configure cameras, initalize the GcodeDriver, and recognize the firmware on the Smoothie.  

Now I'm stuck at the point where Issues and Solutions has me specifying drivers for each of the axes ("Axis is not assigned to a driver."). When I access the axes on the Machine Setup tab, I can only select GcodeDriver (no other options). The "Accept' button for this set of tasks is not active, so I don't know if I should move on or what. I don't understand what I'm doing here. The config file specifies the pins that connect to the step and direction terminals for each motor controller. Why do I need to make these links again during setup?

I'm also a bit leery about testing the motors. My instructions say to hit the home button when the motors are set up. Does this button set the current location to home or will it send the head to some default home location? I don't see how the latter would work when the machine currently has no clue about where the head is. I want to know what I'm doing here because the X and Y motors for this machine are large and powerful. It might be disastrous if one of the motors sent the head past an endpoint.

Thanks for any help. I really appreciate those of you who have made openPnP and option for all of us. 

Eli 

Mike Menci

unread,
Dec 31, 2024, 1:06:10 PM12/31/24
to OpenPnP
1) Specifying drivers for each of the axes ("Axis is not assigned to a driver.")  _ place your best knowledge or copy from Here machine file for the start : HERE, I & S will let you repair text if you get it wrong way from the start.... 
2) TESTS: In your case the best is, 
- if you take out couplings from the motors and try if the motors are working and if direction of turning is correct direction (CW - CCW)!
- In Open Pnp you have speed slider - set it to slow speed for the start and see how it will go.
- In Open PnP you have axis homing - you can disable this homing in order to START the Open PnP and do the rotations - movement without homing your PnP machine - set sequence og homing Z than X and last Y for the start.   

Good luck and let us know how you are progressing
Mike


Eli Bridge

unread,
Dec 31, 2024, 1:06:20 PM12/31/24
to OpenPnP
Also, I'me getting an error that says there's a better smoothieware firmware available. It says see info link, which refers to the smoothieware github site. But it is not apparent to me how to find the correct version (something like "edge-71b7996"). The version I'm using is compiled for a 5 axis system as directed here: https://makr.zone/smoothieware-new-firmware-for-pnp/500/

Can I ignore this error?

Mike Menci

unread,
Dec 31, 2024, 1:51:18 PM12/31/24
to OpenPnP
Is this your layout sch ? 
- Forgot above - set the software limits as well - do not relay on end-stops only! 
You can ignore error and  go ahead - but you should update the firmware which is old - you need new - Beck up old first and save on some USB disk so you can get beck if you mess something up


Madell Sx1010 Retrofit.bmp

Eli Bridge

unread,
Dec 31, 2024, 2:00:40 PM12/31/24
to OpenPnP
Thanks Mike. I started over with some different firmware, and this time I did not get the "Axis not assigned to driver" issue. However, now I have a warning: "Axis letter A is not a controller reported letter, one of X Y Z." I don't know what to make of that. It's referring to my assignment of a letter for Axes C1 and C2, which are the part rotating motors for the dual head. So, what letter will work? X, Y, and Z are taken? I see that the Log is full of warning messages like "Axis x letter X missing in POSITION_REPORT_REGEX groups." I'm reading everything I can find, but I can't make sense of this issue. 

Good idea about removing the motor couplings. I think I can see how that's done. And yes, I see the speed and distance controls. I was planning to start small. 

I don't see how to disable homing. Is that somewhere in Machine Setp -> Axes? Maybe make home coordinate blank?

I got the bottom light and vacuum pump to come on once. Then I got an error and they don't work anymore (probably need to restart). But that's good progress for me. At least I know the computer and controller are talking. 

Eli

Eli Bridge

unread,
Dec 31, 2024, 2:08:15 PM12/31/24
to OpenPnP
Hi again, Mike. That diagram is similar to my set up, but I have a vacuum pump and two solenoids instead of a compressor. Also the Z axis driver (external to smoothie) is different (Leadshine brand). And I have a dual head with a cam action Z motor and two 1.6 amp part rotation motors. Same general idea, though. Thanks for your pointers. I think I found the edge version of the smoothieware. I'll compile with that and see what happens. 

Eli

Mike Menci

unread,
Dec 31, 2024, 3:50:15 PM12/31/24
to OpenPnP
Send your config.txt file and machine.xml file

Eli Bridge

unread,
Dec 31, 2024, 4:00:45 PM12/31/24
to OpenPnP
I compiled the latest version of smoothieware from github (modified a month ago), but I'm still getting the "better Smoothieware firmware available" message. Is it because I compiled for a 5 axis system with 

 make AXIS=5 PAXIS=5

??

Thanks,

Eli

Eli Bridge

unread,
Dec 31, 2024, 4:40:59 PM12/31/24
to OpenPnP
Giving up for the day. xml and config attached here if you want to have a look. But I hope you will celebrate the new year instead. 

Cheers,
Eli

machine.xml
config

tonyl...@gmail.com

unread,
Dec 31, 2024, 5:36:53 PM12/31/24
to OpenPnP
It also greatly helps us to help you if you post your .log file (with your Global log level set to TRACE) when you have a problem.

vespaman

unread,
Jan 1, 2025, 4:05:03 AM1/1/25
to OpenPnP
Mark has modified the Smoothieware to better suit OpenPnP, I guess you are running mainline Smoothieware, hence the message?

- Micael

Jan

unread,
Jan 1, 2025, 9:04:20 AM1/1/25
to ope...@googlegroups.com
Hi Eli!

On 31.12.2024 20:00, Eli Bridge wrote:
> However, now I have a warning: "Axis letter A is not a controller
> reported letter, one of X Y Z."

This warning is generated by evaluating the position report (M114) with
a generic regex to extract the axis letters the controller supports.
This set is used to validated that all axes are configured to drive one
of them. The content of M114 depends on PAXIS. IIRC for each PAXIS the
position of an axis (and its letter) is reported. For OpenPnP PAXIS
shall be equal (or greater) then the number of physical axis your
machine has. So for a dual shared Z head you shall have PAXIS = 5: X, Y,
Z + two for nozzle rotation.
You may call M114 from the command line (or inspect the text field
right of the "Detect Firmware" button on the "Driver Settings" tab of
your gcode driver. The letter before the ":" are the axis letters your
controller supports and which you can (have to) assign to your axis for
the linkage between OpenPnPs axes and its controller axes.

Jan

Mike Menci

unread,
Jan 1, 2025, 10:46:18 AM1/1/25
to OpenPnP
Obri... needs to update to known firmware first - like Michael wrote ( Mark has modified the Smoothieware to better suit OpenPnP ) -  and than we know that the basic is correct, than machine file and other settings can be modified accordingly.  
Message has been deleted

Eli Bridge

unread,
Jan 1, 2025, 12:44:50 PM1/1/25
to OpenPnP
Thanks Jan. I will give this a try.

Eli Bridge

unread,
Jan 1, 2025, 12:50:20 PM1/1/25
to OpenPnP
Thabks, Mike. I started with the link you provided, but I see now that I probably should have just downloaded the firmware.bin file instead of compiling it myself.

Eli

Mike Menci

unread,
Jan 1, 2025, 1:23:53 PM1/1/25
to OpenPnP

Eli Bridge

unread,
Jan 2, 2025, 5:40:57 PM1/2/25
to OpenPnP

Today I was able to try the downloaded (not compiled) modified smoothie firmware, and that fixed the error I was getting about getting the most current firmware.

But that's about as far as I got. I can still turn actuators on and off, but I am unable to get any motors to move. I had a diode wired backwards and fried a Mosfet on the board. I guess I'll try to replace it. 

I'm wondering if I should switch to a duet board. There seems to be good support and there's an example that really fits my needs. Any thoughts?  Maybe I should google "duet vs. smoothie...."

Cheers,
Eli

Mike Menci

unread,
Jan 3, 2025, 12:47:23 AM1/3/25
to OpenPnP
config (sample)

Eli Bridge

unread,
Jan 19, 2025, 7:50:56 PM1/19/25
to OpenPnP
I've been making good progress lately. Able to advance to vision setup on Issues and Solutions. But I have this mismatch between the z coordinates displayed on the bottom of the OpenPNP window and the coordinates that come from the circuit board (which also seem to apply to the soft limit for Z). Is this easily rectified? Or should I just move on with visual calibrations and hopeit will not throw things off later on. I'm attaching a screenshot showing the results from a position query. Note Z is -48.6 in the gcode console and -18 in the coordinates shown below. Meanwhile  X and Y agree.  The actual amount of Z movement in this case is -18mm.  I've got 'gamma_steps_per_mm' defined as 10 in the config file. I got this number through trial and error. Jogging the Z axis 10mm results in a movement of 10mm.  Thanks for any advice.
 ScreenCapture.JPG


Mike Menci

unread,
Jan 19, 2025, 9:33:56 PM1/19/25
to OpenPnP
This is OK - dont worry - it is how it has to be.

Mike Menci

unread,
Jan 19, 2025, 9:35:10 PM1/19/25
to OpenPnP
Home Z first and than tray  move Z two times 10mm 

Jan

unread,
Jan 20, 2025, 6:42:55 AM1/20/25
to ope...@googlegroups.com
Hi Eli!
You said initially that you're going to replace your head with a dual
nozzle version. Many of this are using a single Z motor so some math is
used to convert the location of each nozzle into a drive value of the Z
motor. The controller does not know anything about your head setup and
hence can only report the location of the Z motor in the reference frame
you configured.
OpenPnP knows your z/nozzle configuration and will translate between
them. If you select a nozzle, you'll see its location including all
transformations to/from the Z motor location based on that
configuration. As Mike suggested, you may safely ignore the raw Z values
reported by the controller and focus on the translated values, OpenPnP
presents. If you're setup is correct, you'll find a good agreement.
There is a special "issue" with smoothie, that it only knows
"steps_per_mm" even if a particular axis is configured for
"steps_per_degree". That's confusing, I admit, but I'm confident you'll
get that sorted out quickly.
According to your values (-48.6 and -18) I'm assuming you're using a
cam-style head. That means that a Z location is translated into an angle
that is send to the Z motor. This numbers all look reasonable to me.

Jan

On 20.01.2025 01:50, Eli Bridge wrote:
> I've been making good progress lately. Able to advance to vision setup
> on Issues and Solutions. But I have this mismatch between the z
> coordinates displayed on the bottom of the OpenPNP window and the
> coordinates that come from the circuit board (which also seem to apply
> to the soft limit for Z). Is this easily rectified? Or should I just
> move on with visual calibrations and hopeit will not throw things off
> later on. I'm attaching a screenshot showing the results from a position
> query. Note Z is -48.6 in the gcode console and -18 in the coordinates
> shown below. Meanwhile  X and Y agree. The actual amount of Z movement
> in this case is -18mm.  I've got 'gamma_steps_per_mm' defined as 10 in
> the config file. I got this number through trial and error. Jogging the
> Z axis 10mm results in a movement of 10mm.  Thanks for any advice.
> ScreenCapture.JPG
>
>
> On Thursday, January 2, 2025 at 11:47:23 PM UTC-6 mike....@gmail.com wrote:
>
> You have the same sample config for Smoothiware here: https://
> smoothieware.github.io/Webif-pack/documentation/web/html/
> configuring-
> smoothie.html#:~:text=Smoothie%20is%20configured%20simply%20by,or%20issue%20the%20reset%20command%20 <https://smoothieware.github.io/Webif-pack/documentation/web/html/configuring-smoothie.html#:~:text=Smoothie%20is%20configured%20simply%20by,or%20issue%20the%20reset%20command%20>).
>
> On Thursday, 2 January 2025 at 23:40:57 UTC+1 obri...@gmail.com wrote:
>
>
> Today I was able to try the downloaded (not compiled) modified
> <https://makr.zone/smoothieware-new-firmware-for-pnp/500/
> > smoothie firmware, and that fixed the error I was getting
> about getting the most current firmware.
>
> But that's about as far as I got. I can still turn actuators on
> and off, but I am unable to get any motors to move. I had a
> diode wired backwards and fried a Mosfet on the board. I guess
> I'll try to replace it.
>
> I'm wondering if I should switch to a duet board. There seems to
> be good support and there's an example <https://github.com/
> openpnp/openpnp/wiki/Duet3D-Openpnp-Example> that really fits my
> needs. Any thoughts?  Maybe I should google "duet vs. smoothie...."
>
> Cheers,
> Eli
> On Wednesday, January 1, 2025 at 12:23:53 PM UTC-6
> mike....@gmail.com wrote:
>
> Follow the instructions for flashing <http://
> smoothieware.org/flashing-smoothie-firmware#copy>
>
> On Wednesday, 1 January 2025 at 18:50:20 UTC+1
> obri...@gmail.com wrote:
>
> Thabks, Mike. I started with the link you provided, but
> I see now that I probably should have just downloaded
> the firmware.bin file instead of compiling it myself.
>
> Eli
> On Wednesday, January 1, 2025 at 9:46:18 AM UTC-6
> mike....@gmail.com wrote:
>
> Obri... needs to update to known firmware first -
> like Michael wrote ( Mark has modified <https://
> makr.zone/smoothieware-new-firmware-for-pnp/500/
> --
> 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/
> bc91ac6d-1365-4fb5-a3ca-380e7f852888n%40googlegroups.com <https://
> groups.google.com/d/msgid/openpnp/bc91ac6d-1365-4fb5-
> a3ca-380e7f852888n%40googlegroups.com?utm_medium=email&utm_source=footer>.

Message has been deleted

Eli Bridge

unread,
Jan 25, 2025, 7:35:58 PM1/25/25
to OpenPnP
Dear helpful people,

I'm getting closer and closer, but now I'm stuck on an error when enabling my first feeder. I have custom-made lever feeders with gravity powered tape pullers. I set one up with vision enabled and dummy actuators (I don't need any actuators--can I just turn this off?), but when I try to test it I get the error "No vision capable camera found on head." There is a camera, and it works fine for homing, calibration, reference images, etc. Seems like there's just a box I need to tick, but I cannot find it. The only problem I had during vision setup is that issues and solutions recommended a gain value of 8, but that setting seems to be stuck on 1. The preview image looks OK though. 

Thanks for any help. The relevant log lines are below. I'll paste in config and xmls.

2025-01-25 18:25:08.538 AbstractHeadMountable DEBUG: N2.moveToSafeZ(1.0)
2025-01-25 18:25:08.539 ReferenceLeverFeeder DEBUG: feed(N2 NOZ181e088709c333a8)
2025-01-25 18:25:08.540 ReferenceHead DEBUG: H1.moveToSafeZ(1.0)
2025-01-25 18:25:08.540 AbstractHeadMountable DEBUG: N1.moveToSafeZ(1.0)
2025-01-25 18:25:08.543 AbstractHeadMountable DEBUG: N2.moveToSafeZ(1.0)
2025-01-25 18:25:08.544 AbstractHeadMountable DEBUG: Top.moveToSafeZ(1.0)
2025-01-25 18:25:08.545 AbstractHeadMountable DEBUG: AVACS1.moveTo((465.548000, -14.041000, NaN, NaN mm), 1.0)
2025-01-25 18:25:08.547 ReferenceActuator DEBUG: AVACS1.actuate(true)
2025-01-25 18:25:08.599 AbstractHeadMountable DEBUG: AVACS1.moveTo((465.548000, -33.041000, 0.000000, 0.000000 mm), 1.0)
2025-01-25 18:25:08.601 ReferenceActuator DEBUG: AVACS2.actuate(true)
2025-01-25 18:25:08.652 AbstractHeadMountable DEBUG: AVACS1.moveTo((465.548000, -14.041000, NaN, NaN mm), 1.0)
2025-01-25 18:25:08.653 ReferenceActuator DEBUG: AVACS2.actuate(false)
2025-01-25 18:25:09.182 ReferenceActuator DEBUG: AVACS1.actuate(false)
2025-01-25 18:25:09.233 ReferenceHead DEBUG: H1.moveToSafeZ(1.0)
2025-01-25 18:25:09.234 AbstractHeadMountable DEBUG: N1.moveToSafeZ(1.0)
2025-01-25 18:25:09.234 AbstractHeadMountable DEBUG: N2.moveToSafeZ(1.0)
2025-01-25 18:25:09.235 AbstractHeadMountable DEBUG: Top.moveToSafeZ(1.0)
2025-01-25 18:25:09.236 ReferenceLeverFeeder DEBUG: getVisionOffsets(H1, (470.548000, -14.141000, -13.400000, 0.000000 mm))
2025-01-25 18:25:09.236 AbstractMachine TRACE: Exception caught, executing pending motion: java.lang.Exception: No vision capable camera found on head.
at org.openpnp.machine.reference.feeder.ReferenceLeverFeeder.getVisionOffsets(ReferenceLeverFeeder.java:217)
at org.openpnp.machine.reference.feeder.ReferenceLeverFeeder.feed(ReferenceLeverFeeder.java:197)
at org.openpnp.gui.FeedersPanel.feedFeeder(FeedersPanel.java:633)
at org.openpnp.gui.FeedersPanel$7.lambda$actionPerformed$0(FeedersPanel.java:585)
at org.openpnp.util.UiUtils.lambda$submitUiMachineTask$0(UiUtils.java:39)
at org.openpnp.spi.base.AbstractMachine$1.call(AbstractMachine.java:578)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
2025-01-25 18:25:09.237 AbstractMachine TRACE: Machine entering idle state.
2025-01-25 18:25:09.237 MessageBoxes DEBUG: Error: java.lang.Exception: No vision capable camera found on head.

packages.xml
config.txt
vision-settings.xml
machine.xml
parts.xml

Eli Bridge

unread,
Jan 25, 2025, 7:50:35 PM1/25/25
to OpenPnP
Note also that if I turn vision off for the feeder, and click the "perform and feed and pick" button, the machine picks up a part but it does not do the feed operation first. 

tonyl...@gmail.com

unread,
Jan 27, 2025, 2:59:41 PM1/27/25
to OpenPnP
You may want to give the ReferencePushPullFeeder a try instead. It is more modern and supports everything (and more) that the ReferenceLeverFeeder can do.

Eli Bridge

unread,
Jan 28, 2025, 12:33:00 AM1/28/25
to OpenPnP
Thanks Tony. I tried the referencePushPull feeder first but my feeders cover up the tape holes, so no vision is possible there. I also tried with the vision off (calibration trigger set to none), and I still can't get the feed motion to happen. The "feed and pick" button only causes an attempt to pick up the part. It does not move the tape forward. According to the log it looks like there is some sort of attempt to do the tape advance motions, but they are not happening. In the first nine lines below, I see the coordinates for the tape advance movement, but they seem to be associated with the AVAC2 actuator (which I selected in the push-pull motion window. I tried with no actuator selected and got an error "No feeder actuator assigned to feeder...." There is no option to select N1 as an actuator (N1 is associated with all the successful movement commands in the log below). Am I supposed to make a new actuator? I don't understand why the movement commands for the tape feed are different from the pick up. Probably something simple and obvious, but I'm not seeing it. 

2025-01-27 23:13:59.739 AbstractHeadMountable DEBUG: N1.moveToSafeZ(1.0)
2025-01-27 23:13:59.741 ReferencePushPullFeeder DEBUG: feed(N1 N1)
2025-01-27 23:13:59.743 AbstractHeadMountable DEBUG: AVAC2.moveTo((452.252000, -14.146000, 0.000000, 0.000000 mm), 1.0)
2025-01-27 23:13:59.748 ReferenceActuator DEBUG: AVAC2.actuate(true)
2025-01-27 23:13:59.750 GcodeDriver DEBUG: [serial://COM29] >> M132, 20000
2025-01-27 23:13:59.754 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:13:59.755 GcodeDriver TRACE: [serial://COM29] confirmed M132
2025-01-27 23:13:59.807 AbstractHeadMountable DEBUG: AVAC2.moveTo((452.252000, -33.041000, 0.000000, 0.000000 mm), 1.0)
2025-01-27 23:13:59.818 AbstractHeadMountable DEBUG: AVAC2.moveTo((452.252000, -14.146000, 0.000000, 0.000000 mm), 1.0)
2025-01-27 23:13:59.823 ReferenceActuator DEBUG: AVAC2.actuate(false)
2025-01-27 23:13:59.825 GcodeDriver DEBUG: [serial://COM29] >> M133, 20000
2025-01-27 23:13:59.827 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:13:59.828 GcodeDriver TRACE: [serial://COM29] confirmed M133
2025-01-27 23:13:59.882 ReferenceHead DEBUG: H1.moveToSafeZ(1.0)
2025-01-27 23:13:59.884 AbstractHeadMountable DEBUG: N1.moveToSafeZ(1.0)
2025-01-27 23:13:59.889 AbstractHeadMountable DEBUG: N2.moveToSafeZ(1.0)
2025-01-27 23:13:59.891 AbstractHeadMountable DEBUG: Top.moveToSafeZ(1.0)
2025-01-27 23:13:59.900 AbstractNozzle TRACE: Set rotation mode offset: none.
2025-01-27 23:13:59.901 AbstractNozzle TRACE: Set rotation mode offset: none.
2025-01-27 23:13:59.903 ReferenceHead DEBUG: H1.moveToSafeZ(1.0)
2025-01-27 23:13:59.905 AbstractHeadMountable DEBUG: N1.moveToSafeZ(1.0)
2025-01-27 23:13:59.908 AbstractHeadMountable DEBUG: N2.moveToSafeZ(1.0)
2025-01-27 23:13:59.911 AbstractHeadMountable DEBUG: Top.moveToSafeZ(1.0)
2025-01-27 23:13:59.914 AbstractHeadMountable DEBUG: N1.moveTo((458.954000, -14.235000, -2.000000, 88.736327 mm), 1.0)
2025-01-27 23:14:00.012 GcodeDriver DEBUG: [serial://COM29] >> M204 S718 G1 X474.6211 Y-12.7065 Z-4.7802 A88.7363  F11791 ; move to target, 20000
2025-01-27 23:14:00.015 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:00.017 GcodeDriver TRACE: [serial://COM29] confirmed M204 S718 G1 X474.6211 Y-12.7065 Z-4.7802 A88.7363  F11791 ; move to target
2025-01-27 23:14:00.026 GcodeDriver DEBUG: [serial://COM29] >> M204 S10 G1 X474.5273 Y-12.8645    F6000 ; move to target, 20000
2025-01-27 23:14:00.029 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:00.031 GcodeDriver TRACE: [serial://COM29] confirmed M204 S10 G1 X474.5273 Y-12.8645    F6000 ; move to target
2025-01-27 23:14:00.032 GcodeDriver DEBUG: [serial://COM29] >> M400 ; Wait for moves to complete before returning, 20000
2025-01-27 23:14:00.773 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:00.775 GcodeDriver TRACE: [serial://COM29] confirmed M400 ; Wait for moves to complete before returning
2025-01-27 23:14:00.777 AbstractHeadMountable DEBUG: N1.moveTo((458.954000, -14.235000, -15.000000, 88.736327 mm), 1.0)
2025-01-27 23:14:00.824 GcodeDriver DEBUG: [serial://COM29] >> M204 S324 G1   Z-38.6822   F6285 ; move to target, 20000
2025-01-27 23:14:00.827 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:00.828 GcodeDriver TRACE: [serial://COM29] confirmed M204 S324 G1   Z-38.6822   F6285 ; move to target
2025-01-27 23:14:00.829 GcodeDriver DEBUG: [serial://COM29] >> M400 ; Wait for moves to complete before returning, 20000
2025-01-27 23:14:01.478 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:01.479 GcodeDriver TRACE: [serial://COM29] confirmed M400 ; Wait for moves to complete before returning
2025-01-27 23:14:01.482 ReferenceNozzle DEBUG: N1.pick()
2025-01-27 23:14:01.482 Scripting TRACE: Scripting.on Nozzle.BeforePick
2025-01-27 23:14:01.487 ReferenceActuator DEBUG: PUMP.actuate(true)
2025-01-27 23:14:01.489 GcodeDriver DEBUG: [serial://COM29] >> M10, 20000
2025-01-27 23:14:01.490 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:01.491 GcodeDriver TRACE: [serial://COM29] confirmed M10
2025-01-27 23:14:01.547 ReferenceActuator DEBUG: AVAC1.actuate(true)
2025-01-27 23:14:01.548 GcodeDriver DEBUG: [serial://COM29] >> M130, 20000
2025-01-27 23:14:01.550 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:01.551 GcodeDriver TRACE: [serial://COM29] confirmed M130
2025-01-27 23:14:01.603 Scripting TRACE: Scripting.on Nozzle.AfterPick
2025-01-27 23:14:01.607 AbstractHeadMountable DEBUG: N1.moveToSafeZ(1.0)
2025-01-27 23:14:01.609 AbstractHeadMountable DEBUG: N1.moveTo((458.954000, -14.235000, -2.000000, 88.736327 mm), 1.0)
2025-01-27 23:14:01.654 GcodeDriver DEBUG: [serial://COM29] >> M204 S324 G1   Z-4.7802   F6285 ; move to target, 20000
2025-01-27 23:14:01.657 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:01.658 GcodeDriver TRACE: [serial://COM29] confirmed M204 S324 G1   Z-4.7802   F6285 ; move to target
2025-01-27 23:14:01.659 GcodeDriver DEBUG: [serial://COM29] >> M400 ; Wait for moves to complete before returning, 20000
2025-01-27 23:14:02.310 GcodeDriver$ReaderThread TRACE: [serial://COM29] << ok
2025-01-27 23:14:02.311 GcodeDriver TRACE: [serial://COM29] confirmed M400 ; Wait for moves to complete before returning
2025-01-27 23:14:02.319 AbstractMachine TRACE: Machine entering idle state.

Eli Bridge

unread,
Jan 28, 2025, 12:57:56 AM1/28/25
to OpenPnP
OK. Push motion issue solved. You DO have to create a new actuator as is clearly articulated in the notes for setting up a referencePushPull feeder. 
Still stuck on vision though (getting error "No vision capable camera found on head").

2025-01-27 23:54:04.291 ReferenceLeverFeeder DEBUG: getVisionOffsets(H1, (470.548000, -14.141000, -13.400000, 0.000000 mm))
2025-01-27 23:54:04.291 AbstractMachine TRACE: Exception caught, executing pending motion: java.lang.Exception: No vision capable camera found on head.

at org.openpnp.machine.reference.feeder.ReferenceLeverFeeder.getVisionOffsets(ReferenceLeverFeeder.java:217)
at org.openpnp.machine.reference.feeder.ReferenceLeverFeeder.feed(ReferenceLeverFeeder.java:197)
at org.openpnp.gui.FeedersPanel.feedFeeder(FeedersPanel.java:633)
at org.openpnp.gui.FeedersPanel.pickFeeder(FeedersPanel.java:646)
at org.openpnp.gui.FeedersPanel$8.lambda$actionPerformed$0(FeedersPanel.java:602)

at org.openpnp.util.UiUtils.lambda$submitUiMachineTask$0(UiUtils.java:39)
at org.openpnp.spi.base.AbstractMachine$1.call(AbstractMachine.java:578)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
2025-01-27 23:54:04.294 AbstractMachine TRACE: Machine entering idle state.
2025-01-27 23:54:04.294 MessageBoxes DEBUG: Error: java.lang.Exception: No vision capable camera found on head.

tonyl...@gmail.com

unread,
Jan 28, 2025, 5:46:01 PM1/28/25
to OpenPnP
Ok, it seems you don't have a vision provider assigned to either of your cameras. I'm not sure how that happened but I think you can fix it by exiting out of OpenPnP and opening your machine.xml file with a text editor. Your will need to find the lines (there should be two) that start with the 
string "<default-z" and insert the yellow highlighted line (in two places) just below them like this:

                  <default-z value="0.0" units="Millimeters"/>
                  <vision-provider class="org.openpnp.machine.reference.vision.OpenCvVisionProvider"/>
                  <roaming-radius value="0.0" units="Millimeters"/>

Once you've added those lines, save your work and exit out of the editor. You can then restart OpenPnP and try again.

ma...@makr.zone,

I don't see anywhere in Issues & Solutions where vision providers are assigned to the cameras. The only place I see a vision provider being assigned is when a new camera is created in org.openpnp.machine.reference.psh.CamerasPropertySheetHolder.newCameraAction. Shouldn't I&S assign a vision provider in org.openpnp.machine.reference.solutions.CameraSolutions.createReplacementCamera(ReferenceCamera) or am I missing something?

mark maker

unread,
Jan 29, 2025, 2:51:39 AM1/29/25
to ope...@googlegroups.com
> ma...@makr.zone, I don't see anywhere in Issues & Solutions where vision providers are assigned to the cameras. The only place I see a vision provider being assigned is when a new camera is created...

I never touched that, wasn't even aware of it. Assume this just gets created and dragged along through the xml all the time. I don't think we need I&S to fix that. If at all necessary,  it could be fixed on the fly by getVisionProvider(), as IMHO it doesn't make sense for a camera to not provide vision, does it?

_Mark
To unsubscribe from this group and stop receiving emails from it, send an email to openpnp+u...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/openpnp/193b2069-dc8a-4197-8119-15af07ff9d3en%40googlegroups.com.

Jan

unread,
Jan 29, 2025, 5:22:41 AM1/29/25
to ope...@googlegroups.com
Hi Mark, Tony!
Do you seen any senario under which this can happen and which you think
we shall fix before creating the stable release?
For testing, I just started from scratch and after getting propted to
replace the image camera, I found that the image provide is correctl set
to OpenPnPCaptureCamera. (However, I'm not propted to select a camera
and I'm not warned, that I did not yet, as after replacing the
NullDriver solutions...)

Jan

On 29.01.2025 08:51, 'mark maker' via OpenPnP wrote:
> /> ma...@makr.zone, I don't see anywhere in Issues & Solutions where
> vision providers are assigned to the cameras. The only place I see a
> vision provider being assigned is when a new camera is created.../
>> You may want to give the ReferencePushPullFeeder <https://
>> github.com/openpnp/openpnp/wiki/ReferencePushPullFeeder> a
>> documentation/web/html/ <http://
>> smoothieware.github.io/Webif-pack/
>> documentation/web/html/>
>> firmware#copy <http://smoothieware.org/
>> <http://40googlegroups.com> <https://
>> > groups.google.com/d/msgid/openpnp/
>> bc91ac6d-1365-4fb5- <http://groups.google.com/
>> d/msgid/openpnp/bc91ac6d-1365-4fb5->
>> > a3ca-380e7f852888n%40googlegroups.com?
>> utm_medium=email&utm_source=footer
>> <http://40googlegroups.com?
>> utm_medium=email&utm_source=footer>>.
>>
>> --
>> 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 view this discussion visit https://groups.google.com/d/msgid/
>> openpnp/193b2069-dc8a-4197-8119-15af07ff9d3en%40googlegroups.com
>> <https://groups.google.com/d/msgid/openpnp/193b2069-
>> dc8a-4197-8119-15af07ff9d3en%40googlegroups.com?
>> utm_medium=email&utm_source=footer>.
>
> --
> 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
> openpnp/631ea321-de8e-413a-bd90-4548f1ee79e1%40makr.zone <https://
> groups.google.com/d/msgid/openpnp/631ea321-de8e-413a-
> bd90-4548f1ee79e1%40makr.zone?utm_medium=email&utm_source=footer>.

tonyl...@gmail.com

unread,
Jan 29, 2025, 8:34:03 AM1/29/25
to OpenPnP
As a test I started from scratch, closed the welcome dialog, and exited from OpenPnP. The resulting machine.xml file does have a vision provider assigned to each camera. I then restarted OpenPnP  and proceeded with I&S until I was getting real camera images. I exited out of OpenPnP and looked at the machine.xml file and neither camera had a vision provider assigned. I think org.openpnp.machine.reference.solutions.CameraSolutions.createReplacementCamera(ReferenceCamera) needs to be copying the vision provider from the default camera to the replacement camera just like it does for the other settings.

jbussmann

unread,
Jan 29, 2025, 11:01:44 AM1/29/25
to OpenPnP
I did two setups from scratch recently and looking at the resulting machine.xml, I can confirm this too.

During the first setup I followed Issues & Solutions to replace the cameras. There the vision provider is missing. Then I noticed that those cameras have the IDs C1 and C2, which I didn't like. So the next time around I instead deleted both cameras and created new ones manually. Those have a vision provider assigned and, additionally have a proper ID generated like CAM181da282e85c9762. This is a pattern I already stumbled across a while back already when poking around in the nozzle config: N1 would simply be N1, while N2 would be this crazy NOZ181da1ece77c9a3b....

tonyl...@gmail.com

unread,
Jan 29, 2025, 5:27:28 PM1/29/25
to OpenPnP
I just merged PR1738 to fix the missing vision provider issue. I didn't do anything with the IDs since they still work ok as they are. The way to change those would be to go in and edit the default machine.xml file in src/main/resources/config and assign more realistic IDs. That seems a bit dangerous to do at this late breaking time since the IDs are used to link the various pieces together and it wouldn't be difficult to corrupt that linkage.

Jan

unread,
Jan 29, 2025, 6:06:12 PM1/29/25
to ope...@googlegroups.com
Hi Tony!
Thanks a lot for fixing that so quickly! Do you by change have any idea
why that was not working anymore (I'm assuming that it was working
before because I've not heard any complains)?

Jan

On 29.01.2025 23:27, tonyl...@gmail.com wrote:
> I just merged PR1738 <https://github.com/openpnp/openpnp/pull/1738> to
> --
> 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/
> ab73b875-045f-4381-92b6-57dec0fed6ben%40googlegroups.com <https://
> groups.google.com/d/msgid/openpnp/
> ab73b875-045f-4381-92b6-57dec0fed6ben%40googlegroups.com?
> utm_medium=email&utm_source=footer>.

Eli Bridge

unread,
Jan 29, 2025, 6:36:24 PM1/29/25
to OpenPnP
Thank you Tony and others for looking into this. I added the lines to the xml file as Tony suggested. I now have a new error that seems to be associated wiht openCV. I have not had much time to work on this one yet.

tonyl...@gmail.com

unread,
Jan 29, 2025, 9:57:31 PM1/29/25
to OpenPnP
Please post you latest machine.xml file along with your log file.

Eli Bridge

unread,
Jan 29, 2025, 10:23:24 PM1/29/25
to OpenPnP
I wanted to try to figure it out first, but I can't find much info for this error. Here's a screenshot, log, and xml. Config is the same as above.
Thanks again.

Eli
ScreenCap2.JPG
Push_pick_error_log.txt
machine.xml

tonyl...@gmail.com

unread,
Jan 30, 2025, 10:49:29 AM1/30/25
to OpenPnP
You need to set the Area of Interest. Click the Area of Interest Select button and then drag and size the selection box in the camera view. Note that the Area of Interest needs to be at least as large as the Template Image or you will get the above-mentioned error.

Eli Bridge

unread,
Feb 2, 2025, 9:11:21 PM2/2/25
to OpenPnP
Finally got some time to work. Yes, Toni, I had to set the area of interest - should have seen that. After I got feeders all set up, I actually had the machine working, and I assembled an entire board. Then I started having hardware issues that culminated in a dead smoothieboard. I have ordered a new one so we'll see what happens in a couple of weeks.
Eli

Eli Bridge

unread,
Feb 14, 2025, 7:39:03 PM2/14/25
to OpenPnP
Turns out my USB Connection was bad. So now I have extra smoothieboards. I now have the machine up and running fairly well. Here's a video of it for anyone interested:


I still have a few things I can't figure out:

1) There is unnecessary nozzle rotation happening. My nozzles are free rotating, no hose restrictions. I have the nozzles set to minimum rotation mode, but they still pre-rotate during pick-up for some reason. I don't see any way to shut it off. 

2) I'd like to use visual calibration for nozzle changes, but I have very limited Z range because of the dual head (should have gotten the pulley type instead of the cam type). This creates problems with automatic nozzle changing because there is no safe Z level that is above an occupied nozzle rack. So I have my nozzle racks in the back two corners, and I have the nozzles sliding in and out sideways. It works as long as there's no misalignment, but I have had a couple of disasters (racks destroyed by my beefy motors). I would like to use the vision checking features in the nozzle changer page, but I cannot position the camera above the nozzles (the camera is between the nozzles and can't see the far edges of the working area). Also the camera cannot move out directly over the nozzle rack without a loaded nozzle hitting a stored nozzle. I was hoping I could use some sort of fiducial to the left or right of the rack to lock in a relative XY position, but it looks like the vision feature expects two reference images (nozzle stored and rack empty). But I cannot position the camera to see whether the rack is occupied. I understand why you would usually do it this way but then why are there options to do a visual check on the last position of the nozzle change path? You would not see a nozzle there, right? It would be great if this feature could work with the same reference image for empty and occupied rack positions, but that does not work (it always interprets the rack to be full).

3) Is there a way to precisely control assembly order of some parts. I have some parts that are 7 mm tall, and they need to be assembled in a certain order across an array of 8 circuit boards to avoid collision. I'm guessing I would have to get into scripting for this....

4) Issues with rotated rack feeder. I find the new (beta) rotated rack feature really nice. But there are a couple of confusing things. First, I think the rows and columns labels for setting up a feeder are reversed. Second, when I reset the feeder, the machine picks up the second part instead of the first. If I reset the feeder and change the feed number to -1 (negative one) then it picks up the first part. 

5) How do I eliminate static electricity on component feeders. I have parts sticking to the peeled tape cover!! (Sorry, not really an OpenPnP question). 

Thanks for all the help thus far. When I finally have this thing mastered I will post design, setup, and operation notes. 

Cheers,
Eli

Jan

unread,
Feb 15, 2025, 9:10:44 AM2/15/25
to ope...@googlegroups.com
Hi Eli!
PLease find comments to some of your issues between the lines.

On 15.02.2025 01:39, Eli Bridge wrote:
[...]
> 1) There is unnecessary nozzle rotation happening. My nozzles are free
> rotating, no hose restrictions. I have the nozzles set to minimum
> rotation mode, but they still pre-rotate during pick-up for some reason.
> I don't see any way to shut it off.
>
Can you please verify if thats related to the nozzle pre-rotation PR
that was merged recently? I remember that we carefully tried to consider
all nozzle rotation modes, but maybe we missed somthing. Please disable
"Pre-Rotate All Nozzles" in the job processor configuration and retry.

> 2) I'd like to use visual calibration for nozzle changes, but I have
> very limited Z range because of the dual head (should have gotten the
> pulley type instead of the cam type). This creates problems with
> automatic nozzle changing because there is no safe Z level that is above
> an occupied nozzle rack. So I have my nozzle racks in the back two
> corners, and I have the nozzles sliding in and out sideways. It works as
> long as there's no misalignment, but I have had a couple of disasters
> (racks destroyed by my beefy motors). I would like to use the vision
> checking features in the nozzle changer page, but I cannot position the
> camera above the nozzles (the camera is between the nozzles and can't
> see the far edges of the working area). Also the camera cannot move out
> directly over the nozzle rack without a loaded nozzle hitting a stored
> nozzle. I was hoping I could use some sort of fiducial to the left or
> right of the rack to lock in a relative XY position, but it looks like
> the vision feature expects two reference images (nozzle stored and rack
> empty). But I cannot position the camera to see whether the rack is
> occupied. I understand why you would usually do it this way but then why
> are there options to do a visual check on the last position of the
> nozzle change path? You would not see a nozzle there, right? It would be
> great if this feature could work with the same reference image for empty
> and occupied rack positions, but that does not work (it always
> interprets the rack to be full).
>
IIRC the idea is, that nozzle change errors can be detected: if a nozzle
tip load fails, one will very likely find the tip still in the rack.

> 3) Is there a way to precisely control assembly order of some parts. I
> have some parts that are 7 mm tall, and they need to be assembled in a
> certain order across an array of 8 circuit boards to avoid collision.
> I'm guessing I would have to get into scripting for this....
>
No, not at present. There are two PRs pending, that add the option to
run a job in the order it is. Buth neither of them offers an option to
view the current order or modify it. I hope someone will update the UI
to support that soon.
I also don't see a away to controll the processing order using a
script. Neither can the Plan step of the JobProcessor (which sorts all
pending placements) nor the Planner (which selects the placement to
process) be controlled using scripting.

> 4) Issues with rotated rack feeder. I find the new (beta) rotated rack
> feature really nice. But there are a couple of confusing things. First,
> I think the rows and columns labels for setting up a feeder are
> reversed. Second, when I reset the feeder, the machine picks up the
> second part instead of the first. If I reset the feeder and change the
> feed number to -1 (negative one) then it picks up the first part.
>
What is the "rotated rack feeder"? There is a ReferenceRotatedTrayFeeder...

Jan

>
> On Sunday, February 2, 2025 at 8:11:21 PM UTC-6 Eli Bridge wrote:
>
> Finally got some time to work. Yes, Toni, I had to set the area of
> interest - should have seen that. After I got feeders all set up, I
> actually had the machine working, and I assembled an entire board.
> Then I started having hardware issues that culminated in a dead
> smoothieboard. I have ordered a new one so we'll see what happens in
> a couple of weeks.
> Eli
>
> On Thursday, January 30, 2025 at 9:49:29 AM UTC-6 tonyl...@gmail.com
> wrote:
>
> You need to set the Area of Interest. Click the Area of Interest
> Select button and then drag and size the selection box in the
> camera view. Note that the Area of Interest needs to be at least
> as large as the Template Image or you will get the above-
> mentioned error.
>
> On Wednesday, January 29, 2025 at 9:23:24 PM UTC-6
> obri...@gmail.com wrote:
>
> I wanted to try to figure it out first, but I can't find
> much info for this error. Here's a screenshot, log, and xml.
> Config is the same as above.
> Thanks again.
>
> Eli
> ScreenCap2.JPG
> On Wednesday, January 29, 2025 at 8:57:31 PM UTC-6
> tonyl...@gmail.com wrote:
>
> Please post you latest machine.xml file along with your
> log file.
>
> On Wednesday, January 29, 2025 at 5:36:24 PM UTC-6
> obri...@gmail.com wrote:
>
> Thank you Tony and others for looking into this. I
> added the lines to the xml file as Tony suggested. I
> now have a new error that seems to be associated
> wiht openCV. I have not had much time to work on
> this one yet.
>
> On Wednesday, January 29, 2025 at 5:06:12 PM UTC-6
> Jan wrote:
>
> Hi Tony!
> Thanks a lot for fixing that so quickly! Do you
> by change have any idea
> why that was not working anymore (I'm assuming
> that it was working
> before because I've not heard any complains)?
>
> Jan
>
> On 29.01.2025 23:27, tonyl...@gmail.com wrote:
> > I just merged PR1738 <https://github.com/
> openpnp/openpnp/pull/1738 <https://github.com/
> groups.google.com/d/msgid/openpnp/ <https://
> groups.google.com/d/msgid/openpnp/>
> >
> ab73b875-045f-4381-92b6-57dec0fed6ben%40googlegroups.com <http://40googlegroups.com> <https://
> > groups.google.com/d/msgid/openpnp/ <http://
> groups.google.com/d/msgid/openpnp/>
> >
> ab73b875-045f-4381-92b6-57dec0fed6ben%40googlegroups.com <http://40googlegroups.com>?
> > utm_medium=email&utm_source=footer>.
>
> --
> 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/55fe1778-7d54-410d-a973-68c0857f3da2n%40googlegroups.com
> <https://groups.google.com/d/msgid/openpnp/55fe1778-7d54-410d-
> a973-68c0857f3da2n%40googlegroups.com?utm_medium=email&utm_source=footer>.

Eli Bridge

unread,
Feb 19, 2025, 7:16:29 PM2/19/25
to OpenPnP
Dear Jan, 

Thanks for the response, and sorry for the slow follow up. 

For suggestion 1 (Please disable "Pre-Rotate All Nozzles" in the job processor configuration and retry) : I don't see "Pre-Rotate All Nozzles" as an option under the job processor set of options. All I see are settings for job order, max vision retries, and stop next motion. I guess I am looking in the wrong place or running an older version of OpenPnP.

For the last item. Yes, I meant "ReferenceRotatedTrayFeeder." Works well, but has some quirks.

Cheers,
Eli

Jan

unread,
Feb 20, 2025, 5:20:35 AM2/20/25
to ope...@googlegroups.com
Hi Eli!

On 20.02.2025 01:16, Eli Bridge wrote:
[...]
> For suggestion 1 (Please disable "Pre-Rotate All Nozzles" in the job
> processor configuration and retry) : I don't see "Pre-Rotate All
> Nozzles" as an option under the job processor set of options. All I see
> are settings for job order, max vision retries, and stop next motion. I
> guess I am looking in the wrong place or running an older version of
> OpenPnP.
>
What version do you use? On the current test version it looks as
documented in the Wiki
(https://github.com/openpnp/openpnp/wiki/Job-Processing#configuration).
On the current stable release the "Pre-Rotate All Nozzles" option is not
available.
Please verify your nozzle rotation mode once more. According to the
Wiki with "MinimalRotation" you shall not see any rotation before
picking. However, this only works if the nozzle rotation axis is only
used for this nozzles rotation and not shared with anything else. You
may provide us with a log at trace level and your machine.xml to have a
closer look.

> For the last item. Yes, I meant "ReferenceRotatedTrayFeeder." Works
> well, but has some quirks.
>
I've just verified the behavior: with "Feed Count" = 0 (after pressing
"Reset") the pick location is "Point A". When feed once (which is what
happens before the next pick in the job), "Feed Count" gets 1 and the
pick location is still "Point A". This looks consistent to me and solves
the hen-egg problem that you setup a feeder with a different (smaller)
feed count then it is used (each feeder is feed before picked). On a
other feed "Feed Count" is 2 and the pick location starts to move
towards "Point B". Once "Point B" is reached, the pick location is moved
to the next row behind "Point A". I also verified, that the calculated
"Tray Rotation" is 0 if Point A and B have the same X and A_y < B_y.
Can you please describe what you did, how the feeder reacted and what
behavior you expected?

Jan
> > > I just merged PR1738 <https://github.com/ <https://github.com/>
> > openpnp/openpnp/pull/1738 <https://github.com/ <https://github.com/>
> > groups.google.com/d/msgid/openpnp/ <http://groups.google.com/d/
> msgid/openpnp/> <https://
> > groups.google.com/d/msgid/openpnp/ <http://groups.google.com/d/
> msgid/openpnp/>>
> > >
> > ab73b875-045f-4381-92b6-57dec0fed6ben%40googlegroups.com
> <http://40googlegroups.com> <http://40googlegroups.com
> <http://40googlegroups.com>> <https://
> > > groups.google.com/d/msgid/openpnp/ <http://groups.google.com/d/
> msgid/openpnp/> <http://
> > groups.google.com/d/msgid/openpnp/ <http://groups.google.com/d/
> msgid/openpnp/>>
> > >
> > ab73b875-045f-4381-92b6-57dec0fed6ben%40googlegroups.com
> <http://40googlegroups.com> <http://40googlegroups.com
> <http://40googlegroups.com>>?
> > > utm_medium=email&utm_source=footer>.
> >
> > --
> > 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/
> <https://groups.google.com/d/msgid/>
> > openpnp/55fe1778-7d54-410d-a973-68c0857f3da2n%40googlegroups.com
> <http://40googlegroups.com>
> > <https://groups.google.com/d/msgid/openpnp/55fe1778-7d54-410d-
> <https://groups.google.com/d/msgid/openpnp/55fe1778-7d54-410d->
> > a973-68c0857f3da2n%40googlegroups.com?
> utm_medium=email&utm_source=footer <http://40googlegroups.com?
> utm_medium=email&utm_source=footer>>.
>
> --
> 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/
> f9dcb572-13f9-4a46-99e5-a062585bddb9n%40googlegroups.com <https://
> groups.google.com/d/msgid/openpnp/f9dcb572-13f9-4a46-99e5-
> a062585bddb9n%40googlegroups.com?utm_medium=email&utm_source=footer>.

Reply all
Reply to author
Forward
0 new messages