Мастер смены открывает сменный отчёт в SCADA в конце вахты - пустые таблицы, нули в суммах, графики «нет данных за период». При этом на том же сервере тренд давления за смену рисуется нормально, архив в MasterSCADA 4D или в клиенте историка показывает кривые. Диспетчер говорит: «историк же работает». Бухгалтерия технологических показателей недовольна: «опять вручную в Excel».
Разрыв между «тренды есть» и «отчёт пустой» почти никогда не означает поломку диска. Это разные подсистемы: непрерывное архивирование по тегам и отчётный механизм с фильтрами по времени, смене, агрегации, шаблону и правам. Статья разбирает, почему historian пишет, а сменный отчёт не видит данные: границы смены, timezone, привязка тегов в шаблоне, агрегаты, лицензия точек, пустые интервалы. Не даём полный курс по настройке SCADA - фокус на стыке архива и отчётов.
Короткий ответ
Если тренды в историке есть, а сменный отчёт пустой, данные в архиве записываются, но отчёт их не запрашивает или запрашивает не те теги/интервал. Проверьте: совпадает ли окно смены (начало/конец, календарь смен) с реальным временем архива и часовым поясом сервера; привязаны ли в шаблоне отчёта те же имена тегов, что в каналах архивирования (не копии, не старые пути); включено ли архивирование для тегов, попадающих в агрегаты SUM/AVG; не стоят ли в отчёте фильтры quality или «только при работе»; генерируется ли отчёт на том же узле, где база истории; права роли на чтение архива за прошлый период. Тренд и отчёт часто используют один historian, но разные запросы - сбой в шаблоне не отключает запись трендов.
Два контура: архивирование и отчётность
Архивирование - циклическая запись значений тегов по расписанию или по изменению в historian database. Трендовый экран читает сырые или сжатые ряды за выбранный интервал. Сменный отчёт - шаблон (таблица, PDF, Excel) с параметрами ShiftStart, ShiftEnd, агрегатами за смену, счётчиками выпуска, простоями.
Типичная архитектура в MasterSCADA 4D или связке CODESYS + SCADA: каналы с флагом Archive; отдельный объект отчёта или внешний генератор; иногда SQL-запрос к той же БД, куда пишет historian.
Если Archive включён и тренд строится - запись работает. Отчёт может ссылаться на тег Tank1.Level в шаблоне, а архивируется Objects.Tank1.Level_Arch после переименования полгода назад. Или отчёт смотрит смену 08:00-20:00, а на объекте смена с 07:00, и «рабочие» часы попадают мимо окна.
Границы смены и производственные сутки
Смена 20:00-08:00 пересекает календарные сутки. Если отчёт привязан к дате «00:00-24:00», ночная смена разрезается на два пустых куска. Расписание смен должно быть единым источником для экрана «текущая смена», журнала оператора и отчёта.
При смене состава смен (праздники, укороченный день) статическое расписание в шаблоне Excel не обновляют - отчёт за праздник пустой при живом тренде. Технолог знает, что «вчера была укороченная», SCADA - нет, если календарь не завели.
На пуске согласуйте с производством: сколько смен, коды смен, пересечение полуночи, кто владелец справочника. АСУ вносит в SCADA; без этого интегратор ставит «08-20 / 20-08» по умолчанию и уезжает с объекта.
Часовой пояс и переход на летнее время
Сервер SCADA в UTC, смены в локальном UTC+5 - классика пустого отчёта «на час» или «на сутки». Оператор смотрит тренд в локальном времени клиента, отчёт генерируется на сервере в UTC - интервалы не пересекаются.
Проверьте: настройки timezone ОС сервера и SCADA Runtime; таблицу смен в справочнике; параметры отчёта «предыдущая смена» - от какого момента считается; переход на летнее время (если применимо). Симптом: «вчера отчёт был, сегодня пустой» ровно в неделю DST.
На пуске зафиксируйте: «все отчёты и тренды - время завода X, сервер синхронизирован NTP». Без этого спор «историк врёт» повторяется каждый квартал.
Качество GOOD, BAD и пустой интервал
Если в конце смены был обрыв связи, весь интервал может помечаться BAD для строгого отчёта. Тренд показывает последнее значение «замёрзшим», а агрегат AVG не считается. Настройка «игнорировать BAD» vs «пустая ячейка» меняет картину.
Для дискретных событий (пуски, счётчики) AVG бессмысленен - нужен LAST, COUNT или интеграл. Ошибочный тип агрегата даёт пустоту или ноль без ошибки в логе. Отчёт «средняя температура» по BOOL пуска - пустая ячейка при живом тренде состояния.
Сверьте политику quality в historian и в шаблоне отчёта. Если они разные, тренд и PDF живут в разных правилах.
Шаблон отчёта: теги, агрегаты, условия
В шаблоне сменного отчёта ячейки ссылаются на теги и функции: AVG(Pressure, ShiftStart, ShiftEnd), SUM(Flow, ...), COUNT(Alarm). Ошибки:
Тег в отчёте не архивируется (Archive выключен после оптимизации «чтобы диск не забивать»). Архивируется с deadband, а среднее за смену при стабильном процессе - пусто или одна точка. Условие «печатать только если Run=true» - за смену не было флага Run в архиве. Агрегат по строковому тегу или BOOL без приведения. Ссылка на вычисляемый тег, который считается только online, без записи в historian.
Откройте шаблон, для каждой пустой ячейки проследите цепочку до канала и флаг Archive. Сравните с тегом, который успешно рисуется на тренде - часто это разные имена.
Historian пишет, SQL отчёта смотрит в другую БД
На крупных объектах historian на одном сервере, отчёты Crystal/SSRS/скрипт - на другом, подключение к «боевой» копии БД не обновили. Тренд в SCADA читает live historian, отчёт - пустую тестовую базу.
Проверьте connection string отчёта, имя БД, реплику read-only с лагом репликации (отчёт за «только что закончившуюся смену» пуст, через час появляется). Для MasterSCADA - один узел архивации в дереве проекта.
Лицензия точек и отключённые каналы
В MasterSCADA 4D лицензия по точкам протокола: канал может отображаться в проекте, но архивирование отключено лицензией или политикой. Тренд иногда строят по live-каналу за последние часы из оперативного буфера, а отчёт требует глубокий архив - пусто.
Сверьте счётчик точек, какие каналы реально пишутся в БД (таблица тегов historian, диагностика диска). CODESYS на том же железе без счётчика точек - но место на диске и настройка Task архивации всё равно ограничивают.
Агрегация: AVG, LAST, SUM и «ноль вместо пусто»
Отчёт запрашивает среднее за смену. Если насос не работал и архив не писал (archive on change, значение не менялось), в интервале ноль записей - AVG пустой. Тренд на экране показывает интерполяцию или последнее значение, визуально «линия есть», в отчёте - blank.
Решения: архивировать по времени для технологических тегов сменного отчёта; в шаблоне использовать LastValue или Interpolate; явно помечать «нет данных» вместо нуля. Ноль в отчёте и пустая ячейка - разное для технолога.
Для счётчиков расхода за смену нужен SUM разностей или интеграл, не AVG мгновенного расхода. Ошибка в формуле даёт нули при полном тренде.
Права и автоматическая генерация
Отчёт генерируется по расписанию службой под учёткой SCADA_Service. У службы нет прав на объекты или архив - файл пустой. Интерактивный тренд оператор открывает под своей ролью с другими правами.
Проверьте журнал генерации отчётов, ошибки доступа, путь сохранения PDF (диск полон - пустой файл). Ручной запуск отчёта под администратором vs автоматический - сравнение за ту же смену.
Процедура диагностики на объекте
Выберите одну пустую метрику в отчёте, например среднее давление. Найдите тег в шаблоне. В дереве SCADA убедитесь Archive=on. Постройте тренд за ту же смену с тем же тегом - данные есть. Вручную задайте в отчёте те же ShiftStart/End, что в справочнике смен. Если пусто - ошибка в выражении шаблона или тип данных. Если вручную OK, автомат - смотрите расписание и учётку службы. Экспортируйте сырой CSV из historian за смену - есть ли строки. SQL к БД historian с COUNT(*) за интервал - согласуется с CSV.
Зафиксируйте в паспорте: список тегов сменного отчёта = список обязательного архивирования.
Приёмка: тестовая смена с контрольным листом
На FAT или в первую неделю эксплуатации проведите «контрольную смену»: 3-5 тегов вручную записать в журнал (время, значение с поля), сравнить с трендом и с PDF отчёта. Расхождение сразу показывает сдвиг timezone или неверный агрегат. Без этой процедуры пустой отчёт всплывает через месяц, когда бухгалтерия технологических показателей начнёт требовать цифры.
Включите в пакет сдачи документов при вводе раздел «архив и отчёты»: список тегов, период архивации, расписание смен, учётная запись генерации отчёта.
Связь с журналом оператора и HMI
Иногда «пустой отчёт» ожидают заполненным событиями оператора, а шаблон тянет только технологические теги. Кнопки «начало смены» не нажимали - параметры смены в отчёте default. Отладка HMI и журнал оператора помогает отделить человеческий фактор от архива. Гайд по ресурсам АСУ ТП - про структуру подсистем на объекте.
Что в отчёте, настройка и проверка
| Что в отчёте | Настройка | Проверка |
|---|---|---|
| Пустые все ячейки | Неверный интервал дат/смен | Сверить расписание смен с шаблоном |
| Пусто только по одному тегу | Другой канал в шаблоне | Сравнить имя архива на тренде и в отчёте |
| Пусто после обрыва связи | Фильтр только GOOD | Тренд quality, журнал связи |
| Нули вместо прочерков | AVG по пустому ряду | Тип агрегата LAST/SUM |
| Сдвиг на час | Часовой пояс | Метки в экспорте CSV архива |
| Пусто по понедельникам | Особое расписание не задано | Календарь производства |
| В ручном отчёте OK, в авто нет | Другой сервер / учётка | Журнал задач; права службы |
| AVG пусто, MAX есть | Мало точек в интервале | Период архивации; archive on change |
| Отчёт не создаётся | Путь / диск | Место на диске; права на папку export |
Вопросы с эксплуатации
Можно ли доверять тренду, если отчёт пустой?
Тренд показывает, что данные приходили. Отчёт говорит, что по правилам шаблона их нельзя учесть - разберите правила, не «перезапускайте архив».
Кто должен править шаблон - АСУ или IT?
Тот, кто знает границы смен и технологические сутки; IT подключает часовой пояс и расписание задач.
Достаточно ли видеть тренд для приёмки архива?
Нет. Приёмка включает сменный отчёт за тестовую смену с сверкой 3-5 контрольных тегов с трендом.
MasterSCADA и CODESYS по-разному архивируют?
Среды взаимозаменяемы на железе; механизм historian зависит от конфигурации проекта. Принцип «тренд ≠ отчёт без настройки шаблона» одинаков.
Почему отчёт пустой сразу после конца смены?
Задержка записи буфера, реплика БД или отчёт стартует до flush historian. Добавьте offset 5-15 минут в расписание.
Обсуждение