AbnormalCHA.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include "../Config.h"
  6. #include "../Log/log.h"
  7. #include "../ShareMemory/shmMem.h"
  8. #include "../Define/define.h"
  9. //------------------------------------------------------------------------------
  10. void ClearAbnormalStatus_Chademo(uint8_t gun_index)
  11. {
  12. bool isCleanCheck = false;
  13. char code[7];
  14. struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  15. struct InfoCodeData *pInfoCode = (struct InfoCodeData *)GetShmInfoCodeData();
  16. struct ChargingInfoData *pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gun_index);
  17. if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "", 6) == EQUAL) {
  18. return;
  19. }
  20. if (true) {
  21. if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023700", 6) == EQUAL &&
  22. pInfoCode->InfoEvents.bits.ChademoEvCommFail == YES) {
  23. memcpy(code, "023700", 6);
  24. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  25. isCleanCheck = true;
  26. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023704", 6) == EQUAL &&
  27. pInfoCode->InfoEvents.bits.ChademoBatteryMalfun == YES) {
  28. memcpy(code, "023704", 6);
  29. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  30. isCleanCheck = true;
  31. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023705", 6) == EQUAL &&
  32. pInfoCode->InfoEvents.bits.ChademoNoPermission == YES) {
  33. memcpy(code, "023705", 6);
  34. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  35. isCleanCheck = true;
  36. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023706", 6) == EQUAL &&
  37. pInfoCode->InfoEvents.bits.ChademoBatteryIncompatibility == YES) {
  38. memcpy(code, "023706", 6);
  39. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  40. isCleanCheck = true;
  41. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023707", 6) == EQUAL &&
  42. pInfoCode->InfoEvents.bits.ChademoBatteryOVP == YES) {
  43. memcpy(code, "023707", 6);
  44. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  45. isCleanCheck = true;
  46. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023708", 6) == EQUAL &&
  47. pInfoCode->InfoEvents.bits.ChademoBatteryUVP == YES) {
  48. memcpy(code, "023708", 6);
  49. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  50. isCleanCheck = true;
  51. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023709", 6) == EQUAL &&
  52. pInfoCode->InfoEvents.bits.ChademoBatteryOTP == YES) {
  53. memcpy(code, "023709", 6);
  54. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  55. isCleanCheck = true;
  56. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023710", 6) == EQUAL &&
  57. pInfoCode->InfoEvents.bits.ChademoBatteryCurrentDiff == YES) {
  58. memcpy(code, "023710", 6);
  59. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  60. isCleanCheck = true;
  61. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023711", 6) == EQUAL &&
  62. pInfoCode->InfoEvents.bits.ChademoBatteryVoltageDiff == YES) {
  63. memcpy(code, "023711", 6);
  64. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  65. isCleanCheck = true;
  66. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023712", 6) == EQUAL &&
  67. pInfoCode->InfoEvents.bits.ChademoShiftPosition == YES) {
  68. memcpy(code, "023712", 6);
  69. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  70. isCleanCheck = true;
  71. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023713", 6) == EQUAL &&
  72. pInfoCode->InfoEvents.bits.ChademoBatteryOtherFault == YES) {
  73. memcpy(code, "023713", 6);
  74. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  75. isCleanCheck = true;
  76. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023714", 6) == EQUAL &&
  77. pInfoCode->InfoEvents.bits.ChademoChargingSystemError == YES) {
  78. memcpy(code, "023714", 6);
  79. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  80. isCleanCheck = true;
  81. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023715", 6) == EQUAL &&
  82. pInfoCode->InfoEvents.bits.ChademoEvNormalStop == YES) {
  83. memcpy(code, "023715", 6);
  84. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  85. isCleanCheck = true;
  86. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023716", 6) == EQUAL &&
  87. pInfoCode->InfoEvents.bits.ChademoTempSensorBroken == YES) {
  88. memcpy(code, "023716", 6);
  89. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  90. isCleanCheck = true;
  91. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023717", 6) == EQUAL &&
  92. pInfoCode->InfoEvents.bits.ChademoConnectorLockFail == YES) {
  93. memcpy(code, "023717", 6);
  94. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  95. isCleanCheck = true;
  96. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023718", 6) == EQUAL &&
  97. pInfoCode->InfoEvents.bits.ChademoD1OnNoReceive == YES) {
  98. memcpy(code, "023718", 6);
  99. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  100. isCleanCheck = true;
  101. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023719", 6) == EQUAL &&
  102. pInfoCode->InfoEvents.bits.ChademoBmsKtoJTimeout == YES) {
  103. memcpy(code, "023719", 6);
  104. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  105. isCleanCheck = true;
  106. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023720", 6) == EQUAL &&
  107. pInfoCode->InfoEvents.bits.ChademoBmsChargeAllowTimeout == YES) {
  108. memcpy(code, "023720", 6);
  109. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  110. isCleanCheck = true;
  111. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023721", 6) == EQUAL &&
  112. pInfoCode->InfoEvents.bits.ChademoWaitGfdTimeout == YES) {
  113. memcpy(code, "023721", 6);
  114. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  115. isCleanCheck = true;
  116. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023722", 6) == EQUAL &&
  117. pInfoCode->InfoEvents.bits.ChademoBmsEvRelayTimeout == YES) {
  118. memcpy(code, "023722", 6);
  119. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  120. isCleanCheck = true;
  121. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023723", 6) == EQUAL &&
  122. pInfoCode->InfoEvents.bits.ChademoBmsReqCurrentTimeout == YES) {
  123. memcpy(code, "023723", 6);
  124. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  125. isCleanCheck = true;
  126. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023724", 6) == EQUAL &&
  127. pInfoCode->InfoEvents.bits.ChademoBmsKtoJOffTimeout == YES) {
  128. memcpy(code, "023724", 6);
  129. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  130. isCleanCheck = true;
  131. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023725", 6) == EQUAL &&
  132. pInfoCode->InfoEvents.bits.ChademoBmsEvRelayOffTimeout == YES) {
  133. memcpy(code, "023725", 6);
  134. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  135. isCleanCheck = true;
  136. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023726", 6) == EQUAL &&
  137. pInfoCode->InfoEvents.bits.ChademoAdcMoreThan10V == YES) {
  138. memcpy(code, "023726", 6);
  139. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  140. isCleanCheck = true;
  141. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023727", 6) == EQUAL &&
  142. pInfoCode->InfoEvents.bits.ChademoAdcMoreThan20V == YES) {
  143. memcpy(code, "023727", 6);
  144. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  145. isCleanCheck = true;
  146. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023728", 6) == EQUAL &&
  147. pInfoCode->InfoEvents.bits.ChademoBmsChargeBeforeStop == YES) {
  148. memcpy(code, "023728", 6);
  149. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  150. isCleanCheck = true;
  151. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023729", 6) == EQUAL &&
  152. pInfoCode->InfoEvents.bits.ChademoChargerGetNormalStop == YES) {
  153. memcpy(code, "023729", 6);
  154. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  155. isCleanCheck = true;
  156. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023730", 6) == EQUAL &&
  157. pInfoCode->InfoEvents.bits.ChademoChargerGetEmergencyStop == YES) {
  158. memcpy(code, "023730", 6);
  159. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  160. isCleanCheck = true;
  161. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023731", 6) == EQUAL &&
  162. pInfoCode->InfoEvents.bits.ChademoIsolationResultFail == YES) {
  163. memcpy(code, "023731", 6);
  164. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  165. isCleanCheck = true;
  166. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023732", 6) == EQUAL &&
  167. pInfoCode->InfoEvents.bits.ChademoMissLinkWithMotherBoard == YES) {
  168. memcpy(code, "023732", 6);
  169. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  170. isCleanCheck = true;
  171. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023733", 6) == EQUAL &&
  172. pInfoCode->InfoEvents.bits.ChademoOutputVolMoreThanLimit == YES) {
  173. memcpy(code, "023733", 6);
  174. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  175. isCleanCheck = true;
  176. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023734", 6) == EQUAL &&
  177. pInfoCode->InfoEvents.bits.ChademoReqCurrentMoreThanLimit == YES) {
  178. memcpy(code, "023734", 6);
  179. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  180. isCleanCheck = true;
  181. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023735", 6) == EQUAL &&
  182. pInfoCode->InfoEvents.bits.ChademoReCapBmsEqrCurrentExceed == YES) {
  183. memcpy(code, "023735", 6);
  184. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  185. isCleanCheck = true;
  186. } else if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "023736", 6) == EQUAL &&
  187. pInfoCode->InfoEvents.bits.ChademoChargeRemainCountDown == YES) {
  188. memcpy(code, "023736", 6);
  189. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  190. isCleanCheck = true;
  191. }
  192. }
  193. if (isCleanCheck) {
  194. for (uint8_t index = 0; index < pSysConfig->TotalConnectorCount; index++) {
  195. pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(index);
  196. if (index != gun_index || pSysConfig->TotalConnectorCount == 1) {
  197. log_info("CHA clean error : index = %d, EvConnAlarmCode = %s, code = %s \n",
  198. index,
  199. pDcChargingInfo->EvConnAlarmCode,
  200. code);
  201. if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, code, 6) != EQUAL) {
  202. if (strncmp(code, "023700", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoEvCommFail = NO; }
  203. if (strncmp(code, "023704", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBatteryMalfun = NO; }
  204. if (strncmp(code, "023705", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoNoPermission = NO; }
  205. if (strncmp(code, "023706", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBatteryIncompatibility = NO; }
  206. if (strncmp(code, "023707", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBatteryOVP = NO; }
  207. if (strncmp(code, "023708", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBatteryUVP = NO; }
  208. if (strncmp(code, "023709", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBatteryOTP = NO; }
  209. if (strncmp(code, "023710", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBatteryCurrentDiff = NO; }
  210. if (strncmp(code, "023711", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBatteryVoltageDiff = NO; }
  211. if (strncmp(code, "023712", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoShiftPosition = NO; }
  212. if (strncmp(code, "023713", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBatteryOtherFault = NO; }
  213. if (strncmp(code, "023714", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoChargingSystemError = NO; }
  214. if (strncmp(code, "023715", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoEvNormalStop = NO; }
  215. if (strncmp(code, "023716", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoTempSensorBroken = NO; }
  216. if (strncmp(code, "023717", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoConnectorLockFail = NO; }
  217. if (strncmp(code, "023718", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoD1OnNoReceive = NO; }
  218. if (strncmp(code, "023719", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBmsKtoJTimeout = NO; }
  219. if (strncmp(code, "023720", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBmsChargeAllowTimeout = NO; }
  220. if (strncmp(code, "023721", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoWaitGfdTimeout = NO; }
  221. if (strncmp(code, "023722", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBmsEvRelayTimeout = NO; }
  222. if (strncmp(code, "023723", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBmsReqCurrentTimeout = NO; }
  223. if (strncmp(code, "023724", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBmsKtoJOffTimeout = NO; }
  224. if (strncmp(code, "023725", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBmsEvRelayOffTimeout = NO; }
  225. if (strncmp(code, "023726", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoAdcMoreThan10V = NO; }
  226. if (strncmp(code, "023727", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoAdcMoreThan20V = NO; }
  227. if (strncmp(code, "023728", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoBmsChargeBeforeStop = NO; }
  228. if (strncmp(code, "023729", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoChargerGetNormalStop = NO; }
  229. if (strncmp(code, "023730", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoChargerGetEmergencyStop = NO; }
  230. if (strncmp(code, "023731", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoIsolationResultFail = NO; }
  231. if (strncmp(code, "023732", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoMissLinkWithMotherBoard = NO; }
  232. if (strncmp(code, "023733", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoOutputVolMoreThanLimit = NO; }
  233. if (strncmp(code, "023734", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoReqCurrentMoreThanLimit = NO; }
  234. if (strncmp(code, "023735", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoReCapBmsEqrCurrentExceed = NO; }
  235. if (strncmp(code, "023736", 6) == EQUAL) { pInfoCode->InfoEvents.bits.ChademoChargeRemainCountDown = NO; }
  236. }
  237. }
  238. }
  239. }
  240. pDcChargingInfo = (struct ChargingInfoData*)GetDcChargingInfoData(gun_index);
  241. if (strncmp((char *)pDcChargingInfo->EvConnAlarmCode, "", 6) != EQUAL) {
  242. memcpy(pDcChargingInfo->EvConnAlarmCode, "", 6);
  243. }
  244. }