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

继续添加参数逻辑

guohui 1 éve%!(EXTRA string=óta)
szülő
commit
77027ac0cb

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 495 - 551
f407/applications/cascade.c


+ 26 - 12
f407/applications/cascade.h

@@ -20,15 +20,30 @@ enum {
     OBJ_SENSOR,
 };
 
+
+
+
+
+
+
 typedef struct {
     uint8_t         cmd;
     uint8_t         obj;
     uint8_t         chId;
-    // char            time_s[24];   //start time
-    // char            time_e[24];   //end time
 		uint8_t 			data[200];
 }cmd_data_t;
 
+typedef struct {
+    int       addr;
+    int       err;      //err times
+}slave_t;
+
+typedef struct {
+		uint8_t cnt;
+    slave_t   *slave;
+}dev_list_t;
+
+//±±ÏòÊý¾Ý¼Ä´æÆ÷
 #define AC_DC_DEV_CHN_REG                  	(4000)
 #define AC_DC_DRY_REG         							(4987)
 
@@ -38,8 +53,6 @@ typedef struct {
 #define AC_DC_ALL_SET_SWITCH_REG        		(5192)
 
 
-
-
 #define AC_3_DEV_CHN_REG                  	(6000)
 #define AC_3_DRY_REG           							(8795)
 
@@ -94,15 +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);
+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);
 
-int cascade_request(cmd_data_t *cmd);
 #endif

+ 37 - 25
f407/applications/datadef.h

@@ -7,8 +7,8 @@
 
 #define CH_MAX          12
 #define BRD_MAX         32
-#define SLAVE_CH_MAX    64
-
+#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;
@@ -374,10 +381,6 @@ typedef struct cascade_saddr{
 }slave_info_t;
 
 
-typedef struct cascade_data{
-    slave_info_t *c_s[BRD_MAX];                 //从机最多个数
-}cascade_data_t;
-
 
 typedef struct sensor_info{
     uint8_t     type;
@@ -485,14 +488,12 @@ typedef struct {
     uint8_t             flag;
 }mesg_data_t;
 
-typedef struct {
-    uint8_t             addr;
-    power_ch_t          pch;
-}power_slave_t;
+
+
 
 typedef struct {
     uint8_t             cnt;
-    uint8_t             addr[0];
+    uint8_t             addr[CASCADE_MAX];
 }slave_list_t;
 
 enum {
@@ -522,6 +523,12 @@ 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
 };
 
@@ -556,15 +563,15 @@ typedef struct ac_dc_in{
 
 typedef struct md_ac_dc{
     uint16_t          dev_cnt;                   //设备类型和通道数
-    ac_dc_out_t       power[64];                 //最大64通道
+    ac_dc_out_t       power[SLAVE_CH_MAX];                 //最大64通道
     ac_dc_in_t        power_all;
     uint16_t          temp;
     uint16_t          humity;
-    uint16_t          switch_stu[64];
-    uint16_t          delay_open[64];
-    uint16_t          delay_close[64];
-    sensor_info_t     md_s[8];
-    uint16_t          dry_node[4]; 
+    uint16_t          switch_stu[SLAVE_CH_MAX];
+    uint16_t          delay_open[SLAVE_CH_MAX];
+    uint16_t          delay_close[SLAVE_CH_MAX];
+    sensor_info_t     md_s[4];
+    //uint16_t          dry_node[4]; 
 }md_ac_dc_t;
 
 typedef struct all_info{
@@ -594,25 +601,30 @@ typedef struct chn_phase_info{
 typedef struct md_3_ac{
     uint16_t            dev_cnt;                                        //设备类型和通道数
     all_info_t          ac_3_all_pw[3];
-    all_chn_info_t      ac_3_all_chn[64];
-    chn_phase_info_t    ac_3_chn_p[64][3];
+    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            switch_chn[64];
-    uint16_t            delay_open[64];
-    uint16_t            delay_close[64];
-    sensor_info_t       md_s[8];
-    uint16_t            dry_node[4];
+    uint16_t            switch_chn[SLAVE_CH_MAX];
+    uint16_t            delay_open[SLAVE_CH_MAX];
+    uint16_t            delay_close[SLAVE_CH_MAX];
+    sensor_info_t       md_s[4];
+    //uint16_t            dry_node[4];
 }md_3_ac_t;
 
 
+typedef struct cascade_data{
+    uint8_t         chs;                    //从机读取通道数
+    power_ch_t      *pch;
+}cascade_data_t;
+
 #pragma pack ()
 
 #define DB_NAME         "smartPDU.db"
 #define INI_NAME        "smartPDU.ini"
 #define INF_NAME        "PDUInfo.txt"
 
-#define CASCADE_MAX     32
+
 
 #endif
 

+ 3 - 9
f407/applications/main.c

@@ -114,10 +114,9 @@ static int user_init(void)
 {
    // ui_init();
     sd_mount();
-    
     power_init();
-    //web_init();
-	
+		LOGD("____________cascade thread!!!!!\n");
+    web_init();
 	  LOGD("cascade thread!!!!!\n");
     cascade_init(CASCADE_PORT,1,1,115200);
     return 0;
@@ -127,15 +126,10 @@ static int user_init(void)
 
 int main(void)
 {
+
     sys_init();
     user_init();
-		cmd_data_t cmd;
-		cmd.cmd = CASCADE_CMD_GET_INFO;
-		cmd.obj = OBJ_OVERALL;
-	
     while (1) {
-				//cascade_request(&cmd);
-				
         sleep(10);
     }
 }

+ 5 - 3
f407/applications/power.c

@@ -746,11 +746,13 @@ int power_init(void)
     h->cur_addr = 0;
     h->brd_max = BRD_NUM;
     h->prod = &paras_get()->prod;
-    
+    LOGD("11111111111111111111111\n");
     power_scan();
-    power_set_all_sw(1);
+		LOGD("111111111111111111111112222222222222222222\n");
+    //power_set_all_sw(1);
+		LOGD("1111111111111111111111122222222222222222223333333333333333333333\n");
     thread_start(THREAD_ID_POWER, power_thread, h);
-    
+    LOGD("11111111111111111111111222222222222222222233333333333333333333334444444444444444\n");
     return 0;
 }
 

+ 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);

+ 79 - 21
f407/applications/web.c

@@ -8,6 +8,7 @@
 #include "cfg.h"
 #include <stdio.h>
 #include "datadef.h"
+#include "cascade.h"
 
 #define TIMER_INTERVAL     1000
 #define ONCE_SEND_CH_CNT   10
@@ -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();
     
+    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;
         
@@ -243,12 +308,10 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
             }
             else {
                 LOGD("_____ send_powerc\n");
-                if(hdr->addr==0) {
-                    send_powerc(h, c);
-                }
-                else {
-                    
+                if(hdr->addr!=0) {
+                    //cascade_reinit(MODBUS_SLAVE, hdr->addr, 115200);
                 }
+                send_powerc(h, c, hdr->addr);
             }
         }
         break;
@@ -256,12 +319,7 @@ 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");
-            if(hdr->addr==0) {
-                send_powert(h, c);
-            }
-            else {
-                
-            }
+            send_powert(h, c, hdr->addr);
         }
         break;
         
@@ -329,7 +387,7 @@ static int ws_handle(web_handle_t *h, pkt_hdr_t *hdr, mg_conn_t *c)
         
         case PKT_TYPE_SLAVE_LIST:
         {
-            //cascade_data_t();
+            send_dlist(h, c);
         }
         break;
         
@@ -383,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);
         }
     }