mdl.c 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. #include "plt.h"
  2. #include "mdl.h"
  3. int ia, ib, ic;
  4. int iductIa, iductIb, iductIc;
  5. int ua, ub, uc;
  6. int uab, ubc, uca;
  7. int gf;
  8. int grid_phrases;
  9. int apA, apB, apC;
  10. int appA, appB, appC;
  11. int ipA, ipB, ipC;
  12. int total_ap;
  13. int aps;
  14. int total_app;
  15. int total_ip;
  16. double pf = 1;
  17. int v = 330;
  18. int pos_v = 170;
  19. int neg_v = -170;
  20. int bat_v = 880;
  21. int bat_i = 0;
  22. int dc_ap = 0;
  23. int dc_i = 0;
  24. int work_stat = 0;
  25. double igbt_temp = 0;
  26. double ind_temp = 0;
  27. int work_mode = 0;
  28. int dc_acc_chg_amout = 0;
  29. int dc_daily_chg_amout = 0;
  30. int dc_acc_dhg_amout = 0;
  31. int dc_daily_dhg_amout = 0;
  32. int ac_acc_chg_amout = 0;
  33. int ac_daily_chg_amout = 0;
  34. int ac_acc_dhg_amout = 0;
  35. int ac_daily_dhg_amout = 0;
  36. int hardware_fault1 = 0;
  37. int hardware_fault2 = 0;
  38. int grid_fault = 0;
  39. int bus_fault = 0;
  40. int ac_capacitance_fault = 0;
  41. int sys_fault = 0;
  42. int switch_fault = 0;
  43. int other_fault = 0;
  44. int power_on;
  45. void mdl_sim()
  46. {
  47. static int s_power_on = 0;
  48. static int boot = 0;
  49. static int boot_tick = 0;
  50. if (s_power_on == 0 && s_power_on != power_on)
  51. {
  52. s_power_on = power_on;
  53. boot = 1;
  54. boot_tick = 0;
  55. }
  56. if(boot == 1 && boot_tick++ > 1000)
  57. {
  58. boot = 0;
  59. }
  60. }
  61. void mdl_prepare()
  62. {
  63. // power_on = 0;
  64. // aps = 0;
  65. // uab = ubc = uca = 0;
  66. // ua = ub = uc = 0;
  67. // ia = ib = ic = 0;
  68. // iductIa = iductIb = iductIc = 0;
  69. // gf = 55;
  70. // grid_phrases = 0; // 正
  71. // apA = apB = apC = 0;
  72. // appA = appB = appC = 0;
  73. // ipA = ipB = ipC = 0;
  74. // total_ap = 0;
  75. // total_app = 0;
  76. // total_ip = 0;
  77. // pf = 1;
  78. // v = 330;
  79. // pos_v = 170;
  80. // neg_v = -170;
  81. // bat_v = 880;
  82. // bat_i = 0;
  83. // dc_ap = 0;
  84. // dc_i = 0;
  85. // work_stat = 0;
  86. // igbt_temp = 0;
  87. // ind_temp = 0;
  88. // work_mode = 0;
  89. // dc_acc_chg_amout = 0;
  90. // dc_daily_chg_amout = 0;
  91. // dc_acc_dhg_amout = 0;
  92. // dc_daily_dhg_amout = 0;
  93. // ac_acc_chg_amout = 0;
  94. // ac_daily_chg_amout = 0;
  95. // ac_acc_dhg_amout = 0;
  96. // ac_daily_dhg_amout = 0;
  97. // hardware_fault1 = 0;
  98. // hardware_fault2 = 0;
  99. // grid_fault = 0;
  100. // bus_fault = 0;
  101. // ac_capacitance_fault = 0;
  102. // sys_fault = 0;
  103. // switch_fault = 0;
  104. // other_fault = 0;
  105. //温湿度传感器
  106. MDL.env_temp = 20;
  107. MDL.env_humi = 65;
  108. }
  109. void from_dev_to_modbus()
  110. {
  111. // usHoldingRegisters[0x6020] = uab;
  112. // usHoldingRegisters[0x6021] = ubc;
  113. // usHoldingRegisters[0x6022] = uca;
  114. // usHoldingRegisters[0x6023] = ua;
  115. // usHoldingRegisters[0x6024] = ub;
  116. // usHoldingRegisters[0x6025] = uc;
  117. // usHoldingRegisters[0x6026] = ia;
  118. // usHoldingRegisters[0x6027] = ib;
  119. // usHoldingRegisters[0x6028] = ic;
  120. // usHoldingRegisters[0x6029] = iductIa;
  121. // usHoldingRegisters[0x602A] = iductIb;
  122. // usHoldingRegisters[0x602B] = iductIc;
  123. // usHoldingRegisters[0x602C] = gf;
  124. // usHoldingRegisters[0x602D] = grid_phrases;
  125. // usHoldingRegisters[0x6030] = apA;
  126. // usHoldingRegisters[0x6031] = apB;
  127. // usHoldingRegisters[0x6032] = apC;
  128. // usHoldingRegisters[0x6033] = appA;
  129. // usHoldingRegisters[0x6034] = appB;
  130. // usHoldingRegisters[0x6035] = appC;
  131. // usHoldingRegisters[0x6036] = ipA;
  132. // usHoldingRegisters[0x6037] = ipB;
  133. // usHoldingRegisters[0x6038] = ipC;
  134. // usHoldingRegisters[0x6039] = total_ap;
  135. // usHoldingRegisters[0x603A] = total_ip;
  136. // usHoldingRegisters[0x603B] = total_app;
  137. // usHoldingRegisters[0x603C] = pf;
  138. // usHoldingRegisters[0x6050] = v;
  139. // usHoldingRegisters[0x6051] = pos_v;
  140. // usHoldingRegisters[0x6052] = neg_v;
  141. // usHoldingRegisters[0x6053] = bat_v;
  142. // usHoldingRegisters[0x6054] = bat_i;
  143. // usHoldingRegisters[0x6055] = dc_ap;
  144. // usHoldingRegisters[0x6056] = dc_i;
  145. // usHoldingRegisters[0x6057] = work_stat;
  146. // usHoldingRegisters[0x6058] = igbt_temp;
  147. // usHoldingRegisters[0x6059] = env_temp;
  148. // usHoldingRegisters[0x605A] = ind_temp;
  149. // usHoldingRegisters[0x605B] = work_mode;
  150. // usHoldingRegisters[0x6010] = dc_acc_chg_amout & 0xFFFF0000;
  151. // usHoldingRegisters[0x6011] = dc_acc_chg_amout & 0x0000FFFF;
  152. // usHoldingRegisters[0x6012] = dc_daily_chg_amout & 0xFFFF0000;
  153. // usHoldingRegisters[0x6013] = dc_daily_chg_amout & 0x0000FFFF;
  154. // usHoldingRegisters[0x6014] = dc_acc_dhg_amout & 0xFFFF0000;
  155. // usHoldingRegisters[0x6015] = dc_acc_dhg_amout & 0x0000FFFF;
  156. // usHoldingRegisters[0x6016] = dc_daily_dhg_amout & 0xFFFF0000;
  157. // usHoldingRegisters[0x6017] = dc_daily_dhg_amout & 0x0000FFFF;
  158. // usHoldingRegisters[0x6018] = ac_acc_chg_amout & 0xFFFF0000;
  159. // usHoldingRegisters[0x6019] = ac_acc_chg_amout & 0x0000FFFF;
  160. // usHoldingRegisters[0x601A] = ac_daily_chg_amout & 0xFFFF0000;
  161. // usHoldingRegisters[0x601B] = ac_daily_chg_amout & 0x0000FFFF;
  162. // usHoldingRegisters[0x601C] = ac_acc_dhg_amout & 0xFFFF0000;
  163. // usHoldingRegisters[0x601D] = ac_acc_dhg_amout & 0x0000FFFF;
  164. // usHoldingRegisters[0x601E] = ac_daily_dhg_amout & 0xFFFF0000;
  165. // usHoldingRegisters[0x601F] = ac_daily_dhg_amout & 0x0000FFFF;
  166. // usHoldingRegisters[0x0D57] = aps;
  167. // usHoldingRegisters[0x0291] = power_on;
  168. // usHoldingRegisters[0x1700] = hardware_fault1;
  169. // usHoldingRegisters[0x1701] = hardware_fault2;
  170. // usHoldingRegisters[0x1702] = grid_fault;
  171. // usHoldingRegisters[0x1703] = bus_fault;
  172. // usHoldingRegisters[0x1704] = ac_capacitance_fault;
  173. // usHoldingRegisters[0x1705] = sys_fault;
  174. // usHoldingRegisters[0x1706] = switch_fault;
  175. // usHoldingRegisters[0x1707] = other_fault;
  176. //温湿度传感器
  177. usHoldingRegisters[0x0000] = MDL.env_temp;
  178. usHoldingRegisters[0x0001] = MDL.env_humi;
  179. }
  180. int from_modbus_to_dev()
  181. {
  182. // uab = usHoldingRegisters[0x6020];
  183. // ubc = usHoldingRegisters[0x6021];
  184. // uca = usHoldingRegisters[0x6022];
  185. // ua = usHoldingRegisters[0x6023];
  186. // ub = usHoldingRegisters[0x6024];
  187. // uc = usHoldingRegisters[0x6025];
  188. // ia = usHoldingRegisters[0x6026];
  189. // ib = usHoldingRegisters[0x6027];
  190. // ic = usHoldingRegisters[0x6028];
  191. // iductIa = usHoldingRegisters[0x6029];
  192. // iductIb = usHoldingRegisters[0x602A];
  193. // iductIc = usHoldingRegisters[0x602B];
  194. // gf = usHoldingRegisters[0x602C];
  195. // grid_phrases = usHoldingRegisters[0x602D];
  196. // apA = usHoldingRegisters[0x6030];
  197. // apB = usHoldingRegisters[0x6031];
  198. // apC = usHoldingRegisters[0x6032];
  199. // appA = usHoldingRegisters[0x6033];
  200. // appB = usHoldingRegisters[0x6034];
  201. // appC = usHoldingRegisters[0x6035];
  202. // ipA = usHoldingRegisters[0x6036];
  203. // ipB = usHoldingRegisters[0x6037];
  204. // ipC = usHoldingRegisters[0x6038];
  205. // total_ap = usHoldingRegisters[0x6039];
  206. // total_ip = usHoldingRegisters[0x603A];
  207. // total_app = usHoldingRegisters[0x603B];
  208. // pf = usHoldingRegisters[0x603C];
  209. // v = usHoldingRegisters[0x6050];
  210. // pos_v = usHoldingRegisters[0x6051];
  211. // neg_v = usHoldingRegisters[0x6052];
  212. // bat_v = usHoldingRegisters[0x6053];
  213. // bat_i = usHoldingRegisters[0x6054];
  214. // dc_ap = usHoldingRegisters[0x6055];
  215. // dc_i = usHoldingRegisters[0x6056];
  216. // work_stat = usHoldingRegisters[0x6057];
  217. // igbt_temp = usHoldingRegisters[0x6058];
  218. // ind_temp = usHoldingRegisters[0x605A];
  219. // work_mode = usHoldingRegisters[0x605B];
  220. // dc_acc_chg_amout = usHoldingRegisters[0x6010] << 16 | usHoldingRegisters[0x6011];
  221. // dc_daily_chg_amout = usHoldingRegisters[0x6012] << 16 | usHoldingRegisters[0x6013];
  222. // dc_acc_dhg_amout = usHoldingRegisters[0x6014] << 16 | usHoldingRegisters[0x6015];
  223. // dc_daily_dhg_amout = usHoldingRegisters[0x6016] << 16 | usHoldingRegisters[0x6017];
  224. // ac_acc_chg_amout = usHoldingRegisters[0x6018] << 16 | usHoldingRegisters[0x6019];
  225. // ac_daily_chg_amout = usHoldingRegisters[0x601A] << 16 | usHoldingRegisters[0x601B];
  226. // ac_acc_dhg_amout = usHoldingRegisters[0x601C] << 16 | usHoldingRegisters[0x601D];
  227. // ac_daily_dhg_amout = usHoldingRegisters[0x601E] << 16 | usHoldingRegisters[0x601F];
  228. // aps = usHoldingRegisters[0x0D57];
  229. // power_on = usHoldingRegisters[0x0291];
  230. // hardware_fault1 = usHoldingRegisters[0x1700];
  231. // hardware_fault2 = usHoldingRegisters[0x1701];
  232. // grid_fault = usHoldingRegisters[0x1702];
  233. // bus_fault = usHoldingRegisters[0x1703];
  234. // ac_capacitance_fault = usHoldingRegisters[0x1704];
  235. // sys_fault = usHoldingRegisters[0x1705];
  236. // switch_fault = usHoldingRegisters[0x1706];
  237. // other_fault = usHoldingRegisters[0x1707];
  238. }
  239. void update_states()
  240. {
  241. }
  242. static void *mdl_thrd_main(void *param)
  243. {
  244. mdl_prepare();
  245. from_dev_to_modbus();
  246. while (1)
  247. {
  248. from_modbus_to_dev();
  249. mdl_sim();
  250. from_dev_to_modbus();
  251. usleep(10000); /* 10ms */
  252. }
  253. return NULL;
  254. }
  255. int mdl_init()
  256. {
  257. log_dbg("%s, ++", __func__);
  258. int ret = 0;
  259. pthread_t xthrd;
  260. if (pthread_create(&xthrd, NULL, mdl_thrd_main, NULL) != 0)
  261. {
  262. log_dbg("%s, pthread_create fail", __func__);
  263. ret = -1;
  264. }
  265. log_dbg("%s, --, ret: %d", __func__, ret);
  266. return ret;
  267. }