设备屏蔽功能
适配新版界面
This commit is contained in:
2026-03-06 13:48:42 +08:00
parent 090eb335a8
commit 7373c0ad95
14 changed files with 854 additions and 337 deletions

View File

@@ -11,5 +11,11 @@
#define RTE_COMPONENTS_H #define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "stm32f4xx.h"
#endif /* RTE_COMPONENTS_H */ #endif /* RTE_COMPONENTS_H */

View File

@@ -10,14 +10,14 @@
<TargetName>leakage_system</TargetName> <TargetName>leakage_system</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed> <pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<uAC6>0</uAC6> <uAC6>0</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>
<Device>STM32F407VGTx</Device> <Device>STM32F407VGTx</Device>
<Vendor>STMicroelectronics</Vendor> <Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID> <PackID>Keil.STM32F4xx_DFP.2.15.0</PackID>
<PackURL>https://www.keil.com/pack/</PackURL> <PackURL>http://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu> <Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec> <FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile> <StartupFile></StartupFile>
@@ -185,7 +185,6 @@
<uocXRam>0</uocXRam> <uocXRam>0</uocXRam>
<RvdsVP>2</RvdsVP> <RvdsVP>2</RvdsVP>
<RvdsMve>0</RvdsMve> <RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>1</hadIRAM2> <hadIRAM2>1</hadIRAM2>
<hadIROM2>0</hadIROM2> <hadIROM2>0</hadIROM2>
<StupSel>8</StupSel> <StupSel>8</StupSel>
@@ -352,7 +351,7 @@
<NoWarn>0</NoWarn> <NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc> <uSurpInc>0</uSurpInc>
<useXO>0</useXO> <useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt> <uClangAs>0</uClangAs>
<VariousControls> <VariousControls>
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define></Define> <Define></Define>
@@ -787,13 +786,4 @@
<files/> <files/>
</RTE> </RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>leakage_system</LayName>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project> </Project>

View File

@@ -60,6 +60,8 @@ void app_init(void)
/*flash*/ /*flash*/
w25q32.init(); w25q32.init();
// HAL_Delay(5000);
/*<2A><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>*/ /*<2A><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>*/
com_uart1.init(&com_uart1); com_uart1.init(&com_uart1);
com_uart2.init(&com_uart2); com_uart2.init(&com_uart2);
@@ -148,7 +150,7 @@ void task_500ms(void)
modbus_leakage[APP_COM1].tx_task(&modbus_leakage[APP_COM1]); modbus_leakage[APP_COM1].tx_task(&modbus_leakage[APP_COM1]);
modbus_leakage[APP_COM2].tx_task(&modbus_leakage[APP_COM2]); modbus_leakage[APP_COM2].tx_task(&modbus_leakage[APP_COM2]);
modbus_leakage[APP_COM3].tx_task(&modbus_leakage[APP_COM3]); modbus_leakage[APP_COM3].tx_task(&modbus_leakage[APP_COM3]);
// modbus_leakage[APP_COM4].tx_task(&modbus_leakage[APP_COM4]); modbus_leakage[APP_COM4].tx_task(&modbus_leakage[APP_COM4]);
} }

View File

@@ -1,5 +1,7 @@
#include "app_com.h" #include "app_com.h"
#include "app_leakage.h" #include "app_leakage.h"
#include "bsp_w25q.h"
#include <string.h>
#include "proto_modbus_master_leakage.h" #include "proto_modbus_master_leakage.h"
/*com<6F>ڶ<EFBFBD>Ӧ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>*/ /*com<6F>ڶ<EFBFBD>Ӧ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>*/
@@ -11,32 +13,91 @@ bsp_uart_t *com_to_uart[APP_COM_NUM] =
&com_uart6, &com_uart6,
}; };
static void app_com_uart_class_rate_set(app_com_class_t * p_com,u16 baud_rate); static void app_com_class_baud_rate_set(app_com_class_t *p_com, u32 baud_enum);
static void app_com_class_update(void ); static void app_com_class_update(void );
static void app_com_init(void); static void app_com_init(void);
static void app_com_save_baudrate_to_flash(void);
static void app_com_load_baudrate_from_flash(void);
app_com_t app_com= app_com_t app_com=
{ {
.init = app_com_init, .init = app_com_init,
.class_update = app_com_class_update, .class_update = app_com_class_update,
.save_flah = app_com_save_baudrate_to_flash,
}; };
static void app_com_init(void) static void app_com_init(void)
{ {
u8 i; u8 i;
for(i=0;i<APP_COM_NUM;i++) for(i=0;i<APP_COM_NUM;i++)
{ {
app_com.com[i].com_uart = com_to_uart[i]; app_com.com[i].com_uart = com_to_uart[i];
app_com.com[i].set.baud_rate = app_com_class_baud_rate_set;
app_com.com[i].flash_data.baudrate = 4;
} }
app_com_class_update(); app_com_class_update();
app_com_load_baudrate_from_flash();
} }
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>ֵ<EFBFBD><D6B5>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD> */
static void app_com_class_baud_rate_set(app_com_class_t *p_com, u32 baud_enum)
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
static void app_com_class_baud_rate_set(app_com_class_t * p_com,u16 baud_rate)
{ {
p_com->com_uart->set.baud_rate(p_com->com_uart,baud_rate); u32 baud_value;
switch (baud_enum) {
case 0: baud_value = 4800; break;
case 1: baud_value = 9600; break;
case 2: baud_value = 19200; break;
case 3: baud_value = 57600; break;
case 4: baud_value = 115200; break;
default: baud_value = 115200; break;
}
if (p_com->com_uart && p_com->com_uart->set.baud_rate) {
p_com->com_uart->set.baud_rate(p_com->com_uart, baud_value);
}
}
/* <20><>Flash<73><68><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ڴ沢Ӧ<E6B2A2><D3A6> */
static void app_com_load_baudrate_from_flash(void)
{
u8 baud_vals[APP_COM_NUM];
w25q32.read(W25Q32_COM_BAUDRATE_ADDR, baud_vals, APP_COM_NUM);
for (u8 i = 0; i < APP_COM_NUM; i++) {
if (baud_vals[i] == 0xFF) { // δ<><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪĬ<CEAA><C4AC>115200
app_com.com[i].flash_data.baudrate = 4;
} else {
app_com.com[i].flash_data.baudrate = baud_vals[i];
}
// Ӧ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>
app_com_class_baud_rate_set(&app_com.com[i], app_com.com[i].flash_data.baudrate);
}
}
/* <20><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>浽Flash */
static void app_com_save_baudrate_to_flash(void)
{
u8 current_vals[APP_COM_NUM];
u8 flash_vals[APP_COM_NUM];
/*<2A><>ǰ<EFBFBD>ڴ<EFBFBD><DAB4>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>ֵ*/
for (u8 i = 0; i < APP_COM_NUM; i++) {
current_vals[i] = app_com.com[i].flash_data.baudrate;
}
/*<2A><> Flash <20><>ȡ<EFBFBD>Ѵ<D1B4><E6B4A2>ֵ*/
w25q32.read(W25Q32_COM_BAUDRATE_ADDR, flash_vals, APP_COM_NUM);
// <20>Ƚ<EFBFBD><C8BD>Ƿ<EFBFBD><C7B7><EFBFBD>ȫ<EFBFBD><C8AB>ͬ
if (memcmp(current_vals, flash_vals, APP_COM_NUM) == 0) {
// û<>б<D0B1><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4K<34><4B><EFBFBD>
uint32_t erase_addr = W25Q32_COM_BAUDRATE_ADDR & ~(W25Q32_SECTOR_SIZE - 1);
w25q32_sector_erase(erase_addr);
w25q32.write(W25Q32_COM_BAUDRATE_ADDR, current_vals, APP_COM_NUM);
} }
@@ -61,10 +122,18 @@ static void app_com_class_update(void )
/********************************************COM<4F>ڻ<EFBFBD><DABB><EFBFBD>******************************************************/ /********************************************COM<4F>ڻ<EFBFBD><DABB><EFBFBD>******************************************************/
com_index = leakage.sub_device_data[i].flash_data.com; com_index = leakage.sub_device_data[i].flash_data.com;
id = leakage.sub_device_data[i].flash_data.modbus_id; id = leakage.sub_device_data[i].flash_data.modbus_id;
proto_sensor_class_t *p_sensor = &modbus_leakage[com_index].sensor[modbus_leakage[com_index].sensor_num];
/* <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9> */
memset(p_sensor, 0, sizeof(proto_sensor_class_t));
/*<2A><><EFBFBD><EFBFBD>modbus id*/ /*<2A><><EFBFBD><EFBFBD>modbus id*/
modbus_leakage[com_index].sensor[modbus_leakage[com_index].sensor_num].comm.id = id; p_sensor->comm.id = id;
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
modbus_leakage[com_index].sensor[modbus_leakage[com_index].sensor_num].comm.leakage_data_index = i; p_sensor->comm.leakage_data_index = i;
/* <20><> <20><><EFBFBD>ó<EFBFBD>ʼ״̬ΪĬ<CEAA>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
p_sensor->comm.state = PROTO_LEAKAGE_COMM_STATE_DEFAULT;
/*comm<6D><6D><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>++*/ /*comm<6D><6D><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>++*/
modbus_leakage[com_index].sensor_num++; modbus_leakage[com_index].sensor_num++;
} }

View File

@@ -26,7 +26,7 @@ struct app_com_class_t
bsp_uart_t *com_uart; /*<2A>󶨵<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ bsp_uart_t *com_uart; /*<2A>󶨵<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
struct struct
{ {
void (*baud_rate)(app_com_class_t *,u16); /*<2A><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>*/ void (*baud_rate)(app_com_class_t *,u32); /*<2A><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>*/
}set; }set;
//void (*init)(app_com_class_t *); /*<2A><>ʼ<EFBFBD><CABC>*/ //void (*init)(app_com_class_t *); /*<2A><>ʼ<EFBFBD><CABC>*/
}; };
@@ -36,6 +36,7 @@ typedef struct
app_com_class_t com[APP_COM_NUM]; app_com_class_t com[APP_COM_NUM];
void (*init)(void); /*<2A><>ʼ<EFBFBD><CABC>*/ void (*init)(void); /*<2A><>ʼ<EFBFBD><CABC>*/
void (*class_update)(void ); /*com<6F><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ void (*class_update)(void ); /*com<6F><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void (*save_flah)(void);
}app_com_t; }app_com_t;
extern app_com_t app_com; extern app_com_t app_com;

View File

@@ -4,6 +4,7 @@
#include "bsp_w25q.h" #include "bsp_w25q.h"
#include "bsp_buzzer.h" #include "bsp_buzzer.h"
#include "bsp_relay.h" #include "bsp_relay.h"
#include "bsp_DS1302.h"
static void history_clear_all(void); static void history_clear_all(void);
static u8 history_read_record(u32 record_index, app_leakage_history_alarm_t *record); static u8 history_read_record(u32 record_index, app_leakage_history_alarm_t *record);
@@ -32,6 +33,11 @@ app_hitory_t history =
static void app_leakage_init(void) static void app_leakage_init(void)
{ {
// for(int i = 0; i < APP_LEAKAGE_SUB_DEVICE_NUM; i++)
// {
// memset(leakage.sub_device_data[i].ch_data, 0,
// sizeof(leakage.sub_device_data[i].ch_data));
// }
app_leakage_region_classify(); app_leakage_region_classify();
} }
@@ -61,7 +67,7 @@ void app_leakage_region_classify(void)
if(0 == memcmp(p_leakage->region_data[j].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN))/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ*/ if(0 == memcmp(p_leakage->region_data[j].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN))/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ*/
{ {
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸*/ /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸*/
p_leakage->region_data[j].sub_device_index[p_leakage->region_data[j].leakage_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/ p_leakage->region_data[j].sub_device_index[p_leakage->region_data[j].sub_device_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
p_leakage->region_data[j].sub_device_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/ p_leakage->region_data[j].sub_device_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/
add_region_flag = 0;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ add_region_flag = 0;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
break; break;
@@ -72,10 +78,13 @@ void app_leakage_region_classify(void)
if(add_region_flag)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ if(add_region_flag)/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
{ {
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
memcpy(p_leakage->region_data[p_leakage->region_num].name,p_leakage->sub_device_data[i].flash_data.region_name, APP_LEAKAGE_STRING_NANE_LEN); memcpy(p_leakage->region_data[p_leakage->region_num].name,
p_leakage->region_data[p_leakage->region_num].sub_device_index[p_leakage->region_data[p_leakage->region_num].leakage_num] = i;/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/ p_leakage->sub_device_data[i].flash_data.region_name,
p_leakage->region_data[p_leakage->region_num].sub_device_num++; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>++*/ APP_LEAKAGE_STRING_NANE_LEN);
p_leakage->region_num++; /*<2A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>++*/ // <20><>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
p_leakage->region_data[p_leakage->region_num].sub_device_index[0] = i;
p_leakage->region_data[p_leakage->region_num].sub_device_num = 1;
p_leakage->region_num++;
} }
} }
} }
@@ -153,6 +162,12 @@ void app_leakage_task(void)
continue; continue;
} }
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD> */
if(p_leakage->sub_device_data[sub_device_index].flash_data.shield != UNBLOCKED)
{
continue;
}
/*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>洢*/ /*<2A><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>洢*/
for(k = 0; k < APP_LEAKAGE_SUB_DEVICE_CH_NUM; k++) for(k = 0; k < APP_LEAKAGE_SUB_DEVICE_CH_NUM; k++)
{ {
@@ -195,6 +210,7 @@ void app_leakage_task(void)
{ {
p_leakage->region_data[i].time_out_num++; p_leakage->region_data[i].time_out_num++;
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT; p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT;
break;
} }
else if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN) else if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_OPEN)
{ {
@@ -204,7 +220,7 @@ void app_leakage_task(void)
else if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE) else if(current_state & APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE)
{ {
p_leakage->region_data[i].leakage_num++; p_leakage->region_data[i].leakage_num++;
p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_OPEN; p_leakage->alarm_state |= APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE;
} }
} }
@@ -217,21 +233,15 @@ void app_leakage_task(void)
/* <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1> */ /* <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1> */
static void get_current_time(u8 *time_buffer) static void get_current_time(u8 *time_buffer)
{ {
// RTC_TimeTypeDef sTime; /* <20><>: 2<>ֽ<EFBFBD> (<28><><EFBFBD><EFBFBD>: 2024 -> 0x07 0xE8) */
// RTC_DateTypeDef sDate; uint16_t year = 2000 + DS1302.Time.Year; /* RTC<54><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>2000<30><30>ʼ */
// time_buffer[0] = (year >> 8) & 0xFF; /* <20><><EFBFBD>ֽ<EFBFBD> */
// /* <20><>ȡRTCʱ<43><EFBFBD> */ time_buffer[1] = year & 0xFF; /* <20><><EFBFBD>ֽ<EFBFBD> */
// HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN); time_buffer[2] = DS1302.Time.Month; /* <20><> */
// HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN); time_buffer[3] = DS1302.Time.Day; /* <20><> */
// time_buffer[4] = DS1302.Time.Hour; /* ʱ */
// /* <20><>: 2<>ֽ<EFBFBD> (<28><><EFBFBD><EFBFBD>: 2024 -> 0x07 0xE8) */ time_buffer[5] = DS1302.Time.Minute; /* <20><> */
// uint16_t year = 2000 + sDate.Year; /* RTC<54><43><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>2000<30><30>ʼ */ time_buffer[6] = DS1302.Time.Second; /* <20><> */
// time_buffer[0] = (year >> 8) & 0xFF; /* <20><><EFBFBD>ֽ<EFBFBD> */
// time_buffer[1] = year & 0xFF; /* <20><><EFBFBD>ֽ<EFBFBD> */
// time_buffer[2] = sDate.Month; /* <20><> */
// time_buffer[3] = sDate.Date; /* <20><> */
// time_buffer[4] = sTime.Hours; /* ʱ */
// time_buffer[5] = sTime.Minutes; /* <20><> */
} }
/* <20><>Flash<73><68>ȡ<EFBFBD><C8A1>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD> */ /* <20><>Flash<73><68>ȡ<EFBFBD><C8A1>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD> */

View File

@@ -6,6 +6,9 @@
#define ENABLE (1) #define ENABLE (1)
#define DISABLE (0) #define DISABLE (0)
#define BLOCKED (1) /*<2A><><EFBFBD><EFBFBD>*/
#define UNBLOCKED (0)
#define APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE (0x0001) /*©Һ״̬*/ #define APP_LEAKAGE_SUB_DEVICE_STATE_LEAKAGE (0x0001) /*©Һ״̬*/
#define APP_LEAKAGE_SUB_DEVICE_STATE_OPEN (0x0002) /*<2A>ϴ<EFBFBD>״̬*/ #define APP_LEAKAGE_SUB_DEVICE_STATE_OPEN (0x0002) /*<2A>ϴ<EFBFBD>״̬*/
#define APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT (0x8000) /*ͨѶ<CDA8><D1B6>ʱ*/ #define APP_LEAKAGE_SUB_DEVICE_STATE_TIME_OUT (0x8000) /*ͨѶ<CDA8><D1B6>ʱ*/
@@ -24,6 +27,8 @@ typedef struct
{ {
u8 state; /*״̬ ʹ<><CAB9> <20><>ʹ<EFBFBD><CAB9>*/ u8 state; /*״̬ ʹ<><CAB9> <20><>ʹ<EFBFBD><CAB9>*/
u8 com; /*<2A>˿<EFBFBD>*/ u8 com; /*<2A>˿<EFBFBD>*/
u8 baudrate; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
u8 shield; /*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬*/
u8 modbus_id; /*modbus id*/ u8 modbus_id; /*modbus id*/
u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><EFBFBD><E8B1B8>*/ u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><EFBFBD><E8B1B8>*/
u8 region_name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ u8 region_name[APP_LEAKAGE_STRING_NANE_LEN]; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
@@ -61,7 +66,7 @@ typedef struct
u8 device_id; /* <20>豸ID */ u8 device_id; /* <20>豸ID */
u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /* <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> */ u8 device_name[APP_LEAKAGE_STRING_NANE_LEN]; /* <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
u16 alarm_type; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ u16 alarm_type; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
u8 start_time[6]; /* <20><>ʼʱ<CABC><CAB1>: <20><>(2<>ֽ<EFBFBD>)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */ u8 start_time[7]; /* <20><>ʼʱ<CABC><CAB1>: <20><>(2<>ֽ<EFBFBD>)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
u16 leak_distance; /* ©Һ<C2A9><D2BA><EFBFBD><EFBFBD> (0<><30>ʾ<EFBFBD><CABE>©Һ<C2A9><D2BA><EFBFBD><EFBFBD>) */ u16 leak_distance; /* ©Һ<C2A9><D2BA><EFBFBD><EFBFBD> (0<><30>ʾ<EFBFBD><CABE>©Һ<C2A9><D2BA><EFBFBD><EFBFBD>) */
u8 channel; /* ͨ<><CDA8><EFBFBD><EFBFBD> (0-3) */ u8 channel; /* ͨ<><CDA8><EFBFBD><EFBFBD> (0-3) */
} app_leakage_history_alarm_t; } app_leakage_history_alarm_t;

View File

@@ -1,4 +1,5 @@
#include "bsp_buzzer.h" #include "bsp_buzzer.h"
#include "bsp_w25q.h"
/*<2A><><EFBFBD>ؿ<EFBFBD><D8BF>Ƶ<EFBFBD>ƽ<EFBFBD><C6BD>ʹ<EFBFBD><CAB9>ͬһ<CDAC>ĵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>Ʒ<EFBFBD>ʽ*/ /*<2A><><EFBFBD>ؿ<EFBFBD><D8BF>Ƶ<EFBFBD>ƽ<EFBFBD><C6BD>ʹ<EFBFBD><CAB9>ͬһ<CDAC>ĵ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>Ʒ<EFBFBD>ʽ*/
#define BUZZER_GPIO_ON GPIO_PIN_SET #define BUZZER_GPIO_ON GPIO_PIN_SET
@@ -14,6 +15,7 @@ static void bsp_buzzer_on(void);
static void bsp_buzzer_off(void); static void bsp_buzzer_off(void);
static void bsp_buzzer_enable(void); static void bsp_buzzer_enable(void);
static void bsp_buzzer_disable(void); static void bsp_buzzer_disable(void);
static void bsp_buzzer_flash_data_load(void);
bsp_buzzer_t buzzer = bsp_buzzer_t buzzer =
{ {
@@ -35,11 +37,40 @@ static void bsp_buzzer_init(void)
{ {
BUZZER_OFF; BUZZER_OFF;
p_buzzer->p_flash_data = &flash_data; p_buzzer->p_flash_data = &flash_data;
bsp_buzzer_flash_data_load();
} }
static void bsp_buzzer_flash_data_save(void) static void bsp_buzzer_flash_data_save(void)
{ {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
w25q32_sector_erase(W25Q32_BUZZER_STATE_ADDR);
w25q32.write(W25Q32_BUZZER_STATE_ADDR, (uint8_t*)&flash_data, sizeof(bsp_buzzer_flash_data_t));
}
static void bsp_buzzer_flash_data_load(void)
{
w25q32.read(W25Q32_BUZZER_STATE_ADDR, (uint8_t*)&flash_data, sizeof(bsp_buzzer_flash_data_t));
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ȫΪ0xFF<46><46><EFBFBD>״<EFBFBD>ʹ<EFBFBD>ã<EFBFBD>
uint8_t *p = (uint8_t*)&flash_data;
u8 all_ff = 1;
for (u8 i = 0; i < sizeof(bsp_buzzer_flash_data_t); i++) {
if (p[i] != 0xFF) {
all_ff = 0;
break;
}
}
if (all_ff) {
// <20>״<EFBFBD>ʹ<EFBFBD>ã<EFBFBD>Ĭ<EFBFBD>Ϲرշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD>
flash_data.sw = USR_DISABLE;
bsp_buzzer_flash_data_save();
}
// <20><><EFBFBD>ݼ<EFBFBD><DDBC>ص<EFBFBD>״̬<D7B4><CCAC><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
if (flash_data.sw == USR_ENABLE) {
p_buzzer->p_flash_data->sw = flash_data.sw;
}
} }
static void bsp_buzzer_task(void) static void bsp_buzzer_task(void)

View File

@@ -57,7 +57,7 @@ static void bsp_uart_rx_task(bsp_uart_t *p_uart);
static void bsp_uart_rx_time_start(bsp_uart_t *p_uart); static void bsp_uart_rx_time_start(bsp_uart_t *p_uart);
static void bsp_uart_tx_dma_tc_int(bsp_uart_t *p_uart); static void bsp_uart_tx_dma_tc_int(bsp_uart_t *p_uart);
static void bsp_uart_dma_send(bsp_uart_t *p_uart, u8 *p_data, u16 len); static void bsp_uart_dma_send(bsp_uart_t *p_uart, u8 *p_data, u16 len);
static void bsp_uart_baud_rate_set(bsp_uart_t *p_uart,u16 baud_rate); static void bsp_uart_baud_rate_set(bsp_uart_t *p_uart,u32 baud_rate);
/* <20>ⲿHAL<41><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* <20>ⲿHAL<41><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart1;
@@ -269,7 +269,7 @@ static void bsp_uart_init(bsp_uart_t *p_uart)
HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len); HAL_UARTEx_ReceiveToIdle_DMA(p_uart->uart, p_uart->rx_addr, p_uart->rx_dma_len);
} }
static void bsp_uart_baud_rate_set(bsp_uart_t *p_uart,u16 baud_rate) static void bsp_uart_baud_rate_set(bsp_uart_t *p_uart,u32 baud_rate)
{ {
p_uart->uart->Init.BaudRate = baud_rate; p_uart->uart->Init.BaudRate = baud_rate;
HAL_UART_Init(p_uart->uart); HAL_UART_Init(p_uart->uart);

View File

@@ -61,7 +61,7 @@ struct bsp_uart_t
struct struct
{ {
void (*baud_rate)(bsp_uart_t *,u16); void (*baud_rate)(bsp_uart_t *,u32);
}set; }set;
void (*init)(bsp_uart_t *); /* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */ void (*init)(bsp_uart_t *); /* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */

View File

@@ -49,6 +49,12 @@ void w25q32_sector_erase(uint32_t sector_addr);
#define MAX_HISTORY_ALARM_RECORDS (1000) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC> */ #define MAX_HISTORY_ALARM_RECORDS (1000) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC> */
#define HISTORY_ALARM_SECTORS_NEEDED ((MAX_HISTORY_ALARM_RECORDS * HISTORY_ALARM_RECORD_SIZE + W25Q32_SECTOR_SIZE - 1) / W25Q32_SECTOR_SIZE) #define HISTORY_ALARM_SECTORS_NEEDED ((MAX_HISTORY_ALARM_RECORDS * HISTORY_ALARM_RECORD_SIZE + W25Q32_SECTOR_SIZE - 1) / W25Q32_SECTOR_SIZE)
/* COM<4F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>ʴ洢<CAB4><E6B4A2>ַ - ʹ<>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>13<31><33> */
#define W25Q32_COM_BAUDRATE_ADDR 0x00D000 /*<2A>洢4<E6B4A2><34>COM<4F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>ֵ<EFBFBD><D6B5>4<EFBFBD>ֽڣ<D6BD>*/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E6B4A2>ַ - ʹ<>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>14<31><34> */
#define W25Q32_BUZZER_STATE_ADDR 0x00E000 /*<2A><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>1<EFBFBD>ֽڣ<D6BD>*/
/* w25q32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9> */ /* w25q32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9> */
typedef struct { typedef struct {
void (*init)(void); void (*init)(void);

File diff suppressed because it is too large Load Diff

View File

@@ -68,7 +68,7 @@ static void proto_leakage_init(proto_leakage_t *p_leakage)
} }
else if(p_leakage == &modbus_leakage[APP_COM4]) else if(p_leakage == &modbus_leakage[APP_COM4])
{ {
com_to_uart[APP_COM3]->rx_data_analysis = proto_leakage_rx_task; com_to_uart[APP_COM4]->rx_data_analysis = proto_leakage_rx_task;
} }
/*<2A><><EFBFBD><EFBFBD>modbus_id<69>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>app_com<6F><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ /*<2A><><EFBFBD><EFBFBD>modbus_id<69>Ͷ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>app_com<6F><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
} }
@@ -251,7 +251,8 @@ static void proto_leakage_rx_task(u8 *p_data,u16 len,void *other_data)
{ {
/*<2A><><EFBFBD>㵱ǰ<E3B5B1><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/ /*<2A><><EFBFBD>㵱ǰ<E3B5B1><EFBFBD><E8B1B8><EFBFBD><EFBFBD>*/
u8 sensor_index = p_sensor->comm.leakage_data_index; u8 sensor_index = p_sensor->comm.leakage_data_index;
u16 ch_addr_offset[4] = {0,4,8,11}; /*©Һ<C2A9><D2BA><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַƫ<D6B7><C6AB>*/ // u16 ch_addr_offset[4] = {0,4,8,11}; /*©Һ<C2A9><D2BA><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַƫ<D6B7><C6AB>*/
u16 ch_addr_offset[4] = {0,8,16,22}; /*©Һ<C2A9><D2BA><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַƫ<D6B7><C6AB>*/
u16 temp; u16 temp;
if(sensor_index >= APP_LEAKAGE_SUB_DEVICE_NUM) if(sensor_index >= APP_LEAKAGE_SUB_DEVICE_NUM)

View File

@@ -265,7 +265,16 @@ static u16 proto_modbus_data_read(u16 addr)
{ {
case 0:/*<2A>˿<EFBFBD>&ID*/ case 0:/*<2A>˿<EFBFBD>&ID*/
{ {
data = (leakage.sub_device_data[sensor_index].flash_data.com + 1)<< 8 | leakage.sub_device_data[sensor_index].flash_data.modbus_id; // data = (leakage.sub_device_data[sensor_index].flash_data.com + 1)<< 8 | leakage.sub_device_data[sensor_index].flash_data.modbus_id;
u16 value = (leakage.sub_device_data[sensor_index].flash_data.com + 1) << 8;
value |= leakage.sub_device_data[sensor_index].flash_data.modbus_id;
if (leakage.sub_device_data[sensor_index].flash_data.shield == BLOCKED) {
value |= 0x8000; /*<2A><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>*/
}
if (leakage.sub_device_data[sensor_index].flash_data.state == ENABLE) {
value |= 0x4000; /*<2A>θ<EFBFBD>λ<EFBFBD><CEBB>ʾʹ<CABE><CAB9>*/
}
data = value;
}break; }break;
case 1 ... 5:/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ case 1 ... 5:/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
{ {