diff --git a/api/i_mini_servo_module.hpp b/api/i_mini_servo_module.hpp index 6b8a806..da55789 100644 --- a/api/i_mini_servo_module.hpp +++ b/api/i_mini_servo_module.hpp @@ -12,30 +12,32 @@ class I_MiniServoModule { public: typedef enum { kNormalStop, kBreakStop } StopType_t; #pragma pack(1) +#if 0 typedef struct { - u8 exec_status; + s32 exec_status; s32 has_run_time; } rotate_cb_status_t; typedef struct { - u8 exec_status; + s32 exec_status; s32 pos; } move_to_cb_status_t; typedef struct { - u8 exec_status; + s32 exec_status; s32 dpos; } move_by_cb_status_t; typedef struct { - u8 exec_status; + s32 exec_status; s32 has_run_time; } run_with_torque_cb_status_t; typedef struct { - u8 exec_status; + s32 exec_status; s32 pos; } move_by_nolimit_cb_status_t; +#endif /******************************************************************************* * READ * @@ -94,11 +96,11 @@ class I_MiniServoModule { virtual int32_t stop(u8 stop_type) = 0; virtual int32_t position_calibrate(s32 calibrate_pos) = 0; - virtual int32_t rotate(s32 speed, s32 torque, s32 run_time, function status_cb) = 0; - virtual int32_t move_to(s32 pos, s32 speed, s32 torque, function status_cb) = 0; - virtual int32_t move_by(s32 pos, s32 speed, s32 torque, function status_cb) = 0; - virtual int32_t run_with_torque(s32 torque, s32 run_time, function status_cb) = 0; - virtual int32_t move_by_nolimit(s32 pos, s32 speed, s32 torque, function status_cb) = 0; + virtual int32_t rotate(s32 speed, s32 torque, s32 run_time, action_cb_status_t status_cb) = 0; + virtual int32_t move_to(s32 pos, s32 speed, s32 torque, action_cb_status_t status_cb) = 0; + virtual int32_t move_by(s32 pos, s32 speed, s32 torque, action_cb_status_t status_cb) = 0; + virtual int32_t run_with_torque(s32 torque, s32 run_time, action_cb_status_t status_cb) = 0; + virtual int32_t move_by_nolimit(s32 pos, s32 speed, s32 torque, action_cb_status_t status_cb) = 0; virtual int32_t read_version(version_t& version) = 0; virtual int32_t read_status(status_t& status) = 0; diff --git a/api/i_pipette_module.hpp b/api/i_pipette_module.hpp index ae17815..cfd4b00 100644 --- a/api/i_pipette_module.hpp +++ b/api/i_pipette_module.hpp @@ -13,13 +13,15 @@ class I_PipetteModule { public: #pragma pack(1) - ZSTRUCT(base_param_t, int16_t pad;); + ZSTRUCT(base_param_t, s16 pad;); typedef struct { - uint8_t status; // 设备状态 - uint8_t io_state; // IO0:z_zero_io/IO1:hastip/ - int16_t zpos_mm; // z轴位置 - int16_t pipette_ul; // 移液枪液量 + u8 status; // 模块状态 + u8 pipette_gun_status; // 移液枪状态 + u8 io_state; // IO0:z_zero_io + u8 has_tip; // 是否有tip + s16 zpos_mm; // z轴位置,如果有tip,则自动加上tip高度 + s16 pipette_ul; // 移液枪液量 } status_t; #pragma pack() @@ -32,14 +34,25 @@ class I_PipetteModule { virtual int32_t zero_pos_calibrate(action_cb_status_t status_cb) = 0; virtual int32_t reset_device(action_cb_status_t status_cb) = 0; - virtual int32_t take_tip(action_cb_status_t status_cb) = 0; - virtual int32_t remove_tip(action_cb_status_t status_cb) = 0; - // 取液(平台参数,试管参数, 取样体积,取样高度,摇匀次数,摇匀体积) - virtual int32_t take_and_split_liquid(u8 tube_id, s16 liquid_volume, s16 zhight, s16 abs_zhight, s16 shake_times, s16 shake_volume, action_cb_status_t status_cb) = 0; + virtual int32_t take_tip(s16 vel, s16 height_mm, s16 tip_hight_mm, action_cb_status_t status_cb) = 0; + virtual int32_t remove_tip(s16 vel, s16 height_mm, action_cb_status_t status_cb) = 0; - virtual int32_t set_base_param(const base_param_t &base_param) = 0; - virtual int32_t get_base_param(base_param_t &base_param) = 0; + virtual int32_t move_to(s16 vel, s16 height_mm, action_cb_status_t status_cb) = 0; + virtual int32_t move_to_with_lld(s16 vel, s16 lld_cap_thr, s16 lld_max_hight_mm, s16 lld_rela_hight_mm, action_cb_status_t status_cb) = 0; + virtual int32_t shake_volume(s16 shake_times, s16 shake_volume, action_cb_status_t status_cb) = 0; + virtual int32_t take_and_split_liquid(s16 take_volume_mm, action_cb_status_t status_cb) = 0; + /******************************************************************************* + * ReadStatus * + *******************************************************************************/ virtual int32_t get_status(status_t &status) = 0; + + /******************************************************************************* + * SETTING * + *******************************************************************************/ + virtual int32_t set_z_motor_para(const I_StepMotorCtrlModule::base_param_t &z_motor_param) = 0; + virtual int32_t get_z_motor_para(I_StepMotorCtrlModule::base_param_t &z_motor_param) = 0; + virtual int32_t set_base_param(const base_param_t &base_param) = 0; + virtual int32_t get_base_param(base_param_t &base_param) = 0; }; } // namespace iflytop diff --git a/api/i_step_motor_ctrl_module.hpp b/api/i_step_motor_ctrl_module.hpp index 6d01dcb..cb9f2c0 100644 --- a/api/i_step_motor_ctrl_module.hpp +++ b/api/i_step_motor_ctrl_module.hpp @@ -90,6 +90,9 @@ class I_StepMotorCtrlModule { virtual int32_t read_detailed_status(detailed_status_t& debug_info) = 0; virtual int32_t read_pos(int32_t& pos) = 0; + virtual int32_t read_pos() = 0; + + virtual bool read_zero_io_state() = 0; virtual int32_t set_base_param(const base_param_t& param) = 0; virtual int32_t get_base_param(base_param_t& param) = 0; diff --git a/zcancmder_protocol.hpp b/zcancmder_protocol.hpp index 35d4d5a..ff86b98 100644 --- a/zcancmder_protocol.hpp +++ b/zcancmder_protocol.hpp @@ -57,8 +57,8 @@ typedef enum { 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), // 设置运行参数 /******************************************************************************* * |Module_1008:舵机 * @@ -256,11 +256,11 @@ ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_enable, CMD(u8 id; u8 enable;), ACK(u8 id;) ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_stop, CMD(u8 id; u8 stop_type;), ACK(u8 id;)); ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_position_calibrate, CMD(u8 id; s32 calibrate_pos;), ACK(u8 id;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_rotate, CMD(u8 id; s32 speed; s32 torque; s32 run_time;), ACK(u8 id;), REPORT(u8 id; I_MiniServoModule::rotate_cb_status_t report;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_to, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; I_MiniServoModule::move_to_cb_status_t report;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_by, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; I_MiniServoModule::move_by_cb_status_t report;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_run_with_torque, CMD(u8 id; s32 torque; s32 run_time;), ACK(u8 id;), REPORT(u8 id; I_MiniServoModule::run_with_torque_cb_status_t report;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_by_nolimit, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; I_MiniServoModule::move_by_nolimit_cb_status_t report;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_rotate, CMD(u8 id; s32 speed; s32 torque; s32 run_time;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_to, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_by, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_run_with_torque, CMD(u8 id; s32 torque; s32 run_time;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_by_nolimit, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_read_version, CMD(u8 id;), ACK(u8 id; I_MiniServoModule::version_t ack;)); ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_read_status, CMD(u8 id;), ACK(u8 id; I_MiniServoModule::status_t ack;));