Report spindle status codes from Modbus.
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Wed, 25 Sep 2019 06:27:22 +0000 (23:27 -0700)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Wed, 25 Sep 2019 06:27:22 +0000 (23:27 -0700)
CHANGELOG.md
src/avr/src/huanyang.c
src/avr/src/huanyang.h
src/avr/src/spindle.c
src/avr/src/vars.def
src/avr/src/vfd_spindle.c
src/avr/src/vfd_spindle.h
src/pug/templates/indicators.pug
src/pug/templates/tool-view.pug

index 0ba506f8a7e23d4a6c5424e713da4f42bdb12e14..475bf8c851b6f80a73f0f16bf6d5ee79de9c91f6 100644 (file)
@@ -11,6 +11,8 @@ Buildbotics CNC Controller Firmware Changelog
  - Put controller into estop when in power shutdown.
  - Don't reset global offsets on M2.
  - Test shunt and show error on failure.
+ - Report spindle status codes from Modbus.
+ - Save more log files in bug report.
 
 ## v0.4.9
  - Enforce 6A per motor channel peak current limit.
index 84597b82a181907762449802646ec7c01ceb90a0..8986702f5aa4e972420b65567df795f18b2497ba 100644 (file)
@@ -289,12 +289,12 @@ void huanyang_set(float power) {
 
 
 float huanyang_get() {return hy.actual_freq / hy.max_freq;}
+uint8_t huanyang_get_status() {return hy.status;}
 
-
+// Variable callbacks
 float get_hy_freq() {return hy.actual_freq;}
 float get_hy_current() {return hy.actual_current;}
 uint16_t get_hy_temp() {return hy.temperature;}
 float get_hy_max_freq() {return hy.max_freq;}
 float get_hy_min_freq() {return hy.min_freq;}
 uint16_t get_hy_rated_rpm() {return hy.rated_rpm;}
-uint8_t get_hy_status() {return hy.status;}
index b482404bb5e57c83afcaf763ba52b7ef373de4f6..ccad44983fb2ff759d8b07aedb515b3cdb2a617e 100644 (file)
@@ -34,6 +34,7 @@ void huanyang_init();
 void huanyang_deinit(deinit_cb_t cb);
 void huanyang_set(float power);
 float huanyang_get();
+uint8_t huanyang_get_status();
 
 
 /// See Huanyang VFD user manual
index 7e2a4d0d20eebb3e5cad44c2c901d6964f946024..6b2566d8c8442b8c5b17b6a708b0b4a0d42029d2 100644 (file)
@@ -246,6 +246,16 @@ void set_min_spin(float value) {
 }
 
 
+uint16_t get_spindle_status() {
+  switch (spindle.type) {
+  case SPINDLE_TYPE_DISABLED: return 0;
+  case SPINDLE_TYPE_PWM:      return 0;
+  case SPINDLE_TYPE_HUANYANG: return huanyang_get_status();
+  default:                    return vfd_get_status();
+  }
+}
+
+
 uint16_t get_speed_override() {return spindle.override * 1000;}
 
 
index 2308df0f55ed69b3d33369da6c1d82983b11a9cd..b9fdb570b2a5f1f08a63d0d89387ac829a403233 100644 (file)
@@ -89,6 +89,7 @@ VAR(speed,            s, f32,   0,      0, 1) // Current spindle speed
 VAR(tool_reversed,   sr, b8,    0,      1, 1) // Reverse tool
 VAR(max_spin,        sx, f32,   0,      1, 1) // Maximum spindle speed
 VAR(min_spin,        sm, f32,   0,      1, 1) // Minimum spindle speed
+VAR(spindle_status,  ss, u16,   0,      0, 1) // Spindle status code
 
 // PWM spindle
 VAR(pwm_invert,      pi, b8,    0,      1, 1) // Inverted spindle PWM
@@ -108,7 +109,6 @@ VAR(mb_crc_errs,     cr, u16,   0,      0, 1) // Modbus CRC error counter
 // VFD spindle
 VAR(vfd_max_freq,    vf, u16,   0,      1, 1) // VFD maximum frequency
 VAR(vfd_multi_write, mw, b8,    0,      1, 1) // Use Modbus multi write mode
-VAR(vfd_status,      vs, u16,   0,      0, 1) // VFD status
 VAR(vfd_reg_type,    vt, u8,    VFDREG, 1, 1) // VFD register type
 VAR(vfd_reg_addr,    va, u16,   VFDREG, 1, 1) // VFD register address
 VAR(vfd_reg_val,     vv, u16,   VFDREG, 1, 1) // VFD register value
@@ -121,7 +121,6 @@ VAR(hy_temp,         ht, u16,   0,      0, 0) // Huanyang temperature
 VAR(hy_max_freq,     hx, f32,   0,      0, 1) // Huanyang max freq
 VAR(hy_min_freq,     hm, f32,   0,      0, 1) // Huanyang min freq
 VAR(hy_rated_rpm,    hq, u16,   0,      0, 1) // Huanyang rated RPM
-VAR(hy_status,       hs, u8,    0,      0, 1) // Huanyang status flags
 
 // Machine state
 VAR(id,              id, u16,   0,      1, 1) // Last executed command ID
index 6e01a2bc21048fc3500fad24a7652b6b7c32a3e3..6d0fb74a0f59ac121d8e02c7f60e95339aab8d53 100644 (file)
@@ -381,6 +381,7 @@ void vfd_spindle_set(float power) {
 
 
 float vfd_spindle_get() {return vfd.actual_power;}
+uint16_t vfd_get_status() {return vfd.status;}
 
 
 void vfd_spindle_rtc_callback() {
@@ -395,7 +396,6 @@ uint16_t get_vfd_max_freq() {return vfd.max_freq;}
 void set_vfd_max_freq(uint16_t max_freq) {vfd.max_freq = max_freq;}
 bool get_vfd_multi_write() {return vfd.user_multi_write;}
 void set_vfd_multi_write(bool value) {vfd.user_multi_write = value;}
-uint16_t get_vfd_status() {return vfd.status;}
 uint8_t get_vfd_reg_type(int reg) {return regs[reg].type;}
 
 
index aa6950bde81910685c3cbde824a777409cc1f71f..1bfc3d9655d625abb88e9917d1a518c8630fe0a1 100644 (file)
@@ -34,4 +34,5 @@ void vfd_spindle_init();
 void vfd_spindle_deinit(deinit_cb_t cb);
 void vfd_spindle_set(float power);
 float vfd_spindle_get();
+uint16_t vfd_get_status();
 void vfd_spindle_rtc_callback();
index 1f0864374bc0b783579f747573f65585bafbf096..7e355430025672cef94e53ae17d41aec6074867c 100644 (file)
@@ -273,6 +273,13 @@ script#indicators-template(type="text/x-template")
         td {{state.hc}} A
         th Current
 
+      tr
+        td {{state.ss}}
+        th VFD Status
+        th.separator
+        td
+        th
+
     h2 DB25 breakout box
     img(src="images/DB25_breakout_box.png")
 
index 3ce29b924752982c23a771a431921a97f5f6fefa..640d9700e56840d33a971205692eb4983fefbaec 100644 (file)
@@ -50,7 +50,7 @@ script#tool-view-template(type="text/x-template")
         h2 Modbus Configuration
         .pure-control-group
           label status
-          tt {{modbus_status}}
+          tt {{modbus_status}} ({{state.ss || 0}})
         templated-input(v-for="templ in template['modbus-spindle']",
           :name="$key", :model.sync="config['modbus-spindle'][$key]",
           :template="templ", v-if="show_modbus_field($key)")