День добрый!
Сталкнулся со следующей ситуацией:
Раньше мы сохраняли текущие и часовые данные и всё работало отлично. Но вот понадобилось нам записывать еще и дневные и месячные. При запиcи месячных данных выходит ошибка:
Метка времени месячных данных 10.07.2017 0:00:00 содержит дни, часы, минуты, либо секунды.
MeasurePointConsumptionRecordCollection data = new MeasurePointConsumptionRecordCollection(DeviceDataType.Month);
MeasurePointConsumptionRecordWater record = new MeasurePointConsumptionRecordWater(DateTime.Now.Date);
record.V_in = value; // Объем перекаченной воды
data.Add(record); //Здесь ошибка
Я так понимаю библиотеке не нравится что у даты есть время. Но как его убрать?
И еще если Записывать последовательно друг за другом текущие, часовые, дневные и месячные данные - то запишутся только текущие. Остальные в Бд почему то не попадают. Но если делать между записями небольшую задержку, то все записи попадают в БД.
Не пишутся дневные данные. Если после записи зайти в таблицу в ЛЕРС, то там будут только расчетные значения дневного архива.
Ошибка, возникающая при последовательной записи всех архивов без задержки:
2017-07-11 11:24:48.4350|Error| Ошибка отправки данных в LERS: Lers.NoConnectionException: Соединение с сервером не установлено или было разорвано.
в Lers.Networking.UserSession.ExecuteRequestAsync(Int32 operationId, PropertyBag requestData, Int32 timeOut, AsyncOperationCallback callback, Object userState, ISynchronizeInvoke synchronizeInvoke)
в Lers.Core.MeasurePointData.SetConsumptionAsync(MeasurePointConsumptionRecordCollection consumption, MeasurePointSetConsumptionOptions options, AsyncOperationCallback callback, Object userState)
в Lers.Core.MeasurePointData.SetConsumption(MeasurePointConsumptionRecordCollection consumption, MeasurePointSetConsumptionOptions options)
в LERSService.LERSTools.SendToLERS(ImpulseModel model, Boolean DisconnectWhenFinished, DeviceDataType typeValue) в D:ProjectsGitLersService1LERSServiceCoapUILERSTools.cs:строка 179
2017-07-11 11:24:48.5100|Error| Проблема с закрытием соединения с сервером LERS: Lers.NoConnectionException: Соединение с сервером не установлено или было разорвано.
в Lers.LersServer.Disconnect(Int32 logoutTimeout)
в LERSService.LERSTools.DisconnectServer() в D:ProjectsGitLersService1LERSServiceCoapUILERSTools.cs:строка 85
Ошибка, возникающая при записи месячного архива:
2017-07-11 11:26:34.3171|Error| System.ArgumentException: Метка времени месячных данных 05.07.2017 0:00:00 содержит дни, часы, минуты, либо секунды.
в Lers.Data.MeasurePointConsumptionRecordCollection.CheckDateTimeValue(DateTime dateTime, DeviceDataType dataType)
в Lers.Data.MeasurePointConsumptionRecordCollection.Add(MeasurePointConsumptionRecord item)
в LERSService.LERSTools.SendToLERS(ImpulseModel model, Boolean DisconnectWhenFinished, DeviceDataType typeValue) в D:ProjectsGitLersService1LERSServiceCoapUILERSTools.cs:строка 162: System.ArgumentException: Метка времени месячных данных 05.07.2017 0:00:00 содержит дни, часы, минуты, либо секунды.
в Lers.Data.MeasurePointConsumptionRecordCollection.CheckDateTimeValue(DateTime dateTime, DeviceDataType dataType)
в Lers.Data.MeasurePointConsumptionRecordCollection.Add(MeasurePointConsumptionRecord item)
в LERSService.LERSTools.SendToLERS(ImpulseModel model, Boolean DisconnectWhenFinished, DeviceDataType typeValue) в D:ProjectsGitLersService1LERSServiceCoapUILERSTools.cs:строка 162
2.
// Сохраняем суточные данные о потреблении по точке учета.
// Чтобы сохранить данные по воде, используйте Lers.Data.WaterConsumptionRecord, по электроэнергии - Lers.Data.ElectricConsumptionRecord.
MeasurePointConsumptionRecordCollection data =
new MeasurePointConsumptionRecordCollection(typeValue);
MeasurePointTotalsRecordCollection data2 = new MeasurePointTotalsRecordCollection();
if (typeValue == DeviceDataType.Hour || typeValue == DeviceDataType.Day || typeValue == DeviceDataType.Month);
{
MeasurePointConsumptionRecordWater record =
new MeasurePointConsumptionRecordWater(
getDateTime(typeValue, time));
record.V_in = value*commentObj.mulriplier; // Объем перекаченной воды
data.Add(record);
}
else
{
MeasurePointTotalsRecordWater record = new MeasurePointTotalsRecordWater(getDateTime(typeValue, time));
record.V_in = value*commentObj.mulriplier;
data2.Add(record);
}
// Устанавливаем флаг для перезаписи существующих данных и сохраняем данные.
MeasurePointSetConsumptionOptions options = new MeasurePointSetConsumptionOptions();
options.OverwriteExistingRecords = true;
MeasurePointSetTotalsOptions options2 = new MeasurePointSetTotalsOptions();
options2.OverwriteExistingRecords = true;
try
{
if (typeValue == DeviceDataType.Hour);
{
measurePoint.Data.SetConsumption(data, options);
}
else { measurePoint.Data.SetTotals(data2, options2); }
Log.Logger.Info(
string.Format(
"Успешная отправка данных в LERS - значение - {0}, номер входа -{1}, время - {2}",
value, i, model.DateTime));
}
catch (Exception ex);
{
Log.Logger.Error(ex, "Ошибка отправки данных в LERS");
success = false;
}
где getDateTime:
private static DateTime getDateTime(DeviceDataType typeValue, DateTime time);
{
switch (typeValue);
{
case DeviceDataType.Hour: return new DateTime(time.Year, time.Month, time.Day,
time.Hour, 0, 0);
case DeviceDataType.Day:
case DeviceDataType.Month: return new DateTime(time.Year, time.Month, time.Day).Date;
default:
return time;
}
}
Да, теперь месячные данные пишутся без ошибки.
Но остальные 2 проблемы остались:
Если друг за другом писать данные в архив, то запишется только 1 значение (Например пишем Текущие, Часовые, Дневные, Месячные данные друг за другом, а запишутся только Текущие)
Дневные и Месячные данные не пишутся. Точнее запись производится без ошибок, а в таблице с часовыми и Месячными данными пусто