瀏覽代碼

Update current position in M852

Scott Lahteine 6 年之前
父節點
當前提交
08d9aeff41
共有 1 個檔案被更改,包括 32 行新增15 行删除
  1. 32
    15
      Marlin/Marlin_main.cpp

+ 32
- 15
Marlin/Marlin_main.cpp 查看文件

@@ -9914,37 +9914,47 @@ inline void gcode_M502() {
9914 9914
    *  K[yz_factor] - New YZ skew factor
9915 9915
    */
9916 9916
   inline void gcode_M852() {
9917
-    const bool ijk = parser.seen('I') || parser.seen('S')
9918
-      #if ENABLED(SKEW_CORRECTION_FOR_Z)
9919
-        || parser.seen('J') || parser.seen('K')
9920
-      #endif
9921
-    ;
9922
-    bool badval = false;
9917
+    uint8_t ijk = 0, badval = 0, setval = 0;
9923 9918
 
9924 9919
     if (parser.seen('I') || parser.seen('S')) {
9920
+      ++ijk;
9925 9921
       const float value = parser.value_linear_units();
9926
-      if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX))
9927
-        planner.xy_skew_factor = value;
9922
+      if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
9923
+        if (planner.xy_skew_factor != value) {
9924
+          planner.xy_skew_factor = value;
9925
+          ++setval;
9926
+        }
9927
+      }
9928 9928
       else
9929
-        badval = true;
9929
+        ++badval;
9930 9930
     }
9931 9931
 
9932 9932
     #if ENABLED(SKEW_CORRECTION_FOR_Z)
9933 9933
 
9934 9934
       if (parser.seen('J')) {
9935
+        ++ijk;
9935 9936
         const float value = parser.value_linear_units();
9936
-        if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX))
9937
-          planner.xz_skew_factor = value;
9937
+        if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
9938
+          if (planner.xz_skew_factor != value) {
9939
+            planner.xz_skew_factor = value;
9940
+            ++setval;
9941
+          }
9942
+        }
9938 9943
         else
9939
-          badval = true;
9944
+          ++badval;
9940 9945
       }
9941 9946
 
9942 9947
       if (parser.seen('K')) {
9948
+        ++ijk;
9943 9949
         const float value = parser.value_linear_units();
9944
-        if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX))
9945
-          planner.yz_skew_factor = value;
9950
+        if (WITHIN(value, SKEW_FACTOR_MIN, SKEW_FACTOR_MAX)) {
9951
+          if (planner.yz_skew_factor != value) {
9952
+            planner.yz_skew_factor = value;
9953
+            ++setval;
9954
+          }
9955
+        }
9946 9956
         else
9947
-          badval = true;
9957
+          ++badval;
9948 9958
       }
9949 9959
 
9950 9960
     #endif
@@ -9952,6 +9962,13 @@ inline void gcode_M502() {
9952 9962
     if (badval)
9953 9963
       SERIAL_ECHOLNPGM(MSG_SKEW_MIN " " STRINGIFY(SKEW_FACTOR_MIN) " " MSG_SKEW_MAX " " STRINGIFY(SKEW_FACTOR_MAX));
9954 9964
 
9965
+    // When skew is changed the current position changes
9966
+    if (setval) {
9967
+      set_current_from_steppers_for_axis(ALL_AXES);
9968
+      SYNC_PLAN_POSITION_KINEMATIC();
9969
+      report_current_position();
9970
+    }
9971
+
9955 9972
     if (!ijk) {
9956 9973
       SERIAL_ECHO_START();
9957 9974
       SERIAL_ECHOPAIR(MSG_SKEW_FACTOR " XY: ", planner.xy_skew_factor);

Loading…
取消
儲存