Добрый день, приложение перестало опрашивать точки учета (по всей видимости после обновления ЛЭРС ). Ошибка в приложении.
ошибка.txt (1.59 KB)
Пересоберите проект вашего приложения, предварительно указав в нем ссылки на библиотеки LersFramework текущей установленной версии.
MeasurePointConsumptionRecordCollection^ consumption = measurePoint->Data->GetConsumption(DateTime::Today.AddDays(0), DateTime::Today, Lers::Data::DeviceDataType::Current);//день(Lers::Data::DeviceDataType::Day) или текущее значение(Lers::Data::DeviceDataType::Current)
Ошибка в DeviceDataType
Error (active) name followed by ‘::’ must be a class or namespace name
Данная ошибка никак не относится к работе LersFramework. Если я правильно понимаю, данная ошибка относится к ошибкам синтаксиса языка C++.
Добрый день, ошибку связанную с DeviceDataType исправил, но осталась проблема с запуском приложения .
details.txt (4.42 KB)
Для анализа причин возникновения заявленной ошибки нам необходимы исходные коды вашего тестового приложения а также описание ваших действий в нем, при которых возникает данная ошибка.
Пожалуйста, если вы присылаете в ЛС какую либо информацию, напишите в теме об этом.
Вы прислали зачем то аж 3 проекта, хотя необходим только один проект, в котором воспроизводится описанная ошибка. В каком из этих проектов воспроизводится ошибка?
Также вы не прислали описание ваших действий в нем, при которых воспроизводится ошибка. Пожалуйста, сообщите их в данной теме (не в ЛС).
Добрый вечер, проект по последней ссылке. При запуске опроса через 8 сек появляется ошибка.
В данном проекте используются библиотеки сопутствующего приложения, взаимодействие с которым, на сколько я понимаю, вы хотите реализовать. К сожалению у нас не было возможности установить данное ПО, поэтому мы были вынуждены закомментировать часть кода в вашем проекте, осуществляго взаимодействие с данным ПО. Что впрочем не помешало воспроизвести описанную вами ситуацию.
Причина оказалась довольно банальной: вы объявляете сервер как обычную переменную C++, тогда как класс LersServer является классом среды CLR (.NET классом) и существование его объектов контролируется сборщиком мусора среды CLR. Получается сборщик мусора в какой то момент на свое усмотрение пытается удалить объект класса LersServer, который был неправильно инициализирован, что вызывает данную ошибку.
Вам необходимо создать объект класса LersServer при помощи оператора gcnew и взаимодействовать в коде с этим экземпляром.
Добрый день, спасибо за подсказку. Теперь приложение запускается и подключается к серверу, считывает версию сервер, имя точки учета ,но возвращает "Количество записей (0). На сервере сбор текущих данных настроен. Код строки ниже. Может были какие то изменения в LERS FRAMEWORK которые не учтены в коде?
MeasurePointConsumptionRecordCollection^ consumption = measurePoint->Data->GetConsumption(DateTime::Today.AddDays(0), DateTime::Today, Lers::Data::DeviceDataType::Current);//день(Lers::Data::DeviceDataType::Day) или текущее значение(Lers::Data::DeviceDataType::Current)
tb->AppendText(System::String::Concat("Количество записей: ", consumption->Count, "
"));
2020-04-23 21:01:35.5339 I:15 Lers.UserSessions.Login.LoginManager Пользователь ‘opc_wincc (отображаемое имя opc_wincc)’ успешно авторизован (IP-адрес: 192.168.2.2).)
2020-04-23 21:01:35.5495 I:15 Lers.UserSessionManager Открыт сеанс работы для пользователя ‘opc_wincc’, IP-адрес: 192.168.2.2. Приложение:
2020-04-23 21:01:35.5495 I:15 Lers.UserSessionManager Открыт сеанс работы с IP-адреса 192.168.2.2.
2020-04-23 21:01:35.5495 I:49 Lers.UserSessionManager Получение дополнительной информации при подключении…
2020-04-23 21:01:35.5808 I:95 Lers.Core.Request.GetMeasurePointRequestProcessor Запрос на получение точки учета.
2020-04-23 21:01:35.5964 I:95 Lers.Core.Hardware.Request.GetEquipmentRequestProcessor Получение списка оборудования для объекта учёта.
2020-04-23 21:01:35.6433 I:98 Lers.Data.Request.GetConsumptionRequestProcessor Получение потребления по точке учета.
2020-04-23 21:01:35.6589 I:98 Lers.Data.Request.GetConsumptionRequestProcessor Запрошено потребление по точке учета: ‘Объекты ОЭЗ - Объекты ОЭЗ - ЖД Терминал Теплоснабжение’ за период 23.04.2020 0:00:00 - 23.04.2020 0:00:00.
2020-04-23 21:01:35.6745 I:68 Lers.Core.Request.GetMeasurePointRequestProcessor Запрос на получение точки учета.
2020-04-23 21:01:35.6901 I:68 Lers.Core.Hardware.Request.GetEquipmentRequestProcessor Получение списка оборудования для объекта учёта.
2020-04-23 21:01:35.7370 I:98 Lers.Data.Request.GetConsumptionRequestProcessor Получение потребления по точке учета.
2020-04-23 21:01:35.7526 I:98 Lers.Data.Request.GetConsumptionRequestProcessor Запрошено потребление по точке учета: ‘Объекты ОЭЗ - Объекты ОЭЗ - ЛНС ХВС’ за период 23.04.2020 0:00:00 - 23.04.2020 0:00:00.
Каких либо ошибок с точки зрения LersFramework не обнаружил.
Тут проблема несколько в другом. Вы пытаетесь запросить потребление за период с 00:00 часов текущего дня по 00:00 текущего дня… То есть по сути вы пытаетесь всегда получать данные на одну метку времени, а именно на 00:00 часов текущих суток. Вас это не смущает? Ведь суточное потребление за “сегодня” (Today) никогда не будет сформировано, так как сегодняшний день еще не закончился. А когда он закончится, наступит следующий день, и уже он станет сегодняшним, и вы будете запрашивать данные уже за этот незавершенный день. То есть ситуация будет повторяться постоянно.
С текущими данными ситуация несколько иная. Вы опять же запрашиваете текущее потребление на 00:00 часов текущих суток, но маловероятно что у вас есть текущее потребление именно на данную метку времени, так как для этого необходимо, чтобы непосредственно снятие текущих данных произошло ровно в 00:00 текущих суток. Даже если у вас есть текущие данные на 00:01 текущих суток, они уже не попадают в заданный вами период, так как, повторюсь, он включает только одну метку времени 00:00 текущих суток.
Лучше всего, перед тем как запросить какие либо данные из вашей программы, проверяйте есть ли вообще эти данные в точке учета (точках учета) за запрашиваемый период. Для этого откройте таблицу с данными выбранной точки, слева выберите тип архива, по которому вы собираетесь запросить данные, а также период, включающий период запроса данных из вашей программы, после чего нажмите кнопку “Применить” и проверьте наличие данных.
Спасибо, теперь все работает. Тему можно закрыть.