|
|
@@ -44,7 +44,7 @@ typedef struct cascade_info{
|
|
|
uint8_t quit;
|
|
|
slave_info_t *info;
|
|
|
lock_t lock;
|
|
|
- slave_t slaves[CASCADE_MAX+1];
|
|
|
+ slave_t slaves[POWER_CASCADE_MAX+1];
|
|
|
cmd_data_t cmd;
|
|
|
power_all_t all;
|
|
|
// union {
|
|
|
@@ -103,7 +103,7 @@ static void memswap(uint8_t *buf, int len)
|
|
|
|
|
|
static void slave_rm(uint8_t addr)
|
|
|
{
|
|
|
- if(addr > 0 && addr < SLAVE_CH_MAX)
|
|
|
+ if(addr > 0 && addr < POWER_SLAVE_CH_MAX)
|
|
|
{
|
|
|
slave_info.slaves[addr].addr = 0;
|
|
|
slave_info.slaves[addr].err = 0;
|
|
|
@@ -113,7 +113,7 @@ static void slave_rm(uint8_t addr)
|
|
|
static uint8_t master_scan(cascade_handle_t *cas)
|
|
|
{
|
|
|
static uint8_t slave_addr = 1;
|
|
|
- if(slave_addr > CASCADE_MAX)
|
|
|
+ if(slave_addr > POWER_CASCADE_MAX)
|
|
|
{
|
|
|
slave_addr = 1;
|
|
|
}
|
|
|
@@ -139,17 +139,18 @@ static uint8_t master_scan(cascade_handle_t *cas)
|
|
|
static int slave_get_info(cascade_handle_t *cas)
|
|
|
{
|
|
|
slave_info_t *info=cas->info;
|
|
|
- power_all_t *p = power_data_get();
|
|
|
+ power_all_t all;
|
|
|
|
|
|
- info->channels = p->chs-1 > 0 ? p->chs-1 : p->chs;
|
|
|
+ power_data_get(&all);
|
|
|
+ info->channels = all.chs-1 > 0 ? all.chs-1 : all.chs;
|
|
|
|
|
|
- if(info->channels > SLAVE_CH_MAX)
|
|
|
- info->channels = SLAVE_CH_MAX;
|
|
|
+ if(info->channels > POWER_SLAVE_CH_MAX)
|
|
|
+ info->channels = POWER_SLAVE_CH_MAX;
|
|
|
if(info->channels == 0)
|
|
|
return -1;
|
|
|
for(int i=0; i < info->channels;i++)
|
|
|
{
|
|
|
- info->ch[i] = p->pch[i+1];
|
|
|
+ info->ch[i] = all.pch[i+1];
|
|
|
}
|
|
|
LOGD("slave will send %d channels to master!!!!\n",info->channels);
|
|
|
return 0;
|
|
|
@@ -184,7 +185,9 @@ static void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
|
|
|
{
|
|
|
cmd_data_t *cmd=NULL;
|
|
|
pthread_t id = 0;
|
|
|
- power_all_t *power = power_data_get();
|
|
|
+ power_all_t all;
|
|
|
+
|
|
|
+ power_data_get(&all);
|
|
|
switch (reg)
|
|
|
{
|
|
|
case CASCADE_REG_SCAN:
|
|
|
@@ -248,7 +251,7 @@ static void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
|
|
|
{
|
|
|
LOGD("____read_____ %d,sendlen = %d size=%d\n",lenth,sendlen,sizeof(power_ch_t)*4);
|
|
|
//my_memcpy_byte(r_w_data,(void*)&slave_info.info+sendlen,lenth*2);
|
|
|
- uint8_t * base_addr = (uint8_t *)&power->pch[1];
|
|
|
+ uint8_t * base_addr = (uint8_t *)&all.pch[1];
|
|
|
my_memcpy_byte(r_w_data,base_addr+sendlen,lenth*2);
|
|
|
memswap(r_w_data,lenth*2);
|
|
|
|
|
|
@@ -258,7 +261,7 @@ static void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
|
|
|
{
|
|
|
//my_memcpy_byte(r_w_data,(void*)&slave_info.info+sendlen,lenth*2);
|
|
|
//power_all_t power = power_data_get();
|
|
|
- uint8_t * base_addr = (uint8_t *)&power->pch[1];
|
|
|
+ uint8_t * base_addr = (uint8_t *)&all.pch[1];
|
|
|
//my_memcpy_byte(r_w_data,&power->pch[1]+sendlen,lenth*2);
|
|
|
my_memcpy_byte(r_w_data,base_addr+sendlen,lenth*2);
|
|
|
memswap(r_w_data,lenth*2);
|
|
|
@@ -313,7 +316,7 @@ static int _mb_write(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
wl = mb_write(MB_ID_CASCADE, addr, CASCADE_REG_WRITE, (uint16_t*)buff, xlen/2);
|
|
|
if(wl<=0) {
|
|
|
LOGE("___ _mb_write failed, addr: %d, reg: %d, cnt: %d, %s, retry: %d\n", addr, CASCADE_REG_WRITE, xlen/2,"write failed",i+1);
|
|
|
- if(addr >0 && addr < SLAVE_CH_MAX)
|
|
|
+ if(addr >0 && addr < POWER_SLAVE_CH_MAX)
|
|
|
{
|
|
|
slave_info.slaves[addr].err ++;
|
|
|
if(slave_info.slaves[addr].err > 5)
|
|
|
@@ -363,7 +366,7 @@ static int _mb_read(cascade_handle_t *cas, int addr, data_t *d)
|
|
|
rl = mb_read(MB_ID_CASCADE, addr, CASCADE_REG_READ, buff, xlen/2,100);
|
|
|
if(rl<=0) {
|
|
|
LOGE("___ _mb_read failed, %s, rlen: %d, retry: %d\n", "read error", rlen, i+1);
|
|
|
- if(addr >0 && addr < SLAVE_CH_MAX)
|
|
|
+ if(addr >0 && addr < POWER_SLAVE_CH_MAX)
|
|
|
{
|
|
|
cas->slaves[addr].err ++;
|
|
|
if(cas->slaves[addr].err > 5)
|
|
|
@@ -468,7 +471,7 @@ static int master_cmd(cascade_handle_t *cas,uint8_t cur_dev_addr ,cmd_data_t *cm
|
|
|
wdata.dlen = sizeof(cmd_data_t);
|
|
|
wdata.data = (uint8_t*)cmd;
|
|
|
|
|
|
-// rdata.dlen = sizeof(slave_info_t)-sizeof(power_ch_t)*SLAVE_CH_MAX;
|
|
|
+// rdata.dlen = sizeof(slave_info_t)-sizeof(power_ch_t)*POWER_SLAVE_CH_MAX;
|
|
|
// rdata.data = (uint8_t*)cas->info;
|
|
|
uint16_t value = 0;
|
|
|
r = mb_read(MB_ID_CASCADE,cur_dev_addr,4000,&value,1,100);//获取通道数
|
|
|
@@ -483,10 +486,10 @@ static int master_cmd(cascade_handle_t *cas,uint8_t cur_dev_addr ,cmd_data_t *cm
|
|
|
LOGD("get slave channels %d!!!\n",chanels);
|
|
|
}else
|
|
|
{
|
|
|
- if(chanels >= SLAVE_CH_MAX)
|
|
|
- chanels = SLAVE_CH_MAX;
|
|
|
+ if(chanels >= POWER_SLAVE_CH_MAX)
|
|
|
+ chanels = POWER_SLAVE_CH_MAX;
|
|
|
cas->info->channels = chanels;
|
|
|
- //rdata.dlen = sizeof(slave_info_t) -sizeof(power_ch_t)*(SLAVE_CH_MAX - cas->info.channels);
|
|
|
+ //rdata.dlen = sizeof(slave_info_t) -sizeof(power_ch_t)*(POWER_SLAVE_CH_MAX - cas->info.channels);
|
|
|
rdata.dlen = sizeof(power_ch_t)*cas->info->channels;
|
|
|
rdata.data = (uint8_t*)&(cas->info->ch);
|
|
|
r = mb_write_read(cas, cur_dev_addr, &wdata, &rdata);
|
|
|
@@ -499,7 +502,7 @@ static int master_cmd(cascade_handle_t *cas,uint8_t cur_dev_addr ,cmd_data_t *cm
|
|
|
}
|
|
|
}
|
|
|
// if(r==0) {
|
|
|
-// rdata.dlen = sizeof(slave_info_t)-sizeof(power_ch_t)*(SLAVE_CH_MAX - cas->info.channels);
|
|
|
+// rdata.dlen = sizeof(slave_info_t)-sizeof(power_ch_t)*(POWER_SLAVE_CH_MAX - cas->info.channels);
|
|
|
// rdata.data = (uint8_t*)&cas->info;
|
|
|
// r = mb_write_read(cas, cur_dev_addr, &wdata, &rdata);
|
|
|
// if(r==0) {
|
|
|
@@ -628,29 +631,30 @@ void cascade_scan_thread(void *arg)
|
|
|
}else //做从机//拷贝数据到北向
|
|
|
{
|
|
|
paras_data_t* p_data = paras_get();
|
|
|
- power_all_t *power = power_data_get();
|
|
|
-
|
|
|
+ power_all_t all;
|
|
|
+
|
|
|
+ power_data_get(&all);
|
|
|
if(p_data->prod.type == PDU_AC_I1O1 || p_data->prod.type == PDU_DC_I1O1)
|
|
|
{
|
|
|
- int channels = power->chs > 0 ? power->chs - 1: 0;
|
|
|
+ int channels = all.chs > 0 ? all.chs - 1: 0;
|
|
|
slave_info.north->data.ac_dc.dev_cnt = (p_data->prod.type << 8 | channels);
|
|
|
- int cnt = power->chs > SLAVE_CH_MAX ? SLAVE_CH_MAX : channels;
|
|
|
+ int cnt = all.chs > POWER_SLAVE_CH_MAX ? POWER_SLAVE_CH_MAX : channels;
|
|
|
//电量信息
|
|
|
for(int i = 0; i < cnt;i++)
|
|
|
{
|
|
|
- slave_info.north->data.ac_dc.power[i].voltage = power->pch[i].power[0].voltage *1000;
|
|
|
- slave_info.north->data.ac_dc.power[i].current = power->pch[i].power[0].current *1000;
|
|
|
- slave_info.north->data.ac_dc.power[i].power = power->pch[i].power[0].power *1000;
|
|
|
- slave_info.north->data.ac_dc.power[i].consumer = power->pch[i].power[0].consump *1000;
|
|
|
- slave_info.north->data.ac_dc.power[i].factor = power->pch[i].power[0].factor *1000;
|
|
|
- slave_info.north->data.ac_dc.power[i].freq = power->pch[i].power[0].freq *1000;
|
|
|
+ slave_info.north->data.ac_dc.power[i].voltage = all.pch[i].power[0].voltage *1000;
|
|
|
+ slave_info.north->data.ac_dc.power[i].current = all.pch[i].power[0].current *1000;
|
|
|
+ slave_info.north->data.ac_dc.power[i].power = all.pch[i].power[0].power *1000;
|
|
|
+ slave_info.north->data.ac_dc.power[i].consumer = all.pch[i].power[0].consump *1000;
|
|
|
+ slave_info.north->data.ac_dc.power[i].factor = all.pch[i].power[0].factor *1000;
|
|
|
+ slave_info.north->data.ac_dc.power[i].freq = all.pch[i].power[0].freq *1000;
|
|
|
}
|
|
|
//总信息
|
|
|
- //slave_info.north->data.ac_dc.power_all. = power.ttl.total;
|
|
|
- slave_info.north->data.ac_dc.power_all.all_consumer = power->ttl.total[0].consump *1000;
|
|
|
- slave_info.north->data.ac_dc.power_all.all_current = power->ttl.total[0].current *1000;
|
|
|
- slave_info.north->data.ac_dc.power_all.all_power = power->ttl.total[0].power *1000;
|
|
|
- slave_info.north->data.ac_dc.power_all.all_voltage = power->ttl.total[0].voltage *1000;
|
|
|
+ //slave_info.north->data.ac_dc.power_all. = all.ttl.total;
|
|
|
+ slave_info.north->data.ac_dc.power_all.all_consumer = all.ttl.total[0].consump *1000;
|
|
|
+ slave_info.north->data.ac_dc.power_all.all_current = all.ttl.total[0].current *1000;
|
|
|
+ slave_info.north->data.ac_dc.power_all.all_power = all.ttl.total[0].power *1000;
|
|
|
+ slave_info.north->data.ac_dc.power_all.all_voltage = all.ttl.total[0].voltage *1000;
|
|
|
//温湿度
|
|
|
slave_info.north->data.ac_dc.temp = 0; //后续加上传感器数据
|
|
|
slave_info.north->data.ac_dc.humity = 0;
|
|
|
@@ -658,24 +662,24 @@ void cascade_scan_thread(void *arg)
|
|
|
slave_info.north->data.ac_dc.switch_stu[i] = 0;
|
|
|
for(int i = 0; i < cnt;i++)
|
|
|
{
|
|
|
- slave_info.north->data.ac_dc.delay_open[i] = power->pch[i].info.start_delay;
|
|
|
+ slave_info.north->data.ac_dc.delay_open[i] = all.pch[i].info.start_delay;
|
|
|
}
|
|
|
for(int i = 0; i < cnt;i++)
|
|
|
{
|
|
|
- slave_info.north->data.ac_dc.delay_close[i] = power->pch[i].info.stop_delay;
|
|
|
+ slave_info.north->data.ac_dc.delay_close[i] = all.pch[i].info.stop_delay;
|
|
|
}
|
|
|
}else
|
|
|
{
|
|
|
- int channels = power->chs > 0 ? power->chs - 1: 0;
|
|
|
+ int channels = all.chs > 0 ? all.chs - 1: 0;
|
|
|
slave_info.north->data.ac_3.dev_cnt = (p_data->prod.type << 8 | channels);
|
|
|
for(int i = A_P; i <= C_P;i++)
|
|
|
{
|
|
|
- slave_info.north->data.ac_3.ac_3_all_pw[i].consumer = power->ttl.total[i].consump *1000;
|
|
|
- slave_info.north->data.ac_3.ac_3_all_pw[i].current = power->ttl.total[i].current *1000;
|
|
|
- slave_info.north->data.ac_3.ac_3_all_pw[i].power = power->ttl.total[i].power *1000;
|
|
|
- slave_info.north->data.ac_3.ac_3_all_pw[i].voltage = power->ttl.total[i].voltage *1000;
|
|
|
+ slave_info.north->data.ac_3.ac_3_all_pw[i].consumer = all.ttl.total[i].consump *1000;
|
|
|
+ slave_info.north->data.ac_3.ac_3_all_pw[i].current = all.ttl.total[i].current *1000;
|
|
|
+ slave_info.north->data.ac_3.ac_3_all_pw[i].power = all.ttl.total[i].power *1000;
|
|
|
+ slave_info.north->data.ac_3.ac_3_all_pw[i].voltage = all.ttl.total[i].voltage *1000;
|
|
|
}
|
|
|
- int cnt = power->chs > SLAVE_CH_MAX ? SLAVE_CH_MAX : channels;
|
|
|
+ int cnt = all.chs > POWER_SLAVE_CH_MAX ? POWER_SLAVE_CH_MAX : channels;
|
|
|
for(int i = 0; i < cnt;i++)
|
|
|
{
|
|
|
|
|
|
@@ -685,20 +689,20 @@ void cascade_scan_thread(void *arg)
|
|
|
{
|
|
|
for(int j = A_P; j <= C_P;j++)
|
|
|
{
|
|
|
- slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_consumer = power->pch[i].power[j].consump * 1000;
|
|
|
- slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_current = power->pch[i].power[j].current * 1000;
|
|
|
- slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_power = power->pch[i].power[j].power * 1000;
|
|
|
- slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_voltage = power->pch[i].power[j].voltage * 1000;
|
|
|
- slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_status = power->pch[i].power[j].status;
|
|
|
+ slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_consumer = all.pch[i].power[j].consump * 1000;
|
|
|
+ slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_current = all.pch[i].power[j].current * 1000;
|
|
|
+ slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_power = all.pch[i].power[j].power * 1000;
|
|
|
+ slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_voltage = all.pch[i].power[j].voltage * 1000;
|
|
|
+ slave_info.north->data.ac_3.ac_3_chn_p[i][j].p_status = all.pch[i].power[j].status;
|
|
|
}
|
|
|
}
|
|
|
for(int i = 0; i < cnt;i++)
|
|
|
{
|
|
|
- slave_info.north->data.ac_3.delay_open[i] = power->pch[i].info.start_delay;
|
|
|
+ slave_info.north->data.ac_3.delay_open[i] = all.pch[i].info.start_delay;
|
|
|
}
|
|
|
for(int i = 0; i < cnt;i++)
|
|
|
{
|
|
|
- slave_info.north->data.ac_3.delay_close[i] = power->pch[i].info.stop_delay;
|
|
|
+ slave_info.north->data.ac_3.delay_close[i] = all.pch[i].info.stop_delay;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -830,7 +834,7 @@ uint8_t cascade_set_mode(uint8_t mode,uint8_t addr)
|
|
|
|
|
|
void cascade_reinit(uint8_t mode,uint8_t addr,uint32_t baud)
|
|
|
{
|
|
|
- if(mode != MODBUS_MASTER || mode !=MODBUS_SLAVE || addr >= SLAVE_CH_MAX)
|
|
|
+ if(mode != MODBUS_MASTER || mode !=MODBUS_SLAVE || addr >= POWER_SLAVE_CH_MAX)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
@@ -841,11 +845,14 @@ void cascade_reinit(uint8_t mode,uint8_t addr,uint32_t baud)
|
|
|
cascade_init(mode,addr,baud);
|
|
|
}
|
|
|
|
|
|
-power_all_t* cascade_power_get(void)
|
|
|
+int cascade_power_get(power_all_t *all)
|
|
|
{
|
|
|
- slave_info.all.chs = slave_info.info->channels;
|
|
|
- slave_info.all.pch = &slave_info.info->ch[0];
|
|
|
- return &slave_info.all;
|
|
|
+ if(!all) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ all->chs = slave_info.info->channels;
|
|
|
+ all->pch = &slave_info.info->ch[0];
|
|
|
+ return 0;
|
|
|
}
|
|
|
int cascade_get_dlist(dev_list_t *dl)
|
|
|
{
|
|
|
@@ -856,12 +863,12 @@ int cascade_get_dlist(dev_list_t *dl)
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- sl = (slave_t*)malloc(sizeof(slave_t)*(CASCADE_MAX+1));
|
|
|
+ sl = (slave_t*)malloc(sizeof(slave_t)*(POWER_CASCADE_MAX+1));
|
|
|
if(!sl) {
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- for(i=0; i<=CASCADE_MAX; i++) {
|
|
|
+ for(i=0; i<=POWER_CASCADE_MAX; i++) {
|
|
|
if(slave_info.slaves[i].addr>=0) {
|
|
|
sl[cnt++] = slave_info.slaves[i];
|
|
|
}
|