diff --git a/components/step_motor_ctrl_module/step_motor_ctrl_module.cpp b/components/step_motor_ctrl_module/step_motor_ctrl_module.cpp index 25d1bf3..2556f57 100644 --- a/components/step_motor_ctrl_module/step_motor_ctrl_module.cpp +++ b/components/step_motor_ctrl_module/step_motor_ctrl_module.cpp @@ -3,8 +3,8 @@ #include #include -#include "sdk\components\zprotocols\zcancmder_v2\api\errorcode.hpp" #include "sdk\components\flash\znvs.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\api\errorcode.hpp" using namespace iflytop; #define TAG "SMCM" void StepMotorCtrlModule::initialize(int moduleid, IStepperMotor* stepM, ZGPIO iotable[], int nio, const char* flashmark, flash_config_t* defaultcfg) { @@ -801,4 +801,11 @@ int32_t StepMotorCtrlModule::_exec_move_to_zero_task() { ZLOGI(TAG, "move_to_zero success"); return 0; +} + +int32_t StepMotorCtrlModule::module_set_cover_reg(int32_t param_id, int32_t param_value) { + +} +int32_t StepMotorCtrlModule::module_get_cover_reg(int32_t param_id, int32_t* param_value) { + } \ No newline at end of file diff --git a/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp b/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp index 6277a56..62d642e 100644 --- a/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp +++ b/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp @@ -80,7 +80,8 @@ class StepMotorCtrlModule : public ZIModuleImplV1, public ZIMotor { static void create_default_cfg(flash_config_t& cfg); static uint32_t get_flash_cfg_size() { return sizeof(flash_config_t); } - virtual bool isbusy(); + virtual bool isbusy(); + virtual int32_t get_last_exec_status() { return m_com_reg.module_last_cmd_exec_status; }; virtual int32_t move_to_logic_point(int32_t logic_point_num, action_cb_status_t status_cb); virtual int32_t set_logic_point(int logic_point_num, int32_t x, int32_t vel, int32_t acc, int32_t dec); @@ -113,6 +114,7 @@ class StepMotorCtrlModule : public ZIModuleImplV1, public ZIMotor { virtual int32_t getid(int32_t* id) override; virtual int32_t module_stop() override; virtual int32_t module_break() override; + virtual int32_t module_get_last_exec_status(int32_t* status) override; virtual int32_t module_get_status(int32_t* status) override; virtual int32_t module_get_error(int32_t* iserror) override; virtual int32_t module_clear_error() override; @@ -130,19 +132,17 @@ class StepMotorCtrlModule : public ZIModuleImplV1, public ZIMotor { /******************************************************************************* * Motor * *******************************************************************************/ - virtual int32_t motor_enable(int32_t enable); - virtual int32_t motor_rotate(int32_t direction, int32_t motor_velocity, int32_t acc); - virtual int32_t motor_move_by(int32_t distance, int32_t motor_velocity, int32_t acc); - virtual int32_t motor_move_to(int32_t position, int32_t motor_velocity, int32_t acc); + virtual int32_t motor_enable(int32_t enable) override; + virtual int32_t motor_rotate(int32_t direction, int32_t motor_velocity, int32_t acc) override; + virtual int32_t motor_move_by(int32_t distance, int32_t motor_velocity, int32_t acc) override; + virtual int32_t motor_move_to(int32_t position, int32_t motor_velocity, int32_t acc) override; - virtual int32_t motor_move_to_zero_backward(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime); - virtual int32_t motor_read_pos(int32_t* pos); + virtual int32_t motor_move_to_zero_backward(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) override; + virtual int32_t motor_read_pos(int32_t* pos) override; - virtual int32_t motor_move_to_zero_backward_and_calculated_shift(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime); + virtual int32_t motor_move_to_zero_backward_and_calculated_shift(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) override; virtual int32_t motor_calculated_pos_by_move_to_zero() override; - virtual int32_t motor_easy_set_current_pos(int32_t pos) { return err::koperation_not_support; } - virtual int32_t motor_easy_rotate(int32_t direction) override; virtual int32_t motor_easy_move_by(int32_t distance) override; virtual int32_t motor_easy_move_to(int32_t position) override; @@ -173,6 +173,7 @@ class StepMotorCtrlModule : public ZIModuleImplV1, public ZIMotor { int32_t _move_by(int32_t dx, action_cb_status_t status_cb); void call_exec_status_cb(int32_t status, action_cb_status_t status_cb); + void set_last_exec_status(int32_t ecode, int32_t val0 = 0, int32_t val1 = 0, int32_t val2 = 0, int32_t val3 = 0, int32_t val4 = 0); private: int32_t _read_io(); @@ -193,6 +194,7 @@ class StepMotorCtrlModule : public ZIModuleImplV1, public ZIMotor { private: int32_t module_xxx_reg(int32_t param_id, bool read, int32_t& val); + int32_t do_action(int32_t actioncode); private: /******************************************************************************* diff --git a/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.cpp b/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.cpp index f742c1e..ffcfbd8 100644 --- a/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.cpp +++ b/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.cpp @@ -2,7 +2,18 @@ using namespace iflytop; -int32_t StepMotorCtrlModuleV2::module_stop() { return 0; } +void StepMotorCtrlModuleV2::initialize(int32_t moduleId, IStepperMotor* motor, ZGPIO* begin_gpio, ZGPIO* end_gpio) { + m_stepM1 = motor; + m_begin_gpio = begin_gpio; + m_end_gpio = end_gpio; +} + +int32_t StepMotorCtrlModuleV2::module_stop() { + + + return 0; + + } int32_t StepMotorCtrlModuleV2::module_break() { return 0; } int32_t StepMotorCtrlModuleV2::module_start() { return 0; } @@ -12,4 +23,6 @@ int32_t StepMotorCtrlModuleV2::motor_easy_move_to(int32_t position) { return 0; int32_t StepMotorCtrlModuleV2::motor_easy_move_to_zero(int32_t direction) { return 0; } int32_t StepMotorCtrlModuleV2::motor_easy_set_current_pos(int32_t pos) { return 0; } int32_t StepMotorCtrlModuleV2::motor_easy_move_to_io(int32_t ioindex, int32_t direction) { return 0; } -int32_t StepMotorCtrlModuleV2::motor_calculated_pos_by_move_to_zero() { return 0; } \ No newline at end of file +int32_t StepMotorCtrlModuleV2::motor_calculated_pos_by_move_to_zero() { return 0; } +int32_t StepMotorCtrlModuleV2::module_set_cover_reg(int32_t param_id, int32_t param_value) { return 0; } +int32_t StepMotorCtrlModuleV2::module_get_cover_reg(int32_t param_id, int32_t* param_value) { return 0; } \ No newline at end of file diff --git a/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.hpp b/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.hpp index 893632f..9f2c6a2 100644 --- a/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.hpp +++ b/components/step_motor_ctrl_module/step_motor_ctrl_module_v2.hpp @@ -9,7 +9,12 @@ class StepMotorCtrlModuleV2 : public ZIModuleImplV2, public ZIMotor { private: IStepperMotor* m_stepM1; + ZGPIO* m_begin_gpio; + ZGPIO* m_end_gpio; + public: + void initialize(int32_t moduleId, IStepperMotor* motor, ZGPIO* begin_gpio, ZGPIO* end_gpio) {} + virtual int32_t module_stop(); virtual int32_t module_break(); virtual int32_t module_start(); @@ -22,5 +27,7 @@ class StepMotorCtrlModuleV2 : public ZIModuleImplV2, public ZIMotor { virtual int32_t motor_easy_move_to_io(int32_t ioindex, int32_t direction); virtual int32_t motor_calculated_pos_by_move_to_zero(); virtual int32_t motor_calculated_pos_by_move_to_zero_read_result(int32_t* result); + virtual int32_t module_set_cover_reg(int32_t param_id, int32_t param_value); + virtual int32_t module_get_cover_reg(int32_t param_id, int32_t* param_value); }; } // namespace iflytop \ No newline at end of file diff --git a/components/tmc/ic/ztmc5130.hpp b/components/tmc/ic/ztmc5130.hpp index f7be04f..c2f390a 100644 --- a/components/tmc/ic/ztmc5130.hpp +++ b/components/tmc/ic/ztmc5130.hpp @@ -88,7 +88,7 @@ class TMC5130 : public IStepperMotor { const uint8_t *m_registerAccessTable; const int32_t *m_defaultRegisterResetState; - int32_t m_scale = 10000; + int32_t m_scale = 51200; int32_t m_scale_deceleration = 1; mres_type_t m_MRES = kmres_256; diff --git a/components/zcancmder/zimodule_impl_v1.hpp b/components/zcancmder/zimodule_impl_v1.hpp index 70193e2..feb0462 100644 --- a/components/zcancmder/zimodule_impl_v1.hpp +++ b/components/zcancmder/zimodule_impl_v1.hpp @@ -24,19 +24,39 @@ using namespace std; } \ } break; +#define PROCESS_ACTION() \ + PROCESS_REG(kreg_module_do_action0, /* */ ACTION_NONE, do_action(val)); \ + PROCESS_REG(kreg_module_action_param1, /* */ REG_GET(m_reg.module_action_param1), REG_SET(m_reg.module_action_param1)); \ + PROCESS_REG(kreg_module_action_param2, /* */ REG_GET(m_reg.module_action_param2), REG_SET(m_reg.module_action_param2)); \ + PROCESS_REG(kreg_module_action_param3, /* */ REG_GET(m_reg.module_action_param3), REG_SET(m_reg.module_action_param3)); \ + PROCESS_REG(kreg_module_action_ack1, /* */ REG_GET(m_reg.module_action_ack1), ACTION_NONE); \ + PROCESS_REG(kreg_module_action_ack2, /* */ REG_GET(m_reg.module_action_ack2), ACTION_NONE); + #define ENABLE_MODULE(name, type, version) \ const char *module_name = #name; \ int32_t module_version = version; \ int32_t module_type = type; -#define MODULE_COMMON_PROCESS_REG_CB() \ - PROCESS_REG(kreg_module_version, /* */ REG_GET(module_version), ACTION_NONE); \ - PROCESS_REG(kreg_module_type, /* */ REG_GET(module_type), ACTION_NONE); \ - PROCESS_REG(kreg_module_status, /* */ module_get_status(&val), ACTION_NONE); \ - PROCESS_REG(kreg_module_errorcode, /* */ REG_GET(m_com_reg.module_errorcode), ACTION_NONE); \ - PROCESS_REG(kreg_module_initflag, /* */ module_get_inited_flag(&val), module_set_inited_flag(val)); \ - PROCESS_REG(kreg_module_errorbitflag0, /* */ REG_GET(m_com_reg.module_errorbitflag0), ACTION_NONE); \ - PROCESS_REG(kreg_module_enableflag, /* */ REG_GET(m_com_reg.module_enable), ACTION_NONE); +#define MODULE_COMMON_PROCESS_REG_CB() \ + PROCESS_REG(kreg_module_version, /* */ REG_GET(module_version), ACTION_NONE); \ + PROCESS_REG(kreg_module_type, /* */ REG_GET(module_type), ACTION_NONE); \ + PROCESS_REG(kreg_module_status, /* */ module_get_status(&val), ACTION_NONE); \ + PROCESS_REG(kreg_module_errorcode, /* */ REG_GET(m_com_reg.module_errorcode), ACTION_NONE); \ + PROCESS_REG(kreg_module_initflag, /* */ module_get_inited_flag(&val), module_set_inited_flag(val)); \ + PROCESS_REG(kreg_module_errorbitflag0, /* */ REG_GET(m_com_reg.module_errorbitflag0), ACTION_NONE); \ + PROCESS_REG(kreg_module_enableflag, /* */ REG_GET(m_com_reg.module_enable), ACTION_NONE); \ + PROCESS_REG(kreg_module_do_action0, /* */ ACTION_NONE, do_action(val)); \ + PROCESS_REG(kreg_module_action_param1, /* */ REG_GET(m_com_reg.module_action_param1), REG_SET(m_com_reg.module_action_param1)); \ + PROCESS_REG(kreg_module_action_param2, /* */ REG_GET(m_com_reg.module_action_param2), REG_SET(m_com_reg.module_action_param2)); \ + PROCESS_REG(kreg_module_action_param3, /* */ REG_GET(m_com_reg.module_action_param3), REG_SET(m_com_reg.module_action_param3)); \ + PROCESS_REG(kreg_module_action_ack1, /* */ REG_GET(m_com_reg.module_action_ack1), ACTION_NONE); \ + PROCESS_REG(kreg_module_action_ack2, /* */ REG_GET(m_com_reg.module_action_ack2), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_status, /* */ REG_GET(m_com_reg.module_last_cmd_exec_status), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val0, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val0), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val1, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val1), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val2, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val2), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val3, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val3), ACTION_NONE); \ + PROCESS_REG(kreg_module_last_cmd_exec_val4, /* */ REG_GET(m_com_reg.module_last_cmd_exec_val4), ACTION_NONE); typedef struct { // int32_t module_version; @@ -44,9 +64,40 @@ typedef struct { int32_t module_errorcode; int32_t module_errorbitflag0; int32_t module_enable; + + int32_t module_last_cmd_exec_status; + int32_t module_last_cmd_exec_val0; + int32_t module_last_cmd_exec_val1; + int32_t module_last_cmd_exec_val2; + int32_t module_last_cmd_exec_val3; + int32_t module_last_cmd_exec_val4; + + int32_t module_do_action0; + int32_t module_action_param1; + int32_t module_action_param2; + int32_t module_action_param3; + int32_t module_action_ack1; + int32_t module_action_ack2; + } module_common_reg_t; -class ZIModuleImplV1 : public ZIModule { +class ModuleCMDExecStatus { + public: + int32_t exec_status = 0; + int32_t exec_val[6] = {0}; + + void set_exec_status(int32_t status, int32_t val0 = 0, int32_t val1 = 0, int32_t val2 = 0, int32_t val3 = 0, int32_t val4 = 0, int32_t val5 = 0) { + exec_status = status; + exec_val[0] = val0; + exec_val[1] = val1; + exec_val[2] = val2; + exec_val[3] = val3; + exec_val[4] = val4; + exec_val[5] = val5; + } +}; + +class ZIModuleImplV1:public ZIModule { int32_t m_inited_flag = 0; protected: @@ -54,20 +105,21 @@ class ZIModuleImplV1 : public ZIModule { public: virtual ~ZIModuleImplV1() {} + + virtual int32_t getid(int32_t *id) = 0; virtual int32_t getid() { int32_t id = 0; getid(&id); return id; }; - virtual int32_t getid(int32_t *id) = 0; - virtual int32_t module_ping() { return 0; }; virtual int32_t module_stop() { return err::koperation_not_support; } virtual int32_t module_break() { return module_stop(); } virtual int32_t module_start() { return err::koperation_not_support; } + virtual int32_t module_get_last_exec_status(int32_t *status) { return err::koperation_not_support; } virtual int32_t module_get_status(int32_t *status) = 0; virtual int32_t module_get_error(int32_t *iserror) { *iserror = m_com_reg.module_errorcode; @@ -103,6 +155,9 @@ class ZIModuleImplV1 : public ZIModule { } virtual int32_t module_get_inited_flag() { return m_inited_flag; } + // kmodule_factory_reset = CMDID(1, 14), // para:{}, ack:{} + // kmodule_flush_cfg = CMDID(1, 15), // para:{}, ack:{} + // kmodule_active_cfg = CMDID(1, 16), // para:{}, ack:{} virtual int32_t module_factory_reset() { return err::koperation_not_support; } virtual int32_t module_flush_cfg() { return err::ksucc; } @@ -132,6 +187,17 @@ class ZIModuleImplV1 : public ZIModule { return 0; } + virtual int32_t _module_set_exec_status(int32_t status, int32_t val0 = 0, int32_t val1 = 0, int32_t val2 = 0, int32_t val3 = 0, int32_t val4 = 0) { + m_com_reg.module_last_cmd_exec_status = status; + m_com_reg.module_last_cmd_exec_val0 = val0; + m_com_reg.module_last_cmd_exec_val1 = val1; + m_com_reg.module_last_cmd_exec_val2 = val2; + m_com_reg.module_last_cmd_exec_val3 = val3; + m_com_reg.module_last_cmd_exec_val4 = val4; + return 0; + } + public: + virtual int32_t do_action(int32_t actioncode) { return err::kmodule_not_support_action; }; }; } // namespace iflytop diff --git a/components/zprotocols/zcancmder_v2/api/reg_index.hpp b/components/zprotocols/zcancmder_v2/api/reg_index.hpp index da11ca9..f463eab 100644 --- a/components/zprotocols/zcancmder_v2/api/reg_index.hpp +++ b/components/zprotocols/zcancmder_v2/api/reg_index.hpp @@ -9,19 +9,55 @@ typedef enum { /******************************************************************************* * 模块通用配置和状态 * *******************************************************************************/ - kreg_module_version = REG_INDEX(0, 0, 0), // 模块版本 - kreg_module_type = REG_INDEX(0, 0, 1), // 模块类型 - kreg_module_status = REG_INDEX(0, 0, 2), // 0idle,1busy,2error - kreg_module_errorcode = REG_INDEX(0, 0, 3), // inited_flag - kreg_module_initflag = REG_INDEX(0, 0, 4), // inited_flag - kreg_module_enableflag = REG_INDEX(0, 0, 5), // - kreg_module_errorbitflag0 = REG_INDEX(0, 0, 6), // 模块异常标志,bit,每个模块自定义 - kreg_module_errorbitflag1 = REG_INDEX(0, 0, 7), // - kreg_module_input_state = REG_INDEX(0, 0, 8), // - kreg_module_output_state = REG_INDEX(0, 0, 9), // - kreg_module_raw_sector_size = REG_INDEX(0, 0, 10), // sector_size - kreg_module_raw_sector_num = REG_INDEX(0, 0, 11), // - kreg_module_is_online = REG_INDEX(0, 0, 12), // + kreg_module_version = REG_INDEX(0, 0, 0), // 模块版本 + kreg_module_type = REG_INDEX(0, 0, 1), // 模块类型 + kreg_module_status = REG_INDEX(0, 0, 2), // 0idle,1busy,2error + kreg_module_errorcode = REG_INDEX(0, 0, 3), // inited_flag + kreg_module_initflag = REG_INDEX(0, 0, 4), // inited_flag + kreg_module_enableflag = REG_INDEX(0, 0, 5), // 0idle,1busy,2error + kreg_module_errorbitflag0 = REG_INDEX(0, 0, 6), // 模块异常标志,bit,每个模块自定义 + kreg_module_errorbitflag1 = REG_INDEX(0, 0, 7), // + kreg_module_input_state = REG_INDEX(0, 0, 8), // + kreg_module_output_state = REG_INDEX(0, 0, 9), // + kreg_module_raw_sector_size = REG_INDEX(0, 0, 10), // sector_size + kreg_module_raw_sector_num = REG_INDEX(0, 0, 11), // + kreg_module_is_online = REG_INDEX(0, 0, 12), // + kreg_module_last_cmd_exec_status = REG_INDEX(0, 0, 20), // 上一条指令执行的状态 + kreg_module_last_cmd_exec_val0 = REG_INDEX(0, 0, 21), // 上一条指令执行的结果0 + kreg_module_last_cmd_exec_val1 = REG_INDEX(0, 0, 22), // 上一条指令执行的结果1 + kreg_module_last_cmd_exec_val2 = REG_INDEX(0, 0, 23), // 上一条指令执行的结果2 + kreg_module_last_cmd_exec_val3 = REG_INDEX(0, 0, 24), // 上一条指令执行的结果3 + kreg_module_last_cmd_exec_val4 = REG_INDEX(0, 0, 25), // 上一条指令执行的结果4 + kreg_module_last_cmd_exec_val5 = REG_INDEX(0, 0, 26), // 上一条指令执行的结果5 + kreg_module_private0 = REG_INDEX(0, 0, 30), // 模块私有状态0 + kreg_module_private1 = REG_INDEX(0, 0, 31), // 模块私有状态1 + kreg_module_private2 = REG_INDEX(0, 0, 32), // 模块私有状态2 + kreg_module_private3 = REG_INDEX(0, 0, 33), // 模块私有状态3 + kreg_module_private4 = REG_INDEX(0, 0, 34), // 模块私有状态4 + kreg_module_private5 = REG_INDEX(0, 0, 35), // 模块私有状态5 + kreg_module_private6 = REG_INDEX(0, 0, 36), // 模块私有状态6 + kreg_module_private7 = REG_INDEX(0, 0, 37), // 模块私有状态7 + kreg_module_private8 = REG_INDEX(0, 0, 38), // 模块私有状态8 + kreg_module_private9 = REG_INDEX(0, 0, 39), // 模块私有状态9 + kreg_module_do_action0 = REG_INDEX(0, 0, 40), // 方法0 + kreg_module_action_param1 = REG_INDEX(0, 0, 41), // 方法1 + kreg_module_action_param2 = REG_INDEX(0, 0, 42), // 方法2 + kreg_module_action_param3 = REG_INDEX(0, 0, 43), // 方法3 + kreg_module_action_param4 = REG_INDEX(0, 0, 44), // 方法4 + kreg_module_action_param5 = REG_INDEX(0, 0, 45), // 方法5 + kreg_module_action_param6 = REG_INDEX(0, 0, 46), // 方法6 + kreg_module_action_param7 = REG_INDEX(0, 0, 47), // 方法7 + kreg_module_action_param8 = REG_INDEX(0, 0, 48), // 方法8 + kreg_module_action_param9 = REG_INDEX(0, 0, 49), // 方法9 + kreg_module_action_ack1 = REG_INDEX(0, 0, 51), // ACK1 + kreg_module_action_ack2 = REG_INDEX(0, 0, 52), // ACK2 + kreg_module_action_ack3 = REG_INDEX(0, 0, 53), // ACK3 + kreg_module_action_ack4 = REG_INDEX(0, 0, 54), // ACK4 + kreg_module_action_ack5 = REG_INDEX(0, 0, 55), // ACK5 + kreg_module_action_ack6 = REG_INDEX(0, 0, 56), // ACK6 + kreg_module_action_ack7 = REG_INDEX(0, 0, 57), // ACK7 + kreg_module_action_ack8 = REG_INDEX(0, 0, 58), // ACK8 + kreg_module_action_ack9 = REG_INDEX(0, 0, 59), // ACK9 /******************************************************************************* * SENSOR * @@ -122,13 +158,16 @@ typedef enum { kreg_pwm7_freq = REG_INDEX(3, 70, 2), // /******************************************************************************* + * 机械人通用配置 * + *******************************************************************************/ + + /******************************************************************************* * MOTOR_DEFAULT * *******************************************************************************/ - kreg_robot_move = REG_INDEX(10, 0, 0), // 机器人X是否在移动 - kreg_robot_pos = REG_INDEX(10, 0, 1), // 机器人x坐标 - kreg_robot_velocity = REG_INDEX(10, 0, 2), // 机器人x速度 - kreg_robot_torque = REG_INDEX(10, 0, 3), // 机器人x电流 - kreg_robot_last_cmd_dpos = REG_INDEX(10, 0, 4), // 机器人x上一条指令的相对位移 + kreg_robot_move = REG_INDEX(10, 0, 0), // 机器人X是否在移动 + kreg_robot_pos = REG_INDEX(10, 0, 1), // 机器人x坐标 + kreg_robot_velocity = REG_INDEX(10, 0, 2), // 机器人x速度 + kreg_robot_torque = REG_INDEX(10, 0, 3), // 机器人x电流 kreg_motor_shift = REG_INDEX(10, 50, 0), // x偏移 kreg_motor_shaft = REG_INDEX(10, 50, 1), // x轴是否反转 @@ -242,6 +281,99 @@ typedef enum { kreg_xyrobot_robot_type = REG_INDEX(20, 50, 0), // 机器人类型 0:hbot 1:corexy + /******************************************************************************* + * PID控制器(3000->4000) * + *******************************************************************************/ + kreg_pid_target = REG_INDEX(30, 0, 0), // 目标数值 + kreg_pid_nowoutput = REG_INDEX(30, 0, 1), // 当前输出 + kreg_pid_feedbackval = REG_INDEX(30, 0, 2), // 当前输出 + kreg_pid_kp = REG_INDEX(30, 50, 0), // kp + kreg_pid_ki = REG_INDEX(30, 50, 1), // ki + kreg_pid_kd = REG_INDEX(30, 50, 2), // kd + kreg_pid_max_output = REG_INDEX(30, 50, 3), // 最大输出 + kreg_pid_min_output = REG_INDEX(30, 50, 4), // 最小输出 + kreg_pid_max_integral = REG_INDEX(30, 50, 5), // 最大积分 + kreg_pid_min_integral = REG_INDEX(30, 50, 6), // 最小积分 + kreg_error_limit = REG_INDEX(30, 50, 7), // 误差限制 + kreg_compute_interval = REG_INDEX(30, 50, 8), // 计算间隔 + + /******************************************************************************* + * 风扇控制 * + *******************************************************************************/ + kreg_fan0_ctrl_speed_level = REG_INDEX(31, 0, 0), // 风扇转速0,1,2,3 + kreg_fan1_ctrl_speed_level = REG_INDEX(31, 0, 1), // 风扇转速0,1,2,3 + kreg_fan2_ctrl_speed_level = REG_INDEX(31, 0, 2), // 风扇转速0,1,2,3 + kreg_fan3_ctrl_speed_level = REG_INDEX(31, 0, 3), // 风扇转速0,1,2,3 + kreg_fan4_ctrl_speed_level = REG_INDEX(31, 0, 4), // 风扇转速0,1,2,3 + + kreg_fan0_speed_level = REG_INDEX(31, 10, 0), // 风扇实时转速0,1,2,3 + kreg_fan1_speed_level = REG_INDEX(31, 10, 1), // 风扇实时转速0,1,2,3 + kreg_fan2_speed_level = REG_INDEX(31, 10, 2), // 风扇实时转速0,1,2,3 + kreg_fan3_speed_level = REG_INDEX(31, 10, 3), // 风扇实时转速0,1,2,3 + kreg_fan4_speed_level = REG_INDEX(31, 10, 4), // 风扇实时转速0,1,2,3 + + kreg_pwm_pump0_ctrl_speed_level = REG_INDEX(32, 0, 0), // PWM水泵0,1,2,3 + kreg_pwm_pump1_ctrl_speed_level = REG_INDEX(32, 0, 1), // PWM水泵0,1,2,3 + kreg_pwm_pump2_ctrl_speed_level = REG_INDEX(32, 0, 2), // PWM水泵0,1,2,3 + kreg_pwm_pump3_ctrl_speed_level = REG_INDEX(32, 0, 3), // PWM水泵0,1,2,3 + kreg_pwm_pump4_ctrl_speed_level = REG_INDEX(32, 0, 4), // PWM水泵0,1,2,3 + + kreg_pwm_pump0_speed_level = REG_INDEX(32, 10, 0), // PWM水泵0,1,2,3 + kreg_pwm_pump1_speed_level = REG_INDEX(32, 10, 1), // PWM水泵0,1,2,3 + kreg_pwm_pump2_speed_level = REG_INDEX(32, 10, 2), // PWM水泵0,1,2,3 + kreg_pwm_pump3_speed_level = REG_INDEX(32, 10, 3), // PWM水泵0,1,2,3 + kreg_pwm_pump4_speed_level = REG_INDEX(32, 10, 4), // PWM水泵0,1,2,3 + + /******************************************************************************* + * 移液枪状态 * + *******************************************************************************/ + kreg_pipette_pos_ul = REG_INDEX(40, 0, 0), // 移液枪位置 + kreg_pipette_capactitance_val = REG_INDEX(40, 0, 1), // 移液枪电容值 + kreg_pipette_tip_state = REG_INDEX(40, 0, 2), // 移动液枪tip状态 + kreg_pipette_limit_ul = REG_INDEX(40, 50, 0), // 移液枪ul限制 + + /******************************************************************************* + * smartADC * + *******************************************************************************/ + kreg_self_reflecting_laser_sensor_transmitting_power = REG_INDEX(41, 0, 0), // 发射功率 + kreg_self_reflecting_laser_sensor_receiving_tube_gain = REG_INDEX(41, 0, 1), // 接收管放大倍数 + kreg_self_reflecting_laser_sensor_sample_interval_ms = REG_INDEX(41, 0, 2), // 采样率 + kreg_self_reflecting_laser_sensor_num_samples = REG_INDEX(41, 0, 3), // 采样点数 + + /******************************************************************************* + * smartADC * + *******************************************************************************/ + // scan action + kreg_boditech_optical_scan_type = REG_INDEX(42, 0, 0), // 0 t光学,1 f光学 + kreg_boditech_optical_scan_start_pos = REG_INDEX(42, 0, 1), + kreg_boditech_optical_scan_direction = REG_INDEX(42, 0, 2), + kreg_boditech_optical_scan_step_interval = REG_INDEX(42, 0, 3), + kreg_boditech_optical_scan_pointnum = REG_INDEX(42, 0, 4), + kreg_boditech_optical_channel_select_num = REG_INDEX(42, 0, 5), + kreg_boditech_optical_laster_gain = REG_INDEX(42, 0, 6), + kreg_boditech_optical_scan_gain = REG_INDEX(42, 0, 7), + kreg_boditech_optical_trf_uvled_on_duration_us = REG_INDEX(42, 0, 8), + kreg_boditech_optical_trf_uvled_off_duration_us = REG_INDEX(42, 0, 9), + kreg_boditech_optical_trf_scan_delay_us = REG_INDEX(42, 0, 10), + kreg_boditech_optical_trf_scan_duration_us = REG_INDEX(42, 0, 11), + kreg_boditech_optical_scan_gain_adjust_suggestion = REG_INDEX(42, 0, 12), + kreg_boditech_optical_adc_result_overflow = REG_INDEX(42, 0, 13), + kreg_boditech_optical_laster_intensity = REG_INDEX(42, 0, 14), + + // + kreg_laster_scaner_scan_type = REG_INDEX(43, 0, 0), // 0 t光学,1 f光学 + + kreg_laster_scaner_scan_start_pos = REG_INDEX(43, 0, 1), + kreg_laster_scaner_scan_direction = REG_INDEX(43, 0, 2), + kreg_laster_scaner_scan_step_interval = REG_INDEX(43, 0, 3), + kreg_laster_scaner_scan_pointnum = REG_INDEX(43, 0, 4), + kreg_laster_scaner_laster_gain = REG_INDEX(43, 0, 5), + kreg_laster_scaner_scan_gain = REG_INDEX(43, 0, 6), + + kreg_laster_scaner_scan_gain_adjust_suggestion = REG_INDEX(43, 0, 12), + kreg_laster_scaner_adc_result_overflow = REG_INDEX(43, 0, 13), + kreg_laster_scaner_laster_intensity = REG_INDEX(43, 0, 14), + } reg_index_t; } // namespace iflytop diff --git a/components/zprotocols/zcancmder_v2/api/zi_module.hpp b/components/zprotocols/zcancmder_v2/api/zi_module.hpp index 43aac96..1be69b5 100644 --- a/components/zprotocols/zcancmder_v2/api/zi_module.hpp +++ b/components/zprotocols/zcancmder_v2/api/zi_module.hpp @@ -33,6 +33,9 @@ class ZIModule { virtual int32_t module_flush_cfg() = 0; virtual int32_t module_active_cfg() = 0; + virtual int32_t module_set_cover_reg(int32_t param_id, int32_t param_value) { return err::koperation_not_support; } + virtual int32_t module_get_cover_reg(int32_t param_id, int32_t *param_value) { return err::koperation_not_support; } + public: }; } // namespace iflytop diff --git a/components/zprotocols/zcancmder_v2/api/zi_motor.hpp b/components/zprotocols/zcancmder_v2/api/zi_motor.hpp index 06ad831..e8a9a39 100644 --- a/components/zprotocols/zcancmder_v2/api/zi_motor.hpp +++ b/components/zprotocols/zcancmder_v2/api/zi_motor.hpp @@ -18,5 +18,8 @@ class ZIMotor { virtual int32_t motor_easy_move_to_io(int32_t ioindex, int32_t direction) { return err::koperation_not_support; } virtual int32_t motor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; } virtual int32_t motor_calculated_pos_by_move_to_zero_read_result(int32_t* result) { return err::koperation_not_support; } + + public: + }; } // namespace iflytop \ No newline at end of file diff --git a/components/zprotocols/zcancmder_v2/cmdid.hpp b/components/zprotocols/zcancmder_v2/cmdid.hpp index eee8c9f..d66da8b 100644 --- a/components/zprotocols/zcancmder_v2/cmdid.hpp +++ b/components/zprotocols/zcancmder_v2/cmdid.hpp @@ -4,53 +4,54 @@ namespace iflytop { namespace zcr { typedef enum { - kboard_reset = CMDID(0, 0), // para:{}, ack:{} - kevent_bus_reg_change_report = CMDID(0, 100), // para:{}, ack:{} + kboard_reset = CMDID(0, 0), + kevent_bus_reg_change_report = CMDID(0, 100), /******************************************************************************* * MODULE_PUBLIC_CMD * *******************************************************************************/ - kmodule_ping = CMDID(1, 0), // para:{}, ack:{} - kmodule_stop = CMDID(1, 1), // para:{}, ack:{} - kmodule_break = CMDID(1, 2), // para:{}, ack:{} - kmodule_get_status = CMDID(1, 4), // para:{}, ack:{4} - kmodule_set_reg = CMDID(1, 5), // para:{4,4}, ack:{} - kmodule_get_reg = CMDID(1, 6), // para:{4}, ack:{4}I - kmodule_readio = CMDID(1, 7), // para:{}, ack:{4} - kmodule_writeio = CMDID(1, 8), // para:{4}, ack:{} - kmodule_read_adc = CMDID(1, 9), // para:{4}, ack:{4} - kmodule_get_error = CMDID(1, 10), // para:{}, ack:{1} - kmodule_clear_error = CMDID(1, 11), // para:{}, ack:{} - kmodule_set_inited_flag = CMDID(1, 12), // para:{4}, ack:{} - kmodule_get_inited_flag = CMDID(1, 13), // para:{}, ack:{4} - kmodule_factory_reset = CMDID(1, 14), // para:{}, ack:{} - kmodule_flush_cfg = CMDID(1, 15), // para:{}, ack:{} - kmodule_active_cfg = CMDID(1, 16), // para:{}, ack:{} - kmodule_read_raw = CMDID(1, 19), // para:{4,4}, ack:{4} - kmodule_enable = CMDID(1, 20), // para:{4}, ack:{} - kmodule_start = CMDID(1, 21), // para:{4}, ack:{} - + kmodule_ping = CMDID(1, 0), + kmodule_stop = CMDID(1, 1), + kmodule_break = CMDID(1, 2), + kmodule_get_status = CMDID(1, 4), + kmodule_set_reg = CMDID(1, 5), + kmodule_get_reg = CMDID(1, 6), + kmodule_readio = CMDID(1, 7), + kmodule_writeio = CMDID(1, 8), + kmodule_read_adc = CMDID(1, 9), + kmodule_get_error = CMDID(1, 10), + kmodule_clear_error = CMDID(1, 11), + kmodule_set_inited_flag = CMDID(1, 12), + kmodule_get_inited_flag = CMDID(1, 13), + kmodule_factory_reset = CMDID(1, 14), + kmodule_flush_cfg = CMDID(1, 15), + kmodule_active_cfg = CMDID(1, 16), + kmodule_read_raw = CMDID(1, 19), + kmodule_enable = CMDID(1, 20), + kmodule_start = CMDID(1, 21), + kmodule_set_cover_reg = CMDID(2, 22), + kmodule_get_cover_reg = CMDID(2, 23), /******************************************************************************* * MOTOR_CTRL * *******************************************************************************/ - kmotor_calculated_pos_by_move_to_zero = CMDID(2, 16), // para:{}, ack:{} - kmotor_easy_rotate = CMDID(2, 17), // para:{4}, ack:{} - kmotor_easy_move_by = CMDID(2, 18), // para:{4}, ack:{} - kmotor_easy_move_to = CMDID(2, 19), // para:{4}, ack:{} - kmotor_easy_move_to_zero = CMDID(2, 20), // para:{1}, ack:{} - kmotor_easy_set_current_pos = CMDID(2, 21), // para:{4}, ack:{} - kmotor_easy_move_to_io = CMDID(2, 22), // para:{4,4}, ack:{} - kmotor_calculated_pos_by_move_to_zero_read_result = CMDID(2, 23), // para:{}, ack:{4} + kmotor_calculated_pos_by_move_to_zero = CMDID(2, 16), + kmotor_easy_rotate = CMDID(2, 17), + kmotor_easy_move_by = CMDID(2, 18), + kmotor_easy_move_to = CMDID(2, 19), + kmotor_easy_move_to_zero = CMDID(2, 20), + kmotor_easy_set_current_pos = CMDID(2, 21), + kmotor_easy_move_to_io = CMDID(2, 22), + kmotor_calculated_pos_by_move_to_zero_read_result = CMDID(2, 23), /******************************************************************************* * XYMOTOR * *******************************************************************************/ - kxymotor_enable = CMDID(3, 1), // para:{1}, ack:{} - kxymotor_move_by = CMDID(3, 2), // para:{4,4,4}, ack:{} - kxymotor_move_to = CMDID(3, 3), // para:{4,4,4}, ack:{} - kxymotor_move_to_zero = CMDID(3, 4), // para:{}, ack:{} - kxymotor_move_to_zero_and_calculated_shift = CMDID(3, 5), // para:{4,4,4,4}, ack:{} //int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime - kxymotor_read_pos = CMDID(3, 6), // para:{}, ack:{4,4} - kxymotor_calculated_pos_by_move_to_zero = CMDID(3, 7), // para:{}, ack:{} + kxymotor_enable = CMDID(3, 1), + kxymotor_move_by = CMDID(3, 2), + kxymotor_move_to = CMDID(3, 3), + kxymotor_move_to_zero = CMDID(3, 4), + kxymotor_move_to_zero_and_calculated_shift = CMDID(3, 5), + kxymotor_read_pos = CMDID(3, 6), + kxymotor_calculated_pos_by_move_to_zero = CMDID(3, 7), } cmdid_t; diff --git a/components/zprotocols/zcancmder_v2/protocol_parser.cpp b/components/zprotocols/zcancmder_v2/protocol_parser.cpp index 5ddf3d8..95758f6 100644 --- a/components/zprotocols/zcancmder_v2/protocol_parser.cpp +++ b/components/zprotocols/zcancmder_v2/protocol_parser.cpp @@ -129,6 +129,8 @@ void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, in PROCESS_BUF_REQUEST_1(kmodule_read_raw, ZIModule, module_read_raw); PROCESS_PACKET_10(kmodule_enable, ZIModule, module_enable); PROCESS_PACKET_00(kmodule_start, ZIModule, module_start); + PROCESS_PACKET_20(kmodule_set_cover_reg, ZIModule, module_set_cover_reg); + PROCESS_PACKET_11(kmodule_get_cover_reg, ZIModule, module_get_cover_reg); PROCESS_PACKET_00(kmotor_calculated_pos_by_move_to_zero, ZIMotor, motor_calculated_pos_by_move_to_zero); PROCESS_PACKET_10(kmotor_easy_rotate, ZIMotor, motor_easy_rotate); @@ -139,7 +141,6 @@ void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, in PROCESS_PACKET_20(kmotor_easy_move_to_io, ZIMotor, motor_easy_move_to_io); PROCESS_PACKET_01(kmotor_calculated_pos_by_move_to_zero_read_result, ZIMotor, motor_calculated_pos_by_move_to_zero_read_result); - /******************************************************************************* * xymotor * *******************************************************************************/ @@ -150,5 +151,4 @@ void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, in PROCESS_PACKET_00(kxymotor_move_to_zero_and_calculated_shift, ZIXYMotor, xymotor_move_to_zero_and_calculated_shift); PROCESS_PACKET_02(kxymotor_read_pos, ZIXYMotor, xymotor_read_pos); PROCESS_PACKET_00(kxymotor_calculated_pos_by_move_to_zero, ZIXYMotor, xymotor_calculated_pos_by_move_to_zero); - } \ No newline at end of file