#include "plt.h" #include "meter.h" struct meter_t meter[METER_NBR_MAX + 1]; static int meter_dbcb_0(void *para, int ncolumn, char **columnvalue, char *columnname[]) { int i; struct dbcbparam_t *pcbparam = (struct dbcbparam_t *)para; struct meter_t *dev = &meter[1]; char szmodel_list[128]; char delims[] = ","; char *result = NULL; int model; pcbparam->nrow++; log_dbg("%s, ++,row:%d, col:%d", __func__, pcbparam->nrow, ncolumn); dev->model_nbr = 0; for (i = 0; i < ncolumn; i++) { if (strcmp("model", columnname[i]) == 0) { strcpy(szmodel_list, columnvalue[i]); result = strtok(szmodel_list, delims); while (result != NULL) { dev->model_nbr++; model = plt_devm_str2nbr(result); if (model != DEVM_INVALID) { dev->model[dev->model_nbr] = model; strcpy(dev->szmodel[dev->model_nbr], result); log_dbg("%s, get meter model:%s", __func__, result); } else { dev->model_nbr--; log_dbg("%s, get invalid meter model:%s", __func__, result); } result = strtok(NULL, delims); } } } pcbparam->ret = 0; log_dbg("%s, --,ret:%d", __func__, pcbparam->ret); return 0; } int* meter_get_model() { return meter[1].model; } int meter_get_model_nbr() { return meter[1].model_nbr; } int meter_init() { pthread_t thrd; int result = 0; int ret = 0; int model = 0; char *errmsg = NULL; char sql[1024]; struct dbcbparam_t cbparam; sqlite3 *db = NULL; int i; log_dbg("%s, ++", __func__); plt_lock_ctndb(); db = plt_get_ctndb(); sprintf(sql, "select * from meter"); cbparam.nrow = 0; result = sqlite3_exec(db, sql, meter_dbcb_0, (void *)&cbparam, &errmsg); plt_unlock_ctndb(); if (result != SQLITE_OK) { log_dbg("%s, result != SQLITE_OK : %d", __func__, result); ret = -1; } else if (cbparam.ret != 0) { log_dbg("%s, cbparam.ret != 0 : %d", __func__, cbparam.ret); ret = -2; } else if (cbparam.nrow != 1) { log_dbg("%s, cbparam.nrow != 1 : %d", __func__, cbparam.nrow); ret = -3; } else if (meter_get_model_nbr() <= 0) { log_dbg("%s, meter model nbr <= 0 : %d", __func__, meter_get_model_nbr()); ret = -4; } else { for (i = 1; i <= meter_get_model_nbr(); i++) { model = meter[1].model[i]; if (model == DEVM_DTSD1352) { dtsd1352_init(); } else if (model == DEVM_DLT645) { dlt645_init(); } else if (model == DEVM_ABB_B23_4) { abb_b23_4_init(); } else if (model == DEVM_ADL200) { adl200_init(); } else { log_dbg("%s, unknown model:%d", __func__, model); ret = -5; } } } log_dbg("%s--, ret:%d", __func__, ret); return ret; } // 0 : ok int meter_chk_state_all(int model, int stat) { return 0; if (model == DEVM_DTSD1352) { return dtsd1352_chk_state_all(stat); } else if (model == DEVM_DLT645) { return dlt645_chk_state_all(stat); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_chk_state_all(stat); } else { return -1; } } int meter_send_sm_cmd_all(int cmd) { int i = 0; int ret = 0; int idx = 0; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: dlt645_send_sm_cmd_all(cmd); break; case DEVM_DTSD1352: dtsd1352_send_sm_cmd_all(cmd); break; case DEVM_ABB_B23_4: abb_b23_4_send_sm_cmd_all(cmd); break; default: return -1; break; } } return ret; } int meter_send_sm_cmd(int model, int idx, int cmd) { if (model == DEVM_DTSD1352) { return dtsd1352_send_sm_cmd(idx, cmd); } else if (model == DEVM_DLT645) { return dlt645_send_sm_cmd(idx, cmd); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_send_sm_cmd(idx, cmd); } else { return -1; } } int meter_set_dev_pt(int model, int idx, int val) { if (model == DEVM_DTSD1352) { return dtsd1352_set_dev_pt(idx, val); } else { return -1; } } int meter_set_dev_ct(int model, int idx, int val) { if (model == DEVM_DTSD1352) { return dtsd1352_set_dev_ct(idx, val); } else { return -1; } } int meter_get_com_ap(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_com_ap(idx); } else if (model == DEVM_DLT645) { return dlt645_get_com_ap(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_com_ap(idx); } else if (model == DEVM_ADL200) { return adl200_get_com_ap(idx); } else { return -1; } } char *meter_get_state_string(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_state_string(idx); } else if (model == DEVM_DLT645) { return dlt645_get_state_string(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_state_string(idx); } else { return -1; } } double meter_get_com_ae(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_com_ae(idx); } else if (model == DEVM_DLT645) { return dlt645_get_com_ae(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_com_ae(idx); } else if (model == DEVM_ADL200) { return adl200_get_com_ae(idx); } else { return -1; } } double meter_get_pos_ae(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_pos_ae(idx); } else if (model == DEVM_DLT645) { return dlt645_get_pos_ae(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_pos_ae(idx); } else if (model == DEVM_ADL200) { return adl200_get_pos_ae(idx); } else { return -1; } } double meter_get_neg_ae(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_neg_ae(idx); } else if (model == DEVM_DLT645) { return dlt645_get_neg_ae(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_neg_ae(idx); } else if (model == DEVM_ADL200) { return adl200_get_neg_ae(idx); } else { return -1; } } double meter_get_freq(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_freq(idx); } else if (model == DEVM_DLT645) { return dlt645_get_freq(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_freq(idx); } else { return -1; } } double meter_get_power_factor(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_pwrfct(idx); } else if (model == DEVM_DTSD1352) { return abb_b23_4_get_pwrfct(idx); } else { return -1; } } double meter_get_THDUa(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_THDUa(idx); } else { return -1; } } double meter_get_THDUb(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_THDUb(idx); } else { return -1; } } double meter_get_THDUc(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_THDUc(idx); } else { return -1; } } double meter_get_THDIa(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_THDIa(idx); } else { return -1; } } double meter_get_THDIb(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_THDIb(idx); } else { return -1; } } double meter_get_THDIc(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_THDIc(idx); } else { return -1; } } double meter_get_total_fund_ap(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_total_fund_ap(idx); } else { return -1; } } double meter_get_total_fund_rp(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_total_fund_rp(idx); } else { return -1; } } double meter_get_total_harm_ap(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_total_harm_ap(idx); } else { return -1; } } double meter_get_total_harm_rp(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_total_harm_rp(idx); } else { return -1; } } double meter_get_ua(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_ua(idx); } else if (model == DEVM_DLT645) { return dlt645_get_ua(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_ua(idx); } else { return -1; } } double meter_get_ub(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_ub(idx); } else if (model == DEVM_DLT645) { return dlt645_get_ub(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_ub(idx); } else { return -1; } } double meter_get_uc(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_uc(idx); } else if (model == DEVM_DLT645) { return dlt645_get_uc(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_uc(idx); } else { return -1; } } double meter_get_ia(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_ia(idx); } else if (model == DEVM_DLT645) { return dlt645_get_ia(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_ia(idx); } else { return -1; } } double meter_get_ib(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_ib(idx); } else if (model == DEVM_DLT645) { return dlt645_get_ib(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_ib(idx); } else { return -1; } } double meter_get_ic(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_ic(idx); } else if (model == DEVM_DLT645) { return dlt645_get_ic(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_ic(idx); } else { return -1; } } int meter_get_comm_st(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_comm_st(idx); } else if (model == DEVM_DLT645) { return dlt645_get_comm_st(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_comm_st(idx); } else if (model == DEVM_ADL200) { return adl200_get_comm_st(idx); } else { return -1; } } int meter_set_dac_param_en(int model, int idx, int val) { if (model == DEVM_DTSD1352) { dtsd1352_set_dac_param_en(idx, val); } else if (model == DEVM_DLT645) { dlt645_set_dac_param_en(idx, val); } else if (model == DEVM_ABB_B23_4) { abb_b23_4_set_dac_param_en(idx, val); } return 0; } int meter_get_nbr(int model) { if (model == DEVM_DTSD1352) { return dtsd1352_get_nbr(); } else if (model == DEVM_DLT645) { return dlt645_get_nbr(); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_nbr(); } else { return -1; } } int meter_get_state(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_state(idx); } else if (model == DEVM_DLT645) { return dlt645_get_state(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_state(idx); } else { return -1; } } char *meter_get_info_str(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_info_str(idx); } else if (model == DEVM_DLT645) { return dlt645_get_info_str(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_info_str(idx); } else { return NULL; } } int meter_get_sm_step(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_sm_step(idx); } else if (model == DEVM_DLT645) { return dlt645_get_sm_step(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_sm_step(idx); } else { return -1; } } char *meter_get_sm_err_str(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_sm_err_str(idx); } else if (model == DEVM_DLT645) { return dlt645_get_sm_err_str(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_sm_err_str(idx); } else { return NULL; } } int meter_get_chan_idx(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_chan_idx(idx); } else if (model == DEVM_DLT645) { return dlt645_get_chan_idx(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_chan_idx(idx); } else { return -1; } } int meter_get_adr(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_adr(idx); } else if (model == DEVM_DLT645) { return dlt645_get_adr(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_adr(idx); } else { return -1; } } int meter_get_tick(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_tick(idx); } else if (model == DEVM_DLT645) { return dlt645_get_tick(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_tick(idx); } else { return -1; } } char *meter_get_comm_state_str(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_comm_state_str(idx); } else if (model == DEVM_DLT645) { return dlt645_get_comm_state_str(idx); } else if (model == DEVM_ABB_B23_4) { return abb_b23_4_get_comm_state_str(idx); } else { return NULL; } } int meter_get_PT(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_PT(idx); } else if (model == DEVM_DLT645) { return -1; } else { return -1; } } int meter_get_CT(int model, int idx) { if (model == DEVM_DTSD1352) { return dtsd1352_get_CT(idx); } else if (model == DEVM_DLT645) { return -1; } else { return -1; } } double meter_get_pratio(int model, int idx) { if (model == DEVM_DTSD1352) { return -1.0; } else if (model == DEVM_DLT645) { return dlt645_get_pratio(idx); } else { return -1.0; } } double meter_get_vratio(int model, int idx) { if (model == DEVM_DTSD1352) { return -1.0; } else if (model == DEVM_DLT645) { return dlt645_get_vratio(idx); } else { return -1.0; } } double meter_get_cratio(int model, int idx) { if (model == DEVM_DTSD1352) { return -1.0; } else if (model == DEVM_DLT645) { return dlt645_get_cratio(idx); } else { return -1.0; } } int meter_chk_state(int stat) { int ret = 0; int i = 0; int idx = 0; for (i = 1; i <= meter[1].model_nbr; i++) { if (meter[1].model[i] == DEVM_DTSD1352) { for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (dtsd1352_get_state(idx) != stat) { return -1; } } } else if (meter[1].model[i] == DEVM_DLT645) { for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (dlt645_get_state(idx) != stat) { return -1; } } } else if (meter[1].model[i] == DEVM_ABB_B23_4) { for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (abb_b23_4_get_state(idx) != stat) { return -1; } } } else { return -1; } } return ret; } int meter_get_tool_data(char *buf) { int i = 0; int idx = 0; char temp_buf[2048]; sprintf(buf, "" REVERSE " METER " NONE " model_nbr:%d\n", meter[1].model_nbr); for (i = 1; i <= meter[1].model_nbr; i++) { strcat(buf, "model: "); if (meter[1].model[i] == DEVM_DTSD1352) { strcat(buf, "dtsd1352\n"); for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { memset(temp_buf, 0, sizeof(temp_buf)); dtsd1352_get_tool_data(idx, temp_buf); strcat(buf, temp_buf); } } else if (meter[1].model[i] == DEVM_DLT645) { strcat(buf, "dlt645\n"); for (idx = 1; idx <= dlt645_get_nbr(); idx++) { memset(temp_buf, 0, sizeof(temp_buf)); dlt645_get_tool_data(idx, temp_buf); strcat(buf, temp_buf); } } else if (meter[1].model[i] == DEVM_ABB_B23_4) { strcat(buf, "abb_b23/4\n"); for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { memset(temp_buf, 0, sizeof(temp_buf)); abb_b23_4_get_tool_data(idx, temp_buf); strcat(buf, temp_buf); } } else if (meter[1].model[i] == DEVM_ADL200) { strcat(buf, "adl200\n"); for (idx = 1; idx <= adl200_get_nbr(); idx++) { memset(temp_buf, 0, sizeof(temp_buf)); adl200_get_tool_data(idx, temp_buf); strcat(buf, temp_buf); } } else { return -1; } } return 0; } int meter_get_tbmqtt_data(char *buf) { int i = 0; int idx = 0; char buf_temp[1024]; for (i = 1; i <= meter[1].model_nbr; i++) { if (meter[1].model[i] == DEVM_DTSD1352) { for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (dtsd1352_get_comm_st(idx) != COMMST_NORMAL) { if (i == meter[1].model_nbr && idx == dtsd1352_get_nbr() && strlen(buf) > 1) { buf[strlen(buf) - 1] = 0; } continue; } memset(buf_temp, 0, sizeof(buf_temp)); dtsd1352_get_tbmqtt_data(idx, buf_temp); strcat(buf, buf_temp); if (idx != dtsd1352_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else if (meter[1].model[i] == DEVM_DLT645) { for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (dlt645_get_comm_st(idx) != COMMST_NORMAL) { if (i == meter[1].model_nbr && idx == dlt645_get_nbr() && strlen(buf) > 1) { buf[strlen(buf) - 1] = 0; } continue; } memset(buf_temp, 0, sizeof(buf_temp)); dlt645_get_tbmqtt_data(idx, buf_temp); strcat(buf, buf_temp); if (idx != dlt645_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else if (meter[1].model[i] == DEVM_ABB_B23_4) { for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (abb_b23_4_get_comm_st(idx) != COMMST_NORMAL) { if (i == meter[1].model_nbr && idx == abb_b23_4_get_nbr() && strlen(buf) > 1) { buf[strlen(buf) - 1] = 0; } continue; } memset(buf_temp, 0, sizeof(buf_temp)); abb_b23_4_get_tbmqtt_data(idx, buf_temp); strcat(buf, buf_temp); if (idx != abb_b23_4_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else if (meter[1].model[i] == DEVM_ADL200) { for (idx = 1; idx <= adl200_get_nbr(); idx++) { if (adl200_get_comm_st(idx) != COMMST_NORMAL) { if (i == meter[1].model_nbr && idx == adl200_get_nbr() && strlen(buf) > 1) { buf[strlen(buf) - 1] = 0; } continue; } memset(buf_temp, 0, sizeof(buf_temp)); adl200_get_tbmqtt_data(idx, buf_temp); strcat(buf, buf_temp); if (idx != adl200_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else { if (strlen(buf) > 1) buf[strlen(buf) - 1] = 0; return -1; } } } int meter_get_cloud_data(int ctn_idx, char *buf) { int i = 0; int idx = 0; char buf_temp[1024]; for (i = 1; i <= meter[1].model_nbr; i++) { if (meter[1].model[i] == DEVM_DTSD1352) { for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (dtsd1352_get_comm_st(idx) != COMMST_NORMAL) { if (i == meter[1].model_nbr && idx == dtsd1352_get_nbr() && strlen(buf) > 1) { buf[strlen(buf) - 1] = 0; } continue; } memset(buf_temp, 0, sizeof(buf_temp)); dtsd1352_get_cloud_data(ctn_idx, idx, buf_temp); strcat(buf, buf_temp); if (idx != dtsd1352_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else if (meter[1].model[i] == DEVM_ABB_B23_4) { for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (abb_b23_4_get_comm_st(idx) != COMMST_NORMAL) { if (i == meter[1].model_nbr && idx == abb_b23_4_get_nbr() && strlen(buf) > 1) { buf[strlen(buf) - 1] = 0; } continue; } memset(buf_temp, 0, sizeof(buf_temp)); abb_b23_4_get_cloud_data(ctn_idx, idx, buf_temp); strcat(buf, buf_temp); if (idx != abb_b23_4_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else if (meter[1].model[i] == DEVM_DLT645) { for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (i == meter[1].model_nbr && idx == dlt645_get_nbr() && strlen(buf) > 1) { buf[strlen(buf) - 1] = 0; } continue; } } else if (meter[1].model[i] == DEVM_ADL200) { for (idx = 1; idx <= adl200_get_nbr(); idx++) { if (adl200_get_comm_st(idx) != COMMST_NORMAL) { if (i == meter[1].model_nbr && idx == adl200_get_nbr() && strlen(buf) > 1) { buf[strlen(buf) - 1] = 0; } continue; } memset(buf_temp, 0, sizeof(buf_temp)); adl200_get_cloud_data(ctn_idx, idx, buf_temp); strcat(buf, buf_temp); if (idx != adl200_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else { if (strlen(buf) > 1) buf[strlen(buf) - 1] = 0; return -1; } } } int meter_get_bkds_data(char *buf) { int i = 0; int idx = 0; char buf_temp[4096]; sprintf(buf, "\"meter\":["); for (i = 1; i <= meter[1].model_nbr; i++) { if (meter[1].model[i] == DEVM_DTSD1352) { for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { strcat(buf, "{"); dtsd1352_get_bkds_data(idx, buf_temp); strcat(buf, buf_temp); strcat(buf, "}"); if (idx != dtsd1352_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else if (meter[1].model[i] == DEVM_ABB_B23_4) { for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { strcat(buf, "{"); abb_b23_4_get_bkds_data(idx, buf_temp); strcat(buf, buf_temp); strcat(buf, "}"); if (idx != abb_b23_4_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else if (meter[1].model[i] == DEVM_DLT645) { for (idx = 1; idx <= dlt645_get_nbr(); idx++) { strcat(buf, "{"); dlt645_get_bkds_data(idx, buf_temp); strcat(buf, buf_temp); strcat(buf, "}"); if (idx != dlt645_get_nbr() || i != meter[1].model_nbr) { strcat(buf, ","); } } } else { } } strcat(buf, "]"); return 0; } int meter_get_ctn_ap(double *ap) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#ctn") == 0) { *ap = dlt645_get_com_ap(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#ctn") == 0) { *ap = dtsd1352_get_com_ap(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#ctn") == 0) { *ap = abb_b23_4_get_com_ap(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_ctn_pos_ae(double *pos_ae) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#ctn") == 0) { *pos_ae = dlt645_get_pos_ae(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#ctn") == 0) { *pos_ae = dtsd1352_get_pos_ae(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#ctn") == 0) { *pos_ae = abb_b23_4_get_pos_ae(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_ctn_neg_ae(double *neg_ae) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#ctn") == 0) { *neg_ae = dlt645_get_neg_ae(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#ctn") == 0) { *neg_ae = dtsd1352_get_neg_ae(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#ctn") == 0) { *neg_ae = abb_b23_4_get_neg_ae(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_ctn_com_ae(double *com_ae) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#ctn") == 0) { *com_ae = dlt645_get_com_ae(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#ctn") == 0) { *com_ae = dtsd1352_get_com_ae(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#ctn") == 0) { *com_ae = abb_b23_4_get_com_ae(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_ctn_meter_state(int *state) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#ctn") == 0) { *state = dlt645_get_state(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#ctn") == 0) { *state = dtsd1352_get_state(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#ctn") == 0) { *state = abb_b23_4_get_state(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_aux_ap(double *ap) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#aux") == 0) { *ap = dlt645_get_com_ap(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#aux") == 0) { *ap = dtsd1352_get_com_ap(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#aux") == 0) { *ap = abb_b23_4_get_com_ap(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_aux_pos_ae(double *pos_ae) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#aux") == 0) { *pos_ae = dlt645_get_pos_ae(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#aux") == 0) { *pos_ae = dtsd1352_get_pos_ae(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#aux") == 0) { *pos_ae = abb_b23_4_get_pos_ae(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_aux_neg_ae(double *neg_ae) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#aux") == 0) { *neg_ae = dlt645_get_neg_ae(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#aux") == 0) { *neg_ae = dtsd1352_get_neg_ae(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#aux") == 0) { *neg_ae = abb_b23_4_get_neg_ae(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_aux_com_ae(double *com_ae) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#aux") == 0) { *com_ae = dlt645_get_com_ae(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#aux") == 0) { *com_ae = dtsd1352_get_com_ae(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#aux") == 0) { *com_ae = abb_b23_4_get_com_ae(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_get_aux_meter_state(int *state) { int i = 0; int idx = 0; int ret = -1; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (strcmp(dlt645_get_info_str(idx), "#aux") == 0) { *state = dlt645_get_state(idx); return 0; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (strcmp(dtsd1352_get_info_str(idx), "#aux") == 0) { *state = dtsd1352_get_state(idx); return 0; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (strcmp(abb_b23_4_get_info_str(idx), "#aux") == 0) { *state = abb_b23_4_get_state(idx); return 0; } } break; default: return -1; break; } } return ret; } int meter_chk_all_state(int state) { int i = 0; int ret = 0; int idx = 0; for (i = 1; i <= meter[1].model_nbr; i++) { switch (meter[1].model[i]) { case DEVM_DLT645: for (idx = 1; idx <= dlt645_get_nbr(); idx++) { if (dlt645_get_state(idx) != state) { return -1; } } break; case DEVM_DTSD1352: for (idx = 1; idx <= dtsd1352_get_nbr(); idx++) { if (dtsd1352_get_state(idx) != state) { return -1; } } break; case DEVM_ABB_B23_4: for (idx = 1; idx <= abb_b23_4_get_nbr(); idx++) { if (abb_b23_4_get_state(idx) != state) { return -1; } } break; default: return -1; break; } } return ret; } int meter_get_init_data(int ctn_idx, char *buf) { int model = meter[1].model; if (model == DEVM_ZH200) { return adl200_get_init_data(ctn_idx, 1, buf); } else { return NULL; } return 0; } int meter_get_modbus_data(int model, int idx, unsigned short *data) { if (model == DEVM_ZH200) { return adl200_get_modbus_data(1, data); } else { data[0] = (unsigned short)model; data[1] = (unsigned short)0; } return 0; } // //load,ctn,aux,com // int meter_get_load_com_ae(double* com_ae); // int meter_get_load_pos_ae(double* pos_ae); // int meter_get_load_neg_ae(double* neg_ae); // int meter_get_load_com_ap(double* com_ap); // typedef int (*mFunc_p)(double* value); // struct meter_comm_func_st{ // mFunc_p get_com_ae; // mFunc_p get_pos_ae; // mFunc_p get_neg_ae; // mFunc_p get_com_ap; // }; // struct meter_t{ // struct meter_comm_func_st load_f; // struct meter_comm_func_st ctn_f; // struct meter_comm_func_st aux_f; // struct meter_comm_func_st com_f; // }; // void meter_comm_func_init(void) // { // int i = 0; // int idx = 0; // for(i = 1;i <= meter[1].model_nbr;i ++){ // if(meter[1].model[i] == DEVM_DTSD1352){ // for(idx = 1;idx <= dtsd1352_get_nbr;i++){ // if(strcmp(dtsd1352_get_info_str(idx),"aux") == 0){ // meter->model=; // }else if(strcmp(dtsd1352_get_info_str(idx),"com") == 0){ // }else if(strcmp(dtsd1352_get_info_str(idx),"load") == 0){ // }else if(strcmp(dtsd1352_get_info_str(idx),"transf") == 0){ // } // } // }else if(meter[1].model[i] == DEVM_DLT645){ // }else if(meter[1].model[i] == DEVM_ABB_B23_4){ // } // } // }