diff --git a/api/i_xyrobot_ctrl_module.hpp b/api/i_xyrobot_ctrl_module.hpp index 52cd4ef..9a587a5 100644 --- a/api/i_xyrobot_ctrl_module.hpp +++ b/api/i_xyrobot_ctrl_module.hpp @@ -73,11 +73,39 @@ class I_XYRobotCtrlModule { uint8_t pad; } warning_limit_param_t; + typedef struct { + s32 robot_type; + s32 x_shaft; + s32 y_shaft; + s32 ihold; + s32 irun; + s32 iholddelay; + s32 distance_scale; // 0.001 + s32 shift_x; + s32 shift_y; + + // limit + s32 acc; + s32 dec; + s32 breakdec; + s32 maxspeed; + s32 min_x; + s32 max_x; + s32 min_y; + s32 max_y; + + s32 run_to_zero_max_d; + s32 leave_from_zero_max_d; + s32 run_to_zero_speed; + s32 run_to_zero_dec; + } flash_config_t; + #pragma pack() public: virtual int32_t move_to(int32_t x, int32_t y, int speed, action_cb_status_t status_cb) = 0; - virtual int32_t move_by(int32_t dx, int32_t dy, action_cb_status_t status_cb) = 0; + virtual int32_t move_by(int32_t dx, int32_t dy, int speed, action_cb_status_t status_cb) = 0; + virtual int32_t move_by_no_limit(int32_t dx, int32_t dy, int speed, 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 nowx, int32_t nowxy, action_cb_status_t status_cb) = 0; @@ -92,6 +120,9 @@ class I_XYRobotCtrlModule { virtual int32_t set_base_param(const base_param_t& param) = 0; virtual int32_t get_base_param(base_param_t& ack) = 0; + virtual int32_t flush() = 0; + virtual int32_t factory_reset() = 0; + virtual ~I_XYRobotCtrlModule() {} }; } // namespace iflytop \ No newline at end of file diff --git a/zcancmder_protocol.hpp b/zcancmder_protocol.hpp index 8c76989..2beae51 100644 --- a/zcancmder_protocol.hpp +++ b/zcancmder_protocol.hpp @@ -34,13 +34,18 @@ typedef enum { kcmd_xy_robot_ctrl_move_to = CMDID(1006, 4), // 机器人移动到指定位置 kcmd_xy_robot_ctrl_move_by = CMDID(1006, 5), // 机器人移动指定距离 kcmd_xy_robot_ctrl_force_change_current_pos = CMDID(1006, 6), // 强制修改当前位置 + kcmd_xy_robot_ctrl_move_by_no_limit = CMDID(1006, 7), // 机器人相对移动,没有限制 + // kcmd_xy_robot_ctrl_read_pos_by_move2zero = CMDID(1006, 8), // 机器人先执行归零动作,然后读取位置偏差,计算出来时候的坐标,然后再移动回一开始的位置。 kcmd_xy_robot_ctrl_read_version = CMDID(1006, 50), // 读取模块型号版本信息 kcmd_xy_robot_ctrl_read_status = CMDID(1006, 51), // 读取模块精简状态信息 kcmd_xy_robot_ctrl_read_detailed_status = CMDID(1006, 52), // 读取模块详细状态信息 + // kcmd_xy_robot_ctrl_read_read_pos_by_move2zero_exec_state = CMDID(1006, 53), // 机器人先执行归零动作,然后读取位置偏差,计算出来时候的坐标,然后再移动回一开始的位置。 kcmd_xy_robot_ctrl_set_base_param = CMDID(1006, 100), // 设置运行参数 kcmd_xy_robot_ctrl_get_base_param = CMDID(1006, 101), // 设置运行参数 + kcmd_xy_robot_ctrl_flush = CMDID(1006, 110), // 存储参数到flash中 + kcmd_xy_robot_ctrl_factory_reset = CMDID(1006, 111), // 恢复出厂设置 // kcmd_xy_robot_ctrl_set_warning_limit_param = CMDID(1006, 101), // 设置控制限制参数 // kcmd_xy_robot_ctrl_set_run_to_zero_param = CMDID(1006, 102), // 设置归零参数 @@ -199,6 +204,8 @@ ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_to_zero, CMD(u16 id;), ACK(u8 ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_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_xy_robot_ctrl_move_to, CMD(u16 id; s32 x; s32 y; s32 speed;), ACK(u8 pad;), REPORT(int32_t exec_status;)); ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_by, CMD(u16 id; s32 dx; s32 dy; s32 speed;), ACK(u8 pad;), REPORT(int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_by_no_limit, CMD(u16 id; s32 dx; s32 dy; s32 speed;), ACK(u8 pad;), REPORT(int32_t exec_status;)); + ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_force_change_current_pos, CMD(u16 id; s32 x; s32 y;), ACK(u8 pad;)); // READ ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_read_version, CMD(u16 id;), ACK(I_XYRobotCtrlModule::version_t ack;)); @@ -207,6 +214,10 @@ ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_read_detailed_status, CMD(u16 id;), ACK(I_XYR // SET ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_base_param, CMD(u16 id; I_XYRobotCtrlModule::base_param_t param;), ACK(u8 pad;)); ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_get_base_param, CMD(u16 id;), ACK(I_XYRobotCtrlModule::base_param_t ack;)); + +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_flush, CMD(u16 id;), ACK(u8 pad;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_factory_reset, CMD(u16 id;), ACK(u8 pad;)); + // ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_warning_limit_param, CMD(u16 id; u8 opt_type; I_XYRobotCtrlModule::warning_limit_param_t param;), ACK( I_XYRobotCtrlModule::warning_limit_param_t ack;)); // ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_run_to_zero_param, CMD(u16 id; u8 opt_type; I_XYRobotCtrlModule::run_to_zero_param_t param;), ACK( I_XYRobotCtrlModule::run_to_zero_param_t ack;));