From 1e38b64153cf311b65381d50dcb07521cbb9333d Mon Sep 17 00:00:00 2001 From: wangbo Date: Fri, 7 Feb 2025 16:41:35 +0800 Subject: [PATCH] =?UTF-8?q?FIX=201.=E4=BF=AE=E6=94=B9=E6=A0=A1=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core/Inc/RS485_debug.h | 2 +- .../Core/Inc/dev_config.h | 1 + .../Core/Src/RS485_debug.c | 352 +++--------------- CablePositioning_APP_V1.0/Core/Src/cli.c | 14 +- CablePositioning_APP_V1.0/Core/Src/dau.c | 7 +- 5 files changed, 68 insertions(+), 308 deletions(-) diff --git a/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h b/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h index 9cdc349..c84736c 100644 --- a/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h +++ b/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h @@ -107,7 +107,7 @@ extern void debug_start(void); extern void debug_adj_auto(uint8_t bitmap); extern int32_t debug_app_check(uint32_t addr, uint32_t size, uint8_t file_type); extern void _debug_pkt_adj_auto(void); -extern void _debug_pkt_adj_autoEx(uint16_t elec, uint8_t index); +extern void _debug_pkt_adj_auto2(void); #endif /******************* (C) COPYRIGHT LandPower ***** END OF FILE ****************/ diff --git a/CablePositioning_APP_V1.0/Core/Inc/dev_config.h b/CablePositioning_APP_V1.0/Core/Inc/dev_config.h index 62a933e..ac26592 100644 --- a/CablePositioning_APP_V1.0/Core/Inc/dev_config.h +++ b/CablePositioning_APP_V1.0/Core/Inc/dev_config.h @@ -142,6 +142,7 @@ typedef struct { uint8_t bitmap; uint8_t is_voltage_adj; + uint16_t turns; uint16_t elec; } dev_adj_power_t; diff --git a/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c b/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c index 7b5f8bf..f4bb08c 100644 --- a/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c +++ b/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c @@ -806,99 +806,12 @@ static void _debug_adj_source_set_buf(uint32_t voltage, uint32_t electricity) } /* 自动校准仪器电压电流设置. */ -static HAL_StatusTypeDef _debug_adj_source_set(uint8_t ch_bitmap, uint8_t index) +static HAL_StatusTypeDef _debug_adj_source_set() { debug_adj_head_t *head = (debug_adj_head_t*)&debug_flash[1]; - uint8_t ch = 0; - uint8_t turn_num = 10; - - /* 以第一个校准通道的校准点为准. */ - for(ch = 0; ch < DAU_PORT_POWER_CNT; ch++) - { - if (IS_MONITOR_BIT_SET(ch_bitmap, ch)) - { - break; - } - } - /* 没有通道被选择直接退出. */ - if (DAU_PORT_POWER_CNT == ch) - { - return HAL_OK; - } - - turn_num = dev_config.ADC_turns[ch]; - if (0 == turn_num) - { - turn_num = 20; - } - - DBG(DBG_M_RS485_SEN, "ADC_base_elec[%d][%d] = %d turn_num = %d\r\n", ch, index, dev_config.ADC_base_elec[ch][index], turn_num); - DBG(DBG_M_RS485_SEN, "ADC_base_elec[%d][%d] / turn_num = %d\r\n", ch, index, dev_config.ADC_base_elec[ch][index]/turn_num); - - /* 填充 buf, 设置电流电压. */ - _debug_adj_source_set_buf(2200000, dev_config.ADC_base_elec[ch][index] / turn_num); - - /* 发送报文. */ - DBG(DBG_M_RS485_SEN, "ADJS(%d) SEND:\r\n", head->len); - if (dbg_stat_get(DBG_M_RS485_SEN)) - { - buf_print(debug_flash, head->len); - } - HAL_GPIO_WritePin(RS485_A_DE_GPIO_Port, RS485_A_DE_Pin, GPIO_PIN_SET); - HAL_E_RETURN(HAL_UART_Transmit(debug_adj_uart, debug_flash, head->len, 300)); - HAL_GPIO_WritePin(RS485_A_DE_GPIO_Port, RS485_A_DE_Pin, GPIO_PIN_RESET); - - /* 接收报文. */ - HAL_UART_Abort(debug_adj_uart); - HAL_E_RETURN(HAL_UART_Receive(debug_adj_uart, debug_flash, 0x6, 300)); - DBG(DBG_M_RS485_SEN, "ADJS(%d) RECV:\r\n", 0x6); - if (dbg_stat_get(DBG_M_RS485_SEN)) - { - buf_print(debug_flash, 0x6); - } - - /* 判断返回值. */ - if (head->cmd != 0x30) - { - return HAL_ERROR; - } - - /* 等待电压电流稳定. */ - osDelay(4000); - return HAL_OK; -} - -static HAL_StatusTypeDef _debug_adj_source_setEx(uint8_t ch_bitmap, uint8_t index, uint16_t elec) -{ - debug_adj_head_t *head = (debug_adj_head_t*)&debug_flash[1]; - uint8_t ch = 0; - uint8_t turn_num = 10; - - /* 以第一个校准通道的校准点为准. */ - for(ch = 0; ch < DAU_PORT_POWER_CNT; ch++) - { - if (IS_MONITOR_BIT_SET(ch_bitmap, ch)) - { - break; - } - } - /* 没有通道被选择直接退出. */ - if (DAU_PORT_POWER_CNT == ch) - { - return HAL_OK; - } - - turn_num = dev_config.ADC_turns[ch]; - if (0 == turn_num) - { - turn_num = 20; - } - - DBG(DBG_M_RS485_SEN, "ADC_base_elec[%d][%d] = %d turn_num = %d\r\n", ch, index, dev_config.ADC_base_elec[ch][index], turn_num); - DBG(DBG_M_RS485_SEN, "ADC_base_elec[%d][%d] / turn_num = %d\r\n", ch, index, dev_config.ADC_base_elec[ch][index]/turn_num); - + /* 填充 buf, 设置电流电压. */ - _debug_adj_source_set_buf(2200000, elec); + _debug_adj_source_set_buf(2200000, debug_adj_power.elec * 1000); /* 发送报文. */ DBG(DBG_M_RS485_SEN, "ADJS(%d) SEND:\r\n", head->len); @@ -926,11 +839,10 @@ static HAL_StatusTypeDef _debug_adj_source_setEx(uint8_t ch_bitmap, uint8_t inde } /* 等待电压电流稳定. */ - osDelay(4000); + osDelay(5000); return HAL_OK; } - /* 自动校准仪器连接. */ static HAL_StatusTypeDef _debug_adj_connect(void) { @@ -1067,28 +979,30 @@ void _debug_adj_power_cal(void) } /* 根据数据查找数据落在哪个分段点上. */ + /* temp 是有效值 */ temp = (double)sqrt(square_sum / DAU_POWER_DATE_LEN); /* 计算系数. */ if (ch < 4) { - dev_config.power_adj[ch] = (uint16_t)(temp * 8000 / (debug_adj_power.elec * 10)); + dev_config.power_adj[ch] = (uint16_t)(temp * 8000 / (debug_adj_power.elec * debug_adj_power.turns * 10)); } else { - dev_config.power_adj[ch] = (uint16_t)(temp * 120000 / (debug_adj_power.elec * 10)); + dev_config.power_adj[ch] = (uint16_t)(temp * 120000 / (debug_adj_power.elec * debug_adj_power.turns * 10)); } if (ch < 4) { - base_elec = debug_adj_power.elec * 14.14 * 2; + base_elec = debug_adj_power.elec * 14.14 * 2 * debug_adj_power.turns; dev_config.power_adj_point[ch] = (uint16_t)((max - min) * 8000 / base_elec); } else { - base_elec = debug_adj_power.elec * 1.414 * 2; + base_elec = debug_adj_power.elec * 1.414 * 2 * debug_adj_power.turns; dev_config.power_adj_point[ch] = (uint16_t)((max - min) * 12000 / base_elec); } + vty_print("\r\nch%d temp=%f elec=%d(A) power_adj=%d power_adj_point=%d\r\n", ch, temp, debug_adj_power.elec, dev_config.power_adj[ch], dev_config.power_adj_point[ch]); } } @@ -1096,10 +1010,6 @@ void _debug_adj_power_cal(void) /* 自动校准处理. */ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap) { - uint8_t i = 0; - uint8_t j = 0; - uint8_t bitmap_new = 0; - if (!bitmap) { return HAL_OK; @@ -1108,157 +1018,22 @@ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap) /* 设置开始操作. */ HAL_E_RETURN(_debug_adj_start()); - //for(i = 0; i < DAU_PORT_POWER_CNT; i++) - for(i = 0; i < 1; i++) + HAL_E_RETURN(_debug_adj_source_set()); + dau_adj_state = DAU_ADJ_STATE_POWER; + while (dau_adj_state != DAU_ADJ_STATE_NONE) { - /* 过滤不需要的通道. */ - if (!IS_MONITOR_BIT_SET(bitmap, i)) - { - continue; - } - - /* 将变比相同的通道归到同一个 bitmap 中. */ - bitmap_new = 0; - for (j = i; j < DAU_PORT_POWER_CNT; j++) - { - if (!IS_MONITOR_BIT_SET(bitmap, j)) - { - continue; - } - - MONITOR_BITMAP_RESET(bitmap, j); - MONITOR_BITMAP_SET(bitmap_new, j); - } - - /* 开始自动校准, 注意不同变比的通道不能一起校准. */ - for (j = 0; j < 1; j++) // 只校准一个分段点 2024/12/11 - { - HAL_E_RETURN(_debug_adj_source_set(bitmap_new, j)); - osDelay(3000); - dau_adj_state = DAU_ADJ_STATE_POWER; - while (dau_adj_state != DAU_ADJ_STATE_NONE) - { - common_watchdog_set(COM_WDG_CLI); - osDelay(2000); - } - DBG(DBG_M_RS485_DEBUG, "capture end...\r\n"); - _debug_adj_power_cal(); - } - } - - /* 关闭校准. */ - HAL_E_RETURN(_debug_adj_close()); - - return HAL_OK; -} - -static HAL_StatusTypeDef _debug_adj_autoEx(uint8_t bitmap, uint16_t elec, uint8_t index) -{ - uint8_t i = 0; - uint8_t j = 0; - uint8_t bitmap_new = 0; - - if (!bitmap) - { - return HAL_OK; - } - - /* 设置开始操作. */ - HAL_E_RETURN(_debug_adj_start()); - - //for(i = 0; i < DAU_PORT_POWER_CNT; i++) - for(i = 0; i < 1; i++) - { - /* 过滤不需要的通道. */ - if (!IS_MONITOR_BIT_SET(bitmap, i)) - { - continue; - } - - /* 将变比相同的通道归到同一个 bitmap 中. */ - bitmap_new = 0; - for (j = i; j < DAU_PORT_POWER_CNT; j++) - { - if (!IS_MONITOR_BIT_SET(bitmap, j)) - { - continue; - } - - MONITOR_BITMAP_RESET(bitmap, j); - MONITOR_BITMAP_SET(bitmap_new, j); - } - - /* 开始自动校准, 注意不同变比的通道不能一起校准. */ - //for (j = 0; j < DAU_POWER_ADJ_CNT; j++) - { - HAL_E_RETURN(_debug_adj_source_setEx(bitmap_new, index-1, elec)); - osDelay(5000); - dau_adj_state = DAU_ADJ_STATE_POWER; - while (dau_adj_state != DAU_ADJ_STATE_NONE) - { - common_watchdog_set(COM_WDG_CLI); - osDelay(2000); - } - DBG(DBG_M_RS485_DEBUG, "capture end...\r\n"); - _debug_adj_power_cal(); - } + common_watchdog_set(COM_WDG_CLI); + osDelay(1000); } + DBG(DBG_M_RS485_DEBUG, "capture end...\r\n"); + _debug_adj_power_cal(); /* 关闭校准. */ HAL_E_RETURN(_debug_adj_close()); - return HAL_OK; } -void _debug_pkt_adj_autoEx(uint16_t elec, uint8_t index) -{ - proto_head_t *head = (proto_head_t*)debug_buf.buf; - debug_adj_set *data = (debug_adj_set*)(debug_buf.buf + sizeof(proto_head_t)); - uint32_t *rt = (uint32_t*)(debug_buf.buf + sizeof(proto_head_t)); - uint32_t *crc = NULL; - HAL_StatusTypeDef rv = HAL_ERROR; - - if (IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_ADJ)) - { - /* 开始自动校准. */ - data->ch_selecet = 1; - if (data->ch_selecet == 1) - { - HAL_GPIO_WritePin(LED_RUN_GPIO_Port, LED_RUN_Pin, GPIO_PIN_SET); - } - rv = _debug_adj_autoEx(data->ch_selecet, elec, index); - if (rv == HAL_OK) - { - /* 完成后保存配置. */ - common_sys_set(COM_SYS_SAVE_CONFIG, 0); - } - - /* 电池电压自动校准. */ - if (data->is_voltage_sel) - { - } - } - else - { - rv = HAL_ERROR; - } - *rt = rv; - - /* 封装报文头. */ - _debug_pkt_head_init(sizeof(proto_head_t) + 4, DEBUG_CT_PRV_REPLY); - - /* 计算校验和. */ - crc = (uint32_t*)(debug_buf.buf + head->len); - *crc = crc32(debug_buf.buf, head->len); - - /* 发送报文 */ - //_debug_pkt_send(head->len + 4, 20); - - return; -} - - /* 实时数据获取报文处理. */ static void _debug_pkt_data_get(void) { @@ -1661,49 +1436,21 @@ static void _debug_pkt_history_data_get(void) } /* 自动校准处理. */ -static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap, uint8_t index) +static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap) { - uint8_t i = 0; - uint8_t j = 0; - - /* 参数检查. */ - if (index >= DAU_POWER_ADJ_CNT) - { - vty_print("@E1\r\n"); - return HAL_ERROR; - } - if (!bitmap) { return HAL_OK; } - for(i = 0; i < DAU_PORT_POWER_CNT; i++) + dau_adj_state = DAU_ADJ_STATE_POWER; + while (dau_adj_state != DAU_ADJ_STATE_NONE) { - /* 过滤不需要的通道. */ - if (!IS_MONITOR_BIT_SET(bitmap, i)) - { - continue; - } - - /* 通道分段点不同, 不能同时校准. */ - for (j = i; j < DAU_PORT_POWER_CNT; j++) - { - if (!IS_MONITOR_BIT_SET(bitmap, j)) - { - continue; - } - - if (dev_config.ADC_base_elec[i][index] != dev_config.ADC_base_elec[j][index]) - { - vty_print("@E2\r\n"); - return HAL_ERROR; - } - } + common_watchdog_set(COM_WDG_CLI); + osDelay(1000); } - + DBG(DBG_M_RS485_DEBUG, "capture end...\r\n"); _debug_adj_power_cal(); - return HAL_OK; } @@ -1711,29 +1458,25 @@ static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap, uint8_t index) static void _debug_pkt_adj_manual(void) { proto_head_t *head = (proto_head_t*)debug_buf.buf; - debug_adj_set *data = (debug_adj_set*)(debug_buf.buf + sizeof(proto_head_t)); - uint32_t *rt = (uint32_t*)(debug_buf.buf + sizeof(proto_head_t)); + dev_adj_power_t *data = (dev_adj_power_t*)(debug_buf.buf + sizeof(proto_head_t)); + dev_adj_power_cfg_t *cfg = (dev_adj_power_cfg_t*)(debug_buf.buf + sizeof(proto_head_t)); uint32_t *crc = NULL; - HAL_StatusTypeDef rv = HAL_ERROR; - if (IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_ADJ)) - { - /* 开始自动校准. */ - rv = _debug_adj_manual(data->ch_selecet, data->manual_index); - if (rv == HAL_OK) - { - /* 完成后保存配置. */ - common_sys_set(COM_SYS_SAVE_CONFIG, 0); - } - } - else + /* 解析数据. */ + memcpy(&debug_adj_power, data, sizeof(dev_adj_power_t)); + + /* 组装数据 */ + cfg->return_value = _debug_adj_manual(debug_adj_power.bitmap); + if (debug_adj_power.is_voltage_adj) { - rv = HAL_ERROR; + ADC_vbat_auto(5000); } - *rt = rv; + memcpy(cfg->power_adj, dev_config.power_adj, 32); + //memcpy(cfg->power_adj_point, dev_config.power_adj_point, 32); + cfg->vin_adj = dev_config.vin_adj; /* 封装报文头. */ - _debug_pkt_head_init(sizeof(proto_head_t) + 4, DEBUG_CT_PRV_REPLY); + _debug_pkt_head_init(sizeof(proto_head_t) + sizeof(dev_adj_power_cfg_t), DEBUG_CT_PRV_REPLY); /* 计算校验和. */ crc = (uint32_t*)(debug_buf.buf + head->len); @@ -1741,6 +1484,9 @@ static void _debug_pkt_adj_manual(void) /* 发送报文 */ _debug_pkt_send(head->len + 4, 20); + + /* 保存参数. */ + common_sys_set(COM_SYS_SAVE_CONFIG, 0); return; } @@ -1858,8 +1604,7 @@ void _debug_pkt_adj_auto(void) memcpy(&debug_adj_power, data, sizeof(dev_adj_power_t)); /* 组装数据 */ - //cfg->return_value = _debug_adj_auto(debug_adj_power.bitmap); - cfg->return_value = 0; + cfg->return_value = _debug_adj_auto(debug_adj_power.bitmap); if (debug_adj_power.is_voltage_adj) { ADC_vbat_auto(5000); @@ -1883,6 +1628,23 @@ void _debug_pkt_adj_auto(void) return; } +void _debug_pkt_adj_auto2(void) +{ + debug_adj_power.bitmap = 1; + debug_adj_power.elec = 5; + debug_adj_power.turns = 10; + debug_adj_power.is_voltage_adj = 1; + + /* 组装数据 */ + _debug_adj_auto(debug_adj_power.bitmap); + if (debug_adj_power.is_voltage_adj) + { + ADC_vbat_auto(5000); + } + return; +} + + /* 设备状态获取报文处理. */ static void _debug_pkt_dev_state_get(void) { diff --git a/CablePositioning_APP_V1.0/Core/Src/cli.c b/CablePositioning_APP_V1.0/Core/Src/cli.c index 1b81ca6..60129e1 100644 --- a/CablePositioning_APP_V1.0/Core/Src/cli.c +++ b/CablePositioning_APP_V1.0/Core/Src/cli.c @@ -640,14 +640,10 @@ static BaseType_t _cli_debug_msg(const char *string) switch(param[0]) { - case 'a': - // 50(1A) 100(2A) 250(5A) 500(10A) 1500(30A) - _debug_pkt_adj_autoEx(50,1); - break; case 'm': - _debug_pkt_adj_auto(); // 一个分段点 100A + //_debug_pkt_adj_auto(); // 一个分段点 100A + _debug_pkt_adj_auto2(); break; - default: vty_print(cli_param_erro); return pdFALSE; @@ -891,9 +887,9 @@ void cli_start(void const * argument) dbg_cmd_hander(DBG_CMD_ON, DBG_M_DAU); //dbg_cmd_hander(DBG_CMD_ON, DBG_M_DAU_TXRX); //dbg_cmd_hander(DBG_CMD_ON, DBG_M_GPS); - dbg_cmd_hander(DBG_CMD_ON, DBG_M_4G); - //dbg_cmd_hander(DBG_CMD_ON, DBG_M_RS485_SEN); - //dbg_cmd_hander(DBG_CMD_ON, DBG_M_RS485_DEBUG); + //dbg_cmd_hander(DBG_CMD_ON, DBG_M_4G); + dbg_cmd_hander(DBG_CMD_ON, DBG_M_RS485_SEN); + dbg_cmd_hander(DBG_CMD_ON, DBG_M_RS485_DEBUG); } /* 初始化 ADC 采样任务. */ diff --git a/CablePositioning_APP_V1.0/Core/Src/dau.c b/CablePositioning_APP_V1.0/Core/Src/dau.c index 03d7916..49947bd 100644 --- a/CablePositioning_APP_V1.0/Core/Src/dau.c +++ b/CablePositioning_APP_V1.0/Core/Src/dau.c @@ -772,7 +772,7 @@ void _dau_power_calculate(DAU_SOURCE_E source) power[ch] = (uint32_t)(temp * 120000 / dev_config.power_adj[ch]); } - vty_print(" %f %d %d\r\n", temp, dev_config.ADC_adj[ch][0], power[ch]); + vty_print(" %f %d %d\r\n", temp, dev_config.power_adj[ch], power[ch]); } if (DAU_SOURCE_REG == source) @@ -848,7 +848,7 @@ int32_t _dau_wave_col_trigger_by_fault(void) /* 置标志位 */ MONITOR_BITMAP_RESET(dau_ctrl.col_flag, DAU_COL_FLAG_FAULT_CMP); -#if 1 +#if 0 uint16_t *buf = (uint16_t*)(&dau_ctrl.buf_dau_rx[2]); uint8_t i = 0; uint8_t j = 0; @@ -1240,7 +1240,7 @@ int32_t _dau_adj_wave_col_trigger_by_reg(void) uint8_t j = 0; uint16_t k = 0; //for(i = 5; i < DAU_PORT_POWER_CNT; i++) - for(i = 5; i < 6; i++) + for(i = 0; i < 1; i++) { common_watchdog_set(COM_WDG_DAU); vty_print("POWER %d\r\n", i); @@ -1260,6 +1260,7 @@ int32_t _dau_adj_wave_col_trigger_by_reg(void) } vty_print("\r\n"); } + vty_print("reg_elec:%d\r\n", dau_ctrl.reg_elec[0]); #endif return rv; }