123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 |
- #include "evc.h"
- #include "evc_comm.h"
- #include "evc_sm.h"
- #include "plt.h"
- int evc_nbr;
- struct evc_t evc[EVC_NBR_MAX + 1];
- int evc_send_sm_cmd(int idx, int cmd)
- {
- int ret = 0;
- struct evc_t *dev = &evc[idx];
- dev->cmd = cmd;
- log_dbg("%s, idx:%d, cmd:%d, ret:%d", __func__, idx, cmd, ret);
- return ret;
- }
- int evc_send_sm_cmd_all(int cmd)
- {
- int ret = 0;
- int idx;
- struct evc_t *dev = NULL;
- for (idx = 1; idx <= evc_nbr; idx++)
- {
- evc_send_sm_cmd(idx, cmd);
- }
- return ret;
- }
- int evc_chk_state_all(int stat)
- {
- int idx;
- for (idx = 1; idx <= evc_nbr; idx++)
- {
- if (evc_get_state(idx) != stat)
- {
- return -1;
- }
- }
- return 0;
- }
- int evc_get_cmd(int idx)
- {
- return evc[idx].cmd;
- }
- void evc_reset_cmd(int idx)
- {
- evc[idx].cmd = CMD_SM_DONE;
- }
- int evc_get_state(int idx)
- {
- return evc[idx].sm.state;
- }
- void evc_aux(int idx)
- {
- static int cnt = 0;
- if (cnt < evc_nbr && mqtt_get_state() == SMST_READY)
- {
- cnt++;
- if (cnt >= evc_nbr)
- {
- cloud.fa_init = 0;
- }
- char buf[4096] = {0};
- evc_get_init_data(ctn_get_idx_in_ess(), idx, buf);
- cloud_send_init(buf);
- }
- }
- static void *evc_thrd_main(void *param)
- {
- struct evc_t *dev = NULL;
- int idx;
- log_dbg("%s, ++", __func__);
- for (idx = 1; idx <= evc_nbr; idx++)
- {
- evc_sm_init(idx);
- evc_comm_init(idx);
- }
- while (1)
- {
- for (idx = 1; idx <= evc_nbr; idx++)
- {
- evc_comm_dac(idx);
- evc_sm(idx);
- evc_aux(idx);
- }
- sleep(1);
- //usleep(500 * 1000);
- }
- log_dbg("%s, --, idx:%d", __func__, idx);
- }
- static int evc_dbcb(void *para, int ncolumn, char **columnvalue, char *columnname[])
- {
- int i;
- struct dbcbparam_t *pcbparam = (struct dbcbparam_t *)para;
- struct evc_t *pdev;
- int idx = 0;
- pcbparam->nrow++;
- log_dbg("%s, ++, row:%d, col:%d", __func__, pcbparam->nrow, ncolumn);
- // default value
- pdev = &evc[pcbparam->nrow];
- for (i = 0; i < ncolumn; i++)
- {
- if (strcmp("chan_idx", columnname[i]) == 0)
- {
- pdev->comm.chanidx = atoi(columnvalue[i]);
- }
- else if (strcmp("info", columnname[i]) == 0)
- {
- strcpy(pdev->szinfo, columnvalue[i]);
- }
- else if (strcmp("adr", columnname[i]) == 0)
- {
- pdev->comm.adr = atoi(columnvalue[i]);
- }
- else if (strcmp("idx", columnname[i]) == 0)
- {
- pdev->idx = atoi(columnvalue[i]);
- }
- else if (strcmp("devid", columnname[i]) == 0)
- {
- if (columnvalue[i] != NULL && strcmp(columnvalue[i], "") != 0)
- {
- strcpy(pdev->szdev_id, columnvalue[i]);
- }
- else
- {
- log_dbg("%s, devid is null", __func__);
- }
- }
- }
- pcbparam->ret = 0;
- log_dbg("%s, --,ret:%d", __func__, pcbparam->ret);
- return 0;
- }
- int evc_init(void)
- {
- pthread_t thrd;
- int result = 0;
- int ret = 0;
- int idx = 0;
- struct evc_t *dev = NULL;
- char *errmsg = NULL;
- char sql[1024];
- struct dbcbparam_t cbparam;
- sqlite3 *db = plt_get_ctndb();
- log_dbg("%s, ++", __func__);
- plt_lock_ctndb();
- sprintf(sql, "select * from evc");
- cbparam.nrow = 0;
- result = sqlite3_exec(db, sql, evc_dbcb, (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
- {
- evc_nbr = cbparam.nrow;
- cbparam.nrow = 0;
- db = plt_get_devdb();
- plt_lock_devdb();
- sprintf(sql, "select * from evc");
- result = sqlite3_exec(db, sql, evc_dbcb, (void *)&cbparam, &errmsg);
- plt_unlock_devdb();
- for (int i = 1; i <= evc_nbr; ++i)
- {
- if (strcmp(evc[i].szdev_id, "") == 0)
- {
- if (get_snow_id(evc[i].szdev_id) != 0)
- {
- ret = -4;
- }
- else
- {
- char sql[1024];
- char *errmsg = NULL;
- sprintf(sql, "update evc set devid=\"%s\" where idx=%d", evc[i].szdev_id, evc[i].idx);
- plt_lock_devdb();
- int rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
- plt_unlock_devdb();
- if (rc != SQLITE_OK)
- {
- log_dbg("%s, failed to update level device id:%s", __func__, errmsg);
- ret = -4;
- goto leave;
- }
- else
- {
- log_dbg("%s, update device id:%s", __func__, evc[i].szdev_id);
- }
- }
- }
- }
- if (pthread_create(&thrd, NULL, evc_thrd_main, NULL) != 0)
- {
- ret = -1;
- log_dbg("%s, create evc thrd main fail", __func__);
- }
- }
- leave:
- log_dbg("%s--, ret:%d", __func__, ret);
- return ret;
- }
- int evc_get_addr(int idx)
- {
- return evc[idx].comm.adr;
- }
- int evc_set_dev_comp_start_temp(int idx, int val)
- {
- return 0;
- }
- int evc_set_dev_comp_gap_temp(int idx, int val)
- {
- return 0;
- }
- int evc_set_dev_heat_start_temp(int idx, int val)
- {
- // evc_set_dev_heat_stop_temp
- }
- int evc_set_dev_heat_gap_temp(int idx, int val)
- {
- return 0;
- }
- int evc_get_comm_st(int idx)
- {
- struct evc_t *dev = &evc[idx];
- struct comm_t *comm = &dev->comm;
- return comm_get_state(comm);
- }
- int evc_get_chan_idx(int idx)
- {
- struct evc_t *dev = &evc[idx];
- struct comm_t *comm = &dev->comm;
- return comm_get_chan_idx(comm);
- }
- char *evc_get_comm_st_str(int idx)
- {
- struct evc_t *dev = &evc[idx];
- struct comm_t *comm = &dev->comm;
- return comm_get_state_str(comm);
- }
- int evc_get_tick(int idx)
- {
- return evc[idx].sm.tick;
- }
- int evc_get_nbr()
- {
- return evc_nbr;
- }
- int evc_get_workstat(int idx)
- {
- return 0;
- }
- int evc_get_infan_stat(int idx)
- {
- return 0;
- }
- int evc_get_outfan_stat(int idx)
- {
- return 0;
- }
- int evc_get_cmp_stat(int idx)
- {
- return 0;
- }
- int evc_get_rtnwind_temp(int idx)
- {
- return 0;
- }
- int evc_get_eva_temp(int idx)
- {
- return 0;
- }
- int evc_get_cond_temp(int idx)
- {
- return 0;
- }
- int evc_get_infan_spd(int idx)
- {
- return 0;
- }
- int evc_get_outfan_spd(int idx)
- {
- return 0;
- }
- int evc_get_tool_data(int idx, char *buf)
- {
- if (idx < 1 || idx > evc_nbr || buf == NULL)
- return -1;
- struct evc_t *dev = &evc[idx];
- struct statemachine_t *sm = &dev->sm;
- struct comm_t *comm = &dev->comm;
- char buf_temp[1024];
- sm_get_summary(sm, buf_temp, sizeof(buf_temp));
- sprintf(buf, " [%d] %s ", idx, buf_temp);
- comm_get_summary(comm, buf_temp, sizeof(buf_temp));
- strcat(buf, buf_temp);
- sprintf(buf_temp, "\ndev id :%s sys_started:" GREEN "%d" NONE ",sys_run_state:" YELLOW "%s" NONE ",error level:" YELLOW "%d" NONE ",error code:" YELLOW "%d" NONE ",\
- elc_heat_state:%d,pump_state:%d,comp_state:%d,comp_heat_state:%d,\
- fan1_state:%d,fan2_state:%d,fan3_state:%d,\
- comp_rpm:%d, pump_rpm:%d,\
- in_water_temp:" YELLOW "%.1f" NONE ",out_water_temp:" YELLOW "%.1f" NONE ",ev_temp:" YELLOW "%.1f" NONE ",in_water_press:" YELLOW "%.1f" NONE ",\
- out_water_press:" YELLOW "%.1f" NONE "\n",
- dev->szdev_id,
- dev->started,
- dev->runModeStr, dev->err_lvl, dev->err_code, dev->elec_heat_state, dev->pump_state, dev->comp_state, dev->comp_heat_state,
- dev->fan1_state, dev->fan2_state, dev->fan3_state,
- dev->comp_rpm, dev->pump_rpm,
- dev->in_water_temp, dev->out_water_temp, dev->ev_temp, dev->in_water_press,
- dev->out_water_press);
- strcat(buf, buf_temp);
- return 0;
- }
- int evc_get_tbmqtt_data(int idx, char *buf)
- {
- struct evc_t *dev = &evc[idx];
- sprintf(buf, "'ac%d_state':'%s', 'ac%d_rtnwater_pre':%.1f,'ac%d_outwater_pre':%.1f,'ac%d_rtnwater_t':%.1f,'ac%d_outwater_t':%.1f,'ac%d_outside_t':%.1f, 'ac%d_run_mode':'%s',\
- ac%d_comp_state:%d,ac%d_comp_heat_state:%d,ac%d_elec_heat_state:%d,ac%d_pump_state:%d,ac%d_fan1_state:%d,ac%d_fan2_state:%d,ac%d_fan3_state:%d,ac%d_comp_rpm:%d,ac%d_pump_rpm:%d,\
- ac%d_err_code:%d,ac%d_err_lvl:%d,ac%d_in_out_water_press_sensor_err:%d,ac%d_ov_err:%d,ac%d_uv_err:%d,ac%d_lack_water_err:%d,ac%d_pump_err:%d,ac%d_pump_err_lock:%d,\
- ac%d_out_water_press_sensor_err:%d,ac%d_in_water_press_sensor_err:%d,ac%d_up_sensor_err:%d,ac%d_out_water_temp_sensor_err:%d,ac%d_sys_low_pressure_err:%d,ac%d_sys_high_pressure_switch_err:%d,\
- ac%d_out_air_over_temp_err:%d,ac%d_can_comm_err:%d,ac%d_in_air_temp_sensor_err:%d,ac%d_cooling_sys_err:%d,ac%d_in_air_over_temp_err:%d,ac%d_comp_VFD_ov_err:%d,ac%d_comp_VFD_uv_err:%d,\
- ac%d_comp_VFD_oc_err:%d,ac%d_comp_VFD_ot_err:%d,ac%d_comp_VFD_comm_err:%d,ac%d_comp_VFD_miss_phrase_err:%d,ac%d_comp_VFD_others_err:%d,ac%d_pump_press_diff_low_err:%d,\
- ac%d_out_air_over_temp_lock:%d,ac%d_sys_high_pressure_lock:%d,ac%d_sys_low_pressure_lock:%d,ac%d_comp_VFD_over_current_lock:%d,ac%d_comp_VFD_over_voltage_lock:%d,\
- ac%d_comp_VFD_under_voltage_lock:%d,ac%d_comp_VFD_over_temp_lock:%d,ac%d_comp_VFD_comm_lock:%d,ac%d_comp_VFD_miss_phrase_lock:%d,ac%d_comp_VFD_others_lock:%d,\
- ac%d_high_press_sensor_err:%d,ac%d_env_temp_sensor_err:%d,ac%d_in_water_temp_sensor_err:%d,ac%d_out_air_temp_sensor_err:%d,ac%d_condensate_sensor_err:%d,\
- ac%d_unexpected_power_off_err:%d,ac%d_out_water_low_temp_err:%d,ac%d_out_water_high_temp_err:%d,ac%d_out_water_over_press_err:%d",
- idx, dev->sm.szState,
- idx, dev->in_water_press,
- idx, dev->out_water_press,
- idx, dev->in_water_temp,
- idx, dev->out_water_temp,
- idx, dev->ev_temp,
- idx, dev->runModeStr,
- idx, dev->comp_state,
- idx, dev->comp_heat_state,
- idx, dev->elec_heat_state,
- idx, dev->pump_state,
- idx, dev->fan1_state,
- idx, dev->fan2_state,
- idx, dev->fan3_state,
- idx, dev->comp_rpm,
- idx, dev->pump_rpm,
- idx, dev->err_code,
- idx, dev->err_lvl,
- idx, dev->in_out_water_press_sensor_err,
- idx, dev->ov_err,
- idx, dev->uv_err,
- idx, dev->lack_water_err,
- idx, dev->pump_err,
- idx, dev->pump_err_lock,
- idx, dev->out_water_press_sensor_err,
- idx, dev->in_water_press_sensor_err,
- idx, dev->up_sensor_err,
- idx, dev->out_water_temp_sensor_err,
- idx, dev->sys_low_pressure_err,
- idx, dev->sys_high_pressure_switch_err,
- idx, dev->out_air_over_temp_err,
- idx, dev->can_comm_err,
- idx, dev->in_air_temp_sensor_err,
- idx, dev->cooling_sys_err,
- idx, dev->in_air_over_temp_err,
- idx, dev->comp_VFD_ov_err,
- idx, dev->comp_VFD_uv_err,
- idx, dev->comp_VFD_oc_err,
- idx, dev->comp_VFD_ot_err,
- idx, dev->comp_VFD_comm_err,
- idx, dev->comp_VFD_miss_phrase_err,
- idx, dev->comp_VFD_others_err,
- idx, dev->pump_press_diff_low_err,
- idx, dev->out_air_over_temp_lock,
- idx, dev->sys_high_pressure_lock,
- idx, dev->sys_low_pressure_lock,
- idx, dev->comp_VFD_over_current_lock,
- idx, dev->comp_VFD_over_voltage_lock,
- idx, dev->comp_VFD_under_voltage_lock,
- idx, dev->comp_VFD_over_temp_lock,
- idx, dev->comp_VFD_comm_lock,
- idx, dev->comp_VFD_miss_phrase_lock,
- idx, dev->comp_VFD_others_lock,
- idx, dev->high_press_sensor_err,
- idx, dev->env_temp_sensor_err,
- idx, dev->in_water_temp_sensor_err,
- idx, dev->out_air_temp_sensor_err,
- idx, dev->condensate_sensor_err,
- idx, dev->unexpected_power_off_err,
- idx, dev->out_water_low_temp_err,
- idx, dev->out_water_high_temp_err,
- idx, dev->out_water_over_press_err);
- return 0;
- }
- int evc_get_cloud_data(int ctn_idx, int idx, char *buf)
- {
- struct evc_t *dev = &evc[idx];
- sprintf(buf, "{\"device_id\":\"%s\", \"type\":4, \"rtnwater_pre\":%.1f,\"outwater_pre\":%.1f,\"rtnwater_t\":%.1f,\"outwater_t\":%.1f,\"outside_t\":%.1f,\"state\":\"%d\"}",
- dev->szdev_id,
- dev->in_water_press,
- dev->out_water_press,
- dev->in_water_temp,
- dev->out_water_temp,
- dev->ev_temp,
- dev->sm.state);
- return 0;
- }
- int evc_get_init_data(int ctn_idx, int idx, char *buf)
- {
- sprintf(buf, "{\"device_id\":\"%s\", \"type\":4, \"idx\":%d, \"pid\":\"%s\", \"config\":{\"chan_idx\":%d, \"adr\":%d }}",
- evc[idx].szdev_id,
- idx,
- ctn_get_dev_id(),
- evc[idx].comm.chanidx,
- evc[idx].comm.adr);
- return 0;
- }
- double evc_get_outwater_temp(int idx)
- {
- return evc[idx].out_water_temp;
- }
- double evc_get_rtwater_temp(int idx)
- {
- return evc[idx].in_water_temp;
- }
- double evc_get_outwater_press(int idx)
- {
- return evc[idx].out_water_press;
- }
- double evc_get_rtwater_press(int idx)
- {
- return evc[idx].in_water_press;
- }
- double evc_get_env_temp(int idx)
- {
- return evc[idx].ev_temp;
- }
- int evc_get_modbus_data(int idx,unsigned short* data)
- {
- struct evc_t *dev = &evc[idx];
- data[0] = (unsigned short)DEVM_EVC;
- data[1] = (unsigned short)1;
- data[2] = (unsigned short)dev->sm.state;
- data[3] = (unsigned short)dev->sm.step;
- data[4] = (unsigned short)dev->sm.err;
- data[5] = (unsigned short)dev->comm.adr;
- data[6] = (unsigned short)dev->comm.state;
- data[7] = (unsigned short)dev->runMode;
- // data[8] = (unsigned short)4;
- // data[9] = (unsigned short)25;
- // data[10] = (unsigned short)25;
- // data[11] = (unsigned short)4;
- // data[12] = (unsigned short)4;
- data[13] = (unsigned short)dev->pump_rpm;
- data[14] = (unsigned short)dev->comp_rpm;
- data[15] = (unsigned short)dev->out_water_temp;
- data[16] = (unsigned short)dev->in_water_temp;
- data[17] = (unsigned short)dev->out_water_press;
- data[18] = (unsigned short)dev->in_water_press;
- //data[19] = (unsigned short)dev->pump_speed;
- return 0;
- }
|