From 183dd634eed673741826f01cfe1147379543cf29 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 12 Oct 2023 19:53:32 +0800 Subject: [PATCH] update protocol --- api/i_step_motor_ctrl_module.hpp | 37 +++++++++++++++++++++++++++++-------- api/i_xyrobot_ctrl_module.hpp | 2 +- zcancmder_protocol.hpp | 19 +++++++++++++++---- 3 files changed, 45 insertions(+), 13 deletions(-) diff --git a/api/i_step_motor_ctrl_module.hpp b/api/i_step_motor_ctrl_module.hpp index 39753b3..899b558 100644 --- a/api/i_step_motor_ctrl_module.hpp +++ b/api/i_step_motor_ctrl_module.hpp @@ -34,6 +34,7 @@ class I_StepMotorCtrlModule { uint8_t status; uint8_t io_state; // x_zero_io x_end_io int32_t x; + int32_t last_exec_status; } detailed_status_t; /******************************************************************************* @@ -60,6 +61,19 @@ class I_StepMotorCtrlModule { s32 run_to_zero_dec; } base_param_t; + typedef struct { + u8 index; + s32 acc; + s32 dec; + s32 velocity; + s32 x; + } logic_point_t; + + typedef struct { + base_param_t base_param; + logic_point_t logic_point[5]; + } flash_config_t; + #pragma pack() public: @@ -68,8 +82,8 @@ class I_StepMotorCtrlModule { virtual int32_t move_to(int32_t x, action_cb_status_t status_cb) = 0; virtual int32_t move_by(int32_t dx, action_cb_status_t status_cb) = 0; - virtual int32_t move_to(int32_t velocity, int32_t x, action_cb_status_t status_cb) = 0; - virtual int32_t move_by(int32_t velocity, int32_t dx, action_cb_status_t status_cb) = 0; + virtual int32_t move_to(int32_t x, int32_t velocity, action_cb_status_t status_cb) = 0; + virtual int32_t move_by(int32_t dx, int32_t velocity, action_cb_status_t status_cb) = 0; virtual int32_t move_to_zero(action_cb_status_t status_cb) = 0; virtual int32_t move_to_zero_with_calibrate(int32_t x, action_cb_status_t status_cb) = 0; @@ -78,12 +92,19 @@ class I_StepMotorCtrlModule { virtual int32_t stop(uint8_t stopType) = 0; virtual int32_t force_change_current_pos(int32_t x) = 0; - virtual int32_t move_to_block(int32_t tox) = 0; - virtual int32_t move_by_block(int32_t dx) = 0; - virtual int32_t move_to_block(int32_t velocity, int32_t tox) = 0; - virtual int32_t move_by_block(int32_t velocity, int32_t dx) = 0; - virtual int32_t move_to_zero_block() = 0; - virtual int32_t move_to_zero_with_calibrate_block(int32_t x) = 0; + virtual int32_t move_to_logic_point(int32_t logic_point_num, action_cb_status_t status_cb) = 0; + virtual int32_t set_logic_point(int logic_point_num, int32_t x, int32_t vel, s32 acc, s32 dec) = 0; + virtual int32_t get_logic_point(int logic_point_num, logic_point_t& logic_point) = 0; + + virtual int32_t flush() = 0; + virtual int32_t factory_reset() = 0; + + virtual int32_t move_to_block(int32_t tox, int overtime = 0) = 0; + virtual int32_t move_by_block(int32_t dx, int overtime = 0) = 0; + virtual int32_t move_to_block(int32_t tox, int32_t velocity, int overtime = 0) = 0; + virtual int32_t move_by_block(int32_t dx, int32_t velocity, int overtime = 0) = 0; + virtual int32_t move_to_zero_block(int overtime = 0) = 0; + virtual int32_t move_to_zero_with_calibrate_block(int32_t x, int overtime = 0) = 0; virtual int32_t read_version(version_t& version) = 0; virtual int32_t read_status(status_t& status) = 0; diff --git a/api/i_xyrobot_ctrl_module.hpp b/api/i_xyrobot_ctrl_module.hpp index 9a587a5..71e6395 100644 --- a/api/i_xyrobot_ctrl_module.hpp +++ b/api/i_xyrobot_ctrl_module.hpp @@ -26,9 +26,9 @@ class I_XYRobotCtrlModule { typedef struct { uint8_t status; + u8 iostate; // x_zero_io y_zero_io int32_t x; int32_t y; - u8 iostate; // x_zero_io y_zero_io } status_t; typedef struct { diff --git a/zcancmder_protocol.hpp b/zcancmder_protocol.hpp index 2beae51..b5ecbe7 100644 --- a/zcancmder_protocol.hpp +++ b/zcancmder_protocol.hpp @@ -60,13 +60,18 @@ typedef enum { kcmd_step_motor_ctrl_move_by = CMDID(1007, 5), // 相对移动 kcmd_step_motor_ctrl_force_change_current_pos = CMDID(1007, 6), // 相对移动 kcmd_step_motor_ctrl_rotate = CMDID(1007, 7), // 相对移动 + kcmd_step_motor_ctrl_move_to_logic_point = CMDID(1007, 8), // 移动到逻辑点 kcmd_step_motor_ctrl_read_version = CMDID(1007, 50), // 读取模块型号版本信息 kcmd_step_motor_ctrl_read_status = CMDID(1007, 51), // 读取模块精简状态信息 kcmd_step_motor_ctrl_read_detailed_status = CMDID(1007, 52), // 读取模块详细状态信息 - kcmd_step_motor_ctrl_set_base_param = CMDID(1007, 100), // 设置运行参数 - kcmd_step_motor_ctrl_get_base_param = CMDID(1007, 101), // 设置运行参数 + kcmd_step_motor_ctrl_set_base_param = CMDID(1007, 100), // 设置运行参数 + kcmd_step_motor_ctrl_get_base_param = CMDID(1007, 101), // 设置运行参数 + kcmd_step_motor_ctrl_set_logic_point = CMDID(1007, 102), // 设置逻辑点 + kcmd_step_motor_ctrl_get_logic_point = CMDID(1007, 103), // 读取逻辑点 + kcmd_step_motor_ctrl_flush = CMDID(1007, 110), // 存储参数到flash中 + kcmd_step_motor_ctrl_factory_reset = CMDID(1007, 111), // 恢复出厂设置 /******************************************************************************* * |Module_1008:舵机 * @@ -228,18 +233,24 @@ ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_factory_reset, CMD(u16 id;), ACK(u8 pad;)); ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_enable, CMD(u16 id; u8 enable;), ACK(u8 pad;)); ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_stop, CMD(u16 id; u8 stop_type;), ACK(u8 pad;)); ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to_zero, CMD(u16 id;), ACK(u8 pad;), REPORT(int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to_zero_with_calibrate, CMD(u16 id; s32 nowx; s32 nowy;), ACK(u8 pad;), REPORT(int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to_zero_with_calibrate, CMD(u16 id; s32 x;), ACK(u8 pad;), REPORT(int32_t exec_status;)); ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to, CMD(u16 id; s32 x; s32 speed;), ACK(u8 pad;), REPORT(int32_t exec_status;)); ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_by, CMD(u16 id; s32 dx; s32 speed;), ACK(u8 pad;), REPORT(int32_t exec_status;)); ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_force_change_current_pos, CMD(u16 id; s32 x;), ACK(u8 pad;)); ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_rotate, CMD(u16 id; s32 speed; s32 run_time;), ACK(u8 pad;), REPORT(int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to_logic_point, CMD(u16 id; u8 logic_point_num;), ACK(u8 pad;), REPORT(int32_t exec_status;)); // READ ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_version, CMD(u16 id;), ACK(I_StepMotorCtrlModule::version_t ack;)); ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_status, CMD(u16 id;), ACK(I_StepMotorCtrlModule::status_t ack;)); ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_detailed_status, CMD(u16 id;), ACK(I_StepMotorCtrlModule::detailed_status_t ack;)); // SET -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_set_base_param, CMD(u16 id; u8 opt_type; I_StepMotorCtrlModule::base_param_t param;), ACK(u8 pad;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_set_base_param, CMD(u16 id; I_StepMotorCtrlModule::base_param_t param;), ACK(u8 pad;)); ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_get_base_param, CMD(u16 id;), ACK(I_StepMotorCtrlModule::base_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_set_logic_point, CMD(u16 id; u8 index; s32 acc; s32 dec; s32 velocity; s32 x;), ACK(u8 pad;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_get_logic_point, CMD(u16 id; u8 logic_point_num;), ACK(I_StepMotorCtrlModule::logic_point_t ack;)); + +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_flush, CMD(u16 id;), ACK(u8 pad;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_factory_reset, CMD(u16 id;), ACK(u8 pad;)); /******************************************************************************* * |Module_1008:舵机 *