Explorar el Código

F407 网页与新数据结构对齐。

liyi hace 1 año
padre
commit
e7dd1f84d2

+ 33 - 6
f407/applications/datadef.h

@@ -268,12 +268,15 @@ typedef struct {
 //    uint8_t             ph_out;                 //三相输出时,用于判断该相是否有输出
 //    
 //    uint8_t             status;                 //开关状态     
-//    uint8_t             nwire;                  //零线状态   
-			uint16_t 							freq;															// 频率			保留1位小数,单位Hz
-			uint8_t 						factor;															// 因素			保留2位小数,单位fa
+//    uint8_t             nwire;                  //零线状态  
 			uint16_t 					 voltage;															// 电压			保留1位小数,单位V
 			uint16_t           current;															// 电流			保留1位小数,单位A
-			uint32_t             power;																// 功率			保留3位小数,单位W,最大值65535W
+			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;
@@ -339,11 +342,19 @@ typedef struct{
 
 //designed over by liyi
 
+typedef struct {
+	uint8_t    th_sen_max_en  :  1;
+	uint8_t    th_sen_min_en  :  1;
+	uint8_t    :                 6;
+}th_sen_t;
+
+
+
 
 
 
 typedef struct {
-    uint8_t             en;
+    th_sen_t             en;
     float               max;                    //threashold max  value
 		float               min;										//
     uint8_t             act;
@@ -355,7 +366,8 @@ typedef struct {
 	uint16_t       v_lower_en:1;
 	uint16_t       c_upper_en:1;
 	uint16_t       p_upper_en:1;
-	uint16_t       w_upper_en:1;	
+	uint16_t       w_upper_en:1;
+//	uint16_t       :          11; 
 }thr_en;
 
 
@@ -496,11 +508,26 @@ typedef struct {
     char                name[32];
     uint8_t             type;
     uint8_t             addr;
+		uint8_t      				num_val;
+		uint8_t             status;
+		uint8_t             check_count;
 }sensor_info_t;
+
+typedef struct {
+	uint8_t    max_up : 1;
+	uint8_t    min_down  :1;
+}sensor_alarm_t;
+
+
 typedef struct {
     thr_val_t           thr;
+		sensor_alarm_t     s_alarm;
     float               value;
 }sensor_val_t;
+
+
+
+
 typedef struct {
     sensor_info_t       info;
     sensor_val_t        val[2];

+ 2 - 0
f407/applications/dflt.c

@@ -1,6 +1,8 @@
 #include "datadef.h"
 #include "cfg.h"
 
+
+
 const paras_data_t DFLT_PARAS={
         .ver = {
             .ver = VERSION,

+ 1 - 1
f407/applications/main.c

@@ -106,7 +106,6 @@ static int user_init(void)
     power_init();
     //cascade_init();
     web_init();
-    
     return 0;
 }
 
@@ -117,6 +116,7 @@ int main(void)
     sys_init();
     user_init();
     while (1) {
+			
 			sleep(10);
     }
 }

+ 1 - 1
f407/applications/net.c

@@ -400,7 +400,7 @@ int net_ipaddr_set(network_data_t *data)
 
 
 
-int net_init()
+int net_init(void)
 {
 	//获取网卡设备
 	rt_device_t dev = rt_device_find(DFLT_NIC);

+ 1 - 1
f407/applications/net.h

@@ -20,7 +20,7 @@
 //int net_get_net(network_data_t *para, int ip_version);
 //int net_set_net(network_data_t *para, int ip_version);
 
-int net_init();
+int net_init(void);
 void net_get_ip(network_data_t *data);
 int net_ipaddr_set(network_data_t *data);
 

+ 22 - 3
f407/applications/power.c

@@ -533,6 +533,22 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
 									pch->thr.p_upper = ((buffer[9]<<16)|buffer[8]);
 									pch->thr.w_upper = ((buffer[13]<<16)|buffer[12]);
 								}
+								//read channel delay
+								memset(buffer,0,16);
+								offset = POWER_AC_OPEN_DELAY_TIME_L;
+								r =read_reg(h, pch->info.addr, offset, buffer, pbrd->chs);
+								for(int i = 0; i < pbrd->chs;i++)
+								{
+									pch->info.open_delay = buffer[i] / 1000;
+								}
+								
+								memset(buffer,0,16);
+								offset = POWER_AC_CLOSE_DELAY_TIME_L;
+								r =read_reg(h, pch->info.addr, offset, buffer, pbrd->chs);
+								for(int i = 0; i < pbrd->chs;i++)
+								{
+									pch->info.close_delay = buffer[i] / 1000;
+								}								
             }
             break;
 
@@ -898,6 +914,9 @@ static int power_copy(power_handle_t *h)
     
     return 0;
 }
+
+
+
 static int board_query(power_handle_t *h)
 {
     int i,r;
@@ -1356,7 +1375,7 @@ int power_set_ch_sw(uint8_t ch, uint8_t on)
         case AC_SINGLE_S_TYPE:
         case AC_SINGLE_B_TYPE:
         {
-            offset = POWER_AC_CH_STAT_L + pch->info.ch-1;
+            offset = POWER_AC_CH_STAT_L + pch->info.sch;
             tmp[0] = st;;
             r = write_reg(h, pch->info.addr, offset, tmp, 1);
         }
@@ -1365,7 +1384,7 @@ int power_set_ch_sw(uint8_t ch, uint8_t on)
         case DCPDU_TYPE:
         {
             uint16_t mask;
-            offset = POWER_DC_STAT_INFO+pch->info.ch-1;
+            offset = POWER_DC_STAT_INFO+pch->info.sch;
             
             mask = ~(1 << (pch->info.ch-1));
             tmp[0] &= mask;
@@ -1386,7 +1405,7 @@ int power_set_ch_sw(uint8_t ch, uint8_t on)
             }
             
             tmp[0] = st;
-            offset = reg + +pch->info.ch-1;
+            offset = reg + +pch->info.sch;
             r = write_reg(h, pch->info.addr, offset, tmp, 2);
         }
         break;

+ 116 - 17
f407/applications/sensor.c

@@ -12,6 +12,7 @@
 
 #define RETRY_TIMES   3
 #define TIMEOUT       200
+#define CHKECK_COUNT  3
 
 
 
@@ -49,31 +50,34 @@ int sensor_init(void)
 		if(ssHandle.all.data)
 		{
 			h->lck = lock_init();
+			memset(ssHandle.all.data,0,sizeof(sensor_data_t)*MAX_SENSOR);
 			ssHandle.all.max = MAX_SENSOR;
 			ssHandle.all.cnt = MAX_SENSOR;
 			//first  温湿度传感器  默认地址1 不允许修改
 			memcpy(ssHandle.all.data[0].info.name,"Temp-Humi Sensor",strlen("Temp-Humi Sensor"));
 			ssHandle.all.data[0].info.addr = 1;
 			ssHandle.all.data[0].info.type = SENSOR_TYPE_TEMP_HUMI;
+			ssHandle.all.data[0].info.status = 0;
+			ssHandle.all.data[0].info.num_val = 2;
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[0].val[0].thr.en.th_sen_max_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[0].val[0].thr.en.th_sen_min_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[0].val[1].thr.en.th_sen_max_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[0].val[1].thr.en.th_sen_min_en = 1;
 			}
 			
 			//ssHandle.all.data[0].val[0].value = 0;
@@ -81,26 +85,27 @@ int sensor_init(void)
 			memcpy(ssHandle.all.data[1].info.name,"Smoke Sensor",strlen("Smoke Sensor"));
 			ssHandle.all.data[1].info.addr = 2;
 			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)
 			{
 				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.en = 1;
+				ssHandle.all.data[1].val[0].thr.en.th_sen_max_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[1].val[0].thr.en.th_sen_min_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[1].val[1].thr.en.th_sen_max_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[1].val[1].thr.en.th_sen_min_en = 1;
 			}			
 			
 			
@@ -109,26 +114,27 @@ int sensor_init(void)
 			memcpy(ssHandle.all.data[2].info.name,"Gas Sensor",strlen("Gas Sensor"));
 			ssHandle.all.data[2].info.addr = 3;
 			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)
 			{
 				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.en = 1;
+				ssHandle.all.data[2].val[0].thr.en.th_sen_max_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[2].val[0].thr.en.th_sen_min_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[2].val[1].thr.en.th_sen_max_en = 1;
 			}
 			if(p_d->sensor[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.en = 1;
+				ssHandle.all.data[2].val[1].thr.en.th_sen_min_en = 1;
 			}			
 			
 		}
@@ -136,6 +142,11 @@ int sensor_init(void)
 }
 
 
+
+
+
+
+
 int sensor_deinit(void)
 {
     sensor_handle_t *h=&ssHandle;
@@ -237,6 +248,12 @@ static int my_read(sensor_data_t *data)
         case SENSOR_TYPE_TEMP_HUMI:
         {
            r = read_reg(addr, 0, tmp, 2);
+					if(r < 0)
+					{
+						return -1;
+					}
+					data->val[0].value = tmp[0] / 10.0;
+					data->val[1].value = tmp[1] / 10.0;
         }
         break;
         case SENSOR_TYPE_SMOKE:
@@ -255,11 +272,8 @@ static int my_read(sensor_data_t *data)
             data->val[0].value = tmp[0]; //气体浓度值
         }
         break;
-
-
     }
 
-
     return r;
 }
 
@@ -271,8 +285,93 @@ int sensor_query(void)
     lock_on(h->lck);
     for(i=0; i<h->all.cnt; i++) {
         r = my_read(&h->all.data[i]);
+				if(r == 0)
+				{
+					ssHandle.all.data[i].info.status = 1;
+					ssHandle.all.data[i].info.check_count = 0;
+					if(ssHandle.all.data[i].val[0].thr.en.th_sen_max_en)
+					{
+						uint8_t  back_waning_up = ssHandle.all.data[i].val[0].s_alarm.max_up;
+						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)
+							{
+								//todo beep 报警
+								//todo send mail
+							}
+						}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)
+					{
+						uint8_t  back_waning_down = ssHandle.all.data[i].val[0].s_alarm.min_down;
+						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)
+							{
+								//todo beep 报警
+								//todo send mail
+							}
+						}else
+						{
+							ssHandle.all.data[i].val[0].s_alarm.min_down = 0;
+						}							
+					}
+					if(ssHandle.all.data[i].info.num_val == 2)
+					{
+						uint8_t  back_waning_up = ssHandle.all.data[i].val[1].s_alarm.max_up;
+						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)
+							{
+									//todo beep 报警
+									//todo send mail
+							}
+							}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;
+								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)
+									{
+									//todo beep 报警
+									//todo send mail
+									}
+								}else
+								{
+									ssHandle.all.data[i].val[1].s_alarm.min_down = 0;
+								}							
+							}						
+					}
+				}else
+				{
+					ssHandle.all.data[i].info.check_count++;
+					if(ssHandle.all.data[i].info.check_count >= CHKECK_COUNT)
+					{
+						ssHandle.all.data[i].info.status = 0;
+						ssHandle.all.data[i].val[0].value = 0.0;
+						if(ssHandle.all.data[i].info.num_val == 2)
+						{
+							ssHandle.all.data[i].val[1].value = 0.0;
+						}
+						ssHandle.all.data[i].info.check_count = CHKECK_COUNT;
+					}
+				}
     }
     lock_off(h->lck);
+		
+		
     
     return 0;
 }

+ 72 - 6
f407/applications/snmp.c

@@ -11,6 +11,7 @@
 #include "power.h"
 #include "datadef.h"
 #include "sensor.h"
+#include "paras.h"
 
 
 
@@ -390,11 +391,43 @@ static thr_d_t p_t_data[POWER_VALUE]=
 	},
 };
 
+static int thr_s_get_info(struct snmp_node_instance *instance, void *value)
+{
+	  u32_t row = instance->reference.u32;
+    u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
+		sensor_all_t *sensor = sensor_get_data();
+		char buff[50]= {0};
+		if(!sensor)
+			return 0;
+		switch(col)
+		{
+			case  COLUMN_PDUSENSORID:
+			{
+				*(s32_t *)value	= row;
+				return 4;				
+			}
+			case COLUMN_PDUSENSORNAME:
+			{
+				sprintf(buff,"%s",sensor->data[row-1].info.name);
+			}
+				break;
+			case COLUMN_PDUSENSORTYPE:
+			{
+				
+			}
+		}
+	
+	
+}
+
+
 static snmp_err_t thr_s_set_value(struct snmp_node_instance *instance,u16_t len, void *value)
 {
 	  u32_t row = instance->reference.u32;
     u32_t col = SNMP_TABLE_GET_COLUMN_FROM_OID(instance->instance_oid.id);
 		sensor_all_t * sensor = sensor_get_data();
+		paras_data_t *p=paras_get();
+		uint32_t val = *(uint32_t *)value;
 		if(sensor->data == 0)
 		{
 			return SNMP_ERR_NOTWRITABLE;
@@ -403,27 +436,61 @@ static snmp_err_t thr_s_set_value(struct snmp_node_instance *instance,u16_t len,
 		{
 			case COLUMN_PDUSENSORLIMITVALUE1UP:
 			{
-				p_thr_s[row-1].val1_up =  *(uint32_t *)value;
+				sensor->data[row-1].val[0].thr.max = (val/100.0);
+				p->sensor[row-1].th_max_1 = val;
+				if(val)
+				{
+					sensor->data[row-1].val[0].thr.en.th_sen_max_en = 1;
+				}else
+				{
+					sensor->data[row-1].val[0].thr.en.th_sen_max_en = 0;
+				}
 			}
 				break;
 			case COLUMN_PDUSENSORLIMITVALUE2UP:
 			{
-				p_thr_s[row-1].val2_up =  *(uint32_t *)value;
+				sensor->data[row-1].val[1].thr.max = (val/100.0);
+				p->sensor[row-1].th_max_2 = val;
+				if(val)
+				{
+					sensor->data[row-1].val[1].thr.en.th_sen_max_en = 1;
+				}else
+				{
+					sensor->data[row-1].val[1].thr.en.th_sen_max_en = 0;
+				}				
 			}
 				break;
 			case COLUMN_PDUSENSORLIMITVALUE1DOWN:
 			{
-				p_thr_s[row-1].val1_down =  *(uint32_t *)value;
+				sensor->data[row-1].val[0].thr.min = (val/100.0);
+				p->sensor[row-1].th_min_1 = val;
+				if(val)
+				{
+					sensor->data[row-1].val[0].thr.en.th_sen_min_en = 1;
+				}else
+				{
+					sensor->data[row-1].val[0].thr.en.th_sen_min_en = 0;
+				}
 			}
 				break;
 			case COLUMN_PDUSENSORLIMITVALUE2DOWN:
 			{
-				p_thr_s[row-1].val2_down =  *(uint32_t *)value;
+				sensor->data[row-1].val[1].thr.min = (val/100.0);
+				p->sensor[row-1].th_min_2 = val;
+				if(val)
+				{
+					sensor->data[row-1].val[1].thr.en.th_sen_min_en = 1;
+				}else
+				{
+					sensor->data[row-1].val[1].thr.en.th_sen_min_en = 0;
+				}	
 			}
 				break;
 			default:
 				return SNMP_ERR_NOTWRITABLE;
 		}
+		
+		paras_save();
 		return SNMP_ERR_NOERROR;
 }
 
@@ -437,7 +504,7 @@ static s16_t  thr_s_get_value(struct snmp_node_instance *instance, void *value)
 		{
 			case COLUMN_PDUSENSORLIMITID:
 			{
-				*(s32_t *)value	= row-1;
+				*(s32_t *)value	= row;
 				return 4;
 			}
 			break;
@@ -635,7 +702,6 @@ static snmp_err_t get_sensor_next_instance(const u32_t *column, struct snmp_obj_
     {
         snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);
         cell_instance->reference.u32 = *state.next_oid; /* 下个节点行OID */
-				cell_instance->reference.u32++;
         return SNMP_ERR_NOERROR;
     }
 

+ 3 - 2
f407/applications/sys.c

@@ -17,6 +17,8 @@
 #include "sensor.h"
 #include "breaker.h"
 #include "thread.h"
+#include "led.h"
+#include "beep.h"
 
 
 ////////////////////////////////////////////////////////////////////
@@ -184,8 +186,7 @@ int sys_init(void)
     fs_init();
     //db_init();
     paras_init();
-		ui_init();
-    
+		//ui_init();
     mb_init();
     sensor_init();
     //breaker_init();

+ 7 - 5
f407/applications/ui/beep.c

@@ -67,8 +67,10 @@ int beep_init(void)
     gpio_init(BEEP_GPIO, GPIO_OUT, BEEP_OFF_LEVEL);
     h->tmr = timer_init();
     h->mode = -1;
-
-    //beep_set(BEEP_MODE_FATAL);
+		gpio_set(BEEP_GPIO, BEEP_ON_LEVEL);
+		sleep(1);
+		gpio_set(BEEP_GPIO, BEEP_OFF_LEVEL);
+    //beep_set(BEEP_MODE_WARN1);
     return 0;
 }
 
@@ -100,9 +102,9 @@ int beep_set_ex(beep_para_t *para)
     beep_handle_t *h=&bpHandle;
     misc_data_t *misc=&paras_get()->misc;
 
-    if(!misc->beep || !para || (para->on_ms<=0 && para->off_ms<=0) || para->times==0) {
-        return -1;
-    }
+//    if(!misc->beep || !para || (para->on_ms<=0 && para->off_ms<=0) || para->times==0) {
+//        return -1;
+//    }
     
     h->cnt = 0;
     h->para = *para;

+ 32 - 1
f407/applications/ui/font.c

@@ -397,7 +397,7 @@ static const uint8_t font_en_2412[95][36] =
 };
 
 //新宋体▶→
-static const char *font_cn_str="→输出入通道状态率耗电压流量功率因素温湿度数据版本日期时间地址模式保存退出取消设置开关主从";
+static const char *font_cn_str="→输出入通道状态率耗电压流量功率因素温湿度数据版本日期时间地址模式保存退出取消设置开关主从网络自手动掩码门禁";
 static const uint8_t font_cn_1212[][24] =
 {
 {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0xA8,0x00,0x70,0x00,0x70,0x00,0x20,0x00,0x20,0x00,0x00,0x00},/*"→",0*/
@@ -445,6 +445,17 @@ static const uint8_t font_cn_1212[][24] =
 {0x40,0x08,0x48,0x08,0x49,0x04,0x4A,0x02,0x48,0x01,0xF8,0x00,0x48,0x01,0x4A,0x02,0x49,0x04,0x48,0x08,0x40,0x08,0x00,0x00},/*"关",42*/
 {0x00,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x89,0x08,0xFA,0x0F,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x00,0x08,0x00,0x00},/*"主",43*/
 {0x00,0x08,0x00,0x06,0xE0,0x01,0x1F,0x00,0xE0,0x09,0x00,0x06,0xC0,0x01,0x3F,0x00,0xC0,0x01,0x00,0x06,0x00,0x08,0x00,0x00},/*"从",44*/
+
+{0xFF,0xF0,0x90,0x80,0x89,0x00,0x86,0x00,0x89,0x00,0x90,0x80,0x89,0x00,0x86,0x00,0x89,0x10,0x90,0x90,0xFF,0xF0,0x00,0x00},/*"网",45*/
+{0x19,0x20,0x2B,0x20,0xCD,0x40,0x11,0x40,0x12,0x00,0x23,0xF0,0xD5,0x20,0x49,0x20,0x55,0x20,0x63,0xF0,0x02,0x00,0x00,0x00},/*"络",46*/
+{0x00,0x00,0x3F,0xF0,0x24,0x90,0x24,0x90,0x64,0x90,0xA4,0x90,0x24,0x90,0x24,0x90,0x24,0x90,0x3F,0xF0,0x00,0x00,0x00,0x00},/*"自",47*/
+{0x01,0x00,0x49,0x00,0x49,0x00,0x49,0x10,0x49,0x10,0x7F,0xF0,0x89,0x00,0x89,0x00,0x89,0x00,0x89,0x00,0x01,0x00,0x00,0x00},/*"手",48*/
+{0x08,0xC0,0x4B,0x40,0x4C,0x40,0x49,0x40,0x08,0xC0,0x00,0x10,0x10,0x60,0xFF,0x80,0x10,0x10,0x10,0x10,0x1F,0xE0,0x00,0x00},/*"动",49*/
+{0x11,0x00,0x11,0x10,0xFF,0xF0,0x12,0x00,0x48,0x00,0x57,0xE0,0x65,0x40,0xCF,0xE0,0x65,0x50,0x57,0xD0,0x48,0x30,0x00,0x00},/*"掩",50*/
+{0x42,0x00,0x4F,0xE0,0x74,0x40,0x47,0xE0,0x80,0x80,0xBC,0x80,0x84,0x80,0x84,0x80,0x84,0x90,0xFC,0x10,0x07,0xE0,0x00,0x00},/*"码",51*/
+{0x00,0x00,0x9F,0xF0,0x40,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x10,0x80,0x10,0xFF,0xF0,0x00,0x00},/*"门",52*/
+{0x48,0x80,0x52,0x90,0xFE,0xA0,0x52,0x80,0x4A,0x90,0x02,0xF0,0x4A,0x80,0x52,0x80,0xFE,0xA0,0x52,0x90,0x48,0x80,0x00,0x00},/*"禁",53*/
+
 };
 static const uint8_t font_cn_1616[][32] =
 {
@@ -493,6 +504,16 @@ static const uint8_t font_cn_1616[][32] =
 {0x00,0x81,0x00,0x81,0x10,0x41,0x11,0x41,0x16,0x21,0x10,0x11,0x10,0x0D,0xF0,0x03,0x10,0x0D,0x10,0x11,0x14,0x21,0x13,0x41,0x10,0x41,0x00,0x81,0x00,0x81,0x00,0x00},/*"关",42*/
 {0x00,0x40,0x08,0x40,0x08,0x41,0x08,0x41,0x08,0x41,0x08,0x41,0x09,0x41,0xFA,0x7F,0x08,0x41,0x08,0x41,0x08,0x41,0x08,0x41,0x08,0x41,0x08,0x40,0x00,0x40,0x00,0x00},/*"主",43*/
 {0x00,0x80,0x00,0x40,0x00,0x30,0x00,0x0E,0xFF,0x01,0x00,0x82,0x00,0x4C,0x00,0x20,0x00,0x18,0x00,0x07,0xFF,0x00,0x00,0x07,0x00,0x18,0x00,0x60,0x00,0x80,0x00,0x00},/*"从",44*/
+	
+{0x00,0x00,0x7F,0xFF,0x40,0x08,0x44,0x10,0x42,0x60,0x41,0x80,0x4E,0x70,0x40,0x08,0x44,0x10,0x42,0x60,0x41,0x80,0x4E,0x72,0x40,0x01,0x7F,0xFE,0x00,0x00,0x00,0x00},/*"网",45*/
+{0x04,0x44,0x0C,0xE6,0x35,0x44,0xC6,0x48,0x0C,0x48,0x04,0x20,0x08,0x40,0x18,0xBF,0xE5,0x22,0x22,0x22,0x25,0x22,0x28,0xA2,0x30,0xBF,0x00,0x40,0x00,0x40,0x00,0x00},/*"络",46*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0x11,0x22,0x31,0x22,0x51,0x22,0x91,0x22,0x11,0x22,0x11,0x22,0x11,0x22,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"自",47*/
+{0x00,0x40,0x00,0x40,0x24,0x40,0x24,0x40,0x24,0x40,0x24,0x42,0x24,0x41,0x3F,0xFE,0x44,0x40,0x44,0x40,0x44,0x40,0xC4,0x40,0x44,0x40,0x00,0x40,0x00,0x40,0x00,0x00},/*"手",48*/
+{0x02,0x08,0x22,0x3C,0x23,0xC8,0x22,0x08,0x22,0x28,0x22,0x1D,0x02,0x02,0x08,0x0C,0x08,0x70,0xFF,0x80,0x08,0x02,0x08,0x01,0x08,0x02,0x0F,0xFC,0x00,0x00,0x00,0x00},/*"动",49*/
+{0x08,0x20,0x08,0x22,0x08,0x41,0xFF,0xFE,0x08,0x80,0x2D,0x00,0x2B,0xF8,0x32,0x48,0x62,0x48,0xAF,0xFE,0x22,0x49,0x32,0x49,0x2B,0xF9,0x24,0x01,0x24,0x07,0x00,0x00},/*"掩",50*/
+{0x20,0x40,0x21,0x80,0x27,0xFE,0x3A,0x08,0x22,0x08,0x23,0xFC,0x00,0x00,0x40,0x10,0x4F,0x10,0x41,0x10,0x41,0x10,0x41,0x12,0x7F,0x11,0x01,0x02,0x01,0xFC,0x00,0x00},/*"码",51*/
+{0x00,0x00,0x1F,0xFF,0x80,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x02,0x40,0x01,0x7F,0xFE,0x00,0x00,0x00,0x00},/*"门",52*/
+{0x02,0x10,0x22,0x11,0x24,0x92,0x28,0x94,0xFE,0x90,0x28,0x92,0x24,0x91,0x00,0x9E,0x24,0x90,0x28,0x90,0xFE,0x90,0x28,0x94,0x24,0x92,0x22,0x11,0x02,0x10,0x00,0x00},/*"禁",53*/
 };
 static const uint8_t font_cn_2424[][72] =
 {
@@ -541,6 +562,16 @@ static const uint8_t font_cn_2424[][72] =
 {0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x40,0x40,0x10,0x20,0x40,0x10,0x20,0x40,0x10,0x10,0x40,0x10,0x10,0x44,0x10,0x08,0x4C,0x10,0x04,0x78,0x10,0x03,0x40,0xD0,0x01,0xC0,0x7F,0x00,0xC0,0x13,0x00,0x40,0x70,0x00,0x70,0x90,0x01,0x4E,0x10,0x03,0x44,0x10,0x04,0x40,0x10,0x08,0x40,0x10,0x18,0x40,0x10,0x30,0x40,0x18,0x70,0x00,0x10,0x20,0x00,0x00,0x20,0x00,0x00,0x00},/*"关",42*/
 {0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x20,0x80,0x00,0x20,0x80,0x00,0x20,0x80,0x40,0x20,0x80,0x40,0x20,0x80,0x40,0x20,0x80,0x40,0x20,0x84,0x40,0x20,0x88,0x40,0x20,0xB8,0xFF,0x3F,0xF0,0xFF,0x3F,0x80,0x40,0x20,0x80,0x40,0x20,0x80,0x40,0x20,0x80,0x40,0x20,0x80,0x40,0x20,0x80,0x60,0x20,0xC0,0x40,0x20,0x80,0x00,0x30,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},/*"主",43*/
 {0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x06,0x00,0xC0,0x01,0x00,0x7F,0x00,0xFC,0x0F,0x40,0x08,0x10,0x20,0x00,0x60,0x10,0x00,0xC0,0x19,0x00,0x00,0x0C,0x00,0x00,0x03,0x00,0xE0,0x01,0xFC,0x7F,0x00,0xF8,0x03,0x00,0x00,0x3C,0x00,0x00,0xC0,0x01,0x00,0x00,0x07,0x00,0x00,0x0C,0x00,0x00,0x38,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00},/*"从",44*/
+	
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFE,0x10,0x00,0x00,0x11,0x00,0x80,0x10,0x83,0x00,0x10,0x6C,0x00,0x10,0x70,0x00,0x13,0xCE,0x00,0x11,0x07,0x00,0x10,0x00,0x40,0x10,0x80,0x80,0x10,0x43,0x00,0x10,0x3C,0x00,0x10,0x38,0x00,0x13,0xCE,0x00,0x11,0x03,0x84,0x10,0x00,0x04,0x10,0x00,0x0E,0x3F,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"网",45*/
+{0x00,0x00,0x00,0x00,0x80,0x10,0x01,0xC6,0x18,0x02,0x8E,0x10,0x0C,0x92,0x20,0x70,0xA4,0x20,0x20,0xC4,0x20,0x03,0x84,0x40,0x02,0x01,0x40,0x00,0x42,0x00,0x01,0x82,0x00,0x06,0x07,0xFE,0x3C,0x06,0x08,0x2B,0x0A,0x08,0x08,0xD2,0x08,0x08,0x62,0x08,0x08,0xF2,0x08,0x09,0x9A,0x08,0x0F,0x0B,0xFE,0x0C,0x0F,0xFC,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"络",46*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFE,0x04,0x21,0x08,0x04,0x21,0x08,0x04,0x21,0x08,0x04,0x21,0x08,0x7C,0x21,0x08,0x64,0x21,0x08,0x04,0x21,0x08,0x04,0x21,0x08,0x04,0x21,0x08,0x04,0x21,0x08,0x04,0x21,0x08,0x04,0x21,0x08,0x07,0xFF,0xFE,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"自",47*/
+{0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x08,0x84,0x00,0x08,0x84,0x00,0x08,0x84,0x00,0x08,0x84,0x00,0x08,0x84,0x08,0x08,0x84,0x08,0x08,0x84,0x04,0x08,0x84,0x06,0x0F,0xFF,0xFC,0x10,0x84,0x00,0x10,0x84,0x00,0x10,0x84,0x00,0x10,0x84,0x00,0x10,0x84,0x00,0x30,0x84,0x00,0x31,0x84,0x00,0x10,0x84,0x00,0x00,0x0C,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"手",48*/
+{0x00,0x00,0x00,0x00,0x40,0x00,0x04,0x40,0x60,0x04,0x41,0xE0,0x04,0x46,0x40,0x04,0x5C,0x40,0x04,0x70,0x40,0x04,0x40,0x40,0x04,0x44,0x42,0x0C,0x43,0x44,0x04,0x41,0xC4,0x00,0x40,0x68,0x01,0x00,0x30,0x01,0x00,0x60,0x01,0x03,0x80,0x3F,0xFE,0x08,0x01,0x00,0x08,0x01,0x00,0x04,0x01,0x00,0x06,0x01,0x00,0x0C,0x01,0xFF,0xF8,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"动",49*/
+{0x00,0x00,0x00,0x02,0x04,0x00,0x02,0x06,0x00,0x02,0x0C,0x04,0x02,0x08,0x06,0x7F,0xFF,0xFC,0x02,0x10,0x00,0x06,0x30,0x00,0x0A,0x20,0x00,0x08,0x40,0x00,0x08,0xBF,0xE0,0x0B,0x24,0x40,0x0E,0x24,0x40,0x38,0x24,0x40,0x68,0xFF,0xFC,0x08,0xA4,0x44,0x0E,0x24,0x44,0x09,0x24,0x44,0x08,0xBF,0xE4,0x08,0x60,0x04,0x18,0x60,0x04,0x08,0x20,0x7C,0x00,0x20,0x00,0x00,0x00,0x00},/*"掩",50*/
+{0x00,0x00,0x00,0x10,0x04,0x00,0x10,0x18,0x00,0x10,0x7F,0xF8,0x17,0xFF,0xF8,0x1C,0x40,0x40,0x10,0x40,0x40,0x10,0x7F,0xF0,0x10,0x7F,0xE0,0x10,0x00,0x80,0x10,0x00,0x80,0x10,0x08,0x80,0x17,0xFC,0x80,0x16,0x08,0x80,0x10,0x08,0x80,0x10,0x08,0x80,0x10,0x08,0x88,0x10,0x08,0x84,0x11,0xF8,0x86,0x3F,0x88,0x86,0x10,0x08,0xFC,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00},/*"码",51*/
+{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFE,0x00,0x00,0x00,0x30,0x00,0x00,0x1C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x08,0x08,0x00,0x08,0x08,0x00,0x04,0x08,0x00,0x06,0x0F,0xFF,0xFC,0x0F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"门",52*/
+{0x00,0x00,0x00,0x00,0x11,0x00,0x08,0x21,0x00,0x08,0x41,0x04,0x08,0x81,0x08,0x0B,0x09,0x10,0x0E,0x19,0x30,0x7F,0xE9,0x60,0x0A,0x09,0x40,0x09,0x09,0x04,0x09,0x89,0x06,0x08,0x29,0x06,0x08,0x49,0xFC,0x08,0x89,0x00,0x0B,0x09,0x00,0x0E,0x19,0x40,0x7F,0xE9,0x20,0x0A,0x09,0x20,0x09,0x09,0x10,0x08,0x81,0x1C,0x08,0xC1,0x00,0x08,0x43,0x00,0x00,0x40,0x00,0x00,0x00,0x00},/*"禁",53*/ 
 };
 
 static inline int utf8_chrlen(uint8_t *str)

+ 10 - 1
f407/applications/ui/lang.c

@@ -38,8 +38,12 @@ const char *lang_str_pool[2][STR_ID_MAX]={
         "关",       //STR_ID_OFF
         "主",       //STR_ID_MASTER
         "从",       //STR_ID_SLAVE
+				"网络",			//STR_ID_NET
+				"掩码",			//STR_ID_NET_MASK
+				"门禁",			//STR_ID_NET_GATE
+				"自动",			//STR_ID_NET_AUTO
+				"手动",			//STR_ID_NET_HAND
     },
-    
     {
         "Version",  //STR_ID_VERSION
 				"Date",			//STR_ID_DATE
@@ -64,6 +68,11 @@ const char *lang_str_pool[2][STR_ID_MAX]={
         "Off",      //STR_ID_OFF
         "Master",   //STR_ID_MASTER
         "Slave",    //STR_ID_SLAVE
+				"Net",			//STR_ID_NET
+				"Mask",			//STR_ID_NET_MASK
+				"Gate",			//STR_ID_NET_GATE
+				"DHCP",			//STR_ID_NET_AUTO
+				"STATIC",    //STR_ID_NET_HAND
     },
 };
 

+ 5 - 1
f407/applications/ui/lang.h

@@ -25,7 +25,11 @@ enum {
     STR_ID_OFF,
     STR_ID_MASTER,
     STR_ID_SLAVE,
-    
+		STR_ID_NET,
+		STR_ID_NET_MASK,
+		STR_ID_NET_GATE,
+		STR_ID_NET_AUTO,
+		STR_ID_NET_HAND,
     STR_ID_MAX,
 };
 

+ 5 - 5
f407/applications/ui/led.c

@@ -46,7 +46,7 @@ static led_para_t led_para[LED_MODE_MAX]={
     {LED_ID_RED,    200, 200,    25,  0},     //LED_MODE_FAULT
     {LED_ID_RED,    50,  50,     -1,  0},     //LED_MODE_FATAL
 #else
-    {LED_ID_GREEN,   0,   1000, -1, 0},      //LED_MODE_NORMAL
+    {LED_ID_GREEN,   1000,   1000, -1, 0},      //LED_MODE_NORMAL
     {LED_ID_GREEN,   300, 1000,  -1, 0},     //LED_MODE_UPGRADING
     {LED_ID_GREEN,   500, 500,  300,  0},    //LED_MODE_WARN1,
     {LED_ID_GREEN,   333, 333,  450,  0},    //LED_MODE_WARN2,
@@ -62,7 +62,7 @@ static void led_handler(void *arg, int last)
 {
     int level;
     led_data_t *h=(led_data_t*)arg;
-    
+    LOG_D("flash!\n");
     if(h->para.on_ms>0 && h->para.off_ms) {
         h->cnt++;
         if(h->cnt%2) {
@@ -136,9 +136,9 @@ int led_set_ex(led_para_t *para)
     led_handle_t *h=&ledHandle;
     misc_data_t *misc=&paras_get()->misc;
     
-    if(!misc->led || !para || (para->on_ms<=0 && para->off_ms<=0) || para->times==0) {
-        return -1;
-    }
+//    if(!misc->led || !para || (para->on_ms<=0 && para->off_ms<=0) || para->times==0) {
+//        return -1;
+//    }
     led_data_t *ld=&h->data[para->led_id];
     
     ld->cnt = 0;

+ 22 - 4
f407/applications/ui/menu.c

@@ -326,6 +326,22 @@ static void menu_sensor_paint(menu_handle_t *h, int font1, int font2, int item_h
     //lcd_refresh();
     
 }
+static void menu_net_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
+{
+    int r,font_color;
+    char tmp[100];
+    //modbus_data_t *pmb=get_pmb(h);
+  network_data_t *dat = &paras_get()->netwk;  
+	static uint8_t flash_cnt=0;
+    if(h->uflag&UFLAG_TIMER) {
+        flash_cnt++;
+    }
+		sprintf(tmp, "%s: %s",lang_get_str(h->lang, STR_ID_MODE), dat->mode == 0 ? lang_get_str(h->lang, STR_ID_NET_AUTO):lang_get_str(h->lang, STR_ID_NET_HAND));
+		lcd_draw_string(0, 0, LCD_WIDTH, item_h, tmp, font1, COLOR_WHITE, COLOR_BLACK, HORIZONTAL_CENTER, VERTICAL_CENTER);
+		
+}
+
+
 static void menu_modbus_paint(menu_handle_t *h, int font1, int font2, int item_h, key_val_t *kv)
 {
     int r,font_color;
@@ -418,9 +434,10 @@ int menu_init(void)
         h->menu.page[i].item_max = 0;
     }
     key_init();
-    led_init();
-    beep_init();
-    lcd_init(LCD_WIDTH,LCD_HEIGHT, misc->rotate);
+   led_init();
+	 led_set(0);
+   beep_init();
+   lcd_init(LCD_WIDTH,LCD_HEIGHT, misc->rotate);
     
     return 0;
 }
@@ -774,7 +791,8 @@ int menu_handle(void)
         case KEY_UP:
         case KEY_DOWN:
         {
-            led_reset(); beep_reset();
+            //led_reset();
+						beep_reset();
         }
         break;
 

+ 9 - 9
f407/applications/web.c

@@ -15,7 +15,7 @@
 #include "cascade.h"
 
 #define TIMER_INTERVAL      1000
-#define ONCE_SEND_CNT       10
+#define ONCE_SEND_CNT       13
 
 
 //#define USE_MG716
@@ -158,14 +158,14 @@ static void send_powerc(web_handle_t *h, mg_conn_t *c, uint8_t addr)
         ws_send(c, h->buf, xlen, 1);
     }
     
-    left = all.chs%ONCE_SEND_CNT;
-    for(i=0; i<left; i++) {
-        offset = i*sizeof(power_ch_t);
-        memcpy(hdr->data+offset, &all.pch[all.chs-left+i], sizeof(power_ch_t));
-    }
-    xlen = (all.chs%ONCE_SEND_CNT)*sizeof(power_ch_t)+sizeof(pkt_hdr_t);
-    hdr->dlen  = xlen-sizeof(pkt_hdr_t);
-    ws_send(c, h->buf, xlen, 1);
+//    left = all.chs%ONCE_SEND_CNT;
+//    for(i=0; i<left; i++) {
+//        offset = i*sizeof(power_ch_t);
+//        memcpy(hdr->data+offset, &all.pch[all.chs-left+i], sizeof(power_ch_t));
+//    }
+//    xlen = (all.chs%ONCE_SEND_CNT)*sizeof(power_ch_t)+sizeof(pkt_hdr_t);
+//    hdr->dlen  = xlen-sizeof(pkt_hdr_t);
+//    ws_send(c, h->buf, xlen, 1);
 #endif
 }
 static void send_powert(web_handle_t *h, mg_conn_t *c, uint8_t addr)

+ 123 - 114
f407/tools/web/JS/channel_display.js

@@ -1,123 +1,132 @@
-function channel_display(j_data,channel_power_infro)
-{
-        length = channel_power_infro.length
-        const dataList = document.getElementById('tbody');
-
-        dataList.innerHTML = '';
-        for(let j = 1 ; j< length;j++)
-        {
-            num = channel_power_infro[j].info.type
+function channel_display(j_data, channel_power_infro) {
+    length = channel_power_infro.length
+    const dataList = document.getElementById('tbody');
+
+    dataList.innerHTML = '';
+    for (let j = 1; j < length; j++) {
+        num = channel_power_infro[j].info.type
             // 创建一个新的列表项元素
-            const listItem = document.createElement('tr');
-            dataList.appendChild(listItem);
+        const listItem = document.createElement('tr');
+        dataList.appendChild(listItem);
 
-            //自动生成设备名称列
-            const Device_name_td = document.createElement('td');
-            Device_name_td.textContent = "Smart PDU"
-            dataList.appendChild(Device_name_td);
+        //自动生成设备名称列
+        const Device_name_td = document.createElement('td');
+        Device_name_td.textContent = "Smart PDU"
+        dataList.appendChild(Device_name_td);
 
-            //自动生成通道名称列
-            const Chananl_name_td = document.createElement('td');
-            Chananl_name_td.textContent = "CH"+j
-            dataList.appendChild(Chananl_name_td);
+        //自动生成通道名称列
+        const Chananl_name_td = document.createElement('td');
+        Chananl_name_td.textContent = "CH" + j
+        dataList.appendChild(Chananl_name_td);
 
-            //自动生成通道名称列
-            const Chananl_num_td = document.createElement('td');
-            Chananl_num_td.textContent = j
-            dataList.appendChild(Chananl_num_td);
+        //自动生成通道名称列
+        const Chananl_num_td = document.createElement('td');
+        Chananl_num_td.textContent = j
+        dataList.appendChild(Chananl_num_td);
 
-            //自动生成相序列
-            const xiangxu_td = document.createElement('td');
-            xiangxu_td.textContent = "L1"
-            dataList.appendChild(xiangxu_td);
+        //自动生成相序列
+        const xiangxu_td = document.createElement('td');
+        xiangxu_td.textContent = "L1"
+        dataList.appendChild(xiangxu_td);
 
         // 自动生成电压列
-            const voltage_td = document.createElement('td');
-            voltage_td.textContent = channel_power_infro[j].power[0].voltage.toFixed(2);
-            dataList.appendChild(voltage_td);
-
-            // 自动生成电流列
-            const current_td = document.createElement('td');
-            current_td.textContent = channel_power_infro[j].power[0].current.toFixed(2);
-            dataList.appendChild(current_td);
-
-            // 自动生成功率列
-            const power_td = document.createElement('td');
-            power_td.textContent = channel_power_infro[j].power[0].power.toFixed(2);
-            dataList.appendChild(power_td);
-
-                // 自动生成频率列
-            const freq_td = document.createElement('td');
-            freq_td.textContent = channel_power_infro[j].power[0].freq.toFixed(2);
-            dataList.appendChild(freq_td);
-
-            // 自动生成耗电量列
-            const consump_td = document.createElement('td');
-            consump_td.textContent = channel_power_infro[j].power[0].consump.toFixed(2);
-            dataList.appendChild(consump_td);
-
-            // 自动生成功率因数列
-            const factor_td = document.createElement('td');
-            factor_td.textContent = channel_power_infro[j].power[0].factor.toFixed(2);
-            dataList.appendChild(factor_td);   
-
-            // 自动生成状态列
-            const open_time_td = document.createElement('td');
-            times = channel_power_infro[j].info.start_delay 
-            times = times / 1000
-            open_time_td.textContent = times
-            dataList.appendChild(open_time_td);
-
-            // 自动生成状态列
-            const close_time_td = document.createElement('td');
-            close_times = channel_power_infro[j].info.stop_delay  
-            close_times = close_times / 1000
-            close_time_td.textContent = close_times
-            dataList.appendChild(close_time_td);
-
-            // 自动生成状态列
-            const status_td = document.createElement('td');
-            channel_status = channel_power_infro[j].power[0].status
-            dataList.appendChild(status_td);
-
-            if(channel_status == 1)
-                {
-                    status_td.textContent = '接通';
-                    // 自动生成关闭按钮列
-                    const close_button_td = document.createElement('button');
-                    close_button_td.textContent = '关闭';
-                    close_button_td.id = `Button_close_ ${j}`;
-                    close_button_td.addEventListener('click', function() {
-                        const userConfirmed = confirm('是否确定关闭该通道');
-                        if (userConfirmed) {
-                            single_close(j_data,channel_power_infro,j)
-                        } else {
-                            alert('已取消关闭通道');
-                        }
-                    });
-                    close_button_td.style.height = '50px'
-                    dataList.appendChild(close_button_td);
-                }else{
-                    status_td.textContent = '断开';
-                    // 自动生成开启按钮列
-                    const open_button_td = document.createElement('button');
-                    open_button_td.id = `Button_open_ ${j}`;
-                    open_button_td.textContent = '开启';
-                    open_button_td.addEventListener('click', function() {
-                        const userConfirmed = confirm('是否确定开启该通道');
-                        if (userConfirmed) {
-                            single_open(j_data,channel_power_infro,j)
-                        } else {
-                            alert('已取消开启通道');
-                        }
-                    });
-                    open_button_td.style.height = '50px'
-                    dataList.appendChild(open_button_td);
+        const voltage_td = document.createElement('td');
+        var val = channel_power_infro[j].power[0].voltage / 10.0;
+        voltage_td.textContent = val;
+        dataList.appendChild(voltage_td);
+
+        // 自动生成电流列
+        const current_td = document.createElement('td');
+        var val = channel_power_infro[j].power[0].current / 10.0;
+        current_td.textContent = val;
+        //current_td.textContent = channel_power_infro[j].power[0].current.toFixed(2);
+        dataList.appendChild(current_td);
+
+        // 自动生成功率列
+        const power_td = document.createElement('td');
+        var val = channel_power_infro[j].power[0].power / 1000.0;
+        power_td.textContent = val;
+        //power_td.textContent = channel_power_infro[j].power[0].power.toFixed(2);
+
+        dataList.appendChild(power_td);
+
+        // 自动生成频率列
+        const freq_td = document.createElement('td');
+        var val = channel_power_infro[j].power[0].freq / 100.0;
+        freq_td.textContent = val;
+        //freq_td.textContent = channel_power_infro[j].power[0].freq.toFixed(2);
+        dataList.appendChild(freq_td);
+
+        // 自动生成耗电量列
+        const consump_td = document.createElement('td');
+        var val = channel_power_infro[j].power[0].consump / 1000.0;
+        consump_td.textContent = val;
+        //consump_td.textContent = channel_power_infro[j].power[0].consump.toFixed(2);
+        dataList.appendChild(consump_td);
+
+        // 自动生成功率因数列
+        const factor_td = document.createElement('td');
+        var val = channel_power_infro[j].power[0].factor / 100.0;
+        factor_td.textContent = val;
+        //factor_td.textContent = channel_power_infro[j].power[0].factor.toFixed(2);
+        dataList.appendChild(factor_td);
+
+        // // 自动生成状态列
+        const open_time_td = document.createElement('td');
+        times = channel_power_infro[j].info.start_delay
+        times = times
+        open_time_td.textContent = times
+        dataList.appendChild(open_time_td);
+
+        // // 自动生成状态列
+        const close_time_td = document.createElement('td');
+        close_times = channel_power_infro[j].info.stop_delay
+        close_times = close_times
+        close_time_td.textContent = close_times
+        dataList.appendChild(close_time_td);
+
+        // 自动生成状态列
+        const status_td = document.createElement('td');
+        channel_status = channel_power_infro[j].status
+        dataList.appendChild(status_td);
+
+        if (channel_status == 1) {
+            status_td.textContent = '接通';
+            // 自动生成关闭按钮列
+            const close_button_td = document.createElement('button');
+            close_button_td.textContent = '关闭';
+            close_button_td.id = `Button_close_ ${j}`;
+            close_button_td.addEventListener('click', function() {
+                const userConfirmed = confirm('是否确定关闭该通道');
+                if (userConfirmed) {
+                    single_close(j_data, channel_power_infro, j)
+                } else {
+                    alert('已取消关闭通道');
                 }
-                // 自动生成输出类型列
-                const input_type_td = document.createElement('td');
-                input_type_td.textContent = '单相';
-
-                dataList.appendChild(input_type_td);
-            }
+            });
+            close_button_td.style.height = '50px'
+            dataList.appendChild(close_button_td);
+        } else {
+            status_td.textContent = '断开';
+            // 自动生成开启按钮列
+            const open_button_td = document.createElement('button');
+            open_button_td.id = `Button_open_ ${j}`;
+            open_button_td.textContent = '开启';
+            open_button_td.addEventListener('click', function() {
+                const userConfirmed = confirm('是否确定开启该通道');
+                if (userConfirmed) {
+                    single_open(j_data, channel_power_infro, j)
+                } else {
+                    alert('已取消开启通道');
+                }
+            });
+            open_button_td.style.height = '50px'
+            dataList.appendChild(open_button_td);
+        }
+        // 自动生成输出类型列
+        const input_type_td = document.createElement('td');
+        input_type_td.textContent = '单相';
+
+        dataList.appendChild(input_type_td);
+    }
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 767 - 643
f407/tools/web/JS/data.js


+ 36 - 36
f407/tools/web/JS/display_data.js

@@ -1,53 +1,49 @@
-function total_Infor(j,total_data){
+function total_Infor(j, total_data) {
     len = total_data.length
-    //显示总信息
-    for(let i = 0;i<=len-1;i++)
-    {
+        //显示总信息
+    for (let i = 0; i <= len - 1; i++) {
         num = i + 1
         voltage = total_data[i].voltage.toFixed(2)
         current = total_data[i].current.toFixed(2)
         power = total_data[i].power
         power = power / 1000
         power = power.toFixed(3)
-        consump  = total_data[i].consump
-        if(consump <= 0)
-        {
+        consump = total_data[i].consump
+        if (consump <= 0) {
             consump = 0
         }
         consump = consump / 1000
         consump = consump.toFixed(3)
         freq = total_data[i].freq.toFixed(2)
 
-        Voltage = document.getElementById("L"+num+"_voltage")
-        Current = document.getElementById("L"+num+"_current")
-        Power = document.getElementById("L"+num+"_power")
-        Consump = document.getElementById("L"+num+"_power_consumption")
-        Freq = document.getElementById("L"+num+"_freq")
+        Voltage = document.getElementById("L" + num + "_voltage")
+        Current = document.getElementById("L" + num + "_current")
+        Power = document.getElementById("L" + num + "_power")
+        Consump = document.getElementById("L" + num + "_power_consumption")
+        Freq = document.getElementById("L" + num + "_freq")
 
-        Voltage.textContent  = voltage
-        Current.textContent  = current
+        Voltage.textContent = voltage
+        Current.textContent = current
         Power.textContent = power
         Consump.textContent = consump
         Freq.textContent = freq
     }
-    
+
 }
-function Channel_Info(j_data,channel_power_infro)
-{
+
+function Channel_Info(j_data, channel_power_infro) {
     channel_length = channel_power_infro.length
-    channel_display(j_data,channel_power_infro,channel_infro)
+    channel_display(j_data, channel_power_infro, channel_infro)
 }
 
-function threshold_mannage(orgin_data,channel_power_infro)
-{
+function threshold_mannage(orgin_data, channel_power_infro) {
     // 获取要插入新行的DOM元素
     const dataList = document.getElementById('threshold_mannage');
     // 清空现有的列表项
     dataList.innerHTML = '';
     channel_length = channel_power_infro.length
-    //遍历数据数组
-    for(let j = 1;j<channel_length;j++)
-    {
+        //遍历数据数组
+    for (let j = 1; j < channel_length; j++) {
         // 创建一个新的列表项元素
         const listItem = document.createElement('tr');
         dataList.appendChild(listItem);
@@ -58,7 +54,7 @@ function threshold_mannage(orgin_data,channel_power_infro)
 
         //自动生成名称列
         const Chananl_name_td = document.createElement('td');
-        Chananl_name_td.textContent = "CH"+j
+        Chananl_name_td.textContent = "CH" + j
         dataList.appendChild(Chananl_name_td);
 
         //自动生成编号列
@@ -68,51 +64,55 @@ function threshold_mannage(orgin_data,channel_power_infro)
 
         //自动生成电流上限列
         const current_max_td = document.createElement('td');
-        c_val = channel_power_infro[j].thr.c_upper.val
+        c_val = channel_power_infro[j].thr.c_upper / 10.0
         current_max_td.textContent = c_val
         dataList.appendChild(current_max_td);
 
         // 自动生成电压上限列
         const voltage_max_td = document.createElement('td');
-        u_u_val = channel_power_infro[j].thr.v_upper.val;
+        u_u_val = channel_power_infro[j].thr.v_upper / 10.0;
+        //u_u_val = channel_power_infro[j].thr.v_upper.val;
         voltage_max_td.textContent = u_u_val;
         dataList.appendChild(voltage_max_td);
 
         // 自动生成电压下限列
         const voltage_min_td = document.createElement('td');
-        u_l_val = channel_power_infro[j].thr.v_lower.val;
+        u_l_val = channel_power_infro[j].thr.v_lower / 10.0;
+        //u_l_val = channel_power_infro[j].thr.v_lower.val;
         voltage_min_td.textContent = u_l_val
         dataList.appendChild(voltage_min_td);
 
         // 自动生成功率上限列
         const power_max_td = document.createElement('td');
-        p_val = channel_power_infro[j].thr.p_upper.val;
+        p_val = channel_power_infro[j].thr.p_upper / 1000.0;
+        //p_val = channel_power_infro[j].thr.p_upper.val;
         power_max_td.textContent = p_val
         dataList.appendChild(power_max_td);
 
         // 自动生成耗电量上限列
         const consump_td = document.createElement('td');
-        c_val = channel_power_infro[j].thr.w_upper.val;
+        c_val = channel_power_infro[j].thr.w_upper / 1000.0;
+        //c_val = channel_power_infro[j].thr.w_upper.val;
         consump_td.textContent = c_val
         dataList.appendChild(consump_td);
 
         // 自动生成配置按钮列
         const operation_td = document.createElement('button');
         operation_td.textContent = '配置';
-        operation_td.id = "edite"+j
+        operation_td.id = "edite" + j
         operation_td.style.width = '70px'
         operation_td.style.height = '50px'
         const translate = channel_power_infro[j]
-        operation_td.addEventListener('click',function(){
-            editRow(orgin_data,j,translate)
+        operation_td.addEventListener('click', function() {
+            editRow(orgin_data, j, translate)
         })
         dataList.appendChild(operation_td);
     }
 }
-function now_time()
-{
+
+function now_time() {
     const now = new Date();
- 
+
     // 获取年、月、日、小时、分钟和秒
     const year = now.getFullYear();
     const month = now.getMonth() + 1;
@@ -120,7 +120,7 @@ function now_time()
     const hours = now.getHours();
     const minutes = now.getMinutes();
     const seconds = now.getSeconds();
-    
+
     formattedTime = `${year}-${month < 10 ? '0' : ''}${month}-${day < 10 ? '0' : ''}${day} ${hours < 10 ? '0' : ''}${hours}:${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
     return formattedTime
 }

+ 15 - 22
f407/tools/web/JS/index.js

@@ -1,20 +1,18 @@
 let activePageIntervalId = null;
+
 function showPage(pageId) {
     const pages = document.querySelectorAll('.page');
     number = 0
     pages.forEach(page => {
         page.classList.remove('active');
         button_id = pageId
-        if(pageId == "page2")
-        {
+        if (pageId == "page2") {
             setActivePage(function1, 1000)
         }
-        if(pageId == "page3" || pageId == "page5")
-        {
+        if (pageId == "page3" || pageId == "page5") {
             setActivePage(function2, 1000)
         }
-        if(pageId == "page4" || pageId == "page1")
-        {
+        if (pageId == "page4" || pageId == "page1") {
             setActivePage(function3, 1000)
         }
     });
@@ -22,26 +20,22 @@ function showPage(pageId) {
     selectedPage.classList.add('active');
 }
 
-function function1() 
-{
-    ws.send(mk_hdr_bin(0,PKT_TYPE.PKT_TYPE_POWER_TOTAL,0,0,0));
+function function1() {
+    ws.send(mk_hdr_bin(0, PKT_TYPE.PKT_TYPE_POWER_TOTAL, 0, 0, 0));
 }
-   
-function function2() 
-{
-    ws.send(mk_hdr_bin(0,PKT_TYPE.PKT_TYPE_POWER_CH,0,0,0));
+
+function function2() {
+    ws.send(mk_hdr_bin(0, PKT_TYPE.PKT_TYPE_POWER_CH, 0, 0, 0));
 }
 
-function function3()
-{
+function function3() {
     console.log(1)
 }
-function setActivePage(pageFunction, intervalTime) 
-{
 
-   // 停止之前活动的页面定时函数
-   if (activePageIntervalId != null) 
-    {
+function setActivePage(pageFunction, intervalTime) {
+
+    // 停止之前活动的页面定时函数
+    if (activePageIntervalId != null) {
         clearInterval(activePageIntervalId);
     }
     activePageIntervalId = setInterval(pageFunction, intervalTime);
@@ -49,5 +43,4 @@ function setActivePage(pageFunction, intervalTime)
 
 document.addEventListener('DOMContentLoaded', () => {
     showPage('page1');
-});
-
+});

+ 21 - 28
f407/tools/web/JS/operation.js

@@ -1,44 +1,37 @@
-function all_open()
-{
-    ws.send(mk_hdr_bin(0,PKT_TYPE.PKT_TYPE_CH_ALL,0,0,1,0));
+function all_open() {
+    ws.send(mk_hdr_bin(0, PKT_TYPE.PKT_TYPE_CH_ALL, 0, 0, 1, 0));
 }
 
-function all_close()
-{
-    ws.send(mk_hdr_bin(0,PKT_TYPE.PKT_TYPE_CH_ALL,0,0,0,0));
+function all_close() {
+    ws.send(mk_hdr_bin(0, PKT_TYPE.PKT_TYPE_CH_ALL, 0, 0, 0, 0));
 }
 
-function single_open(j_data,channel_power_infro,j)
-{
-    j_c_data  = j_data
+function single_open(j_data, channel_power_infro, j) {
+    j_c_data = j_data
     opreation_data = channel_power_infro
-    j_status = opreation_data[j].power[0].status
-    if(j_status == 0)
-    {
-        opreation_data[j].power[0].status = 1
+    j_status = opreation_data[j].status;
+    if (j_status == 0) {
+        opreation_data[j].status = 1
     }
-    a = pkt_to_bin(0,PKT_TYPE.PKT_TYPE_POWER_CH,SUB_TYPE.SUB_TYPE_POWER_SWITCH,0,0,opreation_data[j])
-    //var b = bin_to_pkt(a)
+    a = pkt_to_bin(0, PKT_TYPE.PKT_TYPE_POWER_CH, SUB_TYPE.SUB_TYPE_POWER_SWITCH, 0, 0, opreation_data[j])
+        //var b = bin_to_pkt(a)
     ws.send(a)
 }
 
-function single_close(j_data,channel_power_infro,j)
-{
-    j_c_data  = j_data
+function single_close(j_data, channel_power_infro, j) {
+    j_c_data = j_data
     opreation_data = channel_power_infro
-    j_status = opreation_data[j].power[0].status
-    if(j_status == 1)
-    {
-        opreation_data[j].power[0].status = 0
+    j_status = opreation_data[j].status;
+    if (j_status == 1) {
+        opreation_data[j].status = 0
     }
-    a = pkt_to_bin(0,PKT_TYPE.PKT_TYPE_POWER_CH,SUB_TYPE.SUB_TYPE_POWER_SWITCH,0,0,opreation_data[j])
-    //var b = bin_to_pkt(a)
+    a = pkt_to_bin(0, PKT_TYPE.PKT_TYPE_POWER_CH, SUB_TYPE.SUB_TYPE_POWER_SWITCH, 0, 0, opreation_data[j])
+        //var b = bin_to_pkt(a)
     ws.send(a)
 }
 
-function threshold_update(orgin_data)
-{
+function threshold_update(orgin_data) {
     translate_data = orgin_data
-    a = pkt_to_bin(0,PKT_TYPE.PKT_TYPE_POWER_CH,SUB_TYPE.SUB_TYPE_POWER_THRESHOLD,0,0,translate_data)
+    a = pkt_to_bin(0, PKT_TYPE.PKT_TYPE_POWER_CH, SUB_TYPE.SUB_TYPE_POWER_THRESHOLD, 0, 0, translate_data)
     ws.send(a)
-}
+}

+ 18 - 19
f407/tools/web/JS/ws.js

@@ -1,40 +1,39 @@
-function on_ws_msg(js){
+function on_ws_msg(js) {
     console.log(js)
-    //总电源数据显示
-    if (js.powert != undefined){
+        //总电源数据显示
+    if (js.powert != undefined) {
         total_data = js.powert.total
-        total_Infor(js,total_data)
+        total_Infor(js, total_data)
     }
     //通道电源数据显示
-    if(js.powerc != undefined){
+    if (js.powerc != undefined) {
         channel_power_infro = js.powerc
         channel_infro = channel_power_infro.power
         alarm = js.powerc.alarm
         channel_number = js.powerc.info
         channel_power = js.powerc.power
         j_data = js
-        Channel_Info(j_data,channel_power_infro)
-        threshold_mannage(js,channel_power_infro)
-        //populateTable(j_data,channel_power)
+        Channel_Info(j_data, channel_power_infro)
+        threshold_mannage(js, channel_power_infro)
+            //populateTable(j_data,channel_power)
     }
-    if(js.alarmd != undefined)
-    {
-        console.log(js.alarmd)
-        alarmd_data = js.alarmd
-        systemAlarm(alarmd_data)
+    if (js.alarmd != undefined) {
+        // console.log(js.alarmd)
+        // alarmd_data = js.alarmd
+        // systemAlarm(alarmd_data)
     }
 }
 
-function ws_hdr(){
-    var proto = window.location.protocol,ws;
-    if (proto == 'https:'){
+function ws_hdr() {
+    var proto = window.location.protocol,
+        ws;
+    if (proto == 'https:') {
         ws = 'wss://';
-    }else{
+    } else {
         ws = 'ws://';
     }
     return ws;
 }
 
 //ws = new WS('ws://'+window.location.host+'/ws',on_ws_msg);
-ws = new WS('ws://192.168.1.166/ws',on_ws_msg);
-
+ws = new WS('ws://192.168.1.166/ws', on_ws_msg);