Primary.c 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #include <stdio.h> /*標準輸入輸出定義*/
  2. #include <stdlib.h> /*標準函數庫定義*/
  3. #include <string.h>
  4. #include <stdint.h>
  5. #include "../Config.h"
  6. #include "../Log/log.h"
  7. #include "../Define/define.h"
  8. #include "../ShareMemory/shmMem.h"
  9. #include "../SelectGun/SelectGun.h"
  10. #include "main.h"
  11. #include "../timeout.h"
  12. struct SysInfoData *pSysInfo = NULL;
  13. struct ChargingInfoData *pDcChargingInfo = NULL;
  14. struct SysConfigData *pSysConfig = NULL;
  15. //------------------------------------------------------------------------------
  16. //------------------------------------------------------------------------------
  17. void ChangeLCM(uint8_t page)
  18. {
  19. pSysInfo->SystemPage = page;
  20. }
  21. // ***********************************
  22. // Enter LCM Page
  23. // ***********************************
  24. void CheckLeftButton()
  25. {
  26. pSysInfo->CurGunSelected = LEFT_GUN_NUM;
  27. }
  28. void CheckRightButton()
  29. {
  30. pSysInfo->CurGunSelected = RIGHT_GUN_NUM;
  31. }
  32. void CheckPrimaryWarm(void)
  33. {
  34. uint8_t i = 0;
  35. uint8_t Rtn = 0;
  36. struct WARNING_CODE_INFO *pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo();
  37. struct PrimaryMcuData *ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData();
  38. struct AlarmCodeData *pAlarmCode = (struct AlarmCodeData *)GetShmAlarmCodeData();
  39. DcCommonInfo *ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData();
  40. if (pSysWarning->WarningCount > 0) {
  41. Rtn = 0;
  42. for (i = 0; i < pSysWarning->WarningCount; i++) {
  43. if (memcmp(&pSysWarning->WarningCode[i][0], "042251", 6) == 0) {
  44. EmcOccureByString("042251");
  45. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = YES;
  46. Rtn = 1;
  47. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042252", 6) == 0) {
  48. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = YES;
  49. EmcOccureByString("042252");
  50. Rtn = 1;
  51. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042327", 6) == 0) {
  52. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = YES;
  53. EmcOccureByString("042327");
  54. Rtn = 1;
  55. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042328", 6) == 0) {
  56. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = YES;
  57. EmcOccureByString("042328");
  58. Rtn = 1;
  59. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042200", 6) == 0) {
  60. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = YES;
  61. EmcOccureByString("042200");
  62. Rtn = 1;
  63. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042201", 6) == 0) {
  64. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = YES;
  65. EmcOccureByString("042201");
  66. Rtn = 1;
  67. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042202", 6) == 0) {
  68. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = YES;
  69. EmcOccureByString("042202");
  70. Rtn = 1;
  71. } else if (memcmp(&pSysWarning->WarningCode[i][0], "042267", 6) == 0) {
  72. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = YES;
  73. EmcOccureByString("042267");
  74. Rtn = 1;
  75. } else if (memcmp(&pSysWarning->WarningCode[i][0], "012304", 6) == 0) {
  76. EmcOccureByString("012304");
  77. Rtn = 1;
  78. }
  79. }
  80. if (Rtn == 0) {
  81. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = NO;
  82. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = NO;
  83. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = NO;
  84. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = NO;
  85. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = NO;
  86. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = NO;
  87. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = NO;
  88. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = NO;
  89. ReleaseEmsOccureByString(0, "042251");
  90. ReleaseEmsOccureByString(0, "042252");
  91. ReleaseEmsOccureByString(0, "042200");
  92. ReleaseEmsOccureByString(0, "042327");
  93. ReleaseEmsOccureByString(0, "042328");
  94. ReleaseEmsOccureByString(0, "042201");
  95. ReleaseEmsOccureByString(0, "042202");
  96. ReleaseEmsOccureByString(0, "042267");
  97. ReleaseEmsOccureByString(0, "012304");
  98. }
  99. } else {
  100. ShmDcCommonData->PowerAlarmState.StatusBit.EmergencyStop = NO;
  101. ShmDcCommonData->PowerAlarmState.StatusBit.DoorOpen = NO;
  102. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputOVP = NO;
  103. ShmDcCommonData->PowerAlarmState.StatusBit.DcInputUVP = NO;
  104. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL1InputOVP = NO;
  105. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL2InputOVP = NO;
  106. ShmDcCommonData->PowerAlarmState.StatusBit.SystemL3InputOVP = NO;
  107. ShmDcCommonData->PowerAlarmState.StatusBit.PsuFailure = NO;
  108. ReleaseEmsOccureByString(0, "042251");
  109. ReleaseEmsOccureByString(0, "042252");
  110. ReleaseEmsOccureByString(0, "042200");
  111. ReleaseEmsOccureByString(0, "042327");
  112. ReleaseEmsOccureByString(0, "042328");
  113. ReleaseEmsOccureByString(0, "042201");
  114. ReleaseEmsOccureByString(0, "042202");
  115. ReleaseEmsOccureByString(0, "042267");
  116. ReleaseEmsOccureByString(0, "012304");
  117. }
  118. if (ShmPrimaryMcuData->InputDet.bits.EmergencyButton == ABNORMAL) {
  119. pAlarmCode->AlarmEvents.bits.EmergencyStopTrip = YES;
  120. EmcOccureByString("012251");
  121. } else {
  122. ReleaseEmsOccureByString(0, "012251");
  123. }
  124. if (ShmPrimaryMcuData->InputDet.bits.AcMainBreakerDetec == ABNORMAL) {
  125. pAlarmCode->AlarmEvents.bits.MainPowerBreakerTrip = YES;
  126. EmcOccureByString("012238");
  127. } else {
  128. ReleaseEmsOccureByString(0, "012238");
  129. }
  130. if (ShmPrimaryMcuData->InputDet.bits.SpdDetec == ABNORMAL) {
  131. pAlarmCode->AlarmEvents.bits.SpdTrip = YES;
  132. } else {
  133. pAlarmCode->AlarmEvents.bits.SpdTrip = NO;
  134. }
  135. if (ShmPrimaryMcuData->InputDet.bits.DoorOpen == ABNORMAL) {
  136. pAlarmCode->AlarmEvents.bits.DoorOpen = YES;
  137. EmcOccureByString("012252");
  138. } else {
  139. ReleaseEmsOccureByString(0, "012252");
  140. }
  141. }
  142. void ChkPrimaryStatus(void)
  143. {
  144. static bool leftBtnPush = false;
  145. static bool rightBtnPush = false;
  146. pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
  147. struct PrimaryMcuData *ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData();
  148. struct ChargingInfoData *pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
  149. pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
  150. // Check Primary Board status
  151. CheckPrimaryWarm();
  152. if ((pDcChargingInfo->SystemStatus == S_IDLE || pDcChargingInfo->SystemStatus == S_RESERVATION)
  153. && pSysConfig->OfflinePolicy == _OFFLINE_POLICY_NO_CHARGING) {
  154. log_info("Offline policy no charge");
  155. return;;
  156. }
  157. // Show Version
  158. if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_PRESS &&
  159. ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_PRESS )
  160. pSysConfig->ShowInformation = YES;
  161. else
  162. pSysConfig->ShowInformation = NO;
  163. if (pSysConfig->ShowInformation)
  164. return;
  165. // Press Left Button
  166. if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_PRESS && !leftBtnPush ) {
  167. leftBtnPush = true;
  168. CheckLeftButton();
  169. log_info("left btn down...............................%x %x %x",
  170. pSysInfo->CurGunSelected,pDcChargingInfo->SystemStatus,pSysInfo->SystemPage);
  171. } else if (ShmPrimaryMcuData->InputDet.bits.Button1 == BTN_RELEASE && leftBtnPush) {
  172. leftBtnPush = false;
  173. }
  174. // Press Right Button
  175. if (ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_PRESS && !rightBtnPush ) {
  176. rightBtnPush = true;
  177. CheckRightButton();
  178. log_info("right btn down...............................%x %x %x",
  179. pSysInfo->CurGunSelected,pDcChargingInfo->SystemStatus, pSysInfo->SystemPage);
  180. } else if (ShmPrimaryMcuData->InputDet.bits.Button2 == BTN_RELEASE && rightBtnPush) {
  181. rightBtnPush = false;
  182. }
  183. }