From 2ba4fc16b7e986a0c536873c3e1cebef6c55d633 Mon Sep 17 00:00:00 2001 From: yhf Date: Sun, 19 Jul 2026 15:37:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=94=B5=E5=AD=90?= =?UTF-8?q?=E8=B4=9F=E8=BD=BD=E9=80=9A=E4=BF=A1=E7=9B=B8=E5=85=B3=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=B9=B6=E4=BC=98=E5=8C=96=E6=89=B9=E9=87=8F=E5=8F=91?= =?UTF-8?q?=E9=80=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 修改apps/chrg/applications/utils/chrg_eload.c:移除idx为0时的LCD显示条件代码,修复文件末尾换行缺失 2. 修改apps/chrg/applications/thread/chrg_comm.c:移除冗余的全局指针变量,优化调试打印信息 3. 修改apps/chrg/applications/thread/chrg_roll_sou.c:新增电流命令覆盖逻辑,优化线程接收超时配置,移除不必要的延时 --- apps/chrg/applications/thread/chrg_comm.c | 4 +- apps/chrg/applications/thread/chrg_roll_sou.c | 370 ------------------ apps/chrg/applications/utils/chrg_eload.c | 3 +- 3 files changed, 2 insertions(+), 375 deletions(-) diff --git a/apps/chrg/applications/thread/chrg_comm.c b/apps/chrg/applications/thread/chrg_comm.c index e266dbe..429bb4d 100644 --- a/apps/chrg/applications/thread/chrg_comm.c +++ b/apps/chrg/applications/thread/chrg_comm.c @@ -537,8 +537,6 @@ eMBException funcReadHoldingRegister (rt_uint8_t *reqFrame, rt_uint16_t reqLen, rt_uint8_t *resFrame, rt_uint16_t *resLen) { rt_uint16_t regAddress = 0, cntReg = 0; - struct chrg_north_t *pNOR = &chrgnorth; - struct chrg_switch_t *pSW = &pNOR->sw[0]; eMBException eStatus = MB_EX_NONE; eMBErrorCode eRegStatus; @@ -562,7 +560,7 @@ eMBException funcReadHoldingRegister (rt_uint8_t *reqFrame, rt_uint16_t reqLen, } else { *resLen = 3+cntReg * 2; } - rt_kprintf("------COM VOLT =%d -------\n------COM CURR =%d-------", pSW->Now_voltage,pSW->Now_current); + rt_kprintf("------COM READ addr=%d count=%d-------\n", regAddress, cntReg); return eStatus; } diff --git a/apps/chrg/applications/thread/chrg_roll_sou.c b/apps/chrg/applications/thread/chrg_roll_sou.c index 33700bf..a141d7a 100644 --- a/apps/chrg/applications/thread/chrg_roll_sou.c +++ b/apps/chrg/applications/thread/chrg_roll_sou.c @@ -1,373 +1,3 @@ -// /**************************************************************************** -// 文件名称 : chrg_roll_sou.c -// 完成日期 : -// 当前版本号 : V1.0 -// 主要功能 : 实现南向通信轮巡请求命令。以独立线程处理。 -// 版本历史 : 创建原始版本 -// 说明 : -// ******************************************************************************/ - -// #include -// #include -// #include - -// #include "chrg_def.h" -// #include "chrg_led.h" -// #include "chrg_thread.h" -// #include "chrg_roll_sou.h" -// #include "chrg_eload.h" -// #include "chrg_utils.h" - -// #define LOG_TAG "chrg.rollsou" -// #include - -// struct chrg_rollsou_t chrgrollsou = { -// .run = RUN_AUTO, -// .ch = IDX_SOU_CH1, -// .part = MB_R_PART1, -// .mode = 0, -// }; - -// #define SOU_CMD_QUEUE_SIZE 4 - -// struct chrg_sou_cmd_t { -// eIDX_SOU_CH ch; -// rt_uint16_t reg; -// rt_uint16_t value; -// }; - -// static struct chrg_sou_cmd_t sou_cmd_queue[SOU_CMD_QUEUE_SIZE]; -// static rt_uint8_t sou_cmd_head = 0; -// static rt_uint8_t sou_cmd_tail = 0; -// static rt_uint8_t sou_cmd_count = 0; - -// static void sou_cmd_enqueue(eIDX_SOU_CH ch, rt_uint16_t reg, rt_uint16_t value) -// { -// if (sou_cmd_count < SOU_CMD_QUEUE_SIZE) { -// sou_cmd_queue[sou_cmd_tail].ch = ch; -// sou_cmd_queue[sou_cmd_tail].reg = reg; -// sou_cmd_queue[sou_cmd_tail].value = value; -// sou_cmd_tail = (sou_cmd_tail + 1) % SOU_CMD_QUEUE_SIZE; -// sou_cmd_count++; -// } else { -// LOG_W("sou command queue full, drop command\n"); -// } -// } - -// static int sou_cmd_dequeue(struct chrg_sou_cmd_t *cmd) -// { -// if (sou_cmd_count == 0) { -// return -1; -// } - -// cmd->ch = sou_cmd_queue[sou_cmd_head].ch; -// cmd->reg = sou_cmd_queue[sou_cmd_head].reg; -// cmd->value = sou_cmd_queue[sou_cmd_head].value; -// sou_cmd_head = (sou_cmd_head + 1) % SOU_CMD_QUEUE_SIZE; -// sou_cmd_count--; -// return 0; -// } - -// static int sou_cmd_exists(void) -// { -// return sou_cmd_count > 0; -// } - -// /***************************************************************** -// 函数名称: chrg_set_sou_reg -// 函数描述: 南向通道设置寄存器请求命令 -// 输入参数: idx:通道 reg:寄存器地址 value:寄存器值 -// 输出参数: - -// 返回说明: - -// 其它说明: - -// *****************************************************************/ -// void chrg_set_sou_reg (eIDX_SOU_CH idx, rt_uint16_t reg, rt_uint16_t value) -// { -// struct chrg_thread_t *pTHR = &chrgthr[IDX_THR_ROLL_SOU]; -// struct chrg_rollsou_t *pROLL = &chrgrollsou; - -// rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER); -// sou_cmd_enqueue(idx, reg, value); -// pROLL->run = RUN_LCD; -// rt_mutex_release(pTHR->mutex); -// rt_kprintf("ch=:%d,reg=%02x,value=%02x\n",idx,reg,value); -// } - -// /***************************************************************** -// 函数名称: chrg_send_sou_upadata_data -// 函数描述: 南向通道升级命令 -// 输入参数: idx:通道 reg:寄存器地址 value:寄存器值 -// 输出参数: - -// 返回说明: - -// 其它说明: - -// *****************************************************************/ -// void chrg_send_sou_upadata_data (rt_uint8_t *buf,rt_uint16_t leng) -// { -// struct chrg_thread_t *pTHR = &chrgthr[IDX_THR_ROLL_SOU]; -// struct chrg_rollsou_t *pROLL = &chrgrollsou; -// pROLL->updata_data = buf; -// pROLL->leng = leng; -// // rt_kprintf("idx=%d,reg=%02x,value=%02x\n",RUN_UPDATAidx,reg,value); -// rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER); -// pROLL->run = RUN_UPDATA; -// rt_mutex_release(pTHR->mutex); -// } - -// ///***************************************************************** -// //函数名称: chrg_set_sou_more_reg -// //函数描述: 南向通道设置寄存器请求命令 -// //输入参数: idx:通道 reg:寄存器地址 value:寄存器值 value2:第二个寄存器值 -// //输出参数: - -// //返回说明: - -// //其它说明: - -// //*****************************************************************/ -// //void chrg_set_sou_more_reg (eIDX_SOU_CH idx, rt_uint16_t reg, rt_uint16_t value,rt_uint16_t value2) -// //{ -// // struct chrg_thread_t *pTHR = &chrgthr[IDX_THR_ROLL_SOU]; -// // struct chrg_rollsou_t *pROLL = &chrgrollsou; -// // pROLL->more_reg_flag = 1; // 使用多寄存器标志位 -// // pROLL->ch = idx; -// // pROLL->reg = reg; -// // pROLL->value = value; -// // pROLL->value2 = value2; -// // rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER); -// // pROLL->run = RUN_LCD; -// // rt_mutex_release(pTHR->mutex); -// //} -// /***************************************************************** -// 函数名称: chrg_roll_sou_thread_entry -// 函数描述: 南向通道轮巡请求数据线程体 -// 输入参数: *data: 本线程信息 -// 输出参数: - -// 返回说明: - -// 其它说明: - -// *****************************************************************/ -// rt_uint8_t aaaaaa = 0; -// void chrg_roll_sou_thread_entry (void *data) -// { -// struct chrg_thread_t *pTHR = (struct chrg_thread_t *)data; - -// if (RT_NULL == pTHR) { -// return ; -// } - -// rt_uint8_t run = 0; -// rt_uint8_t index = 0, idx = 0; -// rt_err_t ret = RT_EOK; -// struct chrg_rollsou_t *pROLL = &chrgrollsou; -// struct chrg_thread_t *pTS = &chrgthr[IDX_THR_SOUTH]; -// struct mb_msg_t *pMB_R = RT_NULL; -// rt_uint8_t number = 0; -// while (1) { -// /* 每轮先非阻塞排空积压消息,防止邮箱满导致 south 线程永久阻塞 */ -// { -// rt_uint8_t drain_cnt = 0; -// struct mb_msg_t *pDrain = RT_NULL; -// while (drain_cnt < 8) { -// ret = rt_mb_recv(pTS->mb, (rt_uint32_t *)&pDrain, 0); -// if (ret != RT_EOK) break; -// if (pDrain != RT_NULL) { -// if (pDrain->payload != RT_NULL) rt_free(pDrain->payload); -// rt_free(pDrain); -// } -// drain_cnt++; -// } -// } - -// rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER); -// run = pROLL->run; -// rt_mutex_release(pTHR->mutex); -// switch (run) { -// // rt_kprintf("-------- ROLL SOU TIME START \n --------"); -// case RUN_AUTO: { -// if(pROLL->mode!=0){ - -// }else{ -// idx = index%(TOTAL_SOU_CHS); // [0, 3] -// // rt_kprintf("start_idx = %d",idx); -// if (0 == chrgsouth.enable[idx]) { // 通道未启用 -// index++; -// rt_thread_mdelay(5); -// continue; -// } else { // 通道启用 -// chrg_led_flashing(IDX_LED3, TIMES_ONE, PULSE_TIME*2, PULSE_TIME*2); -// if (idx != (rt_uint8_t)pROLL->idx) { -// pROLL->idx = (eIDX_SOU_CH)idx; -// chrg_south_switch((eIDX_SOU_CH)idx); -// pROLL->part = MB_R_PART1; -// } -// chrg_eload_refresh(ID_ELOAD, pROLL->part); -// if (pROLL->part < TOTAL_MB_R) { -// //pROLL->part++; -// //if (pROLL->part > MB_R_PART1) { // 仅1条,若需轮巡全部,注释此条件 -// index++; -// //} -// } else { -// index++; -// } -// } -// } -// } -// break; - -// case RUN_LCD: { -// struct chrg_sou_cmd_t cmd; -// rt_uint8_t do_cmd = 0; -// rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER); -// if (sou_cmd_dequeue(&cmd) == 0) { -// do_cmd = 1; -// pROLL->ch = cmd.ch; -// } -// rt_mutex_release(pTHR->mutex); -// if (do_cmd) { -// chrg_south_switch(cmd.ch); -// chrg_eload_write_reg(ID_ELOAD, cmd.reg, cmd.value); -// } -// rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER); -// if (!sou_cmd_exists()) { -// pROLL->run = RUN_AUTO; -// } -// rt_mutex_release(pTHR->mutex); -// } -// break; - -// case RUN_CONSOLE: { -// chrg_south_switch((eIDX_SOU_CH)pROLL->ch); -// chrg_eload_refresh(ID_ELOAD, pROLL->part); -// } -// break; -// case RUN_UPDATA:{ -// chrg_south_switch((eIDX_SOU_CH)pROLL->ch); -// if(pROLL->send_flag==1){ -// chrg_eload_send_ymodem_data(pROLL->updata_data,pROLL->leng); -// pROLL->send_flag = 0; -// } -// /* 升级模式不下发Modbus邮件,等待south线程捕获ymodem应答后继续 */ -// rt_thread_mdelay(50); -// continue; -// } -// break; -// case RUN_COM: { -// chrg_south_switch((eIDX_SOU_CH)pROLL->ch); -// chrg_eload_write_reg(ID_ELOAD, pROLL->reg, pROLL->value); -// } -// break; -// case RUN_NONE: -// default: -// rt_thread_mdelay(5); -// continue; -// break; -// } - -// ret = rt_mb_recv(pTS->mb, (rt_uint32_t *)&pMB_R, 100 ); // 超时 200ms -// if ((RT_EOK == ret)&&(RT_NULL != pMB_R)) { // 存在返回数据 -// if (0 == mb_crc16(pMB_R->payload, pMB_R->length)) { -// if (RUN_AUTO != run) { // 恢复自动轮巡或继续执行待发命令 -// rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER); -// pROLL->run = sou_cmd_exists() ? RUN_LCD : RUN_AUTO; -// rt_mutex_release(pTHR->mutex); -// } -// else { // 自动轮巡态,分析接收的数据 -// #if DEBUG_SOUTH -// rt_kprintf("length = %d",pMB_R->length); -// #endif -// if(pMB_R->length!=43){//31修改成43,一共19个寄存器*2+4,多读了4位 -// ret = rt_mb_recv(pTS->mb, (rt_uint32_t *)&pMB_R, 30); // 超时 200ms -// #if DEBUG_SOUTH -// rt_kprintf("ret = %d\n",ret); -// #endif -// if ((RT_EOK == ret)&&(RT_NULL != pMB_R)) { // 存在返回数据 -// chrg_eload_parse(idx, pROLL->part, pMB_R->payload, pMB_R->length); -// } -// } -// else chrg_eload_parse(idx, pROLL->part, pMB_R->payload, pMB_R->length); -// } -// } -// else { -// LOG_E("crc failed."); -// } - -// if (RT_NULL != pMB_R->payload) { -// rt_free(pMB_R->payload); -// pMB_R->payload = RT_NULL; -// } - -// if (RT_NULL != pMB_R) { -// rt_free(pMB_R); -// pMB_R = RT_NULL; -// } -// // rt_thread_mdelay(200); // 间隔 20ms -// rt_thread_mdelay(10); // 间隔 200ms -// } else { // 设备应答超时 -// if (RUN_AUTO != run) { // 非自动轮巡 -// rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER); -// pROLL->run = sou_cmd_exists() ? RUN_LCD : RUN_AUTO; // 切换会自动轮巡或继续执行待发命令 -// rt_mutex_release(pTHR->mutex); -// } -// } -// // rt_kprintf("-------- ROLL SOU TIME END\n --------"); -// } -// } - -// #if 1 -// static int south_send(rt_uint8_t argc, char **argv) -// { -// int ch = 0, pt = 0; - -// if (3 != argc) { -// rt_kprintf("help : %s [0-3] [0-1]\r\n", argv[0]); -// return -1; -// } - -// ch = (rt_uint8_t)atoi(argv[1]); -// if ((ch < 0)||(ch >= TOTAL_SOU_CHS)) { -// rt_kprintf("help : %s [0-3] [0-1]\r\n", argv[0]); -// return -1; -// } - -// pt = (rt_uint8_t)atoi(argv[2]); -// if ((pt < 0)||(pt >= TOTAL_MB_R)) { -// rt_kprintf("help : %s [0-3] [0-1]\r\n", argv[0]); -// return -1; -// } - -// struct chrg_rollsou_t *pROLL = &chrgrollsou; -// pROLL->run = RUN_CONSOLE; -// pROLL->ch = (rt_uint8_t)ch; -// pROLL->part = (rt_uint8_t)pt; - - -// return 0; -// } - -// MSH_CMD_EXPORT(south_send, south send test); - -// static int south_run (int argc, char **argv) -// { -// if (2 != argc) { -// rt_kprintf("help : %s start|stop\r\n", argv[0]); -// return -1; -// } - -// struct chrg_rollsou_t *pROLL = &chrgrollsou; - -// if (rt_strcmp(argv[1], "start") == 0) { -// pROLL->run = RUN_AUTO; -// } else if (rt_strcmp(argv[1], "stop") == 0) { -// pROLL->run = RUN_NONE; -// } else { -// rt_kprintf("help : %s start|stop\r\n", argv[0]); -// return -1; -// } - -// return 0; -// } - -// MSH_CMD_EXPORT(south_run, south auto run); - -// #endif - - /**************************************************************************** 文件名称 : chrg_roll_sou.c 完成日期 : diff --git a/apps/chrg/applications/utils/chrg_eload.c b/apps/chrg/applications/utils/chrg_eload.c index d5986ef..12f822f 100644 --- a/apps/chrg/applications/utils/chrg_eload.c +++ b/apps/chrg/applications/utils/chrg_eload.c @@ -278,7 +278,6 @@ int chrg_eload_parse (rt_uint8_t idx, rt_uint8_t pt, rt_uint8_t *data, rt_uint16 pLOAD->Ripple = swap_u16(pP1->Ripple); pSW->Now_voltage = pLOAD->voltage; pSW->Now_current = pLOAD->current; - if(idx == 0) #if LCD_OPEN // for(int i = 0;i<4;i++){ // if(pNOR->sw[i].change_flag == 0x01){ @@ -391,4 +390,4 @@ void LCD_SHOW(rt_uint8_t idx, struct eload_p1_t *pP1, struct chrg_eload_t *pLOAD case SHOW_DZF: Show_DZF(idx, pLOAD, tmp, online,vzf); pSW->show_step = SHOW_STATUS; break; } chrg_lcd_send(tmp); -} \ No newline at end of file +}