Prusa MMU2, how to properly configure?

prusa
mmu2
extruder

#1

in settings->printer profiles->[my prusa]->hotend & extruder I have it set to 5 extruders, shared nozzle. And yet I'm seeing this:

Send: N28 G1 Z0.4 F1000.0*59
Recv: ok
Not queuing T1, that tool doesn't exist according to the printer profile or was reported as invalid by the firmware
Send: N29 T1*0
Not sending T1, that tool doesn't exist according to the printer profile or was reported as invalid by the firmware
Recv: ok

Do I need to fix it? I'm getting multi-color extrusions, but that makes me nervous, obviously.


#2

Line 3473 here seems to be what's responsible for that. Line 1867 seems to be the one responsible for adding them into an array if the temperature command comes back NULL. Maybe T1 wasn't included in the recurring temperature responses...?

But then again, maybe it assumes that every tool has its own temperature...! @foosel


#3

Could it be that the printer during that connection once sent back something along the lines of invalid extruder? Because that would explain the message, as the printer profile sounds correct and shouldn't be the culprit here. Could be a bug though. Can you provide a full serial.log?


#4

I turned logs on. I'll post it if it happens again- I was getting it fairly regularly, I thought. Perhaps it happens before the MMU is initialized, which would answer your first question.

FWIW, here's what my "bootup" with the MMU looks like. Everything is fine, though the long M-code (M1234) is interesting. I can't find any reference to that in the octoprint codebase.

2018-10-31 16:10:37,604 - Changing monitoring state from "Offline" to "Detecting serial port"
2018-10-31 16:10:37,636 - Serial port list: ['/dev/ttyACM0']
2018-10-31 16:10:37,639 - Connecting to: /dev/ttyACM0
2018-10-31 16:10:37,654 - Changing monitoring state from "Detecting serial port" to "Opening serial port"
2018-10-31 16:10:37,660 - Connected to: Serial<id=0x68c72f90, open=True>(port='/dev/ttyACM0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=10.0, xonxoff=False, rtscts=False, dsrdtr=False), starting monitor
2018-10-31 16:10:37,662 - Starting baud rate detection...
2018-10-31 16:10:37,667 - Changing monitoring state from "Opening serial port" to "Detecting baudrate"
2018-10-31 16:10:38,674 - Trying baudrate: 115200
2018-10-31 16:10:38,683 - Send: N0 M110 N0*125
2018-10-31 16:10:38,780 - Recv: start
2018-10-31 16:10:38,783 - Changing monitoring state from "Detecting baudrate" to "Operational"
2018-10-31 16:10:38,797 - Send: N0 M110 N0*125
2018-10-31 16:10:38,807 - Recv: echo: 3.4.2-1360
2018-10-31 16:10:38,810 - Recv: echo: Last Updated: Oct 19 2018 18:11:22 | Author: (none, default config)
2018-10-31 16:10:38,812 - Recv: Compiled: Oct 19 2018
2018-10-31 16:10:38,816 - Recv: echo: Free Memory: 1915  PlannerBufferBytes: 1392
2018-10-31 16:10:38,820 - Recv: echo:Hardcoded Default Settings Loaded
2018-10-31 16:10:38,822 - Recv: adc_init
2018-10-31 16:10:39,161 - Recv: CrashDetect ENABLED!
2018-10-31 16:10:39,517 - Recv: PAT9125_RES_X=0
2018-10-31 16:10:39,522 - Recv: PAT9125_RES_Y=240
2018-10-31 16:10:39,526 - Recv: PAT9125_init:1
2018-10-31 16:10:39,530 - Recv: PAT9125_RES_X=0
2018-10-31 16:10:39,534 - Recv: PAT9125_RES_Y=240
2018-10-31 16:10:39,538 - Recv: PAT9125_init:1
2018-10-31 16:10:39,542 - Recv: FSensor ENABLED
2018-10-31 16:10:39,792 - Recv: echo:SD card ok
2018-10-31 16:10:40,158 - Recv: Error:No Line Number with checksum, Last Line: 0
2018-10-31 16:10:40,165 - Recv: Resend: 1
2018-10-31 16:10:40,173 - Send: N1 M115*39
2018-10-31 16:10:40,178 - Recv: ok
2018-10-31 16:10:40,183 - Recv: fsensor_autoload_check_start - autoload ENABLED
2018-10-31 16:10:40,189 - Send: N2 M21*18
2018-10-31 16:10:40,191 - Recv: 
2018-10-31 16:10:40,197 - Recv: FIRMWARE_NAME:Prusa-Firmware 3.4.2 based on Marlin FIRMWARE_URL:https://github.com/prusa3d/Prusa-Firmware PROTOCOL_VERSION:1.0 MACHINE_TYPE:Prusa i3 MK3 EXTRUDER_COUNT:1 UUID:00000000-0000-0000-0000-000000000000
2018-10-31 16:10:40,205 - Recv: ok
2018-10-31 16:10:40,218 - Send: M1234
2018-10-31 16:10:40,229 - Recv: echo:SD card ok
2018-10-31 16:10:40,566 - Recv: ok
2018-10-31 16:10:40,568 - Send: M20
2018-10-31 16:10:40,569 - Recv: Unknown M code: M1234
2018-10-31 16:10:40,573 - Recv: ok
2018-10-31 16:10:40,576 - Recv: Begin file list
2018-10-31 16:10:40,635 - Recv: End file list
2018-10-31 16:10:40,637 - Recv: ok
2018-10-31 16:10:43,785 - Send: M105
2018-10-31 16:10:43,800 - Recv: ok T:18.5 /0.0 B:19.8 /0.0 T0:18.5 /0.0 @:0 B@:0 P:19.1 A:28.4
2018-10-31 16:10:48,787 - Send: M105
2018-10-31 16:10:48,807 - Recv: ok T:18.3 /0.0 B:19.5 /0.0 T0:18.3 /0.0 @:0 B@:0 P:18.9 A:28.4
2018-10-31 16:10:53,788 - Send: M105
2018-10-31 16:10:53,801 - Recv: ok T:18.1 /0.0 B:19.3 /0.0 T0:18.1 /0.0 @:0 B@:0 P:19.0 A:28.4
2018-10-31 16:10:58,789 - Send: M105
2018-10-31 16:10:58,803 - Recv: ok T:18.4 /0.0 B:19.5 /0.0 T0:18.4 /0.0 @:0 B@:0 P:19.0 A:28.4
2018-10-31 16:11:01,125 - Recv: MMU version valid
2018-10-31 16:11:01,138 - Recv: MMU - ENABLED
2018-10-31 16:11:03,791 - Send: M105
2018-10-31 16:11:03,804 - Recv: ok T:18.4 /0.0 B:19.5 /0.0 T0:18.4 /0.0 @:0 B@:0 P:18.7 A:28.6
2018-10-31 16:11:08,795 - Send: M105
2018-10-31 16:11:08,810 - Recv: ok T:18.2 /0.0 B:19.6 /0.0 T0:18.2 /0.0 @:0 B@:0 P:19.0 A:28.5
2018-10-31 16:11:13,800 - Send: M105
2018-10-31 16:11:13,813 - Recv: ok T:18.2 /0.0 B:19.4 /0.0 T0:18.2 /0.0 @:0 B@:0 P:18.9 A:28.4

#5

That's what I was suggesting. See how T1 isn't represented in the temperature report? The line 1867 code would then add T1 into the invalid extruder array and Bob's-your-uncle, as they say.

Personally, I wouldn't have imagined a five-extruder-one-hotend setup if I were doing this.


#6

It's normal though for shared nozzle setups and shouldn't be the reason for this issue here.

Invalid extruder additions should only happen if the firmware actually reports that an invalid extruder was selected.


#7

So I had a bed adhesion failure many hours into a print and had to cancel. The serial log is clean and pretty until the cancel, where I start getting 'invalid' messages. I've omitted it aside from a few lines on either side:

2018-10-31 20:16:09,571 - Send: N325924 G1 E-50.0000 F2000*20
2018-10-31 20:16:09,778 - Recv: ok
2018-10-31 20:16:09,819 - Send: N325925 G1 Y117.244 F2400*32
2018-10-31 20:16:10,016 - Recv: ok
2018-10-31 20:16:10,020 - Send: N325926 G4 S0*87
2018-10-31 20:16:12,215 - Recv: echo:busy: processing
2018-10-31 20:16:14,309 - Recv: echo:busy: processing
2018-10-31 20:16:16,427 - Recv: echo:busy: processing
2018-10-31 20:16:17,262 - Changing monitoring state from "Printing" to "Cancelling"
2018-10-31 20:16:17,330 - Send: N325927 G91*41
2018-10-31 20:16:18,545 - Recv: echo:busy: processing
2018-10-31 20:16:20,642 - Recv: echo:busy: processing
2018-10-31 20:16:22,918 - Recv: echo:busy: processing
2018-10-31 20:16:24,955 - Recv: echo:busy: processing
2018-10-31 20:16:27,069 - Recv: echo:busy: processing
2018-10-31 20:16:28,482 - Recv: ok
2018-10-31 20:16:28,495 - Recv: ok
2018-10-31 20:16:28,499 - Send: N325928 G1 Z-10*73
2018-10-31 20:16:28,507 - Send: N325929 G92*36
2018-10-31 20:16:28,510 - Recv: ok
2018-10-31 20:16:28,524 - Send: N325930 G1 E2 F5000*34
2018-10-31 20:16:29,350 - Recv: ok
2018-10-31 20:16:29,355 - Recv: ok
2018-10-31 20:16:29,357 - Send: N325931 G1 E2 F5500*38
2018-10-31 20:16:29,362 - Send: N325932 G1 E2 F6000*35
2018-10-31 20:16:29,371 - Recv: ok
2018-10-31 20:16:29,375 - Send: N325933 G1 E-15.0000 F5800*28
2018-10-31 20:16:29,376 - Recv: ok
2018-10-31 20:16:29,383 - Send: N325934 G1 E-50.0000 F5500*23
2018-10-31 20:16:29,388 - Recv: ok
2018-10-31 20:16:29,391 - Send: N325935 M702 C*126
2018-10-31 20:16:29,396 - Recv: ok
2018-10-31 20:16:29,402 - Send: N325936 G4*21
2018-10-31 20:16:31,538 - Recv: echo:busy: processing
2018-10-31 20:16:33,635 - Recv: echo:busy: processing
2018-10-31 20:16:35,741 - Recv: echo:busy: processing
2018-10-31 20:16:37,788 - Recv: echo:busy: processing
2018-10-31 20:16:39,902 - Recv: echo:busy: processing
2018-10-31 20:16:42,018 - Recv: echo:busy: processing
2018-10-31 20:16:44,129 - Recv: echo:busy: processing
2018-10-31 20:16:46,243 - Recv: echo:busy: processing
2018-10-31 20:16:48,291 - Recv: ok
2018-10-31 20:16:48,295 - Recv: ok
2018-10-31 20:16:48,296 - Send: N325937 M84*38
2018-10-31 20:16:48,307 - Send: N325938 M104 T0 S0*23
2018-10-31 20:16:48,314 - Recv: ok
2018-10-31 20:16:48,329 - Send: N325939 M104 T1 S0*23
2018-10-31 20:16:48,332 - Recv: ok
2018-10-31 20:16:48,346 - Send: N325940 M104 T2 S0*26
2018-10-31 20:16:48,349 - Recv: echo:M104 Invalid extruder 1
2018-10-31 20:16:48,361 - T3 reported as invalid, reverting to T0
2018-10-31 20:16:48,364 - Recv: ok
2018-10-31 20:16:48,375 - Recv: echo:M104 Invalid extruder 2
2018-10-31 20:16:48,375 - Send: N325941 T0*2
2018-10-31 20:16:48,377 - T3 reported as invalid, reverting to T0
2018-10-31 20:16:48,379 - Recv: ok
2018-10-31 20:16:48,401 - Send: N325942 T0*1
2018-10-31 20:16:50,409 - Recv: echo:busy: processing
2018-10-31 20:16:52,506 - Recv: echo:busy: processing
2018-10-31 20:16:54,575 - Recv: echo:busy: processing
2018-10-31 20:16:56,668 - Recv: echo:busy: processing
2018-10-31 20:16:58,744 - Recv: echo:busy: processing
2018-10-31 20:17:00,838 - Recv: echo:busy: processing
2018-10-31 20:17:02,915 - Recv: echo:busy: processing
2018-10-31 20:17:03,316 - Recv: ok
2018-10-31 20:17:03,320 - Send: N325943 M105*29
2018-10-31 20:17:05,364 - Recv: echo:busy: processing
2018-10-31 20:17:05,495 - Recv: ok
2018-10-31 20:17:05,500 - Send: N325944 M104 T3 S0*31
2018-10-31 20:17:05,502 - Recv: ok T:191.5 /0.0 B:60.3 /60.0 T0:191.5 /0.0 @:0 B@:0 P:33.6 A:39.2
2018-10-31 20:17:05,523 - Recv: echo:M104 Invalid extruder 3
2018-10-31 20:17:05,531 - T0 reported as invalid, reverting to T0
2018-10-31 20:17:05,536 - Recv: ok
2018-10-31 20:17:05,539 - Send: N325945 M104 T4 S0*25
2018-10-31 20:17:05,542 - Not queuing T0, that tool doesn't exist according to the printer profile or was reported as invalid by the firmware
2018-10-31 20:17:05,546 - Send: N325946 T0*5
2018-10-31 20:17:05,549 - Not sending T0, that tool doesn't exist according to the printer profile or was reported as invalid by the firmware
2018-10-31 20:17:05,550 - Recv: echo:M104 Invalid extruder 4
2018-10-31 20:17:05,552 - T0 reported as invalid, reverting to T0
2018-10-31 20:17:05,554 - Recv: ok
2018-10-31 20:17:05,557 - Not queuing T0, that tool doesn't exist according to the printer profile or was reported as invalid by the firmware
2018-10-31 20:17:05,561 - Send: N325947 T0*4
2018-10-31 20:17:05,563 - Not sending T0, that tool doesn't exist according to the printer profile or was reported as invalid by the firmware
2018-10-31 20:17:05,753 - Recv: ok
2018-10-31 20:17:05,758 - Send: N325948 M140 S0*84
2018-10-31 20:17:06,056 - Recv: ok
2018-10-31 20:17:06,060 - Recv: ok
2018-10-31 20:17:06,064 - Send: N325949 M106 S0*87
2018-10-31 20:17:06,067 - Changing monitoring state from "Cancelling" to "Operational"
2018-10-31 20:17:06,082 - Recv: ok
2018-10-31 20:17:07,283 - Send: M105
2018-10-31 20:17:07,293 - Recv: ok T:188.7 /0.0 B:60.3 /0.0 T0:188.7 /0.0 @:0 B@:0 P:33.6 A:39.0

That made me wonder if I'd put anything in my cancel gcode that would cause this. I don't think so; the G1 extruder commands should be fine, and note the M702 was sent okay.

G91
G1 Z-10
G92
G1 E2 F5000
G1 E2 F5500
G1 E2 F6000
G1 E-15.0000 F5800
G1 E-50.0000 F5500
M702 C
G4

; disable motors
M84

;disable all heaters
{% snippet 'disable_hotends' %}
{% snippet 'disable_bed' %}
;disable fan
M106 S0

and here's slic3r's ending gcode:

{if has_wipe_tower}
G1 E-15.0000 F3000
{else}
G1 X0 Y210 F7200
G1 E2 F5000
G1 E2 F5500
G1 E2 F6000
G1 E-15.0000 F5800
G1 E-20.0000 F5500
G1 E10.0000 F3000
G1 E-10.0000 F3100
G1 E10.0000 F3150
G1 E-10.0000 F3250
G1 E10.0000 F3300
{endif}

; Unload filament
M702 C

G4 ; wait
M104 S0 ; turn off temperature
M140 S0 ; turn off heatbed
M107 ; turn off fan
; Lift print head a bit
{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+30, max_print_height)}{endif} ; Move print head up
G1 X0 Y200; home X axis
M84 ; disable motors

#8

Oooooh, I might have an idea. The cancel snippet disable_hotends is the one that sends these tool commands with temperature to 0. I think it needs to get adjusted to only send temperature commands for multiple T if the profile doesn't have a shared nozzle set.


#9

Yes that would be the solution. I had to take that snippet out and hard code one extruder for the MMU to work.


#10

I pushed a commit for that and that will make it into 1.3.10.