Forráskód Böngészése

Merge branch 'master' of http://jiecheng2024.tpddns.cn:3000/liyuezong/SmartPDCode

liyuezong 1 éve%!(EXTRA string=óta)
szülő
commit
8cfaff20a4

+ 2 - 2
control/PDU-AC-COMBINE/App/Main/board_cfg.h

@@ -4,7 +4,7 @@
 
 
 #define  	PRJ_4_BASE                0
-#define 	PRJ_4_ALL_O_ALL_C					1
+#define 	PRJ_4_ALL_O_ALL_C					0
 #define   PRJ_4_SELF_LOCK_SWITCH    0
 #define 	PRJ_6_BASE								0
 #define 	PRJ_8_BASE								0
@@ -12,7 +12,7 @@
 #define   PRJ_1_SELF_LOCK_SWITCH    0
 #define   PRJ_TWIN_FIRE             0
 #define 	PRJ_ITK_8_CHANNEL					0
-#define   PRJ_2_2_BASE              0
+#define   PRJ_2_2_BASE              1
 #define   PRJ_8_NEW									0
 
 

+ 0 - 5
control/PDU-AC-COMBINE/App/Modbus/BARE/port/port.c

@@ -219,11 +219,6 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
 							uint32_t * base = (uint32_t *)(&AC_Ele_ReadReg_All);
 							base += base_addr;
 							memcpy(&usRegHoldBuf[iRegIndex],base,usNRegs*2);
-						}else if((usAddress>=AC_Sing_Thr_SmaAddr)&&(usAddress<=AC_Sing_Thr_SmaAddr+AC_Sing_Thr_SmaQua))
-						{
-								WeeiRegIndex = (int)(usAddress - AC_Sing_Thr_SmaAddr);
-								Chal_num = (usAddress-AC_Sing_Thr_SmaAddr)/16;
-								memcpy(&usRegHoldBuf[WiRegIndex],&EE_ACDC_ThresVal_ReadReg[Chal_num],WusNRegs*2);
 						}
 						
 						

+ 1 - 1
control/PDU-DC/App/Main/Main.c

@@ -692,7 +692,7 @@ int main(void)
 #if SUPPORT_EIGHT_LIGHT
 	Relayx_Onoff_state(7,RELAY_ON);
 #endif
-	Fwdgt_Init();
+	//Fwdgt_Init();
 
 	while(1)
 	{

+ 19 - 7
f407/applications/cascade.c

@@ -478,12 +478,14 @@ static int master_cmd(cascade_handle_t *cas,uint8_t cur_dev_addr ,cmd_data_t *cm
             if(r == 1)
 						{
 							uint8_t chanels = value & 0xff;
-							if(chanels == 0)
+							if(chanels == 0 || chanels > 100)
 							{
 								cas->info->channels = 0;
-								LOGD("can not get cannes!!!\n");
+								LOGD("get slave channels %d!!!\n",chanels);
 							}else
 							{
+								if(chanels >= SLAVE_CH_MAX)
+										chanels = SLAVE_CH_MAX;
 								cas->info->channels = chanels;
 								//rdata.dlen = sizeof(slave_info_t) -sizeof(power_ch_t)*(SLAVE_CH_MAX - cas->info.channels);
                 rdata.dlen = sizeof(power_ch_t)*cas->info->channels;
@@ -606,6 +608,16 @@ uint8_t cascade_deinit()
     mb_handle_t *handle = (mb_handle_t *)(slave_info.mb);
     lock_deinit(slave_info.lock);
     mb_deinit(slave_info.mb);
+		if(slave_info.north)
+		{
+			free(slave_info.north);
+			slave_info.north = 0;
+		}
+		if(slave_info.info)
+		{
+			free(slave_info.info);
+			slave_info.info = 0;
+		}
     return 0;
 }
 
@@ -833,18 +845,18 @@ void cascade_reinit(uint8_t mode,uint8_t addr,uint32_t baud)
 			return;
 		}
 		mb_handle_t *handle=(mb_handle_t *)(&slave_info.mb);
-		handle->quit = 1;
+
 		slave_info.quit = 1;
 		sleep(1);
 		cascade_deinit();
 		cascade_init(CASCADE_PORT,mode,addr,baud);
 }
 
-cascade_data_t cascade_power_get(void)
+power_data_t cascade_power_get(void)
 {
-    cascade_data_t cas_d = {0};
-		cas_d.chs = slave_info.info->channels;
-		cas_d.pch = &slave_info.info->ch[0];
+    power_data_t cas_d = {0};
+    cas_d.chs = slave_info.info->channels;
+    cas_d.pch = &slave_info.info->ch[0];
     return cas_d;
 }
 int cascade_get_dlist(dev_list_t *dl)

+ 11 - 19
f407/applications/cascade.h

@@ -107,24 +107,16 @@ enum {
 };
 
 
-
-
-
-
-
-uint8_t 			 cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint32_t baud);
-uint8_t 			 cascade_deinit();
-void 					 cascade_scan_thread(void *arg);
-void 					 cascade_thread(void *arg);
-int 					 cascade_request(cmd_data_t *cmd);
-uint8_t 			 cascade_read_slave(uint8_t addr);
-uint8_t 			 cascade_set_mode(uint8_t mode,uint8_t addr);
-void    			 cascade_reinit(uint8_t mode,uint8_t addr,uint32_t baud);
-cascade_data_t cascade_power_get(void);
-void 					 cascade_reinit(uint8_t mode,uint8_t addr,uint32_t baud);
-uint8_t 			 cascade_set_mode(uint8_t mode,uint8_t addr);
-int 					 cascade_get_dlist(dev_list_t *dl);
-int 					 cascade_free_dlist(dev_list_t *dl);
-
+uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint32_t baud);
+uint8_t cascade_deinit();
+void    cascade_scan_thread(void *arg);
+void    cascade_thread(void *arg);
+int     cascade_request(cmd_data_t *cmd);
+uint8_t cascade_read_slave(uint8_t addr);
+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);
+power_data_t cascade_power_get(void);
 
 #endif

+ 29 - 7
f407/applications/datadef.h

@@ -8,7 +8,7 @@
 #define CH_MAX          12
 #define BRD_MAX         32
 #define SLAVE_CH_MAX    32
-
+#define CASCADE_MAX     32
 
 enum {
     RW_READ=0,                                 //读
@@ -342,6 +342,13 @@ typedef struct {
     total_t             total[3];
 }power_total_t;
 
+typedef struct {
+    uint8_t         chs;                    //所有控制板的总通道数
+    power_ch_t      *pch;
+    power_total_t   ttl;
+}power_data_t;
+
+
 typedef struct {
     uint8_t             type;
     float               data;
@@ -481,6 +488,14 @@ typedef struct {
     uint8_t             flag;
 }mesg_data_t;
 
+
+
+
+typedef struct {
+    uint8_t             cnt;
+    uint8_t             addr[CASCADE_MAX];
+}slave_list_t;
+
 enum {
     PKT_TYPE_ACK=0,             
     PKT_TYPE_PARAS,             
@@ -496,6 +511,7 @@ enum {
     PKT_TYPE_STAT,
     PKT_TYPE_MESG,
     PKT_TYPE_FILE,
+    PKT_TYPE_SLAVE_LIST,        //slave addr list
     
     PKT_TYPE_MAX
 };
@@ -507,12 +523,19 @@ enum {
     SUB_TYPE_POWER_START_DELAY,
     SUB_TYPE_POWER_STOP_DELAY,
     
+    SUB_TYPE_PARAS_MODBUS,
+    SUB_TYPE_PARAS_MISC,
+    SUB_TYPE_PARAS_PROD,
+    SUB_TYPE_PARAS_SERV,
+    SUB_TYPE_PARAS_NETWORK,
+    
     SUB_TYPE_MAX
 };
 
 #define PKT_MAGIC  0xdead
 typedef struct {
     uint16_t  magic;
+    uint8_t   addr;
     uint8_t   type;
     uint8_t   subtype;
     uint8_t   nack;
@@ -541,9 +564,9 @@ typedef struct ac_dc_in{
 typedef struct md_ac_dc{
     uint16_t          dev_cnt;                   //设备类型和通道数
     ac_dc_out_t       power[SLAVE_CH_MAX];                 //最大64通道
-		ac_dc_in_t        power_all;
+    ac_dc_in_t        power_all;
     uint16_t          temp;
-		uint16_t          humity;
+    uint16_t          humity;
     uint16_t          switch_stu[SLAVE_CH_MAX];
     uint16_t          delay_open[SLAVE_CH_MAX];
     uint16_t          delay_close[SLAVE_CH_MAX];
@@ -581,7 +604,7 @@ typedef struct md_3_ac{
     all_chn_info_t      ac_3_all_chn[SLAVE_CH_MAX];
     chn_phase_info_t    ac_3_chn_p[SLAVE_CH_MAX][3];
     uint16_t            temp;
-		uint16_t            humity;
+    uint16_t            humity;
     uint16_t            switch_chn[SLAVE_CH_MAX];
     uint16_t            delay_open[SLAVE_CH_MAX];
     uint16_t            delay_close[SLAVE_CH_MAX];
@@ -591,8 +614,7 @@ typedef struct md_3_ac{
 
 
 typedef struct cascade_data{
-		uint8_t         chs;                    //从机读取通道数
-		
+    uint8_t         chs;                    //从机读取通道数
     power_ch_t      *pch;
 }cascade_data_t;
 
@@ -602,7 +624,7 @@ typedef struct cascade_data{
 #define INI_NAME        "smartPDU.ini"
 #define INF_NAME        "PDUInfo.txt"
 
-#define CASCADE_MAX     32
+
 
 #endif
 

+ 0 - 7
f407/applications/power.h

@@ -147,13 +147,6 @@ typedef struct {
     float   current_b;//电流B
 }kb_val_t;
 
-typedef struct {
-    uint8_t         chs;                    //所有控制板的总通道数
-    power_ch_t      *pch;
-    
-    power_total_t   ttl;
-}power_data_t;
-
 
 int power_init(void);
 int power_deinit(void);

+ 138 - 22
f407/applications/web.c

@@ -4,6 +4,7 @@
 #include "list.h"
 #include "power.h"
 #include "paras.h"
+#include "cascade.h"
 #include "cfg.h"
 #include <stdio.h>
 #include "datadef.h"
@@ -66,6 +67,8 @@ typedef struct {
     char            rootDir[MG_PATH_MAX];
     char            *buf;
     int             buflen;
+    
+    uint8_t         cur_addr;
 }web_handle_t;
 static web_handle_t webHandle={0};
 
@@ -94,7 +97,7 @@ static int ws_send(mg_conn_t *c, void *data, int len, int isbin)
     
     return 0;
 }
-static int ws_send_pkt(web_handle_t *h, mg_conn_t *c, uint8_t type, void *data, int len, int isbin)
+static int ws_send_pkt(web_handle_t *h, mg_conn_t *c, uint8_t addr, uint8_t type, void *data, int len, int isbin)
 {
     pkt_hdr_t *hdr=NULL;
     
@@ -105,6 +108,7 @@ static int ws_send_pkt(web_handle_t *h, mg_conn_t *c, uint8_t type, void *data,
     hdr = (pkt_hdr_t*)h->buf;
     
     hdr->magic = PKT_MAGIC;
+    hdr->addr  = addr;
     hdr->type  = type;
     hdr->nack  = 0;
     hdr->dlen  = len;
@@ -115,18 +119,20 @@ static int ws_send_pkt(web_handle_t *h, mg_conn_t *c, uint8_t type, void *data,
     return 0;
 }
 
-static void send_powerc(web_handle_t *h, mg_conn_t *c)
+static void send_powerc(web_handle_t *h, mg_conn_t *c, uint8_t addr)
 {
     int i,j,xlen,offset,times,left;
     pkt_hdr_t *hdr=NULL;
-    //power_data_t pd=power_data_get();
-    cascade_data_t pd = cascade_power_get();
+    power_data_t pd=power_data_get();
+    
+    pd = (addr==0)?power_data_get():cascade_power_get();
     if(pd.chs==0 || h->buf==NULL ) {
         return;
     }
     hdr = (pkt_hdr_t*)h->buf;
     
     hdr->magic = PKT_MAGIC;
+    hdr->addr  = addr;
     hdr->type  = PKT_TYPE_POWER_CH;
     hdr->nack  = 0;
     
@@ -151,17 +157,32 @@ static void send_powerc(web_handle_t *h, mg_conn_t *c)
     ws_send(c, h->buf, xlen, 1);
 }
 
-
-static void send_powert(web_handle_t *h, mg_conn_t *c)
+static void send_powert(web_handle_t *h, mg_conn_t *c, uint8_t addr)
 {
     int i,r;
-    power_data_t pd=power_data_get();
+    power_data_t pd=(addr==0)?power_data_get():cascade_power_get();
+    ws_send_pkt(h, c, addr, PKT_TYPE_POWER_TOTAL, &pd.ttl, sizeof(power_total_t), 1);
+}
+static void send_dlist(web_handle_t *h, mg_conn_t *c)
+{
+    int i,j=0,r;
+    dev_list_t dl;
+    slave_list_t sl;
     
-    ws_send_pkt(h, c, PKT_TYPE_POWER_TOTAL, &pd.ttl, sizeof(power_total_t), 1);
+    r = cascade_get_dlist(&dl);
+    if(r==0) {
+        sl.cnt = dl.cnt-1;
+        if(sl.cnt>0) {
+            for(i=1; i<dl.cnt; i++) {
+                sl.addr[j++] = dl.slave[i].addr;
+            }
+            ws_send_pkt(h, c, 0, PKT_TYPE_POWER_TOTAL, &sl, 1+sl.cnt, 1);
+        }
+        cascade_free_dlist(&dl);
+    } 
 }
 
 
-
 static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
 {
     int r=0;
@@ -175,11 +196,55 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
         return -1;
     }
     
+    if(hdr->addr>0 && h->cur_addr!=hdr->addr) {
+        //paras_data_t *p=paras_get();
+        //cascade_reinit();
+    }
+    
     //LOGD("_____ ws handle, type: %d, flag: %d\n", hdr->type, hdr->flag);
     switch(hdr->type) {
         case PKT_TYPE_PARAS:
         {
-            //setup
+            paras_data_t* para=paras_get();
+            switch(hdr->subtype) {
+                case SUB_TYPE_PARAS_MODBUS:
+                {
+                    modbus_data_t *p=(modbus_data_t*)hdr->data;
+                    cascade_reinit(p->mode, p->addr, p->baud);
+                    para->cas = *p;
+                    paras_save();
+                }
+                break;
+                
+                case SUB_TYPE_PARAS_MISC:
+                {
+                    misc_data_t *p=(misc_data_t*)hdr->data;
+                    //
+                    
+                    para->misc = *p;
+                    paras_save();
+                }
+                break;
+                
+                case SUB_TYPE_PARAS_PROD:
+                {
+                    product_data_t *p=(product_data_t*)hdr->data;
+                }
+                break;
+                
+                case SUB_TYPE_PARAS_SERV:
+                {
+                    service_data_t *p=(service_data_t*)hdr->data;
+                }
+                break;
+                
+                case SUB_TYPE_PARAS_NETWORK:
+                {
+                    network_data_t *p=(network_data_t*)hdr->data;
+                }
+                break;
+                
+            }
         }
         break;
         
@@ -190,38 +255,63 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
                 switch(hdr->subtype) {
                     case SUB_TYPE_POWER_SWITCH:
                     {
-                        r = power_set_ch_sw(pch->info.ch, pch->power[0].status);
+                        if(hdr->addr==0) {
+                            r = power_set_ch_sw(pch->info.ch, pch->power[0].status);
+                        }
+                        else {
+                            
+                        }
                     }
                     break;
                     
                     case SUB_TYPE_POWER_ALARM:
                     {
-                        r = power_set_alarm(pch);
+                        if(hdr->addr==0) {
+                            r = power_set_alarm(pch);
+                        }
+                        else {
+                            
+                        }
                     }
                     break;
                     
                     case SUB_TYPE_POWER_THRESHOLD:
                     {
-                        r = power_set_threshold(pch);
+                        if(hdr->addr==0) {
+                            r = power_set_threshold(pch);
+                        }
                     }
                     break;
                     
                     case SUB_TYPE_POWER_START_DELAY:
                     {
-                        r = power_set_start_delay(pch);
+                        if(hdr->addr==0) {
+                            r = power_set_start_delay(pch);
+                        }
+                        else {
+                            
+                        }
                     }
                     break;
                     
                     case SUB_TYPE_POWER_STOP_DELAY:
                     {
-                        r = power_set_stop_delay(pch);
+                        if(hdr->addr==0) {
+                            r = power_set_stop_delay(pch);
+                        }
+                        else {
+                            
+                        }
                     }
                     break;
                 }
             }
             else {
                 LOGD("_____ send_powerc\n");
-                send_powerc(h, c);
+                if(hdr->addr!=0) {
+                    //cascade_reinit(MODBUS_SLAVE, hdr->addr, 115200);
+                }
+                send_powerc(h, c, hdr->addr);
             }
         }
         break;
@@ -229,31 +319,51 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
         case PKT_TYPE_POWER_TOTAL:
         {
             LOGD("_____ send_powert\n");
-            send_powert(h, c);
+            send_powert(h, c, hdr->addr);
         }
         break;
         
         case PKT_TYPE_CH_ALL:
         {
-            power_set_all_sw(hdr->flag);
+            if(hdr->addr==0) {
+                power_set_all_sw(hdr->flag);
+            }
+            else {
+                
+            }
         }
         break;
         
         case PKT_TYPE_POWER_RESET:
         {
-            r = power_reset();
+            if(hdr->addr==0) {
+                r = power_reset();
+            }
+            else {
+                
+            }
         }
         break;
         
         case PKT_TYPE_SCAN:
         {
-            r = power_scan();
+            if(hdr->addr==0) {
+                r = power_scan();
+            }
+            else {
+                
+            }
         }
         break;
         
         case PKT_TYPE_FACTORY:
         {
-            //r = power_scan();
+            if(hdr->addr==0) {
+                //r = power_scan();
+            }
+            else {
+                
+            }
         }
         break;
         
@@ -275,6 +385,12 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
         }
         break;
         
+        case PKT_TYPE_SLAVE_LIST:
+        {
+            send_dlist(h, c);
+        }
+        break;
+        
     }
 }
 
@@ -325,7 +441,7 @@ static void http_fn(mg_conn_t *c, int ev, void *ev_data)
         r = list_take_node(h->list, &ln, 0);
         if(r==0) {
             node_t *n=&ln->data;
-            ws_send_pkt(h, c, n->tp, n->buf, n->dlen, 1);
+            ws_send_pkt(h, c, 0, n->tp, n->buf, n->dlen, 1);
             list_back_node(h->list, ln);
         }
     }

+ 15 - 2
f407/tools/web/JS/data.js

@@ -16,6 +16,7 @@ const PKT_TYPE=function(){
         PKT_TYPE_STAT:len++,
         PKT_TYPE_MESG:len++,
         PKT_TYPE_FILE:len++,
+        PKT_TYPE_SLAVE_LIST:len++,
     }
 }();
 const SUB_TYPE=function(){
@@ -23,7 +24,7 @@ const SUB_TYPE=function(){
     return {
         SUB_TYPE_POWER_SWITCH:len++,             
         SUB_TYPE_POWER_ALARM:len++,             
-        SUB_TYPE_POWER_THRESHOLD:len++,          //power_ch_t
+        SUB_TYPE_POWER_THRESHOLD:len++,         //power_ch_t
         SUB_TYPE_POWER_START_DELAY:len++,       //power_total_t
         SUB_TYPE_POWER_STOP_DELAY:len++,
     }
@@ -80,7 +81,7 @@ function array_cat(a1,a2){
     }
     return buffer;
 }
-function mk_hdr(type,flag)
+function mk_hdr(addr,type,flag)
 {
     var tmp,length=0;
     var buffer = new ArrayBuffer(13);
@@ -90,6 +91,10 @@ function mk_hdr(type,flag)
     tmp.setUint16(0,t,true);//magic
     length += 2;
 
+    tmp = new DataView(buffer, length);
+    tmp.setUint8(0,addr,true);  //addr
+    length += 1;
+
     tmp = new DataView(buffer, length);
     tmp.setUint8(0,type,true);  //type
     length += 1;
@@ -175,6 +180,10 @@ function bin_to_pkt(bin)
                 hdr.powert = BIN.powert.b2j(data);
                 break;
                
+           case PKT_TYPE.PKT_TYPE_ALARM:
+                hdr.alarmd = BIN.alarmd.b2j(data);
+                break;
+            
            case PKT_TYPE.PKT_TYPE_ALARM:
                 hdr.alarmd = BIN.alarmd.b2j(data);
                 break;
@@ -194,6 +203,10 @@ function bin_to_hdr(bin) {
     this.magic = tmp.getUint16(0,true);
     length += 2;
 
+    tmp = new DataView(bin, length);
+    this.addr = tmp.getUint8(0,true);
+    length += 1;
+
     tmp = new DataView(bin, length);
     this.type = tmp.getUint8(0,true);
     length += 1;

+ 1 - 1
pro/src/paras.c

@@ -831,7 +831,7 @@ static int proc_misc(dictionary *dic, int op, MiscInfo_t *misc)
             r = -1; 
         }
 
-        if(misc->flip_time<=0) {
+        if(misc->flip_time<0) {
             LOGE("___ check misc, flip_time is invalid, must greater than 0\n");
             r = -1; 
         }

+ 0 - 5
pro/ui/menu.c

@@ -438,8 +438,6 @@ int menu_init(void)
     }
 
     key_init();
-    led_init();
-    beep_init();
     lcd_init(LCD_WIDTH,LCD_HEIGHT,LCD_COLOR);
     lcd_rotate(misc->rotate);
     
@@ -451,11 +449,8 @@ int menu_deinit(void)
     menu_handle_t *h=&mnHandle;
     
     timer_deinit(h->tmr);
-
     lcd_deinit();
     key_deinit();
-    led_deinit();
-    beep_deinit();
     
     return 0;
 }

+ 19 - 0
pro/ui/ui.c

@@ -1,6 +1,8 @@
 #include "ui.h"
 #include <unistd.h>
 #include <stdlib.h>
+#include "led.h"
+#include "beep.h"
 #include "menu.h"
 #include "sys.h"
 #include "thread.h"
@@ -48,6 +50,9 @@ int ui_init(void)
 {
     ui_handle_t *h=&uiHandle;
 
+    led_init();
+    beep_init();
+
 #ifdef USE_UI
     thread_start(THREAD_ID_UI, ui_thread, h);
 #endif
@@ -56,5 +61,19 @@ int ui_init(void)
 }
 
 
+int ui_deinit(void)
+{
+    ui_handle_t *h=&uiHandle;
+
+    led_deinit();
+    beep_deinit();
+#ifdef USE_UI
+    thread_stop(THREAD_ID_UI);
+#endif
+
+    return 0;
+}
+
+
 
 

+ 1 - 0
pro/ui/ui.h

@@ -2,6 +2,7 @@
 #define __UI_Hx__
 
 int ui_init(void);
+int ui_deinit(void);
 
 #endif