In AUTO_PARK mode, the carriages are exactly replaced according to the X2_MAX_POS setting (hotend offset X) and everything works in the entire range X = 0 to 240 mm.

In DUPLICATION mode, the X2 carriage hits the X + endstop
(Of course, I try the movement in the range X= 0 to 115 mm)
In MIRRORED mode, the carriages collide in the middle
(Of course I try the movement in the range X= 0 to 115 mm)

In DUPLICATION and MIRRORED mode, there between carriages X1 and X2 is a gap of 198 mm .
I tried to change the DEFAULT_DUPLICATION_X_OFFSET setting.
But whatever I write there the gap is still 198 mm.
There are no provisions right now for capping the softendstops in duplication mode based on the offset applied, though its something thats been tossed around before. Itll probably get done at some point.
@InsanityAutomation What about the 198mm gap between the two extruders in duplication mode? It would seem changing DEFAULT_DUPLICATION_X_OFFSET should change that. But he says it doesn't?
I wonder if something got broke in G28. Or... Maybe something changed in M605? Both of those used to unpark the 2nd extruder and put it in the right place, and then unpark the 1st extruder.

The axial distance between the carrier X1 and X2 is directly dependent
about setting the HOTEND_OFFSET_X value for T1
GAP = OFFSET
198 mm = 292 mm
121 mm = 370 mm
50 mm = 440 mm
AUTO_PARK mode must be HOTEND_OFFSET_X for T1 = 292 mm (or X2_MAX_POS)
movement is OK in the whole range of HB (0-240 mm), replacement T0 / T1 accurate.
DUPLICATION mode must be HOTEND_OFFSET_X for T1 = 370 mm
movement is limited to 0-170 mm and is OK
MIRRORED mode must be HOTEND_OFFSET_X for T1 = 440 mm
movement is limited in the range 0-170 mm - carrier X1 and X2 collide at a position of 105 mm
Changing IDEX modes only works properly from the LCD.
when using the g-code command M605 S ... carriers collide with each other and do not park as they should.
My problem is the same as above! At M605 S1 the two carriage took each other positions . When i send the code T0 to the printer, than the T1 goes to parking position and T0 took the actual position. This is working after start up. But when the Z axes goes to Home, the position exchange is not working anymore. During printing the T0 is working , when the T1 command is sent the T0 is stops and T1 is collide with it. ( T0 is not going to parking position. )
Due to minimal responses to solving this problem, I closed this issues. The bug is still at 1.7.2020 in Marlin FW.
Board: RUMBA - ATmega2560
Controller: LCD Full graphic 128x64 pix.
Marlin: bugfix-2.0.x
Downloaded: 27.6.2020 at 15:17 (Prague)
Compiled: Visual Studio Code

#define X1_MIN_POS 0
#define X1_MAX_POS 240
#define X2_MIN_POS 0
#define X2_MAX_POS 240
#define X2_HOME_DIR 1
#define X2_HOME_POS 292
#define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE
#define DEFAULT_DUPLICATION_X_OFFSET 120
AUTO_PARK mode on LCD
X2_MAX_POShas no effect on carriage X2 movement - always goes to X-max endstopHOTEND_OFFSET_X = X2_HOME_POSDUPLICATION and MIRRORED modes show the same errors as described previously.
With this setting, X2_HOME_POS has a gap between carriages of 198 mm and collisions occur.
Change the DEFAULT_DUPLICATION_X_OFFSET setting does not affect the gap between carriers.
Hi, @thinkyhead
please write what I should change and test.
Thanks you very much.
Please don't @ me. I eventually find issues, but there is always a large pile.
The motion bugs resulting from calls to M605 need to be looked into.
For testing turn on DEBUG_DXC_MODE and include a W flag in your M605 commands. With the W flag, Marlin will print verbose output to the host console. Try various values with M605 W S2 Xnnn and note the differences.
In the meantime I will look at what M605 is trying to do, and perhaps there is a simple inverted logic bug that can be fixed quickly.
For testing turn on
DEBUG_DXC_MODEand include aWflag in yourM605commands.
How do I activate DEBUG_DXC_MODE ?
How do I activate DEBUG_DXC_MODE ?
Add this to your config:
#define DEBUG_DXC_MODE
Looks to me as though the bugs are located in tool_change and/or dualx_tool_change. So, get the latest code and also enable DEBUG_TOOL_CHANGE before testing.
Ok, I set in configuration.h
#define DEBUG_DXC_MODE
#define DEBUG_TOOL_CHANGE
In pronterface, all you have to do is send it via the M605 W S2 Xnn
terminal and I will copy the statement to you.
Still the same .... the M605 command via the pronterface terminal does not work.
DUPLICATION and MIRRORED modes via LCD ... gap between carriages still 198 mm.
Extract from pronterface terminal:
DXC_pronterface.zip
Hi @thinkyhead
Does anyone solve this problem?
How do I know, please?
I would very much like to provide more information.
Thanks
How do I know, please?
Please test the bugfix-2.0.x branch to see where it stands. If the problem has been resolved then we can close this issue. If the issue isn't resolved yet, then we should investigate further.
Hi @boelle
In the DUPLICATION and MIRRORED modes, there is still a gap of 198 mm between the cars.
Bug still not fixed.
Marlin is free, you dont pay for it
Is it fair to demand anything?
Things take time arround here, if you cant live with that there are other firmwares
Hi @boelle
YES Marlin is free but is starting to have more and more bugs that were not there before.
I think I tested and provided the information you requested, but I have no feedback, is it being worked on?
I'm sorry the most, I'm trying to help but I dont have the answer .....
the maintainer of the project @thinkyhead is the man
@thinkyhead
Bugfix 2.0.x - DISTRIBUTION DATE "2020-08-27"
Bug still not fixed.
In the DUPLICATION and MIRRORED modes, there is still a gap of 198 mm between the cars.
This issue has had no activity in the last 30 days. Please add a reply if you want to keep this issue active, otherwise it will be automatically closed within 7 days.
Hi,
Is anyone solving this question or should I close it?
Looks like there's no interest in it and nothing's happening.
Keep in mind that all the code here is contributed by unpaid volunteers who work on it in their free time.
I've added a Help Wanted label to hopefully attract attention of someone who has the hardware, interest, and ability to fix/implement the change.
At present, we have nearly 400 feature requests, and nearly 100 bug reports, so some patience is required.
I have a Tenlog D3S and it works fine with 2.0.6.1, only the Y-Layershift issue i have to.
You must set to
#define X1_MIN_POS -47
#define X1_MAX_POS 240
#define X2_MIN_POS 0
#define X2_MAX_POS 292
#define X2_HOME_DIR 1
#define X2_HOME_POS 292
#define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_AUTO_PARK_MODE
#define DEFAULT_DUPLICATION_X_OFFSET 120
I can chime in on that this doesn't seem to work. Nothing really happens when I change DEFAULT_DUPLICATION_X_OFFSET, at least in 2.0.6
BUG:
In the DUPLICATION and MIRRORED modes, there is still a gap of 198 mm between the carriages.
Attach the modified files for testing.
I found that setting the mode with M605 S<0|1|2> in starting gcode in your slicer lets you have manual control over spacing using a simple printer profile.
If this workaround is sufficient I'll accept the twenty 馃榿
HI, @ogland
I don't want to solve the BUG at the slicer level, but fix the bug in FW Marlin.
Then they give it to everyone.
So fix a bug in Marlin ......
Just to relay where I got to when I looked earlier for anyone with time to dig in first, the menu items set a fixed position as an argument to M605S# for mirror and duplication modes. This should be dropped from the lcd command, then testing performed to make sure the default applies correctly. Originally this was added to the menu before code in M605 that set based on the default however it may not be required anymore.
Need to verify M605W output to ensure that duplicate_extruder_x_offset is correct with the config_adv default, then check new_pos.x assignment in motion.cpp. If so, menu entry can be edited in menu_configuration.cpp to remove X200 from the hardcoded commands.
Hi @InsanityAutomation
This is an extract from pronterface M605W:
>>> g28
SENDING: G28
echo: Active Extruder: 0
echo: busy: processing
echo: busy: processing
echo: Active Extruder: 0
>>> t1
SENDING: T1
echo: busy: processing
echo: Active Extruder: 1
>>> t0
SENDING: T0
echo: busy: processing
echo: Active Extruder: 0
>>> M605 S2
SENDING: M605 S2
>>> t0
SENDING: T0
echo: Active Extruder: 0
>>> t1
SENDING: T1
echo: T1 Invalid extruder
>>> M605 W
SENDING: M605 W
>>> M605 S2 X120
SENDING: M605 S2 X120
>>> t1
SENDING: T1
echo: T1 Invalid extruder
>>> t0
SENDING: T0
echo: Active Extruder: 0
>>> t1
SENDING: T1
echo: T1 Invalid extruder
>>> M605 S1
SENDING: M605 S1
>>> T1
SENDING: T1
echo: busy: processing
echo: Active Extruder: 1
>>> T0
SENDING: T0
echo: busy: processing
echo: Active Extruder: 0
Duplication mode does not work with M605 S2 X120
When used with an LCD, the gap is still 198 mm
AUTO PARK mode
>>> g28
SENDING:G28
echo:Active Extruder: 0
echo:busy: processing
echo:Active Extruder: 0
>>> M605W
SENDING:M605W
echo:Dual X Carriage Mode AUTO_PARK
Active Ext: 0 NOT parked.
active_extruder_x_pos: 120.00
inactive_extruder_x: 300.00
extruder_duplication_enabled: 0
duplicate_extruder_x_offset: 120.00
duplicate_extruder_temp_offset: 0
delayed_move_time: 0
X1 Home X: -50.00
X1_MIN_POS=0
X1_MAX_POS=240
X2 Home X: 300.00
X2_MIN_POS=0
X2_MAX_POS=240
X2_HOME_DIR=1
X2_HOME_POS=300
DEFAULT_DUAL_X_CARRIAGE_MODE=DXC_AUTO_PARK_MODE oolchange_settings.z_raise=2.00
DEFAULT_DUPLICATION_X_OFFSET=120
T0 hotend_offset[0].120=0.00 hotend_offset[0].121=0.00 hotend_offset[0].122=0.00
T1 hotend_offset[1].120=300.00 hotend_offset[1].121=0.00 hotend_offset[1].122=0.00
>>> t1
SENDING:T1
echo:busy: processing
echo:Active Extruder: 1
>>> M605W
SENDING:M605W
echo:Dual X Carriage Mode AUTO_PARK
Active Ext: 1 NOT parked.
active_extruder_x_pos: 120.00
inactive_extruder_x: 300.00
extruder_duplication_enabled: 0
duplicate_extruder_x_offset: 120.00
duplicate_extruder_temp_offset: 0
delayed_move_time: 0
X1 Home X: -50.00
X1_MIN_POS=0
X1_MAX_POS=240
X2 Home X: 300.00
X2_MIN_POS=0
X2_MAX_POS=240
X2_HOME_DIR=1
X2_HOME_POS=300
DEFAULT_DUAL_X_CARRIAGE_MODE=DXC_AUTO_PARK_MODE oolchange_settings.z_raise=2.00
DEFAULT_DUPLICATION_X_OFFSET=120
T0 hotend_offset[0].120=0.00 hotend_offset[0].121=0.00 hotend_offset[0].122=0.00
T1 hotend_offset[1].120=300.00 hotend_offset[1].121=0.00 hotend_offset[1].122=0.00
DUPLICATION mode (X2 sill parked on 300)
>>> g28
SENDING:G28
echo:Active Extruder: 0
echo:Active Extruder: 0
>>> M605 S2
SENDING:M605 S2
>>> M605W
SENDING:M605W
echo:Dual X Carriage Mode DUPLICATION
Active Ext: 0 NOT parked.
active_extruder_x_pos: 120.00
inactive_extruder_x: 300.00
extruder_duplication_enabled: 0
duplicate_extruder_x_offset: 120.00
duplicate_extruder_temp_offset: 0
delayed_move_time: 0
X1 Home X: -50.00
X1_MIN_POS=0
X1_MAX_POS=240
X2 Home X: 300.00
X2_MIN_POS=0
X2_MAX_POS=240
X2_HOME_DIR=1
X2_HOME_POS=300
DEFAULT_DUAL_X_CARRIAGE_MODE=DXC_AUTO_PARK_MODE oolchange_settings.z_raise=2.00
DEFAULT_DUPLICATION_X_OFFSET=120
T0 hotend_offset[0].120=0.00 hotend_offset[0].121=0.00 hotend_offset[0].122=0.00
T1 hotend_offset[1].120=300.00 hotend_offset[1].121=0.00 hotend_offset[1].122=0.00
I didnt see a G28X after youre M605S2 command, that command is what applies the position.
SENDING:M605S2
>>> G28X
SENDING:G28X
echo:Active Extruder: 0
echo:busy: processing
echo:busy: processing
echo:Active Extruder: 0
>>> M605W
SENDING:M605W
echo:Dual X Carriage Mode DUPLICATION
Active Ext: 0 parked.
active_extruder_x_pos: -50.00
inactive_extruder_x: 300.00
extruder_duplication_enabled: 0
duplicate_extruder_x_offset: 200.00
duplicate_extruder_temp_offset: 0
delayed_move_time: 0
X1 Home X: -50.00
X1_MIN_POS=0
X1_MAX_POS=240
X2 Home X: 300.00
X2_MIN_POS=0
X2_MAX_POS=240
X2_HOME_DIR=1
X2_HOME_POS=300
DEFAULT_DUAL_X_CARRIAGE_MODE=DXC_AUTO_PARK_MODE oolchange_settings.z_raise=2.00
DEFAULT_DUPLICATION_X_OFFSET=120
T0 hotend_offset[0].120=0.00 hotend_offset[0].121=0.00 hotend_offset[0].122=0.00
T1 hotend_offset[1].120=300.00 hotend_offset[1].121=0.00 hotend_offset[1].122=0.00
duplicate_extruder_x_offset: 200.00 is always set
Can you power cycle the machine and run G28; M605S2; G28X; M605W? I believe the 200 is there from the menu still and would prefer to see the full scenario without forcing it with M605S2X120 to be sure its not hiding an issue. Then any G1 command, even G1X10Y10 or something just to make it unpark and move. I do see the value of 120 in some of the logs above.
Perhaps an option to automatically apply G28X following M605S2 would be beneficial as it reduces a step that may be missed often.
even if I set duplicate_extruder_x_offset to 120 with M605 S2 X120.
When Dulicate mode is selected from the LCD, it is overwritten to 200 anyway
Right, the point is to ensure everything works when relying on the default value, never supplying a static value, to be sure its safe to remove the legacy hard coded number.
SENDING:G28
echo:Active Extruder: 0
echo:busy: processing
echo:Active Extruder: 0
>>> M605S2
SENDING:M605S2
>>> G28X
SENDING:G28X
echo:Active Extruder: 0
echo:busy: processing
echo:busy: processing
echo:busy: processing
echo:busy: processing
echo:Active Extruder: 0
>>> M605W
SENDING:M605W
echo:Dual X Carriage Mode DUPLICATION
Active Ext: 0 parked.
active_extruder_x_pos: -50.00
inactive_extruder_x: 300.00
extruder_duplication_enabled: 0
duplicate_extruder_x_offset: 120.00
duplicate_extruder_temp_offset: 0
delayed_move_time: 0
X1 Home X: -50.00
X1_MIN_POS=0
X1_MAX_POS=240
X2 Home X: 300.00
X2_MIN_POS=0
X2_MAX_POS=240
X2_HOME_DIR=1
X2_HOME_POS=300
DEFAULT_DUAL_X_CARRIAGE_MODE=DXC_AUTO_PARK_MODE oolchange_settings.z_raise=2.00
DEFAULT_DUPLICATION_X_OFFSET=120
T0 hotend_offset[0].120=0.00 hotend_offset[0].121=0.00 hotend_offset[0].122=0.00
T1 hotend_offset[1].120=300.00 hotend_offset[1].121=0.00 hotend_offset[1].122=0.00
>>> G1X10Y10
SENDING:G1X10Y10
>>> M605W
SENDING:M605W
echo:Dual X Carriage Mode DUPLICATION
Active Ext: 0 NOT parked.
active_extruder_x_pos: 10.00
inactive_extruder_x: 300.00
extruder_duplication_enabled: 1
duplicate_extruder_x_offset: 120.00
duplicate_extruder_temp_offset: 0
delayed_move_time: 0
X1 Home X: -50.00
X1_MIN_POS=0
X1_MAX_POS=240
X2 Home X: 300.00
X2_MIN_POS=0
X2_MAX_POS=240
X2_HOME_DIR=1
X2_HOME_POS=300
DEFAULT_DUAL_X_CARRIAGE_MODE=DXC_AUTO_PARK_MODE oolchange_settings.z_raise=2.00
DEFAULT_DUPLICATION_X_OFFSET=120
T0 hotend_offset[0].120=0.00 hotend_offset[0].121=0.00 hotend_offset[0].122=0.00
T1 hotend_offset[1].120=300.00 hotend_offset[1].121=0.00 hotend_offset[1].122=0.00
It appears that functioned correctly, physically is it correct?
after entering G1 X10 Y10 is X1 in position 10 and X2 in position 130
LCD selection still does not work (gap 200)
Ok, so to sum up the needfull, legacy hardcoded value is safe to remove from the menu code and add config option to auto apply G28X at mode change so a commonly missed step is avoided.
Right, that value was hard coded to the menu when an X argument was required, no default at the time. So the steps above just proved beyond doubt it was safe to remove.
If you use the M605 S2 command sequence; G28X sets the duplication mode with a gap of 120 mm.
The selection of the LCD assistance module is still from a gap of 200 mm.
The movement of the trolleys in duplicate mode is not limited to half Hotbed.
Movement of X is possible over half and then X2 hits the endstop X-max
Movement not being clamped is still a separate item from the first we were just discussing. Thats going to need some setup with the carriage size to avoid crashes in mirror mode and will take more than a few minutes between other things at my day job.
@DrumClock I think you also need to slice accordingly. Set bed size in the printer profile to half bed size minus half required offset and set your M605 offset to 0 and it should print fine. In mirror mode you can set a profile for exactly half bed width.
I'm fully available, I have a test frame and I can send videos of how it behaves.
@ogland
Yes, I understand that the slicer must be only half the width. The point is that if a g-code that is larger than half of the HB is sent by mistake, a collision will occur ...... it will probably need to be treated in FW in both modes.
Yup, in my opinion this closes the bug report half of this moving the remaining to a feature request since that safety never existed in the first place however still just fine to all live here. I agree its good to have it just havnt had time to do it.
@InsanityAutomation
I tried changes pr/20133 to my configuration.
errors occurred during compilation.
Compiling .pio\build\BIGTREE_GTR_V1_0\src\src\lcd\menu\menu_media.cpp.o
In file included from Marlin\src\lcd\menu\menu_configuration.cpp:31:
Marlin\src\lcd\menu\menu_configuration.cpp: In function 'void menu_idex()':
Marlin\src\lcd\menu\menu_configuration.cpp:207:27: error: 'MSG_IDEX_DUPE_GAP' is not a member of 'Language_cz'
207 | EDIT_ITEM(float42_52, MSG_IDEX_DUPE_GAP, &duplicate_extruder_x_offset);
| ^~~~~~~~~~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:256:24: note: in definition of macro '_MENU_INNER_P'
Compiling .pio\build\BIGTREE_GTR_V1_0\src\src\lcd\menu\menu_mixer.cpp.o
256 | PGM_P const plabel = PLABEL; \
| ^~~~~~
Marlin\src\lcd\menu\menu_item.h:354:57: note: in expansion of macro '_MENU_ITEM_P'
354 | #define MENU_ITEM_P(TYPE, PLABEL, V...) _MENU_ITEM_P(TYPE, false, PLABEL, ##V)
| ^~~~~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:392:58: note: in expansion of macro 'MENU_ITEM_P'
392 | #define EDIT_ITEM_P(TYPE, PLABEL, V...) MENU_ITEM_P(TYPE, PLABEL, ##V)
| ^~~~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:393:58: note: in expansion of macro 'EDIT_ITEM_P'
393 | #define EDIT_ITEM(TYPE, LABEL, V...) EDIT_ITEM_P(TYPE, GET_TEXT(LABEL), ##V)
| ^~~~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:393:76: note: in expansion of macro 'GET_TEXT'
393 | #define EDIT_ITEM(TYPE, LABEL, V...) EDIT_ITEM_P(TYPE, GET_TEXT(LABEL), ##V)
| ^~~~~~~~
Marlin\src\lcd\menu\menu_configuration.cpp:207:5: note: in expansion of macro 'EDIT_ITEM'
207 | EDIT_ITEM(float42_52, MSG_IDEX_DUPE_GAP, &duplicate_extruder_x_offset);
| ^~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:259:40: error: no matching function for call to 'TMenuEditItem<MenuEditItemInfo_float42_52>::action(const char* const&, float*)'
259 | MenuItem_##TYPE::action(plabel, ##V); \
| ^
Marlin\src\lcd\menu\menu_item.h:270:5: note: in expansion of macro '_MENU_INNER_P'
270 | _MENU_INNER_P(TYPE, ##V); \
| ^~~~~~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:354:57: note: in expansion of macro '_MENU_ITEM_P'
354 | #define MENU_ITEM_P(TYPE, PLABEL, V...) _MENU_ITEM_P(TYPE, false, PLABEL, ##V)
| ^~~~~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:392:58: note: in expansion of macro 'MENU_ITEM_P'
392 | #define EDIT_ITEM_P(TYPE, PLABEL, V...) MENU_ITEM_P(TYPE, PLABEL, ##V)
| ^~~~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:393:58: note: in expansion of macro 'EDIT_ITEM_P'
393 | #define EDIT_ITEM(TYPE, LABEL, V...) EDIT_ITEM_P(TYPE, GET_TEXT(LABEL), ##V)
| ^~~~~~~~~~~
Marlin\src\lcd\menu\menu_configuration.cpp:207:5: note: in expansion of macro 'EDIT_ITEM'
207 | EDIT_ITEM(float42_52, MSG_IDEX_DUPE_GAP, &duplicate_extruder_x_offset);
| ^~~~~~~~~
Marlin\src\lcd\menu\menu_item.h:93:17: note: candidate: 'static void TMenuEditItem<NAME>::action(const char*, TMenuEditItem<NAME>::type_t*, TMenuEditItem<NAME>::type_t, TMenuEditItem<NAME>::type_t, screenFunc_t, bool) [with NAME = MenuEditItemInfo_float42_52; TMenuEditItem<NAME>::type_t = float; screenFunc_t = void (*)()]'
93 | static void action(
| ^~~~~~
Marlin\src\lcd\menu\menu_item.h:93:17: note: candidate expects 6 arguments, 2 provided
*** [.pio\build\BIGTREE_GTR_V1_0\src\src\lcd\menu\menu_configuration.cpp.o] Error 1
==================================================================== [FAILED] Took 57.70 seconds ====================================================================
Environment Status Duration
---------------- -------- ------------
BIGTREE_GTR_V1_0 FAILED 00:00:57.704
=============================================================== 1 failed, 0 succeeded in 00:00:57.704 ===============================================================
My bad, one file had the white dot of not saved... Pushed now
still compilation errors. tomorrow I will try a clean installation of bugfix 2.0 and pr / 20133
Right, that value was hard coded to the menu when an X argument was required, no default at the time. So the steps above just proved beyond doubt it was safe to remove.
My apologies for the hard coded number! I'm glad that is pulled out of the code now! Thank You!
Hi @InsanityAutomation
I think here
GCODES_ITEM (MSG_IDEX_MODE_MIRRORED_COPY, need_g28
? PSTR ("M605S1 \ nT0 \ nG28 \ nM605S2 \ nG28X \ n**G1X0** \ nM605S3") // If Y or Z is not guided, perform the entire G28 first
: PSTR ("M605S1 \ nT0 \ nM605S2 \ nG28 X \ n**G1X0** \ nM605S3")
should set a quarter of theX_BED_SIZE value with the**G1X0** location group
Otherwise, printing in MIRRORED mode starts at X0 and that's not good.
In my case I have X_BED_SIZE 240 and DEFAULT_DUPLICATION_X_OFFSET 120 is a collision-free movement
in the range X0 to X95 (of course it will depend on the width of the extruder)
Attach you're config files and I'll see what it gives me. As for calculating that number, the pstr area can't mix static and calculated strings without being pushed to sram. Die to memory constraints in most boards we only do that when absolutely necessary. The first move of the print should make that irrelevant though.
Hi @InsanityAutomation
I thought of adding to Configuration_adv.h settings for MIRRORED mode:
// Default x offset in mirrrored mode (typically set to print bed width)
#define DEFAULT_MIRRORED_X_OFFSET X_BED_SIZE
// Set the maximum so that the first X-carriage cannot hit the second X-carriage
#define X_MAX_MIRRORED_POS 95

So when selecting MIRRORED mode from LCD or M605 S3, carriages is set to X1 = 0
and X2 = X_BED_SIZE while maintaining the "G1X0" command.
GCODES_ITEM(MSG_IDEX_MODE_MIRRORED_COPY, need_g28
? PSTR("M605S1\nT0\nG28\nM605S2\nG28X\nG1X0\nM605S3") // If Y or Z is not homed, do a full G28 first
: PSTR("M605S1\nT0\nM605S2\nG28 X\nG1X0\nM605S3")
X_MAX_MIRRORED_POS to restrict movement to avoid collision of carriages
Hi @InsanityAutomation
Because the mirrored mode is still unresolved where should I send $ 10 to solve half of the idex problems?
@DrumClock this is all being done in spare time, and competes with "normal life" priorities. It is unreasonable to expect people to drop everything to work on uncommon features on your timeline. I am sure you could find people to prioritize it for some money, but you would probably have to add some zeroes to the offer. You _might_ be able to find some people to prioritize it in exchange for a printer to use as a test bed.
Hi @sjasonsmith @thisiskeithb
If I have offended someone by my attempt to remove IDEX errors, I am very sorry.
Here I pointed out errors in IDEX modes 6 months agoand nothing happened until I tried to offer $ 20.
Unfortunately, only half of the bugs have been fixed, and since then there has been no response as to whether this continues.
I also work and 3D printers are my hobby. I build and improve them
(I also put it on thingiverse.com for free) and so I find bugs in the FW.
There is no feedback that eg issues # 2947 opened on 30 Jan 2016 is resolved, I'm quite sorry.
Then I can't be surprised that there are so many bugs open. And there is no time to deal with it.
You _might_ be able to find some people to prioritize it in exchange for a printer to use as a test bed.
Why donate a printer now?
This "test frame" https://www.youtube.com/watch?v=WkDNu3AFBKM where you can try everything I built from leftovers in 3 hours. Perhaps anyone who is interested in 3D printing can do more than just "for printing" ....
The reason for my reply is the impatience. Not many people work on IDEX features, mostly because almost nobody has IDEX printers! I considered buying a printer to help you, but I would have to spend $400 for the cheapest IDEX printer around, and I already have other bugs I can work on.
As it happens, the one person really able to help you right now is just super busy, and has been all year. If you really want to propel IDEX support forward, I suggest you learn to work in the code and contribute some fixes yourself!
You should send people some of your test frames if you want them to help :)
Believe me, if I can program, I will be happy to help you.
Unfortunately, I don't even speak English, so I use a translator.
Someone can program and some can't, even if they want to.
For me, mechanics, electronics and inventing improvements are not a problem.
Your test bench looks interesting. Do you have plans for it somewhere, or is it completely custom and one of a kind?
Your test bench looks interesting. Do you have plans for it somewhere, or is it completely custom and one of a kind?
It's built the way I thought. You don't need a 3d printer to verify the function.
The $$ incentive was irrelevant really, and can just donate it to the marlin funding if you want. Request came in when I happened to have 30min to poke at it so I happened to see it and hit it quick. The other half needs more than a passing time investment so it'll need to wait till I'm working less than 60 hours a week. Unfortunately I've been slammed since covid put everything behind.
The other half needs more than a passing time investment so it'll need to wait till I'm working less than 60 hours a week.
Hi @InsanityAutomation
Thanks, $ 20 I donate funding to Marlin.
I found other bugs in IDEX modes, especially in X shift restrictions.
Should I post them here or start new issues?
Either way is fine with me, if you open new ones tag me. If they're quick I may nab em between things.
Hi @InsanityAutomation
I thought of adding to Configuration_adv.h settings for MIRRORED mode:// Default x offset in mirrrored mode (typically set to print bed width) #define DEFAULT_MIRRORED_X_OFFSET X_BED_SIZE // Set the maximum so that the first X-carriage cannot hit the second X-carriage #define X_MAX_MIRRORED_POS 95
So when selecting MIRRORED mode from LCD or M605 S3, carriages is set to X1 = 0
and X2 = X_BED_SIZE while maintaining the"G1X0"command.GCODES_ITEM(MSG_IDEX_MODE_MIRRORED_COPY, need_g28 ? PSTR("M605S1\nT0\nG28\nM605S2\nG28X\nG1X0\nM605S3") // If Y or Z is not homed, do a full G28 first : PSTR("M605S1\nT0\nM605S2\nG28 X\nG1X0\nM605S3")
X_MAX_MIRRORED_POSto restrict movement to avoid collision of carriages
Start new issues well. Here I will leave this MIRRORED mode to completion.