From ac7e06bbd20f8807916f8f1db361805664251cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BF=B1=20=E6=B2=88?= <2401809606@qq.com> Date: Sun, 15 Feb 2026 20:45:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=A1=E6=81=AF=E4=BF=AE=E6=94=B9,=E9=80=9A?= =?UTF-8?q?=E8=AE=AF,=E6=98=BE=E7=A4=BA=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .settings/language.settings.xml | 2 +- applications/PLC_link.c | 16 +++++++++++++++- applications/SCCM_link.c | 4 +++- applications/data/SC828_DATA_table.c | 12 +++++++----- applications/data/SC828_DATA_table.h | 3 +++ applications/data/Variable.c | 24 ++++++++++++------------ applications/data/Variable.h | 22 +++++++++++----------- applications/lvgl/lv__user_gui.c | 18 ++++++++++++++++-- applications/lvgl/lv_port_disp.c | 12 ++++++------ applications/lvgl/ui_data_labels.c | 2 +- applications/sdram/sdram_port.c | 3 ++- applications/sql/DB_SQLite.c | 2 +- drivers/board.c | 4 ++-- drivers/board.h | 10 ++++++++-- drivers/ltdc.c | 2 +- 15 files changed, 89 insertions(+), 47 deletions(-) diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index fba71f2..87b2450 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/applications/PLC_link.c b/applications/PLC_link.c index f585cc2..6b8e990 100644 --- a/applications/PLC_link.c +++ b/applications/PLC_link.c @@ -38,6 +38,7 @@ static void mb_plc_read_regs(mb_inst_t *hinst) { if (mb_connect(hinst) < 0)//连接失败, 延时返回 { + PLCLINK_OK = 0; LOG_E("modbus connect fail."); return; } @@ -47,12 +48,15 @@ static void mb_plc_read_regs(mb_inst_t *hinst) //读取 Modbus bits int mrx = mb_read_bits(hinst, 2000, DI_TABLE_SIZE, r_buffer); if (mrx > 0) - { //解包到数据表 + { + PLCLINK_OK = 1; + //解包到数据表 for (int i = 0; i < DI_TABLE_SIZE; i++) { di_table[i].current_state = (r_buffer[i / 8] >> (i % 8)) & 1; } }else { + PLCLINK_OK = 0; rt_thread_mdelay(500); } @@ -73,8 +77,12 @@ static void mb_plc_read_regs(mb_inst_t *hinst) int mwy = mb_write_bits(hinst, 2256, DO_TABLE_SIZE, w_buffer); if (mwy ==0) { + PLCLINK_OK = 0; rt_thread_mdelay(500); } + else{ + PLCLINK_OK = 1; + } //输入寄存器d0->6000 //u16 r_regsD[AI_TABLE_SIZE]; @@ -82,11 +90,13 @@ static void mb_plc_read_regs(mb_inst_t *hinst) int mrd = mb_read_regs(hinst, 6000, AI_TABLE_SIZE, r_regsD); if (mrd > 0) { + PLCLINK_OK = 1; for (int i = 0; i < AI_TABLE_SIZE; i++) { ai_table[i].current_Value = r_regsD[i]; } }else { + PLCLINK_OK = 0; rt_thread_mdelay(500); } @@ -100,8 +110,12 @@ static void mb_plc_read_regs(mb_inst_t *hinst) int mwd = mb_write_regs(hinst, 6100, AO_TABLE_SIZE, w_regsD); if (mwd == 0) { + PLCLINK_OK = 0; rt_thread_mdelay(500); } + else{ + PLCLINK_OK = 1; + } } extern struct rt_memheap sram_DTCMRAM,sdram_heap; diff --git a/applications/SCCM_link.c b/applications/SCCM_link.c index 8d6cb10..7da1ee0 100644 --- a/applications/SCCM_link.c +++ b/applications/SCCM_link.c @@ -13,6 +13,7 @@ #include #include "data_comm.h" #include +#include "SC828_DATA_table.h" #define DBG_TAG "SCCM_link" #define DBG_LVL DBG_LOG @@ -58,6 +59,7 @@ void uart_thread_entry(void *parameter) if (len > 0) { + SCLINK_OK=1; // 动态分配请求结构体(见之前完整代码) struct proc_request *req = rt_malloc(sizeof(struct proc_request)); if (!req) continue; @@ -68,7 +70,7 @@ void uart_thread_entry(void *parameter) if (rt_mq_send(request_mq, &req, sizeof(req)) == RT_EOK) { // 等待处理完成 - if (rt_mq_recv(response_mq, &req, sizeof(req), 500) >= RT_EOK) + if (rt_mq_recv(response_mq, &req, sizeof(req), 1000) >= RT_EOK) { if(req->output_len>0) rs485_send(hinst, req->output, req->output_len); } diff --git a/applications/data/SC828_DATA_table.c b/applications/data/SC828_DATA_table.c index 0571e4f..a02c843 100644 --- a/applications/data/SC828_DATA_table.c +++ b/applications/data/SC828_DATA_table.c @@ -210,6 +210,8 @@ const unsigned char DO_TABLE_SIZE = sizeof(do_table) / sizeof(do_table[0]); const unsigned char AI_TABLE_SIZE = sizeof(ai_table) / sizeof(ai_table[0]); const unsigned char AO_TABLE_SIZE = sizeof(ao_table) / sizeof(ao_table[0]); const unsigned char DATA_TABLE_SIZE = sizeof(data_table) / sizeof(data_table[0]); +int8_t PLCLINK_OK = 0; +int8_t SCLINK_OK = 0; //步骤数据表最大 //IO_STEP_DATA step_table[256] ; @@ -399,11 +401,11 @@ void table_thread_entry(void *parameter) rt_thread_delay(500); //Ai输入 - MTT = get_ai_value(4001)/10.0f; - MUT = get_ai_value(4002)/10.0f; - STTA = get_ai_value(4003)/10.0f; - STTB = get_ai_value(4004)/10.0f; - STTC = get_ai_value(4005)/10.0f; + MTT = get_ai_value(4001);///浮点 + MUT = get_ai_value(4002);///浮点 + STTA = get_ai_value(4003);///浮点 + STTB = get_ai_value(4004);///浮点 + STTC = get_ai_value(4005);///浮点 MTL = get_ai_value(4007); STLA = get_ai_value(4008); STLB = get_ai_value(4009); diff --git a/applications/data/SC828_DATA_table.h b/applications/data/SC828_DATA_table.h index 9cb5dd0..5fd1cfd 100644 --- a/applications/data/SC828_DATA_table.h +++ b/applications/data/SC828_DATA_table.h @@ -70,6 +70,9 @@ extern IO_State_DATA data_table[]; //extern IO_STEP_DATA step_table[256]; extern IO_STEP_DATA *step_table; +extern int8_t PLCLINK_OK;//plc连接状态 +extern int8_t SCLINK_OK;//中控连接 + extern const unsigned char DI_TABLE_SIZE; extern const unsigned char DO_TABLE_SIZE; extern const unsigned char AI_TABLE_SIZE; diff --git a/applications/data/Variable.c b/applications/data/Variable.c index 5c92550..62bbcba 100644 --- a/applications/data/Variable.c +++ b/applications/data/Variable.c @@ -41,18 +41,18 @@ unsigned int UserInfoStart = 900; unsigned int RUN = 0; unsigned int STEPID = 0; -// 浮点变量 -float MTT = 0.0f;//主缸温度 -float MTL = 0.0f;//主缸水位 -float MTH = 6.0f;//主缸ph -float MST = 0.0f;//目标温度 -float MUT = 0.0f;//主缸温度2 -float STTA = 0.0f;//料a温度 -float STLA = 0.0f;//料a水位 -float STTB = 0.0f;//料b温度 -float STLB = 0.0f;//料b水位 -float STTC = 0.0f;//料c温度 -float STLC = 0.0f;//料c水位 +// 需要小数点变量 +unsigned int MTT = 0;//主缸温度 +unsigned int MTL = 0;//主缸水位 +unsigned int MTH = 6;//主缸ph +unsigned int MST = 0;//目标温度 +unsigned int MUT = 0;//主缸温度2 +unsigned int STTA = 0;//料a温度 +unsigned int STLA = 0;//料a水位 +unsigned int STTB = 0;//料b温度 +unsigned int STLB = 0;//料b水位 +unsigned int STTC = 0;//料c温度 +unsigned int STLC = 0;//料c水位 // 控制输出 unsigned int Pump = 0;//主泵 diff --git a/applications/data/Variable.h b/applications/data/Variable.h index eb6e636..cf75683 100644 --- a/applications/data/Variable.h +++ b/applications/data/Variable.h @@ -64,17 +64,17 @@ extern unsigned int P9; extern unsigned int P10; // ===== 浮点数变量 ===== -extern float MTT; -extern float MTL; -extern float MTH; -extern float MST; -extern float MUT; -extern float STTA; -extern float STLA; -extern float STTB; -extern float STLB; -extern float STTC; -extern float STLC; +extern unsigned int MTT; +extern unsigned int MTL; +extern unsigned int MTH; +extern unsigned int MST; +extern unsigned int MUT; +extern unsigned int STTA; +extern unsigned int STLA; +extern unsigned int STTB; +extern unsigned int STLB; +extern unsigned int STTC; +extern unsigned int STLC; extern unsigned int P1; extern unsigned int P2; extern unsigned int P3; diff --git a/applications/lvgl/lv__user_gui.c b/applications/lvgl/lv__user_gui.c index 153e324..07509e1 100644 --- a/applications/lvgl/lv__user_gui.c +++ b/applications/lvgl/lv__user_gui.c @@ -21,6 +21,7 @@ #include #include "lvgl.h" #include +#include "SC828_DATA_table.h" #define DBG_TAG "gui" #define DBG_LVL DBG_LOG @@ -56,13 +57,26 @@ void setup_s_screen(lv_ui *ui) //工单 lv_label_set_text(ui->screen_order, (const char *)Work); //水位 - snprintf(wter_str, sizeof(wter_str), "%04.0f", MTL); + snprintf(wter_str, sizeof(wter_str), "%04.0f", MTL/10.0f); lv_label_set_text(ui->screen_water, (const char *)wter_str); //温度 - snprintf(temp_str, sizeof(temp_str), "%05.1f", MTT); + snprintf(temp_str, sizeof(temp_str), "%05.1f", MTT/10.0f); lv_label_set_text(ui->screen_temp, (const char *)temp_str); + if(SCLINK_OK)//中央连接状态显示 + { + lv_obj_clear_flag(ui->screen_inf_link, LV_OBJ_FLAG_HIDDEN); + SCLINK_OK =0; + }else{ + lv_obj_add_flag(ui->screen_inf_link, LV_OBJ_FLAG_HIDDEN); + } + if(PLCLINK_OK)//plc连接状态显示 + { + + }else{ + + } update_led_i(); update_led_o(); diff --git a/applications/lvgl/lv_port_disp.c b/applications/lvgl/lv_port_disp.c index 356386e..39c3508 100644 --- a/applications/lvgl/lv_port_disp.c +++ b/applications/lvgl/lv_port_disp.c @@ -61,7 +61,7 @@ static lv_color_t *buf_3_2 = RT_NULL; /********************** * GLOBAL FUNCTIONS **********************/ -extern struct rt_memheap sdram_heap; // +extern struct rt_memheap sdram_lcd; // void lv_port_disp_init(void) { /*------------------------- @@ -128,21 +128,21 @@ void lv_port_disp_init(void) // 使用对齐分配函数 - buf_1 = (lv_color_t *)rt_memheap_alloc_align(&sdram_heap, + buf_1 = (lv_color_t *)rt_memheap_alloc_align(&sdram_lcd, sizeof(lv_color_t) * MY_DISP_HOR_RES * 10, 4); // ← 关键:对齐到 4 字节 - buf_2_1 = (lv_color_t *)rt_memheap_alloc_align(&sdram_heap, + buf_2_1 = (lv_color_t *)rt_memheap_alloc_align(&sdram_lcd, sizeof(lv_color_t) * MY_DISP_HOR_RES * 10, 4); - buf_2_2 = (lv_color_t *)rt_memheap_alloc_align(&sdram_heap, + buf_2_2 = (lv_color_t *)rt_memheap_alloc_align(&sdram_lcd, sizeof(lv_color_t) * MY_DISP_HOR_RES * 10, 4); - buf_3_1 = (lv_color_t *)rt_memheap_alloc_align(&sdram_heap, + buf_3_1 = (lv_color_t *)rt_memheap_alloc_align(&sdram_lcd, sizeof(lv_color_t) * MY_DISP_HOR_RES * MY_DISP_VER_RES, 4); - buf_3_2 = (lv_color_t *)rt_memheap_alloc_align(&sdram_heap, + buf_3_2 = (lv_color_t *)rt_memheap_alloc_align(&sdram_lcd, sizeof(lv_color_t) * MY_DISP_HOR_RES * MY_DISP_VER_RES, 4); diff --git a/applications/lvgl/ui_data_labels.c b/applications/lvgl/ui_data_labels.c index 498a0e0..4aaa4cc 100644 --- a/applications/lvgl/ui_data_labels.c +++ b/applications/lvgl/ui_data_labels.c @@ -21,7 +21,7 @@ #include #include "lvgl.h" #include -#include "libcsv.h" +//#include "libcsv.h" // 全局或静态数组 char buf[8]; diff --git a/applications/sdram/sdram_port.c b/applications/sdram/sdram_port.c index d0fa9f2..86d8a78 100644 --- a/applications/sdram/sdram_port.c +++ b/applications/sdram/sdram_port.c @@ -16,7 +16,7 @@ static SDRAM_HandleTypeDef hsdram1; static FMC_SDRAM_CommandTypeDef command; #ifdef RT_USING_MEMHEAP_AS_HEAP -struct rt_memheap sdram_heap; +struct rt_memheap sdram_heap,sdram_lcd; #endif /** * @brief Perform the SDRAM exernal memory inialization sequence @@ -161,6 +161,7 @@ static int SDRAM_Init(void) #ifdef RT_USING_MEMHEAP_AS_HEAP /* If RT_USING_MEMHEAP_AS_HEAP is enabled, SDRAM is initialized to the heap */ rt_memheap_init(&sdram_heap, "SDRAM", (void *)SDRAM1_START, SDRAM1_SIZE); + rt_memheap_init(&sdram_lcd, "LCDRAM", (void *)SDRAM_LCD_START, SDRAM_LCD_SIZE); #endif } return result; diff --git a/applications/sql/DB_SQLite.c b/applications/sql/DB_SQLite.c index ac19fa4..4d1ec9c 100644 --- a/applications/sql/DB_SQLite.c +++ b/applications/sql/DB_SQLite.c @@ -14,7 +14,7 @@ #include "DB_SQLite.h" #include "sqlite3.h" #include -#include "libcsv.h" +//#include "libcsv.h" #define DB_NAME "/sddisk/SC828.db" int db_HelperInit; diff --git a/drivers/board.c b/drivers/board.c index b32b56c..5be58c6 100644 --- a/drivers/board.c +++ b/drivers/board.c @@ -30,8 +30,8 @@ rt_weak void rt_hw_board_init() rt_memheap_init(&sram_DTCMRAM, "DTCMRAM", (void *)DTCMRAM_START, DTCMRAM_SIZE); //rt_memheap_init(&sram_AXIRAM, "AXIRAM", (void *)AXIRAM_START, AXIRAM_SIZE); - rt_memheap_init(&sram_SRAM1, "SRAM1", (void *)SRAM1_START, SRAM1_SIZE); - rt_memheap_init(&sram_SRAM2, "SRAM2", (void *)SRAM2_START, SRAM2_SIZE); + //rt_memheap_init(&sram_SRAM1, "SRAM1", (void *)SRAM1_START, SRAM1_SIZE); + //rt_memheap_init(&sram_SRAM2, "SRAM2", (void *)SRAM2_START, SRAM2_SIZE); hw_board_init(BSP_CLOCK_SOURCE, BSP_CLOCK_SOURCE_FREQ_MHZ, BSP_CLOCK_SYSTEM_FREQ_MHZ); diff --git a/drivers/board.h b/drivers/board.h index 0406255..ce9dce5 100644 --- a/drivers/board.h +++ b/drivers/board.h @@ -58,8 +58,14 @@ extern "C" //#define SRAM3_END (SRAM3_START + SRAM3_SIZE) #define BSP_USING_SDRAM -#define SDRAM1_START (0xC0000000) -#define SDRAM1_SIZE (32*1024*1024) +//Mib显存 +#define LCD_SIZE (5) +#define SDRAM_LCD_START (0xC0000000) +#define SDRAM_LCD_SIZE (LCD_SIZE*1024*1024) +#define SDRAM_LCD_END (SDRAM_LCD_START + SDRAM_LCD_SIZE) + +#define SDRAM1_START (SDRAM_LCD_END)//(0xC0400000) +#define SDRAM1_SIZE ((32-LCD_SIZE)*1024*1024) #define SDRAM1_END (SDRAM1_START + SDRAM1_SIZE) /*-------------------------- ROM/RAM CONFIG END --------------------------*/ diff --git a/drivers/ltdc.c b/drivers/ltdc.c index 5b81fa4..24f8719 100644 --- a/drivers/ltdc.c +++ b/drivers/ltdc.c @@ -458,7 +458,7 @@ int ltdc_init(void) lcdltdc.pwidth = 1024; lcdltdc.pheight = 600; lcdltdc.hsw = 20; lcdltdc.hbp = 160; lcdltdc.hfp = 160; lcdltdc.vsw = 3; lcdltdc.vbp = 23; lcdltdc.vfp = 12; - ltdc_clk_set(128, 32, 7); + ltdc_clk_set(128, 32, 9); } else if (lcdid == 0X7018) {