Module_DcMeter.c 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960
  1. /*
  2. * Module_DcMeter.c
  3. *
  4. * Created on: 2021/5/31
  5. * Author: foluswen
  6. */
  7. #include "Module_DcMeter.h"
  8. #include "meterComm.h"
  9. #include "Module_RatedCurrent.h"
  10. #define _DEBUG_ 0
  11. #if _DEBUG_
  12. #define PR(...) printf(__VA_ARGS__)
  13. #else
  14. #define PR(...)
  15. #endif
  16. /**
  17. * Initial share memory
  18. * @return
  19. */
  20. int InitShareMemory()
  21. {
  22. int result = PASS;
  23. int MeterSMId;
  24. //Initialize ShmSysConfigAndInfo
  25. if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), 0777)) < 0)
  26. {
  27. DEBUG_ERROR("shmget ShmSysConfigAndInfo NG\n");
  28. result = FAIL;
  29. }
  30. else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  31. {
  32. DEBUG_ERROR("shmat ShmSysConfigAndInfo NG\n");
  33. result = FAIL;
  34. }
  35. else
  36. {}
  37. //Initialize ShmStatusCodeData
  38. if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), 0777)) < 0)
  39. {
  40. DEBUG_ERROR("shmget ShmStatusCodeData NG\n");
  41. result = FAIL;
  42. }
  43. else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  44. {
  45. DEBUG_ERROR("shmat ShmStatusCodeData NG\n");
  46. result = FAIL;
  47. }
  48. else
  49. {}
  50. //Initialize ShmStatusCodeData
  51. /*
  52. if ((MeterSMId = shmget(ShmMeter_info, sizeof(struct METER_INFO), 0777)) < 0)
  53. {
  54. DEBUG_ERROR("shmget ShmStatusCodeData NG\n");
  55. result = FAIL;
  56. }
  57. else if ((ShmMeter_info = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  58. {
  59. DEBUG_ERROR("shmat ShmMeter_info NG\n");
  60. result = FAIL;
  61. }
  62. else
  63. {}
  64. */
  65. return result;
  66. }
  67. //==========================================
  68. // Main loop
  69. //==========================================
  70. int main(void)
  71. {
  72. printf("main start\n");
  73. ParsingRatedCur modelnameInfo = {0};
  74. Meter_Info meter_info[4];
  75. Meter_Status_Info meter_status_info[4];
  76. Meter_transaction_Action meter_read_transaction_record[4];
  77. Meter_transaction_Action meter_transaction_Action[4];
  78. Meter_transaction_Result meter_transaction_Result[4];
  79. //log use
  80. Meter_Info before_meter_info[4];
  81. uint8_t before_failCount[4];
  82. Meter_transaction_Action before_meter_transaction_Action[4];
  83. Meter_transaction_Action before_meter_read_transaction_record[4];
  84. uint8_t failCount[4];
  85. uint8_t startTransactionFailCount[4];
  86. uint8_t stopTransactionFailCount[4];
  87. uint8_t getTransactionOcmfFailCount[4];
  88. uint8_t meterSyncTimeFailCount[4];
  89. uint16_t RecordLogTimerCount = 0;
  90. #ifndef DEBUG_STANDALONG
  91. // Initialize share memory
  92. if(InitShareMemory() == FAIL)
  93. {
  94. DEBUG_ERROR("InitShareMemory NG\n");
  95. if(ShmStatusCodeData!=NULL)
  96. {
  97. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=ON;
  98. }
  99. sleep(5);
  100. return -1;
  101. }
  102. /*
  103. for(;;)
  104. {
  105. printf("ActionCmd : %d \n", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[0].ActionCmd);
  106. sleep(1);
  107. }
  108. */
  109. RatedCurrentParsing((char*)ShmSysConfigAndInfo->SysConfig.ModelName, &modelnameInfo);
  110. #else
  111. modelnameInfo.GetGunCount = 1;
  112. #endif//DEBUG_STANDALONG
  113. // Initialize DC meter model
  114. /*
  115. * TODO:
  116. * 1. Maybe need to parse configuration by model name
  117. */
  118. meterInitialize(METER_MODEL_LEM_L18005A);
  119. //DEBUG_INFO("modelnameInfo.GetGunCount : %d \n", modelnameInfo.GetGunCount);
  120. #ifndef DEBUG_STANDALONG
  121. //if Power up and DC meter is runing (need stop)
  122. for(uint8_t gun_index=0;gun_index<modelnameInfo.GetGunCount;gun_index++){
  123. readMeterStatusInfo(gun_index,&meter_status_info[gun_index]);
  124. if(meter_status_info[gun_index].MeterStatusFlag.bits.transactionIsOnGoing == 1)
  125. {
  126. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd = 2;
  127. readMeterLegal(gun_index,&meter_transaction_Action[gun_index]);
  128. strcpy((char*)ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.transactionId,(char*)meter_transaction_Action[gun_index].head.transactionId);
  129. }
  130. }
  131. printf("shm ");
  132. DEBUG_INFO("shm ");
  133. #endif
  134. printf("modelnameInfo.GetGunCount : %d \n\n\n", modelnameInfo.GetGunCount);
  135. DEBUG_INFO("modelnameInfo.GetGunCount : %d \n\n\n", modelnameInfo.GetGunCount);
  136. //uint8_t gun_index=0;
  137. //meter_transaction_Action[0].ActionCmd = 2;
  138. //strcpy(meter_transaction_Action[0].head.transactionId, "ddd5002");
  139. //strcpy(ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[0].head.transactionId, "12345678" );
  140. //ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[0].ActionCmd = 1;
  141. // Main loop
  142. for(;;)
  143. {
  144. for(uint8_t gun_index=0;gun_index<modelnameInfo.GetGunCount;gun_index++)
  145. {
  146. if(modelnameInfo.ParsingInfo[gun_index].GunType != Gun_Type_AC)
  147. {
  148. #ifndef DEBUG_STANDALONG
  149. meter_transaction_Action[gun_index].ActionCmd = ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd;
  150. meter_read_transaction_record[gun_index].ActionCmd = ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd;
  151. meter_read_transaction_record[gun_index].OcmfInfoReady = ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady;
  152. meter_transaction_Action[gun_index].OcmfInfoReady = ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady;
  153. if(before_meter_transaction_Action[gun_index].ActionCmd != ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd ||
  154. before_meter_transaction_Action[gun_index].OcmfInfoReady != ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady ||
  155. before_meter_read_transaction_record[gun_index].ActionCmd != ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd ||
  156. before_meter_read_transaction_record[gun_index].OcmfInfoReady != ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady ||
  157. before_meter_info[gun_index].LinkStatus != meter_info[gun_index].LinkStatus ||
  158. before_failCount[gun_index] != failCount[gun_index])
  159. {
  160. DEBUG_INFO("shm Meter %d - LinkStatus %d : failCount: %d ActionCmd: %d OcmpInfoReady: %d RecordActionCmd: %d RecordOcmpInfoReady: %d \n", gun_index,
  161. meter_info[gun_index].LinkStatus,failCount[gun_index] ,
  162. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd ,
  163. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady,
  164. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd ,
  165. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady);
  166. before_meter_transaction_Action[gun_index].ActionCmd = ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd;
  167. before_meter_transaction_Action[gun_index].OcmfInfoReady = ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady;
  168. before_meter_read_transaction_record[gun_index].ActionCmd = ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd;
  169. before_meter_read_transaction_record[gun_index].OcmfInfoReady = ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady;
  170. before_meter_info[gun_index].LinkStatus = meter_info[gun_index].LinkStatus;
  171. before_failCount[gun_index] = failCount[gun_index];
  172. }
  173. #endif
  174. PR("for index : %d \n", gun_index);
  175. //if Transaction Cmd
  176. if(meter_transaction_Action[gun_index].ActionCmd || meter_read_transaction_record[gun_index].ActionCmd)
  177. {
  178. //if start Transaction record
  179. if(meter_transaction_Action[gun_index].ActionCmd == 1)
  180. {
  181. PR("<<<<<<<<< meter_sync_time : %d >>>>>>>>>\n", gun_index);
  182. //first sync sys time
  183. if(configure_meter_time(gun_index) != FAIL)
  184. {
  185. //update transaction content
  186. #ifndef DEBUG_STANDALONG
  187. strcpy((char*)meter_transaction_Action[gun_index].head.evseId, (char*)ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.evseId);
  188. strcpy((char*)meter_transaction_Action[gun_index].head.transactionId, (char*)ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.transactionId);
  189. strcpy((char*)meter_transaction_Action[gun_index].head.clientId, (char*)ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.clientId);
  190. meter_transaction_Action[gun_index].head.tariffId = ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.tariffId;
  191. meter_transaction_Action[gun_index].head.cableId = ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.cableId;
  192. strcpy((char*)meter_transaction_Action[gun_index].head.userData, (char*)ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.userData);
  193. #else
  194. strcpy(meter_transaction_Action[gun_index].head.evseId, "evse45");
  195. strcpy(meter_transaction_Action[gun_index].head.transactionId, "ddd5002");
  196. strcpy(meter_transaction_Action[gun_index].head.clientId, "client1");
  197. meter_transaction_Action[gun_index].head.tariffId = 2;
  198. meter_transaction_Action[gun_index].head.cableId =3;
  199. strcpy(meter_transaction_Action[gun_index].head.userData, "Phihong12");
  200. #endif
  201. PR(" ****** evseId : %s\n",meter_transaction_Action[gun_index].head.evseId);
  202. PR(" ****** transactionId : %s\n",meter_transaction_Action[gun_index].head.transactionId);
  203. PR(" ****** clientId : %s\n",meter_transaction_Action[gun_index].head.clientId);
  204. PR(" ****** tariffId : %d\n",meter_transaction_Action[gun_index].head.tariffId);
  205. PR(" ****** clientId : %d\n",meter_transaction_Action[gun_index].head.cableId);
  206. PR(" ****** userData : %s\n",meter_transaction_Action[gun_index].head.userData);
  207. meterSyncTimeFailCount[gun_index] = 0;
  208. #ifndef DEBUG_STANDALONG
  209. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterSyncTimeError = OFF;
  210. #endif
  211. PR("<<<<<<<<< meter_transaction_Action : %d >>>>>>>>>\n", gun_index);
  212. //start Transaction
  213. if(startMeterTransaction(gun_index,&meter_transaction_Action[gun_index]) != FAIL)
  214. {
  215. #ifndef DEBUG_STANDALONG
  216. /*
  217. * TODO:
  218. * 1. Synchronize data to share memory
  219. */
  220. //clear ocmf value
  221. strcpy((char *) meter_transaction_Action[gun_index].transactionOCMF, "");
  222. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].transactionOCMF,
  223. "%s",meter_transaction_Action[gun_index].transactionOCMF);
  224. #ifdef DEBUG_SHAREMEM_TRANSACTION_START_LOG
  225. #endif
  226. #else
  227. #endif//DEBUG_STANDALONG
  228. //clear OCMF info flag
  229. meter_transaction_Action[gun_index].OcmfInfoReady = 0;
  230. failCount[gun_index] = 0;
  231. startTransactionFailCount[gun_index] = 0;
  232. #ifndef DEBUG_STANDALONG
  233. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertStartTransactionError = OFF;
  234. #endif
  235. //clear need action cmd
  236. meter_transaction_Action[gun_index].ActionCmd = 0;
  237. }
  238. else
  239. {
  240. if(failCount[gun_index] < 5){
  241. failCount[gun_index]++;
  242. }
  243. if(startTransactionFailCount[gun_index] < 5){
  244. startTransactionFailCount[gun_index]++;
  245. }else{
  246. meter_transaction_Action[gun_index].ActionCmd = 0;
  247. #ifndef DEBUG_STANDALONG
  248. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertStartTransactionError = ON;
  249. #endif
  250. }
  251. }
  252. }
  253. else
  254. {
  255. if(failCount[gun_index] < 5){
  256. failCount[gun_index]++;
  257. }
  258. if(meterSyncTimeFailCount[gun_index] < 5){
  259. meterSyncTimeFailCount[gun_index]++;
  260. }else{
  261. meter_transaction_Action[gun_index].ActionCmd = 0;
  262. #ifndef DEBUG_STANDALONG
  263. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterSyncTimeError = ON;
  264. #endif
  265. }
  266. }
  267. }
  268. //if stop Transaction and record
  269. if(meter_transaction_Action[gun_index].ActionCmd == 2)
  270. {
  271. PR("<<<<<<<<< stopMeterTransaction : %d >>>>>>>>>\n", gun_index);
  272. if(stopMeterTransaction(gun_index,&meter_transaction_Action[gun_index],&meter_transaction_Result[gun_index]) != FAIL)
  273. {
  274. #ifndef DEBUG_STANDALONG
  275. /*
  276. * TODO:
  277. * 1. Synchronize data to share memory
  278. */
  279. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].paginationCounter =
  280. meter_transaction_Result[gun_index].paginationCounter;
  281. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.transactionId,
  282. "%s",meter_transaction_Result[gun_index].head.transactionId);
  283. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.evseId,
  284. "%s",meter_transaction_Result[gun_index].head.evseId);
  285. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.clientId,
  286. "%s",meter_transaction_Result[gun_index].head.clientId);
  287. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.tariffId =
  288. meter_transaction_Result[gun_index].head.tariffId;
  289. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.cableId =
  290. meter_transaction_Result[gun_index].head.cableId;
  291. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.userData,
  292. "%s",meter_transaction_Result[gun_index].head.userData);
  293. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].timestampStart,
  294. "%s",meter_transaction_Result[gun_index].timestampStart);
  295. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].timestampStop,
  296. "%s",meter_transaction_Result[gun_index].timestampStop);
  297. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].transactionDuration =
  298. meter_transaction_Result[gun_index].transactionDuration;
  299. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].transactionStatus =
  300. meter_transaction_Result[gun_index].transactionStatus;
  301. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyUnit,
  302. "%s",meter_transaction_Result[gun_index].energyUnit);
  303. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyImport =
  304. meter_transaction_Result[gun_index].energyImport;
  305. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyImportTotalStart =
  306. meter_transaction_Result[gun_index].energyImportTotalStart;
  307. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyImportTotalStop =
  308. meter_transaction_Result[gun_index].energyImportTotalStop;
  309. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyExport =
  310. meter_transaction_Result[gun_index].energyExport;
  311. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyExportTotalStart =
  312. meter_transaction_Result[gun_index].energyExportTotalStart;
  313. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyExportTotalStop =
  314. meter_transaction_Result[gun_index].energyExportTotalStop;
  315. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].signature,
  316. "%s",meter_transaction_Result[gun_index].signature);
  317. #ifdef DEBUG_SHAREMEM_TRANSACTION_RESULT_LOG
  318. DEBUG_INFO(" ================================= ShareMem Transaction Result : %d ================================= \n",gun_index);
  319. DEBUG_INFO(" %-26s : %d\n", "paginationCounter", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].paginationCounter);
  320. DEBUG_INFO(" %-26s : %s\n", "transactionId", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.transactionId);
  321. DEBUG_INFO(" %-26s : %s\n", "evseId", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.evseId);
  322. DEBUG_INFO(" %-26s : %s\n", "clientId", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.clientId);
  323. DEBUG_INFO(" %-26s : %d\n", "tariffId", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.tariffId);
  324. DEBUG_INFO(" %-26s : %d\n", "cableId", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.cableId);
  325. DEBUG_INFO(" %-26s : %s\n", "userData", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.userData);
  326. DEBUG_INFO(" %-26s : %s\n", "timestampStart", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].timestampStart);
  327. DEBUG_INFO(" %-26s : %s\n", "timestampStop", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].timestampStop);
  328. DEBUG_INFO(" %-26s : %d\n", "transactionDuration", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].transactionDuration);
  329. DEBUG_INFO(" %-26s : %d\n", "transactionStatus", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].transactionStatus);
  330. DEBUG_INFO(" %-26s : %s\n", "energyUnit", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyUnit);
  331. DEBUG_INFO(" %-26s : %.3f\n", "energyImport", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyImport);
  332. DEBUG_INFO(" %-26s : %.3f\n", "energyImportTotalStart", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyImportTotalStart);
  333. DEBUG_INFO(" %-26s : %.3f\n", "energyImportTotalStop", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyImportTotalStop);
  334. DEBUG_INFO(" %-26s : %.3f\n", "energyExport", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyExport);
  335. DEBUG_INFO(" %-26s : %.3f\n", "energyExportTotalStart", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyExportTotalStart);
  336. DEBUG_INFO(" %-26s : %.3f\n", "energyExportTotalStop", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].energyExportTotalStop);
  337. DEBUG_INFO(" %-26s : %s\n\n\n\n\n\n", "signature", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].signature);
  338. #endif
  339. #else //DEBUG_STANDALONG
  340. #ifdef DEBUG_STANDALONE_TRANSACTION_RESULT_LOG
  341. DEBUG_INFO(" ================================= Standalone Transaction Result : %d ================================= \n",gun_index);
  342. DEBUG_INFO(" %-26s : %d\n", "paginationCounter", meter_transaction_Result[gun_index].paginationCounter);
  343. DEBUG_INFO(" %-26s : %s\n", "transactionId", meter_transaction_Result[gun_index].head.transactionId);
  344. DEBUG_INFO(" %-26s : %s\n", "evseId", meter_transaction_Result[gun_index].head.evseId);
  345. DEBUG_INFO(" %-26s : %s\n", "clientId", meter_transaction_Result[gun_index].head.clientId);
  346. DEBUG_INFO(" %-26s : %d\n", "tariffId", meter_transaction_Result[gun_index].head.tariffId);
  347. DEBUG_INFO(" %-26s : %d\n", "cableId", meter_transaction_Result[gun_index].head.cableId);
  348. DEBUG_INFO(" %-26s : %s\n", "userData", meter_transaction_Result[gun_index].head.userData);
  349. DEBUG_INFO(" %-26s : %s\n", "timestampStart", meter_transaction_Result[gun_index].timestampStart);
  350. DEBUG_INFO(" %-26s : %s\n", "timestampStop", meter_transaction_Result[gun_index].timestampStop);
  351. DEBUG_INFO(" %-26s : %d\n", "transactionDuration", meter_transaction_Result[gun_index].transactionDuration);
  352. DEBUG_INFO(" %-26s : %d\n", "transactionStatus", meter_transaction_Result[gun_index].transactionStatus);
  353. DEBUG_INFO(" %-26s : %s\n", "energyUnit", meter_transaction_Result[gun_index].energyUnit);
  354. DEBUG_INFO(" %-26s : %.3f\n", "energyImport", meter_transaction_Result[gun_index].energyImport);
  355. DEBUG_INFO(" %-26s : %.3f\n", "energyImportTotalStart", meter_transaction_Result[gun_index].energyImportTotalStart);
  356. DEBUG_INFO(" %-26s : %.3f\n", "energyImportTotalStop", meter_transaction_Result[gun_index].energyImportTotalStop);
  357. DEBUG_INFO(" %-26s : %.3f\n", "energyExport", meter_transaction_Result[gun_index].energyExport);
  358. DEBUG_INFO(" %-26s : %.3f\n", "energyExportTotalStart", meter_transaction_Result[gun_index].energyExportTotalStart);
  359. DEBUG_INFO(" %-26s : %.3f\n", "energyExportTotalStop", gun_index, meter_transaction_Result[gun_index].energyExportTotalStop);
  360. DEBUG_INFO(" %-26s : %s\n\n\n\n\n\n", "signature", meter_transaction_Result[gun_index].signature);
  361. #endif
  362. #endif //DEBUG_STANDALONG
  363. failCount[gun_index] = 0;
  364. stopTransactionFailCount[gun_index] = 0;
  365. #ifndef DEBUG_STANDALONG
  366. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertStopTransactionError = OFF;
  367. #endif
  368. PR("<<<<<<<<< Get Transaction OCMF : %d >>>>>>>>>\n", gun_index);
  369. //auto OCMF
  370. if(readMeterTransactionOCMF(gun_index,&meter_transaction_Action[gun_index]) != FAIL)
  371. {
  372. #ifndef DEBUG_STANDALONG
  373. /*
  374. * TODO:
  375. * 1. Synchronize data to share memory
  376. */
  377. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].transactionOCMF,
  378. "%s",meter_transaction_Action[gun_index].transactionOCMF);
  379. PR("OCMF : %s , %s\n", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].transactionOCMF,
  380. meter_transaction_Action[gun_index].transactionOCMF);
  381. #ifdef DEBUG_SHAREMEM_TRANSACTION_RESULT_LOG
  382. DEBUG_INFO("shm transactionOCMF %d : %s\n", gun_index, ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].transactionOCMF);
  383. DEBUG_INFO("shm publicKeyOCMF %d : %s\n\n\n", gun_index, ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKeyOcmf);
  384. #endif
  385. #else //DEBUG_STANDALONG
  386. PR("OCMF : %s\n",meter_transaction_Action[gun_index].transactionOCMF);
  387. #ifdef DEBUG_STANDALONE_TRANSACTION_RESULT_LOG
  388. DEBUG_INFO("transactionOCMF %d : %s\n", gun_index, meter_transaction_Action[gun_index].transactionOCMF);
  389. #endif
  390. #endif//DEBUG_STANDALONG
  391. meter_transaction_Action[gun_index].OcmfInfoReady = 1;
  392. failCount[gun_index] = 0;
  393. getTransactionOcmfFailCount[gun_index] = 0;
  394. meter_transaction_Action[gun_index].ActionCmd = 0;
  395. #ifndef DEBUG_STANDALONG
  396. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertGetTransactionOcmfError = OFF;
  397. #endif
  398. }
  399. else
  400. {
  401. meter_transaction_Action[gun_index].OcmfInfoReady = 0;
  402. if(failCount[gun_index] < 5){
  403. failCount[gun_index]++;
  404. }
  405. if(getTransactionOcmfFailCount[gun_index] < 5){
  406. getTransactionOcmfFailCount[gun_index]++;
  407. }else{
  408. meter_transaction_Action[gun_index].ActionCmd = 0;
  409. #ifndef DEBUG_STANDALONG
  410. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertGetTransactionOcmfError = ON;
  411. #endif
  412. }
  413. }
  414. }
  415. else
  416. {
  417. if(failCount[gun_index] < 5){
  418. failCount[gun_index]++;
  419. }
  420. if(stopTransactionFailCount[gun_index] < 5){
  421. stopTransactionFailCount[gun_index]++;
  422. }else{
  423. meter_transaction_Action[gun_index].ActionCmd = 0;
  424. #ifndef DEBUG_STANDALONG
  425. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertStopTransactionError = ON;
  426. #endif
  427. }
  428. }
  429. }
  430. //if stop Transaction and record
  431. if(meter_read_transaction_record[gun_index].ActionCmd == 1)
  432. {
  433. meter_read_transaction_record[gun_index].OcmfInfoReady = 0;
  434. #ifndef DEBUG_STANDALONG
  435. strcpy((char*)meter_read_transaction_record[gun_index].head.transactionId, (char*)ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].head.transactionId);
  436. #endif
  437. PR("<<<<<<<<< Get Record Transaction OCMF : %d - ID : %s>>>>>>>>>\n", gun_index,meter_read_transaction_record[gun_index].head.transactionId);
  438. //auto OCMF
  439. if(readMeterTransactionOCMF(gun_index,&meter_read_transaction_record[gun_index]) != FAIL)
  440. {
  441. #ifndef DEBUG_STANDALONG
  442. /*
  443. * TODO:
  444. * 1. Synchronize data to share memory
  445. */
  446. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].transactionOCMF,
  447. "%s",meter_read_transaction_record[gun_index].transactionOCMF);
  448. PR("OCMF : %s ,%s\n", ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].transactionOCMF,
  449. meter_read_transaction_record[gun_index].transactionOCMF);
  450. #ifdef DEBUG_SHAREMEM_TRANSACTION_RESULT_LOG
  451. DEBUG_INFO("shm record transactionOCMF %d : %s\n", gun_index, ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].transactionOCMF);
  452. DEBUG_INFO("shm record publicKeyOCMF %d : %s\n\n\n", gun_index, ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKeyOcmf);
  453. #endif
  454. #else
  455. #ifdef DEBUG_STANDALONE_TRANSACTION_RESULT_LOG
  456. DEBUG_INFO("transactionOCMF %d : %s\n", gun_index, meter_read_transaction_record[gun_index].transactionOCMF);
  457. #endif
  458. #endif//DEBUG_STANDALONG
  459. meter_read_transaction_record[gun_index].OcmfInfoReady = 1;
  460. failCount[gun_index] = 0;
  461. getTransactionOcmfFailCount[gun_index] = 0;
  462. meter_read_transaction_record[gun_index].ActionCmd = 0;
  463. #ifndef DEBUG_STANDALONG
  464. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertGetTransactionOcmfError = OFF;
  465. #endif
  466. }
  467. else
  468. {
  469. meter_read_transaction_record[gun_index].OcmfInfoReady = 0;
  470. if(failCount[gun_index] < 5){
  471. failCount[gun_index]++;
  472. }
  473. if(getTransactionOcmfFailCount[gun_index] < 5){
  474. getTransactionOcmfFailCount[gun_index]++;
  475. }else{
  476. meter_read_transaction_record[gun_index].ActionCmd = 0;
  477. getTransactionOcmfFailCount[gun_index] = 0;
  478. #ifndef DEBUG_STANDALONG
  479. meter_read_transaction_record[gun_index].OcmfInfoReady = 2;
  480. //ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertGetTransactionOcmfError = ON;
  481. #endif
  482. }
  483. }
  484. }
  485. #ifndef DEBUG_STANDALONG
  486. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd = meter_read_transaction_record[gun_index].ActionCmd;
  487. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd = meter_transaction_Action[gun_index].ActionCmd;
  488. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady = meter_read_transaction_record[gun_index].OcmfInfoReady;
  489. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady = meter_transaction_Action[gun_index].OcmfInfoReady;
  490. #endif
  491. }
  492. else
  493. {
  494. if(readMeterLivemeasure(gun_index,&meter_info[gun_index]) != FAIL)
  495. {
  496. #ifndef DEBUG_STANDALONG
  497. /*
  498. * TODO:
  499. * 1. Synchronize data to share memory
  500. */
  501. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presetVoltage = meter_info[gun_index].presetVoltage;
  502. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presentCurrent = meter_info[gun_index].presentCurrent;
  503. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presentPower = meter_info[gun_index].presentPower;
  504. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].totlizeImportEnergy = meter_info[gun_index].totlizeImportEnergy;
  505. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].totlizeExportEnergy = meter_info[gun_index].totlizeExportEnergy;
  506. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].timestamp, "%s",meter_info[gun_index].timestamp);
  507. #ifdef DEBUG_SHAREMEM_LIVEMEASURE_LOG
  508. //evern 60s record 1s
  509. if((RecordLogTimerCount % 60 == 0)
  510. {
  511. DEBUG_INFO(" ================================= ShareMem Livemeasure : %d ================================= \n",gun_index);
  512. DEBUG_INFO(" %-26s : %.3f V\n", "Output voltage", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presetVoltage);
  513. DEBUG_INFO(" %-26s : %.3f A\n", "Output current", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presentCurrent);
  514. DEBUG_INFO(" %-26s : %.3f kw\n", "Output power", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presentPower);
  515. DEBUG_INFO(" %-26s : %.3f kwh\n", "Totalize import energy", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].totlizeImportEnergy);
  516. DEBUG_INFO(" %-26s : %.3f kwh\n", "Totalize export energy", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].totlizeExportEnergy);
  517. DEBUG_INFO(" %-26s : %s\n\n\n\n\n\n", "timestamp", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].timestamp);
  518. }
  519. #endif
  520. #else
  521. #ifdef DEBUG_STANDALONE_LIVEMEASURE_LOG
  522. DEBUG_INFO(" ================================= Standalone Livemeasure : %d ================================= \n",gun_index);
  523. DEBUG_INFO(" %-26s : %.3f V\n", "Output voltage", meter_info[gun_index].presetVoltage);
  524. DEBUG_INFO(" %-26s : %.3f A\n", "Output current", meter_info[gun_index].presentCurrent);
  525. DEBUG_INFO(" %-26s : %.3f kw\n", "Output power", meter_info[gun_index].presentPower);
  526. DEBUG_INFO(" %-26s : %.3f kwh\n", "Totalize import energy", meter_info[gun_index].totlizeImportEnergy);
  527. DEBUG_INFO(" %-26s : %.3f kwh\n", "Totalize export energy", meter_info[gun_index].totlizeExportEnergy);
  528. DEBUG_INFO(" %-26s : %s\n\n\n\n\n\n", "timestamp", meter_info[gun_index].timestamp);
  529. #endif
  530. #endif//DEBUG_STANDALONG
  531. failCount[gun_index] = 0;
  532. }
  533. else
  534. {
  535. PR("read Livemeasure fail : %d \n", gun_index);
  536. if(failCount[gun_index] < 5)
  537. failCount[gun_index]++;
  538. }
  539. if(readMeterStatusInfo(gun_index,&meter_status_info[gun_index]) != FAIL)
  540. {
  541. //PR("run readMeterStatusInfo : %d \n", gun_index);
  542. #ifndef DEBUG_STANDALONG
  543. /*
  544. * TODO:
  545. * 1. Synchronize data to share memory
  546. */
  547. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].StatusValue = meter_status_info[gun_index].StatusValue;
  548. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk =
  549. meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk;
  550. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.muFatalErrorOccured =
  551. meter_status_info[gun_index].MeterStatusFlag.bits.muFatalErrorOccured;
  552. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.transactionIsOnGoing =
  553. meter_status_info[gun_index].MeterStatusFlag.bits.transactionIsOnGoing;
  554. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.tamperingIsDetected =
  555. meter_status_info[gun_index].MeterStatusFlag.bits.tamperingIsDetected;
  556. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk =
  557. meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk;
  558. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.overTemperatureIsDetected =
  559. meter_status_info[gun_index].MeterStatusFlag.bits.overTemperatureIsDetected;
  560. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.reversedVoltage =
  561. meter_status_info[gun_index].MeterStatusFlag.bits.reversedVoltage;
  562. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suMeasureFailureOccurred =
  563. meter_status_info[gun_index].MeterStatusFlag.bits.suMeasureFailureOccurred;
  564. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].applicationFirmwareVersion,
  565. "%s",meter_status_info[gun_index].applicationFirmwareVersion);
  566. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].applicationFirmwareAuthTag,
  567. "%s",meter_status_info[gun_index].applicationFirmwareAuthTag);
  568. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].legalFirmwareVersion,
  569. "%s",meter_status_info[gun_index].legalFirmwareVersion);
  570. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].legalFirmwareAuthTag,
  571. "%s",meter_status_info[gun_index].legalFirmwareAuthTag);
  572. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].sensorFirmwareVersion,
  573. "%s",meter_status_info[gun_index].sensorFirmwareVersion);
  574. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].sensorFirmwareCrc,
  575. "%s",meter_status_info[gun_index].sensorFirmwareCrc);
  576. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].ipAddress,
  577. "%s",meter_status_info[gun_index].ipAddress);
  578. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].meterId,
  579. "%s",meter_status_info[gun_index].meterId);
  580. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muInitIsFailed =
  581. meter_status_info[gun_index].MeterErrorFlag.bits.muInitIsFailed;
  582. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.suStateIsInvalid =
  583. meter_status_info[gun_index].MeterErrorFlag.bits.suStateIsInvalid;
  584. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.versionCheckIsFailed =
  585. meter_status_info[gun_index].MeterErrorFlag.bits.versionCheckIsFailed;
  586. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muRngInitIsFailed =
  587. meter_status_info[gun_index].MeterErrorFlag.bits.muRngInitIsFailed;
  588. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muDataIntegrityIsFailed =
  589. meter_status_info[gun_index].MeterErrorFlag.bits.muDataIntegrityIsFailed;
  590. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muFwIntegrityIsFailed =
  591. meter_status_info[gun_index].MeterErrorFlag.bits.muFwIntegrityIsFailed;
  592. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.suIntegrityIsFailed =
  593. meter_status_info[gun_index].MeterErrorFlag.bits.suIntegrityIsFailed;
  594. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.logbookIntegrityIsFailed =
  595. meter_status_info[gun_index].MeterErrorFlag.bits.logbookIntegrityIsFailed;
  596. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.logbookIsFull =
  597. meter_status_info[gun_index].MeterErrorFlag.bits.logbookIsFull;
  598. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.memoryAccessIsFailed =
  599. meter_status_info[gun_index].MeterErrorFlag.bits.memoryAccessIsFailed;
  600. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muStateIsFailed =
  601. meter_status_info[gun_index].MeterErrorFlag.bits.muStateIsFailed;
  602. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKey,
  603. "%s",meter_status_info[gun_index].publicKey);
  604. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKeyOcmf,
  605. "%s",meter_status_info[gun_index].publicKeyOcmf);
  606. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].indexOfLastTransaction = meter_status_info[gun_index].indexOfLastTransaction;
  607. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].numberOfStoredTransactions = meter_status_info[gun_index].numberOfStoredTransactions;
  608. #ifdef DEBUG_SHAREMEM_STATUS_INFO_LOG
  609. //evern 60s record 1s
  610. if((RecordLogTimerCount % 60 == 0)
  611. {
  612. DEBUG_INFO(" ================================= ShareMem Status info : %d ================================= \n",gun_index);
  613. DEBUG_INFO(" %-26s : %d \n", "status-value",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].StatusValue);
  614. DEBUG_INFO(" %-26s : %d \n", "b-suLinkStatusIsOk",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk);
  615. DEBUG_INFO(" %-26s : %d \n", "b-muFatalErrorOccured",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.muFatalErrorOccured);
  616. DEBUG_INFO(" %-26s : %d \n", "b-transactionIsOnGoing",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.transactionIsOnGoing);
  617. DEBUG_INFO(" %-26s : %d \n", "b-tamperingIsDetected",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.tamperingIsDetected);
  618. DEBUG_INFO(" %-26s : %d \n", "b-timeSyncStatusIsOk",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk);
  619. DEBUG_INFO(" %-26s : %d \n", "b-overTemperatureIsDetected",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.overTemperatureIsDetected);
  620. DEBUG_INFO(" %-26s : %d \n", "b-reversedVoltage",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.reversedVoltage);
  621. DEBUG_INFO(" %-26s : %d \n", "b-suMeasureFailureOccurred",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suMeasureFailureOccurred);
  622. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareVersion",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].applicationFirmwareVersion);
  623. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareAuthTag",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].applicationFirmwareAuthTag);
  624. DEBUG_INFO(" %-26s : %s \n", "legalFirmwareVersion",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].legalFirmwareVersion);
  625. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareAuthTag",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].legalFirmwareAuthTag);
  626. DEBUG_INFO(" %-26s : %s \n", "sensorFirmwareVersion",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].sensorFirmwareVersion);
  627. DEBUG_INFO(" %-26s : %s \n", "sensorFirmwareCrc",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].sensorFirmwareCrc);
  628. DEBUG_INFO(" %-26s : %s \n", "ipAddress",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].ipAddress);
  629. DEBUG_INFO(" %-26s : %s \n", "meterId",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].meterId);
  630. DEBUG_INFO(" %-26s : %d \n", "b-muInitIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muInitIsFailed);
  631. DEBUG_INFO(" %-26s : %d \n", "b-suStateIsInvalid",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.suStateIsInvalid);
  632. DEBUG_INFO(" %-26s : %d \n", "b-versionCheckIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.versionCheckIsFailed);
  633. DEBUG_INFO(" %-26s : %d \n", "b-muRngInitIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muRngInitIsFailed);
  634. DEBUG_INFO(" %-26s : %d \n", "b-muDataIntegrityIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muDataIntegrityIsFailed);
  635. DEBUG_INFO(" %-26s : %d \n", "b-muFwIntegrityIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muFwIntegrityIsFailed);
  636. DEBUG_INFO(" %-26s : %d \n", "b-suIntegrityIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.suIntegrityIsFailed);
  637. DEBUG_INFO(" %-26s : %d \n", "b-logbookIntegrityIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.logbookIntegrityIsFailed);
  638. DEBUG_INFO(" %-26s : %d \n", "b-logbookIsFull",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.logbookIsFull);
  639. DEBUG_INFO(" %-26s : %d \n", "b-memoryAccessIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.memoryAccessIsFailed);
  640. DEBUG_INFO(" %-26s : %d \n", "b-muStateIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muStateIsFailed);
  641. DEBUG_INFO(" %-26s : %s \n", "publicKey",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKey);
  642. DEBUG_INFO(" %-26s : %s \n", "publicKeyOcmf",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKeyOcmf);
  643. DEBUG_INFO(" %-26s : %d \n", "indexOfLastTransaction",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].indexOfLastTransaction);
  644. DEBUG_INFO(" %-26s : %d \n\n\n\n\n\n", "numberOfStoredTransactions",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].numberOfStoredTransactions);
  645. }
  646. #endif
  647. #else
  648. #ifdef DEBUG_STANDALONG_STATUS_INFO_LOG
  649. DEBUG_INFO(" ================================= Standalong Status info : %d ================================= \n",gun_index);
  650. DEBUG_INFO(" %-26s : %d \n", "status-value",meter_status_info[gun_index].StatusValue);
  651. DEBUG_INFO(" %-26s : %d \n", "b-suLinkStatusIsOk",meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk);
  652. DEBUG_INFO(" %-26s : %d \n", "b-muFatalErrorOccured",meter_status_info[gun_index].MeterStatusFlag.bits.muFatalErrorOccured);
  653. DEBUG_INFO(" %-26s : %d \n", "b-transactionIsOnGoing",meter_status_info[gun_index].MeterStatusFlag.bits.transactionIsOnGoing);
  654. DEBUG_INFO(" %-26s : %d \n", "b-tamperingIsDetected",meter_status_info[gun_index].MeterStatusFlag.bits.tamperingIsDetected);
  655. DEBUG_INFO(" %-26s : %d \n", "b-timeSyncStatusIsOk",meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk);
  656. DEBUG_INFO(" %-26s : %d \n", "b-overTemperatureIsDetected",meter_status_info[gun_index].MeterStatusFlag.bits.overTemperatureIsDetected);
  657. DEBUG_INFO(" %-26s : %d \n", "b-reversedVoltage",meter_status_info[gun_index].MeterStatusFlag.bits.reversedVoltage);
  658. DEBUG_INFO(" %-26s : %d \n", "b-suMeasureFailureOccurred",meter_status_info[gun_index].MeterStatusFlag.bits.suMeasureFailureOccurred);
  659. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareVersion",meter_status_info[gun_index].applicationFirmwareVersion);
  660. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareAuthTag",meter_status_info[gun_index].applicationFirmwareAuthTag);
  661. DEBUG_INFO(" %-26s : %s \n", "legalFirmwareVersion",meter_status_info[gun_index].legalFirmwareVersion);
  662. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareAuthTag",meter_status_info[gun_index].legalFirmwareAuthTag);
  663. DEBUG_INFO(" %-26s : %s \n", "sensorFirmwareVersion",meter_status_info[gun_index].sensorFirmwareVersion);
  664. DEBUG_INFO(" %-26s : %s \n", "sensorFirmwareCrc",meter_status_info[gun_index].sensorFirmwareCrc);
  665. DEBUG_INFO(" %-26s : %s \n", "ipAddress",meter_status_info[gun_index].ipAddress);
  666. DEBUG_INFO(" %-26s : %s \n", "meterId",meter_status_info[gun_index].meterId);
  667. DEBUG_INFO(" %-26s : %d \n", "b-muInitIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muInitIsFailed);
  668. DEBUG_INFO(" %-26s : %d \n", "b-suStateIsInvalid",meter_status_info[gun_index].MeterErrorFlag.bits.suStateIsInvalid);
  669. DEBUG_INFO(" %-26s : %d \n", "b-versionCheckIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.versionCheckIsFailed);
  670. DEBUG_INFO(" %-26s : %d \n", "b-muRngInitIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muRngInitIsFailed);
  671. DEBUG_INFO(" %-26s : %d \n", "b-muDataIntegrityIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muDataIntegrityIsFailed);
  672. DEBUG_INFO(" %-26s : %d \n", "b-muFwIntegrityIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muFwIntegrityIsFailed);
  673. DEBUG_INFO(" %-26s : %d \n", "b-suIntegrityIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.suIntegrityIsFailed);
  674. DEBUG_INFO(" %-26s : %d \n", "b-logbookIntegrityIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.logbookIntegrityIsFailed);
  675. DEBUG_INFO(" %-26s : %d \n", "b-logbookIsFull",meter_status_info[gun_index].MeterErrorFlag.bits.logbookIsFull);
  676. DEBUG_INFO(" %-26s : %d \n", "bits-memoryAccessIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.memoryAccessIsFailed);
  677. DEBUG_INFO(" %-26s : %d \n", "bits-muStateIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muStateIsFailed);
  678. DEBUG_INFO(" %-26s : %s \n", "publicKey",meter_status_info[gun_index].publicKey);
  679. DEBUG_INFO(" %-26s : %s \n", "publicKeyOcmf",meter_status_info[gun_index].publicKeyOcmf);
  680. DEBUG_INFO(" %-26s : %d \n", "indexOfLastTransaction",meter_status_info[gun_index].indexOfLastTransaction);
  681. DEBUG_INFO(" %-26s : %d \n\n\n\n\n\n", "numberOfStoredTransactions",meter_status_info[gun_index].numberOfStoredTransactions);
  682. #endif
  683. #endif//DEBUG_STANDALONG
  684. //sync meter systime
  685. if(meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk == 1 &&
  686. meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk == 0)
  687. {
  688. configure_meter_time(gun_index);
  689. }
  690. failCount[gun_index] = 0;
  691. }
  692. else
  693. {
  694. PR("read status fail : %d \n", gun_index);
  695. if(failCount[gun_index] < 5)
  696. failCount[gun_index]++;
  697. }
  698. }
  699. if(failCount[gun_index] >= 5)
  700. {
  701. //if(ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout)
  702. //{
  703. DEBUG_ERROR("Meter %d communication timeout \n",gun_index);
  704. #ifndef DEBUG_STANDALONG
  705. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].LinkStatus = 3;
  706. if(gun_index == 0){
  707. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.Meter1CommTimeout = ON;
  708. }else if(gun_index == 1){
  709. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.Meter2CommTimeout = ON;
  710. }else if(gun_index == 2){
  711. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.Meter3CommTimeout = ON;
  712. }else if(gun_index == 3){
  713. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.Meter4CommTimeout = ON;
  714. }
  715. #else
  716. meter_info[gun_index].LinkStatus = 3;
  717. #endif
  718. //}
  719. PR("failconut fail : %d \n", gun_index);
  720. }
  721. else
  722. {
  723. if(meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk == 1 &&
  724. meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk == 1)
  725. {
  726. meter_info[gun_index].LinkStatus = 2;
  727. }else{
  728. meter_info[gun_index].LinkStatus = 1;
  729. }
  730. #ifndef DEBUG_STANDALONG
  731. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].LinkStatus = meter_info[gun_index].LinkStatus;
  732. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].LinkStatus = 3;
  733. if(gun_index == 0){
  734. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.Meter1CommTimeout = OFF;
  735. }else if(gun_index == 1){
  736. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.Meter2CommTimeout = OFF;
  737. }else if(gun_index == 2){
  738. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.Meter3CommTimeout = OFF;
  739. }else if(gun_index == 3){
  740. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.Meter4CommTimeout = OFF;
  741. }
  742. //linkstatus 1 = los meter slave, 2 is can to be Transaction
  743. if(ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].LinkStatus == 1)
  744. {
  745. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterSlaveLosLink = ON;
  746. }else{
  747. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterSlaveLosLink = OFF;
  748. }
  749. #endif
  750. //PR("failconut pass : %d \n", gun_index);
  751. }
  752. }
  753. #ifndef DEBUG_STANDALONG
  754. PR ("=================== ModelName %s\n", ShmSysConfigAndInfo->SysConfig.ModelName);
  755. PR("end : %d ActionCmd : %d OcmfInfoReady : %d RecordActionCmd: %d RecordOcmpInfoReady: %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd,
  756. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady,
  757. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd,
  758. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady);
  759. PR("shm bits-suLinkStatusIsOk %d : %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk);
  760. PR("shm bits-transactionIsOnGoing %d : %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.transactionIsOnGoing);
  761. PR("shm bits-timeSyncStatusIsOk %d : %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk);
  762. #else
  763. /*
  764. DEBUG_INFO("Meter %d - LinkStatus %d : failCount: %d ActionCmd: %d OcmpInfoReady: %d RecordActionCmd: %d RecordOcmpInfoReady: %d \n", gun_index,
  765. meter_info[gun_index].LinkStatus,failCount[gun_index] ,
  766. meter_transaction_Action[gun_index].ActionCmd ,
  767. meter_transaction_Action[gun_index].OcmfInfoReady,
  768. meter_read_transaction_record[gun_index].ActionCmd ,
  769. meter_read_transaction_record[gun_index].OcmfInfoReady);
  770. */
  771. PR ("=================== STAND ALONE\n");
  772. PR("end : %d ActionCmd : %d OcmfInfoReady : %d RecordActionCmd: %d RecordOcmpInfoReady: %d \n", gun_index,meter_transaction_Action[gun_index].ActionCmd,
  773. meter_transaction_Action[gun_index].OcmfInfoReady,
  774. meter_read_transaction_record[gun_index].ActionCmd,
  775. meter_read_transaction_record[gun_index].OcmfInfoReady);
  776. PR("shm bits-suLinkStatusIsOk %d : %d \n", gun_index,meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk);
  777. PR("shm bits-transactionIsOnGoing %d : %d \n", gun_index,meter_status_info[gun_index].MeterStatusFlag.bits.transactionIsOnGoing);
  778. PR("shm bits-timeSyncStatusIsOk %d : %d \n", gun_index,meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk);
  779. #endif
  780. usleep(1000000/modelnameInfo.GetGunCount);
  781. if(gun_index == modelnameInfo.GetGunCount){
  782. RecordLogTimerCount++;
  783. }
  784. //PR("end : %d ActionCmd : %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd);
  785. }
  786. }
  787. return -1;
  788. }