Module_DcMeter.c 50 KB

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