GCODE SYNC

327 views
Skip to first unread message

geo0rpo

unread,
Apr 30, 2021, 4:52:18 PM4/30/21
to OpenPnP
Hello,

How can I sync the machine with the auto feeder?
I mean I send a gcode "FEED1" and my feeder executes the feed but I want the machine to wait for completion before picking.
I tried M400 after the feed command but I get a timeout.

What is the proper response to M400?

I send an "OK\n"

Thanks.

ma...@makr.zone

unread,
May 1, 2021, 1:44:39 AM5/1/21
to ope...@googlegroups.com

You can define it yourself in the driver using the COMMAND_CONFIRM_REGEX

https://github.com/openpnp/openpnp/wiki/GcodeDriver#command_confirm_regex

However, I recommend using the standard, and this is "ok" (lower case) at the beginning of the line (doesn't matter what follows).

For GcodeDriver, all commands and responses are always line oriented, so they must end with new-line (which you already have).

_Mark

--
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 on the web visit https://groups.google.com/d/msgid/openpnp/aa8e596b-2df4-4d4a-9b39-14ab92173acbn%40googlegroups.com.

geo0rpo

unread,
May 1, 2021, 3:43:54 AM5/1/21
to ope...@googlegroups.com
OK, ideally the feeder should start the feed move, the machine should start moving to the feeder and once it gets there,wait for the feeder to respond OK before picking .
is this possible? 

You received this message because you are subscribed to a topic in the Google Groups "OpenPnP" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to openpnp+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/177dc8d1-d80b-41ad-514a-e4676c655e3c%40makr.zone.

geo0rpo

unread,
May 1, 2021, 5:22:55 AM5/1/21
to OpenPnP
It dos not work.

The reply sent by the driver should be "ok\n". Right?
And the command confirm regex  "^ok.*"
What is the "^" for?

geo0rpo

unread,
May 1, 2021, 6:02:09 AM5/1/21
to OpenPnP
Screenshot 2021-05-01 125824.png

I confirm that is works here.
But OpenPNP times out with M400 waiting for the ok
The reply in my board code is "printf("ok\n");"

And the Gcode for executing a feed (boolean) is 
FEED1
M400

The feeder moves and then times out.

Any ideas?

ma...@makr.zone

unread,
May 1, 2021, 7:38:29 AM5/1/21
to ope...@googlegroups.com

Yes it is, if you use the ReferenceAdvancedMotionPlanner:

https://github.com/openpnp/openpnp/wiki/Motion-Planner#choosing-a-motion-planner

Then on the Actuator, you can switch off the Before Actuation machine coordination and instead switch on the After Actuation machine coordination.

https://github.com/openpnp/openpnp/wiki/Motion-Planner#actuator-machine-coordination

Also read the section before that, to understand what happens.

https://github.com/openpnp/openpnp/wiki/Motion-Planner#motion-path-planning

_Mark

ma...@makr.zone

unread,
May 1, 2021, 7:40:40 AM5/1/21
to ope...@googlegroups.com

geo0rpo

unread,
May 1, 2021, 9:10:55 AM5/1/21
to OpenPnP
2021-05-01 16:07:08.721 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-01 16:07:08.722 ReferenceNozzle TRACE: N2.transformToHeadLocation((193.953459, 99.049084, 0.000000, -180.000000 mm), ...) runout compensation: (-0.071458, 0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:08.723 ReferenceNozzle TRACE: N2.transformToHeadLocation((193.953459, 99.049084, 0.000000, -180.000000 mm), ...) runout compensation: (-0.071458, 0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:08.723 ReferenceHead DEBUG: H1.moveToSafeZ(0.51)
2021-05-01 16:07:08.724 AbstractHeadMountable DEBUG: N1.moveToSafeZ(0.51)
2021-05-01 16:07:08.724 ReferenceNozzle TRACE: N1.transformToHeadLocation((193.953459, 99.049084, 0.000000, -180.000000 mm), ...) runout compensation: (0.007996, 0.051422, 0.000000, 0.000000 mm)
2021-05-01 16:07:08.725 ReferenceNozzle TRACE: N1.transformToHeadLocation((193.953459, 99.049084, 0.000000, -180.000000 mm), ...) runout compensation: (0.007996, 0.051422, 0.000000, 0.000000 mm)
2021-05-01 16:07:08.725 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-01 16:07:08.726 ReferenceNozzle TRACE: N2.transformToHeadLocation((193.953459, 99.049084, 0.000000, -180.000000 mm), ...) runout compensation: (-0.071458, 0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:08.726 ReferenceNozzle TRACE: N2.transformToHeadLocation((193.953459, 99.049084, 0.000000, -180.000000 mm), ...) runout compensation: (-0.071458, 0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:08.726 AbstractHeadMountable DEBUG: HeadCamera.moveToSafeZ(0.51)
2021-05-01 16:07:08.727 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, 0.000000, 0.000000 mm), 0.51)
2021-05-01 16:07:08.727 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:08.729 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, NaN, 0.000000 mm), 0.51)
2021-05-01 16:07:08.729 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:08.730 ReferenceActuator DEBUG: FEEDER1.actuate(false)
2021-05-01 16:07:08.730 GcodeAsyncDriver DEBUG: serial://COM4 commandQueue.offer(FEED1, 5000)...
2021-05-01 16:07:08.730 GcodeAsyncDriver DEBUG: serial://COM4 commandQueue.offer(M400, 5000)...
2021-05-01 16:07:08.730 GcodeDriver TRACE: [serial://COM4] confirmed FEED1
2021-05-01 16:07:08.731 GcodeAsyncDriver$WriterThread TRACE: [serial://COM4] >> FEED1
2021-05-01 16:07:08.732 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S126.53 G1 X23.5385 Y5.5424   B-360.0000 F10983.63 ; move to target, 20000)...
2021-05-01 16:07:08.733 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:08.733 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:08.733 GcodeDriver TRACE: [serial://COM3] confirmed G92B-180
2021-05-01 16:07:08.734 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S126.53G1X23.5385Y5.5424B-360F10983.63
2021-05-01 16:07:08.734 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:08.735 GcodeDriver TRACE: [serial://COM3] confirmed M204S126.53G1X23.5385Y5.5424B-360F10983.63
2021-05-01 16:07:08.735 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:11.634 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:11.634 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:11.635 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:11.636 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:0.0000 A:-180.0000 B:-360.0000
2021-05-01 16:07:11.636 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:0.0000 A:-180.0000 B:-360.0000
2021-05-01 16:07:11.637 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:0.000000, Rot_N1:-180.000000, Rot_N2:-360.000000)
2021-05-01 16:07:11.637 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:11.637 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(G92     B0.0000 ; reset coordinates, -1)...
2021-05-01 16:07:11.637 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:11.637 ReferenceHead DEBUG: H1.moveToSafeZ(0.51)
2021-05-01 16:07:11.638 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> G92B0
2021-05-01 16:07:11.638 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:11.638 AbstractHeadMountable DEBUG: N1.moveToSafeZ(0.51)
2021-05-01 16:07:11.638 ReferenceNozzle TRACE: N1.transformToHeadLocation((23.538542, 5.565422, 0.000000, -180.000000 mm), ...) runout compensation: (0.007996, 0.051422, 0.000000, 0.000000 mm)
2021-05-01 16:07:11.639 ReferenceNozzle TRACE: N1.transformToHeadLocation((23.538542, 5.565422, 0.000000, -180.000000 mm), ...) runout compensation: (0.007996, 0.051422, 0.000000, 0.000000 mm)
2021-05-01 16:07:11.639 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-01 16:07:11.640 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:11.640 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:11.640 AbstractHeadMountable DEBUG: HeadCamera.moveToSafeZ(0.51)
2021-05-01 16:07:11.641 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, 0.000000, 0.000000 mm), 0.51)
2021-05-01 16:07:11.641 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:11.642 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, -13.000000, 0.000000 mm), 0.51)
2021-05-01 16:07:11.642 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, -13.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:11.644 ReferenceNozzle DEBUG: N2.pick()
2021-05-01 16:07:11.645 Scripting TRACE: Scripting.on Nozzle.BeforePick
2021-05-01 16:07:11.646 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S260.10 G1   Z13.0000   F3488.94 ; move to target, 20000)...
2021-05-01 16:07:11.646 GcodeDriver TRACE: [serial://COM3] confirmed G92B0
2021-05-01 16:07:11.647 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S260.1G1Z13F3488.94
2021-05-01 16:07:11.648 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:11.648 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:11.649 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:11.649 GcodeDriver TRACE: [serial://COM3] confirmed M204S260.1G1Z13F3488.94
2021-05-01 16:07:11.649 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:11.742 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok
2021-05-01 16:07:11.742 GcodeDriver TRACE: [serial://COM4] confirmed FEED1
2021-05-01 16:07:11.743 GcodeAsyncDriver$WriterThread TRACE: [serial://COM4] >> M400
2021-05-01 16:07:12.096 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:12.096 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:12.097 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:12.098 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:12.098 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:12.099 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:13.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:12.099 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:12.099 ReferenceActuator DEBUG: DummyPump.actuate(true)
2021-05-01 16:07:12.099 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:12.099 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:12.100 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:12.100 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:12.100 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:12.100 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:12.101 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:12.102 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:12.103 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:12.103 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:13.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:12.103 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:12.103 ReferenceActuator DEBUG: Pump2.actuate(true)
2021-05-01 16:07:12.104 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M806, 20000)...
2021-05-01 16:07:12.104 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:12.105 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M806
2021-05-01 16:07:12.105 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:12.105 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:12.105 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:12.105 GcodeDriver TRACE: [serial://COM3] confirmed M806
2021-05-01 16:07:12.105 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:12.106 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:12.106 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:12.106 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:12.108 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:12.108 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:12.108 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:13.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:12.109 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:12.259 Scripting TRACE: Scripting.on Nozzle.AfterPick
2021-05-01 16:07:12.259 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-01 16:07:12.260 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:12.260 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, 0.000000, 0.000000 mm), 0.51)
2021-05-01 16:07:12.260 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:12.261 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:12.262 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S260.10 G1   Z0.0000   F3488.94 ; move to target, 20000)...
2021-05-01 16:07:12.263 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:12.263 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S260.1G1Z0F3488.94
2021-05-01 16:07:12.264 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:24.783 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-01 16:07:24.783 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.784 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.784 ReferenceHead DEBUG: H1.moveToSafeZ(0.51)
2021-05-01 16:07:24.784 AbstractHeadMountable DEBUG: N1.moveToSafeZ(0.51)
2021-05-01 16:07:24.784 ReferenceNozzle TRACE: N1.transformToHeadLocation((23.538542, 5.565422, 0.000000, -180.000000 mm), ...) runout compensation: (0.007996, 0.051422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.785 ReferenceNozzle TRACE: N1.transformToHeadLocation((23.538542, 5.565422, 0.000000, -180.000000 mm), ...) runout compensation: (0.007996, 0.051422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.785 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-01 16:07:24.786 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.787 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.787 AbstractHeadMountable DEBUG: HeadCamera.moveToSafeZ(0.51)
2021-05-01 16:07:24.788 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, 0.000000, 0.000000 mm), 0.51)
2021-05-01 16:07:24.788 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.789 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, NaN, 0.000000 mm), 0.51)
2021-05-01 16:07:24.790 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.790 ReferenceActuator DEBUG: FEEDER1.actuate(false)
2021-05-01 16:07:24.791 GcodeAsyncDriver DEBUG: serial://COM4 commandQueue.offer(FEED1, 5000)...
2021-05-01 16:07:24.791 GcodeAsyncDriver DEBUG: serial://COM4 commandQueue.offer(M400, 5000)...
2021-05-01 16:07:24.791 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:24.791 GcodeDriver TRACE: [serial://COM3] confirmed M204S260.1G1Z0F3488.94
2021-05-01 16:07:24.791 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:24.792 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:24.792 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:24.792 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:24.792 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:24.794 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:0.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:24.794 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:0.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:24.794 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:0.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:24.794 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:24.794 ReferenceHead DEBUG: H1.moveToSafeZ(0.51)
2021-05-01 16:07:24.795 AbstractHeadMountable DEBUG: N1.moveToSafeZ(0.51)
2021-05-01 16:07:24.795 ReferenceNozzle TRACE: N1.transformToHeadLocation((23.538542, 5.565422, 0.000000, -180.000000 mm), ...) runout compensation: (0.007996, 0.051422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.795 ReferenceNozzle TRACE: N1.transformToHeadLocation((23.538542, 5.565422, 0.000000, -180.000000 mm), ...) runout compensation: (0.007996, 0.051422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.796 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-01 16:07:24.796 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.796 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.797 AbstractHeadMountable DEBUG: HeadCamera.moveToSafeZ(0.51)
2021-05-01 16:07:24.797 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, 0.000000, 0.000000 mm), 0.51)
2021-05-01 16:07:24.798 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.799 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, -13.000000, 0.000000 mm), 0.51)
2021-05-01 16:07:24.799 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, -13.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:24.800 ReferenceNozzle DEBUG: N2.pick()
2021-05-01 16:07:24.800 Scripting TRACE: Scripting.on Nozzle.BeforePick
2021-05-01 16:07:24.801 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S260.10 G1   Z13.0000   F3488.94 ; move to target, 20000)...
2021-05-01 16:07:24.801 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:24.801 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S260.1G1Z13F3488.94
2021-05-01 16:07:24.801 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:24.802 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:24.802 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:24.803 GcodeDriver TRACE: [serial://COM3] confirmed M204S260.1G1Z13F3488.94
2021-05-01 16:07:24.804 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:25.250 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:25.250 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:25.251 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:25.253 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:25.254 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:25.254 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:13.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:25.254 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:25.254 ReferenceActuator DEBUG: DummyPump.actuate(true)
2021-05-01 16:07:25.255 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:25.255 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:25.255 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:25.255 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:25.256 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:25.256 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:25.256 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:25.258 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:25.259 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:25.259 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:13.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:25.259 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:25.259 ReferenceActuator DEBUG: Pump2.actuate(true)
2021-05-01 16:07:25.260 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M806, 20000)...
2021-05-01 16:07:25.260 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:25.260 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:25.260 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:25.260 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M806
2021-05-01 16:07:25.261 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:25.261 GcodeDriver TRACE: [serial://COM3] confirmed M806
2021-05-01 16:07:25.261 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:25.261 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:25.262 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:25.262 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:25.264 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:25.264 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:13.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:25.264 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:13.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:25.264 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:25.414 Scripting TRACE: Scripting.on Nozzle.AfterPick
2021-05-01 16:07:25.415 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-01 16:07:25.415 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:25.415 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, 0.000000, 0.000000 mm), 0.51)
2021-05-01 16:07:25.416 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:25.417 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.538542, 5.565422, 0.000000, 0.000000 mm), ...) runout compensation: (0.071458, -0.042422, 0.000000, 0.000000 mm)
2021-05-01 16:07:25.418 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S260.10 G1   Z0.0000   F3488.94 ; move to target, 20000)...
2021-05-01 16:07:25.418 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:25.419 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S260.1G1Z0F3488.94
2021-05-01 16:07:25.419 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:29.793 GcodeAsyncDriver$WriterThread TRACE: [serial://COM4] >> M400
2021-05-01 16:07:29.805 ReferenceActuator DEBUG: FEEDER1.actuate(false)
2021-05-01 16:07:29.806 MessageBoxes DEBUG: Error: java.lang.Exception: serial://COM4 error response from controller: serial://COM4 timeout waiting for response to M400
2021-05-01 16:07:57.426 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:57.427 GcodeDriver TRACE: [serial://COM3] confirmed M204S260.1G1Z0F3488.94
2021-05-01 16:07:57.427 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:57.428 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:57.428 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:57.429 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:57.430 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:57.433 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:0.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:57.433 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:0.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:57.434 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:0.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:57.435 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-01 16:07:57.435 ReferenceActuator DEBUG: Pump2.actuate(false)
2021-05-01 16:07:57.435 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M807, 20000)...
2021-05-01 16:07:57.438 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-01 16:07:57.439 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-01 16:07:57.439 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-01 16:07:57.440 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M807
2021-05-01 16:07:57.440 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:57.440 GcodeDriver TRACE: [serial://COM3] confirmed M807
2021-05-01 16:07:57.441 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-01 16:07:57.441 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-01 16:07:57.442 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-01 16:07:57.442 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-01 16:07:57.445 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5385 Y:5.5424 Z:0.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:57.446 GcodeDriver TRACE: Position report: ok C: X:23.5385 Y:5.5424 Z:0.0000 A:-180.0000 B:0.0000
2021-05-01 16:07:57.446 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.538500, Y:5.542400, Z:0.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-01 16:07:57.447 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.



COM3 is smoothieboard.
COM4 is my feeder driver board.

1.png

2.png

3.png

4.png

5.png

6.png

ma...@makr.zone

unread,
May 1, 2021, 11:24:48 AM5/1/21
to ope...@googlegroups.com

Hi geo0rpo

this does not make sense. It is completely the wrong order.

2021-05-01 16:07:08.730 GcodeDriver TRACE: [serial://COM4] confirmed FEED1
2021-05-01 16:07:08.731 GcodeAsyncDriver$WriterThread TRACE: [serial://COM4] >> FEED1

I suspect it has completely lost the synchronization and the "confirmed FEED1" comes from an earlier FEED1

Just in case this ic not clear yet: each command you send to the controller must return exactly one "ok\n", not only M400. They must match up like a zipper.

_Mark

geo0rpo

unread,
May 1, 2021, 12:02:23 PM5/1/21
to ope...@googlegroups.com
my board sends ok\n as a response only when the feed1 command finishes the feed move. my board does not respond to the M400 command. I thought M400 says to openpnp to wait for OK before proceeding to the next move which is pick the part on our case. is this wrong? 
even if this is the case, first I tried without M400. only with sync after actuation but then the machine does not wait for the feed to complete. it tries to pick the part at the same time the part tape is moving. please help me understand.

my board parses and searches for FEED1 FEED2 etc commands. then it actually moves the tape. as soon as it finishes it replies ok\n.

so based on that what is the proper way for the machine to wait before picking?



geo0rpo

unread,
May 1, 2021, 12:05:28 PM5/1/21
to ope...@googlegroups.com
mmm. maybe send ok\n as a response to the FEED command and then another ok when the move finishes?


On Sat, 1 May 2021, 18:24 ma...@makr.zone, <ma...@makr.zone> wrote:

ma...@makr.zone

unread,
May 1, 2021, 1:15:37 PM5/1/21
to ope...@googlegroups.com
  1. The usual "NC" way this works is to respond with ok to every command immediately, even if the command is queued and/or will take some time to finish.
  2. Only the M400 command has the special property to wait until all the queued commands have completed and only then it returns ok.

This is the best for performance, when it matters, but I don't think 1. is important here. You could also wait for each command to finish and only then return ok.

However because the GcodeAsnycDriver expects a M400 command, you must define one and your controller must return its separate "ok" for it. For machine coordination to work properly this needs to be the case.

You could have left it a GcodeDriver (without the "Async") then it would (probably) also have worked without M400. You can still convert it backwarts, but you need to exit OpenPnP, go into the  machine.xml, find the right driver and remove the "Async" there, then reload and remove all the properties and elements the XML paser complains about.

If you have no axes on the feeder driver, then Issues & Solutions should not offer to convert it to "Async" (it has in the past, but it does not do that any longer). 

> but then the machine does not wait for the feed to complete. it tries to pick the part at the same time the part tape is moving.

I believe that when you fix that, this will no longer be the case.

Btw. have you checked proper M400 operation on the main motion driver?

_Mark

geo0rpo

unread,
May 1, 2021, 5:16:58 PM5/1/21
to OpenPnP
OK, Now I have an ok\n response for the FEED command and an ok\n response for the M400.
The commands does not timeout anymore since it gets the answer but again the feed is not synced with the pick. The pick does not wait for the M400 to receive the response.
The feed duration is 3 seconds.

Below is the log of a single "perform and feed and pick" command.

Please also tell me what is the "^" in the "^ok.*" reply? 

2021-05-02 00:10:12.059 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-02 00:10:12.060 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, 0.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.060 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, 0.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.060 ReferenceActuator DEBUG: FEEDER.actuate(1.0)
2021-05-02 00:10:12.060 GcodeAsyncDriver DEBUG: serial://COM4 commandQueue.offer(FEED1, 5000)...
2021-05-02 00:10:12.060 GcodeAsyncDriver DEBUG: serial://COM4 commandQueue.offer(M400, 5000)...
2021-05-02 00:10:12.061 GcodeDriver TRACE: [serial://COM4] confirmed M400
2021-05-02 00:10:12.061 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-02 00:10:12.061 GcodeAsyncDriver$WriterThread TRACE: [serial://COM4] >> FEED1
2021-05-02 00:10:12.061 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-02 00:10:12.061 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-02 00:10:12.061 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-02 00:10:12.062 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-02 00:10:12.062 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-02 00:10:12.062 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-02 00:10:12.062 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok
2021-05-02 00:10:12.062 GcodeDriver TRACE: [serial://COM4] confirmed FEED1
2021-05-02 00:10:12.063 GcodeAsyncDriver$WriterThread TRACE: [serial://COM4] >> M400
2021-05-02 00:10:12.063 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5299 Y:5.5047 Z:0.0000 A:-180.0000 B:0.0000
2021-05-02 00:10:12.064 GcodeDriver TRACE: Position report: ok C: X:23.5299 Y:5.5047 Z:0.0000 A:-180.0000 B:0.0000
2021-05-02 00:10:12.064 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.529900, Y:5.504700, Z:0.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-02 00:10:12.064 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-02 00:10:12.064 ReferenceHead DEBUG: H1.moveToSafeZ(0.51)
2021-05-02 00:10:12.064 AbstractHeadMountable DEBUG: N1.moveToSafeZ(0.51)
2021-05-02 00:10:12.064 ReferenceNozzle TRACE: N1.transformToHeadLocation((23.529936, 5.527660, 0.000000, -180.000000 mm), ...) runout compensation: (-0.008298, -0.016421, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.065 ReferenceNozzle TRACE: N1.transformToHeadLocation((23.529936, 5.527660, 0.000000, -180.000000 mm), ...) runout compensation: (-0.008298, -0.016421, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.065 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-02 00:10:12.065 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, 0.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.066 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, 0.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.066 AbstractHeadMountable DEBUG: HeadCamera.moveToSafeZ(0.51)
2021-05-02 00:10:12.066 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, 0.000000, 0.000000 mm), 0.51)
2021-05-02 00:10:12.066 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, 0.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.067 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, -10.000000, 0.000000 mm), 0.51)
2021-05-02 00:10:12.067 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, -10.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.068 ReferenceNozzle DEBUG: N2.pick()
2021-05-02 00:10:12.068 Scripting TRACE: Scripting.on Nozzle.BeforePick
2021-05-02 00:10:12.069 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S260.10 G1   Z10.0000   F3060.00 ; move to target, 20000)...
2021-05-02 00:10:12.069 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-02 00:10:12.069 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-02 00:10:12.069 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-02 00:10:12.069 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S260.1G1Z10F3060
2021-05-02 00:10:12.070 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-02 00:10:12.070 GcodeDriver TRACE: [serial://COM3] confirmed M204S260.1G1Z10F3060
2021-05-02 00:10:12.070 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-02 00:10:12.462 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-02 00:10:12.462 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-02 00:10:12.463 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-02 00:10:12.465 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5299 Y:5.5047 Z:10.0000 A:-180.0000 B:0.0000
2021-05-02 00:10:12.465 GcodeDriver TRACE: Position report: ok C: X:23.5299 Y:5.5047 Z:10.0000 A:-180.0000 B:0.0000
2021-05-02 00:10:12.465 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.529900, Y:5.504700, Z:10.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-02 00:10:12.465 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-02 00:10:12.465 ReferenceActuator DEBUG: DummyPump.actuate(true)
2021-05-02 00:10:12.466 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-02 00:10:12.467 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-02 00:10:12.467 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-02 00:10:12.467 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-02 00:10:12.468 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-02 00:10:12.468 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-02 00:10:12.468 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-02 00:10:12.470 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5299 Y:5.5047 Z:10.0000 A:-180.0000 B:0.0000
2021-05-02 00:10:12.470 GcodeDriver TRACE: Position report: ok C: X:23.5299 Y:5.5047 Z:10.0000 A:-180.0000 B:0.0000
2021-05-02 00:10:12.470 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.529900, Y:5.504700, Z:10.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-02 00:10:12.471 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-02 00:10:12.471 ReferenceActuator DEBUG: Pump2.actuate(true)
2021-05-02 00:10:12.471 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M806, 20000)...
2021-05-02 00:10:12.471 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-02 00:10:12.471 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M806
2021-05-02 00:10:12.471 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 39216)...
2021-05-02 00:10:12.471 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-02 00:10:12.472 GcodeDriver TRACE: [serial://COM3] confirmed M806
2021-05-02 00:10:12.472 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-02 00:10:12.472 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-02 00:10:12.472 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-02 00:10:12.472 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-02 00:10:12.473 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-02 00:10:12.474 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:23.5299 Y:5.5047 Z:10.0000 A:-180.0000 B:0.0000
2021-05-02 00:10:12.474 GcodeDriver TRACE: Position report: ok C: X:23.5299 Y:5.5047 Z:10.0000 A:-180.0000 B:0.0000
2021-05-02 00:10:12.475 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:23.529900, Y:5.504700, Z:10.000000, Rot_N1:-180.000000, Rot_N2:0.000000)
2021-05-02 00:10:12.475 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-02 00:10:12.625 Scripting TRACE: Scripting.on Nozzle.AfterPick
2021-05-02 00:10:12.625 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.51)
2021-05-02 00:10:12.625 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, 0.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.626 AbstractHeadMountable DEBUG: N2.moveTo((23.990000, 43.303000, 0.000000, 0.000000 mm), 0.51)
2021-05-02 00:10:12.626 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, 0.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.627 ReferenceNozzle TRACE: N2.transformToHeadLocation((23.529936, 5.527660, 0.000000, 0.000000 mm), ...) runout compensation: (0.080064, -0.004660, 0.000000, 0.000000 mm)
2021-05-02 00:10:12.627 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S260.10 G1   Z0.0000   F3060.00 ; move to target, 20000)...
2021-05-02 00:10:12.627 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-02 00:10:12.628 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S260.1G1Z0F3060
2021-05-02 00:10:12.628 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-02 00:10:15.069 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok


10.png

11.png

12.png



geo0rpo

unread,
May 1, 2021, 5:50:39 PM5/1/21
to OpenPnP
Update:
It works with the GcodeDriver (Not Async).

1) FEED Command
2) ok response from feeder board.
3) M400 command
4)  ok response from feeder board when the move is complete.
5) machine picks part!!!

It works but the machine does not move while feeding. It waits for the feed to complete.

ma...@makr.zone

unread,
May 2, 2021, 3:54:45 AM5/2/21
to ope...@googlegroups.com

Hi geo0pro

> Please also tell me what is the "^" in the "^ok.*" reply?

It matches the beginning of a line, i.e. the "ok" must come as the first two characters on the  line.

> Your screenshot:

Oh, I see you have the M400 in the ACUATE_DOUBLE_COMMAND. You need to put it in the MOVE_TO_COMPLETE_COMMAND instead. In case of a pure feeder controller this is a bit of a misnomer (historical reasons), but you still need that command for machine coordination.

Then please check your feeder, if it has an option to move before feed. This must be enabled for it to work.

Combine this with the actuator coordination to get the right behavior. Again, on the Actuator, you must switch off the Before Actuation machine coordination and instead switch on the After Actuation machine coordination.

https://github.com/openpnp/openpnp/wiki/Motion-Planner#actuator-machine-coordination

Regardless of all the above, looking at the log, I don't understand, why the feeder takes so long to answer the M400.

2021-05-02 00:10:12.063 GcodeAsyncDriver$WriterThread TRACE: [serial://COM4] >> M400

... 3 seconds(!) later ...

2021-05-02 00:10:15.069 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok

Are sou sure the serial buffer is properly flushed on your controller? Note that OpenPnP uses a separate reader thread per connection that is constantly sucking on the serial, so there is no delay there.

> It works but the machine does not move while feeding. It waits for the feed to complete.

Yes, parallel operation is exactly the advantage only the "Async" driver can provide.

_Mark

geo0rpo

unread,
May 2, 2021, 4:04:27 AM5/2/21
to ope...@googlegroups.com
the feeder motor needs about 3 seconds to complete the feed and after that I reply OK to M400. that is why the 3" delay. Am I wrong again? 
so you suggest I switch back to async again?


--
You received this message because you are subscribed to a topic in the Google Groups "OpenPnP" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to openpnp+u...@googlegroups.com.

geo0rpo

unread,
May 2, 2021, 4:15:41 AM5/2/21
to ope...@googlegroups.com
the move before feed needs async driver? 

On Sun, 2 May 2021, 10:54 ma...@makr.zone, <ma...@makr.zone> wrote:
--
You received this message because you are subscribed to a topic in the Google Groups "OpenPnP" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to openpnp+u...@googlegroups.com.

ma...@makr.zone

unread,
May 2, 2021, 9:55:55 AM5/2/21
to ope...@googlegroups.com

> the feeder motor needs about 3 seconds to complete the feed

Ah, this is the normal time? OK.

> the move before feed needs async driver?

No, not per se.  But if you want the move and the feed to overlap in time, then yes.

Please give feed-back to the actuator coordination I suggested etc. Otherwise I'm flying blind, here.

_Mark

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 on the web visit https://groups.google.com/d/msgid/openpnp/CANKvoS2jM3GHk-OP3_ZMRmjwjvhSwO9FSAAbPSpoUv%3DOjtvjug%40mail.gmail.com.

geo0rpo

unread,
May 2, 2021, 2:30:36 PM5/2/21
to OpenPnP
Hi Mark,

1) " move before feed "  did not change anything. The machine still waits for the feed to complete and then moves to the feeder and pick up.

2) In all cases, I have Machine coordination After Actuation.

3) If I remove the M400 from the "actuate double" command and put it in the MOVE_TO_COMPLETE_COMMAND then it does not wait for the feed to complete.
     The machine tries to pick up at the same time the part tape is moving. Is actuation a move command?

For now, the problem is solved even if the machine has to wait for the feed to complete and then move to the feeder.
Any ideas are more than welcome :)

Remember, I use GcodeDriver. (Not Async)

geo0rpo

unread,
May 2, 2021, 3:31:00 PM5/2/21
to OpenPnP
Update:
When I perform a "feed and pick" from the feeders menu, the feeder moves and when the move completes then the machine goes to the feeder and picks the part. This is OK.
When I tried a test job with both nozzles something really bad happened.
The feeder advances one part, the machine moves, lowers Nozzle1, does not lift back to 0, the feeder advances one more part (with Nozzle 1 Tip lowered in the previous part dragging the Tip :(  ) and only after that, Nozzle 1 returns to 0 and Nozzle 2 moves and picks the 2nd part.
The First Nozzle should complete the pick and then feed the next part.
I tried both with "Move before feed" enabled and disabled.

Take a look: 

geo0rpo

unread,
May 2, 2021, 3:32:54 PM5/2/21
to OpenPnP

geo0rpo

unread,
May 2, 2021, 3:46:19 PM5/2/21
to OpenPnP
In the video I removed the tips to avoid damage.

ma...@makr.zone

unread,
May 2, 2021, 3:55:29 PM5/2/21
to ope...@googlegroups.com

> " move before feed "  did not change anything.

Strange.

> When I tried a test job with both nozzles something really bad happened.

Ok, I see, switching off Before Actuation does not work in this case, with the nozzle still down there. If you had After Pick vacuum test, it would probably work. I wasn't tzhink about this case. Please switch Before Actuation on.

> 3) If I remove the M400 from the "actuate double" command and put it in the MOVE_TO_COMPLETE_COMMAND then it does not wait for the feed to complete.  The machine tries to pick up at the same time the part tape is moving. Is actuation a move command?

According to the code, it should not go down in Z, before the feed is complete.

I would need a log and a machine.xml as well.

_Mark

Clemens Koller

unread,
May 2, 2021, 6:31:23 PM5/2/21
to ope...@googlegroups.com
Hallo, geo0rpo!

I was watching some of your YT videos. Nice setup, btw.

Do you have a Nozzle Calibration in place, already?

If yes, can you check, that when you are in the middle of a normal job, when OpenPnP is changing a nozzle and then tries to
to a nozzle calibration, that it doesn't timeout in between the nozzle change and the nozzle calibration?
I was running into issues and unfortunately haven't had time to debug that in depth.

Your movements are quite slow, which I think is good for testing purposes and to check if all the handshake machanisms are really working.

Greets,

Clemens

On 02/05/2021 21.31, geo0rpo wrote:
> Update:
> When I perform a "feed and pick" from the feeders menu, the feeder moves and when the move completes then the machine goes to the feeder and picks the part. This is OK.
> When I tried a test job with both nozzles something really bad happened.
> The feeder advances one part, the machine moves, lowers Nozzle1, _does not lift back to 0_, the feeder advances one more part (with Nozzle 1 Tip lowered in the previous part dragging the Tip :(  ) and only after that, Nozzle 1 returns to 0 and Nozzle 2 moves and picks the 2nd part.
> The First Nozzle should complete the pick and then feed the next part.
> I tried both with "Move before feed" enabled and disabled.
>
> Take a look: 
>
>
>
> On Sunday, May 2, 2021 at 9:30:36 PM UTC+3 geo0rpo wrote:
>
> Hi Mark,
>
> 1) " /move before feed "  /did not change anything. The machine still waits for the feed to complete and then moves to the feeder and pick up.
>
> 2) In all cases, I have Machine coordination After Actuation.
>
> 3) If I remove the M400 from the "actuate double" command and put it in the MOVE_TO_COMPLETE_COMMAND then it does not wait for the feed to complete.
>      The machine tries to pick up at the same time the part tape is moving. Is actuation a move command?
>
> For now, the problem is solved even if the machine has to wait for the feed to complete and then move to the feeder.
> Any ideas are more than welcome :)
>
> Remember, I use GcodeDriver. (Not Async)
>
>
>
> On Sunday, May 2, 2021 at 4:55:55 PM UTC+3 ma...@makr.zone wrote:
>
> /> the feeder motor needs about 3 seconds to complete the feed /
>
> Ah, this is the normal time? OK.
>
> /> the move before feed needs async driver? /
>
> No, not per se.  But if you want the move and the feed to overlap in time, then yes.
>
> Please give feed-back to the actuator coordination I suggested etc. Otherwise I'm flying blind, here.
>
> _Mark
>
> Am 02.05.2021 um 10:04 schrieb geo0rpo:
>> the feeder motor needs about 3 seconds to complete the feed and after that I reply OK to M400. that is why the 3" delay. Am I wrong again? 
>> so you suggest I switch back to async again?
>>
>>
>> On Sun, 2 May 2021, 10:54 ma...@makr.zone, <ma...@makr.zone> wrote:
>>
>> Hi geo0pro
>>
>> /> //Please also tell me what is the "^" in the "^ok.*" reply?
>> /
>>
>> It matches the beginning of a line, i.e. the "ok" must come as the first two characters on the  line.
>>
>> /> Your screenshot://
>> /
>>
>> Oh, I see you have the M400 in the ACUATE_DOUBLE_COMMAND. You need to put it in the MOVE_TO_COMPLETE_COMMAND instead. In case of a pure feeder controller this is a bit of a misnomer (historical reasons), but you still need that command for machine coordination.
>>
>> Then please check your feeder, if it has an option to *move before feed*. This must be *en*abled for it to work.
>>
>> Combine this with the actuator coordination to get the right behavior. Again, on the Actuator, you must switch *off *the*Before Actuation* machine coordination and instead switch *on *the *After Actuation* machine coordination.
>>
>> https://github.com/openpnp/openpnp/wiki/Motion-Planner#actuator-machine-coordination <https://github.com/openpnp/openpnp/wiki/Motion-Planner#actuator-machine-coordination>
>>
>> Regardless of all the above, looking at the log, I don't understand, why the feeder takes so long to answer the M400.
>>
>> 2021-05-02 00:10:12.063 GcodeAsyncDriver$WriterThread TRACE: [serial://COM4] >> M400
>>
>> ... 3 seconds(!) later ...
>>
>> 2021-05-02 00:10:15.069 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok
>>
>> Are sou sure the serial buffer is properly flushed on your controller? Note that OpenPnP uses a separate reader thread per connection that is constantly sucking on the serial, so there is no delay there.
>>
>> /> It works but the machine does not move while feeding. It waits for the feed to complete./
>> To unsubscribe from this topic, visit https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe <https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe>.
>> To unsubscribe from this group and all its topics, send an email to openpnp+u...@googlegroups.com.
>> To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/2bf3d5ab-641a-7f7c-8314-b6563c2a09ae%40makr.zone <https://groups.google.com/d/msgid/openpnp/2bf3d5ab-641a-7f7c-8314-b6563c2a09ae%40makr.zone?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 on the web visit https://groups.google.com/d/msgid/openpnp/CANKvoS2jM3GHk-OP3_ZMRmjwjvhSwO9FSAAbPSpoUv%3DOjtvjug%40mail.gmail.com <https://groups.google.com/d/msgid/openpnp/CANKvoS2jM3GHk-OP3_ZMRmjwjvhSwO9FSAAbPSpoUv%3DOjtvjug%40mail.gmail.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 on the web visit https://groups.google.com/d/msgid/openpnp/d771889f-2437-4ab7-a963-bb379209ce7en%40googlegroups.com <https://groups.google.com/d/msgid/openpnp/d771889f-2437-4ab7-a963-bb379209ce7en%40googlegroups.com?utm_medium=email&utm_source=footer>.

geo0rpo

unread,
May 3, 2021, 4:39:19 AM5/3/21
to OpenPnP
1) The "Before Actuation" solved the problem.

2) This the the log of a single "feed and pick" with the M400 moved in the MOVE_TO_COMPLETE_COMMAND"
The actuator is not in sync. The tape moves at the same time the tip lowers to pick the part.

2021-05-03 11:34:45.525 AbstractHeadMountable DEBUG: N1.moveToSafeZ(0.49)
2021-05-03 11:34:45.526 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, 0.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:45.526 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, 0.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:45.526 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 40816)...
2021-05-03 11:34:45.527 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-03 11:34:45.527 GcodeDriver TRACE: [serial://COM3] confirmed M204S240.1G1Z0F2629.62
2021-05-03 11:34:45.527 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-03 11:34:45.527 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-03 11:34:45.528 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-03 11:34:45.528 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-03 11:34:45.529 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:74.6331 Y:5.2524 Z:0.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.530 GcodeDriver TRACE: Position report: ok C: X:74.6331 Y:5.2524 Z:0.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.530 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:74.633100, Y:5.252400, Z:0.000000, Rot_N1:0.000000, Rot_N2:-180.000000)
2021-05-03 11:34:45.530 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-03 11:34:45.530 ReferenceActuator DEBUG: FEEDER.actuate(1.0)
2021-05-03 11:34:45.530 GcodeDriver DEBUG: [serial://COM4] >> FEED1, 7000
2021-05-03 11:34:45.533 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok
2021-05-03 11:34:45.534 GcodeDriver TRACE: [serial://COM4] confirmed FEED1
2021-05-03 11:34:45.534 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 40816)...
2021-05-03 11:34:45.534 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-03 11:34:45.534 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-03 11:34:45.535 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-03 11:34:45.535 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-03 11:34:45.535 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-03 11:34:45.536 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-03 11:34:45.537 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:74.6331 Y:5.2524 Z:0.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.537 GcodeDriver TRACE: Position report: ok C: X:74.6331 Y:5.2524 Z:0.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.538 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:74.633100, Y:5.252400, Z:0.000000, Rot_N1:0.000000, Rot_N2:-180.000000)
2021-05-03 11:34:45.538 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-03 11:34:45.538 ReferenceHead DEBUG: H1.moveToSafeZ(0.49)
2021-05-03 11:34:45.539 AbstractHeadMountable DEBUG: N1.moveToSafeZ(0.49)
2021-05-03 11:34:45.539 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, 0.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:45.539 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, 0.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:45.540 AbstractHeadMountable DEBUG: N2.moveToSafeZ(0.49)
2021-05-03 11:34:45.540 ReferenceNozzle TRACE: N2.transformToHeadLocation((74.633088, 5.325222, 0.000000, -180.000000 mm), ...) runout compensation: (-0.028504, -0.000000, 0.000000, 0.000000 mm)
2021-05-03 11:34:45.540 ReferenceNozzle TRACE: N2.transformToHeadLocation((74.633088, 5.325222, 0.000000, -180.000000 mm), ...) runout compensation: (-0.028504, -0.000000, 0.000000, 0.000000 mm)
2021-05-03 11:34:45.541 AbstractHeadMountable DEBUG: HeadCamera.moveToSafeZ(0.49)
2021-05-03 11:34:45.541 AbstractHeadMountable DEBUG: N1.moveTo((24.390000, 43.203000, 0.000000, 0.000000 mm), 0.49)
2021-05-03 11:34:45.542 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, 0.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:45.542 AbstractHeadMountable DEBUG: N1.moveTo((24.390000, 43.203000, -8.000000, 0.000000 mm), 0.49)
2021-05-03 11:34:45.542 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, -8.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:45.543 ReferenceNozzle DEBUG: N1.pick()
2021-05-03 11:34:45.543 Scripting TRACE: Scripting.on Nozzle.BeforePick
2021-05-03 11:34:45.544 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S240.10 G1   Z-8.0000   F2629.62 ; move to target, 20000)...
2021-05-03 11:34:45.544 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-03 11:34:45.544 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 40816)...
2021-05-03 11:34:45.545 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-03 11:34:45.545 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S240.1G1Z-8F2629.62
2021-05-03 11:34:45.545 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-03 11:34:45.546 GcodeDriver TRACE: [serial://COM3] confirmed M204S240.1G1Z-8F2629.62
2021-05-03 11:34:45.546 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-03 11:34:45.911 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-03 11:34:45.911 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-03 11:34:45.912 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-03 11:34:45.912 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:74.6331 Y:5.2524 Z:-8.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.913 GcodeDriver TRACE: Position report: ok C: X:74.6331 Y:5.2524 Z:-8.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.913 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:74.633100, Y:5.252400, Z:-8.000000, Rot_N1:0.000000, Rot_N2:-180.000000)
2021-05-03 11:34:45.913 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-03 11:34:45.913 ReferenceActuator DEBUG: DummyPump.actuate(true)
2021-05-03 11:34:45.913 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 40816)...
2021-05-03 11:34:45.914 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-03 11:34:45.914 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-03 11:34:45.914 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-03 11:34:45.914 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-03 11:34:45.915 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-03 11:34:45.915 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-03 11:34:45.917 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:74.6331 Y:5.2524 Z:-8.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.918 GcodeDriver TRACE: Position report: ok C: X:74.6331 Y:5.2524 Z:-8.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.918 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:74.633100, Y:5.252400, Z:-8.000000, Rot_N1:0.000000, Rot_N2:-180.000000)
2021-05-03 11:34:45.918 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-03 11:34:45.918 ReferenceActuator DEBUG: Pump1.actuate(true)
2021-05-03 11:34:45.918 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M800, 20000)...
2021-05-03 11:34:45.918 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M400, 40816)...
2021-05-03 11:34:45.919 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-03 11:34:45.919 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M114 ; get position, -1)...
2021-05-03 11:34:45.919 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M800
2021-05-03 11:34:45.919 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-03 11:34:45.920 GcodeDriver TRACE: [serial://COM3] confirmed M800
2021-05-03 11:34:45.920 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M400
2021-05-03 11:34:45.920 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-03 11:34:45.920 GcodeDriver TRACE: [serial://COM3] confirmed M400
2021-05-03 11:34:45.921 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M114
2021-05-03 11:34:45.922 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok C: X:74.6331 Y:5.2524 Z:-8.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.923 GcodeDriver TRACE: Position report: ok C: X:74.6331 Y:5.2524 Z:-8.0000 A:0.0000 B:-180.0000
2021-05-03 11:34:45.923 GcodeDriver TRACE: GcodeDriver got lastReportedLocation (X:74.633100, Y:5.252400, Z:-8.000000, Rot_N1:0.000000, Rot_N2:-180.000000)
2021-05-03 11:34:45.923 GcodeAsyncDriver TRACE: GcodeDriver confirmation complete.
2021-05-03 11:34:46.073 Scripting TRACE: Scripting.on Nozzle.AfterPick
2021-05-03 11:34:46.073 AbstractHeadMountable DEBUG: N1.moveToSafeZ(0.49)
2021-05-03 11:34:46.074 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, 0.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:46.074 AbstractHeadMountable DEBUG: N1.moveTo((24.390000, 43.203000, 0.000000, 0.000000 mm), 0.49)
2021-05-03 11:34:46.074 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, 0.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:46.075 ReferenceNozzle TRACE: N1.transformToHeadLocation((74.633088, 5.325222, 0.000000, 0.000000 mm), ...) runout compensation: (-0.014088, 0.024778, 0.000000, 0.000000 mm)
2021-05-03 11:34:46.076 GcodeAsyncDriver DEBUG: serial://COM3 commandQueue.offer(M204 S240.10 G1   Z0.0000   F2629.62 ; move to target, 20000)...
2021-05-03 11:34:46.077 GcodeDriver TRACE: [serial://COM3] confirmed M114
2021-05-03 11:34:46.077 GcodeAsyncDriver$WriterThread TRACE: [serial://COM3] >> M204S240.1G1Z0F2629.62
2021-05-03 11:34:46.078 GcodeDriver$ReaderThread TRACE: [serial://COM3] << ok
2021-05-03 11:34:47.325 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok




geo0rpo

unread,
May 3, 2021, 4:42:04 AM5/3/21
to OpenPnP
Hi Clemens,
Yes I have tip calibration. It does not timeout during tip calibration after tip change but I remember that I had a similar problem and Mark suggested handshake.
I will search for the post and tell you.

geo0rpo

unread,
May 3, 2021, 5:20:46 AM5/3/21
to OpenPnP
Also please take a look at the video https://www.youtube.com/watch?v=dhwyM4mj1LQ&t=1s

1)Left Nozzle  moves fast to the feeder, Right Nozzle makes a slower move.
2)They both move very fast to the bottom camera.
3)Left Nozzle moves fast to the place position, Right Nozzle makes a slower move.

Are there different speed settings according to the current task?

ma...@makr.zone

unread,
May 3, 2021, 7:02:06 AM5/3/21
to ope...@googlegroups.com

I don't understand. I do not see the M400 being sent from COM4. But I see an extra ok.

If I filter the lines by "COM4" I get this:

2021-05-03 11:34:45.530 GcodeDriver DEBUG: [serial://COM4] >> FEED1, 7000
2021-05-03 11:34:45.533 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok
2021-05-03 11:34:45.534 GcodeDriver TRACE: [serial://COM4] confirmed FEED1

2021-05-03 11:34:47.325 GcodeDriver$ReaderThread TRACE: [serial://COM4] << ok

This does not make sense.

_Mark

ma...@makr.zone

unread,
May 3, 2021, 7:12:15 AM5/3/21
to ope...@googlegroups.com

1) Nozzle 2 needs to wait for the (slow) feeder. For Nozzle 1 the wait was already done earlier, after the last placement.

3) Seems to be the rotation. Nozzle 2 has a shorter distance for the rotation to take place. Nozzle 1 has all the distance from the camera.

I guess your rotation axis speed could be increased. Also make sure to have set the driver feedrate to zero, so it is not effective.

_Mark

geo0rpo

unread,
May 3, 2021, 7:31:01 AM5/3/21
to OpenPnP

This happened when I moved the M400 to the  MOVE_TO_COMPLETE_COMMAND.
The M400 is not being sent.


Also in my feeder board I do not search for M400. I send ok when I see "FEEDx" command and then another ok when the feed is complete.
That is why you see the 2nd ok without M400.



geo0rpo

unread,
May 3, 2021, 7:32:49 AM5/3/21
to OpenPnP
Also make sure to have set the driver feedrate to zero, so it is not effective

Where is this setting? And you mean only for the rotational axis. Right?



ma...@makr.zone

unread,
May 3, 2021, 8:45:23 AM5/3/21
to ope...@googlegroups.com

> Also in my feeder board I do not search for M400. I send ok when I see "FEEDx" command and then another ok when the feed is complete.

Don't do that! That explains everything, if you think about it: it can not work!

When I said earlier...

Just in case this is not clear yet: each command you send to the controller must return exactly one "ok\n", not only M400. They must match up like a zipper.

... I meant it! If you are developing your own controller, you must take requirements like this very seriously. Otherwise, we are both wasting our time here.

Fix your controller:

  1. Simple way: when you receive the FEED1 just wait for it to complete before returning "ok\n".
    Do nothing else while waiting, i.e. do not accept new commands.
  2. More powerful but also more complex way: truly implement M400, i.e when you receive it, check, if a feeding operation is still pending. If yes, wait for it to complete before returning "ok\n". If none is pending, just return "ok\n" immediately.
    Do nothing else while waiting, i.e. do not accept new commands.

The extra M400 is only sent when you enable After Actuation. If you do it by method 2. you need it enabled!

_Mark

geo0rpo

unread,
May 4, 2021, 5:02:04 AM5/4/21
to OpenPnP
Hi Mark,

In my board I reply ok immediately to FEED1 and then after the move is actually complete I reply another ok to the M400 command that  I was supposed to receive. 
This worked good when I send M400 after FEED1 in the actuate_double_command but it did not work when I moved M400 to MOVE_TO_COMPLETE_COMMAND even with  After Actuation enabled.  
So the problem is not that I did not "search" or handle the M400 command. M400 was never sent.
Yes I understand that this is not the "proper" way to handle M400 because in case M400 was never sent, I would send an extra ok response.
This would not be a problem if I received the M400.

My first test was with method 1 but it did not work because of the async driver I guess. That is why I added M400.
Now I changed back to method 1 with gcodedriver (not async) and it works as expected. No need for M400.
The machine will have to wait for the feed to complete and then move to the feeder. No big deal.
With "Move before feed" enabled, the head first moves to the feeder and then the feeder is actuated. So it does not make any difference.
Feed and then move or move and then feed. It is the same amount of time. It would be good to feed while moving to the feeder but I do not want to trouble you more :)
Thank you sooo much for your time, patience and knowledge.




geo0rpo

unread,
May 4, 2021, 5:10:20 AM5/4/21
to OpenPnP
One last thing:
When the nozzle fails to pick the part, I get the error in the picture:

Screenshot 2021-05-04 120638.png

and the job does not continue after I click OK even if I have "Pick retry count :2"  and  "Feed retry count :3" 
When I click OK, it just repeats the bottom vision test and gets to the same error until I stop the job and start again. Any thought?

Thanks again.

ma...@makr.zone

unread,
May 4, 2021, 11:22:35 AM5/4/21
to ope...@googlegroups.com

Hi geo0rpo

> So the problem is not that I did not "search" or handle the M400 command. M400 was never sent.

I hope you understand that the extra "ok" you sent (despite not having received the M400) will very likely be mistaken as the "ok" for the next FEED1 on nozzle 2 and therefore push the nozzle into the moving tape.

The fact that the M400 was never sent does not in itself create the problem here! As long as the number of commands sent match the number of the responses received, OpenPnP and your controller will remain in sync.

Again, like a zipper, i.e. if it skips a tooth, the connections is broken forever! ;-)

This worked good when I send M400 after FEED1 in the actuate_double_command but it did not work when I moved M400 to MOVE_TO_COMPLETE_COMMAND even with  After Actuation enabled. 

Are you really sure? I just rechecked the whole code flow there, both for the GcodeDriver and the GcodeAsyncDriver and I'm quite convinced this should send the M400.

I'm really quite sure feeding in parallel with the move would work, if you were to implement method 2 on your controller properly. This is what I was always assuming and at least some of the difficulties you observed so far can be explained by what I said above.

So if you (or somebody else reading this) ever implements that method 2 and it still does not work, please report it again. Then it is a bug and I will fix it.

_Mark

geo0rpo

unread,
May 4, 2021, 4:49:29 PM5/4/21
to ope...@googlegroups.com
Hi Mark, 
I will put the M400 in "move to complete" again and see if it appears in the log. Then I can do method 2. It is easy for me. But I really wonder. Is the actuation considered a "move" so the "move to complete" will be triggered after the actuation? You know how it is done from the inside. I can only guess and test.

And yes I totally understand the zipper thing. I thought that since everything goes well and my driver always receives the feed command and then the M400 command, a response to the FEED and then a response to the M400 that I was supposed to receive would never lose sync. My bad.

Once again I must say that my driver code worked when the M400 was following the FEED command but when I moved the M400 to "move to complete" it stopped working. M400 was not sent anymore. Anyway I will triple check. 


To unsubscribe from this group and all its topics, send an email to openpnp+u...@googlegroups.com.

Clemens Koller

unread,
May 7, 2021, 6:36:36 AM5/7/21
to ope...@googlegroups.com
Hello, Mark!

Regarding the comunication / sync issues, which seem to be popping up more than once:

a) Do you see a way to detect and report automatically, when the sync in between OpenPnP and a Motion Controller is lost?
b) Is there a way to re-sync OpenPnP and continue after confirmation?

Example - TinyG: When a limit switch is hit, TinyG is then ignoring commands from that point on. -> Out of Sync.
TinyG must be reset, then. How to reset OpenPnP to reliably resync and being able to talk to TinyG, Home and proceed?


Clemens

On 04/05/2021 17.22, ma...@makr.zone wrote:
> Hi geo0rpo
>
> /> So the problem is not that I did not "search" or handle the M400 command. M400 was never sent./
>
> I hope you understand that the extra "ok" you sent (despite not having received the M400) will very likely be mistaken as the "ok" for the *next *FEED1 on nozzle 2 and therefore push the nozzle into the moving tape.
>
> The fact that the M400 was never sent does not in itself create the problem here! As long as the number of commands sent match the number of the responses received, OpenPnP and your controller will remain in sync.
>
> Again, like a zipper, i.e. if it skips a tooth, the connections is broken forever! ;-)
>
> <https://commons.wikimedia.org/wiki/File:Zipper.svg>
>
> />  //This worked good when I send M400 after FEED1 in the actuate_double_command but it did not work when/ /I moved M400 to MOVE_TO_COMPLETE_COMMAND even with  //*After Actuation*// enabled.  /
>
> Are you really sure? I just rechecked the whole code flow there, both for the GcodeDriver and the GcodeAsyncDriver and I'm quite convinced this should send the M400.
>
> I'm really quite sure feeding *in parallel with the move* would work,/if /you were to implement *method 2* on your controller properly. This is what I was always assuming and at least some of the difficulties you observed so far can be explained by what I said above.
>
> So if you (or somebody else reading this) ever implements that *method 2* and it still does *not *work, please report it again. Then it /is /a bug and I will fix it.
>
> _Mark
>
> Am 04.05.2021 um 11:02 schrieb geo0rpo:
>> Hi Mark,
>>
>> In my board I reply ok immediately to FEED1 and then after the move is actually complete I reply another ok to the M400 command that  I was supposed to receive. 
>> This worked good when I send M400 after FEED1 in the actuate_double_command but it did not work when I moved M400 to MOVE_TO_COMPLETE_COMMAND even with  *After Actuation* enabled.  
>> So the problem is not that I did not "search" or handle the M400 command. M400 was never sent.
>> Yes I understand that this is not the "proper" way to handle M400 because in case M400 was never sent, I would send an extra ok response.
>> This would not be a problem if I received the M400.
>>
>> My first test was with method 1 but it did not work because of the async driver I guess. That is why I added M400.
>> Now I changed back to method 1 with gcodedriver (not async) and it works as expected. No need for M400.
>> The machine will have to wait for the feed to complete and then move to the feeder. No big deal.
>> With "Move before feed" enabled, the head first moves to the feeder and then the feeder is actuated. So it does not make any difference.
>> Feed and then move or move and then feed. It is the same amount of time. It would be good to feed while moving to the feeder but I do not want to trouble you more :)
>> Thank you sooo much for your time, patience and knowledge.
>>
>>
>>
>>
>> On Monday, May 3, 2021 at 3:45:23 PM UTC+3 ma...@makr.zone wrote:
>>
>> /> Also in my feeder board I do not search for M400. I send ok when I see "FEEDx" command and then another ok when the feed is complete./
>>
>> Don't do that! That explains everything, if you think about it: it can not work!
>>
>> When I said earlier...
>>
>> /Just in case this is not clear yet: //*each command*//you send to the controller //*must *//return exactly one "ok\n", //not only M400. They must match up like a zipper./
>>
>> ... I meant it!//If you are developing your own controller, you must take requirements like this very seriously. Otherwise, we are both wasting our time here.
>>
>> Fix your controller:
>>
>> 1. Simple way: when you receive the FEED1 just wait for it to complete before returning "ok\n".
>> Do nothing else while waiting, i.e. do not accept new commands.
>> 2. More powerful but also more complex way: truly implement M400, i.e when you receive it, check, if a feeding operation is still pending. If yes, wait for it to completebefore returning "ok\n". If none is pending, just return "ok\n" immediately.
>> Do nothing else while waiting, i.e. do not accept new commands.
>>
>> The extra M400 is only sent when you enable *After Actuation*/./If you do it by method 2. you***need it enabled**!*
>>
>> _Mark/
>> /
>>>> >> https://github.com/openpnp/openpnp/wiki/Motion-Planner#actuator-machine-coordination <https://github.com/openpnp/openpnp/wiki/Motion-Planner#actuator-machine-coordination> <https://github.com/openpnp/openpnp/wiki/Motion-Planner#actuator-machine-coordination <https://github.com/openpnp/openpnp/wiki/Motion-Planner#actuator-machine-coordination>>
>>>> >> To unsubscribe from this topic, visit https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe <https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe> <https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe <https://groups.google.com/d/topic/openpnp/LGACfo77sW8/unsubscribe>>.
>>>> >> To unsubscribe from this group and all its topics, send an email to openpnp+u...@googlegroups.com.
>>>> >> To view this discussion on the web visit https://groups.google.com/d/msgid/openpnp/2bf3d5ab-641a-7f7c-8314-b6563c2a09ae%40makr.zone <https://groups.google.com/d/msgid/openpnp/2bf3d5ab-641a-7f7c-8314-b6563c2a09ae%40makr.zone> <https://groups.google.com/d/msgid/openpnp/2bf3d5ab-641a-7f7c-8314-b6563c2a09ae%40makr.zone?utm_medium=email&utm_source=footer <https://groups.google.com/d/msgid/openpnp/2bf3d5ab-641a-7f7c-8314-b6563c2a09ae%40makr.zone?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 on the web visit https://groups.google.com/d/msgid/openpnp/CANKvoS2jM3GHk-OP3_ZMRmjwjvhSwO9FSAAbPSpoUv%3DOjtvjug%40mail.gmail.com <https://groups.google.com/d/msgid/openpnp/CANKvoS2jM3GHk-OP3_ZMRmjwjvhSwO9FSAAbPSpoUv%3DOjtvjug%40mail.gmail.com> <https://groups.google.com/d/msgid/openpnp/CANKvoS2jM3GHk-OP3_ZMRmjwjvhSwO9FSAAbPSpoUv%3DOjtvjug%40mail.gmail.com?utm_medium=email&utm_source=footer <https://groups.google.com/d/msgid/openpnp/CANKvoS2jM3GHk-OP3_ZMRmjwjvhSwO9FSAAbPSpoUv%3DOjtvjug%40mail.gmail.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 on the web visit https://groups.google.com/d/msgid/openpnp/d771889f-2437-4ab7-a963-bb379209ce7en%40googlegroups.com <https://groups.google.com/d/msgid/openpnp/d771889f-2437-4ab7-a963-bb379209ce7en%40googlegroups.com> <https://groups.google.com/d/msgid/openpnp/d771889f-2437-4ab7-a963-bb379209ce7en%40googlegroups.com?utm_medium=email&utm_source=footer <https://groups.google.com/d/msgid/openpnp/d771889f-2437-4ab7-a963-bb379209ce7en%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 on the web visit https://groups.google.com/d/msgid/openpnp/31445a69-757e-494e-9bf0-f1cc3de4893fn%40googlegroups.com <https://groups.google.com/d/msgid/openpnp/31445a69-757e-494e-9bf0-f1cc3de4893fn%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 on the web visit https://groups.google.com/d/msgid/openpnp/9b2b4f10-1e71-4653-b619-179beb94e4cbn%40googlegroups.com <https://groups.google.com/d/msgid/openpnp/9b2b4f10-1e71-4653-b619-179beb94e4cbn%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 on the web visit https://groups.google.com/d/msgid/openpnp/2d176883-8ea6-4e37-b302-8d700b4ffaa2n%40googlegroups.com <https://groups.google.com/d/msgid/openpnp/2d176883-8ea6-4e37-b302-8d700b4ffaa2n%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 on the web visit https://groups.google.com/d/msgid/openpnp/ae1f7579-1a0e-4afc-48d4-0b23c46ce5d0%40makr.zone <https://groups.google.com/d/msgid/openpnp/ae1f7579-1a0e-4afc-48d4-0b23c46ce5d0%40makr.zone?utm_medium=email&utm_source=footer>.

ma...@makr.zone

unread,
May 7, 2021, 9:43:39 AM5/7/21
to ope...@googlegroups.com

Hi Clemens

> Regarding the comunication / sync issues, which seem to be popping up more than once

> Do you see a way to detect and report automatically, when the sync in between OpenPnP and a Motion Controller is lost?

Regarding timeouts, yes, the swallowed Exceptions issue is still open. In fact I just made it official:

https://github.com/openpnp/openpnp/issues/1191

Once this is resolved, this will be gone. Until then, just use very large timeouts.

Regarding other sources, such as the controller sending too many or too few "ok" (the subject of this thread), or when it is otherwise failing us on flow control etc., I don't see a universal remedy. You?

OpenPnP can't work with an unreliable controller. Note that TinyG was always unreliable before, see here:

https://github.com/openpnp/openpnp/issues/674

According to my information (and excluding the timeout issue described above), we have a better TinG situation now than ever.

> Is there a way to re-sync OpenPnP and continue after confirmation?

When all tasks have been terminated, the user must see what happened. According to Tony Luken you can send a reset code over the line in the DISABLE_COMMAND. So if you Disable/Enable the machine after such an occurrence, you should be good.

Tony> You may have something else going wrong getting you into that bad state but I include a \u0018 (backslash-u-zero-zero-one-eight is the unicode escape sequence for the ctrl-x character) as the first line of my DISABLE_COMMAND.  That will reset the TinyG every time you hit the disable button which should get it back to a known good state.  Just make sure you have the "Allow Backslash Escape Characters" checkbox enabled on the Driver Settings tab.

https://groups.google.com/g/openpnp/c/gX7Fr939P1o/m/ZwBVtM5vAAAJ

_Mark

Reply all
Reply to author
Forward
0 new messages