diff --git a/Intelligent_winding_robot_main_board_dap.launch b/Intelligent_winding_robot_main_board_dap.launch index 3bef02f..3eb14a1 100644 --- a/Intelligent_winding_robot_main_board_dap.launch +++ b/Intelligent_winding_robot_main_board_dap.launch @@ -6,7 +6,7 @@ - + diff --git a/sdk b/sdk index abfd999..0d5a3a5 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit abfd99957b7572b1ca8df0d60ad015ac4fabac1d +Subproject commit 0d5a3a53c8d3b3d22f5c3963dc94abadab11da7e diff --git a/usrc/cmdline_support.cpp b/usrc/cmdline_support.cpp index 2bd7d0f..eb9c11f 100644 --- a/usrc/cmdline_support.cpp +++ b/usrc/cmdline_support.cpp @@ -15,6 +15,13 @@ void CmdlineSupport::init(Device* device) { m_device->line_locking_solenoid_valve(val); return 0; }); + cmdlineparser->registerCmd("line_locking_solenoid_valve_set_auto_close_delay_s", "(delays)", 1, // + [this](int32_t paramN, const char** paraV, ICmdParserACK* ack) { + int val = atoi(paraV[0]); + m_device->line_locking_solenoid_valve_set_auto_close_delay_s(val); + return 0; + }); + cmdlineparser->registerCmd("blower_set_val", "(bool on)", 1, // [this](int32_t paramN, const char** paraV, ICmdParserACK* ack) { int val = atoi(paraV[0]); diff --git a/usrc/device.cpp b/usrc/device.cpp index fdd520f..a36a705 100644 --- a/usrc/device.cpp +++ b/usrc/device.cpp @@ -120,7 +120,7 @@ void Device::sub_module_init() { * @brief 初始化主轴电机 */ static Eq20ServoMotor::servo_config_t default_servo_cfg = // - {.default_acc_time_ms = 1000, .default_velocity = 800, .find_zero_velocity = 100}; + {.default_acc_time_ms = 1000, .default_velocity = 500, .find_zero_velocity = 100}; static Eq20ServoMotor eq20_motor; eq20_motor.init(1, &m_modbus, 1, default_servo_cfg); m_device_manager.registerModule(&eq20_motor); @@ -167,26 +167,53 @@ void Device::sub_module_init() { m_device_manager.module_active_cfg(42); } -static ZGPIO line_locking_solenoid_valve_gpio; -void Device::line_locking_solenoid_valve_init() { // - line_locking_solenoid_valve_gpio.initAsOutput(PC3, ZGPIO::kMode_nopull, false, false); +/******************************************************************************* + * line_locking_solenoid_valve * + *******************************************************************************/ +ZGPIO m_line_locking_solenoid_valve_gpio; +int32_t m_line_locking_solenoid_valve_auto_close_delayms = 5000; +uint32_t m_line_locking_solenoid_valve_open_ticket = 0; + +void Device::line_locking_solenoid_valve_init() { // + m_line_locking_solenoid_valve_gpio.initAsOutput(PC1, ZGPIO::kMode_nopull, true, false); + // 自动关闭 + OSDefaultSchduler::getInstance()->regPeriodJob( + [this](OSDefaultSchduler::Context& cx) { + if (m_line_locking_solenoid_valve_gpio.getState()) { + if (zos_haspassedms(m_line_locking_solenoid_valve_open_ticket) > m_line_locking_solenoid_valve_auto_close_delayms) { + line_locking_solenoid_valve(false); + } + } + }, + 100); } -void Device::line_locking_solenoid_valve(bool on) { line_locking_solenoid_valve_gpio.setState(on); } +void Device::line_locking_solenoid_valve(bool on) { + m_line_locking_solenoid_valve_open_ticket = HAL_GetTick(); + m_line_locking_solenoid_valve_gpio.setState(on); +} +void Device::line_locking_solenoid_valve_set_auto_close_delay_s(int32_t delays) { m_line_locking_solenoid_valve_auto_close_delayms = delays * 1000; } + +/******************************************************************************* + * blower * + *******************************************************************************/ static ZGPIO blower_gpio; void Device::blower_init() { blower_gpio.initAsOutput(PC2, ZGPIO::kMode_nopull, true, false); } void Device::blower_set_val(bool on) { blower_gpio.setState(on); } int32_t Device::app_motor_move_from_a_to_b_block(int motor_id, int32_t a, int32_t b, int32_t times) { - int32_t ret = 0; + int32_t ret = 0; + ThisThread thisThread; for (size_t i = 0; i < times; i++) { ZLOGI(TAG, "move motor %d to %d", a); ret = m_device_manager.motor_easy_move_to(motor_id, a); + thisThread.sleep(10); if (ret != 0) break; ret = wait_for_module(motor_id); if (ret != 0) break; ZLOGI(TAG, "move motor %d to %d", b); ret = m_device_manager.motor_easy_move_to(motor_id, b); + thisThread.sleep(10); if (ret != 0) break; ret = wait_for_module(motor_id); if (ret != 0) break; diff --git a/usrc/device.hpp b/usrc/device.hpp index 0f99bf8..58febbd 100644 --- a/usrc/device.hpp +++ b/usrc/device.hpp @@ -77,6 +77,8 @@ class Device { /******************************************************************************* * SUB CAN MODULE * *******************************************************************************/ + + public: void init(); @@ -85,6 +87,8 @@ class Device { */ void line_locking_solenoid_valve_init(); void line_locking_solenoid_valve(bool on); + void line_locking_solenoid_valve_set_auto_close_delay_s(int32_t delays); + void blower_init(); void blower_set_val(bool on); diff --git a/usrc/project_configs.h b/usrc/project_configs.h index 3adb2a2..3e80527 100644 --- a/usrc/project_configs.h +++ b/usrc/project_configs.h @@ -7,7 +7,7 @@ #define PC_DEBUG_UART huart1 #define PC_DEBUG_UART_DMA_HANDLER hdma_usart1_rx -#define PC_DEBUG_UART_RX_BUF_SIZE 1024 +#define PC_DEBUG_UART_RX_BUF_SIZE (1024*4) #define PC_DEBUG_LIGHT_GPIO PG0 #define PC_SYS_DELAY_US_TIMER htim6 // US延时定时器