From 503d77339352e6a120424e1f9e65e14191a056c5 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 23 Oct 2023 13:10:29 +0800 Subject: [PATCH] update --- Intelligent_winding_robot_main_board.launch | 4 +- sdk | 2 +- usrc/main.cpp | 243 +++------------------------ usrc/script_reg.cpp | 244 ++++++++++++++++++++++++++++ 4 files changed, 270 insertions(+), 223 deletions(-) create mode 100644 usrc/script_reg.cpp diff --git a/Intelligent_winding_robot_main_board.launch b/Intelligent_winding_robot_main_board.launch index 0c88f6c..951f0cd 100644 --- a/Intelligent_winding_robot_main_board.launch +++ b/Intelligent_winding_robot_main_board.launch @@ -36,8 +36,8 @@ - - + + diff --git a/sdk b/sdk index ef7a7f2..4257580 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit ef7a7f2a43038c8655ccfac5d80bab8984a3963a +Subproject commit 4257580790dc2dda82d0b03a1323746f321331b3 diff --git a/usrc/main.cpp b/usrc/main.cpp index 326f26c..4670a53 100644 --- a/usrc/main.cpp +++ b/usrc/main.cpp @@ -152,6 +152,9 @@ StepMotor45Scheduler step_motor45_scheduler; // 45 CmdSchedulerV2 g_cmdScheduler; // 串口字符串指令总线 TaoJingChiScreenService g_taojingchi_screen_service; // 淘精驰屏幕服务 MicroComputerModuleDeviceScriptCmderPaser g_zmodule_device_script_cmder_paser; // 用于解析所有的设备指令 +ScriptCmderEq20Servomotor g_eq20_servomotor_script_cmder; // eq20 +ScriptCmderStepMotor45 g_step_motor45_script_cmder; // 45步进电机 +ScirptCmderMiniServoMotorCtrlModule g_mini_servo_motor_script_cmder; // 小舵机 /******************************************************************************* * 本地设备 * @@ -178,226 +181,8 @@ extern "C" {} extern DMA_HandleTypeDef hdma_usart2_rx; extern DMA_HandleTypeDef hdma_usart2_tx; -void regfn() { -#if 0 - eq20_enable (id,en) - eq20_get_io_state (id) - eq20_get_pos (id) - eq20_get_servo_internal_state (id) - eq20_move_by (id,pos,rpm,acctime) - eq20_move_to (id,pos,rpm,acctime) - eq20_move_to_zero_backward (id,lookzeropoint_rpm,findzero_edge_rpm,lookzeropoint_acc_time) - eq20_move_to_zero_forward (id,lookzeropoint_rpm,findzero_edge_rpm,lookzeropoint_acc_time) - eq20_rotate (id,rpm,acctime) - eq20_stop (id) - - mini_servo_enable (id,en) - mini_servo_move_backward (id,torque) - mini_servo_move_by (id,pos,speed,torque) - mini_servo_move_forward (id,torque) - mini_servo_move_to (id,pos,speed,torque) - mini_servo_position_calibrate (id,pos) - mini_servo_read_status (id) - mini_servo_rotate (id,speed,torque,time) - mini_servo_stop (id,stop_type) -#endif - g_cmdScheduler.regCMD("eq20_enable", "(id,en)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t en = atoi(paraV[1]); - int32_t ecode = g_zmodule_device_manager.motor_enable(2, en); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("eq20_get_io_state", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t en = atoi(paraV[1]); - int32_t iostate = 0; - int32_t ecode = g_zmodule_device_manager.module_readio(2, &iostate); - ack->setInt32Ack(ecode, iostate); - }); - - g_cmdScheduler.regCMD("eq20_get_pos", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t pos = 0; - int32_t ecode = g_zmodule_device_manager.motor_read_pos(2, &pos); - ack->setInt32Ack(ecode, pos); - }); - - g_cmdScheduler.regCMD("eq20_get_servo_internal_state", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t pos = 0; - int32_t ecode = g_zmodule_device_manager.motor_read_pos(2, &pos); - ack->setInt32Ack(ecode, pos); - }); - - g_cmdScheduler.regCMD("eq20_move_by", "(id,pos,rpm,acctime)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t pos = atoi(paraV[1]); - int32_t rpm = atoi(paraV[2]); - int32_t acctime = atoi(paraV[3]); - int32_t ecode = g_zmodule_device_manager.motor_move_by_acctime(2, pos, rpm, acctime); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("eq20_move_to", "(id,pos,rpm,acctime)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t pos = atoi(paraV[1]); - int32_t rpm = atoi(paraV[2]); - int32_t acctime = atoi(paraV[3]); - int32_t ecode = g_zmodule_device_manager.motor_move_to_acctime(2, pos, rpm, acctime); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("eq20_move_to_zero_backward", "(id,lookzeropoint_rpm,findzero_edge_rpm,lookzeropoint_acc_time)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t lookzeropoint_rpm = atoi(paraV[1]); - int32_t findzero_edge_rpm = atoi(paraV[2]); - int32_t lookzeropoint_acc_time = atoi(paraV[3]); - int32_t ecode = g_zmodule_device_manager.motor_move_to_zero_backward(2, lookzeropoint_rpm, findzero_edge_rpm, 0, 0); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("eq20_move_to_zero_forward", "(id,lookzeropoint_rpm,findzero_edge_rpm,lookzeropoint_acc_time)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t lookzeropoint_rpm = atoi(paraV[1]); - int32_t findzero_edge_rpm = atoi(paraV[2]); - int32_t lookzeropoint_acc_time = atoi(paraV[3]); - int32_t ecode = g_zmodule_device_manager.motor_move_to_zero_forward(2, lookzeropoint_rpm, findzero_edge_rpm, 0, 0); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("eq20_rotate", "(id,rpm,acctime)", 3, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t rpm = atoi(paraV[1]); - int32_t acctime = atoi(paraV[2]); - - int32_t absrpm = abs(rpm); - int32_t direction = rpm > 0 ? 1 : -1; - - int32_t ecode = g_zmodule_device_manager.motor_rotate_acctime(2, direction, absrpm, acctime); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("eq20_stop", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t ecode = g_zmodule_device_manager.module_stop(2); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("mini_servo_enable", "(id,en)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t en = atoi(paraV[1]); - int32_t ecode = g_zmodule_device_manager.motor_enable(id + 10, en); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("mini_servo_move_backward", "(id,torque)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t torque = atoi(paraV[1]); - torque = abs(torque); - int32_t ecode = g_zmodule_device_manager.motor_move_to_with_torque(id + 10, 0, torque); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("mini_servo_move_by", "(id,pos,speed,torque)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t pos = atoi(paraV[1]); - int32_t speed = atoi(paraV[2]); - int32_t torque = atoi(paraV[3]); - int32_t ecode = g_zmodule_device_manager.motor_move_by(id + 10, pos, speed, 0); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("mini_servo_move_forward", "(id,torque)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t torque = atoi(paraV[1]); - torque = abs(torque); - int32_t ecode = g_zmodule_device_manager.motor_move_to_with_torque(id + 10, 0, torque); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("mini_servo_move_to", "(id,pos,speed,torque)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t pos = atoi(paraV[1]); - int32_t speed = atoi(paraV[2]); - int32_t torque = atoi(paraV[3]); - int32_t ecode = g_zmodule_device_manager.motor_move_to(id + 10, pos, speed, 0); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("mini_servo_position_calibrate", "(id,pos)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t pos = atoi(paraV[1]); - int32_t ecode = g_zmodule_device_manager.motor_set_current_pos_by_change_shift(id + 10, pos); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("mini_servo_read_status", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t pos = 0; - int32_t ecode = g_zmodule_device_manager.motor_read_pos(id + 10, &pos); - ack->setInt32Ack(ecode, pos); - }); - - g_cmdScheduler.regCMD("mini_servo_rotate", "(id,speed,torque,time)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t speed = atoi(paraV[1]); - int32_t torque = atoi(paraV[2]); - int32_t time = atoi(paraV[3]); - - int direction = speed > 0 ? 1 : -1; - int32_t ecode = g_zmodule_device_manager.motor_rotate(id + 10, direction, speed, time); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("mini_servo_stop", "(id,stop_type)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t id = atoi(paraV[0]); - int32_t stop_type = atoi(paraV[1]); - int32_t ecode = g_zmodule_device_manager.module_stop(id + 10); - ack->setNoneAck(ecode); - }); - -#if 0 - step_motor_45_get_pos (id) - step_motor_45_move_by (id,pos) - step_motor_45_move_to (id,pos) - step_motor_45_rotate (id,direction) - step_motor_45_stop (id) - step_motor_45_zero_calibration (id) -#endif - - g_cmdScheduler.regCMD("step_motor_45_get_pos", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t pos = 0; - int id = atoi(paraV[0]); - int32_t ecode = g_zmodule_device_manager.motor_read_pos(id + 20, &pos); - ack->setInt32Ack(ecode, pos); - }); - - g_cmdScheduler.regCMD("step_motor_45_move_by", "(id,pos)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t pos = atoi(paraV[1]); - int id = atoi(paraV[0]); - int32_t ecode = g_zmodule_device_manager.motor_move_by(id + 20, pos,0,0); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("step_motor_45_move_to", "(id,pos)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t pos = atoi(paraV[1]); - int id = atoi(paraV[0]); - int32_t ecode = g_zmodule_device_manager.motor_move_to(id + 20, pos,0,0); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("step_motor_45_rotate", "(id,direction)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int32_t direction = atoi(paraV[1]); - int id = atoi(paraV[0]); - int32_t ecode = g_zmodule_device_manager.motor_rotate(id + 20, direction,0,0); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("step_motor_45_stop", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int id = atoi(paraV[0]); - int32_t ecode = g_zmodule_device_manager.module_stop(id + 20); - ack->setNoneAck(ecode); - }); - - g_cmdScheduler.regCMD("step_motor_45_zero_calibration", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { - int id = atoi(paraV[0]); - int32_t ecode = g_zmodule_device_manager.motor_move_to_zero_backward(id + 20,0,0,0,0); - ack->setNoneAck(ecode); - }); - - -} +extern void script_reg_fn(); +void regfn() { script_reg_fn(); } extern void step_motor_cmd_reg(); void Main::run() { @@ -460,6 +245,24 @@ void Main::run() { *******************************************************************************/ g_cmdScheduler.initialize(&DEBUG_UART, 1000); // g_zmodule_device_script_cmder_paser.initialize(&g_cmdScheduler, &g_zmodule_device_manager); + g_eq20_servomotor_script_cmder.initialize(&g_cmdScheduler); + g_eq20_servomotor_script_cmder.regmodule(1, &g_main_servo_motor); + + g_step_motor45_script_cmder.initialize(&g_cmdScheduler); + g_step_motor45_script_cmder.regmodule(1, &g_step_motor45[0]); + g_step_motor45_script_cmder.regmodule(2, &g_step_motor45[1]); + g_step_motor45_script_cmder.regmodule(3, &g_step_motor45[2]); + + g_mini_servo_motor_script_cmder.initialize(&g_cmdScheduler); + g_mini_servo_motor_script_cmder.regmodule(1, &g_mini_servo[0]); + g_mini_servo_motor_script_cmder.regmodule(2, &g_mini_servo[1]); + g_mini_servo_motor_script_cmder.regmodule(3, &g_mini_servo[2]); + g_mini_servo_motor_script_cmder.regmodule(4, &g_mini_servo[3]); + g_mini_servo_motor_script_cmder.regmodule(5, &g_mini_servo[4]); + g_mini_servo_motor_script_cmder.regmodule(6, &g_mini_servo[5]); + + + g_taojingchi_screen_service.initialize( &huart5, 1, /** diff --git a/usrc/script_reg.cpp b/usrc/script_reg.cpp new file mode 100644 index 0000000..c170559 --- /dev/null +++ b/usrc/script_reg.cpp @@ -0,0 +1,244 @@ +#include +#include + +#include "main.hpp" + +// +#include "feite_servo_motor.hpp" +#include "sdk/os/zos.hpp" +// +// #include "sdk\components\cmdscheduler\cmd_scheduler.hpp" +#include "sdk\components\eq_20_asb_motor\eq20_servomotor.hpp" +#include "sdk\components\iflytop_can_slave_module_master_end\stepmotor.hpp" +#include "sdk\components\iflytop_can_slave_v1\iflytop_can_master.hpp" +#include "sdk\components\step_motor_45\step_motor_45.hpp" +#include "sdk\components\step_motor_45\step_motor_45_scheduler.hpp" +#include "sdk\components\zcancmder\zcanreceiver_master.hpp" +// +#include "sdk\components/step_motor_ctrl_module/step_motor_ctrl_script_cmder_module.hpp" +#include "sdk\components/xy_robot_ctrl_module/xy_robot_script_cmder_module.hpp" +#include "sdk\components\cmdscheduler\cmd_scheduler_v2.hpp" +#include "sdk\components\eq_20_asb_motor\script_cmder_eq20_servomotor.hpp" +#include "sdk\components\mini_servo_motor\mini_servo_motor_ctrl_module.hpp" +#include "sdk\components\mini_servo_motor\scirpt_cmder_mini_servo_motor_ctrl_module.hpp" +#include "sdk\components\step_motor_45\script_cmder_step_motor_45.hpp" +// #include "sdk\components\scriptcmder_module\xy_robot_script_cmder_module.hpp" +// #include "sdk\components\zcancmder_master_module/zcan_master_step_motor_ctrl_module.hpp" +// #include "sdk\components\zcancmder_master_module\zcan_xy_robot_master_module.hpp" + +#include "intelligent_winding_robot_ctrl.hpp" +#include "sdk\components\taojingchi_screen\taojingchi_screen_service.hpp" +#include "sdk\components\zprotocol_helper\micro_computer_module_device_script_cmder_paser.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\protocol_proxy.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_manager.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_script_cmder_paser.hpp" +namespace iflytop { +extern Main gmain; +}; + +using namespace iflytop; +using namespace std; + +extern "C" {} +/******************************************************************************* + * 配置 * + *******************************************************************************/ +#if 0 +static StepMotor45::cfg_t cfg4 = { + .max_pos = -1, + .enable_zero_limit = false, + .enable_max_pos_limit = false, + .mirror = true, + + .zeroPin = PinNull, + .zeroPinMirror = false, + + .driverPin = {PE0, PE2, PE4, PE6}, + .driverPinMirror = true, +}; + +static StepMotor45::cfg_t cfg5 = { + .max_pos = -1, + .enable_zero_limit = false, + .enable_max_pos_limit = false, + .mirror = true, + + .zeroPin = PinNull, + .zeroPinMirror = false, + + .driverPin = {PC13, PE5, PE3, PE1}, + .driverPinMirror = true, +}; +static StepMotor45::cfg_t cfg6 = { + .max_pos = -1, + .enable_zero_limit = false, + .enable_max_pos_limit = false, + .mirror = true, + + .zeroPin = PinNull, + .zeroPinMirror = false, + + .driverPin = {PC12, PD3, PD5, PD7}, + .driverPinMirror = true, +}; +#endif + +namespace iflytop { +/******************************************************************************* + * 基础组件 * + *******************************************************************************/ +extern ZCanCommnaderMaster m_zcanCommnaderMaster; // can总线 +extern ModbusBlockHost g_modbusblockhost; // modbus总线 +extern FeiTeServoMotor g_feiteservomotor_bus; // 飞特舵机总线 +extern ZModuleDeviceManager g_zmodule_device_manager; // 用于管理所有的设备 +extern StepMotor45Scheduler step_motor45_scheduler; // 45步进电机调度器 + +extern CmdSchedulerV2 g_cmdScheduler; // 串口字符串指令总线 +extern TaoJingChiScreenService g_taojingchi_screen_service; // 淘精驰屏幕服务 +extern MicroComputerModuleDeviceScriptCmderPaser g_zmodule_device_script_cmder_paser; // 用于解析所有的设备指令 + +/******************************************************************************* + * 本地设备 * + *******************************************************************************/ +extern Eq20ServoMotor g_main_servo_motor; +extern StepMotor45 g_step_motor45[7]; +extern MiniRobotCtrlModule g_mini_servo[6]; +/******************************************************************************* + * CAN设备 * + *******************************************************************************/ +extern ZIProtocolProxy g_xyrobotctrlmodule; +extern ZIProtocolProxy g_z_step_motor; + +extern IntelligentWindingRobotCtrl g_intelligent_winding_robot_ctrl; + +} // namespace iflytop + +extern "C" { +extern DMA_HandleTypeDef hdma_usart3_rx; +extern DMA_HandleTypeDef hdma_usart3_tx; +} + +extern "C" {} +extern DMA_HandleTypeDef hdma_usart2_rx; +extern DMA_HandleTypeDef hdma_usart2_tx; + +void script_reg_fn() { +#if 0 + xy_robot_ctrl_enable (id,en) + xy_robot_ctrl_factory_reset (id) + xy_robot_ctrl_flush (id) + xy_robot_ctrl_force_change_current_pos (id,x,y) + xy_robot_ctrl_get_base_param (id) + xy_robot_ctrl_move_by (id,dx,dy,v) + + + xy_robot_ctrl_move_to (id,x,y,speed) + xy_robot_ctrl_move_to_zero (id) + xy_robot_ctrl_move_to_zero_with_calibrate (id,nowx,nowy) + xy_robot_ctrl_stop (id,stop_type) +#endif +#define XY_ROBOT_ID 3 + + g_cmdScheduler.regCMD("xy_robot_ctrl_enable", "(id,en)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t en = atoi(paraV[1]); + int32_t ecode = g_zmodule_device_manager.xymotor_enable(XY_ROBOT_ID, en); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("xy_robot_ctrl_factory_reset", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t ecode = g_zmodule_device_manager.module_factory_reset(XY_ROBOT_ID); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("xy_robot_ctrl_flush", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t ecode = g_zmodule_device_manager.module_flush_cfg(XY_ROBOT_ID); + ack->setNoneAck(ecode); + }); +#if 0 + g_cmdScheduler.regCMD("xy_robot_ctrl_force_change_current_pos", "(id,x,y)", 3, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t x = atoi(paraV[1]); + int32_t y = atoi(paraV[2]); + int32_t ecode = g_zmodule_device_manager.motor_set_current_pos_by_change_shift(XY_ROBOT_ID, x, y); + ack->setNoneAck(ecode); + }); +#endif + + g_cmdScheduler.regCMD("xy_robot_ctrl_get_base_param", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { g_zmodule_device_script_cmder_paser.do_dumpconfig(paramN, paraV, ack); }); + + g_cmdScheduler.regCMD("xy_robot_ctrl_move_by", "(id,dx,dy,v)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t dx = atoi(paraV[1]); + int32_t dy = atoi(paraV[2]); + int32_t v = atoi(paraV[3]); + int32_t ecode = g_zmodule_device_manager.xymotor_move_by(XY_ROBOT_ID, dx, dy, v); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("xy_robot_ctrl_move_to", "(id,x,y,speed)", 4, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t x = atoi(paraV[1]); + int32_t y = atoi(paraV[2]); + int32_t speed = atoi(paraV[3]); + int32_t ecode = g_zmodule_device_manager.xymotor_move_to(XY_ROBOT_ID, x, y, speed); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("xy_robot_ctrl_move_to_zero", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t ecode = g_zmodule_device_manager.xymotor_move_to_zero(XY_ROBOT_ID); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("xy_robot_ctrl_move_to_zero_with_calibrate", "(id,nowx,nowy)", 3, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t nowx = atoi(paraV[1]); + int32_t nowy = atoi(paraV[2]); + int32_t ecode = g_zmodule_device_manager.xymotor_move_to_zero_and_calculated_shift(XY_ROBOT_ID); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("xy_robot_ctrl_stop", "(id,stop_type)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t stop_type = atoi(paraV[1]); + int32_t ecode = g_zmodule_device_manager.module_stop(XY_ROBOT_ID); + ack->setNoneAck(ecode); + }); +#if 0 +00102227 INFO [CMD ] step_motor_ctrl_enable (id,en) +00102251 INFO [CMD ] step_motor_ctrl_get_base_param (id) +00102277 INFO [CMD ] step_motor_ctrl_move_by (id,dx,speed) +00102283 INFO [CMD ] step_motor_ctrl_move_to (id,x,speed) +00102298 INFO [CMD ] step_motor_ctrl_move_to_zero (id) +00102304 INFO [CMD ] step_motor_ctrl_move_to_zero_with_calibrate (id,x) +00102311 INFO [CMD ] step_motor_ctrl_read_detailed_status (id) +00102318 INFO [CMD ] step_motor_ctrl_read_status (id) +00102330 INFO [CMD ] step_motor_ctrl_rotate (id,speed,lastforms) +00102362 INFO [CMD ] step_motor_ctrl_stop (id,stop_type) +#endif + + g_cmdScheduler.regCMD("step_motor_ctrl_enable", "(id,en)", 2, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t en = atoi(paraV[1]); + int32_t ecode = g_zmodule_device_manager.motor_enable(4, en); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("step_motor_ctrl_get_base_param", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { // + g_zmodule_device_script_cmder_paser.do_dumpconfig(4); + }); + + g_cmdScheduler.regCMD("step_motor_ctrl_move_by", "(id,dx,speed)", 3, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t dx = atoi(paraV[1]); + int32_t speed = atoi(paraV[2]); + int32_t ecode = g_zmodule_device_manager.motor_move_by(4, dx, speed, 0); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("step_motor_ctrl_move_to", "(id,x,speed)", 3, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t x = atoi(paraV[1]); + int32_t speed = atoi(paraV[2]); + int32_t ecode = g_zmodule_device_manager.motor_move_to(4, x, speed, 0); + ack->setNoneAck(ecode); + }); + + g_cmdScheduler.regCMD("step_motor_ctrl_move_to_zero", "(id)", 1, [](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int32_t ecode = g_zmodule_device_manager.motor_move_to_zero_backward(4, 0, 0, 0, 0); + ack->setNoneAck(ecode); + }); + + +}