Explorar o código

F427 后台服务重写。以及网页重写

liyi hai 5 meses
pai
achega
a6dabb9e3c
Modificáronse 35 ficheiros con 8935 adicións e 7214 borrados
  1. 2139 2345
      f407/applications/html_h/index_html.h
  2. 20 20
      f407/applications/main.c
  3. 8 8
      f427/applications/board.h
  4. 137 99
      f427/applications/cascade.c
  5. 3 2
      f427/applications/cascade.h
  6. 3 3
      f427/applications/cfg.h
  7. 165 176
      f427/applications/datadef.h
  8. 0 7
      f427/applications/db.c
  9. 10 3
      f427/applications/dflt.c
  10. 18 0
      f427/applications/fifo/fifo.c
  11. 1 1
      f427/applications/fifo/fifo.h
  12. 1 0
      f427/applications/main.c
  13. 3 1
      f427/applications/mb.c
  14. 2 0
      f427/applications/mb.h
  15. 1 1
      f427/applications/packages/qmodbus-latest/src/modbus_backend.c
  16. 1 0
      f427/applications/packages/qmodbus-latest/src/modbus_rtu.c
  17. 0 2
      f427/applications/packages/qmodbus-latest/src/modbus_slave.c
  18. 67 39
      f427/applications/paras.c
  19. 996 3238
      f427/applications/power.c
  20. 71 35
      f427/applications/power.h
  21. 7 6
      f427/applications/rtconfig.h
  22. 65 40
      f427/applications/sensor.c
  23. 103 373
      f427/applications/snmp.c
  24. 1 3
      f427/applications/snmp.h
  25. 0 1
      f427/applications/sys.c
  26. 4 4
      f427/applications/thread.c
  27. 74 138
      f427/applications/ui/menu.c
  28. 7 0
      f427/applications/wanning.c
  29. 1 1
      f427/applications/wanning.h
  30. 576 666
      f427/applications/web.c
  31. 6 0
      f427/applications/web.h
  32. 4 0
      f427/drivers/libraries/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c
  33. 2 2
      f427/rt-thread/components/drivers/include/drivers/serial_v2.h
  34. 2192 0
      nor_web/AC1-AC1/index.html
  35. 2247 0
      nor_web/AC3-AC1/index.html

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 2139 - 2345
f407/applications/html_h/index_html.h


+ 20 - 20
f407/applications/main.c

@@ -10,16 +10,16 @@
 #include "dfs_posix.h"
 
 
-#include "channel_display.h"
-#include "data_js.h"
-#include "display_data.h"
-#include "index_css.h"
+//#include "channel_display.h"
+//#include "data_js.h"
+//#include "display_data.h"
+//#include "index_css.h"
 #include "index_html.h"
-#include "index_js.h"
-#include "operation.h"
-#include "petite-vue.min.h"
-#include "sys_para.h"
-#include "ws.h"
+//#include "index_js.h"
+//#include "operation.h"
+//#include "petite-vue.min.h"
+//#include "sys_para.h"
+//#include "ws.h"
 
 
 
@@ -160,17 +160,17 @@ int main(void)
 	
 	check_path();
 	
-	check_file("/nor/web/api/channel_display.js",p_channel_display);
-	check_file("/nor/web/api/data.js",p_data_js);
-	check_file("/nor/web/api/display_data.js",p_display_data);
-	check_file("/nor/web/api/index.js",p_index_js);
-	check_file("/nor/web/api/operation.js",p_operation);
-	check_file("/nor/web/api/petite-vue.min.js",p_petite_vue);
-	check_file("/nor/web/api/sys_paras.js",p_sys_para);
-	check_file("/nor/web/api/ws.js",p_ws);
-	
-	
-	check_file("/nor/web/css/index.css",p_css_index);
+//	check_file("/nor/web/api/channel_display.js",p_channel_display);
+//	check_file("/nor/web/api/data.js",p_data_js);
+//	check_file("/nor/web/api/display_data.js",p_display_data);
+//	check_file("/nor/web/api/index.js",p_index_js);
+//	check_file("/nor/web/api/operation.js",p_operation);
+//	check_file("/nor/web/api/petite-vue.min.js",p_petite_vue);
+//	check_file("/nor/web/api/sys_paras.js",p_sys_para);
+//	check_file("/nor/web/api/ws.js",p_ws);
+//	
+//	
+//	check_file("/nor/web/css/index.css",p_css_index);
 	
 	check_file("/nor/web/index.html",p_index_html);
 	

+ 8 - 8
f427/applications/board.h

@@ -92,22 +92,22 @@ extern "C"
     #define BSP_UART2_TX_BUFSIZE        1024
 //    #define BSP_UART2_RX_USING_DMA
 //    #define BSP_UART2_TX_USING_DMA
-    
+//    
     #define BSP_USING_UART3
     #define BSP_UART3_TX_PIN            "PB10"
     #define BSP_UART3_RX_PIN            "PB11"
     #define BSP_UART3_RX_BUFSIZE        1024
     #define BSP_UART3_TX_BUFSIZE        1024
-    //#define BSP_UART3_RX_USING_DMA
-    //#define BSP_UART3_TX_USING_DMA
-    
+//    #define BSP_UART3_RX_USING_DMA
+//    #define BSP_UART3_TX_USING_DMA
+//    
     #define BSP_USING_UART6
     #define BSP_UART6_TX_PIN            "PC6"
     #define BSP_UART6_RX_PIN            "PC7"
     #define BSP_UART6_RX_BUFSIZE        1024
     #define BSP_UART6_TX_BUFSIZE        1024
-    //#define BSP_UART6_RX_USING_DMA
-    //#define BSP_UART6_TX_USING_DMA
+//    #define BSP_UART6_RX_USING_DMA
+//    #define BSP_UART6_TX_USING_DMA
 #endif
 
 //#define BSP_USING_I2C2
@@ -119,8 +119,8 @@ extern "C"
 #define BSP_USING_WDT
 #define BSP_USING_ETH
 
-#define BSP_USING_SDIO
-#define BSP_USING_SDCARD
+//#define BSP_USING_SDIO
+//#define BSP_USING_SDCARD
 
 #define BSP_USING_SPI
 #define BSP_USING_SPI1

+ 137 - 99
f427/applications/cascade.c

@@ -36,6 +36,11 @@ typedef struct {
 	}data;
 }north_data_t;
 
+typedef struct cascade_saddr{
+    uint8_t      addr;
+    uint16_t     channels;
+    power_ch_new_t   ch[POWER_SLAVE_CH_MAX];
+}slave_info_t;
 
 typedef union{
 	slave_info_t			info;
@@ -50,14 +55,11 @@ typedef struct cascade_info{
 	uint8_t 				md_type;
 	uint32_t        bund;
 	uint8_t         quit;
-	//slave_info_t			*info;
 	lock_t 					lock;
 	slave_t         slaves[POWER_CASCADE_MAX+1];
 	cmd_data_t    cmd;
-  power_all_t   all;
-
-	//north_data_t *north;
 	cascade_data_cache *chache;
+	rt_timer_t       cascade_timer;
 }cascade_handle_t;
 
 
@@ -145,18 +147,11 @@ static uint8_t master_scan(cascade_handle_t *cas)
 static int slave_get_info(cascade_handle_t *cas)
 {
 	slave_info_t *info = &cas->chache->info;
-	power_all_t all;
-
-   power_data_get(&all);
-	info->channels = all.chs-1 > 0 ? all.chs-1 :  all.chs;
-
-	if(info->channels  > POWER_SLAVE_CH_MAX)
-			info->channels = POWER_SLAVE_CH_MAX;
-	if(info->channels == 0)
-			return -1;
+	power_handle_new_t *p_handle = power_get_all();
+	info->channels = p_handle->chs;
 	for(int i=0; i < info->channels;i++)
 	{
-		info->ch[i] = all.pch[i+1];
+		info->ch[i] = p_handle->pch[i];
 	}
 	LOGD("slave will send %d channels to master!!!!\n",info->channels);
 	return 0;
@@ -191,9 +186,7 @@ static void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
 {
 	cmd_data_t *cmd=NULL;
 	pthread_t id = 0;
-	power_all_t all;
-    
-    power_data_get(&all);
+	power_handle_new_t *p_handle = power_get_all();
 	switch (reg)
 	{
 		case CASCADE_REG_SCAN:
@@ -258,7 +251,7 @@ static void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
 				case CASCADE_CMD_GET_INFO:
 				{
 					
-					uint8_t * base_addr = (uint8_t *)&all.pch[1];
+					uint8_t * base_addr = (uint8_t *)&p_handle->pch[0];
 					//my_memcpy_byte(r_w_data,base_addr+sendlen,lenth*2);
 					memcpy(r_w_data,base_addr+sendlen,lenth*2);
 					memswap(r_w_data,lenth*2);
@@ -267,7 +260,7 @@ static void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
 					break;
 				case CASCADE_CMD_QUERY_CH:
 				{
-					uint8_t * base_addr = (uint8_t *)&all.pch[1];
+					uint8_t * base_addr = (uint8_t *)&p_handle->pch[0];
 					my_memcpy_byte(r_w_data,base_addr+sendlen,lenth*2);
 					memswap(r_w_data,lenth*2);
 				}
@@ -605,7 +598,19 @@ static int master_cmd(cascade_handle_t *cas,uint8_t cur_dev_addr ,cmd_data_t *cm
     return r;
 }
 
-
+static void timer1_callback(void *parameter)
+{
+#if 0
+    timer1_cnt++;
+    rt_kprintf("timer1 callback execute %d times\n", timer1_cnt);
+
+    /* 执行5次后,将自身周期修改为250ms */
+    if (timer1_cnt == 5) {
+        rt_kprintf("timer1 change period to 250ms.\n");
+        rt_timer_control(timer1, RT_TIMER_CTRL_SET_TIME, (void *)250);
+    }
+#endif
+}
 
 uint8_t cascade_init(void)
 {	
@@ -621,6 +626,8 @@ uint8_t cascade_init(void)
 		lock_deinit(slave_info.lock);
 		return -1;
 	}
+	//slave_info.cascade_timer = rt_timer_create("cascade_timer",timer1_callback,RT_NULL,10,RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_HARD_TIMER);
+	
 	LOGD("__casecde__malloc size if cascade %d\n",sizeof(cascade_data_cache));
 	if(p_d->cas.mode == MB_MODE_SLAVE)
 	{
@@ -629,6 +636,7 @@ uint8_t cascade_init(void)
 		func.slave_func = slave_func;
 		mb_set_cascade_cb(MB_ID_CASCADE,&func);
 		memset(&slave_info.chache->north,0,sizeof(north_data_t));
+		//rt_timer_start(slave_info.cascade_timer);
 	}else if(p_d->cas.mode == MB_MODE_MASTER)
 	{
 		memset(&slave_info.chache->info,0,sizeof(slave_info_t));	
@@ -650,6 +658,57 @@ uint8_t cascade_init(void)
 }
 
 
+void cascade_reset_new(uint8_t mode,uint8_t addr,uint32_t baund)
+{
+	slave_info.switch_flag = 1;
+	paras_data_t* p_d = paras_get();
+	if(baund != p_d->cas.baud)
+	{
+		mb_deinit_n(MB_ID_CASCADE);
+		mb_para_t m_para = {0};
+		m_para.type = MB_TYPE_RTU;
+		m_para.para.rtu.baudrate = baund;
+		m_para.para.rtu.dev = CASCADE_PORT;
+		m_para.para.rtu.parity = 0;
+		m_para.para.rtu.pin = -1;
+		m_para.para.rtu.lvl = 0;
+		mb_init_n(MB_ID_CASCADE,&m_para);
+	}
+	if(mode != slave_info.md_type)
+	{
+		if(mode == MB_MODE_MASTER)
+		{
+			slave_info.md_type = MB_MODE_MASTER;
+			memset(&slave_info.chache->info,0,sizeof(slave_info_t));	
+			//rt_timer_stop(slave_info.cascade_timer);
+		}else
+		{
+			slave_info.md_type = MB_MODE_SLAVE;
+			mb_set_addr(MB_ID_CASCADE,addr);
+			mb_set_cb(MB_ID_CASCADE, &mb_table);
+			func.slave_func = slave_func;
+			mb_set_cascade_cb(MB_ID_CASCADE,&func);
+			memset(&slave_info.chache->north,0,sizeof(north_data_t));
+			//rt_timer_start(slave_info.cascade_timer);
+		}
+	}else
+	{
+		if(mode == MB_MODE_SLAVE)
+		{
+			if(addr != p_d->cas.addr)
+			{
+				mb_set_addr(MB_ID_CASCADE,addr);
+			}
+		}
+	}
+	p_d->cas.addr = addr;
+	p_d->cas.baud = baund;
+	p_d->cas.mode = mode;
+	paras_save();
+	slave_info.switch_flag = 0;
+}
+
+
 
 void cascade_reset(uint8_t mode,uint8_t addr)
 {
@@ -660,6 +719,7 @@ void cascade_reset(uint8_t mode,uint8_t addr)
 	{
 		slave_info.md_type = MB_MODE_MASTER;
 		memset(&slave_info.chache->info,0,sizeof(slave_info_t));			
+		
 	}else if((p_d->cas.mode == MB_MODE_SLAVE) && (slave_info.md_type != MB_MODE_SLAVE))
 	{
 		slave_info.md_type = MB_MODE_SLAVE;
@@ -696,29 +756,29 @@ void cascade_scan_thread(void *arg)
 		}else	//做从机//拷贝数据到北向
 		{
 			paras_data_t* p_data = paras_get();
-			power_all_t all;
-      power_data_get(&all);
+			power_handle_new_t *all = power_get_all();
+      
 			if(p_data->prod.type == PDU_AC_I1O1 || p_data->prod.type == PDU_DC_I1O1)
 			{
-				int channels = all.chs > 0 ? all.chs - 1: 0;
+				int channels = all->chs;
 				slave_info.chache->north.data.ac_dc.dev_cnt = (p_data->prod.type << 8 | channels);
-				int cnt = all.chs > POWER_SLAVE_CH_MAX ? POWER_SLAVE_CH_MAX : channels;
+				int cnt = all->chs > POWER_SLAVE_CH_MAX ? POWER_SLAVE_CH_MAX : channels;
 				//电量信息
 				for(int i = 0; i < cnt;i++)
 				{
-					slave_info.chache->north.data.ac_dc.power[i].voltage 	= all.pch[i+1].power[0].voltage *10;
-					slave_info.chache->north.data.ac_dc.power[i].current 	= all.pch[i+1].power[0].current *10;
-					slave_info.chache->north.data.ac_dc.power[i].power 	= all.pch[i+1].power[0].power *10;
-					slave_info.chache->north.data.ac_dc.power[i].consumer  = all.pch[i+1].power[0].consump *10;
-					slave_info.chache->north.data.ac_dc.power[i].factor 	= all.pch[i+1].power[0].factor *10;
-					slave_info.chache->north.data.ac_dc.power[i].freq 		= all.pch[i+1].power[0].freq *10;
+					slave_info.chache->north.data.ac_dc.power[i].voltage 	= all->pch[i].power[0].voltage *1000;
+					slave_info.chache->north.data.ac_dc.power[i].current 	= all->pch[i].power[0].current *1000;
+					slave_info.chache->north.data.ac_dc.power[i].power 	= all->pch[i].power[0].power *1000;
+					slave_info.chache->north.data.ac_dc.power[i].consumer  = all->pch[i].power[0].consump *1000;
+					slave_info.chache->north.data.ac_dc.power[i].factor 	= all->pch[i].power[0].factor *1000;
+					slave_info.chache->north.data.ac_dc.power[i].freq 		= all->pch[i].power[0].freq *1000;
 				}
 				//总信息
 				//slave_info.chache->north.data.ac_dc.power_all. = all.ttl.total;
-				slave_info.chache->north.data.ac_dc.power_all.all_consumer = all.ttl.total[0].consump *1000;
-				slave_info.chache->north.data.ac_dc.power_all.all_current  = all.ttl.total[0].current *1000;
-				slave_info.chache->north.data.ac_dc.power_all.all_power    = all.ttl.total[0].power *1000;
-				slave_info.chache->north.data.ac_dc.power_all.all_voltage  = all.ttl.total[0].voltage *1000;
+				slave_info.chache->north.data.ac_dc.power_all.all_consumer = all->total.all.consump *1000;
+				slave_info.chache->north.data.ac_dc.power_all.all_current  = all->total.all.current *1000;
+				slave_info.chache->north.data.ac_dc.power_all.all_power    = all->total.all.power *1000;
+				slave_info.chache->north.data.ac_dc.power_all.all_voltage  = all->total.all.voltage *1000;
 				//温湿度
 				slave_info.chache->north.data.ac_dc.temp = 0;				//后续加上传感器数据
 				slave_info.chache->north.data.ac_dc.humity = 0;
@@ -726,24 +786,24 @@ void cascade_scan_thread(void *arg)
 					slave_info.chache->north.data.ac_dc.switch_stu[i] = 0;
 				for(int i = 0; i < cnt;i++)
 				{
-					slave_info.chache->north.data.ac_dc.delay_open[i] = all.pch[i].info.open_delay;
+					slave_info.chache->north.data.ac_dc.delay_open[i] = all->pch[i].info.open_delay;
 				}
 				for(int i = 0; i < cnt;i++)
 				{
-					slave_info.chache->north.data.ac_dc.delay_close[i] = all.pch[i].info.close_delay;
+					slave_info.chache->north.data.ac_dc.delay_close[i] = all->pch[i].info.close_delay;
 				}
 			}else
 			{
-				int channels = all.chs > 0 ? all.chs - 1: 0;
+				int channels = all->chs > 0 ? all->chs: 0;
 				slave_info.chache->north.data.ac_3.dev_cnt = (p_data->prod.type << 8 | channels);
 				for(int i = A_P; i <= C_P;i++)
 				{
-					slave_info.chache->north.data.ac_3.ac_3_all_pw[i].consumer = all.ttl.total[i].consump *1000;
-					slave_info.chache->north.data.ac_3.ac_3_all_pw[i].current  = all.ttl.total[i].current *1000;
-					slave_info.chache->north.data.ac_3.ac_3_all_pw[i].power    = all.ttl.total[i].power *1000;
-					slave_info.chache->north.data.ac_3.ac_3_all_pw[i].voltage  = all.ttl.total[i].voltage *1000;
+					slave_info.chache->north.data.ac_3.ac_3_all_pw[i].consumer = all->total.all_l[i].consump *1000;
+					slave_info.chache->north.data.ac_3.ac_3_all_pw[i].current  = all->total.all_l[i].current *1000;
+					slave_info.chache->north.data.ac_3.ac_3_all_pw[i].power    = all->total.all_l[i].power *1000;
+					slave_info.chache->north.data.ac_3.ac_3_all_pw[i].voltage  = all->total.all_l[i].voltage *1000;
 				}
-				int cnt = all.chs > POWER_SLAVE_CH_MAX ? POWER_SLAVE_CH_MAX : channels;
+				int cnt = all->chs > POWER_SLAVE_CH_MAX ? POWER_SLAVE_CH_MAX : channels;
 				for(int i = 0; i < cnt;i++)
 				{
 
@@ -753,20 +813,20 @@ void cascade_scan_thread(void *arg)
 				{
 					for(int j = A_P; j <= C_P;j++)
 					{
-						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_consumer = all.pch[i+1].power[j].consump * 10;
-						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_current  = all.pch[i+1].power[j].current * 10;
-						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_power    = all.pch[i+1].power[j].power * 10;
-						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_voltage  = all.pch[i+1].power[j].voltage * 10;
-						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_status   = all.pch[i+1].status;		
+						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_consumer = all->pch[i].power[j].consump * 1000;
+						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_current  = all->pch[i].power[j].current * 1000;
+						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_power    = all->pch[i].power[j].power * 1000;
+						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_voltage  = all->pch[i].power[j].voltage * 1000;
+						slave_info.chache->north.data.ac_3.ac_3_chn_p[i][j].p_status   = all->pch[i].info.status;		
 					}
 				}	
 				for(int i = 0; i < cnt;i++)
 				{
-					slave_info.chache->north.data.ac_3.delay_open[i] = all.pch[i].info.open_delay;
+					slave_info.chache->north.data.ac_3.delay_open[i] = all->pch[i].info.open_delay;
 				}
 				for(int i = 0; i < cnt;i++)
 				{
-					slave_info.chache->north.data.ac_3.delay_close[i] = all.pch[i].info.close_delay;
+					slave_info.chache->north.data.ac_3.delay_close[i] = all->pch[i].info.close_delay;
 				}
 				
 			}
@@ -859,7 +919,9 @@ int mb_port_read_hold(u16 addr, u16 *preg)//读保持寄存器, 返回 : 0-成
 
 int mb_port_write_hold(u16 addr, u16 reg)//写保持寄存器, 返回 : 0-成功, -2-地址错误, -3-值非法, -4-设备故障
 {
-    power_all_t *power = power_get_all();
+  power_handle_new_t *power = power_get_all();
+		
+	power_ch_new_t * pch = NULL;
 	
 	if(AC_DC_SET_DELAY_OPEN <= addr && addr <= AC_DC_ALL_SET_SWITCH_REG)
 	{
@@ -868,46 +930,38 @@ int mb_port_write_hold(u16 addr, u16 reg)//写保持寄存器, 返回 : 0-成功
 			case AC_DC_SET_DELAY_OPEN ... (AC_DC_SET_DELAY_CLOSE-1):
 			{
 				uint16_t channel = addr - AC_DC_SET_DELAY_OPEN;
-				if(channel < power->chs -1)
+				if(channel < power->chs)
 				{
-					power->pch[channel+1].info.open_delay = reg;
-					power_set_open_delay(&power->pch[channel+1]);
+					pch = &power->pch[channel];
+					uint16_t reg_close = power->pch[channel].info.close_delay;
+					power->set_delay(pch->info.addr,pch->info.sch,reg,reg_close);
 				}
 			}
 			break;
 			case AC_DC_SET_DELAY_CLOSE ...(AC_DC_CHN_SET_SWITCH_STA_REG - 1):
 			{
 				uint16_t channel = addr - AC_DC_SET_DELAY_CLOSE;
-				if(channel < power->chs -1)
+				if(channel < power->chs)
 				{
-					power->pch[channel+1].info.close_delay = reg;
-					power_set_close_delay(&power->pch[channel+1]);
+					pch = &power->pch[channel];
+					uint16_t reg_open = power->pch[channel].info.open_delay;
+					power->set_delay(power->pch[channel].info.addr,power->pch[channel].info.sch,reg_open,reg);
 				}				
 			}
 			break;
 			case AC_DC_CHN_SET_SWITCH_STA_REG ... (AC_DC_ALL_SET_SWITCH_REG-1):
 			{
 				uint16_t channel = addr - AC_DC_CHN_SET_SWITCH_STA_REG;
-				if(channel <= power->chs -1)
+				if(channel < power->chs)
 				{
-					power->pch[channel+1].status = reg;
-					power_set_ch_sw_n(&power->pch[channel+1]);
+					pch = &power->pch[channel];
+					power->set_status(pch->info.addr,pch->info.sch,reg);
 				}
 			}
 			break;
 			case AC_DC_ALL_SET_SWITCH_REG:
 			{
-				power_handle_t * handle =  get_power_handle();
-				if(handle->cnt > 0)
-				{
-					for(int i = 1 ; i <= handle->cnt;i++)
-					{
-						if(handle->pbrd[i])
-						{
-							handle->pbrd[i]->fn.set_all(reg,handle->pbrd[i]);
-						}
-					}
-				}
+				power->set_all_status(reg);
 			}
 			break;
 		}
@@ -921,46 +975,38 @@ int mb_port_write_hold(u16 addr, u16 reg)//写保持寄存器, 返回 : 0-成功
 			case AC_3_SET_DELAY_OPEN ... (AC_3_SET_DELAY_CLOSE-1):
 			{
 				uint16_t channel = addr - AC_DC_SET_DELAY_OPEN;
-				if(channel < power->chs -1)
+				if(channel < power->chs)
 				{
-					power->pch[channel+1].info.open_delay = reg;
-					power_set_open_delay(&power->pch[channel+1]);
+					pch = &power->pch[channel];
+					uint16_t reg_close = power->pch[channel].info.close_delay;
+					power->set_delay(pch->info.addr,pch->info.sch,reg,reg_close);
 				}
 			}
 			break;
 			case AC_3_SET_DELAY_CLOSE ... (AC_3_CHN_SET_SWITCH_STA_REG-1):
 			{
 				uint16_t channel = addr - AC_DC_SET_DELAY_CLOSE;
-				if(channel < power->chs -1)
+				if(channel < power->chs)
 				{
-					power->pch[channel+1].info.close_delay = reg;
-					power_set_close_delay(&power->pch[channel+1]);
+					pch = &power->pch[channel];
+					uint16_t reg_open = power->pch[channel].info.open_delay;
+					power->set_delay(power->pch[channel].info.addr,power->pch[channel].info.sch,reg_open,reg);
 				}					
 			}
 			break;
 			case AC_3_CHN_SET_SWITCH_STA_REG ... (AC_3_ALL_SET_SWITCH_REG -1):
 			{
 				uint16_t channel = addr - AC_DC_CHN_SET_SWITCH_STA_REG;
-				if(channel <= power->chs -1)
+				if(channel < power->chs)
 				{
-					power->pch[channel+1].status = reg;
-					power_set_ch_sw_n(&power->pch[channel+1]);
+					pch = &power->pch[channel];
+					power->set_status(pch->info.addr,pch->info.sch,reg);
 				}
 			}
 			break;
 			case AC_3_ALL_SET_SWITCH_REG:
 			{
-				power_handle_t * handle =  get_power_handle();
-				if(handle->cnt > 0)
-				{
-					for(int i = 1 ; i <= handle->cnt;i++)
-					{
-						if(handle->pbrd[i])
-						{
-							handle->pbrd[i]->fn.set_all(reg,handle->pbrd[i]);
-						}
-					}
-				}				
+				power->set_all_status(reg);		
 			}
 			break;
 		}
@@ -976,15 +1022,7 @@ uint8_t cascade_read_slave(uint8_t addr)
 	slave_info.read_addr = addr;
 }
 
-int cascade_power_get(power_all_t *all)
-{
-    if(!all) {
-        return -1;
-    }
-    all->chs = slave_info.chache->info.channels;
-    all->pch = &slave_info.chache->info.ch[0];
-    return 0;
-}
+
 int cascade_get_dlist(dev_list_t *dl)
 {
     int i,cnt=0;

+ 3 - 2
f427/applications/cascade.h

@@ -112,6 +112,8 @@ enum {
 };
 
 
+
+
 uint8_t cascade_init();
 uint8_t cascade_deinit();
 void cascade_reset(uint8_t mode,uint8_t addr);
@@ -123,6 +125,5 @@ uint8_t cascade_set_mode(uint8_t mode,uint8_t addr);
 void    cascade_reinit(uint8_t mode,uint8_t addr,uint32_t baud);
 int     cascade_get_dlist(dev_list_t *dl);
 int     cascade_free_dlist(dev_list_t *dl);
-int     cascade_power_get(power_all_t *all);
-
+void 		cascade_reset_new(uint8_t mode,uint8_t addr,uint32_t baund);
 #endif

+ 3 - 3
f427/applications/cfg.h

@@ -49,13 +49,13 @@
     
     #define CHANNEL_DELAY                       8
 
-    #define PROD_TYPE                           PDU_AC_I3O3
+    //#define PROD_TYPE                           PDU_AC_I3O3
     //#define PROD_TYPE                           PDU_AC_I1O1
-		//#define PROD_TYPE                             PDU_AC_I3O1
+		#define PROD_TYPE                             PDU_AC_I3O1
     //#define PROD_TYPE 													 PDU_DC_I1O1
     #define USE_UI
     #define ROTATE                              90
-		#define  PH_INFO       										"111112222233333"
+		#define  PH_INFO       										"111111112222222233333333"
 		
 #else
     #error define a PRJ_XXXX please!

+ 165 - 176
f427/applications/datadef.h

@@ -316,11 +316,16 @@ typedef struct {
     uint8_t             mode;
     uint8_t             version;
     char                publics[10];
+		char                privates[10];
     uint8_t             trapmode;
     //crypt_t             crypt;
     char                nms_ip[32];
 }snmp_data_t;
 
+typedef struct{
+	sensor_th_t      sens[3];
+}sensor_config_t;
+
 
 typedef struct {
     system_data_t       sys;
@@ -330,95 +335,24 @@ typedef struct {
     product_data_t      prod;
     service_data_t      serv;
     network_data_t      netwk;
-		sensor_th_t      sensor[3];
+		sensor_config_t     sensor;
 		snmp_data_t         snmp;
 		phase_seq_3_1_t     phase_seq;
 		phase_seq_3_2_t     phase_seq_2;
 }paras_data_t;
 
 typedef struct {
-//    float               voltage;                //电压
-//    float               current;                //电流
-//    float               power;                  //功率(视在)
-//    float               freq;                   //频率
-//    float               factor;                 //功率因数
-//    float               consump;                //耗电量consumption
-
-//    float               active;                 //有功功率
-//    float               reactive;               //无功功率
-//    uint8_t             ph_out;                 //三相输出时,用于判断该相是否有输出
-//    
-//    uint8_t             status;                 //开关状态     
-//    uint8_t             nwire;                  //零线状态  
-			uint16_t 					 voltage;															// 电压			保留1位小数,单位V
-			uint16_t           current;															// 电流			保留1位小数,单位A
-			uint32_t             power;															// 功率			保留3位小数,单位W,最大值65535W
-			uint16_t 							freq;															// 频率			保留1位小数,单位Hz
-			uint8_t 						factor;															// 因素			保留2位小数,单位fa
-			
-
-
-			uint32_t           consump;														// 耗电量   保留3位小数,单位kWh	
-//			uint8_t             status;
-//			uint8_t             nwire;
+    float               voltage;                //电压
+    float               current;                //电流
+    float               power;                  //功率(视在)
+		float               reactive_power;					//无功功率
+		float               app_power;							//视在
+    float               freq;                   //频率
+    float               factor;                 //功率因数
+    float               consump;                //耗电量consumption
 }power_t;
 
 
-//designed by liyi
-typedef struct
-{
-	uint16_t freq;																	// 频率			保留1位小数,单位Hz
-	uint8_t factor;																// 因素			保留1位小数,单位fa
-	uint16_t voltage;															// 电压			保留1位小数,单位V
-	uint16_t current;															// 电流			保留1位小数,单位A
-	uint32_t power;																// 功率			保留0位小数,单位W,最大值65535W
-	uint32_t consumer;														// 耗电量   保留2位小数,单位kWh
-}n_power_t;																		  // 16字节   相比于power_t 节约内存,20字节
-
-typedef struct{
-	uint16_t v_upper;
-	uint16_t v_lower;
-	uint16_t c_upper;
-	uint32_t p_upper;
-	uint32_t w_upper;
-}n_thr_t;																	//相对于thr_t节约内存 17字节
-
-typedef struct{
-	uint8_t           en;
-	n_thr_t 					thr[3];
-	uint8_t        		para[14];
-}total_thr_t;															//总阈值		
-
-
-typedef struct{
-	uint16_t v_upper				 :			1;						//电压超上限
-	uint16_t v_lower    		 :      1;						//电压超下限
-	uint16_t c_upper    		 :      1;						//电流超上限
-	uint16_t p_upper    		 :      1;						//功率超上限
-	uint16_t w_upper    		 :      1;						//耗电量超上限
-	uint16_t 								 :			3;						//预留 
-	uint16_t ph_1_lose    	 :      1;						//缺相L1用于输入端
-	uint16_t ph_2_lose       :    	1;						//缺相L2用于输入端
-	uint16_t ph_3_lose       :    	1;						//缺相L3用于输入端
-	uint16_t                 :      5;            //预留
-}n_alarm_t;																			//告警节约5字节
-
-typedef struct{
-	char 								 name[16];									//通道信息数据;
-	uint8_t             		type;
-  uint8_t             		addr;
-  uint8_t             			ch;										//表头id
-	uint8_t             		 sch;								  	//在控制板上的通道;
-	uint8_t                 ph_id;							    //相信息
-	uint8_t                status;
-	uint8_t                ph_val;
-  uint8_t            open_delay;									//开延时 单位s
-  uint8_t           close_delay;									//关延时 单位s
-}n_info_t;																				//节约20字节
-
-
-
-
 
 
 //designed over by liyi
@@ -448,7 +382,7 @@ typedef struct {
 	uint16_t       c_upper_en:1;
 	uint16_t       p_upper_en:1;
 	uint16_t       w_upper_en:1;
-//	uint16_t       :          11; 
+	uint16_t       :          11; 
 }thr_en;
 
 
@@ -459,32 +393,13 @@ typedef struct {
 //    thr_val_t           p_upper;
 //    thr_val_t           w_upper;                //power consumption
 			thr_en 									 en;
-			uint16_t 						v_upper;
-			uint16_t 						v_lower;
-			uint16_t 						c_upper;
-			uint32_t 						p_upper;
-			uint32_t 						w_upper;
+			float 						v_upper;
+			float 						v_lower;
+			float 						c_upper;
+			float 						p_upper;
+			float 						w_upper;
 }thr_t;
 
-typedef struct {
-//    uint8_t             v_upper;                //电压超上限
-//    uint8_t             v_lower;                //电压超下限
-//    uint8_t             c_upper;                //电流超上限
-//    uint8_t             p_upper;                //功率超上限
-//    uint8_t             w_upper;                //耗电量超上限
-//    
-//    uint8_t             ph_loss;                //缺相,0,1,2位分别代表L1,L2,L3相,相应位为1则代表缺相,为0则不缺
-	uint16_t v_upper				 :			1;						//电压超上限
-	uint16_t v_lower    		 :      1;						//电压超下限
-	uint16_t c_upper    		 :      1;						//电流超上限
-	uint16_t p_upper    		 :      1;						//功率超上限
-	uint16_t w_upper    		 :      1;						//耗电量超上限
-	uint16_t 								 :			3;						//预留 
-	uint16_t ph_1_lose    	 :      1;						//缺相L1用于输入端
-	uint16_t ph_2_lose       :    	1;						//缺相L2用于输入端
-	uint16_t ph_3_lose       :    	1;						//缺相L3用于输入端
-	uint16_t                 :      5;            //预留
-}alarm_t;
 
 typedef struct
 {
@@ -562,66 +477,87 @@ typedef struct {
     breaker_data_t      *data;
 }breaker_all_t;
 
-typedef struct board_data board_data_t;
 
 typedef struct {
-//    int (*get_power)(power_ch_t *pch);
-//    int (*get_alarm)(power_ch_t *pch);
-//    int (*set_ch)(power_ch_t *pch);
-//    int (*set_open_delay)(power_ch_t *pch);
-//    int (*set_close_delay)(power_ch_t *pch);
-//    int (*set_kb_value)(power_ch_t *pch);
-//    int (*set_threshold)(power_ch_t *pch);
-//    int (*reset_consump)(power_ch_t *pch);
+	uint8_t  chn;
+	uint8_t  status;
+}web_chn_ctrl_t;
+
+typedef struct {
+	uint8_t  status;
+}web_all_ctrl_t;
 
-//    int (*detect)(uint8_t addr);
-//    int (*get_info)(uint8_t addr, board_info_t *info);
-    //int (*get_board)(board_data_t *pbrd);
-//    int (*set_board)(uint8_t addr, uint8_t on);
-    int (*set_all)(uint16_t on,board_data_t *data);
-}board_fn_t;
+typedef struct{
+	uint8_t chn;
+	uint8_t open;
+	uint8_t close;
+}web_delay_t;
 
+typedef struct{
+	uint8_t chn;
+	thr_t   thr;
+}web_thr_t;
 
+typedef struct
+{
+	thr_t  thr;
+}web_batch_thr_t;
+
+typedef struct
+{
+	uint8_t chn;
+}web_clear_consumer_t;
+
+
+typedef network_data_t web_net_t;
+typedef web_thr_t      batch_thr_t;
+
+
+typedef struct
+{
+	uint8_t  mode;
+	uint8_t  addr;
+	uint32_t  baud;
+}web_rs485_t;
+
+typedef snmp_data_t web_snmp_t;
+
+typedef struct
+{
+	int8_t zone;
+	uint8_t date_time[32];
+}web_device_t;
+
+
+typedef struct
+{
+	float  v_max;
+	float  v_min;
+}web_sensor_config_t;
+
+typedef union
+{
+	web_chn_ctrl_t 			 cnt_ctrl;
+	web_all_ctrl_t  		 all_ctrl;
+	web_delay_t     				delay;
+	web_thr_t       					thr;
+	web_batch_thr_t   			b_thr;
+	web_clear_consumer_t    clear;
+	web_net_t               net;
+	web_rs485_t             rs485;
+	web_device_t            device;
+	web_sensor_config_t     sensor;
+	web_snmp_t              snmp;
+	batch_thr_t             batch;
+}wed_set_t;
 
-struct board_data{
-    board_fn_t          fn;
-    uint8_t             type;
-    uint8_t             addr;
-    uint8_t             chs;
-    uint8_t             sw;                     //开关监测状态
-    uint8_t             ch0;                    //board ch start
-    uint8_t             ph_loss;
-    board_info_t        info;
-    breaker_data_t      brk[2];
-    power_ch_t          *pch;                   //根据实际通道数申请连续内存
-};
 
 
 
 
 
 
-typedef struct {
-    float               voltage;                //电压
-    float               current;                //电流
-    float               power;                  //视在功率
-    float               freq;                   //频率
-    float               factor;                 //功率因数
-    float               consump;                //耗电量
-    
-    float               active;                 //有功功率
-    float               reactive;               //无功功率
-}total_t;
-typedef struct {
-    uint8_t             type;
-    total_t             total[3];
-}power_total_t;
 
-typedef struct {
-    uint8_t             chs;                    //所有控制板的总通道数
-    power_ch_t          *pch;
-    power_total_t       ttl;
-}power_all_t;
 
 typedef struct {
     char                name[32];
@@ -647,6 +583,9 @@ typedef struct {
 
 
 
+
+
+
 typedef struct {
     sensor_info_t       info;
     sensor_val_t        val[2];
@@ -658,6 +597,17 @@ typedef struct {
     sensor_data_t       *data;
 }sensor_all_t;
 
+typedef struct{
+	char name[32];
+	uint8_t status;
+	uint8_t v_max_wrn;
+	uint8_t v_min_wrn;
+	float   value;
+	float   v_max;
+	float   v_min;
+}web_sensor_info_t;
+
+
 typedef struct {
     uint8_t             type;
     uint32_t            str_id;
@@ -676,12 +626,7 @@ typedef struct {
     int32_t             loop_times;             //循环次数, 负值为无限循环
 }schedule_data_t;
 
-typedef struct cascade_saddr{
-    uint8_t      addr;
-    uint16_t     channels;
-    //board_fn_t   *fn;
-    power_ch_t   ch[POWER_SLAVE_CH_MAX];
-}slave_info_t;
+
 
 
 //////////////////////////////
@@ -848,26 +793,66 @@ typedef struct {
 }slave_list_t;
 
 
-enum {
-    PKT_TYPE_ACK=0,    
-    PKT_TYPE_PARAS,             
-    PKT_TYPE_POWER_CH,          //power_ch_t
-    PKT_TYPE_POWER_TOTAL,       //power_total_t
-    PKT_TYPE_POWER_RESET,
-    PKT_TYPE_CH_ALL,
-    PKT_TYPE_SCAN,
-    PKT_TYPE_FACTORY,
-    PKT_TYPE_ALARM,
-    PKT_TYPE_SENSOR,
-    PKT_TYPE_BREAKER,
-    PKT_TYPE_STAT,
-    PKT_TYPE_MESG,
-    PKT_TYPE_FILE,
-    PKT_TYPE_SLAVE_LIST,        //slave addr list
-    
-    PKT_TYPE_MAX
+
+enum{
+	NEW_PKT_TYPE_DEVICE_INFO,						//channels,power type,date,version,hard,version 
+	NEW_PKT_TYPE_ELE_INFO,						//name_16 status board_addr board_chn delay_open delay_close phase_l phase_r max 32
+	NEW_PKT_TYPE_SENSOR,
+	NEW_PKT_TYPE_NETWORK,
+	NEW_PKT_TYPE_RS485,
+	NEW_PKT_TYPE_SNMP,
+	NEW_PKT_TYPE_WANNING,
+	NEW_PKT_TYPE_NTP,
 };
 
+
+enum{
+	NEW_SUB_PKT_TYPE_ELE_DATA_L1,
+	NEW_SUB_PKT_TYPE_ELE_DATA_L2,
+	NEW_SUB_PKT_TYPE_ELE_DATA_L3,
+	NEW_SUB_PKT_TYPE_ELE_DATA_INFO,
+	NEW_SUB_PKT_TYPE_ELE_DATA_ALL,
+	NEW_SUB_PKT_TYPE_ELE_DATA_THR,
+	NEW_SUB_PKT_TYPE_ELE_DELAY,
+	NEW_SUB_PKT_TYPE_ELE_CLEAR_CONSUMER,
+	NEW_SUB_PKT_TYPE_ELE_CTRL,
+	NEW_SUB_PKT_TYPE_ELE_ALL_CTRL,
+	NEW_SUB_PKT_TYPE_ELE_BATCH,
+};
+
+enum{
+	NEW_SUB_PKT_TYPE_HUMI = 0,
+	NEW_SUB_PKT_TYPE_TEMP,
+	NEW_SUB_PKT_TYPE_SMOKE,
+	NEW_SUB_PKT_TYPE_CO2,
+};
+
+enum{
+	NEW_SUB_PKT_TYPE_WANNING_CLEAN = 0,
+	NEW_SUB_PKT_TYPE_WANNING_SOUND_LIGHT_CLEAN,
+};
+
+
+
+typedef struct{
+	uint8_t 	chs;
+	uint8_t 	power_type;
+	int8_t  	zone;
+	uint8_t 	board_cnt;
+	char      soft_version[32];
+	char      hard_version[32];
+	char    date[16];
+	char    time[16];
+}web_device_info_t;
+
+
+
+typedef alarm_all_t  web_channel_wanning_t;
+
+
+
+
+
 enum {
     SUB_TYPE_POWER_SWITCH=0,            //set relay switch
     SUB_TYPE_POWER_ALARM,
@@ -900,6 +885,10 @@ typedef struct {
     uint8_t   data[0];
 }pkt_hdr_t;
 
+
+
+
+
 #pragma pack ()
 
 #define CONCAT(a,b)     a b

+ 0 - 7
f427/applications/db.c

@@ -422,13 +422,6 @@ static node_t get_node(db_handle_t *h, int tab_id)
         case DB_TAB_CFG_POWER:
         case DB_TAB_REC_POWER:
         {
-            power_all_t all;
-            
-            power_data_get(&all);
-            nd.buf = all.pch;
-            nd.blen = sizeof(power_ch_t)*all.chs;
-            nd.dlen = nd.blen;
-            nd.tp = 0;
         }
         break;
         

+ 10 - 3
f427/applications/dflt.c

@@ -41,9 +41,15 @@ const paras_data_t DFLT_PARAS={
             .dns2 = "1.1.1.1",
         },
 				.sensor={
-					{0,0},
-					{0,0},
-					{0,0},
+					.sens[0]={
+						0,0,
+					},
+					.sens[1]={
+						0,0,
+					},
+					.sens[2]={
+						0,0,
+					},
 				},
         .cas = {
             .mode = MODBUS_SLAVE,
@@ -78,6 +84,7 @@ const paras_data_t DFLT_PARAS={
 					.mode = 1,
 					.version = 1,
 					.publics = "public",
+					.privates = "private",
 					.trapmode = 1,
 					.nms_ip = "127.0.0.1",
 				},

+ 18 - 0
f427/applications/fifo/fifo.c

@@ -115,6 +115,23 @@ void generic_list_get(GenericFixedList *list,void * data,uint8_t lenth)
 		}
 	}
 }
+void generic_list_clean(GenericFixedList *list)
+{
+	if (list->current_size > 0) {
+			GenericNode *current = list->head;
+      GenericNode *next_node = NULL;
+			for (int i = 0; i < list->current_size; i++) {
+            next_node = current->next;
+            free(current->data);
+            free(current);
+            current = next_node;
+      }
+	}
+	list->head = NULL;
+  list->tail = NULL;
+  list->current_size = 0;
+}
+
 
 void generic_list_destroy(GenericFixedList *list) {
     if (list->current_size > 0) {
@@ -128,6 +145,7 @@ void generic_list_destroy(GenericFixedList *list) {
             current = next_node;
         }
     }
+		
     free(list);
 }
 

+ 1 - 1
f427/applications/fifo/fifo.h

@@ -31,7 +31,7 @@ void generic_list_get(GenericFixedList *list,void * data,uint8_t lenth);
 
 bool generic_list_append(GenericFixedList *list, const void *data, size_t data_size);
 
-
+void generic_list_clean(GenericFixedList *list);
 
 void generic_list_destroy(GenericFixedList *list);
 

+ 1 - 0
f427/applications/main.c

@@ -110,6 +110,7 @@ static int user_init(void)
     snmp2_init();
     power_init();
     cascade_init();
+	  sensor_init();
     web_init();
     return 0;
 }

+ 3 - 1
f427/applications/mb.c

@@ -1,6 +1,7 @@
 #include "mb.h"
 #include "lock.h"
 #include "list.h"
+#include "paras.h"
 
 
 #define MALLOC   malloc
@@ -73,7 +74,8 @@ int mb_init(void)
     int i,r;
     mb_handle_t *h=&mbHandle;
     const char *err[MB_ID_MAX]={"power","sensor","cascade"};
-    
+		paras_data_t* p_d = paras_get();
+    mb_paras[MB_ID_CASCADE].para.rtu.baudrate = p_d->cas.baud;
     memset(h, 0, sizeof(mb_handle_t));
     for(i=0; i<MB_ID_MAX; i++) {
         r = mb_setup(i, &mb_paras[i]);

+ 2 - 0
f427/applications/mb.h

@@ -31,6 +31,8 @@ typedef struct {
 
 int mb_init(void);
 int mb_deinit(void);
+int mb_deinit_n(uint8_t id);
+int mb_init_n(uint8_t id,mb_para_t *para);
 int mb_setup(int id, mb_para_t *para);
 
 int mb_read(int id, uint8_t addr, uint16_t reg, uint16_t *data, int cnt, int timeout);

+ 1 - 1
f427/applications/packages/qmodbus-latest/src/modbus_backend.c

@@ -222,7 +222,7 @@ int mb_backend_read(mb_backend_t *backend, u8 *buf, int bufsize)//从后端读
                 break;
             }
         }
-        mb_port_delay_ms(2);
+       mb_port_delay_ms(1);
     }
     return(pos);
 }

+ 1 - 0
f427/applications/packages/qmodbus-latest/src/modbus_rtu.c

@@ -29,6 +29,7 @@ int mb_rtu_frm_parse(const u8 *buf, int len, mb_rtu_frm_t *frm, mb_pdu_type_t ty
     }
 
     frm->saddr = *buf;
+		
     int remain = len - (MB_RTU_SADDR_SIZE + MB_RTU_CRC_SIZE);
     int pdu_len = mb_pdu_parse(buf + 1, remain, &(frm->pdu), type);
     if (pdu_len <= 0)

+ 0 - 2
f427/applications/packages/qmodbus-latest/src/modbus_slave.c

@@ -419,7 +419,6 @@ static void mb_slave_recv_deal_rtu(mb_inst_t *hinst, u8 *buf, int len)
     {
         mb_slave_pdu_deal(hinst, &(frm.pdu));
     }
-
     int flen = mb_rtu_frm_make(hinst->buf, &frm, MB_PDU_TYPE_RSP);
     mb_send(hinst, hinst->buf, flen);
 }
@@ -524,7 +523,6 @@ void mb_slave_fsm(mb_inst_t *hinst)
     {
         return;
     }
-    
     mb_slave_recv_deal(hinst, hinst->buf, rlen);
 }
 

+ 67 - 39
f427/applications/paras.c

@@ -614,7 +614,7 @@ static int proc_phase_3_2(dictionary *dic,int op,phase_seq_3_2_t *ph_2)
 
 
 
-static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
+static int proc_sensor(dictionary *dic, int op, sensor_config_t *sensor)
 {
     int r=0;
     char temp[100];
@@ -641,11 +641,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[0].th_max_1 = r;
+           sensor->sens[0].th_max_1 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[0].th_max_1);
+        sprintf(temp, "%d",  sensor->sens[0].th_max_1);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -659,11 +659,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[0].th_min_1 = r;
+            sensor->sens[0].th_min_1 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[0].th_min_1);
+        sprintf(temp, "%d",  sensor->sens[0].th_min_1);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -678,11 +678,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[0].th_max_2 = r;
+             sensor->sens[0].th_max_2 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[0].th_max_2);
+        sprintf(temp, "%d",  sensor->sens[0].th_max_2);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -697,11 +697,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[0].th_min_2 = r;
+            sensor->sens[0].th_min_2 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[0].th_min_2);
+        sprintf(temp, "%d", sensor->sens[0].th_min_2);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -716,11 +716,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[1].th_max_1 = r;
+             sensor->sens[1].th_max_1 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[1].th_max_1);
+        sprintf(temp, "%d",sensor->sens[1].th_max_1);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -734,11 +734,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[1].th_min_1 = r;
+            sensor->sens[1].th_min_1 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[1].th_min_1);
+        sprintf(temp, "%d", sensor->sens[1].th_min_1);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -753,11 +753,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[1].th_max_2 = r;
+            sensor->sens[1].th_max_2 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[1].th_max_2);
+        sprintf(temp, "%d",sensor->sens[1].th_max_2);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -772,11 +772,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[1].th_min_2 = r;
+            sensor->sens[1].th_min_2 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[1].th_min_2);
+        sprintf(temp, "%d", sensor->sens[1].th_min_2);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -791,11 +791,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[2].th_max_1 = r;
+           sensor->sens[2].th_max_1 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[2].th_max_1);
+        sprintf(temp, "%d", sensor->sens[2].th_max_1);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -809,11 +809,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[2].th_min_1 = r;
+            sensor->sens[2].th_min_1 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[2].th_min_1);
+        sprintf(temp, "%d", sensor->sens[2].th_min_1);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -828,11 +828,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[2].th_max_2 = r;
+           sensor->sens[2].th_max_2 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[2].th_max_2);
+        sprintf(temp, "%d",sensor->sens[2].th_max_2);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -847,11 +847,11 @@ static int proc_sensor(dictionary *dic, int op, sensor_th_t sensor[])
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            sensor[2].th_min_2 = r;
+           sensor->sens[2].th_min_2 = r;
         }
     }
     else {
-        sprintf(temp, "%d", sensor[2].th_min_2);
+        sprintf(temp, "%d", sensor->sens[2].th_min_2);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -928,6 +928,7 @@ static int proc_snmp_n(dictionary *dic, int op, snmp_data_t *snmp)
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1;
         } else {
+						memset(snmp->publics,0,10);
             memcpy(snmp->publics,str,strlen(str));
         }
     }
@@ -939,7 +940,25 @@ static int proc_snmp_n(dictionary *dic, int op, snmp_data_t *snmp)
             return -1;
         }
     }
-
+		token = "snmp:private";
+    if(op==PARAS_READ) {
+        const char * str = iniparser_getstring(dic, token,NULL);
+        if(str == NULL) {
+            LOGE("___ iniparser_getstring %s failed\n", token);
+            return -1;
+        } else {
+						memset(snmp->privates,0,10);
+            memcpy(snmp->privates,str,strlen(str));
+        }
+    }
+    else {
+        sprintf(temp, "%s", snmp->privates);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
 		token = "snmp:trap_mode";
     if(op==PARAS_READ) {
         r = iniparser_getint(dic, token, -1);
@@ -1506,6 +1525,7 @@ static int proc_snmp(char *path, int op, snmp_data_t *snmp)
             fprintf(fp, "mode        = \"%d\"\n", snmp->mode);
             fprintf(fp, "version     = \"%d\"\n", snmp->version);
             fprintf(fp, "public      = \"%s\"\n", snmp->publics);
+						fprintf(fp, "private      = \"%s\"\n", snmp->privates);
             fprintf(fp, "trap_mode   = \"%d\"\n", snmp->trapmode);
             fprintf(fp, "nms_ip      = \"%s\"\n", snmp->nms_ip);
 #if 0
@@ -3641,7 +3661,8 @@ static dictionary* ini_load(char *path, paras_data_t *info)
         LOGE("___proc_misc failed\n");
     }
     
-		r = proc_sensor(dic, PARAS_READ, info->sensor);
+		r = proc_sensor(dic, PARAS_READ, &info->sensor);
+		
     if(r) {
         LOGE("___proc_sensor failed\n");
     }	
@@ -3720,21 +3741,21 @@ static int ini_reset(paras_handle_t *h)
     fprintf(fp, "\n");
 		
 		fprintf(fp, "[sensor_1]\n");
-		fprintf(fp, "th_max_1    = \"%d\"\n", p->sensor[0].th_max_1);
-		fprintf(fp, "th_min_1    = \"%d\"\n", p->sensor[0].th_min_1);
-		fprintf(fp, "th_max_2    = \"%d\"\n", p->sensor[0].th_max_2);
-		fprintf(fp, "th_min_2    = \"%d\"\n", p->sensor[0].th_min_2);
+		fprintf(fp, "th_max_1    = \"%d\"\n", p->sensor.sens[0].th_max_1);
+		fprintf(fp, "th_min_1    = \"%d\"\n", p->sensor.sens[0].th_min_1);
+		fprintf(fp, "th_max_2    = \"%d\"\n", p->sensor.sens[0].th_max_2);
+		fprintf(fp, "th_min_2    = \"%d\"\n", p->sensor.sens[0].th_min_2);
 
 		fprintf(fp, "[sensor_2]\n");
-		fprintf(fp, "th_max_1    = \"%d\"\n", p->sensor[1].th_max_1);
-		fprintf(fp, "th_min_1    = \"%d\"\n", p->sensor[1].th_min_1);
-		fprintf(fp, "th_max_2    = \"%d\"\n", p->sensor[1].th_max_2);
-		fprintf(fp, "th_min_2    = \"%d\"\n", p->sensor[1].th_min_2);
+		fprintf(fp, "th_max_1    = \"%d\"\n", p->sensor.sens[1].th_max_1);
+		fprintf(fp, "th_min_1    = \"%d\"\n", p->sensor.sens[1].th_min_1);
+		fprintf(fp, "th_max_2    = \"%d\"\n", p->sensor.sens[1].th_max_2);
+		fprintf(fp, "th_min_2    = \"%d\"\n", p->sensor.sens[1].th_min_2);
 		fprintf(fp, "[sensor_3]\n");
-		fprintf(fp, "th_max_1    = \"%d\"\n", p->sensor[2].th_max_1);
-		fprintf(fp, "th_min_1    = \"%d\"\n", p->sensor[2].th_min_1);
-		fprintf(fp, "th_max_2    = \"%d\"\n", p->sensor[2].th_max_2);
-		fprintf(fp, "th_min_2    = \"%d\"\n", p->sensor[2].th_min_2);
+		fprintf(fp, "th_max_1    = \"%d\"\n", p->sensor.sens[2].th_max_1);
+		fprintf(fp, "th_min_1    = \"%d\"\n", p->sensor.sens[2].th_min_1);
+		fprintf(fp, "th_max_2    = \"%d\"\n", p->sensor.sens[2].th_max_2);
+		fprintf(fp, "th_min_2    = \"%d\"\n", p->sensor.sens[2].th_min_2);
 		fprintf(fp, "\n");
 		
     fprintf(fp, "[network]\n");
@@ -3750,6 +3771,7 @@ static int ini_reset(paras_handle_t *h)
     fprintf(fp, "mode        = \"%d\"\n", p->snmp.mode);
     fprintf(fp, "version     = \"%d\"\n", p->snmp.version);
     fprintf(fp, "public      = \"%s\"\n", p->snmp.publics);
+		fprintf(fp, "private      = \"%s\"\n", p->snmp.privates);
     fprintf(fp, "trap_mode   = \"%d\"\n", p->snmp.trapmode);
     fprintf(fp, "nms_ip      = \"%s\"\n", p->snmp.nms_ip);
 		fprintf(fp, "\n");	
@@ -3807,6 +3829,12 @@ static int ini_save(paras_handle_t *h)
         LOGE("___ini_w_snmp failed\n");
         return -1;
     }
+		r =proc_sensor(h->dic,PARAS_WRITE,&h->paras.sensor);
+
+    if(r) {
+        LOGE("___ini_w_sensor failed\n");
+        return -1;
+    }		
 		r=proc_phase_3_1(h->dic,PARAS_WRITE,&h->paras.phase_seq);
 		if(r){
 			LOGE("proc_phase_3_1 failed\n");

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 996 - 3238
f427/applications/power.c


+ 71 - 35
f427/applications/power.h

@@ -137,38 +137,78 @@ enum {
     THR_C_UPPER, 
     THR_P_UPPER,
     THR_W_UPPER,
-    
     THR_MAX,
 };
 
+typedef struct 
+{
+	power_t all;
+	power_t all_l[3];
+}power_new_total_t;
+
+typedef union{
+	uint8_t ph;
+	struct{
+		uint8_t ph_l;
+		uint8_t ph_r;
+	}ph2;
+}phse_t;
+
+
+typedef struct{
+    char                name[16];
+    uint8_t             addr;
+    uint8_t             sch;                     //该通道在其所在的板上的序号,程序始于0,用户始于1
+    phse_t              pse;
+    uint8_t             open_delay;
+    uint8_t             close_delay;
+		uint8_t             status;
+		alarm_all_t         alarm;
+}info_new_t;
+
+
+
+typedef struct{
+    info_new_t              info;
+    power_t             power[3];                 //电力信息
+    thr_t               thr;                      //阈值
+}power_ch_new_t;
+typedef struct{
+	uint8_t cnt;
+	uint8_t addr;
+	power_ch_new_t *p_ch;
+}board_power_info_t;
+
+
+typedef struct{
+	uint8_t flag;
+	board_power_info_t board_new;
+}board_status_t;
+
+
+typedef struct{
+		lock_t          				   lck;
+		board_status_t             board[33];
+		uint8_t         				   chs;
+		uint8_t                    brd_cnt;
+		uint8_t         				   power_type;
+		uint8_t         				   brd_max;
+		uint8_t         					 ch_max;
+	  power_new_total_t					 total;
+		product_data_t             *product;
+	  void (*get_board_power_info)(uint8_t addr);
+	  void (*get_board_thr_info)(uint8_t addr);
+	  void (*get_board_delay_info)(uint8_t addr);
+	  void (*set_delay)(uint8_t addr,uint8_t b_addr,uint16_t delay_open, uint16_t delay_close);
+	  void (*set_thr)(uint8_t addr,uint8_t b_addr,thr_t *th);
+	  void (*set_batch_thr)(uint8_t addr,thr_t *th);
+		void (*set_status)(uint8_t addr,uint8_t b_addr,uint8_t status);
+	  void (*set_consumer_clear)(uint8_t addr,uint8_t b_addr);
+		void (*set_all_status)(uint8_t status);
+		void (*set_all_consumer_clear)(uint8_t addr);
+		power_ch_new_t      			 *pch;
+}power_handle_new_t;
 
-typedef struct {
-    float   voltage_k;//电压K
-    float   voltage_b;//电压B
-    float   current_k;//电流K
-    float   current_b;//电流B
-}kb_val_t;
-
-
-typedef struct {
-    lock_t          lck;
-    uint8_t         cur_addr;
-    
-    uint8_t         chs;                    //所有控制板的总通道数
-    power_ch_t      *pch[32];                  //动态指针
-    power_ch_t      ch0;
-    
-    uint8_t         cnt;                    //实际扫到的板子个数,不可大于POWER_
-    uint8_t         brd_max;
-    board_data_t    *pbrd[POWER_BOARD_MAX+1];       //通过modbus地址索引
-    
-    board_key_t     key[POWER_BOARD_MAX+1];
-    power_total_t   ttl;
-    uint8_t         flag[POWER_CH_MAX];
-    
-    product_data_t *prod;
-    power_all_t    all;
-}power_handle_t;
 
 
 
@@ -177,7 +217,6 @@ int power_deinit(void);
 
 int power_scan(void);
 int power_get_ch(uint8_t ch, power_ch_t *pch);
-int power_get_board(board_data_t *pb);
 
 int power_set_ch_sw(uint8_t ch, uint8_t on);
 int power_set_ch_sw_n(power_ch_t *pch);
@@ -188,17 +227,14 @@ int power_get_threshold(power_ch_t *pch);
 int power_set_threshold(power_ch_t *pch);
 int power_set_open_delay(power_ch_t *pch);
 int power_set_close_delay(power_ch_t *pch);
-int power_get_board(board_data_t *pbrd);
 int power_reset(void);
 
-power_all_t * power_get_all(void);
-int power_data_get(power_all_t *all);
+power_handle_new_t * power_get_all(void);
+int power_data_get(power_handle_new_t *all);
 int power_breaker_get(breaker_all_t *all);
 
-power_handle_t * get_power_handle(void);
-int power_set_clear_consumer(power_ch_t *pch);
+int power_data_get_board_cnt();
 
-int power_set_ph_cfg(power_ch_t *pch);
 
 #endif
 

+ 7 - 6
f427/applications/rtconfig.h

@@ -78,6 +78,7 @@
 #define RT_MAIN_THREAD_STACK_SIZE (1024*10)
 #define RT_MAIN_THREAD_PRIORITY 10
 
+
 #define RT_USING_MSH
 #define RT_USING_FINSH
 #define FINSH_USING_MSH
@@ -112,7 +113,7 @@
 #define RT_USING_SERIAL
 #define RT_USING_SERIAL_V2
 #define RT_SERIAL_USING_DMA
-#define RT_SERIAL_RB_BUFSZ 64
+#define RT_SERIAL_RB_BUFSZ 512
 #define RT_USING_SDIO
 #define SDIO_MAX_FREQ 40*1000000
 #define RT_MMCSD_STACK_SIZE (1024*4)
@@ -199,14 +200,14 @@
 #define RT_LWIP_RAW_PCB_NUM 8
 #define RT_LWIP_UDP_PCB_NUM 8
 #define RT_LWIP_TCP_PCB_NUM 8
-#define RT_LWIP_TCP_SEG_NUM 40
-#define RT_LWIP_TCP_SND_BUF 8196
-#define RT_LWIP_TCP_WND 8196
+#define RT_LWIP_TCP_SEG_NUM 20
+#define RT_LWIP_TCP_SND_BUF 4096
+#define RT_LWIP_TCP_WND 4096
 #define RT_LWIP_TCPTHREAD_PRIORITY 10
 #define RT_LWIP_TCPTHREAD_MBOX_SIZE 8
-#define RT_LWIP_TCPTHREAD_STACKSIZE  4096                 
+#define RT_LWIP_TCPTHREAD_STACKSIZE  2048                
 #define RT_LWIP_ETHTHREAD_PRIORITY 12
-#define RT_LWIP_ETHTHREAD_STACKSIZE  4096            
+#define RT_LWIP_ETHTHREAD_STACKSIZE  2048            
 #define RT_LWIP_ETHTHREAD_MBOX_SIZE 8
 #define RT_LWIP_REASSEMBLY_FRAG
 #define LWIP_NETIF_STATUS_CALLBACK 1

+ 65 - 40
f427/applications/sensor.c

@@ -8,7 +8,7 @@
 #include "beep.h"
 #include "wanning.h"
 #include "thread.h"
-
+#include "led.h"
 
 
 
@@ -72,21 +72,31 @@ static void sensor_wanning_operation(op_sensor_w_info  *info,char *name)
 	struct tm *tm=localtime(&t);
 	
 	w_info.type = info->wanning_type;
-	sprintf(w_info.date, "%04d%/%02d/%02d %2d:%2d:%2d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
-
-	sprintf(w_info.waning_context,"%s %s %d %s %s %s!",name,lang_sensor_str[lang][info->para],info->para,lang_sensor_str[lang][info->over_low],lang_sensor_str[lang][info->max_min],lang_sensor_str[lang][STR_SENSOR_ID_VALUE]);
-
+	sprintf(&w_info.date[0], "%04d%/%02d/%02d %02d:%02d:%02d", (tm->tm_year+1900), tm->tm_mon+1, tm->tm_mday,tm->tm_hour, tm->tm_min, tm->tm_sec);
+	if(lang == 0)
+		sprintf(&w_info.waning_context[0],"%s%s%d%s%s%s!",name,lang_sensor_str[lang][STR_SENSOR_PARA],
+																											info->para,lang_sensor_str[lang][info->over_low],
+																											lang_sensor_str[lang][info->max_min],
+																											lang_sensor_str[lang][STR_SENSOR_ID_VALUE]);
+	else
+		sprintf(&w_info.waning_context[0],"%s %s %d %s %s %s!",name,lang_sensor_str[lang][STR_SENSOR_PARA],
+																													info->para,lang_sensor_str[lang][info->over_low],
+																													lang_sensor_str[lang][info->max_min],
+																													lang_sensor_str[lang][STR_SENSOR_ID_VALUE]);
 	wanning_insert(w_info);
 	
+	
 	if(paras_get()->snmp.trapmode == 1)
 	{
-			sensor_data.ID = info->id;
-			sensor_data.Alarmid = ALARM_TYPE_SENSOR;
-			memcpy(sensor_data.AlarmDate,w_info.date,32);
-			memcpy(sensor_data.AlarmContext,w_info.waning_context,64);
-			snmp_sensor_alarm_trap(&sensor_data);
+
+		sensor_data.ID = info->id;
+		sensor_data.Alarmid = ALARM_TYPE_SENSOR;
+		memcpy(sensor_data.AlarmDate,w_info.date,32);
+		memcpy(sensor_data.AlarmContext,w_info.waning_context,64);
+		snmp_alarm_trap(&sensor_data,1);
 	}
 	beep_set(BEEP_MODE_WARN1);
+	led_set(LED_MODE_WARN1);
 }
 
 
@@ -152,24 +162,24 @@ int sensor_init(void)
 //			p_d->sensor[0].th_min_1 = 7000;
 //			p_d->sensor[0].th_max_2 = 1500;
 //			p_d->sensor[0].th_min_2 = 1000;
-			if(p_d->sensor[0].th_max_1 != 0)
+			if(p_d->sensor.sens[0].th_max_1 != 0)
 			{
-				ssHandle.all.data[0].val[0].thr.max = ((float)p_d->sensor[0].th_max_1 /100.0);
+				ssHandle.all.data[0].val[0].thr.max = ((float)p_d->sensor.sens[0].th_max_1 /100.0);
 				ssHandle.all.data[0].val[0].thr.en.th_sen_max_en = 1;
 			}
-			if(p_d->sensor[0].th_min_1 != 0)
+			if(p_d->sensor.sens[0].th_min_1 != 0)
 			{
-				ssHandle.all.data[0].val[0].thr.min = ((float)p_d->sensor[0].th_min_1 /100.0);
+				ssHandle.all.data[0].val[0].thr.min = ((float)p_d->sensor.sens[0].th_min_1 /100.0);
 				ssHandle.all.data[0].val[0].thr.en.th_sen_min_en = 1;
 			}
-			if(p_d->sensor[0].th_max_2 != 0)
+			if(p_d->sensor.sens[0].th_max_2 != 0)
 			{
-				ssHandle.all.data[0].val[1].thr.max = ((float)p_d->sensor[0].th_max_2 /100.0);
+				ssHandle.all.data[0].val[1].thr.max = ((float)p_d->sensor.sens[0].th_max_2 /100.0);
 				ssHandle.all.data[0].val[1].thr.en.th_sen_max_en = 1;
 			}
-			if(p_d->sensor[0].th_min_2 != 0)
+			if(p_d->sensor.sens[0].th_min_2 != 0)
 			{
-				ssHandle.all.data[0].val[1].thr.min = ((float)p_d->sensor[0].th_min_2 /100.0);
+				ssHandle.all.data[0].val[1].thr.min = ((float)p_d->sensor.sens[0].th_min_2 /100.0);
 				ssHandle.all.data[0].val[1].thr.en.th_sen_min_en = 1;
 			}
 			
@@ -180,24 +190,24 @@ int sensor_init(void)
 			ssHandle.all.data[1].info.type = SENSOR_TYPE_SMOKE;
 			ssHandle.all.data[1].info.status = 0;
 			ssHandle.all.data[1].info.num_val = 1;		
-			if(p_d->sensor[1].th_max_1 != 0)
+			if(p_d->sensor.sens[1].th_max_1 != 0)
 			{
-				ssHandle.all.data[1].val[0].thr.max = ((float)p_d->sensor[1].th_max_1 /100.0);
+				ssHandle.all.data[1].val[0].thr.max = ((float)p_d->sensor.sens[1].th_max_1 /100.0);
 				ssHandle.all.data[1].val[0].thr.en.th_sen_max_en = 1;
 			}
-			if(p_d->sensor[1].th_min_1 != 0)
+			if(p_d->sensor.sens[1].th_min_1 != 0)
 			{
-				ssHandle.all.data[1].val[0].thr.min = ((float)p_d->sensor[1].th_min_1 /100.0);
+				ssHandle.all.data[1].val[0].thr.min = ((float)p_d->sensor.sens[1].th_min_1 /100.0);
 				ssHandle.all.data[1].val[0].thr.en.th_sen_min_en = 1;
 			}
-			if(p_d->sensor[1].th_max_2 != 0)
+			if(p_d->sensor.sens[1].th_max_2 != 0)
 			{
-				ssHandle.all.data[1].val[1].thr.max = ((float)p_d->sensor[1].th_max_2 /100.0);
+				ssHandle.all.data[1].val[1].thr.max = ((float)p_d->sensor.sens[1].th_max_2 /100.0);
 				ssHandle.all.data[1].val[1].thr.en.th_sen_max_en = 1;
 			}
-			if(p_d->sensor[1].th_min_2 != 0)
+			if(p_d->sensor.sens[1].th_min_2 != 0)
 			{
-				ssHandle.all.data[1].val[1].thr.min = ((float)p_d->sensor[1].th_min_2 /100.0);
+				ssHandle.all.data[1].val[1].thr.min = ((float)p_d->sensor.sens[1].th_min_2 /100.0);
 				ssHandle.all.data[1].val[1].thr.en.th_sen_min_en = 1;
 			}			
 			
@@ -209,24 +219,24 @@ int sensor_init(void)
 			ssHandle.all.data[2].info.type = SENSOR_TYPE_GAS;
 			ssHandle.all.data[2].info.status = 0;
 			ssHandle.all.data[2].info.num_val = 1;
-			if(p_d->sensor[2].th_max_1 != 0)
+			if(p_d->sensor.sens[2].th_max_1 != 0)
 			{
-				ssHandle.all.data[2].val[0].thr.max = ((float)p_d->sensor[2].th_max_1 /100.0);
+				ssHandle.all.data[2].val[0].thr.max = ((float)p_d->sensor.sens[2].th_max_1 /100.0);
 				ssHandle.all.data[2].val[0].thr.en.th_sen_max_en = 1;
 			}
-			if(p_d->sensor[2].th_min_1 != 0)
+			if(p_d->sensor.sens[2].th_min_1 != 0)
 			{
-				ssHandle.all.data[2].val[0].thr.min = ((float)p_d->sensor[2].th_min_1 /100.0);
+				ssHandle.all.data[2].val[0].thr.min = ((float)p_d->sensor.sens[2].th_min_1 /100.0);
 				ssHandle.all.data[2].val[0].thr.en.th_sen_min_en = 1;
 			}
-			if(p_d->sensor[2].th_max_2 != 0)
+			if(p_d->sensor.sens[2].th_max_2 != 0)
 			{
-				ssHandle.all.data[2].val[1].thr.max = ((float)p_d->sensor[2].th_max_2 /100.0);
+				ssHandle.all.data[2].val[1].thr.max = ((float)p_d->sensor.sens[2].th_max_2 /100.0);
 				ssHandle.all.data[2].val[1].thr.en.th_sen_max_en = 1;
 			}
-			if(p_d->sensor[2].th_min_2 != 0)
+			if(p_d->sensor.sens[2].th_min_2 != 0)
 			{
-				ssHandle.all.data[2].val[1].thr.min = ((float)p_d->sensor[2].th_min_2 /100.0);
+				ssHandle.all.data[2].val[1].thr.min = ((float)p_d->sensor.sens[2].th_min_2 /100.0);
 				ssHandle.all.data[2].val[1].thr.en.th_sen_min_en = 1;
 			}			
 			thread_start(THREAD_ID_SENSOR, sensor_thread, NULL);
@@ -394,7 +404,7 @@ int sensor_query(void)
 						if(ssHandle.all.data[i].val[0].value > ssHandle.all.data[i].val[0].thr.max)
 						{
 							ssHandle.all.data[i].val[0].s_alarm.max_up = 1;
-							if(back_waning_up != ssHandle.all.data[i].val[0].s_alarm.max_up)
+							if(!back_waning_up && ssHandle.all.data[i].val[0].s_alarm.max_up)
 							{
 								info.id = i;
 								info.max_min = STR_SENSOR_ID_MAXS;
@@ -407,6 +417,9 @@ int sensor_query(void)
 						{
 							ssHandle.all.data[i].val[0].s_alarm.max_up = 0;
 						}				
+					}else
+					{
+						ssHandle.all.data[i].val[0].s_alarm.max_up = 0;
 					}
 					if(ssHandle.all.data[i].val[0].thr.en.th_sen_min_en)
 					{
@@ -414,7 +427,7 @@ int sensor_query(void)
 						if(ssHandle.all.data[i].val[0].value < ssHandle.all.data[i].val[0].thr.min)
 						{
 							ssHandle.all.data[i].val[0].s_alarm.min_down = 1;
-							if(back_waning_down != ssHandle.all.data[i].val[0].s_alarm.min_down)
+							if(!back_waning_down && ssHandle.all.data[i].val[0].s_alarm.min_down)
 							{
 								info.id = i;
 								info.max_min = STR_SENSOR_ID_MIN;
@@ -427,16 +440,21 @@ int sensor_query(void)
 						{
 							ssHandle.all.data[i].val[0].s_alarm.min_down = 0;
 						}							
+					}else
+					{
+						ssHandle.all.data[i].val[0].s_alarm.min_down = 0;
 					}
 					if(ssHandle.all.data[i].info.num_val == 2)
 					{
-						if(ssHandle.all.data[i].val[0].thr.en.th_sen_max_en)
+						if(ssHandle.all.data[i].val[1].thr.en.th_sen_max_en)
 						{
 							uint8_t  back_waning_up = ssHandle.all.data[i].val[1].s_alarm.max_up;
+							//printf("back_waning_up = %d  value=%.2f  thr_max = %f\n",back_waning_up,ssHandle.all.data[i].val[1].value,ssHandle.all.data[i].val[1].thr.max);
 							if(ssHandle.all.data[i].val[1].value > ssHandle.all.data[i].val[1].thr.max)
 							{
 								ssHandle.all.data[i].val[1].s_alarm.max_up = 1;
-								if(back_waning_up != ssHandle.all.data[i].val[1].s_alarm.max_up)
+		
+								if(!back_waning_up && ssHandle.all.data[i].val[1].s_alarm.max_up)
 								{
 									info.id = i;
 									info.max_min = STR_SENSOR_ID_MAXS;
@@ -449,14 +467,18 @@ int sensor_query(void)
 								{
 									ssHandle.all.data[i].val[1].s_alarm.max_up = 0;
 								}				
+							}else
+							{
+								ssHandle.all.data[i].val[1].s_alarm.max_up = 0;
 							}
 							if(ssHandle.all.data[i].val[1].thr.en.th_sen_min_en)
 							{
 								uint8_t  back_waning_down = ssHandle.all.data[i].val[1].s_alarm.min_down;
+								//printf("back_waning_down = %d  value=%.2f  thr_max = %f\n",back_waning_down,ssHandle.all.data[i].val[1].value,ssHandle.all.data[i].val[1].thr.min);
 								if(ssHandle.all.data[i].val[1].value < ssHandle.all.data[i].val[1].thr.min)
 								{
 									ssHandle.all.data[i].val[1].s_alarm.min_down = 1;
-									if(back_waning_down != ssHandle.all.data[i].val[1].s_alarm.min_down)
+									if(!back_waning_down && ssHandle.all.data[i].val[1].s_alarm.min_down)
 									{
 										info.id = i;
 										info.max_min = STR_SENSOR_ID_MIN;
@@ -469,7 +491,10 @@ int sensor_query(void)
 								{
 									ssHandle.all.data[i].val[1].s_alarm.min_down = 0;
 								}							
-							}						
+							}else
+							{
+								ssHandle.all.data[i].val[1].s_alarm.min_down = 0;
+							}
 					}
 				}else
 				{

+ 103 - 373
f427/applications/snmp.c

@@ -64,36 +64,42 @@ static s16_t sysinfo_get_value(const struct snmp_scalar_array_node_def *node, vo
     char *var = NULL;
     s16_t var_len;
 		char buff[100]= {0};
+		power_handle_new_t *all = power_get_all();
+		paras_data_t *p=paras_get();
 		switch(node->oid)
 		{
 			case 1:
 			{
-				sprintf(buff,"%d",0);
+				sprintf(buff,"GCG-GD32F427-%d",p->cas.addr);
 			}
 			break;
 			case 2:
 			{
-					sprintf(buff,"%s","smart_pdu");
+					sprintf(buff,"%s",p->prod.name);
 			}
 			break;
 			case 3:
 			{
-					sprintf(buff,"%s","DC");			
+				sprintf(buff,"%s",(p->prod.type == 0) ? "AC-AC" : 
+												  (p->prod.type == 1) ? "DC-DC" : 
+				                  (p->prod.type == 3) ? "AC3-AC3" :
+													((p->prod.type == 4) || (p->prod.type == 5)) ? "AC3-AC1" :
+													(p->prod.type == 6) ? "AC3-AC2" : "Other");			
 			}
 			break;
 			case 4:
 			{
-					sprintf(buff,"%s","SN1235");					
+					sprintf(buff,"%s",p->prod.pnumber);					
 			}
 			break;
 			case 5:
 			{
-				sprintf(buff,"%d",12);		
+				sprintf(buff,"%d",all->chs);		
 			}				
 			break;
 			case 6:
 			{
-				sprintf(buff,"%d",7);	
+				sprintf(buff,"%d",3);	
 			}
 			break;
 			default:
@@ -115,43 +121,43 @@ static s16_t total_get_value(const struct snmp_scalar_array_node_def *node, void
     char *var = NULL;
     s16_t var_len;
 		char buff[100]= {0};
-		power_all_t *all = power_get_all();
+		power_handle_new_t *all = power_get_all();
 		uint8_t id = 0;
 		switch(node->oid)
 		{
 			case SCALAR_VOLTAGE:
 			{
-				sprintf(buff,"%.2f",all->ttl.total[0].voltage);
+				sprintf(buff,"%.2f",all->total.all.voltage);
 			}
 			break;
 			case SCALAR_CURRENT:
 			{
-				sprintf(buff,"%.2f",all->ttl.total[0].current);
+				sprintf(buff,"%.2f",all->total.all.current);
 			}
 			break;
 			case SCALAR_CONSUMEPTION:
 			{
-				sprintf(buff,"%.2f",all->ttl.total[0].consump);
+				sprintf(buff,"%.2f",all->total.all.consump);
 			}
 			break;
 			case SCALAR_POWER_FACTOR:
 			{
-				sprintf(buff,"%.2f",all->ttl.total[0].factor);
+				sprintf(buff,"%.2f",all->total.all.factor);
 			}
 			break;
 			case SCALAR_PACTIVE_POWER:
 			{
-				sprintf(buff,"%.2f",all->ttl.total[0].power);
+				sprintf(buff,"%.2f",all->total.all.power);
 			}
 			break;
 			case SCALAR_REACTIVE_POWER:
 			{
-				sprintf(buff,"%.2f",all->ttl.total[0].reactive);
+				sprintf(buff,"%.2f",all->total.all.reactive_power);
 			}
 			break;
 			case  SCALAR_APPARENT_POWER:
 			{
-				sprintf(buff,"%.2f",all->ttl.total[0].active);
+				sprintf(buff,"%.2f",all->total.all.app_power);
 			}
 			break;
 			default:
@@ -211,99 +217,6 @@ typedef struct thr_sensor_data{
 }thr_s_t;
 
 
-
-
-
-static p_data_t p_data[POWER_VALUE]={
-	{
-		.id = 1,
-		.name = "smart_pdu",
-		.status = 1,
-		.v=220.0,
-		.i = 15.3,
-		.f = 48.95,
-		.c = 20.14,
-		.fa = 0.89,
-		.p = 480.12,
-		.r_p = 520.45,
-		.a_p = 600.12,
-	},
-		{
-		.id = 2,
-		.name = "smart_pdu",
-		.status = 1,
-		.v=218.0,
-		.i = 15.3,
-		.f = 49.95,
-		.c = 20.14,
-		.fa = 0.89,
-		.p = 480.12,
-		.r_p = 520.45,
-		.a_p = 600.12,
-	},
-			{
-		.id = 3,
-		.name = "smart_pdu",
-		.status = 1,
-		.v=219.0,
-		.i = 9.3,
-		.f = 48.95,
-		.c = 20.14,
-		.fa = 0.89,
-		.p = 100.12,
-		.r_p = 230.45,
-		.a_p = 460.12,
-	},
-	{
-		.id = 4,
-		.name = "smart_pdu",
-		.status = 0,
-		.v=220.0,
-		.i = 15.3,
-		.f = 48.95,
-		.c = 20.14,
-		.fa = 0.89,
-		.p = 480.12,
-		.r_p = 520.45,
-		.a_p = 600.12,
-	},
-};
-
-static thr_s_t  p_thr_s[POWER_VALUE] = {
-	{
-		.id = 1,
-	  .name = "sers_th1",
-		.val1_up = 23,
-		.val2_up = 32,
-		.val1_down = 11,
-		.val2_down = 12,
-	},
-	{
-		.id = 2,
-	  .name = "sers_th2",
-		.val1_up = 23,
-		.val2_up = 32,
-		.val1_down = 11,
-		.val2_down = 12,
-	},
-	{
-		.id = 3,
-	  .name = "sers_th3",
-		.val1_up = 23,
-		.val2_up = 32,
-		.val1_down = 11,
-		.val2_down = 12,
-	},
-	{
-		.id = 4,
-	  .name = "sers_th4",
-		.val1_up = 23,
-		.val2_up = 32,
-		.val1_down = 11,
-		.val2_down = 12,
-	},
-};
-
 static struct snmp_oid_range th_table_oid_ranges[] = {
     {1, POWER_VALUE},
 };
@@ -313,87 +226,6 @@ static struct snmp_oid_range th_sensor_oid_ranges[] = {
 };
 
 
-
-
-static p_alarm_t p_a_data[POWER_VALUE]={
-	{
-		.id = 1,
-		.type = 3,
-		.alarm_info="voltage alarm!!!",
-		.alarm_action = 0,
-		.alarm_action_para = 4,
-		.date = "2052.12.20",
-		.time = "12:30:47",
-	},
-	{
-		.id = 2,
-		.type = 2,
-		.alarm_info="current alarm!!!",
-		.alarm_action = 1,
-		.alarm_action_para = 2,
-		.date = "2002-11-20",
-		.time = "10:30:47",
-	},
-	{
-		.id = 3,
-		.type = 1,
-		.alarm_info="power alarm!!!",
-		.alarm_action = 3,
-		.alarm_action_para = 6,
-		.date = "2012-11-20",
-		.time = "10:59:47",
-	},
-	{
-		.id = 4,
-		.type = 4,
-		.alarm_info="consumer alarm!!!",
-		.alarm_action = 3,
-		.alarm_action_para = 6,
-		.date = "2012-11-20",
-		.time = "10:59:47",
-	},
-};
-
-static thr_d_t p_t_data[POWER_VALUE]=
-{
-	{
-		.id = 1,
-		.name="thrould",
-		.v_max = 250.00,
-		.v_min = 180.00,
-		.i_max = 50.00,
-		.p_max = 20000.00,
-		.c_max = 10000,
-	},
-	{
-		.id = 2,
-		.name="thrould",
-		.v_max = 250.00,
-		.v_min = 180.00,
-		.i_max = 50.00,
-		.p_max = 20000.00,
-		.c_max = 10000,
-	},
-	{
-		.id = 3,
-		.name="thrould",
-		.v_max = 250.00,
-		.v_min = 180.00,
-		.i_max = 50.00,
-		.p_max = 20000.00,
-		.c_max = 10000,
-	},
-	{
-		.id = 4,
-		.name="thrould",
-		.v_max = 250.00,
-		.v_min = 180.00,
-		.i_max = 50.00,
-		.p_max = 20000.00,
-		.c_max = 10000,
-	},
-};
-
 static s16_t thr_s_get_info(struct snmp_node_instance *instance, void *value)
 {
 	  u32_t row = instance->reference.u32;
@@ -480,7 +312,7 @@ static snmp_err_t thr_s_set_value(struct snmp_node_instance *instance,u16_t len,
 			case COLUMN_PDUSENSORLIMITVALUE1UP:
 			{
 				sensor->data[row-1].val[0].thr.max = (val/100.0);
-				p->sensor[row-1].th_max_1 = val;
+				p->sensor.sens[row-1].th_max_1 = val;
 				if(val)
 				{
 					sensor->data[row-1].val[0].thr.en.th_sen_max_en = 1;
@@ -493,7 +325,7 @@ static snmp_err_t thr_s_set_value(struct snmp_node_instance *instance,u16_t len,
 			case COLUMN_PDUSENSORLIMITVALUE2UP:
 			{
 				sensor->data[row-1].val[1].thr.max = (val/100.0);
-				p->sensor[row-1].th_max_2 = val;
+				p->sensor.sens[row-1].th_max_2 = val;
 				if(val)
 				{
 					sensor->data[row-1].val[1].thr.en.th_sen_max_en = 1;
@@ -506,7 +338,7 @@ static snmp_err_t thr_s_set_value(struct snmp_node_instance *instance,u16_t len,
 			case COLUMN_PDUSENSORLIMITVALUE1DOWN:
 			{
 				sensor->data[row-1].val[0].thr.min = (val/100.0);
-				p->sensor[row-1].th_min_1 = val;
+				p->sensor.sens[row-1].th_min_1 = val;
 				if(val)
 				{
 					sensor->data[row-1].val[0].thr.en.th_sen_min_en = 1;
@@ -519,7 +351,7 @@ static snmp_err_t thr_s_set_value(struct snmp_node_instance *instance,u16_t len,
 			case COLUMN_PDUSENSORLIMITVALUE2DOWN:
 			{
 				sensor->data[row-1].val[1].thr.min = (val/100.0);
-				p->sensor[row-1].th_min_2 = val;
+				p->sensor.sens[row-1].th_min_2 = val;
 				if(val)
 				{
 					sensor->data[row-1].val[1].thr.en.th_sen_min_en = 1;
@@ -591,7 +423,7 @@ static s16_t  thr_s_get_value(struct snmp_node_instance *instance, void *value)
 
 static s16_t thr_get_value(struct snmp_node_instance *instance, void *value)
 {
-		power_all_t *all = power_get_all();
+		power_handle_new_t *all = power_get_all();
     u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
 		char buff[50]= {0};
@@ -610,27 +442,27 @@ static s16_t thr_get_value(struct snmp_node_instance *instance, void *value)
 			break;
 			case COLUMN_PDUCHANNELCURRENTLIMITUP:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.c_upper/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.c_upper));
 			}
 			break;
 			case COLUMN_PDUCHANNELVOLTAGELIMITUP:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.v_upper/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.v_upper));
 			}
 			break;
 			case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.v_lower/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.v_lower));
 			}
 			break;
 			case COLUMN_PDUCHANNELPOWERLIMITUP:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.p_upper/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.p_upper));
 			}
 			break;
 			case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.w_upper/10.0));
+				sprintf(buff,"%.2f",((float)all->pch[row-1].thr.w_upper));
 			}
 			break;
 			default:
@@ -684,14 +516,12 @@ static s16_t alarm_get_value(struct snmp_node_instance *instance, void *value)
 			case COLUMN_PDUALARMDATE:
 			{
 				snprintf(buff,10,"%s",info->date);
-				//sprintf(buff,"%s",p_a_data[row-1].date);
 			}
 			break;
 			case COLUMN_PDUALARMTIME:
 			{
 				char * _info = &(info->date[11]);
 				snprintf(buff,8,"%s",_info);
-			//	sprintf(buff,"%s",p_a_data[row-1].time);
 			}
 			break;
 			default:
@@ -707,8 +537,8 @@ static s16_t alarm_get_value(struct snmp_node_instance *instance, void *value)
 
 static snmp_err_t power_get_instance(const u32_t *column, const u32_t *row_oid, u8_t row_oid_len, struct snmp_node_instance *cell_instance)
 {
-	power_all_t *all = power_get_all();
-	th_table_oid_ranges[0].max = all->chs-1;
+	power_handle_new_t *all = power_get_all();
+	th_table_oid_ranges[0].max = all->chs;
 	if (!snmp_oid_in_range(row_oid, row_oid_len, th_table_oid_ranges, LWIP_ARRAYSIZE(th_table_oid_ranges)))
         return SNMP_ERR_NOSUCHINSTANCE;
 	cell_instance->reference.u32 = row_oid[0];
@@ -769,8 +599,8 @@ static snmp_err_t power_get_next_instance(const u32_t *column, struct snmp_obj_i
     snmp_next_oid_init(&state, row_oid->id, row_oid->len, &next_oid, 1);
 		
     //power_data_get(&snmp_smart.all);
-		power_all_t *all = power_get_all();
-    for (i = 0; i < all->chs-1; i++)
+		power_handle_new_t *all = power_get_all();
+    for (i = 0; i < all->chs; i++)
     {
         u32_t test_oid = i + 1;
         snmp_next_oid_check(&state, &test_oid, 1, NULL);
@@ -802,7 +632,7 @@ static snmp_err_t power_get_next_instance(const u32_t *column, struct snmp_obj_i
 			{
         snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
         cell_instance->reference.u32 = *state.next_oid; /* 下个节点行OID */
-				cell_instance->reference.u32++;
+				//cell_instance->reference.u32++;
 			}
       return SNMP_ERR_NOERROR;
     }
@@ -840,7 +670,7 @@ static snmp_err_t get_next_instance(const u32_t *column, struct snmp_obj_id *row
 
 static s16_t alarm_power_get(struct snmp_node_instance *instance, void *value)
 {
-		power_all_t *all = power_get_all();
+		power_handle_new_t *all = power_get_all();
     u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
 		switch (col)
@@ -852,27 +682,27 @@ static s16_t alarm_power_get(struct snmp_node_instance *instance, void *value)
 			break;
 			case COLUMN_PDUCHANNELPOWERALARMVOLTAGEUP:
 			{
-				*(s32_t *)value	= all->pch[row-1].alarm.l1_v_upper;
+				*(s32_t *)value	= all->pch[row-1].info.alarm.l1_v_upper;
 			}
 			break;
 			case COLUMN_PDUCHANNELPOWERALARMVOLTAGEDOWN:
 			{
-				*(s32_t *)value	= all->pch[row-1].alarm.l1_v_lower;
+				*(s32_t *)value	= all->pch[row-1].info.alarm.l1_v_lower;
 			}
 			break;
 			case COLUMN_PDUCHANNELPOWERALARMCURRENTUP:
 			{
-				*(s32_t *)value	= all->pch[row-1].alarm.l1_c_upper;
+				*(s32_t *)value	= all->pch[row-1].info.alarm.l1_c_upper;
 			}
 			break;		
 			case COLUMN_PDUCHANNELPOWERALARMPOWERUP:
 			{
-				*(s32_t *)value	= all->pch[row-1].alarm.l1_p_upper;
+				*(s32_t *)value	= all->pch[row-1].info.alarm.l1_p_upper;
 			}
 			break;		
 			case COLUMN_PDUCHANNELPOWERALARMCONSUMPTIONUP:
 			{
-				*(s32_t *)value	= all->pch[row-1].alarm.l1_w_upper;
+				*(s32_t *)value	= all->pch[row-1].info.alarm.l1_w_upper;
 			}
 			break;	
 			default:
@@ -925,14 +755,17 @@ static s16_t alarm_sensor_get(struct snmp_node_instance *instance, void *value)
 
 static s16_t power_get_value(struct snmp_node_instance *instance, void *value)
 {
-		power_all_t *all = power_get_all();
+		power_handle_new_t *all = power_get_all();
     u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
 		char buff[100]= {0};
 		uint8_t id = 0;
-		if(all->ttl.type == PDU_AC_I3O2 || all->ttl.type == PDU_AC_I3O3 || all->ttl.type == PDU_AC_I3O1 || all->ttl.type == PDU_AC_I3O1_H)
+		if( all->power_type == PDU_AC_I3O1 || all->power_type == PDU_AC_I3O1_H)
+		{
+			id = 0;
+		}else if(all->power_type == PDU_AC_I3O2)
 		{
-			id = all->pch[row-1].info.ph_id - 1;
+			id = all->pch[row-1].info.pse.ph2.ph_l - 1;
 		}
 		switch (col)
 		{
@@ -951,56 +784,49 @@ static s16_t power_get_value(struct snmp_node_instance *instance, void *value)
 			{
 				//sprintf(buff,"%d",p_data[row].status);
 				//*(s32_t *)value	= p_data[row-1].status;
-				*(s32_t *)value = all->pch[row-1].status;
+				*(s32_t *)value = all->pch[row-1].info.status;
 				return 4;
 			}
 				break;
 			case COLUMN_PDUCHANNELVOLTAGE:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].voltage)/100.0);
+				sprintf(buff,"%.2f",(float)all->pch[row-1].power[id].voltage);
 			}
 				break;
 			case COLUMN_PDUCHANNELCURRENT:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].current)/100.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].current));
 			}
 				break;
 			case COLUMN_PDUCHANNELFREQUENCY:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].freq)/100.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].freq));
 			}
 				break;
 			case COLUMN_PDUCHANNELCONSUMPTION:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].consump)/100.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].consump));
 			}
 				break;
 			case COLUMN_PDUCHANNELPOWERFACTOR:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].factor)/100.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].factor));
 			}
 				break;
 			case COLUMN_PDUCHANNELPACTIVEPOWER:
 			{
-				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].power)/100.0);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].power));
 			}
 				break;
 			case COLUMN_PDUCHANNELREACTIVEPOWER:
 			{
-				float reactive = 0.0;
-				if(all->pch[row-1].power[id].power > 0)
-				{
-					reactive =  (float)(all->pch[row-1].power[id].power) / all->pch[row-1].power[id].factor - ((float)all->pch[row-1].power[id].power/100.0);
-				}
-				sprintf(buff,"%.2f",reactive);
+
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].reactive_power));
 			}
 				break;
 			case COLUMN_PDUCHANNELAPPARENTPOWER:
 			{
-				float app_power = 0.0;
-				if(all->pch[row-1].power[id].power > 0)
-					app_power = (float)(all->pch[row-1].power[id].power) / all->pch[row-1].power[id].factor;
-				sprintf(buff,"%.2f",app_power);
+				sprintf(buff,"%.2f",((float)all->pch[row-1].power[id].app_power));
 			}
 				break;
 			default:
@@ -1019,16 +845,19 @@ static snmp_err_t set_test(struct snmp_node_instance *instance, u16_t len, void
 
 static snmp_err_t  power_set_value (struct snmp_node_instance *instance, u16_t len, void *value)
 {
-		power_all_t *all = power_get_all();
+		power_handle_new_t *all = power_get_all();
 	  u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
+		if(row == 0)
+			return SNMP_ERR_NOERROR;
+		int ch = row -1;
+		power_ch_new_t *pch = &all->pch[ch];
 		switch(col)
 		{
 			case  COLUMN_PDUCHANNELSTATUS:
 			{
-				//p_data[row-1].status = *(uint32_t*)value;
-				all->pch[row].status = *(uint32_t*)value;
-				power_set_ch_sw_n(&all->pch[row]);
+				uint32_t val = *(uint32_t*)value;
+				all->set_status(pch->info.addr,pch->info.sch,val);
 			}
 				break;
 			default:
@@ -1040,49 +869,42 @@ static snmp_err_t thr_set_value(struct snmp_node_instance *instance,u16_t len, v
 {
 	  u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
-		power_all_t *all = power_get_all();
+		if(row == 0)
+			return SNMP_ERR_NOERROR;
+		power_handle_new_t *all = power_get_all();
+		thr_t th = all->pch[row-1].thr;
 		switch(col)
 		{
 			case COLUMN_PDUCHANNELCURRENTLIMITUP:
 			{
-				all->pch[row].thr.c_upper = (float)atof((char *)value) * 100;
-				//p_t_data[row-1].i_max = (float)atof((char *)value);
-				//all->pch[row-1]
-				power_set_threshold(&all->pch[row]);
+				th.c_upper = (float)atof((char *)value);	
 			}
 			break;
 			case COLUMN_PDUCHANNELVOLTAGELIMITUP:
 			{
-				//p_t_data[row-1].v_max = (float)atof((char *)value);
-				all->pch[row].thr.v_upper = (float)atof((char *)value) * 100;
-				power_set_threshold(&all->pch[row]);
+				th.v_upper = (float)atof((char *)value);
 			}
 			break;
 			case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
 			{
-				all->pch[row].thr.v_lower = (float)atof((char *)value) * 100;
-				power_set_threshold(&all->pch[row]);
-				//p_t_data[row-1].v_min = (float)atof((char *)value);
-				//all->pch[row-1].thr.v_upper = (float)atof((char *)value) * 10;
+				th.v_lower = (float)atof((char *)value);
 			}
 			break;
 			case COLUMN_PDUCHANNELPOWERLIMITUP:
 			{
-				//p_t_data[row-1].p_max = (float)atof((char *)value);
-				all->pch[row].thr.p_upper = (float)atof((char *)value) * 100;
-				power_set_threshold(&all->pch[row]);
+
+				th.p_upper = (float)atof((char *)value);
 			}
 			break;
 			case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
 			{
-				//p_t_data[row-1].c_max = (float)atof((char *)value);
-				all->pch[row].thr.w_upper = (float)atof((char *)value) * 100;
-				power_set_threshold(&all->pch[row]);
+				th.w_upper = (float)atof((char *)value);
 			}
 			break;
 			default:
 				return SNMP_ERR_INCONSISTENTNAME;
 		}
+		all->set_thr(all->pch[row-1].info.addr,all->pch[row-1].info.sch,&th);
 		return SNMP_ERR_NOERROR;		
 }
 
@@ -1188,30 +1010,31 @@ const struct snmp_scalar_array_node sysinfo_scalars = SNMP_SCALAR_CREATE_ARRAY_N
 
 static s16_t get_total_scalar_value(struct snmp_node_instance *instance , void* data)
 {
-	power_all_t *all = power_get_all();
+
+	power_handle_new_t *all = power_get_all();
 	char buff[100] = {0};
 	switch(instance->node->oid)
 	{
 		case SCALAR_VOLTAGE:
-			sprintf(buff,"%.2f",all->ttl.total[0].voltage);
+			sprintf(buff,"%.2f",all->total.all.voltage);
 		break;
 		case SCALAR_CURRENT:
-			sprintf(buff,"%.2f",all->ttl.total[0].current);
+			sprintf(buff,"%.2f",all->total.all.current);
 		break;
 		case SCALAR_CONSUMEPTION:
-			sprintf(buff,"%.2f",all->ttl.total[0].consump);
+			sprintf(buff,"%.2f",all->total.all.consump);
 		break;
 		case SCALAR_POWER_FACTOR:
-			sprintf(buff,"%.2f",all->ttl.total[0].factor);
+			sprintf(buff,"%.2f",all->total.all.factor);
 		break;
 		case SCALAR_PACTIVE_POWER:
-			sprintf(buff,"%.2f",all->ttl.total[0].power);
+			sprintf(buff,"%.2f",all->total.all.power);
 		break;
 		case SCALAR_REACTIVE_POWER:
-			sprintf(buff,"%.2f",all->ttl.total[0].reactive);
+			sprintf(buff,"%.2f",all->total.all.reactive_power);
 		break;
 		case SCALAR_APPARENT_POWER:
-			sprintf(buff,"%.2f",all->ttl.total[0].active);
+			sprintf(buff,"%.2f",all->total.all.app_power);
 			break;
 		default:
 			return 0;
@@ -1326,15 +1149,22 @@ const struct snmp_mib mib2_th_dev = SNMP_MIB_CREATE(thr_base_oid, &snmp_mib2_thr
 
 static const struct snmp_mib *dev_mibs[] = {&mib2, &mib2_dev,&mib2_th_dev};
 
+AlarmTrapinfo data;
 
 
-
-void snmp_power_alarm_trap(AlarmTrapinfo *data)
+void snmp_alarm_trap(AlarmTrapinfo *data, uint8_t flag)
 {
 		struct snmp_varbind vb={0},vb1={0},vb2={0},vb3={0};
 		int a= 1,b=2,c=3;
-
-		const u32_t oid_1[]={1,3,6,1,4,1,2024,2,1};
+		u32_t oid_1[9] = {1,3,6,1,4,1,2024,2};
+		if(flag == 0)
+		{
+			oid_1[8] = 1;
+		}else
+		{
+			oid_1[8] = 2;
+		}
+		//const u32_t oid_1[]={1,3,6,1,4,1,2024,2,1};
 		const u32_t pduAlarmID_oid[] = { 1,3,6,1,4,1,2024,1,6,1,1,2,data->ID};
     const u32_t pduAlarmContext_oid[] = { 1,3,6,1,4,1,2024,1,6,1,1,3,data->ID};
     const u32_t pduAlarmDate_oid[] = { 1,3,6,1,4,1,2024,1,6,1,1,6,data->ID};
@@ -1374,76 +1204,6 @@ void snmp_power_alarm_trap(AlarmTrapinfo *data)
 
 }
 
-void snmp_sensor_alarm_trap(AlarmTrapinfo *data)
-{
-		struct snmp_varbind vb={0},vb1={0},vb2={0},vb3={0};
-		int a= 1,b=2,c=3;
-
-		const u32_t oid_1[]={1,3,6,1,4,1,2024,2,2};
-    const u32_t pduAlarmID_oid[] = { 1,3,6,1,4,1,2024,1,6,1,1,2, data->ID};
-    const u32_t pduAlarmContext_oid[] = { 1,3,6,1,4,1,2024,1,6,1,1,3, data->ID};
-    const u32_t pduAlarmDate_oid[] = { 1,3,6,1,4,1,2024,1,6,1,1,6,data->ID};
-	
-		snmp_oid_assign(&vb.oid, oid_1, LWIP_ARRAYSIZE(oid_1));
-		snmp_oid_assign(&vb1.oid, pduAlarmID_oid, LWIP_ARRAYSIZE(pduAlarmID_oid));
-		snmp_oid_assign(&vb2.oid, pduAlarmContext_oid, LWIP_ARRAYSIZE(pduAlarmContext_oid));
-		snmp_oid_assign(&vb3.oid, pduAlarmDate_oid, LWIP_ARRAYSIZE(pduAlarmDate_oid));
-		
-    vb.type = SNMP_ASN1_TYPE_INTEGER;
-    vb.value = (void*)&(data->ID);;
-    vb.value_len = 4;
-		
-	  vb1.type = SNMP_ASN1_TYPE_INTEGER;
-    vb1.value = (void*)&data->Alarmid;
-    vb1.value_len = 4;	
-		
-	  vb2.type = SNMP_ASN1_TYPE_OCTET_STRING;
-    vb2.value = (void*)&data->AlarmContext;
-    vb2.value_len = strlen(data->AlarmContext);	
-		
-	  vb3.type = SNMP_ASN1_TYPE_OCTET_STRING;
-    vb3.value = (void*)&data->AlarmDate;
-    vb3.value_len = strlen(data->AlarmDate);	
-		
-		vb.next = &vb1;
-		vb1.next = &vb2;
-		vb2.next = &vb3;
-		vb3.prev = &vb2;
-		vb2.prev = &vb1;
-		vb1.prev = &vb;		
-		
-    snmp_send_trap_specific(SNMP_GENTRAP_COLDSTART, &vb);	
-}
-
-AlarmTrapinfo data = {
-		2,
-		1,
-		"dasdasdasdas",
-		"dasdasdjkhasdjia"
-};
-
-
-//void *snmp_thread(void *args)
-//{
-//	while(1)
-//	{
-//		 pthread_mutex_lock(&snmp_smart.mutex);
-//		 while(pthread_cond_wait(&snmp_smart.cond, &snmp_smart.mutex));
-//		 if(paras_get()->snmp.trapmode == 1)
-//			 snmp_power_alarm_trap(&data);
-////				system("snmp");
-//			
-//		 pthread_mutex_unlock(&snmp_smart.mutex);
-//	}
-//}
-
-
-//void send_snmp_tarp(void)
-//{
-//	pthread_mutex_lock(&snmp_smart.mutex);
-//	pthread_cond_signal(&snmp_smart.cond);
-//	pthread_mutex_unlock(&snmp_smart.mutex);
-//}
 
 
 void cmd_snmp_test(int argc, char **argv)
@@ -1460,12 +1220,8 @@ void cmd_snmp_test(int argc, char **argv)
     vb.value_len = strlen(str);
 
     snmp_send_trap_specific(0, &vb);
-	
-#endif
-	
-
-	snmp_power_alarm_trap(&data);
-	
+		snmp_power_alarm_trap(&data,0);
+#endif	
     // snmp_send_trap_generic(SNMP_GENTRAP_COLDSTART);
 }
 MSH_CMD_EXPORT_ALIAS(cmd_snmp_test, snmp, snmp agent test);
@@ -1477,46 +1233,20 @@ void netif_event_callback(struct netif *netif) {
 
 }
 
+static char  read_only[32] = {0};
+static char  read_write[32] = {0};
+
 static void mibs_init(void) {
-			paras_data_t *para = paras_get();
-			//snmp_v2c_enable(1);
-			//snmp_v2c_enabled();
-//		uint16_t len = 0;
-//		len= strlen((const char *)snmp_smart.sysdescr);
-//    snmp_mib2_set_sysdescr(snmp_smart.sysdescr, &len);
-//	
-//		len= strlen((const char *)snmp_smart.syscontact);
-//    snmp_mib2_set_syscontact(snmp_smart.syscontact, &len, 0);
-//	
-//		len= strlen((const char *)snmp_smart.sysname);
-//    snmp_mib2_set_sysname(snmp_smart.sysname, &len, 0);
-//	
-//		len= strlen((const char *)snmp_smart.syslocation);
-//    snmp_mib2_set_syslocation(snmp_smart.syslocation, &len, 0);	
-//	
-//	  snmp_set_device_enterprise_oid(&snmp_smart.device_enterprose_oid);
-	
-//		pthread_mutex_init(&snmp_smart.mutex,NULL);
-//	  pthread_cond_init(&snmp_smart.cond,NULL);
-//	
+		paras_data_t *para = paras_get();
 	
     snmp_set_auth_traps_enabled(SNMP_AUTH_TRAPS_DISABLED);
 		snmp_strap_set();
 
     snmp_set_mibs(&dev_mibs[0], LWIP_ARRAYSIZE(dev_mibs));
-    snmp_set_community("public");
-		if(strncmp(para->snmp.publics,"public",strlen("public")))
-		{
-			snmp_set_community_write("public");	
-		}else
-		{
-			snmp_set_community_write("private");	
-		}
+    snmp_set_community(para->snmp.publics);   //only read
+		snmp_set_community_write(para->snmp.privates); //read write
 		
-		//snmp_send_trap_specific();
 		
-//		pthread_create(&snmp_smart.id,NULL,snmp_thread,NULL);
-		//pthread_detach(snmp_smart.id);
 }
 
 int snmp2_init(void)

+ 1 - 3
f427/applications/snmp.h

@@ -102,9 +102,7 @@ typedef struct {
 int snmp2_init(void);
 int snmp2_deinit(void);
 void snmp_strap_set(void);
-void snmp_power_alarm_trap(AlarmTrapinfo *data);
-void snmp_sensor_alarm_trap(AlarmTrapinfo *data);
-
+void snmp_alarm_trap(AlarmTrapinfo *data,uint8_t flag);
 
 void send_snmp_tarp(void);
 

+ 0 - 1
f427/applications/sys.c

@@ -188,7 +188,6 @@ int sys_init(void)
     paras_init();
 		ui_init();
     mb_init();
-    sensor_init();
     //breaker_init();
     //thread_start(THREAD_ID_POLL, poll_thread, NULL);
 

+ 4 - 4
f427/applications/thread.c

@@ -4,16 +4,16 @@
 
 static thread_attr_t thdAttrs[THREAD_ID_MAX]={
     //name          fn              arg             stacksize       prio
-    {"web",         NULL,           NULL,           4*KB,           20},
-    {"snmp",        NULL,           NULL,           2*KB,           20},
+    {"web",         NULL,           NULL,           6*KB,           20},
+    {"snmp",        NULL,           NULL,           3*KB,           20},
     {"power",       NULL,           NULL,           5*KB,           20},
     {"polling",     NULL,           NULL,           2*KB,           20},
     {"mqtt",        NULL,           NULL,           2*KB,           20},
     {"mail",        NULL,           NULL,           2*KB,           20},
     {"ui",          NULL,           NULL,           3*KB,           20},
     {"cascade_scan",          NULL,           NULL,           1*KB,      20},
-    {"cascade_thread",        NULL,           NULL,           2*KB,      20},
-		{"sensor_thread",        NULL,           NULL,            1*KB,      21},
+    {"cascade_thread",        NULL,           NULL,           4*KB,      19},
+		{"sensor_thread",        NULL,           NULL,            4*KB,      21},
 };
 static thread_handle_t thdHandles[THREAD_ID_MAX]={0};
 static void* thread_fn(void *arg)

+ 74 - 138
f427/applications/ui/menu.c

@@ -127,8 +127,8 @@ static int get_ch_out_max(menu_handle_t *h)
 {
     int ch=0;
     //paras_data_t *p=paras_get();
-    power_all_t *all = power_get_all();
-		ch = all->chs - 1;
+    power_handle_new_t *all = power_get_all();
+		ch = all->chs;
     return ch;
 }
 static int is_ph3_in(menu_handle_t *h)
@@ -155,107 +155,39 @@ static int is_ph3_2_out(menu_handle_t *h)
     return 0;
 }
 
-static int get_input(menu_handle_t *h, int ph, total_t *ttl)//20260103
+static int get_input(menu_handle_t *h, int ph, power_t *ttl)//20260103
 {
-    power_all_t all;
-    
-    power_data_get(&all);
-    if(all.chs==0 || !ttl) {
+
+	  power_handle_new_t *all = power_get_all();
+    if(all->chs==0 || !ttl) {
         return -1;
     }
 		paras_data_t *p=paras_get();
-		if (p->prod.type == PDU_AC_I3O3)
+		
+		if (p->prod.type == PDU_DC_I1O1 || p->prod.type ==PDU_AC_I1O1)
+		{
+			*ttl = all->total.all;
+		}else
 		{
 			if(ph > 0)
 			{
-				*ttl = all.ttl.total[ph-1];
+				*ttl = all->total.all_l[ph-1];
 			}else
 			{
-				memset(ttl,0,sizeof(total_t));
-				for(int i = 0; i < 3 ;i++)
-				{
-					ttl->current += all.ttl.total[i].current;
-					ttl->power += all.ttl.total[i].power;
-					ttl->consump += all.ttl.total[i].consump;
-					ttl->voltage = ttl->voltage > all.ttl.total[i].voltage ? ttl->voltage:all.ttl.total[i].voltage; 																																							
-					ttl->active += all.ttl.total[i].active;
-					ttl->reactive+=all.ttl.total[i].reactive;
-				}
-				ttl->voltage=ttl->voltage*1.73;
-				ttl->factor=ttl->reactive > 0 ? ttl->power /ttl->reactive:0;		
-			}
-			
-		}else if(p->prod.type == PDU_AC_I3O2)
-		{
-			 if(ph>0)
-		   {
-				*ttl = all.ttl.total[ph-1];				
-			 }else
-			 {
-					memset(ttl,0,sizeof(total_t));
-					for(int i = 0; i < 3 ;i++)
-					{
-						ttl->current += all.ttl.total[i].current;
-						ttl->power += all.ttl.total[i].power;
-						ttl->consump += all.ttl.total[i].consump;
-						ttl->voltage = ttl->voltage > all.ttl.total[i].voltage ? ttl->voltage:all.ttl.total[i].voltage; 																																							
-						ttl->active += all.ttl.total[i].active;
-						ttl->reactive+=all.ttl.total[i].reactive;
-					}
-						ttl->factor=ttl->reactive > 0 ? ttl->power /ttl->reactive:0;			
-											
-			 }
-		}else if(p->prod.type == PDU_AC_I3O1 || p->prod.type == PDU_AC_I3O1_H)
-		{
-			 if(ph>0)
-		   {
-				*ttl = all.ttl.total[ph-1];				
-			 }else
-			 {
-					memset(ttl,0,sizeof(total_t));
-					for(int i = 0; i < 3 ;i++)
-					{
-						ttl->current += all.ttl.total[i].current;
-						ttl->power += all.ttl.total[i].power;
-						ttl->consump += all.ttl.total[i].consump;
-						ttl->voltage = ttl->voltage > all.ttl.total[i].voltage ? ttl->voltage:all.ttl.total[i].voltage; 																																							
-						ttl->active += all.ttl.total[i].active;
-						ttl->reactive+=all.ttl.total[i].reactive;
-					}
-				ttl->factor=ttl->reactive > 0 ? ttl->power /ttl->reactive:0;		
-											
-			 }			
-		}
-		else if(p->prod.type == PDU_DC_I1O1)
-		{
-			*ttl = all.ttl.total[0];
-		}else
-		{
-			*ttl = all.ttl.total[0];
+				*ttl = all->total.all;
+			}			
 		}
 		
-		
-		
-//		if(ph > 0)
-//			*ttl = all.ttl.total[ph-1];
-//		else//×ܵçÁ÷  ¹¦ÂÊ...
-//		{
-//			//
-//			
-//			*ttl = all.ttl.total[ph];
-//		}
     return 0;
 }
-static int get_output(menu_handle_t *h, int ch, int ph, power_ch_t *pwr_ch)
+static int get_output(menu_handle_t *h, int ch, int ph, power_ch_new_t *pwr_ch)
 {
     int i=-1,j=0;
-    power_all_t all;
-
-    power_data_get(&all);
-    if(all.chs==0 || ch>all.chs|| !pwr_ch) {
+		power_handle_new_t *all = power_get_all();
+    if(all->chs==0 || ch>all->chs|| !pwr_ch) {
         return -1;
     }
-    *pwr_ch = all.pch[ch];
+    *pwr_ch = all->pch[ch];
     
     return 0;
 }
@@ -319,7 +251,7 @@ static void menu_input_paint(menu_handle_t *h, int font1, int font2, int item_h,
 {
     int r;
     char tmp[100];
-    total_t *pttl,ttl;
+    power_t *pttl,ttl={0};
 
     pttl = &ttl;
     sprintf(tmp, "%s", lang_get_str(h->lang, STR_ID_INPUT));
@@ -368,7 +300,7 @@ static void menu_input_paint(menu_handle_t *h, int font1, int font2, int item_h,
     lcd_draw_string(5, item_h*3, LCD_WIDTH/2-5, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 		
 		
-    sprintf(tmp, "%0.2f",pttl->power);
+    sprintf(tmp, "%0.2f",pttl->power*1000.0);
     lcd_draw_string(LCD_WIDTH/2, item_h*3, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 
     sprintf(tmp, "%s(F) :",lang_get_str(h->lang, STR_ID_FACTOR));
@@ -396,7 +328,7 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
 {
     int r;
     char tmp[100];
-		power_all_t *all = power_get_all();
+		power_handle_new_t *all = power_get_all();
 //    power_ch_t *pwr,info={0};
 
 //    pwr = &info;
@@ -412,16 +344,16 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
     if(h->ch_out_max>0) {
 			if(h->menu.menu_lv == 1)
 			{
-				if(all->ttl.type == PDU_AC_I3O2)
+				if(all->power_type == PDU_AC_I3O2)
 				{
 					if(h->ph_out == 1)
 					{
-						sprintf(tmp, "%s CH%d - L%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1,all->pch[h->ch_out+1].info.ph_id);
+						sprintf(tmp, "%s CH%d - L%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1,all->pch[h->ch_out].info.pse.ph2.ph_l);
 					}else
 					{
-						sprintf(tmp, "%s CH%d - L%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1,all->pch[h->ch_out+1].info.ph_val);
+						sprintf(tmp, "%s CH%d - L%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1,all->pch[h->ch_out+1].info.pse.ph2.ph_r);
 					}
-				}else if(all->ttl.type == PDU_AC_I3O3)
+				}else if(all->power_type == PDU_AC_I3O3)
 				{
 					sprintf(tmp, "%s CH%d - L%d", lang_get_str(h->lang, STR_ID_OUTPUT), h->ch_out+1,h->ph_out);
 				}else
@@ -446,7 +378,7 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
     //lcd_fill(COLOR_BLACK);
     lcd_draw_string(0, 0, LCD_WIDTH, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
 
-    char *pon=((all->pch[h->ch_out+1].status)?lang_get_str(h->lang, STR_ID_ON):lang_get_str(h->lang, STR_ID_OFF));
+    char *pon=((all->pch[h->ch_out].info.status)?lang_get_str(h->lang, STR_ID_ON):lang_get_str(h->lang, STR_ID_OFF));
 #ifdef TEXT_ALIGN
     sprintf(tmp, "%s:%s", lang_get_str(h->lang, STR_ID_SWITCH), pon);
     lcd_draw_string(0, item_h, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
@@ -463,7 +395,7 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
     sprintf(tmp, "%s:", lang_get_str(h->lang, STR_ID_SWITCH));
     lcd_draw_string(5, item_h, LCD_WIDTH/2-5, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 		sprintf(tmp, "%s", pon);
-		if(all->pch[h->ch_out+1].status)
+		if(all->pch[h->ch_out].info.status)
 		{
 			lcd_draw_string(LCD_WIDTH/2, item_h, LCD_WIDTH/2, item_h, tmp, font2, COLOR_BLUE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 		}else
@@ -476,72 +408,76 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
 		float factor = 0.0;
 		float consumer = 0.0;
 	
-		if(all->ttl.type == PDU_AC_I3O1 || all->ttl.type == PDU_AC_I3O1_H)
+		if(all->power_type == PDU_AC_I3O1 || all->power_type == PDU_AC_I3O1_H)
 		{
-			uint8_t id = all->pch[h->ch_out+1].info.ph_id - 1;
-			current = all->pch[h->ch_out+1].power[id].current/100.0;
-			power = all->pch[h->ch_out+1].power[id].power/100.0;
-			factor = all->pch[h->ch_out+1].power[id].factor/100.0;
-			consumer = all->pch[h->ch_out+1].power[id].consump/100.0;
-		}else if(all->ttl.type == PDU_AC_I3O3)
+			uint8_t id = all->pch[h->ch_out].info.pse.ph - 1;
+			current = all->pch[h->ch_out].power[id].current;
+			power = all->pch[h->ch_out].power[id].power;
+			factor = all->pch[h->ch_out].power[id].factor;
+			consumer = all->pch[h->ch_out].power[id].consump;
+		}else if(all->power_type == PDU_AC_I3O3)
 		{
 			if(h->menu.menu_lv == 1)
 			{
 				uint8_t id = h->ph_out - 1;
-				current = all->pch[h->ch_out+1].power[id].current/100.0;
-				power = all->pch[h->ch_out+1].power[id].power/100.0;
-				factor = all->pch[h->ch_out+1].power[id].factor/100.0;
-				consumer = all->pch[h->ch_out+1].power[id].consump/100.0;	
+				current = all->pch[h->ch_out].power[id].current;
+				power = all->pch[h->ch_out].power[id].power;
+				factor = all->pch[h->ch_out].power[id].factor;
+				consumer = all->pch[h->ch_out].power[id].consump;	
 			}
 			else
 			{
-//				current = all->pch[h->ch_out+1].power[0].current/100.0;
-//				power = all->pch[h->ch_out+1].power[0].power/100.0;
-//				factor = all->pch[h->ch_out+1].power[0].factor/100.0;
-//				consumer = all->pch[h->ch_out+1].power[0].consump/100.0;	
 
-				int val = 0;
+				float val = 0;
 		    for(int i=0;i<3;i++){
-					current += all->pch[h->ch_out+1].power[i].current/100.0;
-					consumer += all->pch[h->ch_out+1].power[i].consump/100.0;	
-					all->pch[h->ch_out+1].power[i].factor>0? val+=(all->pch[h->ch_out+1].power[i].power/all->pch[h->ch_out+1].power[i].factor):0;
-					power += all->pch[h->ch_out+1].power[i].power/100.0;
+					current += all->pch[h->ch_out].power[i].current;
+					consumer += all->pch[h->ch_out].power[i].consump;	
+					val +=  all->pch[h->ch_out].power[i].app_power;
+					power += all->pch[h->ch_out].power[i].power;
 				}
-				val>0? factor=power/val:0;
-				
+				factor =  val> 0 ?(power/val):0;
 			}			
-		}else if(all->ttl.type == PDU_AC_I3O2)
+		}else if(all->power_type == PDU_AC_I3O2)
 		{
 			if(h->menu.menu_lv == 1)
 			{
 				if(h->ph_out == 1)
 				{
-					uint8_t id = all->pch[h->ch_out+1].info.ph_id -1;
-					current = all->pch[h->ch_out+1].power[id].current/100.0;
-					power = all->pch[h->ch_out+1].power[id].power/100.0;
-					factor = all->pch[h->ch_out+1].power[id].factor/100.0;
-					consumer = all->pch[h->ch_out+1].power[id].consump/100.0;							
+					uint8_t id = all->pch[h->ch_out].info.pse.ph2.ph_l -1;
+					current = all->pch[h->ch_out].power[id].current;
+					power = all->pch[h->ch_out].power[id].power;
+					factor = all->pch[h->ch_out].power[id].factor;
+					consumer = all->pch[h->ch_out].power[id].consump;							
 				}else
 				{
-					uint8_t id = all->pch[h->ch_out+1].info.ph_val -1;
-					current = all->pch[h->ch_out+1].power[id].current/100.0;
-					power = all->pch[h->ch_out+1].power[id].power/100.0;
-					factor = all->pch[h->ch_out+1].power[id].factor/100.0;
-					consumer = all->pch[h->ch_out+1].power[id].consump/100.0;						
+					uint8_t id = all->pch[h->ch_out].info.pse.ph2.ph_r -1;
+					current = all->pch[h->ch_out].power[id].current;
+					power = all->pch[h->ch_out].power[id].power;
+					factor = all->pch[h->ch_out].power[id].factor;
+					consumer = all->pch[h->ch_out].power[id].consump;						
 				}
 			}else
 			{
-					uint8_t id = all->pch[h->ch_out+1].info.ph_id - 1;
-					current = all->pch[h->ch_out+1].power[id].current/100.0;
-					power = all->pch[h->ch_out+1].power[id].power/100.0;
-					factor = all->pch[h->ch_out+1].power[id].factor/100.0;
-					consumer = all->pch[h->ch_out+1].power[id].consump/100.0;						
+					float val =0.0;
+					uint8_t id = all->pch[h->ch_out].info.pse.ph2.ph_r - 1;
+					current = all->pch[h->ch_out].power[id].current;
+					power = all->pch[h->ch_out].power[id].power;
+					consumer = all->pch[h->ch_out].power[id].consump;		
+					val = all->pch[h->ch_out].power[id].app_power;
+					
+					id = all->pch[h->ch_out].info.pse.ph2.ph_l - 1;
+					current += all->pch[h->ch_out].power[id].current;
+					power += all->pch[h->ch_out].power[id].power;
+					consumer += all->pch[h->ch_out].power[id].consump;
+					val += all->pch[h->ch_out].power[id].app_power;	
+				  factor = val > 0 ? (power/val) :0;
+				
 			}
 		}else{
-					current = all->pch[h->ch_out+1].power[0].current/100.0;
-					power = all->pch[h->ch_out+1].power[0].power/100.0;
-					factor = all->pch[h->ch_out+1].power[0].factor/100.0;
-					consumer = all->pch[h->ch_out+1].power[0].consump/100.0;							
+			current = all->pch[h->ch_out].power[0].current;
+			power = all->pch[h->ch_out].power[0].power;
+			factor = all->pch[h->ch_out].power[0].factor;
+			consumer = all->pch[h->ch_out].power[0].consump;							
 		}
 		
 		
@@ -556,7 +492,7 @@ static void menu_output_paint(menu_handle_t *h, int font1, int font2, int item_h
 		
 		sprintf(tmp, "%s(W) :",lang_get_str(h->lang, STR_ID_POWER));
     lcd_draw_string(5, item_h*3,  LCD_WIDTH/2-5, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
-		sprintf(tmp, "%0.2f", power);
+		sprintf(tmp, "%0.2f", power*1000.0);
 		lcd_draw_string(LCD_WIDTH/2, item_h*3, LCD_WIDTH/2, item_h, tmp, font2, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_LEFT, VERTICAL_CENTER);
 		
 		

+ 7 - 0
f427/applications/wanning.c

@@ -36,6 +36,13 @@ int wanning_get_count()
 	return val;
 }
 
+int wanning_clean()
+{
+	pthread_mutex_lock(&wan.mutex);
+	generic_list_clean(wan.list);
+	pthread_mutex_unlock(&wan.mutex);
+}
+
 int wanning_get(waning_info_t *waning,uint8_t lenth)
 {
 	if(waning)

+ 1 - 1
f427/applications/wanning.h

@@ -23,7 +23,7 @@ void wanning_insert(waning_info_t wanning);
 int wanning_get(waning_info_t *waning,uint8_t lenth);
 
 int wanning_get_count();
-
+int wanning_clean();
 void wanning_deinit();
 
 waning_info_t * waning_get_info(uint8_t index);

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 576 - 666
f427/applications/web.c


+ 6 - 0
f427/applications/web.h

@@ -1,5 +1,11 @@
 #ifndef __WEB_Hx__
 #define __WEB_Hx__
+#include "stdint.h"
+
+
+
+
+
 
 
 int web_init(void);

+ 4 - 0
f427/drivers/libraries/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_eth.c

@@ -320,6 +320,10 @@ HAL_StatusTypeDef HAL_ETH_Init(ETH_HandleTypeDef *heth)
   /* Write to ETHERNET MAC MIIAR: Configure the ETHERNET CSR Clock Range */
   (heth->Instance)->MACMIIAR = (uint32_t)tmpreg1;
   
+	HAL_ETH_WritePHYRegister(heth, 0x1E, 0x40C0);
+	HAL_ETH_WritePHYRegister(heth, 0x1F, 0x30);
+	
+	
   /*-------------------- PHY initialization and configuration ----------------*/
   /* Put the PHY in reset mode */
   if((HAL_ETH_WritePHYRegister(heth, PHY_BCR, PHY_RESET)) != HAL_OK)

+ 2 - 2
f427/rt-thread/components/drivers/include/drivers/serial_v2.h

@@ -79,8 +79,8 @@
 #define RT_SERIAL_TX_DATAQUEUE_SIZE     2048
 #define RT_SERIAL_TX_DATAQUEUE_LWM      30
 
-#define RT_SERIAL_RX_MINBUFSZ 64
-#define RT_SERIAL_TX_MINBUFSZ 64
+#define RT_SERIAL_RX_MINBUFSZ RT_SERIAL_RB_BUFSZ
+#define RT_SERIAL_TX_MINBUFSZ RT_SERIAL_RB_BUFSZ
 
 #define RT_SERIAL_TX_BLOCKING_BUFFER    1
 #define RT_SERIAL_TX_BLOCKING_NO_BUFFER 0

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 2192 - 0
nor_web/AC1-AC1/index.html


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 2247 - 0
nor_web/AC3-AC1/index.html