Browse Source

modbus,ok

guohui 1 year ago
parent
commit
e8fc3027ca

+ 64 - 10
f407/applications/cboard.c

@@ -1,17 +1,71 @@
 #include "cboard.h"
-#include "rtdbg.h"
+#include "datadef.h"
+#include "mb.h"
+#include "log.h"
 
 
-#if 1
-    #define LOGD            LOG_D
-    #define LOGE            LOG_E
-    #define LOGW            LOG_W
-#else
-    #define LOGD            printf
-    #define LOGE            printf
-    #define LOGW            printf
-#endif
+static cboard_handle_t cbHandle={0};
 
+int read_reg(uint8_t addr, uint16_t reg, uint16_t *data, int cnt)
+{
+    cboard_handle_t *h=&cbHandle;
+    return mb_read(h->mb, addr, reg, data, cnt, 800);
+}
+int write_reg(uint8_t addr, uint16_t reg, uint16_t *data, int cnt)
+{
+    cboard_handle_t *h=&cbHandle;
+    return mb_write(h->mb, addr, reg, data, cnt);
+}
+////////////////////////////////////////////////////////////////////
+
+
+
+
+///////////////////////////////////////////////////////
+static board_fn_t board_fn[]={
+    //
+    
+};
+
+
+int cboard_init(void)
+{
+    cboard_handle_t *h=&cbHandle;
+    mb_para_t para={
+        .mode = MB_MODE_MASTER,
+        .type = MB_TYPE_RTU,
+        
+        .para = {
+            .rtu = {
+                .dev = POWER_PORT,          //设备名
+                .baudrate = 115200,         //波特率
+                .parity = 0,                //校验位
+                .pin = 1,                   //收发控制引脚, <0 表示不使用
+                .lvl = 0,                   //发送控制电平
+            }
+        }
+    };
+    
+    memset(h, 0, sizeof(cboard_handle_t));
+    h->lck = lock_d_init();
+    h->mb = mb_init(&para);
+    if(!h->mb) {
+        return -1;
+    }
+    
+    return 0;
+}
+
+int cboard_deinit(void)
+{
+    cboard_handle_t *h=&cbHandle;
+    
+    lock_d_deinit(h->lck);
+    mb_deinit(h->mb);
+    return 0;
+    
+    
+}
 
 
 

+ 153 - 0
f407/applications/cboard.h

@@ -1,9 +1,162 @@
 #ifndef __CBOARD_Hx__
 #define __CBOARD_Hx__
 
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include "lock.h"
 
+#define POWER_AC_GET_INFO                         0x0FA0          //获取继电器板类型通道
+#define POWER_AC_CUR_INFO_L                       0x0FAB          //单相小电流继电器信息,共8路继电器
+#define POWER_AC_STAT_INFO_L                      0x1071          //单相小电流继电器开关状态,共8路继电器
+#define POWER_AC_CUR_INFO_H                       0x1015          //单相大电流继电器信息,共4路继电器
+#define POWER_AC_STAT_INFO_H                      0x1083          //单相大电流继电器开关状态,共4路继电器
+#define POWER_AC_BRK_INFO                         0x10D6          //单相控制板开关检测信息
+#define POWER_AC_TOTAL_ALATRM                     0x10E0          //单相控制板总体报警信息 2024.11.12
+#define POWER_AC_START_DELAY_TIME_L               0x1194          //单相小电流继电器板开启延时
+#define POWER_AC_STOP_DELAY_TIME_L                0x11A6          //单相小电流继电器板关闭延时
+#define POWER_AC_START_DELAY_TIME_H               0x11B8          //单相大电流继电器板开启延时
+#define POWER_AC_STOP_DELAY_TIME_H                0x11C6          //单相大电流继电器板关闭延时
+#define POWER_AC_CH_STAT_L                        0x11EA          //设置单相小电流通道开关状态
+#define POWER_AC_CH_STAT_H                        0x11FC          //设置单相大电流通道开关状态
+#define POWER_AC_THRESHOLD_L                      0x1215          //设置单相小电流通道超限报警阈值
+#define POWER_AC_THRESHOLD_H                      0x129F          //设置单相大电流通道超限报警阈值X
+#define POWER_AC_KB_VAL_L                         0x1203          //设置单相小电流通道K、B值
+#define POWER_AC_KB_VAL_H                         0x124D          //设置单相大电流通道K、B值
+#define POWER_AC_RESET_CONSUMP                    0x1400          //重置单相耗电量
+#define POWER_AC_ALARM_CTRL                       0x13EC          //超限动作
+#define POWER_AC_TOTAL_THRESHOLD                  0x1450          //设置单相总超限报警阈值 2024.11.12
+#define POWER_AC_ALARM_CTRL_TOTAL                 0x1482          //总体超限动作   2024.11.12       
 
+#define POWER_DC_SET_STAT                         0x120A          //设置直流继电器开关状态
+#define POWER_DC_SET_THRESHOLD                    0x12E9          //设置直流继电器超限报警X
+#define POWER_DC_SET_KB_VAL                       0x136D          //设置直流通道K、B值
+#define POWER_DC_SET_START_DELAY                  0x11D4          //直流继电器控制板开启延时
+#define POWER_DC_SET_STOP_DELAY                   0x11DF          //直流继电器控制板关闭延时
+#define POWER_DC_SET_OUT_INFO                     0x104F          //直流继电器电路控制板信息,采集一路输出
+#define POWER_DC_SET_STAT_INFO                    0x1097          //直流继电器电路控制板开关状态,采集一路输出
+#define POWER_DC_SET_IN_INFO                      0x105F          //直流总电流电压采集控制板,采集设备输入电压和输入电流
 
+#define POWER_DC_INFO                             0x1770          //获取直流PDU类型通道
+#define POWER_DC_TOTAL_ALARM                      0x1776          //直流PDU总报警信息 2024.11.12
+#define POWER_DC_OUT_INFO                         0x177A          //直流PDU输出
+#define POWER_DC_STAT_INFO                        0x17E2          //直流PDU开关状
+#define POWER_DC_WARNING                          0x179A          //直流PDU报警信息
+#define POWER_DC_STAT_ERROR                       0x17E4          //直流PDU故障状态
+#define POWER_DC_IN_INFO                          0x1772          //直流PDU采集输入电压与输入电
+#define POWER_DC_START_DELAY                      0x17E6          //直流PDU延时
+#define POWER_DC_STOP_DELAY                       0x17F6          //直流PDU延时
+#define POWER_DC_THRESHOLD_VOL_MAX                0x17A2          //max voltage threshold
+#define POWER_DC_THRESHOLD_VOL_MIN                0x17B2          //min voltage threshold
+#define POWER_DC_THRESHOLD_CUR_MAX                0x17C2          //max current threshold
+#define POWER_DC_THRESHOLD_CUR_MIN                0x17D2          //max current threshold
+#define POWER_DC_THRESHOLD_POWER_MAX              0x1810          //max power threshold
+#define POWER_DC_THRESHOLD_POWERCON_MAX           0x181A          //max powercon threshold
+#define POWER_DC_ALL_OPEN_INFO                    0x1806          //ALL OPEN直流PDU开关状
+#define POWER_DC_ALL_CLOSE_INFO                   0x1807          //ALL OPEN直流PDU开关状
+#define POWER_DC_ALARM_CTRL                       0x182E          //超限动作
+#define POWER_DC_CONSUMP_CLEAR   	              0x1838          //重置直流耗电量
+#define POWER_DC_THRESHOLD_TOTAL_VOL_MAX          0x184C          //max total voltage threshold 2024.11.12
+#define POWER_DC_THRESHOLD_TOTAL_VOL_MIN          0x184D          //min total voltage threshold 2024.11.12
+#define POWER_DC_THRESHOLD_TOTAL_CUR_MAX          0x184E          //max total current threshold 2024.11.12
+#define POWER_DC_THRESHOLD_TOTAL_PWR_MAX          0x184F          //max total power threshold 2024.11.12
+#define POWER_DC_THRESHOLD_TOTAL_PWRCON_MAX       0x1850          //max total powercon threshold 2024.11.12
+#define POWER_DC_ALARM_CTRL_TOTAL                 0x1856          //总体超限动作   2024.11.12       
+
+#define POWER_AC3_GET_INFO                        0x1770          //获取三项类型通道
+#define POWER_AC3_IN_INFO                         0x1771          //三项交流输入
+#define POWER_AC3_OUT_INFO                        0x177D          //三项交流输出
+#define POWER_AC3_OUT_ENABLE                      0x182E          //三项交流输出按通道开关状态及控制使能
+#define POWER_AC3_NF_STATUS                       0x1837          //三项交流零线断路器状态
+#define POWER_AC3_CH_OUT_ENABLE                   0x183A          //三项交流输出按插头开关状态及控制使
+#define POWER_AC3_IN_ENABLE                       0x182D          //三项交流输入超限使能
+#define POWER_AC3_OUT_ERROR                       0x17DE          //三项交流输出故障状态
+#define POWER_AC3_IN_TOTAL_ERROR                  0x17CA          //三项交流总输入故障状态 2024.11.12 
+#define POWER_AC3_IN_ERROR                        0x17DD          //三项交流输入故障状态
+#define POWER_AC3_START_DELAY_TIME                0x1840          //三项交流延时
+#define POWER_AC3_STOP_DELAY_TIME                 0x184C          //三项交流延时
+#define POWER_AC3_THRESHOLD_IN                    0x17EA          //设置三项交流输入超限报警 
+#define POWER_AC3_THRESHOLD_OUT                   0x17EF          //设置三项交流输出超限报警
+#define POWER_AC3_ALL_OPEN_INFO                   0x182B          //ALL OPEN直流PDU开关状
+#define POWER_AC3_ALL_CLOSE_INFO                  0x182C          //ALL OPEN直流PDU开关状
+#define POWER_AC3_THRESHOLD_VOL_MAX               0x17EF          //max voltage threshold
+#define POWER_AC3_THRESHOLD_VOL_MIN               0x17FB          //min voltage threshold
+#define POWER_AC3_THRESHOLD_CUR_MAX               0x1807          //max current threshold
+#define POWER_AC3_THRESHOLD_PWR_MAX               0x1813          //max POWER threshold
+#define POWER_AC3_THRESHOLD_PWRCON_MAX            0x181F          //max PWRCON threshold
+#define POWER_AC3_ALARM_MISSING_PH                0x1856          //缺相报警
+#define POWER_AC3_ALARM_CTRL_TOTAL                0x185F          //总体超限动作 2024.11.12 
+#define POWER_AC3_ALARM_CTRL                      0x1860          //超限动作
+#define POWER_AC3_RESET_CONSUMP                   0x189C          //重置PH耗电量
+#define POWER_AC3_RESET_CONSUMP_ALL               0x18A5          //重置all耗电量
+#define POWER_AC3_BREAKER_INFO                    0x17D4          //三相控制板开关检测信息
+
+#define BIT(x)  (1<<x)
+
+
+enum {
+    BOARD_TYPE_AC_SINGLE_L=1,
+    BOARD_TYPE_AC_SINGLE_H,
+    BOARD_TYPE_AC_MULTI_L,
+    BOARD_TYPE_AC_MULTI_H,
+    BOARD_TYPE_DC_OUT,
+    BOARD_TYPE_DC_IN,
+    BOARD_TYPE_DC,
+    BOARD_TYPE_AC3,   //三相
+};
+enum {
+    ENABLE_V_UP         = (1<<1),
+    ENABLE_V_DOWN       = (1<<3),
+    ENABLE_C_UP         = (1<<5),
+    ENABLE_W_UP         = (1<<7),
+    ENABLE_P_UP         = (1<<9),
+    ENABLE_ALL_UP       = (1<<11),
+    ENABLE_ALL_DOWN     = (1<<12),
+};
+
+enum {
+    ENABLE_AC3_V_UP     = (1<<1),
+    ENABLE_AC3_V_DOWN   = (1<<2),
+    ENABLE_AC3_C_UP     = (1<<3),
+    ENABLE_AC3_W_UP     = (1<<4),
+    ENABLE_AC3_P_UP     = (1<<5),
+    ENABLE_AC3_STIME    = (1<<6),
+    ENABLE_AC3_ETIME    = (1<<7),
+};
+
+enum {
+    ALARM_V_UP          = (1<<2),
+    ALARM_V_DOWN        = (1<<4),
+    ALARM_C_UP          = (1<<6), 
+    ALARM_W_UP          = (1<<8),
+    ALARM_P_UP          = (1<<10),
+};
+
+enum {
+    THR_V_UPPER=0,
+    THR_V_LOWER,
+    THR_C_UPPER, 
+    THR_P_UPPER,
+    THR_W_UPPER,
+    
+    THR_MAX,
+};
+
+//采集KB值
+typedef struct {
+    float   voltage_k;//电压K
+    float   voltage_b;//电压B
+    float   current_k;//电流K
+    float   current_b;//电流B
+}kb_val_t;
+
+typedef struct {
+    void*   mb;
+    lock_t  lck;
+}cboard_handle_t;
+
+int read_reg(uint8_t addr, uint16_t reg, uint16_t *data, int cnt);
+int write_reg(uint8_t addr, uint16_t reg, uint16_t *data, int cnt);
 
 
 

File diff suppressed because it is too large
+ 1037 - 0
f407/applications/cboard_ac.c


File diff suppressed because it is too large
+ 1037 - 0
f407/applications/cboard_ac3.c


+ 221 - 0
f407/applications/cboard_dc.c

@@ -0,0 +1,221 @@
+#include "cboard.h"
+#include "datadef.h"
+#include "lock.h"
+#include "mb.h"
+#include "log.h"
+
+typedef struct {
+    int (*get_power)(power_ch_t *pch);
+    int (*get_alarm)(power_ch_t *pch);
+    int (*set_ch)(power_ch_t *pch);
+    int (*set_open_delay)(power_ch_t *pch);
+    int (*set_close_delay)(power_ch_t *pch);
+    int (*set_kb_value)(power_ch_t *pch);
+    int (*set_threshold)(power_ch_t *pch);
+    int (*reset_consump)(power_ch_t *pch);
+
+    int (*detect)(uint8_t addr);
+    int (*get_info)(uint8_t addr, board_info_t *info);
+    int (*get_board)(board_data_t *pbrd);
+    int (*set_all)(uint8_t addr, uint8_t on);
+}board_fn2_t;
+
+
+//////////////////////////////////////////////////////////
+static int get_power(power_ch_t *pch)
+{
+    return 0;
+}
+static int get_alarm(power_ch_t *pch)
+{
+    return 0;
+}
+static int set_ch(power_ch_t *pch)
+{
+    int r;
+    power_ch_t pc;
+    uint16_t offset=0,data_temp[2];
+        
+    offset = POWER_DC_SET_STAT + pch->info.ch;
+    data_temp[0] = pch->power[0].status; data_temp[1] = 0;
+    r = write_reg(pch->info.addr, offset, data_temp, 2);
+    
+    return r;
+}
+static int set_open_delay(int addr, uint16_t delay)
+{
+    
+}
+static int set_close_delay(int addr, uint16_t delay)
+{
+    
+}
+static int set_kb_value(int addr, kb_val_t *kv)
+{
+    
+}
+
+static int set_threshold(power_ch_t *pch)
+{
+    int r=-1;
+    
+   
+    
+    return r;
+}
+static int reset_consump(int addr)
+{
+    
+}
+
+
+
+
+
+
+
+
+int set_alarm(power_ch_t *pch)
+{
+    int r=-1;
+    power_ch_t pc;
+    uint16_t offset = 0;
+    uint16_t nStatus = 0;
+    
+    if (pch->info.ch<0) {
+        offset = POWER_DC_ALARM_CTRL_TOTAL;
+    }
+    else {
+        offset = POWER_DC_ALARM_CTRL + pch->info.ch;
+    }
+    
+    if(pc.thr.v_upper.act==1) nStatus |= BIT(1);
+    if(pc.thr.v_lower.act==1) nStatus |= BIT(2);
+    if(pc.thr.c_upper.act==1) nStatus |= BIT(0);
+    if(pc.thr.p_upper.act==1) nStatus |= BIT(3);
+    if(pc.thr.w_upper.act==1) nStatus |= BIT(4);
+    r = write_reg(pch->info.addr, offset, &nStatus, 1);
+    
+    return r;
+}
+
+
+int set_threashold(power_ch_t *pch)
+{
+    int r=-1;
+    uint16_t offset;
+    uint16_t data_temp[4];
+    uint32_t value;
+            
+    offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_VOL_MAX:POWER_DC_THRESHOLD_VOL_MAX;
+    value = pch->thr.v_upper.val * 1000;
+    data_temp[0] = value & 0XFFFF;
+    data_temp[1] = (value >> 16) & 0xFFFF;
+    r = write_reg(pch->info.addr, offset, data_temp, 2);
+    
+    offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_VOL_MIN:POWER_DC_THRESHOLD_VOL_MIN;
+    value = pch->thr.v_lower.val * 1000;
+    data_temp[0] = value & 0XFFFF;
+    data_temp[1] = (value >> 16) & 0xFFFF;
+    r = write_reg(pch->info.addr, offset, data_temp, 2);
+    
+    offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_CUR_MAX:POWER_DC_THRESHOLD_CUR_MAX;
+    value = pch->thr.c_upper.val * 1000;
+    data_temp[0] = value & 0XFFFF;
+    data_temp[1] = (value >> 16) & 0xFFFF;
+    r = write_reg(pch->info.addr, offset, data_temp, 2);
+    
+    offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_PWR_MAX:POWER_DC_THRESHOLD_POWER_MAX;
+    value = pch->thr.p_upper.val * 1000;
+    data_temp[0] = value & 0XFFFF;
+    data_temp[1] = (value >> 16) & 0xFFFF;
+    r = write_reg(pch->info.addr, offset, data_temp, 2);
+    
+    offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_PWRCON_MAX:POWER_DC_THRESHOLD_POWERCON_MAX;
+    value = pch->thr.w_upper.val * 1000;
+    data_temp[0] = value & 0XFFFF;
+    data_temp[1] = (value >> 16) & 0xFFFF;
+    r = write_reg(pch->info.addr, offset, data_temp, 2);
+    
+    //set_alarm();
+    
+    return r;
+}
+////////////////////////
+static int brd_detect(uint8_t addr)
+{
+    return 0;
+}
+static int get_info(uint8_t addr, board_info_t *info)
+{
+    return 0;
+}
+
+static int get_board(uint8_t addr, board_data_t *pbrd)
+{
+    int r,i,j;
+    uint32_t val;
+    uint16_t offset,tmp[144];      
+            
+    r = read_reg(pbrd->addr, POWER_AC_CUR_INFO_L, tmp, pbrd->chs);
+    if(r==0 && pbrd->pch) {
+        for (i=0; i<pbrd->chs; i++) {
+            int idx = i * 12;
+            // 解电压数据
+            val = (tmp[1 + idx] << 16) | tmp[0 + idx];
+            pbrd->pch[i].power[0].voltage = val / 1000.0;
+            // 解电流数据
+            val = (tmp[3 + idx] << 16) | tmp[2 + idx];
+            pbrd->pch[i].power[0].current = val / 1000.0;
+            // 解功率数据
+            val = (tmp[5 + idx] << 16) | tmp[4 + idx];
+            pbrd->pch[i].power[0].power = val / 1000.0;
+            // 解频率数据
+            val = (tmp[7 + idx] << 16) | tmp[6 + idx];
+            pbrd->pch[i].power[0].freq = val / 1000.0;
+            // 解耗电量数据
+            val = (tmp[9 + idx] << 16) | tmp[8 + idx];
+            pbrd->pch[i].power[0].consump = val / 1000.0;
+            // 解功率因素数据
+            val = (tmp[11 + idx] << 16) | tmp[10 + idx];
+            pbrd->pch[i].power[0].factor = val / 1000.0;
+        }
+    }
+    
+    r = read_reg(pbrd->addr, POWER_AC_STAT_INFO_L, tmp, pbrd->chs);
+    if (r < 0) {
+        LOGE("get_board, addr:%d offset:%d r=%d\n", pbrd->addr, offset, r);
+        return r;
+    }
+    
+    if(pbrd->pch) {
+        for (i=0; i<pbrd->chs; i++) {
+            pbrd->pch[i].power[0].status = tmp[i] & (0x01);
+            pbrd->pch[i].alarm.v_upper   = tmp[i] & ALARM_V_UPPER;
+            pbrd->pch[i].alarm.v_lower   = tmp[i] & ALARM_V_LOWER;
+            pbrd->pch[i].alarm.c_upper   = tmp[i] & ALARM_C_UPPER;
+            pbrd->pch[i].alarm.p_upper   = tmp[i] & ALARM_P_UPPER;
+            pbrd->pch[i].alarm.w_upper   = tmp[i] & ALARM_W_UPPER;
+            pbrd->pch[i].alarm.ph_loss   = 0;
+        }
+    }
+    
+    return 0;
+}
+static int open_all(uint8_t addr)
+{
+    return 0;
+}
+static int close_all(uint8_t addr)
+{
+    return 0;
+}
+///////////////////////////////////////////////////////
+
+static board_fn_t board_dc_fn={
+    //
+    
+};
+
+
+

+ 0 - 828
f407/applications/data.js

@@ -1,828 +0,0 @@
-
-var PKT_TYPE=function(){
-    var len = 0;
-    return {
-        PKT_TYPE_ACK:len++,             
-        PKT_TYPE_PARAS:len++,             
-        PKT_TYPE_POWER_CH:len++,          //power_ch_t
-        PKT_TYPE_POWER_TOTAL:len++,       //power_total_t
-        PKT_TYPE_CH_ALL:len++,
-        PKT_TYPE_ALARM:len++,
-        PKT_TYPE_SENSOR:len++,
-        PKT_TYPE_BREAKER:len++,
-        PKT_TYPE_STAT:len++,
-        PKT_TYPE_MESG:len++,
-        PKT_TYPE_FILE:len++,
-    }
-}();
-
-
-///////////////////////////////////////////////////////
-function array_to_string(data){
-    var s = "";
-    for(var i=0;i<data.length  && data[i] !=0;i++){
-        s +=String.fromCharCode(data[i]);
-    }
-    return s;
-}
-
-function string_to_array(data,attr){
-    for(var i=0;i<data.length;i++){
-        attr[i] = data.charCodeAt(i);
-    }
-    return attr;
-}
-function array_cat(a1,a2){
-    var tlen=a1.byteLength+a2.byteLength;
-    var buffer = new ArrayBuffer(tlen);
-    var vw = new Uint8Array(buffer);
-    
-    var vw1 = new Uint8Array(a1);
-    for(var i=0; i<a1.byteLength; i++) {
-        vw[i] = vw1[i];
-    }
-    
-    var vw2 = new Uint8Array(a2);
-    for(var i=0; i<a2.byteLength; i++) {
-        vw[i+a1.byteLength] = vw2[i];
-    }
-    return buffer;
-}
-///////////////////////////////////////////////////
-function bin_to_hdr(bin) {
-    var tmp, length=0;
-
-    tmp = new DataView(bin, length);
-    this.magic = tmp.getUint32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.type = tmp.getUint32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.nack = tmp.getUint32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.dlen = tmp.getUint32(0,true);
-    length += 4;
-
-    this.len = length;
-}
-function bin_to_info(bin) {
-    var tmp, length=0;
-
-    tmp = new DataView(bin, length);
-    this.type = tmp.getUint8(0,true);
-    length += 1;
-
-    tmp = new DataView(bin, length);
-    this.addr = tmp.getUint8(0,true);
-    length += 1;
-
-    tmp = new DataView(bin, length);
-    this.ch = tmp.getUint8(0,true);
-    length += 1;
-
-    tmp = new DataView(bin, length);
-    this.sch = tmp.getUint8(0,true);
-    length += 1;
-    
-    tmp = new DataView(bin, length);
-    this.pid = tmp.getUint8(0,true);
-    length += 1;
-    
-    tmp = new DataView(bin, length);
-    this.start_delay = tmp.getUint16(0,true);
-    length += 2;
-    
-    tmp = new DataView(bin, length);
-    this.stop_delay = tmp.getUint16(0,true);
-    length += 2;
-
-    this.len = length;
-}
-function bin_to_power(bin) {
-    var tmp, length=0;
-
-    tmp = new DataView(bin, length);
-    this.voltage = tmp.getFloat32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.current = tmp.getFloat32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.power = tmp.getFloat32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.freq = tmp.getFloat32(0,true);
-    length += 4;
-    
-    tmp = new DataView(bin, length);
-    this.factor = tmp.getFloat32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.consump = tmp.getFloat32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.status = tmp.getUint8(0,true);
-    length += 1;
-
-    tmp = new DataView(bin, length);
-    this.nwire = tmp.getUint8(0,true);
-    length += 1;
-
-    this.len = length;
-}
-function bin_to_alarm(bin) {
-    var tmp, length=0;
-
-    tmp = new DataView(bin, length);
-    this.v_upper = tmp.getUint8(0,true);
-    length += 1;
-
-    tmp = new DataView(bin, length);
-    this.v_lower = tmp.getUint8(0,true);
-    length += 1;
-
-    tmp = new DataView(bin, length);
-    this.c_upper = tmp.getUint8(0,true);
-    length += 1;
-
-    tmp = new DataView(bin, length);
-    this.p_upper = tmp.getUint8(0,true);
-    length += 1;
-    
-    tmp = new DataView(bin, length);
-    this.w_upper = tmp.getUint8(0,true);
-    length += 1;
-    
-    tmp = new DataView(bin, length);
-    this.ph_loss = tmp.getUint8(0,true);
-    length += 1;
-
-    this.len = length;
-}
-function bin_to_thrval(bin) {
-    var tmp, length=0;
-    
-    tmp = new DataView(bin, length);
-    this.en = tmp.getUint8(0,true);
-    length += 1;
-
-    tmp = new DataView(bin, length);
-    this.val = tmp.getFloat32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.act = tmp.getUint8(0,true);
-    length += 1;
-
-    this.act_para = [];
-    tmp = new DataView(bin, length);
-    for(var i=0; i<14; i++) {
-        this.act_para[i] = tmp.getUint8(i,true);
-    }
-    length += 14;
-
-    this.len = length;
-}
-function bin_to_thr(bin) {
-    var tmp, length=0;
-    
-    this.v_upper = new bin_to_thrval(bin.slice(length));
-    length += this.v_upper.len;
-    
-    this.v_lower = new bin_to_thrval(bin.slice(length));
-    length += this.v_lower.len;
-    
-    this.c_upper = new bin_to_thrval(bin.slice(length));
-    length += this.c_upper.len;
-    
-    this.p_upper = new bin_to_thrval(bin.slice(length));
-    length += this.p_upper.len;
-    
-    this.w_upper = new bin_to_thrval(bin.slice(length));
-    length += this.w_upper.len;
-
-    this.len = length;
-}
-function bin_to_powerc(bin) {
-    var tmp, bin2, length=0;
-
-    this.info = new bin_to_info(bin);
-    length += this.info.len;
-    
-    this.power = [];
-    for(var i=0; i<3; i++) {
-        this.power[i] = new bin_to_power(bin.slice(length));
-        length += this.power[i].len;
-    }
-    
-    this.thr = new bin_to_thr(bin.slice(length));
-    length += this.thr.len;
-    
-    this.alarm = new bin_to_alarm(bin.slice(length));
-    length += this.alarm.len;
-    
-    tmp = new DataView(bin, length);
-    this.time = tmp.getUint32(0,true);
-    length += this.time.len;
-    
-    tmp = new DataView(bin, length);
-    this.pbrd = tmp.getUint32(0,true);
-    length += this.pbrd.len;
-
-    this.len = length;
-}
-function bin_to_total(bin) {
-    var tmp, length=0;
-
-    tmp = new DataView(bin, length);
-    this.voltage = tmp.getFloat32 (0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.current = tmp.getFloat32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.power = tmp.getFloat32(0,true);
-    length += 4;
-
-    tmp = new DataView(bin, length);
-    this.freq = tmp.getFloat32(0,true);
-    length += 4;
-    
-    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.apparent = tmp.getFloat32(0,true);
-    length += 4;
-    
-    this.len = length;
-}
-function bin_to_powert(bin) {
-    var tmp, length=0;
-
-    tmp = new DataView(bin, length);
-    this.type = tmp.getUint8(0,true);
-    length += 1;
-
-    this.total = [];
-    for(var i=0; i<3; i++) {
-        this.total[i] = new bin_to_total(bin.slice(length));
-        length += this.total[i].len;
-    }
-    
-    this.len = length;
-}
-function bin_to_chall(bin) {
-    var tmp, length=0;
-
-    tmp = new DataView(bin, length);
-    var chall = tmp.getUint8(0,true);
-    length += 1;
-
-    return chall;
-}
-function bin_to_alarmd(bin) {
-    var tmp, length=0;
-    
-    tmp = new DataView(bin, length);
-    this.ch = tmp.getUint8(0,true);
-    length += 1;
-    
-    this.alarm = new bin_to_alarm(bin.slice(leng));
-    length += this.alarm.len;
-    
-    tmp = new DataView(bin, length);
-    this.time = tmp.getUint32(0,true);
-    length += 1;
-
-    this.len = length;
-}
-///////////////////////////////////////////////////
-function hdr_to_bin(js) {
-    var tmp, length=0;
-    var buffer = new ArrayBuffer(js.len);
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint32(0,js.magic,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint32(0,js.type,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint32(0,js.nack,true);
-    length += 4;
-    
-    tmp = new DataView(buffer, length);
-    tmp.setUint32(0,js.dlen,true);
-    length += 4;
-
-    return buffer;
-}
-function info_to_bin(js) {
-    var tmp, length=0;
-    var buffer = new ArrayBuffer(js.len);
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.type,true);
-    length += 1;
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.addr,true);
-    length += 1;
-    
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.ch,true);
-    length += 1;
-    
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.sch,true);
-    length += 1;
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.pid,true);
-    length += 1;
-    
-    tmp = new DataView(buffer, length);
-    tmp.setUint16(0,js.start_delay,true);
-    length += 2;
-    
-    tmp = new DataView(buffer, length);
-    tmp.setUint16(0,js.stop_delay,true);
-    length += 2;
-
-    return buffer;
-}
-function power_to_bin(js) {
-    var tmp, length=0;
-    var buffer = new ArrayBuffer(js.len);
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.voltage,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.current,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.power,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.freq,true);
-    length += 4;
-    
-    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.setUint8(0,js.status,true);
-    length += 1;
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.nwire,true);
-    length += 1;
-
-    return buffer;
-}
-function alarm_to_bin(js) {
-    var tmp, length=0;
-    var buffer = new ArrayBuffer(js.len);
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.v_upper,true);
-    length += 1;
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.v_lower,true);
-    length += 1;
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.c_upper,true);
-    length += 1;
-
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.p_upper,true);
-    length += 1;
-    
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.w_upper,true);
-    length += 1;
-    
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.ph_loss,true);
-    length += 1;
-
-    return buffer;
-}
-function thrval_to_js(js) {
-    var tmp, length=0;
-    var buffer = new ArrayBuffer(js.len);
-    
-    tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.en,true);
-    length += 1;
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.val,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.getUint8(0,js.act,true);
-    length += 1;
-
-    tmp = new DataView(buffer, length);
-    for(var i=0; i<14; i++) {
-        tmp.setUint8(i,js.act_para[i],true);
-    }
-    length += 14;
-
-    return buffer;
-}
-function thr_to_bin(js) {
-    var bin,tmp, length=0;
-    
-    bin = thrval_to_js(js.v_upper);
-    tmp = thrval_to_js(js.v_lower);
-    
-    bin = array_cat(bin, tmp);
-    tmp = thrval_to_js(js.c_upper);
-    bin = array_cat(bin, tmp);
-    
-    tmp = thrval_to_js(js.p_upper);
-    bin = array_cat(bin, tmp);
-    
-    tmp = thrval_to_js(js.w_upper);
-    bin = array_cat(bin, tmp);
-
-    return bin;
-}
-function powerc_to_bin(js) {
-    var bin,tmp, length=0;
-    
-    bin = info_to_bin(js.info);
-    
-    for(var i=0; i<3; i++) {
-        tmp = power_to_bin(js.power[i]);
-        bin = array_cat(bin, tmp);
-    }
-    
-    tmp = thr_to_bin(js.thr);
-    bin = array_cat(bin, tmp);
-
-    tmp = alarm_to_bin(js.alarm);
-    bin = array_cat(bin, tmp);
-    
-    var buf = new ArrayBuffer(8);
-    tmp = new DataView(buf, 0);
-    tmp.setUint32(0,js.time,true);
-    tmp.setUint32(4,js.pbrd,true);
-    
-    bin = array_cat(bin, buf);
-
-    return bin;
-}
-function total_to_bin(js) {
-    var tmp, length=0;
-    var buffer = new ArrayBuffer(js.len);
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.voltage,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.current,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.power,true);
-    length += 4;
-
-    tmp = new DataView(buffer, length);
-    tmp.setFloat32(0,js.freq,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.setFloat32(0,js.apparent,true);
-    length += 4;
-
-    return buffer;
-}
-function powert_to_bin(js) {
-    var tmp,bin2,length=0;
-    var bin = new ArrayBuffer(1);
-
-    tmp = new DataView(bin, length);
-    tmp.setUint8(0,js.type,true);
-    length += 4;
-
-    for(var i=0; i<3; i++) {
-        bin2 = total_to_bin(js.total[i]);
-        bin = array_cat(bin, bin2);
-    }
-
-    return bin;
-}
-function chall_to_bin(js) {
-    var tmp, length=0;
-    var bin = new ArrayBuffer(1);
-
-    tmp = new DataView(bin, length);
-    tmp.setUint8(0,js,true);
-    length += 1;
-
-    return bin;
-}
-function alarmd_to_bin(js) {
-    var tmp, length=0;
-    var bin,buffer = new ArrayBuffer(1);
-
-    tmp = new DataView(buffer, 0);
-    tmp.setUint8(0,js.ch,true);
-    
-    var alarm = alarm_to_bin(js.alarm);
-    bin = array_cat(buffer, alarm);
-
-    buffer = new ArrayBuffer(4);
-    tmp = new DataView(buffer, 0);
-    tmp.setUint32(0,js.time,true);
-
-    return array_cat(bin, buffer);
-}
-//////////////////////////////////////////////////////////////
-
-var XXX ={};
-XXX.hdr = function() {
-    this.j2b = function (js) {
-        var tmp;
-        var hdr = new hdr_to_bin(js);
-
-        switch(js.type){
-            case PKT_TYPE.PKT_TYPE_POWER_CH:
-                tmp = BIN.powerc.j2b(js.powerc);
-                break;
-
-            case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
-                tmp = BIN.powert.j2b(js.powert);
-                break;
-                
-           case PKT_TYPE.PKT_TYPE_CH_ALL:
-                tmp = BIN.chall.j2b(js);
-                break;
-               
-           case PKT_TYPE.PKT_TYPE_ALARM:
-                tmp = BIN.alarm.j2b(js);
-                break;
-                
-           default:
-           return tmp;
-        }
-        return array_cat(hdr,tmp);
-    };
-
-    this.b2j = function (bin) {
-        var tmp;
-        var hdr = new bin_to_hdr(bin);
-        
-        if(hdr.nack == 1){
-            //tmp = myBinary.ack.bin2js(bin,this.hdr.len,true);
-            //myLog('log',tmp);
-            //var data = tmp.data;
-        }
-        
-        var data = bin.slice(hdr.len);
-        switch(hdr.type) {
-            case PKT_TYPE.PKT_TYPE_POWER_CH:
-                hdr.powerc = BIN.powerc.b2j(data);
-                break;
-
-            case PKT_TYPE.PKT_TYPE_POWER_TOTAL:
-                hdr.powert = BIN.powert.b2j(data);
-                break;
-            
-            case PKT_TYPE.PKT_TYPE_CH_ALL:
-                hdr.chall = BIN.chall.b2j(data);
-                break;
-               
-           case PKT_TYPE.PKT_TYPE_ALARM:
-                hdr.alarm = BIN.alarm.b2j(data);
-                break;
-            
-            default :
-                console.log("wrong hdr type: "+hdr.type);
-        }
-        return hdr;
-    }
-};
-XXX.paras=function() {
-    this.j2b = function (js) {
-        
-    }
-    
-    this.b2j = function (bin) {
-        
-    }
-};
-XXX.powerc=function() {
-    this.j2b = function (js) {
-        return new powerc_to_bin(js);
-    }
-
-    this.b2j = function (bin) {
-        return new bin_to_powerc(bin);
-    }
-};
-XXX.powert=function() {
-    this.j2b = function (js) {
-        return new powert_to_bin(js);
-    }
-
-    this.b2j = function (bin) {
-        return new bin_to_powert(bin);
-    }
-};
-XXX.chall=function() {
-    this.j2b = function (js) {
-        return new chall_to_bin(js);
-    }
-
-    this.b2j = function (bin) {
-        return new bin_to_chall(bin);
-    }
-};
-XXX.alarmd=function() {
-    this.j2b = function (js) {
-        return new alarmd_to_bin(js);
-    }
-
-    this.b2j = function (bin) {
-        return new bin_to_alarmd(bin);
-    }
-};
-
-
-var BIN=new function() {
-    this.hdr = new XXX.hdr();
-    this.paras = new XXX.paras();
-    this.powerc = new XXX.powerc();
-    this.powert = new XXX.powert();
-    this.chall = new XXX.chall();
-    this.alarmd = new XXX.alarmd();
-}();
-
-
-//////////////////////////////////////////
-function LOG(){
-    var data = [];
-    for(var i= 1,len=arguments.length;i<len;i++){
-        data.push(arguments[i])
-    }
-    console.log(data);
-
-}
-
-var PKT_TYPE=function(){
-    var len = 0;
-    return {
-        PKT_TYPE_ACK:len++,             
-        PKT_TYPE_PARAS:len++,             
-        PKT_TYPE_POWER_CH:len++,          //power_ch_t
-        PKT_TYPE_POWER_TOTAL:len++,       //power_total_t
-        PKT_TYPE_SENSOR:len++,
-        PKT_TYPE_BREAKER:len++,
-        PKT_TYPE_STAT:len++,
-        PKT_TYPE_MESG:len++,
-        PKT_TYPE_FILE:len++,
-    }
-}();
-
-
-function WS(url,fn) {
-    this.url = url;
-    this.name = 'myWebs';
-    this.open = _open;
-    this.reopen = _reopen;
-    this.close = _close;
-    this.send = _send;
-    this.state = _state;
-    this.setcb = _setcb;
-    this.closeCount = 0;
-    this.maxConnect = 100;
-    var his = this;
-    this.open();
-    function _open() {
-        console.log("____ url: \n", his.url);
-        his.ws = new WebSocket(his.url);
-        his.ws.binaryType = 'arraybuffer';
-        his.ws.onopen = _onopen;
-        his.ws.onclose = _onclose;
-        his.ws.onmessage = _onmsg;
-        his.ws.onerror = _onerror;
-    }
-
-    function _reopen() {
-        _close();
-        _open(his.url);
-    }
-
-    function _close() {
-        his.ws.close();
-    }
-
-    function _send(msg) {
-        if (his.ws.readyState != WebSocket.OPEN)
-            return;
-        his.ws.send(msg);
-    }
-
-    function _state() {
-        return his.ws.readyState;
-    }
-
-    function _setcb(tp, f) {
-        switch (tp) {
-            case "open":
-                his.ws.onopen = f;
-                break;
-
-            case "close":
-                his.ws.onclose = f;
-                break;
-
-            case "msg":
-                his.ws.onmessage = f;
-                break;
-
-            case "err":
-                his.ws.onerror = f;
-                break;
-        }
-    }
-
-    function _onopen(evt) {
-        his.closeCount = 0;
-        console.log("___ ws.onopen");
-    }
-
-    function _onclose(evt) {
-        LOG("ws.onclose");
-        setTimeout(_reopen, 3000);
-        his.closeCount += 1;
-    }
-
-    function _onmsg(evt) {
-        console.log("___ ws.onmsg");
-        if (evt.data instanceof ArrayBuffer) {
-            fn(evt.data);
-        }
-    }
-
-    function _onerror(evt) {
-        console.log("___ ws.onerror");
-        //write_scr('<span style="color: red;">ERROR:</span> '+ evt.data);
-    }
-
-}
-
-

+ 11 - 14
f407/applications/datadef.h

@@ -43,12 +43,6 @@ enum {
     PDU_AC_I3O3_H,
 };
 
-enum {
-    BOARD_TYPE_DC=0,
-    BOARD_TYPE_AC,
-    BOARD_TYPE_AC3,
-};
-
 enum {
     ALARM_TYPE_POWER=0,
     ALARM_TYPE_SENSOR,
@@ -217,6 +211,10 @@ typedef struct {
     uint32_t            time;
     char                ver[12];
 }board_info_t;
+typedef struct {
+    uint8_t type;
+    uint8_t chs;
+}board_key_t;
 
 typedef struct {
     modbus_data_t       cas;
@@ -277,7 +275,7 @@ typedef struct {
 }alarm_data_t;
 
 typedef struct {
-    uint8_t             type;
+    int8_t              type;
     uint8_t             addr;
     uint8_t             ch;                      //该通道在全部板上的所排序号,程序始于0,用户始于1
     uint8_t             sch;                     //该通道在其所在的板上的序号,程序始于0,用户始于1
@@ -297,9 +295,8 @@ typedef struct {
 
 typedef struct {
     int (*get_power)(power_ch_t *pch);
-    int (*get_alarm)(power_ch_t *pch, alarm_t *alarm);
-    int (*open_ch)(power_ch_t *pch);
-    int (*close_ch)(power_ch_t *pch);
+    int (*get_alarm)(power_ch_t *pch);
+    int (*set_ch)(power_ch_t *pch);
     int (*set_open_delay)(power_ch_t *pch);
     int (*set_close_delay)(power_ch_t *pch);
     int (*set_kb_value)(power_ch_t *pch);
@@ -307,12 +304,12 @@ typedef struct {
     int (*reset_consump)(power_ch_t *pch);
 
     int (*detect)(uint8_t addr);
-    int (*get_info)(uint8_t addr);
-    int (*open_all)(uint8_t addr);                                
-    int (*close_all)(uint8_t addr);
+    int (*get_info)(uint8_t addr, board_info_t *info);
+    //int (*get_board)(board_data_t *pbrd);
+    int (*set_all)(uint8_t addr, uint8_t on);
 }board_fn_t;
 
-typedef struct {
+typedef struct board_data {
     board_fn_t          *fn;
     uint8_t             type;
     uint8_t             addr;

+ 1 - 9
f407/applications/fs.c

@@ -4,17 +4,9 @@
 #include <rtthread.h>
 #include <dfs_posix.h>
 #include "fs.h"
+#include "log.h"
 
 
-#if 0
-    #define LOGE  LOG_E
-    #define LOGW  LOG_W
-    #define LOGD  LOG_D
-#else
-    #define LOGD  rt_kprintf
-    #define LOGW  rt_kprintf
-    #define LOGE  rt_kprintf
-#endif
 
 #define MALLOC   malloc
 #define FREE     free

+ 1 - 4
f407/applications/list.c

@@ -1,14 +1,11 @@
 #include "list.h"
-#include <rtdbg.h>
+#include "log.h"
 #include <pthread.h>
 
 
 #define MALLOC  malloc
 #define FREE    free
 
-#define LOGD    LOG_D
-#define LOGE    LOG_E
-#define LOGW    LOG_W
 
 
 #define MIN(a,b)  (((a)>(b))?(b):(a))

+ 1 - 8
f407/applications/lock.c

@@ -1,17 +1,10 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <pthread.h>
-#include <rtdbg.h>
+#include "log.h"
 #include "lock.h"
 
 
-#if 0
-    #define LOGD  LOG_D
-    #define LOGE  LOG_E
-#else
-    #define LOGD  rt_kprintf
-    #define LOGE  rt_kprintf
-#endif
 
 #define MALLOC    malloc
 #define FREE      free

+ 19 - 7
f407/applications/log.h

@@ -2,14 +2,26 @@
 #define __LOG_Hx__
 
 #ifndef _WIN32
-#include <rtdbg.h>
-#endif
-
-#define LOGD   LOG_D
-#define LOGW   LOG_W
-#define LOGI   LOG_I
-#define LOGE   LOG_E
+    #include <rtdbg.h>
 
+#if 0
+    #define LOGD   LOG_D
+    #define LOGW   LOG_W
+    #define LOGI   LOG_I
+    #define LOGE   LOG_E
+#else
+    #define LOGD   printf
+    #define LOGW   printf
+    #define LOGI   printf
+    #define LOGE   printf
+#endif
+    
+#else
+    #define LOGD   printf
+    #define LOGW   printf
+    #define LOGI   printf
+    #define LOGE   printf
+#endif
                                 
 #endif
 

+ 2 - 2
f407/applications/main.c

@@ -120,11 +120,11 @@ static int user_init(void)
 {
     int r,n=0;
     
-    ui_init();
+    //ui_init();
     //rt_hw_lcd_init();
     //net_init("0.0.0.0", SERVER_PORT);
     
-    //power_init();
+    power_init();
     while(n<10) {
         r = sd_mount();
         if(r<=0) {

+ 24 - 5
f407/applications/mb.c

@@ -91,6 +91,7 @@ void* mb_init(mb_para_t *para)
 
 int mb_setup(void *h, mb_para_t *para)
 {
+    int r;
     mb_backend_param_t param={0};
     mb_handle_t *mh=(mb_handle_t*)h;
     
@@ -98,7 +99,7 @@ int mb_setup(void *h, mb_para_t *para)
         return -1;
     }
     
-    mh->type = (para->type==MB_TYPE_RTU)?MB_BACKEND_TYPE_RTU:MB_BACKEND_TYPE_TCP;
+    mh->type = para->type;
     mh->mode = para->mode;
     if(mh->type==MB_TYPE_RTU) {
         if(mh->hinst) {
@@ -110,6 +111,10 @@ int mb_setup(void *h, mb_para_t *para)
         if(!mh->hinst) {
             return -1;
         }
+        r = mb_connect(mh->hinst);
+        if(r) {
+            LOGE("___ mb_connect failed\n");
+        }
     }
     else if(mh->type==MB_TYPE_TCP) {
         
@@ -178,8 +183,15 @@ int mb_read(void *h, uint8_t addr, uint16_t reg, uint16_t *data, int cnt, int ti
         }
     }
 #else
-    mb_set_tmo(mh->hinst, timeout, 15);
-    r = mb_read_regs(mh->hinst, addr, cnt, data);
+    mb_set_tmo(mh->hinst, timeout, 50);
+    mb_set_slave(mh->hinst, addr);
+    sz = mb_read_regs(mh->hinst, reg, cnt, data);
+    if(sz==cnt) {
+        r = 0;
+    }
+    else {
+        r = -1;
+    }
 #endif
     
     return r;
@@ -188,7 +200,7 @@ int mb_read(void *h, uint8_t addr, uint16_t reg, uint16_t *data, int cnt, int ti
 
 int mb_write(void *h, uint8_t addr, uint16_t reg, uint16_t *data, int cnt)
 {
-    int r;
+    int r,sz;
     mb_handle_t *mh=(mb_handle_t*)h;
     if(!mh) {
         return -1;
@@ -197,7 +209,14 @@ int mb_write(void *h, uint8_t addr, uint16_t reg, uint16_t *data, int cnt)
 #if 0
     r = list_append(mh->tx, 0, data, len);
 #else
-    r = mb_read_regs(mh->hinst, addr, cnt, data);
+    mb_set_slave(mh->hinst, addr);
+    r = mb_write_regs(mh->hinst, reg, cnt, data);
+    if(sz==cnt) {
+        r = 0;
+    }
+    else {
+        r = -1;
+    }
 #endif
     
     return r;

+ 1 - 10
f407/applications/paras.c

@@ -10,18 +10,9 @@
 #include "dictionary.h"
 #include "iniparser.h"
 #include "db.h"
-#include <rtdbg.h>
+#include "log.h"
 
 
-#if 1
-    #define LOGD            LOG_D
-    #define LOGE            LOG_E
-    #define LOGW            LOG_W
-#else
-    #define LOGD            printf
-    #define LOGE            printf
-    #define LOGW            printf
-#endif
 
 #define MALLOC   malloc
 #define FREE     free

+ 232 - 288
f407/applications/power.c

@@ -19,7 +19,7 @@ typedef struct {
     
     lock_t          lck;
 }power_handle_t;
-static power_handle_t pwrHandle={0};
+power_handle_t pwrHandle={0};
 
 static void memswap(uint8_t *buf, int len)
 {
@@ -33,26 +33,26 @@ static void memswap(uint8_t *buf, int len)
 }
 static int read_reg(power_handle_t *h, uint8_t addr, uint16_t reg, uint16_t *data, int cnt)
 {
-    return mb_read(h->mb, addr, reg, data, cnt, 100);
+    return mb_read(h->mb, addr, reg, data, cnt, 800);
 }
 static int write_reg(power_handle_t *h, uint8_t addr, uint16_t reg, uint16_t *data, int cnt)
 {
     return mb_write(h->mb, addr, reg, data, cnt);
 }
 ////////////////////////////////////////////////////////////////////
-static int get_info(power_handle_t *h, int addr, ch_info_t *info)
+static int get_info(power_handle_t *h, uint8_t addr, board_key_t *info)
 {
     int i,r=-1;
     uint16_t tmp=0;
     
-    r = read_reg(h->mb, addr, POWER_AC_GET_INFO, &tmp, 1);
+    r = read_reg(h, addr, POWER_DC_INFO, &tmp, 1);
     if(r==0) {
         info->type = (tmp>>8)&0xFF;
         info->chs = tmp&0xFF;
         return 0;
     }
-
-    r = read_reg(h->mb, addr, POWER_DC_INFO, &tmp, 1);
+    
+    r = read_reg(h, addr, POWER_AC_GET_INFO, &tmp, 1);
     if(r==0) {
         info->type = (tmp>>8)&0xFF;
         info->chs = tmp&0xFF;
@@ -73,78 +73,69 @@ static int get_ch(power_handle_t *h, int ch, power_ch_t *pch)
 ////////////////////////////////////////////////////////////////
 
 
-static int set_open_delay(power_handle_t *h, int type, int addr, uint16_t delay)
-{
-    switch(type) {
-        case AC_SINGLE_S_TYPE:
-        case AC_SINGLE_B_TYPE:
-        {
-            
-        }
-        break;
 
-        case DCPDU_TYPE:
-        {
-            
-        }
-        break;
-        
-        case TREE_AC_TYPE:
-        {
-            
-        }
-        break;
-        
-        case AC_MULTI_S_TYPE:
-        case AC_MULTI_B_TYPE:
-        case DC_OUT_TYPE:
-        case DC_IN_TYPE:
-        default:
-        return -1;
-    }
-}
-static int set_close_delay(power_handle_t *h, int type, int addr, uint16_t delay)
+static int set_kb_value(power_handle_t *h, int type, int addr, kb_val_t *kv)
 {
     switch(type) {
         case AC_SINGLE_S_TYPE:
-        case AC_SINGLE_B_TYPE:
-        {
-            
-        }
-        break;
-
-        case DCPDU_TYPE:
         {
-            
-        }
-        break;
-        case TREE_AC_TYPE:
-        {
-            
+            /*
+            unsigned int offset = 0;
+            unsigned int rval = 0 ;
+            unsigned short data_temp[8] = {0};
+            if(chn>=8)
+                return -1;  
+            offset = _SWITCH_AC_SINGLE_S_KB_VAL+chn*8;
+            data_temp[0] = (unsigned short)_kb_val->voltage_k;
+            data_temp[1] = (unsigned short)((_kb_val->voltage_k-data_temp[0])*1000);
+            data_temp[2] = (unsigned short)_kb_val->voltage_b;
+            data_temp[3] = (unsigned short)((_kb_val->voltage_b-data_temp[2])*1000);
+            data_temp[4] = (unsigned short)_kb_val->current_k;
+            data_temp[5] = (unsigned short)((_kb_val->current_k-data_temp[4])*1000);
+            data_temp[6] = (unsigned short)_kb_val->current_b;
+            data_temp[7] = (unsigned short)((_kb_val->current_b-data_temp[6])*1000);
+            g_modbus_write_x_reg(manger,saddr,offset,8,data_temp);
+            */
         }
         break;
         
-        case AC_MULTI_S_TYPE:
-        case AC_MULTI_B_TYPE:
-        case DC_OUT_TYPE:
-        case DC_IN_TYPE:
-        default:
-        return -1;
-    }
-}
-static int set_kb_value(power_handle_t *h, int type, int addr, kb_val_t *kv)
-{
-    switch(type) {
-        case AC_SINGLE_S_TYPE:
         case AC_SINGLE_B_TYPE:
         {
-            
+            /*
+            unsigned int offset = 0;
+            unsigned int rval = 0 ;
+            unsigned short data_temp[8] = {0};
+            if(pch->info.>=4)
+                return -1;  
+            offset = _SWITCH_AC_SINGLE_B_KB_VAL+chn*8;
+            data_temp[0] = (unsigned short)_kb_val->voltage_k;
+            data_temp[1] = (unsigned short)((_kb_val->voltage_k-data_temp[0])*1000);
+            data_temp[2] = (unsigned short)_kb_val->voltage_b;
+            data_temp[3] = (unsigned short)((_kb_val->voltage_b-data_temp[2])*1000);
+            data_temp[4] = (unsigned short)_kb_val->current_k;
+            data_temp[5] = (unsigned short)((_kb_val->current_k-data_temp[4])*1000);
+            data_temp[6] = (unsigned short)_kb_val->current_b;
+            data_temp[7] = (unsigned short)((_kb_val->current_b-data_temp[6])*1000);
+            g_modbus_write_x_reg(manger,saddr,offset,8,data_temp);
+            */
         }
         break;
 
         case DCPDU_TYPE:
-        {
-            
+        {/*
+            unsigned short offset = 0;
+            unsigned short data_temp[8] = {0};
+            offset = _SWITCH_DC_KB_VAL;
+            data_temp[0] = (unsigned short)_kb_val->voltage_k;
+            data_temp[1] = (unsigned short)((_kb_val->voltage_k-data_temp[0])*1000);
+            data_temp[2] = (unsigned short)_kb_val->voltage_b;
+            data_temp[3] = (unsigned short)((_kb_val->voltage_b-data_temp[2])*1000);
+            data_temp[4] = (unsigned short)_kb_val->current_k;
+            data_temp[5] = (unsigned short)((_kb_val->current_k-data_temp[4])*1000);
+            data_temp[6] = (unsigned short)_kb_val->current_b;
+            data_temp[7] = (unsigned short)((_kb_val->current_b-data_temp[6])*1000);
+            g_modbus_write_x_reg(manger,saddr,offset,8, data_temp);
+            */
         }
         break;
         
@@ -193,137 +184,6 @@ static int reset_consump(power_handle_t *h, int type, int addr)
         return -1;
     }
 }
-static int get_switch(power_handle_t *h, power_ch_t *pch)
-{
-    int r=-1;
-    
-    switch(pch->info.type) {
-        case AC_SINGLE_S_TYPE:
-        {
-            
-        }
-        break;
-        
-        case DCPDU_TYPE:
-        {
-            
-        }
-        break;
-        
-        case TREE_AC_TYPE:
-        {
-            
-        }
-        break;
-        
-        case AC_MULTI_S_TYPE:
-        case AC_MULTI_B_TYPE:
-        case DC_OUT_TYPE:
-        case DC_IN_TYPE:
-        default:
-        return -1;
-    }
-    
-    return r;
-}
-static int set_switch(power_handle_t *h, power_ch_t *pch)
-{
-    int r=-1;
-    uint16_t offset,tmp[2]={0},st=pch->power[0].status;
-    
-    if (pch->thr.v_upper.en == 1)
-        st |= ENABLE_AC3_V_UP;
-    if (pch->thr.v_lower.en == 1)
-        st |= ENABLE_AC3_V_DOWN;
-    if (pch->thr.c_upper.en == 1)
-        st |= ENABLE_AC3_C_UP;
-    if (pch->thr.p_upper.en == 1)
-        st |= ENABLE_AC3_P_UP;
-    if (pch->thr.w_upper.en == 1)
-        st |= ENABLE_AC3_W_UP;
-            
-    switch(pch->info.type) {
-        case AC_SINGLE_S_TYPE:
-        case AC_SINGLE_B_TYPE:
-        {
-            offset = POWER_AC_CH_STAT_L+pch->info.ch;
-            r = write_reg(h, pch->info.addr, offset, &st, 1);
-        }
-        break;
-        
-        case AC_MULTI_S_TYPE:
-        case AC_MULTI_B_TYPE:
-        case DC_OUT_TYPE:
-        case DC_IN_TYPE:
-        {
-        }
-        break;
-        
-        case DCPDU_TYPE:
-        {
-            uint16_t mask;
-            offset = POWER_DC_STAT_INFO+pch->info.ch;
-            
-            mask = ~(1 << pch->info.ch);
-            tmp[0] &= mask;
-            tmp[0] |= (st << pch->info.ch);
-            write_reg(h, pch->info.addr, offset, tmp, 2);
-        }
-        break;
-        
-        case TREE_AC_TYPE:
-        {
-            uint16_t reg;
-            uint8_t pwr_type=paras_get()->prod.pwr_type;
-            if(pwr_type==PDU_AC_I3O3 || pwr_type==PDU_AC_I3O1) {
-                reg = POWER_AC3_OUT_ENABLE;
-            }
-            else {
-                reg = POWER_AC3_CH_OUT_ENABLE;
-            }
-            
-            tmp[0] = st;
-            offset = reg + +pch->info.ch;
-            r = write_reg(h, pch->info.addr, offset, tmp, 2);
-        }
-        break;
-        
-        default:
-        return -1;
-    }
-    
-    return r;
-}
-static int set_threshold(power_handle_t *h, power_ch_t *pch)
-{
-    int r=-1;
-    
-    switch(pch->info.type) {
-        case AC_SINGLE_S_TYPE:
-        case AC_SINGLE_B_TYPE:
-        {
-            
-        }
-        break;
-
-        case DCPDU_TYPE:
-        {
-            
-        }
-        break;
-        
-        case TREE_AC_TYPE:
-        {
-            
-        }
-        break;
-        
-        default:
-        return -1;
-    }
-    
-    return r;
-}
 
 
 //////////////////////////////////////////////////////////////////
@@ -550,14 +410,20 @@ static int get_board(power_handle_t *h, uint8_t addr, board_data_t *pbrd)
 
 static void *power_thread(void *arg)
 {
+    int r;
+    uint16_t tmp[2]={0};
+    
     thread_handle_t *th=(thread_handle_t*)arg;
     power_handle_t *h=(power_handle_t*)th->arg;;
     
+    power_scan(BRD_MAX);
     while(th->quit==0) {
         
+        //r = read_reg(h, 1, POWER_DC_INFO, tmp, 2);
+        //LOGD("____ read reg %d, %d\n", POWER_DC_INFO, r);
         //power_get();
         //
-        
+        sleep(1);
     }
     pthread_exit(NULL);
 }
@@ -622,16 +488,16 @@ int power_get_ch(int ch, power_ch_t *pch)
 }
 
 
-int power_get_board(int addr, board_data_t *pb)
+int power_get_board(board_data_t *pb)
 {
     power_handle_t *h=&pwrHandle;
     
     lock_d_hold(h->lck);
-    if(!pb || !h->all.pch || !h->all.cnt || !h->all.pbrd[addr]) {
+    if(!pb || !h->all.pch || !h->all.cnt || !h->all.pbrd[pb->addr]) {
         lock_d_release(h->lck);
         return -1;
     }
-    *pb = *h->all.pbrd[addr];
+    *pb = *h->all.pbrd[pb->addr];
     lock_d_release(h->lck);
     
     return 0;
@@ -663,6 +529,7 @@ int power_scan(int max_addr)
     lock_d_hold(h->lck);
     for(i=1; i<=max_addr; i++) {
         r = get_info(h, i, &info);
+        LOGD("___ power_scan, addr: %d, result: %d\n", i, r);
         if(r==0) {
             h->all.pbrd[i] = (board_data_t*)calloc(1, sizeof(board_data_t));
             if(h->all.pbrd[i]) {
@@ -824,102 +691,110 @@ int power_reset(int addr)
         return -1;
     }
     
-    
     return 0;
 }
 
 
-int power_set_sw(int ch, int on)
+int power_set_ch(power_ch_t *pch)
 {
     int r;
     power_ch_t pc;
-    uint16_t offset=0,data_temp[2];
     power_handle_t *h=&pwrHandle;
+    uint16_t offset,tmp[2]={0},st=pch->power[0].status;
     
-    r = get_ch(h, ch, &pc);
-    if(r) {
-        return -1;
-    }
+    if (pch->thr.v_upper.en == 1)
+        st |= ENABLE_AC3_V_UP;
+    if (pch->thr.v_lower.en == 1)
+        st |= ENABLE_AC3_V_DOWN;
+    if (pch->thr.c_upper.en == 1)
+        st |= ENABLE_AC3_C_UP;
+    if (pch->thr.p_upper.en == 1)
+        st |= ENABLE_AC3_P_UP;
+    if (pch->thr.w_upper.en == 1)
+        st |= ENABLE_AC3_W_UP;
     
-    switch(pc.info.type) {
+    switch(pch->info.type) {
         case AC_SINGLE_S_TYPE:
         case AC_SINGLE_B_TYPE:
         {
-            offset = POWER_AC_CH_STAT_L + ch;
-            data_temp[0] = on; data_temp[1] = 0;
+            offset = POWER_AC_CH_STAT_L + pch->info.ch;
+            tmp[0] = pch->power[0].status; tmp[1] = 0;
         }
         break;
         
         case DCPDU_TYPE:
         {
-            offset = POWER_DC_SET_STAT + ch;
-            data_temp[0] = on; data_temp[1] = 0;
+            uint16_t mask;
+            offset = POWER_DC_STAT_INFO+pch->info.ch;
+            
+            mask = ~(1 << pch->info.ch);
+            tmp[0] &= mask;
+            tmp[0] |= (st << pch->info.ch);
         }
         break;
         
         case TREE_AC_TYPE:
         {
-            if(ch<0) {//##################################
-                //offset = POWER_AC3_OUT_INFO + ch;
-                //data_temp[0] = on; data_temp[1] = 0;
+            uint16_t reg;
+            uint8_t pwr_type=paras_get()->prod.pwr_type;
+            if(pwr_type==PDU_AC_I3O3 || pwr_type==PDU_AC_I3O1) {
+                reg = POWER_AC3_OUT_ENABLE;
+            }
+            else {
+                reg = POWER_AC3_CH_OUT_ENABLE;
             }
             
+            tmp[0] = st;
+            offset = reg + +pch->info.ch;
         }
         break;
         
         default:
         return -1;
     }
-    data_temp[0] = on; data_temp[1] = 0;
-    r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+    r = write_reg(h, pc.info.addr, offset, tmp, 2);
     
     return r;
 }
 
-int power_set_alarm(int ch, alarm_t *alarm)
+int power_set_alarm(power_ch_t *pch)
 {
     int r=-1;
-    power_ch_t pc;
     uint16_t offset = 0;
     uint16_t nStatus = 0;
     power_handle_t *h=&pwrHandle;
     
-    r = get_ch(h, ch, &pc);
-    if(r) {
-        return -1;
-    }
-    
-    switch(pc.info.type) {
+    switch(pch->info.type) {
         case AC_SINGLE_S_TYPE:
         case AC_SINGLE_B_TYPE:
         {
-            if (ch == -1) {
+            if (pch->info.ch<0) {
                 offset = POWER_AC_ALARM_CTRL_TOTAL;
             }
             else {
-                offset = POWER_AC_ALARM_CTRL + ch;
+                offset = POWER_AC_ALARM_CTRL + pch->info.ch;
             }
         }
         break;
         
         case DCPDU_TYPE:
         {
-            if (ch == -1) {
+            if (pch->info.ch<0) {
                 offset = POWER_DC_ALARM_CTRL_TOTAL;
             }
             else {
-                offset = POWER_DC_ALARM_CTRL + ch;
+                offset = POWER_DC_ALARM_CTRL + pch->info.ch;
             }
         }
         break;
         
         case TREE_AC_TYPE:
         {
-            if (ch == -1) {
+            if (pch->info.ch<0) {
                 offset = POWER_AC3_ALARM_CTRL_TOTAL;
             }
             else {
-                offset = POWER_AC3_ALARM_CTRL + ch;
+                offset = POWER_AC3_ALARM_CTRL + pch->info.ch;
             }
         }
         break;
@@ -928,30 +803,24 @@ int power_set_alarm(int ch, alarm_t *alarm)
         return -1;
     }
     
-    if(pc.thr.v_upper.act==1) nStatus |= BIT(1);
-    if(pc.thr.v_lower.act==1) nStatus |= BIT(2);
-    if(pc.thr.c_upper.act==1) nStatus |= BIT(0);
-    if(pc.thr.p_upper.act==1) nStatus |= BIT(3);
-    if(pc.thr.w_upper.act==1) nStatus |= BIT(4);
-    r = write_reg(h, pc.info.addr, offset, &nStatus, 1);
+    if(pch->thr.v_upper.act==1) nStatus |= BIT(1);
+    if(pch->thr.v_lower.act==1) nStatus |= BIT(2);
+    if(pch->thr.c_upper.act==1) nStatus |= BIT(0);
+    if(pch->thr.p_upper.act==1) nStatus |= BIT(3);
+    if(pch->thr.w_upper.act==1) nStatus |= BIT(4);
+    r = write_reg(h, pch->info.addr, offset, &nStatus, 1);
     
     return r;
 }
 
 
-int power_set_thr(int ch, thr_t *thr)
+int power_set_threshold(power_ch_t *pch)
 {
     int r=-1;
-    power_ch_t pc;
     uint16_t offset;
     power_handle_t *h=&pwrHandle;
     
-    r = get_ch(h, ch, &pc);
-    if(r) {
-        return -1;
-    }
-    
-    switch(pc.info.type) {
+    switch(pch->info.type) {
         case AC_SINGLE_S_TYPE:
         case AC_SINGLE_B_TYPE:
         {
@@ -960,15 +829,15 @@ int power_set_thr(int ch, thr_t *thr)
             uint16_t data_buf[16] = {0};
 
             //电压上限
-            data_temp =  (thr->v_upper.val*1000);
+            data_temp =  (pch->thr.v_upper.val*1000);
             data_buf[0] = data_temp;
             data_buf[1] = data_temp>>16;
             //电压下限
-            data_temp =  (thr->v_upper.val*1000);
+            data_temp =  (pch->thr.v_upper.val*1000);
             data_buf[2] = data_temp;
             data_buf[3] = data_temp>>16;
             //电流上限
-            data_temp =  (thr->v_upper.val*1000);
+            data_temp =  (pch->thr.v_upper.val*1000);
             data_buf[4] = data_temp;
             data_buf[5] = data_temp>>16;
             //电流下限
@@ -977,7 +846,7 @@ int power_set_thr(int ch, thr_t *thr)
             data_buf[7] = data_temp>>16;
 
             //功率上限
-            data_temp =  (thr->v_upper.val*1000);
+            data_temp =  (pch->thr.v_upper.val*1000);
             data_buf[8] = data_temp;
             data_buf[9] = data_temp>>16;
             //功率下限
@@ -986,7 +855,7 @@ int power_set_thr(int ch, thr_t *thr)
             data_buf[11] = data_temp>>16;
 
             //电能上限
-            data_temp =  (thr->v_upper.val*1000);
+            data_temp =  (pch->thr.v_upper.val*1000);
             data_buf[12] = data_temp;
             data_buf[13] = data_temp>>16;
             //电能下限
@@ -994,14 +863,14 @@ int power_set_thr(int ch, thr_t *thr)
             data_buf[14] = data_temp;
             data_buf[15] = data_temp>>16;
 
-            if(ch<0) {
+            if(pch->info.ch<0) {
                 offset = POWER_AC_TOTAL_THRESHOLD;
             }
             else  {
-                offset = POWER_AC_THRESHOLD_L+ch*16;
+                offset = POWER_AC_THRESHOLD_L+pch->info.ch*16;
             }
 
-            r = write_reg(h, pc.info.addr, offset, data_buf, 16);
+            r = write_reg(h, pch->info.addr, offset, data_buf, 16);
             //power_set_alarm();
         }
         break;
@@ -1011,35 +880,35 @@ int power_set_thr(int ch, thr_t *thr)
             uint16_t data_temp[4];
             uint32_t value;
             
-            offset = (ch<0)?POWER_DC_THRESHOLD_TOTAL_VOL_MAX:POWER_DC_THRESHOLD_VOL_MAX;
-            value = thr->v_upper.val * 1000;
+            offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_VOL_MAX:POWER_DC_THRESHOLD_VOL_MAX;
+            value = pch->thr.v_upper.val * 1000;
             data_temp[0] = value & 0XFFFF;
             data_temp[1] = (value >> 16) & 0xFFFF;
-            r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+            r = write_reg(h, pch->info.addr, offset, data_temp, 2);
             
-            offset = (ch<0)?POWER_DC_THRESHOLD_TOTAL_VOL_MIN:POWER_DC_THRESHOLD_VOL_MIN;
-            value = thr->v_lower.val * 1000;
+            offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_VOL_MIN:POWER_DC_THRESHOLD_VOL_MIN;
+            value = pch->thr.v_lower.val * 1000;
             data_temp[0] = value & 0XFFFF;
             data_temp[1] = (value >> 16) & 0xFFFF;
-            r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+            r = write_reg(h, pch->info.addr, offset, data_temp, 2);
             
-            offset = (ch<0)?POWER_DC_THRESHOLD_TOTAL_CUR_MAX:POWER_DC_THRESHOLD_CUR_MAX;
-            value = thr->c_upper.val * 1000;
+            offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_CUR_MAX:POWER_DC_THRESHOLD_CUR_MAX;
+            value = pch->thr.c_upper.val * 1000;
             data_temp[0] = value & 0XFFFF;
             data_temp[1] = (value >> 16) & 0xFFFF;
-            r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+            r = write_reg(h, pch->info.addr, offset, data_temp, 2);
             
-            offset = (ch<0)?POWER_DC_THRESHOLD_TOTAL_PWR_MAX:POWER_DC_THRESHOLD_POWER_MAX;
-            value = thr->p_upper.val * 1000;
+            offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_PWR_MAX:POWER_DC_THRESHOLD_POWER_MAX;
+            value = pch->thr.p_upper.val * 1000;
             data_temp[0] = value & 0XFFFF;
             data_temp[1] = (value >> 16) & 0xFFFF;
-            r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+            r = write_reg(h, pch->info.addr, offset, data_temp, 2);
             
-            offset = (ch<0)?POWER_DC_THRESHOLD_TOTAL_PWRCON_MAX:POWER_DC_THRESHOLD_POWERCON_MAX;
-            value = thr->w_upper.val * 1000;
+            offset = (pch->info.ch<0)?POWER_DC_THRESHOLD_TOTAL_PWRCON_MAX:POWER_DC_THRESHOLD_POWERCON_MAX;
+            value = pch->thr.w_upper.val * 1000;
             data_temp[0] = value & 0XFFFF;
             data_temp[1] = (value >> 16) & 0xFFFF;
-            r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+            r = write_reg(h, pch->info.addr, offset, data_temp, 2);
             
             //power_set_alarm();
         }
@@ -1050,63 +919,63 @@ int power_set_thr(int ch, thr_t *thr)
             uint16_t data_temp[4];
             uint32_t value;
             
-            if(ch<0) {
+            if(pch->info.ch<0) {
                 offset = POWER_AC3_THRESHOLD_IN;
-                value = thr->v_upper.val * 1000;
+                value = pch->thr.v_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset, data_temp, 2);
                 
-                value = thr->v_upper.val * 1000;
+                value = pch->thr.v_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset+1, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset+1, data_temp, 2);
                 
-                value = thr->c_upper.val * 1000;
+                value = pch->thr.c_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset+2, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset+2, data_temp, 2);
                 
-                value = thr->p_upper.val * 1000;
+                value = pch->thr.p_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset+3, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset+3, data_temp, 2);
                 
-                value = thr->w_upper.val * 1000;
+                value = pch->thr.w_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset+4, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset+4, data_temp, 2);
             }
             else {
                 offset = POWER_AC3_THRESHOLD_VOL_MAX;
-                value = thr->v_upper.val * 1000;
+                value = pch->thr.v_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset, data_temp, 2);
                 
                 offset = POWER_AC3_THRESHOLD_VOL_MIN;
-                value = thr->v_lower.val * 1000;
+                value = pch->thr.v_lower.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset, data_temp, 2);
                 
                 offset = POWER_AC3_THRESHOLD_CUR_MAX;
-                value = thr->c_upper.val * 1000;
+                value = pch->thr.c_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset, data_temp, 2);
                 
                 offset = POWER_AC3_THRESHOLD_PWR_MAX;
-                value = thr->p_upper.val * 1000;
+                value = pch->thr.p_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset, data_temp, 2);
                 
                 offset = POWER_AC3_THRESHOLD_VOL_MAX;
-                value = thr->w_upper.val * 1000;
+                value = pch->thr.w_upper.val * 1000;
                 data_temp[0] = value & 0XFFFF;
                 data_temp[1] = (value >> 16) & 0xFFFF;
-                r = write_reg(h, pc.info.addr, offset, data_temp, 2);
+                r = write_reg(h, pch->info.addr, offset, data_temp, 2);
             }
         }
         break;
@@ -1116,7 +985,82 @@ int power_set_thr(int ch, thr_t *thr)
 }
 
 
+int power_set_start_delay(power_ch_t *pch)
+{
+    int r=-1;
+    uint16_t reg,offset;
+    power_handle_t *h=&pwrHandle;
+    
+    switch(pch->info.type) {
+        case AC_SINGLE_S_TYPE:
+        case AC_SINGLE_B_TYPE:
+        {
+            reg = POWER_AC_START_DELAY_TIME_L;
+        }
+        break;
 
+        case DCPDU_TYPE:
+        {
+            reg = POWER_DC_SET_START_DELAY;
+        }
+        break;
+        
+        case TREE_AC_TYPE:
+        {
+            reg = POWER_AC3_START_DELAY_TIME;
+        }
+        break;
+        
+        case AC_MULTI_S_TYPE:
+        case AC_MULTI_B_TYPE:
+        case DC_OUT_TYPE:
+        case DC_IN_TYPE:
+        default:
+        return -1;
+    }
+    offset = reg+pch->info.ch;
+    r = write_reg(h, pch->info.addr, offset, &pch->info.start_delay, 1);
+    
+    return r;
+}
+int power_set_stop_delay(power_ch_t *pch)
+{
+    int r=-1;
+    uint16_t reg,offset;
+    power_handle_t *h=&pwrHandle;
+    
+    switch(pch->info.type) {
+        case AC_SINGLE_S_TYPE:
+        case AC_SINGLE_B_TYPE:
+        {
+            reg = POWER_AC_STOP_DELAY_TIME_L;
+        }
+        break;
+
+        case DCPDU_TYPE:
+        {
+            reg = POWER_DC_SET_STOP_DELAY;
+        }
+        break;
+        
+        case TREE_AC_TYPE:
+        {
+            reg = POWER_AC3_STOP_DELAY_TIME;
+        }
+        break;
+        
+        case AC_MULTI_S_TYPE:
+        case AC_MULTI_B_TYPE:
+        case DC_OUT_TYPE:
+        case DC_IN_TYPE:
+        default:
+        return -1;
+    }
+    offset = reg+pch->info.ch;
+    r = write_reg(h, pch->info.addr, offset, &pch->info.start_delay, 1);
+    
+    return r;
+}
 
 
 

+ 8 - 3
f407/applications/power.h

@@ -140,8 +140,6 @@ enum {
 };
 
 
-
-//采集KB值
 typedef struct {
     float   voltage_k;//电压K
     float   voltage_b;//电压B
@@ -157,7 +155,14 @@ int power_clear(void);
 
 int power_scan(int max_addr);
 int power_get_ch(int ch, power_ch_t *pch);
-int power_get_board(int addr, board_data_t *pb);
+int power_get_board(board_data_t *pb);
+
+int power_set_ch(power_ch_t *pch);
+int power_set_alarm(power_ch_t *pch);
+int power_set_threshold(power_ch_t *pch);
+int power_set_start_delay(power_ch_t *pch);
+int power_set_close_delay(power_ch_t *pch);
+
 
 board_all_t * get_control_board();
 #endif

+ 1 - 1
f407/applications/rtconfig.h

@@ -10,7 +10,7 @@
 #define SOC_SERIES_STM32F4
 
 #define DBG_ENABLE
-//#define DBG_LEVEL DBG_INFO
+//#define DBG_LEVEL DBG_LOG
 
 // RT-Thread Kernel
 #define RT_NAME_MAX 8

+ 1 - 10
f407/applications/sys.c

@@ -4,22 +4,13 @@
 #include <unistd.h>
 #include <string.h>
 #include <limits.h>
-#include "rtdbg.h"
+#include "log.h"
 #include "sys.h"
 #include "paras.h"
 #include "cfg.h"
 #include "fs.h"
 #include "thread.h"
 
-#if 1
-    #define LOGE  LOG_E
-    #define LOGW  LOG_W
-    #define LOGD  LOG_D
-#else
-    #define LOGD  rt_printf
-    #define LOGW  rt_printf
-    #define LOGE  rt_printf
-#endif
 
 
 

File diff suppressed because it is too large
+ 481 - 441
f407/project/app/app.uvoptx


+ 224 - 0
f407/project/app/app.uvprojx

@@ -474,6 +474,230 @@
               <FileType>1</FileType>
               <FilePath>..\..\applications\db.c</FilePath>
             </File>
+            <File>
+              <FileName>cboard.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\applications\cboard.c</FilePath>
+              <FileOption>
+                <CommonProperty>
+                  <UseCPPCompiler>2</UseCPPCompiler>
+                  <RVCTCodeConst>0</RVCTCodeConst>
+                  <RVCTZI>0</RVCTZI>
+                  <RVCTOtherData>0</RVCTOtherData>
+                  <ModuleSelection>0</ModuleSelection>
+                  <IncludeInBuild>0</IncludeInBuild>
+                  <AlwaysBuild>2</AlwaysBuild>
+                  <GenerateAssemblyFile>2</GenerateAssemblyFile>
+                  <AssembleAssemblyFile>2</AssembleAssemblyFile>
+                  <PublicsOnly>2</PublicsOnly>
+                  <StopOnExitCode>11</StopOnExitCode>
+                  <CustomArgument></CustomArgument>
+                  <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
+                </CommonProperty>
+                <FileArmAds>
+                  <Cads>
+                    <interw>2</interw>
+                    <Optim>0</Optim>
+                    <oTime>2</oTime>
+                    <SplitLS>2</SplitLS>
+                    <OneElfS>2</OneElfS>
+                    <Strict>2</Strict>
+                    <EnumInt>2</EnumInt>
+                    <PlainCh>2</PlainCh>
+                    <Ropi>2</Ropi>
+                    <Rwpi>2</Rwpi>
+                    <wLevel>0</wLevel>
+                    <uThumb>2</uThumb>
+                    <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <uGnu>2</uGnu>
+                    <useXO>2</useXO>
+                    <v6Lang>0</v6Lang>
+                    <v6LangP>0</v6LangP>
+                    <vShortEn>2</vShortEn>
+                    <vShortWch>2</vShortWch>
+                    <v6Lto>2</v6Lto>
+                    <v6WtE>2</v6WtE>
+                    <v6Rtti>2</v6Rtti>
+                    <VariousControls>
+                      <MiscControls></MiscControls>
+                      <Define></Define>
+                      <Undefine></Undefine>
+                      <IncludePath></IncludePath>
+                    </VariousControls>
+                  </Cads>
+                </FileArmAds>
+              </FileOption>
+            </File>
+            <File>
+              <FileName>cboard_dc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\applications\cboard_dc.c</FilePath>
+              <FileOption>
+                <CommonProperty>
+                  <UseCPPCompiler>2</UseCPPCompiler>
+                  <RVCTCodeConst>0</RVCTCodeConst>
+                  <RVCTZI>0</RVCTZI>
+                  <RVCTOtherData>0</RVCTOtherData>
+                  <ModuleSelection>0</ModuleSelection>
+                  <IncludeInBuild>0</IncludeInBuild>
+                  <AlwaysBuild>2</AlwaysBuild>
+                  <GenerateAssemblyFile>2</GenerateAssemblyFile>
+                  <AssembleAssemblyFile>2</AssembleAssemblyFile>
+                  <PublicsOnly>2</PublicsOnly>
+                  <StopOnExitCode>11</StopOnExitCode>
+                  <CustomArgument></CustomArgument>
+                  <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
+                </CommonProperty>
+                <FileArmAds>
+                  <Cads>
+                    <interw>2</interw>
+                    <Optim>0</Optim>
+                    <oTime>2</oTime>
+                    <SplitLS>2</SplitLS>
+                    <OneElfS>2</OneElfS>
+                    <Strict>2</Strict>
+                    <EnumInt>2</EnumInt>
+                    <PlainCh>2</PlainCh>
+                    <Ropi>2</Ropi>
+                    <Rwpi>2</Rwpi>
+                    <wLevel>0</wLevel>
+                    <uThumb>2</uThumb>
+                    <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <uGnu>2</uGnu>
+                    <useXO>2</useXO>
+                    <v6Lang>0</v6Lang>
+                    <v6LangP>0</v6LangP>
+                    <vShortEn>2</vShortEn>
+                    <vShortWch>2</vShortWch>
+                    <v6Lto>2</v6Lto>
+                    <v6WtE>2</v6WtE>
+                    <v6Rtti>2</v6Rtti>
+                    <VariousControls>
+                      <MiscControls></MiscControls>
+                      <Define></Define>
+                      <Undefine></Undefine>
+                      <IncludePath></IncludePath>
+                    </VariousControls>
+                  </Cads>
+                </FileArmAds>
+              </FileOption>
+            </File>
+            <File>
+              <FileName>cboard_ac.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\applications\cboard_ac.c</FilePath>
+              <FileOption>
+                <CommonProperty>
+                  <UseCPPCompiler>2</UseCPPCompiler>
+                  <RVCTCodeConst>0</RVCTCodeConst>
+                  <RVCTZI>0</RVCTZI>
+                  <RVCTOtherData>0</RVCTOtherData>
+                  <ModuleSelection>0</ModuleSelection>
+                  <IncludeInBuild>0</IncludeInBuild>
+                  <AlwaysBuild>2</AlwaysBuild>
+                  <GenerateAssemblyFile>2</GenerateAssemblyFile>
+                  <AssembleAssemblyFile>2</AssembleAssemblyFile>
+                  <PublicsOnly>2</PublicsOnly>
+                  <StopOnExitCode>11</StopOnExitCode>
+                  <CustomArgument></CustomArgument>
+                  <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
+                </CommonProperty>
+                <FileArmAds>
+                  <Cads>
+                    <interw>2</interw>
+                    <Optim>0</Optim>
+                    <oTime>2</oTime>
+                    <SplitLS>2</SplitLS>
+                    <OneElfS>2</OneElfS>
+                    <Strict>2</Strict>
+                    <EnumInt>2</EnumInt>
+                    <PlainCh>2</PlainCh>
+                    <Ropi>2</Ropi>
+                    <Rwpi>2</Rwpi>
+                    <wLevel>0</wLevel>
+                    <uThumb>2</uThumb>
+                    <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <uGnu>2</uGnu>
+                    <useXO>2</useXO>
+                    <v6Lang>0</v6Lang>
+                    <v6LangP>0</v6LangP>
+                    <vShortEn>2</vShortEn>
+                    <vShortWch>2</vShortWch>
+                    <v6Lto>2</v6Lto>
+                    <v6WtE>2</v6WtE>
+                    <v6Rtti>2</v6Rtti>
+                    <VariousControls>
+                      <MiscControls></MiscControls>
+                      <Define></Define>
+                      <Undefine></Undefine>
+                      <IncludePath></IncludePath>
+                    </VariousControls>
+                  </Cads>
+                </FileArmAds>
+              </FileOption>
+            </File>
+            <File>
+              <FileName>cboard_ac3.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\applications\cboard_ac3.c</FilePath>
+              <FileOption>
+                <CommonProperty>
+                  <UseCPPCompiler>2</UseCPPCompiler>
+                  <RVCTCodeConst>0</RVCTCodeConst>
+                  <RVCTZI>0</RVCTZI>
+                  <RVCTOtherData>0</RVCTOtherData>
+                  <ModuleSelection>0</ModuleSelection>
+                  <IncludeInBuild>0</IncludeInBuild>
+                  <AlwaysBuild>2</AlwaysBuild>
+                  <GenerateAssemblyFile>2</GenerateAssemblyFile>
+                  <AssembleAssemblyFile>2</AssembleAssemblyFile>
+                  <PublicsOnly>2</PublicsOnly>
+                  <StopOnExitCode>11</StopOnExitCode>
+                  <CustomArgument></CustomArgument>
+                  <IncludeLibraryModules></IncludeLibraryModules>
+                  <ComprImg>1</ComprImg>
+                </CommonProperty>
+                <FileArmAds>
+                  <Cads>
+                    <interw>2</interw>
+                    <Optim>0</Optim>
+                    <oTime>2</oTime>
+                    <SplitLS>2</SplitLS>
+                    <OneElfS>2</OneElfS>
+                    <Strict>2</Strict>
+                    <EnumInt>2</EnumInt>
+                    <PlainCh>2</PlainCh>
+                    <Ropi>2</Ropi>
+                    <Rwpi>2</Rwpi>
+                    <wLevel>0</wLevel>
+                    <uThumb>2</uThumb>
+                    <uSurpInc>2</uSurpInc>
+                    <uC99>2</uC99>
+                    <uGnu>2</uGnu>
+                    <useXO>2</useXO>
+                    <v6Lang>0</v6Lang>
+                    <v6LangP>0</v6LangP>
+                    <vShortEn>2</vShortEn>
+                    <vShortWch>2</vShortWch>
+                    <v6Lto>2</v6Lto>
+                    <v6WtE>2</v6WtE>
+                    <v6Rtti>2</v6Rtti>
+                    <VariousControls>
+                      <MiscControls></MiscControls>
+                      <Define></Define>
+                      <Undefine></Undefine>
+                      <IncludePath></IncludePath>
+                    </VariousControls>
+                  </Cads>
+                </FileArmAds>
+              </FileOption>
+            </File>
           </Files>
         </Group>
         <Group>

+ 1 - 1
f407/rt-thread/components/dfs/dfs_v2/src/dfs_dentry.c

@@ -69,7 +69,7 @@ static struct dfs_dentry *_dentry_create(struct dfs_mnt *mnt, char *path, rt_boo
         rt_atomic_store(&(dentry->ref_count), 1);
         dentry->flags |= DENTRY_IS_ALLOCED;
 
-        LOG_I("create a dentry:%p for %s", dentry, fullpath);
+        //LOG_I("create a dentry:%p for %s", dentry, fullpath);
     }
 
     return dentry;

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

@@ -74,7 +74,7 @@ function bin_to_info(bin) {
     var tmp, length=0;
 
     tmp = new DataView(bin, length);
-    this.type = tmp.getUint8(0,true);
+    this.type = tmp.getInt8(0,true);
     length += 1;
 
     tmp = new DataView(bin, length);
@@ -346,7 +346,7 @@ function info_to_bin(js) {
     var buffer = new ArrayBuffer(js.len);
 
     tmp = new DataView(buffer, length);
-    tmp.setUint8(0,js.type,true);
+    tmp.setInt8(0,js.type,true);
     length += 1;
 
     tmp = new DataView(buffer, length);