Просмотр исходного кода

根据博士意见修改数据结构

guohui 1 год назад
Родитель
Сommit
453bc47bea
4 измененных файлов с 113 добавлено и 108 удалено
  1. 10 60
      f407/applications/datadef.h
  2. 49 39
      f407/applications/power.c
  3. 19 6
      f407/project/app/app.uvoptx
  4. 35 3
      f407/tools/web/data.js

+ 10 - 60
f407/applications/datadef.h

@@ -9,12 +9,6 @@
 #define BRD_MAX         32
 #define SLAVE_CH_MAX    64
 
-enum{
-    A_P = 0,
-    B_P = 1,
-    C_P = 2,
-};
-
 
 enum {
     RW_READ=0,                                 //读
@@ -230,19 +224,19 @@ typedef struct {
 typedef struct power_data{
     float               voltage;                //电压
     float               current;                //电流
-    float               power;                  //功率
+    float               power;                  //功率(视在)
     float               freq;                   //频率
-    float               consump;                //耗电量consumption
     float               factor;                 //功率因素
+    float               consump;                //耗电量consumption
 
+    float               active;                 //有功功率
+    float               reactive;               //无功功率
+    uint8_t             ph_out;                 //三相输出时,用于判断该相是否有输出
+    
     uint8_t             status;                 //开关状态     
     uint8_t             nwire;                  //零线状态    
 }power_t;
 
-typedef union board_wanning{
-    uint8_t             data[3];
-}power_wanning_t;
-
 typedef struct {
     uint8_t             en;
     float               val;                    //threashold value
@@ -264,7 +258,7 @@ typedef struct {
     uint8_t             p_upper;                //功率超上限
     uint8_t             w_upper;                //耗电量超上限
     
-    uint8_t             ph_loss;                //缺相
+    uint8_t             ph_loss;                //缺相,0,1,2位分别代表L1,L2,L3相,相应位为1则代表缺相,为0则不缺
 }alarm_t;
 typedef struct {
     uint8_t             ch;
@@ -277,12 +271,14 @@ typedef struct {
     uint8_t             addr;
     uint8_t             ch;                      //该通道在全部板上的所排序号,程序始于0,用户始于1
     uint8_t             sch;                     //该通道在其所在的板上的序号,程序始于0,用户始于1
-    uint8_t             pid;                     //phase id, 0:L1相 1:L2相 2:L3相
+    uint8_t             ph_id;                   //phase id, 0:L1相 1:L2相 2:L3相
     
+    uint8_t             ph_val;                  //三相输出值,1:单相  0:三相
     uint32_t            start_delay;
     uint32_t            stop_delay;
 }info_t;
 typedef struct {
+    char                name[32];
     info_t              info;
     power_t             power[3];                 //电力信息
     thr_t               thr;                      //阈值
@@ -377,52 +373,6 @@ typedef struct sensor_info{
     float       v[2];
 }sensor_info_t;
 
-typedef struct md_ac_dc{
-    uint16_t          dev_cnt;                   //设备类型和通道数
-    power_t           power[64];                 //最大64通道
-    uint16_t          temp_hum;
-    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]; 
-}md_ac_dc_t;
-
-typedef struct all_info{
-    uint32_t voltage;
-    uint32_t current;
-    uint32_t power;
-    uint32_t consumer;
-}all_info_t;
-
-typedef struct {
-    uint32_t power;
-    uint32_t freq;
-    uint32_t consumer;
-    uint16_t fac;
-    uint32_t out_type;
-}all_chn_info_t;
-
-typedef struct chn_phase_info{
-    uint32_t p_voltage;
-    uint32_t p_current;
-    uint32_t p_power;
-    uint32_t p_consumer;
-    uint32_t p_status;
-}chn_phase_info_t;
-
-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];
-    uint16_t            temp_hum;
-    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];
-}md_3_ac_t;
 
 //////////////////////////////
 typedef struct 

+ 49 - 39
f407/applications/power.c

@@ -228,6 +228,7 @@ static int threshold_proc(board_data_t *pbrd)
 static int board_read(power_handle_t *h, board_data_t *pbrd)
 {
     int i,j,r=-1;
+    power_t *pwr,power;
     uint16_t offset,tmp[144];
     
     lock_d_hold(h->lck);
@@ -245,24 +246,25 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
                 
                 for (i=0; i<pbrd->chs; i++) {
                     int idx = i * 12;
-                    // 解电压数据
+                    pwr = &pbrd->pch[i].power[0];
+                    
                     val = (tmp[1 + idx] << 16) | tmp[0 + idx];
-                    pbrd->pch[i].power[0].voltage = val / 1000.0;
-                    // 解电流数据
+                    pwr->voltage = val / 1000.0;
+                    
                     val = (tmp[3 + idx] << 16) | tmp[2 + idx];
-                    pbrd->pch[i].power[0].current = val / 1000.0;
-                    // 解功率数据
+                    pwr->current = val / 1000.0;
+                    
                     val = (tmp[5 + idx] << 16) | tmp[4 + idx];
-                    pbrd->pch[i].power[0].power = val / 1000.0;
-                    // 解频率数据
+                    pwr->power = val / 1000.0;
+                    
                     val = (tmp[7 + idx] << 16) | tmp[6 + idx];
-                    pbrd->pch[i].power[0].freq = val / 1000.0;
-                    // 解耗电量数据
+                    pwr->freq = val / 1000.0;
+                    
                     val = (tmp[9 + idx] << 16) | tmp[8 + idx];
-                    pbrd->pch[i].power[0].consump = val / 1000.0;
-                    // 解功率因素数据
+                    pwr->consump = val / 1000.0;
+                    
                     val = (tmp[11 + idx] << 16) | tmp[10 + idx];
-                    pbrd->pch[i].power[0].factor = val / 1000.0;
+                    pwr->factor = val / 1000.0;
                 }
                 
                 r = read_reg(h, pbrd->addr, POWER_AC_STAT_INFO_L, tmp, pbrd->chs);
@@ -296,21 +298,22 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
                 
                 for (i = 0; i < pbrd->chs; i++) {
                     int Index = i * 8;
-                    // 解电压数据
+                    pwr = &pbrd->pch[i].power[0];
+                    
                     float value = (tmp[1 + Index] << 16) + tmp[0 + Index];
-                    pbrd->pch[i].power[0].voltage = value / 1000.0;
-                    // 解电流数据
+                    pwr->voltage = value / 1000.0;
+                    
                     value = (tmp[3 + Index] << 16) + tmp[2 + Index];
-                    pbrd->pch[i].power[0].current = value / 1000.0;
-                    // 解功率数据
+                    pwr->current = value / 1000.0;
+                    
                     value = (tmp[5 + Index] << 16) + tmp[4 + Index];
-                    pbrd->pch[i].power[0].power = value / 1000.0;
+                    pwr->power = value / 1000.0;
 
                     value = (tmp[7 + Index] << 16) + tmp[6 + Index];
-                    pbrd->pch[i].power[0].consump = value / 1000.0;
+                    pwr->consump = value / 1000.0;
 
-                    pbrd->pch[i].power[0].freq = 0;
-                    pbrd->pch[i].power[0].factor = 1;
+                    pwr->freq = 0;
+                    pwr->factor = 1;
                 }
 
                 offset = POWER_DC_STAT_INFO;
@@ -325,7 +328,6 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
                     pbrd->pch[i].power[0].status = (flag >> i) & 0x1;
                 }
                 
-                
                 // 获取报警状态
                 offset = POWER_DC_WARNING;
                 r = read_reg(h, pbrd->addr, offset, tmp, 16);
@@ -348,7 +350,6 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
             case TREE_AC_TYPE:
             {
                 uint8_t v=0;
-               
                 offset = POWER_AC3_OUT_INFO;
                 r = read_reg(h, pbrd->addr, offset, tmp, 80);
                 if (r < 0) {
@@ -366,28 +367,37 @@ static int board_read(power_handle_t *h, board_data_t *pbrd)
                 
                 for (i=0; i<pbrd->chs; i++) {
                     int Index = i * 16;
-                    // 解电压数据
+                    
+                    if(h->prod->pwr_type==PDU_AC_I3O3) {
+                        int ch_idx = pbrd->ch0+i/3;
+                        int ph_idx = i%3;
+                        pwr = &pbrd->pch[ch_idx].power[ph_idx];
+                    }
+                    else {
+                        pwr = &pbrd->pch[i].power[0];
+                    }
+                    
                     float value = (tmp[1+Index] << 16) + tmp[0+Index];
-                    pbrd->pch[i].power[0].voltage = value / 1000.0f;
-                    // 解电流数据
+                    pwr->voltage = value / 1000.0f;
+                    
                     value = (tmp[3+Index] << 16) + tmp[2+Index];
-                    pbrd->pch[i].power[0].current = value / 1000.0f;
-                    // 解功率数据
+                    pwr->current = value / 1000.0f;
+                    
                     value = (tmp[5+Index] << 16) + tmp[4+Index];
-                    pbrd->pch[i].power[0].power = value / 1000.0f;
-                    // 无功
+                    pwr->power = value / 1000.0f;
+                    
                     value = (tmp[7+Index] << 16) + tmp[6+Index];
-                    // 视在功率
+                    
                     value = (tmp[9+Index] << 16) + tmp[8+Index];
-                    // 解频率数据
+                    
                     value = (tmp[11+Index] << 16) + tmp[10+Index];
-                    pbrd->pch[i].power[0].freq = value / 1000.0f;
-                    // 解耗电量数据
+                    pwr->freq = value / 1000.0f;
+                    
                     value = (tmp[13+Index] << 16) + tmp[12+Index];
-                    pbrd->pch[i].power[0].consump = value / 1000.0f;
-                    // 解功率因素数据
+                    pwr->consump = value / 1000.0f;
+                    
                     value = (tmp[15+Index] << 16) + tmp[14+Index];
-                    pbrd->pch[i].power[0].factor = value / 1023.0f;
+                    pwr->factor = value / 1023.0f;
                 }
                 
                 //获取通道开关状态及零线状态 
@@ -637,11 +647,11 @@ int power_scan(void)
                         
                         if(h->prod->pwr_type==PDU_AC_I3O3) {
                             h->pbrd[i]->pch[j].info.ch  = ch_idx+j/3;       //序号程序从0开始
-                            h->pbrd[i]->pch[j].info.pid = j%3;
+                            h->pbrd[i]->pch[j].info.ph_id = j%3;
                         }
                         else {
                             h->pbrd[i]->pch[j].info.ch  = ch_idx+j;         //序号程序从0开始
-                            h->pbrd[i]->pch[j].info.pid = 0;
+                            h->pbrd[i]->pch[j].info.ph_id = 0;
                         }
                     }
                     

+ 19 - 6
f407/project/app/app.uvoptx

@@ -117,10 +117,6 @@
         <pMon>Segger\JL2CM3.dll</pMon>
       </DebugOpt>
       <TargetDriverDllRegistry>
-        <SetRegEntry>
-          <Number>0</Number>
-          <Key>DLGUARM</Key>
-        </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
           <Key>ARMRTXEVENTFLAGS</Key>
@@ -147,7 +143,24 @@
           <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM))</Name>
         </SetRegEntry>
       </TargetDriverDllRegistry>
-      <Breakpoint/>
+      <Breakpoint>
+        <Bp>
+          <Number>0</Number>
+          <Type>0</Type>
+          <LineNumber>1136</LineNumber>
+          <EnabledFlag>1</EnabledFlag>
+          <Address>134499528</Address>
+          <ByteObject>0</ByteObject>
+          <HtxType>0</HtxType>
+          <ManyObjects>0</ManyObjects>
+          <SizeOfObject>0</SizeOfObject>
+          <BreakByAccess>0</BreakByAccess>
+          <BreakIfRCount>1</BreakIfRCount>
+          <Filename>&lt;1&gt;..\..\rt-thread\src\kservice.c</Filename>
+          <ExecCommand></ExecCommand>
+          <Expression>\\app\../../rt-thread/src/kservice.c\1136</Expression>
+        </Bp>
+      </Breakpoint>
       <WatchWindow1>
         <Ww>
           <count>0</count>
@@ -2802,7 +2815,7 @@
 
   <Group>
     <GroupName>drivers/drv</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>

+ 35 - 3
f407/tools/web/data.js

@@ -135,7 +135,11 @@ function bin_to_info(bin) {
     length += 1;
     
     tmp = new DataView(bin, length);
-    this.pid = tmp.getUint8(0,true);
+    this.ph_id = tmp.getUint8(0,true);
+    length += 1;
+    
+    tmp = new DataView(bin, length);
+    this.ph_val = tmp.getUint8(0,true);
     length += 1;
     
     tmp = new DataView(bin, length);
@@ -174,6 +178,18 @@ function bin_to_power(bin) {
     tmp = new DataView(bin, length);
     this.consump = tmp.getFloat32(0,true);
     length += 4;
+    
+    tmp = new DataView(bin, length);
+    this.active = tmp.getFloat32(0,true);
+    length += 4;
+    
+    tmp = new DataView(bin, length);
+    this.reactive = tmp.getFloat32(0,true);
+    length += 4;
+    
+    tmp = new DataView(bin, length);
+    this.ph_out = tmp.getUint8(0,true);
+    length += 1;
 
     tmp = new DataView(bin, length);
     this.status = tmp.getUint8(0,true);
@@ -411,7 +427,11 @@ function info_to_bin(js) {
     length += 1;
 
     tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.pid,true);
+    tmp.setUint8(0,js.ph_id,true);
+    length += 1;
+    
+    tmp = new DataView(buffer, length);
+    tmp.setUint8(0,js.ph_val,true);
     length += 1;
     
     tmp = new DataView(buffer, length);
@@ -447,11 +467,23 @@ function power_to_bin(js) {
     tmp = new DataView(buffer, length);
     tmp.setFloat32(0,js.factor,true);
     length += 4;
-
+    
     tmp = new DataView(buffer, length);
     tmp.setFloat32(0,js.consump,true);
     length += 4;
 
+    tmp = new DataView(buffer, length);
+    tmp.setFloat32(0,js.active,true);
+    length += 4;
+    
+    tmp = new DataView(buffer, length);
+    tmp.setFloat32(0,js.reactive,true);
+    length += 4;
+    
+    tmp = new DataView(buffer, length);
+    tmp.setUint8(0,js.ph_put,true);
+    length += 1;
+
     tmp = new DataView(buffer, length);
     tmp.setUint8(0,js.status,true);
     length += 1;