소스 검색

Fix IDEX tool-change, and more (#13614)

InsanityAutomation 6 년 전
부모
커밋
4900c28bf6

+ 1
- 1
Marlin/src/gcode/motion/M290.cpp 파일 보기

50
       else {
50
       else {
51
         hotend_offset[Z_AXIS][active_extruder] -= offs;
51
         hotend_offset[Z_AXIS][active_extruder] -= offs;
52
         SERIAL_ECHO_START();
52
         SERIAL_ECHO_START();
53
-        SERIAL_ECHOLNPAIR(MSG_IDEX_Z_OFFSET ": ", hotend_offset[Z_AXIS][active_extruder]);
53
+        SERIAL_ECHOLNPAIR(MSG_Z_OFFSET ": ", hotend_offset[Z_AXIS][active_extruder]);
54
       }
54
       }
55
     #endif
55
     #endif
56
   }
56
   }

+ 3
- 4
Marlin/src/lcd/language/language_de.h 파일 보기

101
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplizieren")
101
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplizieren")
102
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Spiegelkopie")
102
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Spiegelkopie")
103
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("vollstä. Kontrolle")
103
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("vollstä. Kontrolle")
104
-#define MSG_IDEX_X_OFFSET                   _UxGT("2. Düse X")
105
-#define MSG_IDEX_Y_OFFSET                   _UxGT("2. Düse Y")
106
-#define MSG_IDEX_Z_OFFSET                   _UxGT("2. Düse Z")
107
-#define MSG_IDEX_SAVE_OFFSETS               _UxGT("Versätze speichern")
104
+#define MSG_X_OFFSET                        _UxGT("2. Düse X")
105
+#define MSG_Y_OFFSET                        _UxGT("2. Düse Y")
106
+#define MSG_Z_OFFSET                        _UxGT("2. Düse Z")
108
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Netz manuell erst.")
107
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Netz manuell erst.")
109
 #define MSG_UBL_BC_INSERT                   _UxGT("Unterlegen & messen")
108
 #define MSG_UBL_BC_INSERT                   _UxGT("Unterlegen & messen")
110
 #define MSG_UBL_BC_INSERT2                  _UxGT("Messen")
109
 #define MSG_UBL_BC_INSERT2                  _UxGT("Messen")

+ 9
- 9
Marlin/src/lcd/language/language_en.h 파일 보기

247
 #ifndef MSG_IDEX_MENU
247
 #ifndef MSG_IDEX_MENU
248
   #define MSG_IDEX_MENU                       _UxGT("IDEX Mode")
248
   #define MSG_IDEX_MENU                       _UxGT("IDEX Mode")
249
 #endif
249
 #endif
250
+#ifndef MSG_OFFSETS_MENU
251
+  #define MSG_OFFSETS_MENU                    _UxGT("Tool Offsets")
252
+#endif
250
 #ifndef MSG_IDEX_MODE_AUTOPARK
253
 #ifndef MSG_IDEX_MODE_AUTOPARK
251
   #define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Park")
254
   #define MSG_IDEX_MODE_AUTOPARK              _UxGT("Auto-Park")
252
 #endif
255
 #endif
259
 #ifndef MSG_IDEX_MODE_FULL_CTRL
262
 #ifndef MSG_IDEX_MODE_FULL_CTRL
260
   #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Full control")
263
   #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Full control")
261
 #endif
264
 #endif
262
-#ifndef MSG_IDEX_X_OFFSET
263
-  #define MSG_IDEX_X_OFFSET                   _UxGT("2nd nozzle X")
264
-#endif
265
-#ifndef MSG_IDEX_Y_OFFSET
266
-  #define MSG_IDEX_Y_OFFSET                   _UxGT("2nd nozzle Y")
265
+#ifndef MSG_X_OFFSET
266
+  #define MSG_X_OFFSET                        _UxGT("2nd nozzle X")
267
 #endif
267
 #endif
268
-#ifndef MSG_IDEX_Z_OFFSET
269
-  #define MSG_IDEX_Z_OFFSET                   _UxGT("2nd nozzle Z")
268
+#ifndef MSG_Y_OFFSET
269
+  #define MSG_Y_OFFSET                        _UxGT("2nd nozzle Y")
270
 #endif
270
 #endif
271
-#ifndef MSG_IDEX_SAVE_OFFSETS
272
-  #define MSG_IDEX_SAVE_OFFSETS               _UxGT("Save Offsets")
271
+#ifndef MSG_Z_OFFSET
272
+  #define MSG_Z_OFFSET                        _UxGT("2nd nozzle Z")
273
 #endif
273
 #endif
274
 #ifndef MSG_UBL_MANUAL_MESH
274
 #ifndef MSG_UBL_MANUAL_MESH
275
   #define MSG_UBL_MANUAL_MESH                 _UxGT("Manually Build Mesh")
275
   #define MSG_UBL_MANUAL_MESH                 _UxGT("Manually Build Mesh")

+ 3
- 4
Marlin/src/lcd/language/language_it.h 파일 보기

99
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplicazione")
99
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplicazione")
100
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Copia speculare")
100
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Copia speculare")
101
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Pieno controllo")
101
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Pieno controllo")
102
-#define MSG_IDEX_X_OFFSET                   _UxGT("2° ugello X")
103
-#define MSG_IDEX_Y_OFFSET                   _UxGT("2° ugello Y")
104
-#define MSG_IDEX_Z_OFFSET                   _UxGT("2° ugello Z")
105
-#define MSG_IDEX_SAVE_OFFSETS               _UxGT("Memorizza Offsets")
102
+#define MSG_X_OFFSET                        _UxGT("2° ugello X")
103
+#define MSG_Y_OFFSET                        _UxGT("2° ugello Y")
104
+#define MSG_Z_OFFSET                        _UxGT("2° ugello Z")
106
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Mesh Manuale")
105
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Mesh Manuale")
107
 #define MSG_UBL_BC_INSERT                   _UxGT("Metti spes. e misura")
106
 #define MSG_UBL_BC_INSERT                   _UxGT("Metti spes. e misura")
108
 #define MSG_UBL_BC_INSERT2                  _UxGT("Misura")
107
 #define MSG_UBL_BC_INSERT2                  _UxGT("Misura")

+ 3
- 4
Marlin/src/lcd/language/language_ko_KR.h 파일 보기

90
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplication")
90
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplication")
91
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("미러 사본")
91
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("미러 사본")
92
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Full control")
92
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Full control")
93
-#define MSG_IDEX_X_OFFSET                   _UxGT("2nd nozzle X")
94
-#define MSG_IDEX_Y_OFFSET                   _UxGT("2nd nozzle Y")
95
-#define MSG_IDEX_Z_OFFSET                   _UxGT("2nd nozzle Z")
96
-#define MSG_IDEX_SAVE_OFFSETS               _UxGT("Save Offsets")
93
+#define MSG_X_OFFSET                        _UxGT("2nd nozzle X")
94
+#define MSG_Y_OFFSET                        _UxGT("2nd nozzle Y")
95
+#define MSG_Z_OFFSET                        _UxGT("2nd nozzle Z")
97
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Manually Build Mesh")
96
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Manually Build Mesh")
98
 #define MSG_UBL_BC_INSERT                   _UxGT("Place shim & measure")
97
 #define MSG_UBL_BC_INSERT                   _UxGT("Place shim & measure")
99
 #define MSG_UBL_BC_INSERT2                  _UxGT("Measure")
98
 #define MSG_UBL_BC_INSERT2                  _UxGT("Measure")

+ 3
- 4
Marlin/src/lcd/language/language_pt-br.h 파일 보기

101
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplicação")
101
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplicação")
102
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Cópia espelhada")
102
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Cópia espelhada")
103
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Controle Total")
103
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Controle Total")
104
-#define MSG_IDEX_X_OFFSET                   _UxGT("2o bico X")
105
-#define MSG_IDEX_Y_OFFSET                   _UxGT("2o bico Y")
106
-#define MSG_IDEX_Z_OFFSET                   _UxGT("2o bico Z")
107
-#define MSG_IDEX_SAVE_OFFSETS               _UxGT("Salvar Compensação")
104
+#define MSG_X_OFFSET                        _UxGT("2o bico X")
105
+#define MSG_Y_OFFSET                        _UxGT("2o bico Y")
106
+#define MSG_Z_OFFSET                        _UxGT("2o bico Z")
108
 
107
 
109
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Fazer malha manual")
108
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Fazer malha manual")
110
 #define MSG_UBL_BC_INSERT                   _UxGT("Calçar e calibrar")
109
 #define MSG_UBL_BC_INSERT                   _UxGT("Calçar e calibrar")

+ 3
- 4
Marlin/src/lcd/language/language_sk.h 파일 보기

108
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplikácia")
108
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Duplikácia")
109
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Zrkadlená kópia")
109
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Zrkadlená kópia")
110
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Plná kontrola")
110
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Plná kontrola")
111
-#define MSG_IDEX_X_OFFSET                   _UxGT("2. tryska X")
112
-#define MSG_IDEX_Y_OFFSET                   _UxGT("2. tryska Y")
113
-#define MSG_IDEX_Z_OFFSET                   _UxGT("2. tryska Z")
114
-#define MSG_IDEX_SAVE_OFFSETS               _UxGT("Uložiť offsety")
111
+#define MSG_X_OFFSET                        _UxGT("2. tryska X")
112
+#define MSG_Y_OFFSET                        _UxGT("2. tryska Y")
113
+#define MSG_Z_OFFSET                        _UxGT("2. tryska Z")
115
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Manuálna sieť bodov")
114
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Manuálna sieť bodov")
116
 #define MSG_UBL_BC_INSERT                   _UxGT("Položte a zmerajte")
115
 #define MSG_UBL_BC_INSERT                   _UxGT("Položte a zmerajte")
117
 #define MSG_UBL_BC_INSERT2                  _UxGT("Zmerajte")
116
 #define MSG_UBL_BC_INSERT2                  _UxGT("Zmerajte")

+ 3
- 4
Marlin/src/lcd/language/language_tr.h 파일 보기

100
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Kopyala")
100
 #define MSG_IDEX_MODE_DUPLICATE             _UxGT("Kopyala")
101
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Yansıtılmış kopya")
101
 #define MSG_IDEX_MODE_MIRRORED_COPY         _UxGT("Yansıtılmış kopya")
102
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Tam Kontrol")
102
 #define MSG_IDEX_MODE_FULL_CTRL             _UxGT("Tam Kontrol")
103
-#define MSG_IDEX_X_OFFSET                   _UxGT("2. nozul X")
104
-#define MSG_IDEX_Y_OFFSET                   _UxGT("2. nozul Y")
105
-#define MSG_IDEX_Z_OFFSET                   _UxGT("2. nozul Z")
106
-#define MSG_IDEX_SAVE_OFFSETS               _UxGT("Ofsetleri Kaydet")
103
+#define MSG_X_OFFSET                        _UxGT("2. nozul X")
104
+#define MSG_Y_OFFSET                        _UxGT("2. nozul Y")
105
+#define MSG_Z_OFFSET                        _UxGT("2. nozul Z")
107
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Elle Mesh Oluştur")
106
 #define MSG_UBL_MANUAL_MESH                 _UxGT("Elle Mesh Oluştur")
108
 #define MSG_UBL_BC_INSERT                   _UxGT("Altlık & Ölçü Ver")
107
 #define MSG_UBL_BC_INSERT                   _UxGT("Altlık & Ölçü Ver")
109
 #define MSG_UBL_BC_INSERT2                  _UxGT("Ölçü")
108
 #define MSG_UBL_BC_INSERT2                  _UxGT("Ölçü")

+ 1
- 1
Marlin/src/lcd/menu/menu.cpp 파일 보기

391
     if (ui.should_draw()) {
391
     if (ui.should_draw()) {
392
       #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
392
       #if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
393
         if (!do_probe)
393
         if (!do_probe)
394
-          draw_edit_screen(PSTR(MSG_IDEX_Z_OFFSET), ftostr43sign(hotend_offset[Z_AXIS][active_extruder]));
394
+          draw_edit_screen(PSTR(MSG_Z_OFFSET), ftostr43sign(hotend_offset[Z_AXIS][active_extruder]));
395
         else
395
         else
396
       #endif
396
       #endif
397
           draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(zprobe_zoffset));
397
           draw_edit_screen(PSTR(MSG_ZPROBE_ZOFFSET), ftostr43sign(zprobe_zoffset));

+ 28
- 10
Marlin/src/lcd/menu/menu_configuration.cpp 파일 보기

119
 
119
 
120
 #endif
120
 #endif
121
 
121
 
122
-#if ENABLED(DUAL_X_CARRIAGE)
123
-
122
+#if HAS_HOTEND_OFFSET
124
   #include "../../module/motion.h"
123
   #include "../../module/motion.h"
125
   #include "../../gcode/queue.h"
124
   #include "../../gcode/queue.h"
126
 
125
 
127
-  void _recalc_IDEX_settings() {
128
-    if (active_extruder) {                      // For the 2nd extruder re-home so the next tool-change gets the new offsets.
126
+  void _recalc_offsets() {
127
+    if (active_extruder && all_axes_known()) {  // For the 2nd extruder re-home so the next tool-change gets the new offsets.
129
       enqueue_and_echo_commands_P(PSTR("G28")); // In future, we can babystep the 2nd extruder (if active), making homing unnecessary.
128
       enqueue_and_echo_commands_P(PSTR("G28")); // In future, we can babystep the 2nd extruder (if active), making homing unnecessary.
130
       active_extruder = 0;
129
       active_extruder = 0;
131
     }
130
     }
132
   }
131
   }
133
 
132
 
134
-  void menu_IDEX() {
133
+  void menu_tool_offsets() {
134
+    START_MENU();
135
+    MENU_BACK(MSG_MAIN);
136
+    #if ENABLED(DUAL_X_CARRIAGE)
137
+      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52, MSG_X_OFFSET, &hotend_offset[X_AXIS][1], MIN(X2_HOME_POS, X2_MAX_POS) - 25.0, MAX(X2_HOME_POS, X2_MAX_POS) + 25.0, _recalc_offsets);
138
+    #else
139
+      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52, MSG_X_OFFSET, &hotend_offset[X_AXIS][1], -10.0, 10.0, _recalc_offsets);
140
+    #endif
141
+    MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52, MSG_Y_OFFSET, &hotend_offset[Y_AXIS][1], -10.0, 10.0, _recalc_offsets);
142
+    MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52, MSG_Z_OFFSET, &hotend_offset[Z_AXIS][1], Z_PROBE_LOW_POINT, 10.0, _recalc_offsets);
143
+    #if ENABLED(EEPROM_SETTINGS)
144
+      MENU_ITEM(function, MSG_STORE_EEPROM, lcd_store_settings);
145
+    #endif
146
+    END_MENU();
147
+  }
148
+#endif
149
+
150
+#if ENABLED(DUAL_X_CARRIAGE)
151
+
152
+  void menu_idex() {
135
     START_MENU();
153
     START_MENU();
136
     MENU_BACK(MSG_MAIN);
154
     MENU_BACK(MSG_MAIN);
137
 
155
 
146
       : PSTR("M605 S1\nT0\nM605 S2 X200\nG28 X\nG1 X100\nM605 S3 X200")
164
       : PSTR("M605 S1\nT0\nM605 S2 X200\nG28 X\nG1 X100\nM605 S3 X200")
147
     );
165
     );
148
     MENU_ITEM(gcode, MSG_IDEX_MODE_FULL_CTRL, PSTR("M605 S0\nG28 X"));
166
     MENU_ITEM(gcode, MSG_IDEX_MODE_FULL_CTRL, PSTR("M605 S0\nG28 X"));
149
-    MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52, MSG_IDEX_X_OFFSET , &hotend_offset[X_AXIS][1], MIN(X2_HOME_POS, X2_MAX_POS) - 25.0, MAX(X2_HOME_POS, X2_MAX_POS) + 25.0, _recalc_IDEX_settings);
150
-    MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52, MSG_IDEX_Y_OFFSET , &hotend_offset[Y_AXIS][1], -10.0, 10.0, _recalc_IDEX_settings);
151
-    MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float52, MSG_IDEX_Z_OFFSET , &hotend_offset[Z_AXIS][1], -10.0, 10.0, _recalc_IDEX_settings);
152
-    MENU_ITEM(gcode, MSG_IDEX_SAVE_OFFSETS, PSTR("M500"));
153
     END_MENU();
167
     END_MENU();
154
   }
168
   }
155
 
169
 
287
       MENU_ITEM(submenu, MSG_DELTA_CALIBRATE, menu_delta_calibrate);
301
       MENU_ITEM(submenu, MSG_DELTA_CALIBRATE, menu_delta_calibrate);
288
     #endif
302
     #endif
289
 
303
 
304
+    #if HAS_HOTEND_OFFSET
305
+      MENU_ITEM(submenu, MSG_OFFSETS_MENU, menu_tool_offsets);
306
+    #endif
307
+
290
     #if ENABLED(DUAL_X_CARRIAGE)
308
     #if ENABLED(DUAL_X_CARRIAGE)
291
-      MENU_ITEM(submenu, MSG_IDEX_MENU, menu_IDEX);
309
+      MENU_ITEM(submenu, MSG_IDEX_MENU, menu_idex);
292
     #endif
310
     #endif
293
 
311
 
294
     #if ENABLED(BLTOUCH)
312
     #if ENABLED(BLTOUCH)

+ 1
- 19
Marlin/src/module/tool_change.cpp 파일 보기

121
 
121
 
122
     void move_nozzle_servo(const uint8_t angle_index) {
122
     void move_nozzle_servo(const uint8_t angle_index) {
123
       planner.synchronize();
123
       planner.synchronize();
124
-      MOVE_SERVO(SWITCHING_NOZZLE_SERVO_NR, servo_angles[SWITCHING_NOZZLE_SERVO_NR][e]);
124
+      MOVE_SERVO(SWITCHING_NOZZLE_SERVO_NR, servo_angles[SWITCHING_NOZZLE_SERVO_NR][angle_index]);
125
       safe_delay(500);
125
       safe_delay(500);
126
     }
126
     }
127
 
127
 
519
       planner.synchronize();
519
       planner.synchronize();
520
     }
520
     }
521
 
521
 
522
-    // Apply Y & Z extruder offset (X offset is used as home pos with Dual X)
523
-    current_position[Y_AXIS] -= hotend_offset[Y_AXIS][active_extruder] - hotend_offset[Y_AXIS][tmp_extruder];
524
-    current_position[Z_AXIS] -= hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder];
525
-
526
     // Activate the new extruder ahead of calling set_axis_is_at_home!
522
     // Activate the new extruder ahead of calling set_axis_is_at_home!
527
     active_extruder = tmp_extruder;
523
     active_extruder = tmp_extruder;
528
 
524
 
784
         lower_nozzle(active_extruder);
780
         lower_nozzle(active_extruder);
785
       #endif
781
       #endif
786
 
782
 
787
-      #if ENABLED(TOOLCHANGE_FILAMENT_SWAP) && ADVANCED_PAUSE_RESUME_PRIME != 0
788
-        if (should_swap && !too_cold) {
789
-          const float resume_eaxis = current_position[E_AXIS];
790
-          #if ENABLED(ADVANCED_PAUSE_FEATURE)
791
-            do_pause_e_move(toolchange_settings.swap_length, toolchange_settings.prime_speed);
792
-          #else
793
-            current_position[E_AXIS] += (ADVANCED_PAUSE_RESUME_PRIME) / planner.e_factor[active_extruder];
794
-            planner.buffer_line(current_position, ADVANCED_PAUSE_PURGE_FEEDRATE, active_extruder);
795
-          #endif
796
-          planner.synchronize();
797
-          planner.set_e_position_mm((destination[E_AXIS] = current_position[E_AXIS] = resume_eaxis));
798
-        }
799
-      #endif
800
-
801
     } // (tmp_extruder != active_extruder)
783
     } // (tmp_extruder != active_extruder)
802
 
784
 
803
     planner.synchronize();
785
     planner.synchronize();

Loading…
취소
저장