Module_DcMeter.c 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915
  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 = 1;
  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((char*)ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.transactionId,(char*)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((char*)meter_transaction_Action[gun_index].head.evseId, (char*)ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.evseId);
  163. strcpy((char*)meter_transaction_Action[gun_index].head.transactionId, (char*)ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].head.transactionId);
  164. strcpy((char*)meter_transaction_Action[gun_index].head.clientId, (char*)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((char*)meter_transaction_Action[gun_index].head.userData, (char*)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((char*)&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((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.transactionId,
  257. "%s",meter_transaction_Result[gun_index].head.transactionId);
  258. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.evseId,
  259. "%s",meter_transaction_Result[gun_index].head.evseId);
  260. sprintf((char*)&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((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].head.userData,
  267. "%s",meter_transaction_Result[gun_index].head.userData);
  268. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionResult[gun_index].timestampStart,
  269. "%s",meter_transaction_Result[gun_index].timestampStart);
  270. sprintf((char*)&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((char*)&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((char*)&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((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].transactionOCMF,
  353. "%s",meter_transaction_Action[gun_index].transactionOCMF);
  354. PR("OCMF : %s , %s\n", ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].transactionOCMF,
  355. 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. PR("OCMF : %s\n",meter_transaction_Action[gun_index].transactionOCMF);
  361. #ifdef DEBUG_STANDALONE_TRANSACTION_RESULT_LOG
  362. DEBUG_INFO("transactionOCMF %d : %s\n", gun_index, meter_transaction_Action[gun_index].transactionOCMF);
  363. #endif
  364. #endif//DEBUG_STANDALONG
  365. meter_transaction_Action[gun_index].OcmfInfoReady = 1;
  366. failCount[gun_index] = 0;
  367. getTransactionOcmfFailCount[gun_index] = 0;
  368. meter_transaction_Action[gun_index].ActionCmd = 0;
  369. #ifndef DEBUG_STANDALONG
  370. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertGetTransactionOcmfError = OFF;
  371. #endif
  372. }
  373. else
  374. {
  375. meter_transaction_Action[gun_index].OcmfInfoReady = 0;
  376. if(failCount[gun_index] < 5){
  377. failCount[gun_index]++;
  378. }
  379. if(getTransactionOcmfFailCount[gun_index] < 5){
  380. getTransactionOcmfFailCount[gun_index]++;
  381. }else{
  382. meter_transaction_Action[gun_index].ActionCmd = 0;
  383. #ifndef DEBUG_STANDALONG
  384. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertGetTransactionOcmfError = ON;
  385. #endif
  386. }
  387. }
  388. }
  389. else
  390. {
  391. if(failCount[gun_index] < 5){
  392. failCount[gun_index]++;
  393. }
  394. if(stopTransactionFailCount[gun_index] < 5){
  395. stopTransactionFailCount[gun_index]++;
  396. }else{
  397. meter_transaction_Action[gun_index].ActionCmd = 0;
  398. #ifndef DEBUG_STANDALONG
  399. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertStopTransactionError = ON;
  400. #endif
  401. }
  402. }
  403. }
  404. //if stop Transaction and record
  405. if(meter_read_transaction_record[gun_index].ActionCmd == 1)
  406. {
  407. meter_read_transaction_record[gun_index].OcmfInfoReady = 0;
  408. #ifndef DEBUG_STANDALONG
  409. strcpy((char*)meter_read_transaction_record[gun_index].head.transactionId, (char*)ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].head.transactionId);
  410. #endif
  411. PR("<<<<<<<<< Get Record Transaction OCMF : %d - ID : %s>>>>>>>>>\n", gun_index,meter_read_transaction_record[gun_index].head.transactionId);
  412. //auto OCMF
  413. if(readMeterTransactionOCMF(gun_index,&meter_read_transaction_record[gun_index]) != FAIL)
  414. {
  415. #ifndef DEBUG_STANDALONG
  416. /*
  417. * TODO:
  418. * 1. Synchronize data to share memory
  419. */
  420. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].transactionOCMF,
  421. "%s",meter_read_transaction_record[gun_index].transactionOCMF);
  422. PR("OCMF : %s ,%s\n", ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].transactionOCMF,
  423. meter_read_transaction_record[gun_index].transactionOCMF);
  424. #ifdef DEBUG_SHAREMEM_TRANSACTION_RESULT_LOG
  425. DEBUG_INFO("shm transactionOCMF %d : %s\n", gun_index, ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].transactionOCMF);
  426. #endif
  427. #else
  428. #ifdef DEBUG_STANDALONE_TRANSACTION_RESULT_LOG
  429. DEBUG_INFO("transactionOCMF %d : %s\n", gun_index, meter_read_transaction_record[gun_index].transactionOCMF);
  430. #endif
  431. #endif//DEBUG_STANDALONG
  432. meter_read_transaction_record[gun_index].OcmfInfoReady = 1;
  433. failCount[gun_index] = 0;
  434. getTransactionOcmfFailCount[gun_index] = 0;
  435. meter_read_transaction_record[gun_index].ActionCmd = 0;
  436. #ifndef DEBUG_STANDALONG
  437. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertGetTransactionOcmfError = OFF;
  438. #endif
  439. }
  440. else
  441. {
  442. meter_read_transaction_record[gun_index].OcmfInfoReady = 0;
  443. if(failCount[gun_index] < 5){
  444. failCount[gun_index]++;
  445. }
  446. if(getTransactionOcmfFailCount[gun_index] < 5){
  447. getTransactionOcmfFailCount[gun_index]++;
  448. }else{
  449. meter_read_transaction_record[gun_index].ActionCmd = 0;
  450. getTransactionOcmfFailCount[gun_index] = 0;
  451. #ifndef DEBUG_STANDALONG
  452. meter_read_transaction_record[gun_index].OcmfInfoReady = 2;
  453. //ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MetertGetTransactionOcmfError = ON;
  454. #endif
  455. }
  456. }
  457. }
  458. #ifndef DEBUG_STANDALONG
  459. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd = meter_read_transaction_record[gun_index].ActionCmd;
  460. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd = meter_transaction_Action[gun_index].ActionCmd;
  461. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady = meter_read_transaction_record[gun_index].OcmfInfoReady;
  462. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady = meter_transaction_Action[gun_index].OcmfInfoReady;
  463. #endif
  464. }
  465. else
  466. {
  467. if(readMeterLivemeasure(gun_index,&meter_info[gun_index]) != FAIL)
  468. {
  469. #ifndef DEBUG_STANDALONG
  470. /*
  471. * TODO:
  472. * 1. Synchronize data to share memory
  473. */
  474. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presetVoltage = meter_info[gun_index].presetVoltage;
  475. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presentCurrent = meter_info[gun_index].presentCurrent;
  476. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presentPower = meter_info[gun_index].presentPower;
  477. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].totlizeImportEnergy = meter_info[gun_index].totlizeImportEnergy;
  478. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].totlizeExportEnergy = meter_info[gun_index].totlizeExportEnergy;
  479. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].timestamp, "%s",meter_info[gun_index].timestamp);
  480. #ifdef DEBUG_SHAREMEM_LIVEMEASURE_LOG
  481. //evern 60s record 1s
  482. if((RecordLogTimerCount % 60 == 0)
  483. {
  484. DEBUG_INFO(" ================================= ShareMem Livemeasure : %d ================================= \n",gun_index);
  485. DEBUG_INFO(" %-26s : %.3f V\n", "Output voltage", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presetVoltage);
  486. DEBUG_INFO(" %-26s : %.3f A\n", "Output current", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presentCurrent);
  487. DEBUG_INFO(" %-26s : %.3f kw\n", "Output power", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].presentPower);
  488. DEBUG_INFO(" %-26s : %.3f kwh\n", "Totalize import energy", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].totlizeImportEnergy);
  489. DEBUG_INFO(" %-26s : %.3f kwh\n", "Totalize export energy", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].totlizeExportEnergy);
  490. DEBUG_INFO(" %-26s : %s\n\n\n\n\n\n", "timestamp", ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].timestamp);
  491. }
  492. #endif
  493. #else
  494. #ifdef DEBUG_STANDALONE_LIVEMEASURE_LOG
  495. DEBUG_INFO(" ================================= Standalone Livemeasure : %d ================================= \n",gun_index);
  496. DEBUG_INFO(" %-26s : %.3f V\n", "Output voltage", meter_info[gun_index].presetVoltage);
  497. DEBUG_INFO(" %-26s : %.3f A\n", "Output current", meter_info[gun_index].presentCurrent);
  498. DEBUG_INFO(" %-26s : %.3f kw\n", "Output power", meter_info[gun_index].presentPower);
  499. DEBUG_INFO(" %-26s : %.3f kwh\n", "Totalize import energy", meter_info[gun_index].totlizeImportEnergy);
  500. DEBUG_INFO(" %-26s : %.3f kwh\n", "Totalize export energy", meter_info[gun_index].totlizeExportEnergy);
  501. DEBUG_INFO(" %-26s : %s\n\n\n\n\n\n", "timestamp", meter_info[gun_index].timestamp);
  502. #endif
  503. #endif//DEBUG_STANDALONG
  504. failCount[gun_index] = 0;
  505. }
  506. else
  507. {
  508. PR("read Livemeasure fail : %d \n", gun_index);
  509. if(failCount[gun_index] < 5)
  510. failCount[gun_index]++;
  511. }
  512. if(readMeterStatusInfo(gun_index,&meter_status_info[gun_index]) != FAIL)
  513. {
  514. //PR("run readMeterStatusInfo : %d \n", gun_index);
  515. #ifndef DEBUG_STANDALONG
  516. /*
  517. * TODO:
  518. * 1. Synchronize data to share memory
  519. */
  520. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].StatusValue = meter_status_info[gun_index].StatusValue;
  521. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk =
  522. meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk;
  523. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.muFatalErrorOccured =
  524. meter_status_info[gun_index].MeterStatusFlag.bits.muFatalErrorOccured;
  525. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.transactionIsOnGoing =
  526. meter_status_info[gun_index].MeterStatusFlag.bits.transactionIsOnGoing;
  527. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.tamperingIsDetected =
  528. meter_status_info[gun_index].MeterStatusFlag.bits.tamperingIsDetected;
  529. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk =
  530. meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk;
  531. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.overTemperatureIsDetected =
  532. meter_status_info[gun_index].MeterStatusFlag.bits.overTemperatureIsDetected;
  533. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.reversedVoltage =
  534. meter_status_info[gun_index].MeterStatusFlag.bits.reversedVoltage;
  535. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suMeasureFailureOccurred =
  536. meter_status_info[gun_index].MeterStatusFlag.bits.suMeasureFailureOccurred;
  537. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].applicationFirmwareVersion,
  538. "%s",meter_status_info[gun_index].applicationFirmwareVersion);
  539. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].applicationFirmwareAuthTag,
  540. "%s",meter_status_info[gun_index].applicationFirmwareAuthTag);
  541. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].legalFirmwareVersion,
  542. "%s",meter_status_info[gun_index].legalFirmwareVersion);
  543. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].legalFirmwareAuthTag,
  544. "%s",meter_status_info[gun_index].legalFirmwareAuthTag);
  545. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].sensorFirmwareVersion,
  546. "%s",meter_status_info[gun_index].sensorFirmwareVersion);
  547. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].sensorFirmwareCrc,
  548. "%s",meter_status_info[gun_index].sensorFirmwareCrc);
  549. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].ipAddress,
  550. "%s",meter_status_info[gun_index].ipAddress);
  551. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].meterId,
  552. "%s",meter_status_info[gun_index].meterId);
  553. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muInitIsFailed =
  554. meter_status_info[gun_index].MeterErrorFlag.bits.muInitIsFailed;
  555. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.suStateIsInvalid =
  556. meter_status_info[gun_index].MeterErrorFlag.bits.suStateIsInvalid;
  557. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.versionCheckIsFailed =
  558. meter_status_info[gun_index].MeterErrorFlag.bits.versionCheckIsFailed;
  559. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muRngInitIsFailed =
  560. meter_status_info[gun_index].MeterErrorFlag.bits.muRngInitIsFailed;
  561. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muDataIntegrityIsFailed =
  562. meter_status_info[gun_index].MeterErrorFlag.bits.muDataIntegrityIsFailed;
  563. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muFwIntegrityIsFailed =
  564. meter_status_info[gun_index].MeterErrorFlag.bits.muFwIntegrityIsFailed;
  565. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.suIntegrityIsFailed =
  566. meter_status_info[gun_index].MeterErrorFlag.bits.suIntegrityIsFailed;
  567. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.logbookIntegrityIsFailed =
  568. meter_status_info[gun_index].MeterErrorFlag.bits.logbookIntegrityIsFailed;
  569. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.logbookIsFull =
  570. meter_status_info[gun_index].MeterErrorFlag.bits.logbookIsFull;
  571. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.memoryAccessIsFailed =
  572. meter_status_info[gun_index].MeterErrorFlag.bits.memoryAccessIsFailed;
  573. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muStateIsFailed =
  574. meter_status_info[gun_index].MeterErrorFlag.bits.muStateIsFailed;
  575. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKey,
  576. "%s",meter_status_info[gun_index].publicKey);
  577. sprintf((char*)&ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKeyOcmf,
  578. "%s",meter_status_info[gun_index].publicKeyOcmf);
  579. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].indexOfLastTransaction = meter_status_info[gun_index].indexOfLastTransaction;
  580. ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].numberOfStoredTransactions = meter_status_info[gun_index].numberOfStoredTransactions;
  581. #ifdef DEBUG_SHAREMEM_STATUS_INFO_LOG
  582. //evern 60s record 1s
  583. if((RecordLogTimerCount % 60 == 0)
  584. {
  585. DEBUG_INFO(" ================================= ShareMem Status info : %d ================================= \n",gun_index);
  586. DEBUG_INFO(" %-26s : %d \n", "status-value",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].StatusValue);
  587. DEBUG_INFO(" %-26s : %d \n", "b-suLinkStatusIsOk",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk);
  588. DEBUG_INFO(" %-26s : %d \n", "b-muFatalErrorOccured",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.muFatalErrorOccured);
  589. DEBUG_INFO(" %-26s : %d \n", "b-transactionIsOnGoing",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.transactionIsOnGoing);
  590. DEBUG_INFO(" %-26s : %d \n", "b-tamperingIsDetected",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.tamperingIsDetected);
  591. DEBUG_INFO(" %-26s : %d \n", "b-timeSyncStatusIsOk",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk);
  592. DEBUG_INFO(" %-26s : %d \n", "b-overTemperatureIsDetected",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.overTemperatureIsDetected);
  593. DEBUG_INFO(" %-26s : %d \n", "b-reversedVoltage",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.reversedVoltage);
  594. DEBUG_INFO(" %-26s : %d \n", "b-suMeasureFailureOccurred",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suMeasureFailureOccurred);
  595. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareVersion",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].applicationFirmwareVersion);
  596. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareAuthTag",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].applicationFirmwareAuthTag);
  597. DEBUG_INFO(" %-26s : %s \n", "legalFirmwareVersion",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].legalFirmwareVersion);
  598. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareAuthTag",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].legalFirmwareAuthTag);
  599. DEBUG_INFO(" %-26s : %s \n", "sensorFirmwareVersion",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].sensorFirmwareVersion);
  600. DEBUG_INFO(" %-26s : %s \n", "sensorFirmwareCrc",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].sensorFirmwareCrc);
  601. DEBUG_INFO(" %-26s : %s \n", "ipAddress",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].ipAddress);
  602. DEBUG_INFO(" %-26s : %s \n", "meterId",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].meterId);
  603. DEBUG_INFO(" %-26s : %d \n", "b-muInitIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muInitIsFailed);
  604. DEBUG_INFO(" %-26s : %d \n", "b-suStateIsInvalid",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.suStateIsInvalid);
  605. DEBUG_INFO(" %-26s : %d \n", "b-versionCheckIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.versionCheckIsFailed);
  606. DEBUG_INFO(" %-26s : %d \n", "b-muRngInitIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muRngInitIsFailed);
  607. DEBUG_INFO(" %-26s : %d \n", "b-muDataIntegrityIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muDataIntegrityIsFailed);
  608. DEBUG_INFO(" %-26s : %d \n", "b-muFwIntegrityIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muFwIntegrityIsFailed);
  609. DEBUG_INFO(" %-26s : %d \n", "b-suIntegrityIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.suIntegrityIsFailed);
  610. DEBUG_INFO(" %-26s : %d \n", "b-logbookIntegrityIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.logbookIntegrityIsFailed);
  611. DEBUG_INFO(" %-26s : %d \n", "b-logbookIsFull",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.logbookIsFull);
  612. DEBUG_INFO(" %-26s : %d \n", "b-memoryAccessIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.memoryAccessIsFailed);
  613. DEBUG_INFO(" %-26s : %d \n", "b-muStateIsFailed",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterErrorFlag.bits.muStateIsFailed);
  614. DEBUG_INFO(" %-26s : %s \n", "publicKey",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKey);
  615. DEBUG_INFO(" %-26s : %s \n", "publicKeyOcmf",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].publicKeyOcmf);
  616. DEBUG_INFO(" %-26s : %d \n", "indexOfLastTransaction",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].indexOfLastTransaction);
  617. DEBUG_INFO(" %-26s : %d \n\n\n\n\n\n", "numberOfStoredTransactions",ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].numberOfStoredTransactions);
  618. }
  619. #endif
  620. #else
  621. #ifdef DEBUG_STANDALONG_STATUS_INFO_LOG
  622. DEBUG_INFO(" ================================= Standalong Status info : %d ================================= \n",gun_index);
  623. DEBUG_INFO(" %-26s : %d \n", "status-value",meter_status_info[gun_index].StatusValue);
  624. DEBUG_INFO(" %-26s : %d \n", "b-suLinkStatusIsOk",meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk);
  625. DEBUG_INFO(" %-26s : %d \n", "b-muFatalErrorOccured",meter_status_info[gun_index].MeterStatusFlag.bits.muFatalErrorOccured);
  626. DEBUG_INFO(" %-26s : %d \n", "b-transactionIsOnGoing",meter_status_info[gun_index].MeterStatusFlag.bits.transactionIsOnGoing);
  627. DEBUG_INFO(" %-26s : %d \n", "b-tamperingIsDetected",meter_status_info[gun_index].MeterStatusFlag.bits.tamperingIsDetected);
  628. DEBUG_INFO(" %-26s : %d \n", "b-timeSyncStatusIsOk",meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk);
  629. DEBUG_INFO(" %-26s : %d \n", "b-overTemperatureIsDetected",meter_status_info[gun_index].MeterStatusFlag.bits.overTemperatureIsDetected);
  630. DEBUG_INFO(" %-26s : %d \n", "b-reversedVoltage",meter_status_info[gun_index].MeterStatusFlag.bits.reversedVoltage);
  631. DEBUG_INFO(" %-26s : %d \n", "b-suMeasureFailureOccurred",meter_status_info[gun_index].MeterStatusFlag.bits.suMeasureFailureOccurred);
  632. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareVersion",meter_status_info[gun_index].applicationFirmwareVersion);
  633. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareAuthTag",meter_status_info[gun_index].applicationFirmwareAuthTag);
  634. DEBUG_INFO(" %-26s : %s \n", "legalFirmwareVersion",meter_status_info[gun_index].legalFirmwareVersion);
  635. DEBUG_INFO(" %-26s : %s \n", "applicationFirmwareAuthTag",meter_status_info[gun_index].legalFirmwareAuthTag);
  636. DEBUG_INFO(" %-26s : %s \n", "sensorFirmwareVersion",meter_status_info[gun_index].sensorFirmwareVersion);
  637. DEBUG_INFO(" %-26s : %s \n", "sensorFirmwareCrc",meter_status_info[gun_index].sensorFirmwareCrc);
  638. DEBUG_INFO(" %-26s : %s \n", "ipAddress",meter_status_info[gun_index].ipAddress);
  639. DEBUG_INFO(" %-26s : %s \n", "meterId",meter_status_info[gun_index].meterId);
  640. DEBUG_INFO(" %-26s : %d \n", "b-muInitIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muInitIsFailed);
  641. DEBUG_INFO(" %-26s : %d \n", "b-suStateIsInvalid",meter_status_info[gun_index].MeterErrorFlag.bits.suStateIsInvalid);
  642. DEBUG_INFO(" %-26s : %d \n", "b-versionCheckIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.versionCheckIsFailed);
  643. DEBUG_INFO(" %-26s : %d \n", "b-muRngInitIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muRngInitIsFailed);
  644. DEBUG_INFO(" %-26s : %d \n", "b-muDataIntegrityIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muDataIntegrityIsFailed);
  645. DEBUG_INFO(" %-26s : %d \n", "b-muFwIntegrityIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muFwIntegrityIsFailed);
  646. DEBUG_INFO(" %-26s : %d \n", "b-suIntegrityIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.suIntegrityIsFailed);
  647. DEBUG_INFO(" %-26s : %d \n", "b-logbookIntegrityIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.logbookIntegrityIsFailed);
  648. DEBUG_INFO(" %-26s : %d \n", "b-logbookIsFull",meter_status_info[gun_index].MeterErrorFlag.bits.logbookIsFull);
  649. DEBUG_INFO(" %-26s : %d \n", "bits-memoryAccessIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.memoryAccessIsFailed);
  650. DEBUG_INFO(" %-26s : %d \n", "bits-muStateIsFailed",meter_status_info[gun_index].MeterErrorFlag.bits.muStateIsFailed);
  651. DEBUG_INFO(" %-26s : %s \n", "publicKey",meter_status_info[gun_index].publicKey);
  652. DEBUG_INFO(" %-26s : %s \n", "publicKeyOcmf",meter_status_info[gun_index].publicKeyOcmf);
  653. DEBUG_INFO(" %-26s : %d \n", "indexOfLastTransaction",meter_status_info[gun_index].indexOfLastTransaction);
  654. DEBUG_INFO(" %-26s : %d \n\n\n\n\n\n", "numberOfStoredTransactions",meter_status_info[gun_index].numberOfStoredTransactions);
  655. #endif
  656. #endif//DEBUG_STANDALONG
  657. //sync meter systime
  658. if(meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk == 1 &&
  659. meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk == 0)
  660. {
  661. configure_meter_time(gun_index);
  662. }
  663. failCount[gun_index] = 0;
  664. }
  665. else
  666. {
  667. PR("read status fail : %d \n", gun_index);
  668. if(failCount[gun_index] < 5)
  669. failCount[gun_index]++;
  670. }
  671. }
  672. if(failCount[gun_index] >= 5)
  673. {
  674. //if(ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout)
  675. //{
  676. DEBUG_ERROR("Meter %d communication timeout",gun_index);
  677. #ifndef DEBUG_STANDALONG
  678. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].LinkStatus = 3;
  679. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout = ON;
  680. #else
  681. meter_info[gun_index].LinkStatus = 3;
  682. #endif
  683. //}
  684. PR("failconut fail : %d \n", gun_index);
  685. }
  686. else
  687. {
  688. if(meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk == 1 &&
  689. meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk == 1)
  690. {
  691. meter_info[gun_index].LinkStatus = 2;
  692. }else{
  693. meter_info[gun_index].LinkStatus = 1;
  694. }
  695. #ifndef DEBUG_STANDALONG
  696. ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].LinkStatus = meter_info[gun_index].LinkStatus;
  697. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout = OFF;
  698. //linkstatus 1 = los meter slave, 2 is can to be Transaction
  699. if(ShmSysConfigAndInfo->SysInfo.DcMeterInfo[gun_index].LinkStatus == 1)
  700. {
  701. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterSlaveLosLink = ON;
  702. }else{
  703. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterSlaveLosLink = OFF;
  704. }
  705. #endif
  706. //PR("failconut pass : %d \n", gun_index);
  707. }
  708. }
  709. #ifndef DEBUG_STANDALONG
  710. DEBUG_INFO("shm Meter %d - LinkStatus %d : failCount: %d ActionCmd: %d OcmpInfoReady: %d\n RecordActionCmd: %d RecordOcmpInfoReady: %d", gun_index,
  711. meter_info[gun_index].LinkStatus,failCount[gun_index] ,
  712. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd ,
  713. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady,
  714. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd ,
  715. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady);
  716. PR ("=================== ModelName %s\n", ShmSysConfigAndInfo->SysConfig.ModelName);
  717. PR("end : %d ActionCmd : %d OcmfInfoReady : %d RecordActionCmd: %d RecordOcmpInfoReady: %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd,
  718. ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].OcmfInfoReady,
  719. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].ActionCmd,
  720. ShmSysConfigAndInfo->SysInfo.DcMeterReadTransactionRecord[gun_index].OcmfInfoReady);
  721. PR("shm bits-suLinkStatusIsOk %d : %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk);
  722. PR("shm bits-transactionIsOnGoing %d : %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.transactionIsOnGoing);
  723. PR("shm bits-timeSyncStatusIsOk %d : %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterStatusInfo[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk);
  724. #else
  725. DEBUG_INFO("Meter %d - LinkStatus %d : failCount: %d ActionCmd: %d OcmpInfoReady: %d RecordActionCmd: %d RecordOcmpInfoReady: %d\n", gun_index,
  726. meter_info[gun_index].LinkStatus,failCount[gun_index] ,
  727. meter_transaction_Action[gun_index].ActionCmd ,
  728. meter_transaction_Action[gun_index].OcmfInfoReady,
  729. meter_read_transaction_record[gun_index].ActionCmd ,
  730. meter_read_transaction_record[gun_index].OcmfInfoReady);
  731. PR ("=================== STAND ALONE\n");
  732. PR("end : %d ActionCmd : %d OcmfInfoReady : %d RecordActionCmd: %d RecordOcmpInfoReady: %d \n", gun_index,meter_transaction_Action[gun_index].ActionCmd,
  733. meter_transaction_Action[gun_index].OcmfInfoReady,
  734. meter_read_transaction_record[gun_index].ActionCmd,
  735. meter_read_transaction_record[gun_index].OcmfInfoReady);
  736. PR("shm bits-suLinkStatusIsOk %d : %d \n", gun_index,meter_status_info[gun_index].MeterStatusFlag.bits.suLinkStatusIsOk);
  737. PR("shm bits-transactionIsOnGoing %d : %d \n", gun_index,meter_status_info[gun_index].MeterStatusFlag.bits.transactionIsOnGoing);
  738. PR("shm bits-timeSyncStatusIsOk %d : %d \n", gun_index,meter_status_info[gun_index].MeterStatusFlag.bits.timeSyncStatusIsOk);
  739. #endif
  740. usleep(1000000/modelnameInfo.GetGunCount);
  741. if(gun_index == modelnameInfo.GetGunCount){
  742. RecordLogTimerCount++;
  743. }
  744. //PR("end : %d ActionCmd : %d \n", gun_index,ShmSysConfigAndInfo->SysInfo.DcMeterTransactionAction[gun_index].ActionCmd);
  745. }
  746. }
  747. return -1;
  748. }