|
|
@@ -10,6 +10,7 @@
|
|
|
#include "string.h"
|
|
|
#include "power.h"
|
|
|
#include "paras.h"
|
|
|
+#include "thread.h"
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
@@ -93,18 +94,20 @@ const mb_cb_table_t mb_table = {
|
|
|
static cascade_handle_t slave_info = {0};
|
|
|
static mb_cascade_fun_t func = {0};
|
|
|
|
|
|
-uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint8_t baud)
|
|
|
+uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint32_t baud)
|
|
|
{
|
|
|
list_cfg_t lc={0,LIST_FULL_FIFO,10};
|
|
|
mb_para_t para;
|
|
|
para.type = MB_TYPE_RTU;
|
|
|
para.para.rtu.dev = (char *)uart;
|
|
|
para.para.rtu.baudrate = baud;
|
|
|
- para.para.rtu.parity = 2;
|
|
|
+ para.para.rtu.parity = 0;
|
|
|
para.para.rtu.pin = -1;
|
|
|
para.para.rtu.lvl = 0;
|
|
|
paras_data_t* p_data = paras_get();
|
|
|
- addr = p_data->cas.addr;
|
|
|
+ para.para.rtu.baudrate = p_data->cas.baud;
|
|
|
+
|
|
|
+ //addr = p_data->cas.addr;
|
|
|
if(addr == 0){
|
|
|
para.mode = MB_MODE_MASTER;
|
|
|
}else
|
|
|
@@ -112,6 +115,7 @@ uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint8_t baud)
|
|
|
para.mode = MB_MODE_SLAVE;
|
|
|
slave_info.saddr = addr;
|
|
|
}
|
|
|
+ slave_info.md_type = para.mode;
|
|
|
slave_info.lock = lock_init();
|
|
|
slave_info.mb = mb_init(¶);
|
|
|
if(!slave_info.mb) {
|
|
|
@@ -125,7 +129,18 @@ uint8_t cascade_init(const char* uart,uint8_t mode,uint8_t addr,uint8_t baud)
|
|
|
func.slave_func = slave_func;
|
|
|
mb_set_cb_cascade(handle->rtu.h,&func);
|
|
|
}
|
|
|
+ cascade_handle_t *cas=&slave_info;
|
|
|
+ //ModbusInfo_t *info=&cas->mInfo;
|
|
|
+ mb_handle_t *handle=(mb_handle_t *)(cas->mb);
|
|
|
+ handle->quit = 0;
|
|
|
+
|
|
|
+ LOGD("uart: %s mode: %d addr: %d bound: %d\n",uart,slave_info.md_type,slave_info.saddr,para.para.rtu.baudrate);
|
|
|
//cas data
|
|
|
+ LOGD("scan thread!!!\n");
|
|
|
+ thread_start(THREAD_ID_CAS_SCAN,cascade_scan_thread,NULL);
|
|
|
+ sleep(1);
|
|
|
+ LOGD("cascade thread!!!\n");
|
|
|
+ thread_start(THREAD_ID_CAS_TH,cascade_thread,NULL);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -159,7 +174,7 @@ static uint8_t master_scan(cascade_handle_t *cas)
|
|
|
|
|
|
|
|
|
|
|
|
-void * cascade_scan_thread(void *arg)
|
|
|
+void cascade_scan_thread(void *arg)
|
|
|
{
|
|
|
|
|
|
while(1)
|
|
|
@@ -214,6 +229,31 @@ void * cascade_scan_thread(void *arg)
|
|
|
slave_info.data.ac_3.ac_3_all_pw[i].power = power.ttl.total[i].power *1000;
|
|
|
slave_info.data.ac_3.ac_3_all_pw[i].voltage = power.ttl.total[i].voltage *1000;
|
|
|
}
|
|
|
+ int cnt = power.chs > 64 ? 64 : power.chs;
|
|
|
+ for(int i = 0; i < cnt;i++)
|
|
|
+ {
|
|
|
+
|
|
|
+ //总体信息
|
|
|
+ }
|
|
|
+ for(int i = 0; i < cnt;i++)
|
|
|
+ {
|
|
|
+ for(int j = A_P; j <= C_P;j++)
|
|
|
+ {
|
|
|
+ slave_info.data.ac_3.ac_3_chn_p[i][j].p_consumer = power.pch[i].power[j].consump * 1000;
|
|
|
+ slave_info.data.ac_3.ac_3_chn_p[i][j].p_current = power.pch[i].power[j].current * 1000;
|
|
|
+ slave_info.data.ac_3.ac_3_chn_p[i][j].p_power = power.pch[i].power[j].power * 1000;
|
|
|
+ slave_info.data.ac_3.ac_3_chn_p[i][j].p_voltage = power.pch[i].power[j].voltage * 1000;
|
|
|
+ slave_info.data.ac_3.ac_3_chn_p[i][j].p_status = power.pch[i].power[j].status;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for(int i = 0; i < cnt;i++)
|
|
|
+ {
|
|
|
+ slave_info.data.ac_3.delay_open[i] = power.pch[i].info.start_delay;
|
|
|
+ }
|
|
|
+ for(int i = 0; i < cnt;i++)
|
|
|
+ {
|
|
|
+ slave_info.data.ac_3.delay_close[i] = power.pch[i].info.stop_delay;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
}
|
|
|
@@ -224,7 +264,7 @@ void * cascade_scan_thread(void *arg)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void* cascade_thread(void *arg)
|
|
|
+void cascade_thread(void *arg)
|
|
|
{
|
|
|
int r;
|
|
|
//thread_handle_t *h=(thread_handle_t*)arg;
|
|
|
@@ -237,7 +277,7 @@ static void* cascade_thread(void *arg)
|
|
|
r = master_query(cas);
|
|
|
sleep(1);
|
|
|
}
|
|
|
- else { //从模式,等待主设备发起数据请�?
|
|
|
+ else { //从模式,等待主设备发起数据请求
|
|
|
//r = slave_receive(cas);
|
|
|
mb_slave_fsm(handle->rtu.h);
|
|
|
}
|
|
|
@@ -791,7 +831,7 @@ int mb_port_read_hold(u16 addr, u16 *preg)//读保持寄存器, 返回 : 0-成
|
|
|
if(AC_3_DEV_CHN_REG <= addr && addr <= AC_3_DRY_REG)
|
|
|
{
|
|
|
data = (uint16_t*)(&slave_info.data.ac_3);
|
|
|
- uint32_t offset = addr - AC_DC_DEV_CHN_REG;
|
|
|
+ uint32_t offset = addr - AC_3_DEV_CHN_REG;
|
|
|
*preg = *(data+offset);
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -802,6 +842,7 @@ int mb_port_write_hold(u16 addr, u16 reg)//写保持寄存器, 返回 : 0-成功
|
|
|
{
|
|
|
//board_all_t *board = get_control_board();
|
|
|
power_data_t power = power_data_get();
|
|
|
+
|
|
|
if(AC_DC_SET_DELAY_OPEN <= addr && addr <= AC_DC_ALL_SET_SWITCH_REG)
|
|
|
{
|
|
|
switch(addr)
|