123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- #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;
- }
|