From 4ef58baa5a51b685decadd29b739496ee05fc9a2 Mon Sep 17 00:00:00 2001 From: Joseph Coffland Date: Tue, 24 Sep 2019 23:27:22 -0700 Subject: [PATCH] Report spindle status codes from Modbus. --- CHANGELOG.md | 2 ++ src/avr/src/huanyang.c | 4 ++-- src/avr/src/huanyang.h | 1 + src/avr/src/spindle.c | 10 ++++++++++ src/avr/src/vars.def | 3 +-- src/avr/src/vfd_spindle.c | 2 +- src/avr/src/vfd_spindle.h | 1 + src/pug/templates/indicators.pug | 7 +++++++ src/pug/templates/tool-view.pug | 2 +- 9 files changed, 26 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ba506f..475bf8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. diff --git a/src/avr/src/huanyang.c b/src/avr/src/huanyang.c index 84597b8..8986702 100644 --- a/src/avr/src/huanyang.c +++ b/src/avr/src/huanyang.c @@ -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;} diff --git a/src/avr/src/huanyang.h b/src/avr/src/huanyang.h index b482404..ccad449 100644 --- a/src/avr/src/huanyang.h +++ b/src/avr/src/huanyang.h @@ -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 diff --git a/src/avr/src/spindle.c b/src/avr/src/spindle.c index 7e2a4d0..6b2566d 100644 --- a/src/avr/src/spindle.c +++ b/src/avr/src/spindle.c @@ -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;} diff --git a/src/avr/src/vars.def b/src/avr/src/vars.def index 2308df0..b9fdb57 100644 --- a/src/avr/src/vars.def +++ b/src/avr/src/vars.def @@ -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 diff --git a/src/avr/src/vfd_spindle.c b/src/avr/src/vfd_spindle.c index 6e01a2b..6d0fb74 100644 --- a/src/avr/src/vfd_spindle.c +++ b/src/avr/src/vfd_spindle.c @@ -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;} diff --git a/src/avr/src/vfd_spindle.h b/src/avr/src/vfd_spindle.h index aa6950b..1bfc3d9 100644 --- a/src/avr/src/vfd_spindle.h +++ b/src/avr/src/vfd_spindle.h @@ -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(); diff --git a/src/pug/templates/indicators.pug b/src/pug/templates/indicators.pug index 1f08643..7e35543 100644 --- a/src/pug/templates/indicators.pug +++ b/src/pug/templates/indicators.pug @@ -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") diff --git a/src/pug/templates/tool-view.pug b/src/pug/templates/tool-view.pug index 3ce29b9..640d970 100644 --- a/src/pug/templates/tool-view.pug +++ b/src/pug/templates/tool-view.pug @@ -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)") -- 2.27.0