#include "plt.h" #include "mdl.h" int ia, ib, ic; int iductIa, iductIb, iductIc; int ua, ub, uc; int uab, ubc, uca; int gf; int grid_phrases; int apA, apB, apC; int appA, appB, appC; int ipA, ipB, ipC; int total_ap; int aps; int total_app; int total_ip; double pf = 1; int v = 330; int pos_v = 170; int neg_v = -170; int bat_v = 880; int bat_i = 0; int dc_ap = 0; int dc_i = 0; int work_stat = 0; double igbt_temp = 0; double ind_temp = 0; int work_mode = 0; int dc_acc_chg_amout = 0; int dc_daily_chg_amout = 0; int dc_acc_dhg_amout = 0; int dc_daily_dhg_amout = 0; int ac_acc_chg_amout = 0; int ac_daily_chg_amout = 0; int ac_acc_dhg_amout = 0; int ac_daily_dhg_amout = 0; int hardware_fault1 = 0; int hardware_fault2 = 0; int grid_fault = 0; int bus_fault = 0; int ac_capacitance_fault = 0; int sys_fault = 0; int switch_fault = 0; int other_fault = 0; int power_on; void mdl_sim() { static int s_power_on = 0; static int boot = 0; static int boot_tick = 0; if (s_power_on == 0 && s_power_on != power_on) { s_power_on = power_on; boot = 1; boot_tick = 0; } if(boot == 1 && boot_tick++ > 1000) { boot = 0; } } void mdl_prepare() { // power_on = 0; // aps = 0; // uab = ubc = uca = 0; // ua = ub = uc = 0; // ia = ib = ic = 0; // iductIa = iductIb = iductIc = 0; // gf = 55; // grid_phrases = 0; // 正 // apA = apB = apC = 0; // appA = appB = appC = 0; // ipA = ipB = ipC = 0; // total_ap = 0; // total_app = 0; // total_ip = 0; // pf = 1; // v = 330; // pos_v = 170; // neg_v = -170; // bat_v = 880; // bat_i = 0; // dc_ap = 0; // dc_i = 0; // work_stat = 0; // igbt_temp = 0; // ind_temp = 0; // work_mode = 0; // dc_acc_chg_amout = 0; // dc_daily_chg_amout = 0; // dc_acc_dhg_amout = 0; // dc_daily_dhg_amout = 0; // ac_acc_chg_amout = 0; // ac_daily_chg_amout = 0; // ac_acc_dhg_amout = 0; // ac_daily_dhg_amout = 0; // hardware_fault1 = 0; // hardware_fault2 = 0; // grid_fault = 0; // bus_fault = 0; // ac_capacitance_fault = 0; // sys_fault = 0; // switch_fault = 0; // other_fault = 0; //温湿度传感器 MDL.env_temp = 20; MDL.env_humi = 65; } void from_dev_to_modbus() { // usHoldingRegisters[0x6020] = uab; // usHoldingRegisters[0x6021] = ubc; // usHoldingRegisters[0x6022] = uca; // usHoldingRegisters[0x6023] = ua; // usHoldingRegisters[0x6024] = ub; // usHoldingRegisters[0x6025] = uc; // usHoldingRegisters[0x6026] = ia; // usHoldingRegisters[0x6027] = ib; // usHoldingRegisters[0x6028] = ic; // usHoldingRegisters[0x6029] = iductIa; // usHoldingRegisters[0x602A] = iductIb; // usHoldingRegisters[0x602B] = iductIc; // usHoldingRegisters[0x602C] = gf; // usHoldingRegisters[0x602D] = grid_phrases; // usHoldingRegisters[0x6030] = apA; // usHoldingRegisters[0x6031] = apB; // usHoldingRegisters[0x6032] = apC; // usHoldingRegisters[0x6033] = appA; // usHoldingRegisters[0x6034] = appB; // usHoldingRegisters[0x6035] = appC; // usHoldingRegisters[0x6036] = ipA; // usHoldingRegisters[0x6037] = ipB; // usHoldingRegisters[0x6038] = ipC; // usHoldingRegisters[0x6039] = total_ap; // usHoldingRegisters[0x603A] = total_ip; // usHoldingRegisters[0x603B] = total_app; // usHoldingRegisters[0x603C] = pf; // usHoldingRegisters[0x6050] = v; // usHoldingRegisters[0x6051] = pos_v; // usHoldingRegisters[0x6052] = neg_v; // usHoldingRegisters[0x6053] = bat_v; // usHoldingRegisters[0x6054] = bat_i; // usHoldingRegisters[0x6055] = dc_ap; // usHoldingRegisters[0x6056] = dc_i; // usHoldingRegisters[0x6057] = work_stat; // usHoldingRegisters[0x6058] = igbt_temp; // usHoldingRegisters[0x6059] = env_temp; // usHoldingRegisters[0x605A] = ind_temp; // usHoldingRegisters[0x605B] = work_mode; // usHoldingRegisters[0x6010] = dc_acc_chg_amout & 0xFFFF0000; // usHoldingRegisters[0x6011] = dc_acc_chg_amout & 0x0000FFFF; // usHoldingRegisters[0x6012] = dc_daily_chg_amout & 0xFFFF0000; // usHoldingRegisters[0x6013] = dc_daily_chg_amout & 0x0000FFFF; // usHoldingRegisters[0x6014] = dc_acc_dhg_amout & 0xFFFF0000; // usHoldingRegisters[0x6015] = dc_acc_dhg_amout & 0x0000FFFF; // usHoldingRegisters[0x6016] = dc_daily_dhg_amout & 0xFFFF0000; // usHoldingRegisters[0x6017] = dc_daily_dhg_amout & 0x0000FFFF; // usHoldingRegisters[0x6018] = ac_acc_chg_amout & 0xFFFF0000; // usHoldingRegisters[0x6019] = ac_acc_chg_amout & 0x0000FFFF; // usHoldingRegisters[0x601A] = ac_daily_chg_amout & 0xFFFF0000; // usHoldingRegisters[0x601B] = ac_daily_chg_amout & 0x0000FFFF; // usHoldingRegisters[0x601C] = ac_acc_dhg_amout & 0xFFFF0000; // usHoldingRegisters[0x601D] = ac_acc_dhg_amout & 0x0000FFFF; // usHoldingRegisters[0x601E] = ac_daily_dhg_amout & 0xFFFF0000; // usHoldingRegisters[0x601F] = ac_daily_dhg_amout & 0x0000FFFF; // usHoldingRegisters[0x0D57] = aps; // usHoldingRegisters[0x0291] = power_on; // usHoldingRegisters[0x1700] = hardware_fault1; // usHoldingRegisters[0x1701] = hardware_fault2; // usHoldingRegisters[0x1702] = grid_fault; // usHoldingRegisters[0x1703] = bus_fault; // usHoldingRegisters[0x1704] = ac_capacitance_fault; // usHoldingRegisters[0x1705] = sys_fault; // usHoldingRegisters[0x1706] = switch_fault; // usHoldingRegisters[0x1707] = other_fault; //温湿度传感器 usHoldingRegisters[0x0000] = MDL.env_temp; usHoldingRegisters[0x0001] = MDL.env_humi; } int from_modbus_to_dev() { // uab = usHoldingRegisters[0x6020]; // ubc = usHoldingRegisters[0x6021]; // uca = usHoldingRegisters[0x6022]; // ua = usHoldingRegisters[0x6023]; // ub = usHoldingRegisters[0x6024]; // uc = usHoldingRegisters[0x6025]; // ia = usHoldingRegisters[0x6026]; // ib = usHoldingRegisters[0x6027]; // ic = usHoldingRegisters[0x6028]; // iductIa = usHoldingRegisters[0x6029]; // iductIb = usHoldingRegisters[0x602A]; // iductIc = usHoldingRegisters[0x602B]; // gf = usHoldingRegisters[0x602C]; // grid_phrases = usHoldingRegisters[0x602D]; // apA = usHoldingRegisters[0x6030]; // apB = usHoldingRegisters[0x6031]; // apC = usHoldingRegisters[0x6032]; // appA = usHoldingRegisters[0x6033]; // appB = usHoldingRegisters[0x6034]; // appC = usHoldingRegisters[0x6035]; // ipA = usHoldingRegisters[0x6036]; // ipB = usHoldingRegisters[0x6037]; // ipC = usHoldingRegisters[0x6038]; // total_ap = usHoldingRegisters[0x6039]; // total_ip = usHoldingRegisters[0x603A]; // total_app = usHoldingRegisters[0x603B]; // pf = usHoldingRegisters[0x603C]; // v = usHoldingRegisters[0x6050]; // pos_v = usHoldingRegisters[0x6051]; // neg_v = usHoldingRegisters[0x6052]; // bat_v = usHoldingRegisters[0x6053]; // bat_i = usHoldingRegisters[0x6054]; // dc_ap = usHoldingRegisters[0x6055]; // dc_i = usHoldingRegisters[0x6056]; // work_stat = usHoldingRegisters[0x6057]; // igbt_temp = usHoldingRegisters[0x6058]; // ind_temp = usHoldingRegisters[0x605A]; // work_mode = usHoldingRegisters[0x605B]; // dc_acc_chg_amout = usHoldingRegisters[0x6010] << 16 | usHoldingRegisters[0x6011]; // dc_daily_chg_amout = usHoldingRegisters[0x6012] << 16 | usHoldingRegisters[0x6013]; // dc_acc_dhg_amout = usHoldingRegisters[0x6014] << 16 | usHoldingRegisters[0x6015]; // dc_daily_dhg_amout = usHoldingRegisters[0x6016] << 16 | usHoldingRegisters[0x6017]; // ac_acc_chg_amout = usHoldingRegisters[0x6018] << 16 | usHoldingRegisters[0x6019]; // ac_daily_chg_amout = usHoldingRegisters[0x601A] << 16 | usHoldingRegisters[0x601B]; // ac_acc_dhg_amout = usHoldingRegisters[0x601C] << 16 | usHoldingRegisters[0x601D]; // ac_daily_dhg_amout = usHoldingRegisters[0x601E] << 16 | usHoldingRegisters[0x601F]; // aps = usHoldingRegisters[0x0D57]; // power_on = usHoldingRegisters[0x0291]; // hardware_fault1 = usHoldingRegisters[0x1700]; // hardware_fault2 = usHoldingRegisters[0x1701]; // grid_fault = usHoldingRegisters[0x1702]; // bus_fault = usHoldingRegisters[0x1703]; // ac_capacitance_fault = usHoldingRegisters[0x1704]; // sys_fault = usHoldingRegisters[0x1705]; // switch_fault = usHoldingRegisters[0x1706]; // other_fault = usHoldingRegisters[0x1707]; } void update_states() { } static void *mdl_thrd_main(void *param) { mdl_prepare(); from_dev_to_modbus(); while (1) { from_modbus_to_dev(); mdl_sim(); from_dev_to_modbus(); usleep(10000); /* 10ms */ } return NULL; } int mdl_init() { log_dbg("%s, ++", __func__); int ret = 0; pthread_t xthrd; if (pthread_create(&xthrd, NULL, mdl_thrd_main, NULL) != 0) { log_dbg("%s, pthread_create fail", __func__); ret = -1; } log_dbg("%s, --, ret: %d", __func__, ret); return ret; }