|
@@ -45,6 +45,22 @@ int InitShareMemory()
|
|
|
else
|
|
|
{}
|
|
|
|
|
|
+ //Initialize ShmStatusCodeData
|
|
|
+ /*
|
|
|
+ if ((MeterSMId = shmget(ShmMeter_info, sizeof(struct METER_INFO), 0777)) < 0)
|
|
|
+ {
|
|
|
+ DEBUG_ERROR("shmget ShmStatusCodeData NG\n");
|
|
|
+ result = FAIL;
|
|
|
+ }
|
|
|
+ else if ((ShmMeter_info = shmat(MeterSMId, NULL, 0)) == (void *) -1)
|
|
|
+ {
|
|
|
+ DEBUG_ERROR("shmat ShmMeter_info NG\n");
|
|
|
+ result = FAIL;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {}
|
|
|
+ */
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
|
|
@@ -54,10 +70,10 @@ int InitShareMemory()
|
|
|
int main(void)
|
|
|
{
|
|
|
ParsingRatedCur modelnameInfo = {0};
|
|
|
- Meter_Info meter_info = {0};
|
|
|
+ Meter_Info meter_info[4];
|
|
|
uint8_t pollingIndex = 0;
|
|
|
uint8_t meterIndex = 0;
|
|
|
- uint8_t failCount = 0;
|
|
|
+ uint8_t failCount[4];
|
|
|
|
|
|
#ifndef DEBUG_STANDALONG
|
|
|
// Initialize share memory
|
|
@@ -74,14 +90,22 @@ int main(void)
|
|
|
}
|
|
|
|
|
|
RatedCurrentParsing((char*)ShmSysConfigAndInfo->SysConfig.ModelName, &modelnameInfo);
|
|
|
+
|
|
|
+#else
|
|
|
+ modelnameInfo.GetGunCount = 4;
|
|
|
+
|
|
|
#endif//DEBUG_STANDALONG
|
|
|
|
|
|
+
|
|
|
// Initialize DC meter model
|
|
|
/*
|
|
|
* TODO:
|
|
|
* 1. Maybe need to parse configuration by model name
|
|
|
*/
|
|
|
meterInitialize(METER_MODEL_LEM_L18005A);
|
|
|
+
|
|
|
+
|
|
|
+ DEBUG_INFO("modelnameInfo.GetGunCount %d \n", modelnameInfo.GetGunCount);
|
|
|
|
|
|
// Main loop
|
|
|
for(;;)
|
|
@@ -90,118 +114,150 @@ int main(void)
|
|
|
{
|
|
|
if(gun_index == 0)
|
|
|
meterIndex = 0;
|
|
|
+ meterIndex = gun_index;
|
|
|
|
|
|
if(modelnameInfo.ParsingInfo[gun_index].GunType != Gun_Type_AC)
|
|
|
{
|
|
|
meterApiAssign(meterIndex);
|
|
|
- switch(pollingIndex)
|
|
|
+
|
|
|
+ for(pollingIndex=0;pollingIndex<4;pollingIndex++)
|
|
|
{
|
|
|
- case 0:
|
|
|
- if(readCurrent(&meter_info))
|
|
|
- {
|
|
|
- #ifndef DEBUG_STANDALONG
|
|
|
- /*
|
|
|
- * TODO:
|
|
|
- * 1. Synchronize data to share memory
|
|
|
- */
|
|
|
- #else
|
|
|
- DEBUG_INFO("Output current: %.3f A\n", meter_info.presentCurrent);
|
|
|
- #endif//DEBUG_STANDALONG
|
|
|
- pollingIndex++;
|
|
|
- failCount = 0;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if(failCount < 10)
|
|
|
- failCount++;
|
|
|
- }
|
|
|
- break;
|
|
|
- case 1:
|
|
|
- if(readVoltage(&meter_info))
|
|
|
- {
|
|
|
- #ifndef DEBUG_STANDALONG
|
|
|
- /*
|
|
|
- * TODO:
|
|
|
- * 1. Synchronize data to share memory
|
|
|
- */
|
|
|
- #else
|
|
|
- DEBUG_INFO("Output voltage: %.3f V\n", meter_info.presetVoltage);
|
|
|
- #endif//DEBUG_STANDALONG
|
|
|
- pollingIndex++;
|
|
|
- failCount = 0;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if(failCount < 10)
|
|
|
- failCount++;
|
|
|
- }
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- if(readPower(&meter_info))
|
|
|
- {
|
|
|
- #ifndef DEBUG_STANDALONG
|
|
|
- /*
|
|
|
- * TODO:
|
|
|
- * 1. Synchronize data to share memory
|
|
|
- */
|
|
|
- #else
|
|
|
- DEBUG_INFO("Output power: %.3f kw\n", meter_info.presentPower);
|
|
|
- #endif//DEBUG_STANDALONG
|
|
|
- pollingIndex++;
|
|
|
- failCount = 0;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if(failCount < 10)
|
|
|
- failCount++;
|
|
|
- }
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- if(readEnergy(&meter_info))
|
|
|
- {
|
|
|
- #ifndef DEBUG_STANDALONG
|
|
|
- /*
|
|
|
- * TODO:
|
|
|
- * 1. Synchronize data to share memory
|
|
|
- */
|
|
|
- #else
|
|
|
- DEBUG_INFO("Totalize import energy: %.3f kwh\n", meter_info.totlizeImportEnergy);
|
|
|
- DEBUG_INFO("Totalize export energy: %.3f kwh\n", meter_info.totlizeExportEnergy);
|
|
|
- #endif//DEBUG_STANDALONG
|
|
|
- pollingIndex++;
|
|
|
- failCount = 0;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- if(failCount < 10)
|
|
|
- failCount++;
|
|
|
- }
|
|
|
- break;
|
|
|
- default:
|
|
|
- pollingIndex = 0;
|
|
|
- break;
|
|
|
+ switch(pollingIndex)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ if(readCurrent(&meter_info[meterIndex]))
|
|
|
+ {
|
|
|
+ #ifndef DEBUG_STANDALONG
|
|
|
+ /*
|
|
|
+ * TODO:
|
|
|
+ * 1. Synchronize data to share memory
|
|
|
+ */
|
|
|
+
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].presentCurrent = meter_info[meterIndex].presentCurrent;
|
|
|
+ #ifdef DEBUG_STANDALONG
|
|
|
+ DEBUG_INFO("shm Output current %d : %.3f A\n", meterIndex, ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].presentCurrent);
|
|
|
+ #endif
|
|
|
+
|
|
|
+ #else
|
|
|
+ DEBUG_INFO("Output current %d : %.3f A\n", meterIndex, meter_info[meterIndex].presentCurrent);
|
|
|
+ #endif//DEBUG_STANDALONG
|
|
|
+ //pollingIndex++;
|
|
|
+ failCount[meterIndex] = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(failCount[meterIndex] < 10)
|
|
|
+ failCount[meterIndex]++;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ if(readVoltage(&meter_info[meterIndex]))
|
|
|
+ {
|
|
|
+ #ifndef DEBUG_STANDALONG
|
|
|
+ /*
|
|
|
+ * TODO:
|
|
|
+ * 1. Synchronize data to share memory
|
|
|
+ */
|
|
|
+
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].presetVoltage = meter_info[meterIndex].presetVoltage;
|
|
|
+ #ifdef DEBUG_STANDALONG
|
|
|
+ DEBUG_INFO("shm Output voltage %d : %.3f V\n", meterIndex, ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].presetVoltage);
|
|
|
+ #endif
|
|
|
+ #else
|
|
|
+ DEBUG_INFO("Output voltage %d : %.3f V\n", meterIndex, meter_info[meterIndex].presetVoltage);
|
|
|
+ #endif//DEBUG_STANDALONG
|
|
|
+ //pollingIndex++;
|
|
|
+ failCount[meterIndex] = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(failCount[meterIndex] < 10)
|
|
|
+ failCount[meterIndex]++;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ if(readPower(&meter_info[meterIndex]))
|
|
|
+ {
|
|
|
+ #ifndef DEBUG_STANDALONG
|
|
|
+ /*
|
|
|
+ * TODO:
|
|
|
+ * 1. Synchronize data to share memory
|
|
|
+ */
|
|
|
+
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].presentPower = meter_info[meterIndex].presentPower;
|
|
|
+ #ifdef DEBUG_STANDALONG
|
|
|
+ DEBUG_INFO("shm Output power %d : %.3f kw\n", meterIndex, ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].presentPower);
|
|
|
+ #endif
|
|
|
+ #else
|
|
|
+ DEBUG_INFO("Output power %d : %.3f kw\n", meterIndex, meter_info[meterIndex].presentPower);
|
|
|
+ #endif//DEBUG_STANDALONG
|
|
|
+ //pollingIndex++;
|
|
|
+ failCount[meterIndex] = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(failCount[meterIndex] < 10)
|
|
|
+ failCount[meterIndex]++;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ if(readEnergy(&meter_info[meterIndex]))
|
|
|
+ {
|
|
|
+ #ifndef DEBUG_STANDALONG
|
|
|
+ /*
|
|
|
+ * TODO:
|
|
|
+ * 1. Synchronize data to share memory
|
|
|
+ */
|
|
|
+
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].totlizeImportEnergy = meter_info[meterIndex].totlizeImportEnergy;
|
|
|
+ #ifdef DEBUG_STANDALONG
|
|
|
+ DEBUG_INFO("shm Totalize import energy %d : %.3f kwh\n", meterIndex, ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].totlizeImportEnergy);
|
|
|
+ #endif
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].totlizeExportEnergy = meter_info[meterIndex].totlizeExportEnergy;
|
|
|
+ #ifdef DEBUG_STANDALONG
|
|
|
+ DEBUG_INFO("shm Totalize export energy %d : %.3f kwh\n", meterIndex, ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].totlizeExportEnergy);
|
|
|
+ #endif
|
|
|
+ #else
|
|
|
+ DEBUG_INFO("Totalize import energy %d : %.3f kwh\n", meterIndex, meter_info[meterIndex].totlizeImportEnergy);
|
|
|
+ DEBUG_INFO("Totalize export energy %d : %.3f kwh\n", meterIndex, meter_info[meterIndex].totlizeExportEnergy);
|
|
|
+ #endif//DEBUG_STANDALONG
|
|
|
+ //pollingIndex++;
|
|
|
+ failCount[meterIndex] = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(failCount[meterIndex] < 10)
|
|
|
+ failCount[meterIndex]++;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ pollingIndex = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- meterIndex++;
|
|
|
+ //meterIndex++;
|
|
|
}
|
|
|
|
|
|
- if(failCount >= 10)
|
|
|
+ if(failCount[meterIndex] >= 10)
|
|
|
{
|
|
|
#ifndef DEBUG_STANDALONG
|
|
|
if(ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout)
|
|
|
{
|
|
|
DEBUG_ERROR("Meter communication timeout");
|
|
|
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout = ON;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].LinkStatus = 2;
|
|
|
+ //ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout = ON;
|
|
|
}
|
|
|
#endif//DEBUG_STANDALONG
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
#ifndef DEBUG_STANDALONG
|
|
|
- ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout = OFF;
|
|
|
+ ShmSysConfigAndInfo->SysInfo.DcMeterInfo[meterIndex].LinkStatus = 1;
|
|
|
+ //ShmStatusCodeData->AlarmCode.AlarmEvents.bits.MeterCommTimeout = OFF;
|
|
|
#endif//DEBUG_STANDALONG
|
|
|
}
|
|
|
- usleep(500000);
|
|
|
+ usleep(200000);
|
|
|
}
|
|
|
}
|
|
|
|