Стартовая страница › Форумы › Разработка и интеграция › Время что дышло
- В этой теме 55 ответов, 5 участников, последнее обновление 1 год, 1 месяц назад сделано
manjey73.
-
АвторЗаписи
-
15.07.2025 в 11:34 #39415
manjey73Участниккуда повернешь, то и вышло… 🙂
Ситуация — читаю время записи архива из прибора (Логика) — стоит 0x0F — 15 часов
Вывожу в лог Log.WriteLine($»Время прибора {DevDt}»);
Время прибора 15.07.2025 15:23:06— время прибора — часы 15. Все отлично.Формирую slice для записи архива
DeviceSlice slice = new DeviceSlice(DevDt, ArcValue.Value.Count, ArcValue.Value.Count); // Здесь DevDt превращается в +3 по Москве, хотя указано время прибораИ видим такую картину маслом в логе устройства Время почему-то сделало +3 по Москве, но при этом в Описании указаны наши 15 часов.
Недавние исторические данные +---------------------+---------------------------------------------------------+ | Время | Описание | +---------------------+---------------------------------------------------------+ | 15.07.2025 18:21:06 | Запись Часовой архив, Время архива: 15.07.2025 15:21:06 | +---------------------+---------------------------------------------------------+ | 15.07.2025 18:21:36 | Запись Часовой архив, Время архива: 15.07.2025 15:21:36 | +---------------------+---------------------------------------------------------+Да, время прибора +7 часов от UTC по факту, и +4 по Москве. 🙂
А тут я видимо пишу в будущее?
15.07.2025 в 11:36 #39416
manjey73УчастникВот вопрос — как правильно записать архив в правильное время?
В общем нужен правильный мед, чтобы неправильные пчёлы не тасовали время как им вздумается 🙂
15.07.2025 в 11:49 #39417
manjey73УчастникНедавние исторические данные +---------------------+---------------------------------------------------------+ | Время | Описание | +---------------------+---------------------------------------------------------+ | 15.07.2025 15:41:12 | Запись Часовой архив, Время архива: 15.07.2025 12:41:12 | +---------------------+---------------------------------------------------------+ | 15.07.2025 15:41:36 | Запись Часовой архив, Время архива: 15.07.2025 12:41:36 |Да не в 12 часов мне надо записать данные, а в 8:00 блин клинтон, в ВОСЕМЬ НУЛЬ:НУЛЬ согласно времени UTC, раз база в UTC.
Прибор в Новосибирске +7ч от UTC, я в Краснодаре +3ч по UTC…. опрос от меня идет, но данные то могут смотреть ото всюду…
15.07.2025 в 11:52 #39418
manjey73УчастникМосква — Новосибирск + 4 часа
UTC — Новосибирск + 7 часовОпрос ведет Коммуникатор по Москве, время прибора по Новосибирску.
Подставьте сюда любой город вместо Новосибирска, проблемы непонятных манипуляций времени это не изменит.В логе Устройства по сохранению в БД будет каша …
-
Ответ изменён 1 год, 1 месяц назад пользователем
manjey73.
15.07.2025 в 11:57 #39420
manjey73УчастникПроблема заключается в том, что опрос устройств с архивами при помощи облачных серверов это обычное дело. Но сам сервер в одном часовом поясе, прибор в другом часовом поясе а время архива для UTC получается третий часовой пояс.
Как тут быть с точки зрения работы драйвера? подгонять что-ли или как?
15.07.2025 в 11:57 #39421
JurasskParkУчастникМожет сделать в конфигураци хранение часовых поясов? И при выполнении операции вызывать . addHour(-7) или .addHour(+19)?
Где переменная будет разница часового пояса.15.07.2025 в 12:16 #39422
manjey73УчастникВозможно математические манипуляции с указанием разницы времени в конфигураторе это и решит проблему.
Но это не решит проблемы slice — где переменная времени ОДНА на все и в варианте мат расчета времени просто будет некорректно отображать в логах.
Чтобы записать архив на 8:00 мне в slice нужно подставить время Москвы и тогда в последних 10-ти записях в логе устройства будет отображаться
Недавние исторические данные +---------------------+---------------------------------------------------------+ | Время | Описание | +---------------------+---------------------------------------------------------+ | 15.07.2025 11:00:00 | Запись Часовой архив, Время архива: 15.07.2025 08:00:00 | +---------------------+---------------------------------------------------------+Хотя время прибора будет отображаться как 15:00 в таблице переменных устройства.
Вот такая вот БЯКА со временем и отображением в логах получится. Видишь одно, получаешь другое, а хочешь получать нужное, будешь видеть другое… — ахинею 🙂
-
Ответ изменён 1 год, 1 месяц назад пользователем
manjey73.
15.07.2025 в 12:19 #39424
manjey73Участники в конфиге мало прописать +7, придется еще вычислять и разницу между временем прибора (который + 7) и временем ПК, на котором крутится опрос.
15.07.2025 в 13:08 #39425
manjey73УчастникЕще веселее… Прибор отстает на пару минут (из логов опроса)
Время прибора 15.07.2025 16:59:36 Дата Архивной записи 15.07.2025 16:00:00 - 45853,666666666664 datetime 15.07.2025 16:00:00 Разница в часах 2 и минутах 58 Время архивной записи 15.07.2025 16:00:00Время сохраненного архива только на 16:00 по времени прибора — разницу считает всего 3 часа, хотя по факту между Москвой и Новосибом +4 часа
И тут время в приборе перешагивает час (догоняет, у меня на часах уже 2 минуты)
Время прибора 15.07.2025 17:00:06 Дата Архивной записи 15.07.2025 17:00:00 - 45853,708333333336 datetime 15.07.2025 17:00:00 Разница в часах 3 и минутах 57 Время архивной записи 15.07.2025 17:00:00и надо же, разница уже практически 4 часа 🙂
жесть… как с этим бороться ? 🙂
15.07.2025 в 15:04 #39426
manjey73УчастникВопрос, а Slice должен работать БЕЗ DeviceData.Set?
То есть если я заношу в Slice данные, зачем еще делать DeviceData.Set? я же и так туда данные положил на метку времени…
Без этого, в запись попали нули и статусы 0, хотя указан архивный.
-
Ответ изменён 1 год, 1 месяц назад пользователем
manjey73.
15.07.2025 в 15:41 #39428
JurasskParkУчастникЕсли критично время, то на приборах выставляют время на -2 минуты.
Больше никак.
Мы тоже мучались с двухчасовками и суточными т.к. время на опрос + время формирования в самом контроллере.15.07.2025 в 17:06 #39430
manjey73УчастникВремя, когда надо считать очередной архив часовых данных из прибора, я контролирую по времени прибора. Начался новый «день» 🙂 точнее час, читаю.
С этим проблем вроде нет.Проблема с определением времени, когда запрашиваю данные за определенные часы.
И вопрос Михаилу. Каковы должны быть настройки Архива Коммуникатора, чтобы передать данные ТОЛЬКО при помощи Slice, не используя DeviceData.Set вообще.
Не нужна мне запись этих данных, кроме использования Slice. Или я опять нашел то, что не предусмотрено системой ? 🙂-
Ответ изменён 1 год, 1 месяц назад пользователем
manjey73.
15.07.2025 в 17:47 #39433
manjey73УчастникПохоже я действительно нашел режим, при котором работает неверно или не работает вообще… 🙁
15.07.2025 в 17:54 #39434
manjey73УчастникDeviceSlice slice = new DeviceSlice(ArcDateTime.AddHours(-1).ToUniversalTime(), ArcValue.Value.Count, ArcValue.Value.Count); // Здесь DevDt превращается в +3 по Москве, хотя указано время прибора // TEST for (int arc = 0; arc < ArcValue.Value.Count; arc++) { //DeviceData.Set($"{prefix}{ArcValue.Value[arc].Code}", ArcValue.Value[arc].Value, CnlStatusID.Defined); Log.WriteLine($"{ArcValue.Value[arc].Code} - {prefix}{ArcValue.Value[arc].Code} Value = {ArcValue.Value[arc].Value}"); slice.DeviceTags[arc] = DeviceTags[$"{prefix}{ArcValue.Value[arc].Code}"]; slice.CnlData[arc] = new CnlData(ArcValue.Value[arc].Value, CnlStatusID.Archival); } slice.Descr = $"Запись в {ArcValue.Name}, Время архива: {ArcDateTime.AddHours(-1).ToUniversalTime()}"; DeviceData.EnqueueSlice(slice);Без DeviceData.Set в БД ничего не попадает, при этом если запись slice вроде как по коду ниже, но переписать данные не может (или оно не попадает туда в принципе), так как статус каналов в БД 1 при наличии DeviceData.Set
slice.CnlData[arc] = new CnlData(ArcValue.Value[arc].Value, CnlStatusID.Archival);
Сюда же попадают все прочитанные данные и в том числе новый статус (архивный) а в БД пусто 🙁
-
Ответ изменён 1 год, 1 месяц назад пользователем
manjey73.
15.07.2025 в 18:06 #39437 -
Ответ изменён 1 год, 1 месяц назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.
