diff --git a/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h b/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h index 85c624b..7edd75b 100644 --- a/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h +++ b/CablePositioning_APP_V1.0/Core/Inc/RS485_debug.h @@ -109,6 +109,8 @@ extern usart_buf_t debug_buf; 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); #endif /******************* (C) COPYRIGHT LandPower ***** END OF FILE ****************/ diff --git a/CablePositioning_APP_V1.0/Core/Inc/dau.h b/CablePositioning_APP_V1.0/Core/Inc/dau.h index 3a91555..2864731 100644 --- a/CablePositioning_APP_V1.0/Core/Inc/dau.h +++ b/CablePositioning_APP_V1.0/Core/Inc/dau.h @@ -147,8 +147,10 @@ extern dau_ctrl_t dau_ctrl; /* Extern functions ----------------------------------------------------------*/ extern void dau_init(void); +extern void dau_adj_init(void); extern void dau_spi_rw(int8_t rw, uint16_t addr, uint16_t len); extern void dau_show(void); +extern HAL_StatusTypeDef _dau_base_auto(uint8_t ch_bitmap, uint8_t index); #endif /******************* (C) COPYRIGHT LandPower ***** END OF FILE ****************/ diff --git a/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c b/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c index 5cb94bd..20444d3 100644 --- a/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c +++ b/CablePositioning_APP_V1.0/Core/Src/RS485_debug.c @@ -46,6 +46,7 @@ #include "wireless.h" #include "flash_if.h" #include "flash_log.h" +#include "dau.h" /* Private define ------------------------------------------------------------*/ #define DEBUG_FLASH_BUF_SIZE DEBUG_DATA_SIZE @@ -111,6 +112,7 @@ static UART_HandleTypeDef *debug_adj_uart = &huart1; static uint8_t debug_state = 0; /* 远程升级 flash 数据校验使用. */ static uint8_t debug_flash[DEBUG_FLASH_BUF_SIZE]; +extern int8_t g_is_adj_status; /* Private function prototypes -----------------------------------------------*/ /* Internal functions --------------------------------------------------------*/ @@ -164,7 +166,7 @@ void _debug_pkt_head_init(uint16_t len, uint8_t cmdType) } /* 发送数据.. */ -void _debug_pkt_send(uint16_t len, uint8_t debug_len) +void _debug_pkt_send(uint16_t len, uint16_t debug_len) { /* 发送报文 */ HAL_UART_Transmit_IT(debug_uart, debug_buf.buf, len); @@ -558,7 +560,7 @@ static void _debug_pkt_adj_get(void) *crc = crc32(debug_buf.buf, head->len); /* 发送报文 */ - _debug_pkt_send(head->len + 4, 20); + _debug_pkt_send(head->len + 4, head->len + 4); return; } @@ -682,12 +684,15 @@ static HAL_StatusTypeDef _debug_adj_source_set(uint8_t ch_bitmap, uint8_t index) { 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):\r\n", head->len); + 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); @@ -699,7 +704,7 @@ static HAL_StatusTypeDef _debug_adj_source_set(uint8_t ch_bitmap, uint8_t index) /* 接收报文. */ 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):\r\n", 0x6); + DBG(DBG_M_RS485_SEN, "ADJS(%d) RECV:\r\n", 0x6); if (dbg_stat_get(DBG_M_RS485_SEN)) { buf_print(debug_flash, 0x6); @@ -715,6 +720,69 @@ static HAL_StatusTypeDef _debug_adj_source_set(uint8_t ch_bitmap, uint8_t index) 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); + + /* 发送报文. */ + 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_connect(void) @@ -731,7 +799,7 @@ static HAL_StatusTypeDef _debug_adj_connect(void) *crc = _debug_adj_checksum((uint8_t*)head, head->len - 2); /* 发送报文. */ - DBG(DBG_M_RS485_SEN, "ADJS(%d):\r\n", head->len); + DBG(DBG_M_RS485_SEN, "SEND ADJS(%d):\r\n", head->len); if (dbg_stat_get(DBG_M_RS485_SEN)) { buf_print(debug_flash, head->len); @@ -740,11 +808,11 @@ static HAL_StatusTypeDef _debug_adj_connect(void) 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, 0x29, 300)); - DBG(DBG_M_RS485_SEN, "ADJS(%d):\r\n", 0x29); + DBG(DBG_M_RS485_SEN, "RECV ADJS(%d):\r\n", 0x29); if (dbg_stat_get(DBG_M_RS485_SEN)) { buf_print(debug_flash, 0x29); @@ -800,6 +868,7 @@ static HAL_StatusTypeDef _debug_adj_start(void) { MONITOR_BITMAP_SET(system_init_flag, SYS_INIT_ADJ); HAL_UART_Abort(debug_adj_uart); + HAL_GPIO_WritePin(POWER_RS485_GPIO_Port, POWER_RS485_Pin, GPIO_PIN_SET); osDelay(1000); HAL_E_RETURN(_debug_adj_connect()); @@ -817,11 +886,12 @@ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap) { return HAL_OK; } - + /* 设置开始操作. */ HAL_E_RETURN(_debug_adj_start()); - - for(i = 0; i < DAU_PORT_POWER_CNT; i++) + + //for(i = 0; i < DAU_PORT_POWER_CNT; i++) + for(i = 0; i < 1; i++) { /* 过滤不需要的通道. */ if (!IS_MONITOR_BIT_SET(bitmap, i) || 0 == dev_config.ADC_ratio[i]) @@ -844,10 +914,18 @@ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap) } /* 开始自动校准, 注意不同变比的通道不能一起校准. */ - for (j = 0; j < DAU_POWER_ADJ_CNT; j++) + for (j = 0; j < 1; j++) // 只校准一个分段点 2024/12/11 { HAL_E_RETURN(_debug_adj_source_set(bitmap_new, j)); - //HAL_E_RETURN(ADC_base_auto(bitmap_new, j + 1)); + osDelay(3000); + g_is_adj_status = 1; + while (g_is_adj_status != 2) + { + common_watchdog_set(COM_WDG_CLI); + osDelay(2000); + } + DBG(DBG_M_RS485_DEBUG, "capture end...\r\n"); + HAL_E_RETURN(_dau_base_auto(bitmap_new, j + 1)); } } @@ -856,19 +934,82 @@ static HAL_StatusTypeDef _debug_adj_auto(uint8_t bitmap) 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) || 0 == dev_config.ADC_ratio[i]) + { + continue; + } + + /* 将变比相同的通道归到同一个 bitmap 中. */ + bitmap_new = 0; + for (j = i; j < DAU_PORT_POWER_CNT; j++) + { + if (!IS_MONITOR_BIT_SET(bitmap, j) + || dev_config.ADC_ratio[i] != dev_config.ADC_ratio[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); + g_is_adj_status = 1; + while (g_is_adj_status != 2) + { + common_watchdog_set(COM_WDG_CLI); + osDelay(2000); + } + DBG(DBG_M_RS485_DEBUG, "capture end...\r\n"); + HAL_E_RETURN(_dau_base_auto(bitmap_new, index)); + g_is_adj_status = 0; + } + } + + /* 关闭校准. */ + HAL_E_RETURN(_debug_adj_close()); + + + return HAL_OK; +} + /* 自动校准报文处理. */ -static void _debug_pkt_adj_auto(void) +void _debug_pkt_adj_auto(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)); uint32_t *crc = NULL; HAL_StatusTypeDef rv = HAL_ERROR; - + if (IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_ADJ)) { /* 开始自动校准. */ + //data->ch_selecet = 1; rv = _debug_adj_auto(data->ch_selecet); if (rv == HAL_OK) { @@ -900,6 +1041,55 @@ static void _debug_pkt_adj_auto(void) return; } + +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) + { + ADC_vbat_auto(dev_config.vin); + } + } + 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) @@ -1307,7 +1497,7 @@ static HAL_StatusTypeDef _debug_adj_manual(uint8_t bitmap, uint8_t index) } } - //HAL_E_RETURN(ADC_base_auto(bitmap, index + 1)); + HAL_E_RETURN(_dau_base_auto(bitmap, index + 1)); return HAL_OK; } @@ -1489,7 +1679,7 @@ static void _debug_pkt_process(void) return; } -/* Interface functions -------------------------------------------------------*/ +/* Interface functions -------------------------------------------------------*/ /* RS485 传感器主任务循环. */ void debug_start(void) { @@ -1556,7 +1746,7 @@ void debug_start(void) if (dbg_stat_get(DBG_M_RS485_DEBUG)) { buf_print(debug_buf.buf, 28); - } + } /* 报文处理. */ _debug_pkt_process(); diff --git a/CablePositioning_APP_V1.0/Core/Src/cli.c b/CablePositioning_APP_V1.0/Core/Src/cli.c index d9e2179..2dff234 100644 --- a/CablePositioning_APP_V1.0/Core/Src/cli.c +++ b/CablePositioning_APP_V1.0/Core/Src/cli.c @@ -120,6 +120,7 @@ static BaseType_t _cli_save(const char *string); static BaseType_t _cli_show(const char *string); static BaseType_t _cli_spi(const char *string); static BaseType_t _cli_work_mode(const char *string); +static BaseType_t _cli_debug_msg(const char *string); #if LD_DEBUG static BaseType_t _cli_debug(const char *string); @@ -146,6 +147,7 @@ static const CLI_Command_Definition_t cmd_save = {"save", _cli_save, 1}; static const CLI_Command_Definition_t cmd_show = {"show", _cli_show, 2}; static const CLI_Command_Definition_t cmd_test = {"spi", _cli_spi, 3}; static const CLI_Command_Definition_t cmd_work_mode = {"work-mode", _cli_work_mode, 1}; +static const CLI_Command_Definition_t cmd_debug_msg = {"msg", _cli_debug_msg, 1}; /* Internal functions --------------------------------------------------------*/ /* cli获取互斥锁. */ @@ -623,6 +625,39 @@ static BaseType_t _cli_spi(const char *string) return pdFALSE; } +static BaseType_t _cli_debug_msg(const char *string) +{ + const char *param = NULL; + uint8_t param_len = 0; + + param = FreeRTOS_CLIGetParameter(string, 1, (BaseType_t *)¶m_len); + if (NULL == param) + { + vty_print(cli_param_erro); + return pdFALSE; + } + + 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 + break; + + default: + vty_print(cli_param_erro); + return pdFALSE; + } + + vty_print(cli_rv_ok); + return pdFALSE; +} + + + /* 工作模式配置命令. */ static BaseType_t _cli_work_mode(const char *string) { @@ -795,6 +830,7 @@ static void _cli_start(void) FreeRTOS_CLIRegisterCommand(&cmd_show, CLI_NODE_COMMON); FreeRTOS_CLIRegisterCommand(&cmd_test, CLI_NODE_COMMON); FreeRTOS_CLIRegisterCommand(&cmd_work_mode, CLI_NODE_CONFIG); + FreeRTOS_CLIRegisterCommand(&cmd_debug_msg, CLI_NODE_CONFIG); for(;;) { @@ -841,21 +877,36 @@ void cli_start(void const * argument) FLASH_If_Init(); /* 配置系统初始化. */ dev_config_init(); - dev_config_flag_set(DEV_FLAG_CLI); + //dev_config_flag_set(DEV_FLAG_CLI); //dev_config_flag_unset(DEV_FLAG_CLI); + //dev_config_flag_set(DEV_FLAG_ADJ); flash_log_init(); st_init(); /* 公共监控任务初始化. */ common_sys_init(); /* 默认开启的 debug. */ - 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); + if (IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_CLI)) + { + 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); + } + /* 初始化 ADC 采样任务. */ ADC_init(); - /* 初始化 DAU 任务. */ - dau_init(); + if (IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_ADJ)) + { + dau_adj_init(); + } + else + { + /* 初始化 DAU 任务. */ + dau_init(); + } + /* 初始化无线通讯任务. */ if (!IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_ADJ) && !IS_MONITOR_BIT_SET(dev_config.flag, DEV_FLAG_FACTORY)) diff --git a/CablePositioning_APP_V1.0/Core/Src/dau.c b/CablePositioning_APP_V1.0/Core/Src/dau.c index b025da7..b1e2cd9 100644 --- a/CablePositioning_APP_V1.0/Core/Src/dau.c +++ b/CablePositioning_APP_V1.0/Core/Src/dau.c @@ -50,6 +50,7 @@ #include "ADC_collect.h" #include "dau.h" #include "wireless.h" +#include "RS485_debug.h" /* Private define ------------------------------------------------------------*/ #define DAU_WAVE_WAIT_MAX 3 // DAU 波形等待次数 @@ -148,12 +149,21 @@ const osThreadAttr_t dau_gps_attributes = .priority = (osPriority_t) osPriorityNormal, }; +const osThreadAttr_t dau_adj_attributes = +{ + .name = "ADJ", + .stack_size = 160 * 4, + .priority = (osPriority_t) osPriorityNormal, +}; + + /* DAU 全局结构体 */ dau_ctrl_t dau_ctrl; static struct tm _dau_tm; int8_t _dau_spi_rw; uint16_t _dau_spi_addr; uint16_t _dau_spi_len; +int8_t g_is_adj_status = 0; // 1:采集 2:采集完成 /* Private function prototypes -----------------------------------------------*/ /* Internal functions --------------------------------------------------------*/ @@ -856,6 +866,65 @@ void _dau_power_calculate(DAU_SOURCE_E source) //} } +/* dau data base 自动计算. */ +HAL_StatusTypeDef _dau_base_auto(uint8_t ch_bitmap, uint8_t index) +{ + int16_t (*val)[DAU_POWER_DATE_LEN] = dau_ctrl.reg_power; + //uint32_t *power = dau_ctrl.reg_elec; + uint8_t ch = 0; + uint16_t i = 0; + uint64_t square_sum = 0; + int32_t mean_sum = 0; + + if (!ch_bitmap) + { + return HAL_OK; + } + + /* 遍历通道, 计算有效值. */ + index--; + for(ch = 0; ch < DAU_PORT_POWER_CNT; ch++) + { + /* 过滤通道. */ + if (!IS_MONITOR_BIT_SET(ch_bitmap, ch)) + { + continue; + } + + square_sum = 0; + mean_sum = 0; + /* 遍历通道所有值, 求和, 并计算出最大值和最小值. */ + for(i = 0; i < DAU_POWER_DATE_LEN; i++) + { + square_sum += val[ch][i] * val[ch][i]; + mean_sum += val[ch][i]; + } + + /* 计算校准参数. */ + dev_config.ADC_base[ch][index] = (double)sqrt(square_sum / DAU_POWER_DATE_LEN) - abs(mean_sum / DAU_POWER_DATE_LEN); + if (0 == index) + { + dev_config.ADC_adj[ch][index] = (uint16_t)(dev_config.ADC_base_elec[ch][index] * 32768 / (dev_config.ADC_base[ch][index] * dev_config.ADC_ratio[ch] * 1.414)); + } + else + { + square_sum = (uint64_t)(dev_config.ADC_base_elec[ch][index] - dev_config.ADC_base_elec[ch][index - 1]) * 32768; + dev_config.ADC_adj[ch][index] = (uint16_t)(square_sum / ((dev_config.ADC_base[ch][index] - dev_config.ADC_base[ch][index - 1]) * dev_config.ADC_ratio[ch] * 1.414)); + } + + /* 调试打印. */ + if (dbg_stat_get(DBG_M_DAU)) + { + DBG(DBG_M_DAU, "ADC_base[%d][%d] = %f \r\n", ch, index, dev_config.ADC_base[ch][index]); + DBG(DBG_M_DAU, "ADC_base_elec[%d][%d] = %d \r\n", ch, index, dev_config.ADC_base_elec[ch][index]); + DBG(DBG_M_DAU, "ADC_adj[%d][%d] = %d \r\n", ch, index, dev_config.ADC_adj[ch][index]); + } + } + + return HAL_OK; +} + + /* description: 故障触发波形采集 param: return: HAL_xxx */ @@ -1147,6 +1216,78 @@ static void _dau_start(void *argument) } } +/* description: DAU 校准任务循环 + param: + return: */ +static void _dau_adj_start(void *argument) +{ + //uint16_t *buf = (uint16_t*)(&dau_ctrl.buf_dau_rx[2]); + uint16_t *buf = NULL; + //uint32_t addr = 0; + uint8_t i = 0; + uint8_t j = 0; + uint16_t k = 0; + int32_t rv = HAL_ERROR; + + /* 状态初始化 */ + _dau_init(); + + for (;;) + { + osDelay(10000); + common_watchdog_set(COM_WDG_DAU); + + if (g_is_adj_status == 1) + { + memset(dau_ctrl.reg_power, 0, sizeof(dau_ctrl.reg_power)); + /* 读取全局状态寄存器 */ + rv = _dau_reg_read_global_state(); + if (rv != HAL_OK) + { + vty_print("rv=%d\r\n", rv); + continue; + } + + /* 循环工频缺陷电流采集 */ + dau_ctrl.col_time = 600000; + MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_FAULT_CMP); + MONITOR_BITMAP_SET(dau_ctrl.col_flag, DAU_COL_FLAG_REG_CMP); + _dau_wave_col_trigger_by_reg(); +#if 1 + //for(i = 0; i < DAU_PORT_POWER_CNT; i++) + for(i = 0; i < 1; i++) + { + vty_print("POWER %d\r\n", i); + buf = (uint16_t*)dau_ctrl.reg_power[i]; + for(j = 0; j < DAU_PKT_POWER_CNT; j++) + { + common_watchdog_set(COM_WDG_DAU); + for(k = 0; k < 512;) + { + vty_print("%-04x ", buf[k++]); + if(0 == (j*512+k ) % 40) + { + osDelay(100); + vty_print("\r\n"); + } + } + /*if((j*512+k ) % 40 != 0) + { + osDelay(100); + vty_print("\r\n"); + }*/ + buf += 512; + } + vty_print("\r\n"); + } +#endif + g_is_adj_status = 2; + _dau_base_auto(1, 0); + } + } +} + + /* description: GPS 报文处理 ($GNZDA,235949.012,05,01,1980,,*4F) param: return: */ @@ -1291,6 +1432,16 @@ void dau_init(void) dau_ctrl.gps_handle = osThreadNew(_dau_gps_start, NULL, &dau_gps_attributes); } +/* description: DAU 采集校准任务初始化 + param: + return: */ +void dau_adj_init(void) +{ + dau_ctrl.dau_handle = osThreadNew(_dau_adj_start, NULL, &dau_adj_attributes); + dau_ctrl.gps_handle = osThreadNew(_dau_gps_start, NULL, &dau_gps_attributes); +} + + /* description: spi 接口测试函数 param: return: */ diff --git a/CablePositioning_APP_V1.0/Core/Src/dev_config.c b/CablePositioning_APP_V1.0/Core/Src/dev_config.c index de4cbd9..bfd5e00 100644 --- a/CablePositioning_APP_V1.0/Core/Src/dev_config.c +++ b/CablePositioning_APP_V1.0/Core/Src/dev_config.c @@ -143,7 +143,8 @@ static HAL_StatusTypeDef _dev_config_default_set(void) if (i < 4) { dev_config.ADC_ratio[i] = 60; - dev_config.ADC_base_elec[i][0] = 1000; + //dev_config.ADC_base_elec[i][0] = 1000; + dev_config.ADC_base_elec[i][0] = 100000; // 100A 只校准一个分段点,其他不用 dev_config.ADC_base_elec[i][1] = 2000; dev_config.ADC_base_elec[i][2] = 5000; dev_config.ADC_base_elec[i][3] = 10000; diff --git a/CablePositioning_APP_V1.0/Core/Src/usart.c b/CablePositioning_APP_V1.0/Core/Src/usart.c index 27b095b..19c6806 100644 --- a/CablePositioning_APP_V1.0/Core/Src/usart.c +++ b/CablePositioning_APP_V1.0/Core/Src/usart.c @@ -87,7 +87,7 @@ void MX_USART1_UART_Init(void) /* USER CODE END USART1_Init 1 */ huart1.Instance = USART1; - huart1.Init.BaudRate = 115200; + huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE;