Browse Source

Merge pull request #8397 from RowanMeara/rm-M428-1.1.x

[1.1.x] Fix M428
Scott Lahteine 7 years ago
parent
commit
8b684637bc
No account linked to committer's email address
2 changed files with 31 additions and 32 deletions
  1. 1
    0
      Marlin/Marlin.h
  2. 30
    32
      Marlin/Marlin_main.cpp

+ 1
- 0
Marlin/Marlin.h View File

439
       || ENABLED(NOZZLE_CLEAN_FEATURE)                                             \
439
       || ENABLED(NOZZLE_CLEAN_FEATURE)                                             \
440
       || ENABLED(NOZZLE_PARK_FEATURE)                                              \
440
       || ENABLED(NOZZLE_PARK_FEATURE)                                              \
441
       || (ENABLED(ADVANCED_PAUSE_FEATURE) && ENABLED(HOME_BEFORE_FILAMENT_CHANGE)) \
441
       || (ENABLED(ADVANCED_PAUSE_FEATURE) && ENABLED(HOME_BEFORE_FILAMENT_CHANGE)) \
442
+      || HAS_M206_COMMAND                                                          \
442
     ) || ENABLED(NO_MOTION_BEFORE_HOMING)
443
     ) || ENABLED(NO_MOTION_BEFORE_HOMING)
443
 
444
 
444
 #if HAS_AXIS_UNHOMED_ERR
445
 #if HAS_AXIS_UNHOMED_ERR

+ 30
- 32
Marlin/Marlin_main.cpp View File

3653
 #if ENABLED(CNC_COORDINATE_SYSTEMS)
3653
 #if ENABLED(CNC_COORDINATE_SYSTEMS)
3654
 
3654
 
3655
   /**
3655
   /**
3656
-   * Select a coordinate system and update the current position.
3656
+   * Select a coordinate system and update the workspace offset.
3657
    * System index -1 is used to specify machine-native.
3657
    * System index -1 is used to specify machine-native.
3658
    */
3658
    */
3659
   bool select_coordinate_system(const int8_t _new) {
3659
   bool select_coordinate_system(const int8_t _new) {
3664
     if (WITHIN(_new, 0, MAX_COORDINATE_SYSTEMS - 1))
3664
     if (WITHIN(_new, 0, MAX_COORDINATE_SYSTEMS - 1))
3665
       COPY(new_offset, coordinate_system[_new]);
3665
       COPY(new_offset, coordinate_system[_new]);
3666
     active_coordinate_system = _new;
3666
     active_coordinate_system = _new;
3667
-    bool didXYZ = false;
3668
     LOOP_XYZ(i) {
3667
     LOOP_XYZ(i) {
3669
       const float diff = new_offset[i] - old_offset[i];
3668
       const float diff = new_offset[i] - old_offset[i];
3670
       if (diff) {
3669
       if (diff) {
3671
         position_shift[i] += diff;
3670
         position_shift[i] += diff;
3672
         update_software_endstops((AxisEnum)i);
3671
         update_software_endstops((AxisEnum)i);
3673
-        didXYZ = true;
3674
       }
3672
       }
3675
     }
3673
     }
3676
-    if (didXYZ) SYNC_PLAN_POSITION_KINEMATIC();
3677
     return true;
3674
     return true;
3678
   }
3675
   }
3679
 
3676
 
6257
     #define IS_G92_0 true
6254
     #define IS_G92_0 true
6258
   #endif
6255
   #endif
6259
 
6256
 
6260
-  bool didXYZ = false, didE = false;
6257
+  bool didE = false;
6258
+  #if IS_SCARA || !HAS_POSITION_SHIFT
6259
+    bool didXYZ = false;
6260
+  #else
6261
+    constexpr bool didXYZ = false;
6262
+  #endif
6261
 
6263
 
6262
   if (IS_G92_0) LOOP_XYZE(i) {
6264
   if (IS_G92_0) LOOP_XYZE(i) {
6263
     if (parser.seenval(axis_codes[i])) {
6265
     if (parser.seenval(axis_codes[i])) {
6265
                   v = i == E_AXIS ? l : LOGICAL_TO_NATIVE(l, i),
6267
                   v = i == E_AXIS ? l : LOGICAL_TO_NATIVE(l, i),
6266
                   d = v - current_position[i];
6268
                   d = v - current_position[i];
6267
       if (!NEAR_ZERO(d)) {
6269
       if (!NEAR_ZERO(d)) {
6268
-        if (i == E_AXIS) didE = true; else didXYZ = true;
6269
-        #if IS_SCARA
6270
-          current_position[i] = v;        // For SCARA just set the position directly
6270
+        #if IS_SCARA || !HAS_POSITION_SHIFT
6271
+          if (i == E_AXIS) didE = true; else didXYZ = true;
6272
+          current_position[i] = v;        // Without workspaces revert to Marlin 1.0 behavior
6271
         #elif HAS_POSITION_SHIFT
6273
         #elif HAS_POSITION_SHIFT
6272
-          if (i == E_AXIS)
6274
+          if (i == E_AXIS) {
6275
+            didE = true;
6273
             current_position[E_AXIS] = v; // When using coordinate spaces, only E is set directly
6276
             current_position[E_AXIS] = v; // When using coordinate spaces, only E is set directly
6277
+          }
6274
           else {
6278
           else {
6275
             position_shift[i] += d;       // Other axes simply offset the coordinate space
6279
             position_shift[i] += d;       // Other axes simply offset the coordinate space
6276
             update_software_endstops((AxisEnum)i);
6280
             update_software_endstops((AxisEnum)i);
6277
           }
6281
           }
6278
-        #else
6279
-          current_position[i] = v;        // Without workspaces revert to Marlin 1.0 behavior
6280
         #endif
6282
         #endif
6281
       }
6283
       }
6282
     }
6284
     }
9958
    *       Use M206 to set these values directly.
9960
    *       Use M206 to set these values directly.
9959
    */
9961
    */
9960
   inline void gcode_M428() {
9962
   inline void gcode_M428() {
9961
-    bool err = false;
9963
+    if (axis_unhomed_error()) return;
9964
+
9965
+    float diff[XYZ];
9962
     LOOP_XYZ(i) {
9966
     LOOP_XYZ(i) {
9963
-      if (axis_homed[i]) {
9964
-        const float base = (current_position[i] > (soft_endstop_min[i] + soft_endstop_max[i]) * 0.5) ? base_home_pos((AxisEnum)i) : 0,
9965
-                    diff = base - current_position[i];
9966
-        if (WITHIN(diff, -20, 20)) {
9967
-          set_home_offset((AxisEnum)i, diff);
9968
-        }
9969
-        else {
9970
-          SERIAL_ERROR_START();
9971
-          SERIAL_ERRORLNPGM(MSG_ERR_M428_TOO_FAR);
9972
-          LCD_ALERTMESSAGEPGM("Err: Too far!");
9973
-          BUZZ(200, 40);
9974
-          err = true;
9975
-          break;
9976
-        }
9967
+      diff[i] = base_home_pos((AxisEnum)i) - current_position[i];
9968
+      if (!WITHIN(diff[i], -20, 20) && home_dir((AxisEnum)i) > 0)
9969
+        diff[i] = -current_position[i];
9970
+      if (!WITHIN(diff[i], -20, 20)) {
9971
+        SERIAL_ERROR_START();
9972
+        SERIAL_ERRORLNPGM(MSG_ERR_M428_TOO_FAR);
9973
+        LCD_ALERTMESSAGEPGM("Err: Too far!");
9974
+        BUZZ(200, 40);
9975
+        return;
9977
       }
9976
       }
9978
     }
9977
     }
9979
 
9978
 
9980
-    if (!err) {
9981
-      report_current_position();
9982
-      LCD_MESSAGEPGM(MSG_HOME_OFFSETS_APPLIED);
9983
-      BUZZ(100, 659);
9984
-      BUZZ(100, 698);
9985
-    }
9979
+    LOOP_XYZ(i) set_home_offset((AxisEnum)i, diff[i]);
9980
+    report_current_position();
9981
+    LCD_MESSAGEPGM(MSG_HOME_OFFSETS_APPLIED);
9982
+    BUZZ(100, 659);
9983
+    BUZZ(100, 698);
9986
   }
9984
   }
9987
 
9985
 
9988
 #endif // HAS_M206_COMMAND
9986
 #endif // HAS_M206_COMMAND

Loading…
Cancel
Save