Parcourir la source

级联基本ok

guohui il y a 2 ans
Parent
commit
e10659be88

+ 2 - 3
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/appweb_handle.c

@@ -278,7 +278,7 @@ void* update_thread(void* arg)
                     pgdm = gdm2;
                 }
 
-                dev_search_latest_power_All_info(&pgdm,&_over_chn_pwr_back_info);
+                dev_search_latest_power_All_info(pgdm,&_over_chn_pwr_back_info);
                 upgrade_msg = ws_chn_status_ack_to_json(1,&_over_chn_pwr_back_info);
 
                 //struct mg_connection* WStemp = pgdm->ws_client;
@@ -305,7 +305,6 @@ void* update_thread(void* arg)
                 
             }
             //usleep(400*1000);
-
             //log_i("ws upload.");
         }
         usleep(1000*1000);
@@ -3423,7 +3422,7 @@ static int webSetCallback(void)
 /// @return 
 int appweb_init(void)
 {
-    //sys_start_thread(THREAD_ID_UPDATE, update_thread, &__globalDeviceManage);
+    sys_start_thread(THREAD_ID_UPDATE, update_thread, &__globalDeviceManage);
     sys_start_thread(THREAD_ID_WEB, web_thread, &__globalDeviceManage);
     
     return 0;

+ 70 - 64
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/cascade.c

@@ -17,8 +17,8 @@
 #endif
 
 #define ERR_MAX         5
-#define CASCADE_MAX     2
-//#define CASCADE_MAX     99
+#define CASCADE_MAX     10
+//#define CASCADE_MAX     100
 
 #define MB_MAX_LEN      250
 
@@ -91,7 +91,6 @@ static int mbus_init(cascade_handle_t *cas, char *path, int mode, int addr, uint
     modbus_set_response_timeout(cas->mb, 1, 5000);
     modbus_set_byte_timeout(cas->mb, 0, 50000);
 
-    cas->addr = addr;
     if(addr>0) {   //slave mode
         modbus_set_slave(cas->mb, addr);
     }
@@ -173,20 +172,19 @@ static int cascade_scan(cascade_handle_t *cas)
     int i,r=0 ;
     uint16_t tmp[100];
 
-    for(i=1; i<=CASCADE_MAX; i++) {
+    for(i=1; i<CASCADE_MAX; i++) {
         if(find_addr(cas, i)) {
             //LOGD("___slave 0x%02x is in the list\n", i);
             continue;
         }
 
-        r = mbus_read(cas, i, 6000, tmp, 10);
+        r = mbus_read(cas, i, 6000, tmp, 1);
         if(r>0) {
-            LOGD("____ scan addr:%d, %d  0x%04x, 0x%04x\n", i, r, tmp[0], tmp[1]);
-            //add_slave(cas, i);
+            LOGD("____ find slave %d\n", i);
+            add_slave(cas, i);
         }
         else {
-            LOGD("____ scan fail, %s\n", modbus_strerror(errno));
-
+            //LOGD("____ scan slave %d fail, %s\n", i, modbus_strerror(errno));
         }
     }
     //print_slave(cas);
@@ -216,7 +214,7 @@ static void power_init(void)
     GlobalPowerManger* pm = (GlobalPowerManger*)malloc(sizeof(GlobalPowerManger));
     memset(pm, 0, sizeof(GlobalPowerManger));
     pm->product_id = dm2->_global_device_info->product_id;
-    pm->product_saddr = 0;
+    pm->product_saddr = -1;
     pm->product_ch_id = 1;
     pm->product_ch_addr = 0;
     sprintf(pm->product_ch_name,"CH%d",pm->product_ch_id);
@@ -229,63 +227,63 @@ static void power_init(void)
     list_add_tail(&pm->list,&dm2->_globalPowerManger.list);
 }
 
-static int power_get(cascade_handle_t *cas, int addr, PowerInfo *pwr)
+
+static void print_sensor(char *s, sensor_data_t *ss)
 {
-    uint32_t offset = 0;
+    LOGD("__%s__ ss.type: %d\n", s, ss->type);
+    LOGD("__%s__ ss.addr: %d\n", s, ss->addr);
+
+    LOGD("__%s__ ss.voltage: %f\n", s, ss->pwr.voltage);
+    LOGD("__%s__ ss.current: %f\n", s, ss->pwr.current);
+    LOGD("__%s__ ss.power: %f\n", s, ss->pwr.power);
+    LOGD("__%s__ ss.consumption: %f\n", s, ss->pwr.consumption);
+    LOGD("__%s__ ss.freq: %f\n", s, ss->pwr.freq);
+    LOGD("__%s__ ss.factor: %f\n", s, ss->pwr.factor);
+
+    LOGD("__%s__ ss.temprature: %f\n", s, ss->temprature);
+    LOGD("__%s__ ss.humidity: %f\n", s, ss->humidity);
+    LOGD("__%s__ ss.warning: %d\n", s, ss->warning);
+    LOGD("__%s__ ss.power_status: %d\n", s, ss->power_status);
+    LOGD("__%s__ ss.sensor_status: %d\n", s, ss->sensor_status);
+    LOGD("\n");
+
+}
+#define VALUE_OF(m,a,b)   ((m[a]<<16)+m[b])
+static int power_get(cascade_handle_t *cas, int addr, sensor_data_t *ss)
+{
+    uint32_t offset = 6000;
     uint32_t value = 0 ;
     uint16_t temp[100];
-    sensor_data_t sdat;
-
-    int cnt = 10;
-    offset = 6000;
+    int r,cnt = sizeof(sensor_ori_t)/2;
     
-    //
-    mbus_read(cas, addr, offset, temp, cnt);
-    
-
-    //
-    value = (temp[1] << 16) + temp[0];
-    //dm->
+    if(addr<=0) {
+        return -1;
+    }
 
-    //reserved
-    value = (temp[3] << 16) + temp[2];
-    
     
-    value = (temp[5] << 16) + temp[4];
-    pwr->voltage = value / 1000.0;
+    r = mbus_read(cas, addr, offset, temp, cnt);
+    if(r!=cnt) {
+        LOGE("___mbus_read slave %d failed, %s\n", addr, modbus_strerror(errno));
+        return -1;
+    }
     
-    //
-    value = (temp[7] << 16) + temp[6];
-    pwr->current = value / 1000.0;
+    ss->type = temp[0];
+    ss->addr = temp[1];
     
-    //
-    value = (temp[9] << 16) + temp[8];
-    pwr->power = value / 1000.0;
-
-    //
-    value = (temp[11] << 16) + temp[10];
-    pwr->consumption = value / 1000.0;
-
-    //
-    value = (temp[13] << 16) + temp[12];
-    pwr->factor = value/1000.0;
+    ss->pwr.voltage = VALUE_OF(temp,3,2)/1000.0;
+    ss->pwr.current = VALUE_OF(temp,5,4)/1000.0;
+    ss->pwr.power   = VALUE_OF(temp,7,6)/1000.0;
+    ss->pwr.consumption = VALUE_OF(temp,9,8)/1000.0;
+    ss->pwr.freq   = VALUE_OF(temp,11,10)/1000.0;
+    ss->pwr.factor = VALUE_OF(temp,13,12)/1000.0;
 
-    //
-    value = (temp[15] << 16) + temp[14];
+    ss->temprature = VALUE_OF(temp,15,14)/1000.0;
+    ss->humidity   = VALUE_OF(temp,17,16)/1000.0;
+    ss->warning    = VALUE_OF(temp,19,18)/1000.0;
+    ss->power_status = temp[20];
+    ss->sensor_status = temp[21];
 
-    value = (temp[17] << 16) + temp[16];
-    //ss->sensor_type = 1;
-    //ss->
-
-    //
-    value = (temp[19] << 16) + temp[18];
-    pwr->status = value;
-
-#if 0
-    LOGD("___ voltage: %f, current: %f, power: %f, consum: %d, factor: %f, status: %d\n", pwr->voltage, pwr->voltage, pwr->current, pwr->power, pwr->consumption, pwr->factor, pwr->status);
-    LOGD("___ devtype: %d, addr: %d, voltage: %f, current: %f, power: %f, consum: %d, factor: %f, power_status: %d, sensor_status: %d\n", 
-        sdat.deveice_type, sdat.slave_addr, sdat.voltage, sdat.voltage, sdat.current, sdat.power, sdat.consumption, sdat.factor, sdat.power_status, sdat.sensor_status);
-#endif
+    //print_sensor("11", ss);
 
     return 0;
 }
@@ -293,17 +291,26 @@ static int power_get(cascade_handle_t *cas, int addr, PowerInfo *pwr)
 
 static int master_request(cascade_handle_t *cas)
 {
+    int r;
     GlobalPowerManger *tmp=NULL;
 
     list_for_each_entry(tmp, &get_dm2()->_globalPowerManger.list, list)
     {
-        tmp->product_saddr=cas->addr;
+        tmp->product_saddr=cur_dev_addr;
         break;
     }
 
     if(tmp) {
-        LOGD("___ master request %d\n", cas->addr);
-        power_get(cas, cas->addr, &tmp->_PowerInfo);
+        sensor_data_t sdat;
+
+        //LOGD("___ master request slave %d\n", cur_dev_addr);
+        r = power_get(cas, cur_dev_addr, &sdat);
+        if(r==0) {
+            tmp->_PowerInfo = sdat.pwr;
+        }
+        else {
+            //err++
+        }
     }
 }
 
@@ -333,7 +340,7 @@ static void* cascade_thread(void *arg)
     LOGD("__ cascade %s\n", info->product_modbus_type?"slave":"master");
     while(h->quit==0) {
         if(info->product_modbus_type==0) {      //主模
-            //r = master_request(cas);
+            r = master_request(cas);
             sleep(1);
         }
         else {                                  //从模式,等待主设备发起数据请�?
@@ -408,8 +415,8 @@ int cascade_init(void)
     paras_load();
     power_init();
 
-    lc.log = 1;
-    lc.max = 100;
+    lc.log = 0;
+    lc.max = CASCADE_MAX;
     lc.mode = LIST_FULL_FIFO;
     cas->l = xlist_init(&lc);
     
@@ -422,7 +429,6 @@ int cascade_init(void)
     set_modbus(cas, info);
 
     add_slave(cas, 0);
-    add_slaves(cas, 1, 10);
 
     sys_start_thread(THREAD_ID_CASCADE, cascade_thread, cas);
     sys_start_thread(THREAD_ID_SCAN, scan_thread, cas);

+ 16 - 0
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/cascade.h

@@ -2,6 +2,7 @@
 #define __CASCADE_Hx__
 
 #include <stdint.h>
+#include "common.h"
 
 #define MAX_READ_REGS                   100
 #define MAX_WRITE_REGS                  100
@@ -12,6 +13,7 @@ typedef struct {
     int cnt;
 }dev_list_t;
 
+#pragma pack (1)
 typedef struct {
     uint16_t deveice_type;          //设备类型
     uint16_t slave_addr;            //设备地址
@@ -29,6 +31,20 @@ typedef struct {
 
     //uint32_t Warinfo;
     //uint16_t sersor_type;
+}sensor_ori_t;
+#pragma pack ()
+
+typedef struct {
+    int   type;                  //设备类型
+    int   addr;
+
+    PowerInfo pwr;
+
+    float temprature;            //温度值
+    float humidity;              //湿度值
+    float warning;               //告警
+    int   power_status;          //供电状态
+    int   sensor_status;         //传感器状态
 }sensor_data_t;
 
 extern int cur_dev_addr;