PDA

Просмотр полной версии : Работа с архивными данными прибора в MasterSCADA 4D



Enigma
03.04.2023, 08:32
Добрый день.

При чтении архива с прибора отображается последняя запись в архиве. Как получить доступ ко всем значениям? Например отобразить в виде массива.

ПС. Если вывести тренд то он построится на заданную глубину чтения архива. Архив Masterscada считывает полностью. А как с ним работать?
ПС2. Прибор Логика СПТ963, MasterSCADA 4D.
6695666957

Александр Пинэко-Скворцов
03.04.2023, 09:37
Добрый день.

При чтении архива с прибора отображается последняя запись в архиве. Как получить доступ ко всем значениям? Например отобразить в виде массива.

ПС. Если вывести тренд то он построится на заданную глубину чтения архива. Архив Masterscada считывает полностью. А как с ним работать?
ПС2. Прибор Логика СПТ963, MasterSCADA 4D.
6695666957

Добрый день!

1.
В свойствах параметра справа включите свойство Архивировать.

2.
Для работы с архивом в коде программы используйте ФБ READ_ARCHIVE_DATA из библиотеки Общая - Системные. Описание ФБ см. в справке.

Enigma
03.04.2023, 12:04
Значит нужно с начало настроить перезапись архива из прибора в БД, а потом через БД работать с архивом?
Item параметра я узнаю когда перезапишу архив в БД?

Александр Пинэко-Скворцов
05.04.2023, 09:30
Значит нужно с начало настроить перезапись архива из прибора в БД, а потом через БД работать с архивом?
Item параметра я узнаю когда перезапишу архив в БД?

В свойствах параметра Вы включаете свойство Архивировать. Параметр будет сохраняться в архиве данных, назначенном текущему устройству (ПКМ по узлу - Назначить архив данных). В свойствах архива данных указывается путь к БД.
На вход Item блока READ_ARCHIVE_DATA принимается ссылка на параметр, т.е. достаточно перетащить параметр на этот вход.

Stenzigan
04.04.2024, 23:12
Всех приветствую! Не судите строго. Пытаюсь работать в MS4D без года, - неделю.)
Имеем архив переменной (счётчик кол-ва изделий), запись-сохранение "по изменению значения". Из данного архива требуется вычитать ежечасную производительность (сколько изделий - шт.) было сделано за каждый час в течении 12 часовой смены, а затем разложить эти 12 значений в виде таблицы по отдельным ячейкам в "текстовый вывод". Для чтения каждого из 12 интервалов архива, использую ОТДЕЛЬНЫЕ ФБ READ_ARCHIVE_DATA с указанием диапазона равного 1-му часу. Например с 07.00 до 08.00 один ФБ, с 08.00 до 09.00 второй ФБ, и т.д. Понимаю, что при обработке таким неоптимальным образом, система перегружена лишними вызовами ОТДЕЛЬНЫХ функциональных блоков и работает не оптимально. Это заметно и по торможению среды разработки, особенно в режиме отладки.
Имею опыт в написании функциональных блоков на языке СИ, и весь функционал реализовал бы на основе конструкции for(init-expression;cond-expression;loop-expression)statement; и указателях. Нужно: в цикле -> установили для READ_ARCHIVE_DATA параметры Begin и End, забрали значение из Values, отобразили его в элементе "текстовый вывод", далее смещаемся в Begin и End на час позже и передаем следующее значение в рядом стоящий элемент "текстовый вывод" НО! Как организовать передачу считанного значения из ФБ READ_ARCHIVE_DATA на следующий элемент текстового вывода? Как это красиво реализовать на FBD, используя только один блок чтения архивных данных, я не втыкаю. Может считать весь архив за смену, а потом работать со структурными данными? Но где тогда взять метку времени архива для выделения необходимых временных отрезков? HelpMePlease!
Скрины на FBD прилагаю.

Александр Пинэко-Скворцов
05.04.2024, 09:18
Всех приветствую! Не судите строго. Пытаюсь работать в MS4D без года, - неделю.)
Имеем архив переменной (счётчик кол-ва изделий), запись-сохранение "по изменению значения". Из данного архива требуется вычитать ежечасную производительность (сколько изделий - шт.) было сделано за каждый час в течении 12 часовой смены, а затем разложить эти 12 значений в виде таблицы по отдельным ячейкам в "текстовый вывод". Для чтения каждого из 12 интервалов архива, использую ОТДЕЛЬНЫЕ ФБ READ_ARCHIVE_DATA с указанием диапазона равного 1-му часу. Например с 07.00 до 08.00 один ФБ, с 08.00 до 09.00 второй ФБ, и т.д. Понимаю, что при обработке таким неоптимальным образом, система перегружена лишними вызовами ОТДЕЛЬНЫХ функциональных блоков и работает не оптимально. Это заметно и по торможению среды разработки, особенно в режиме отладки.
Имею опыт в написании функциональных блоков на языке СИ, и весь функционал реализовал бы на основе конструкции for(init-expression;cond-expression;loop-expression)statement; и указателях. Нужно: в цикле -> установили для READ_ARCHIVE_DATA параметры Begin и End, забрали значение из Values, отобразили его в элементе "текстовый вывод", далее смещаемся в Begin и End на час позже и передаем следующее значение в рядом стоящий элемент "текстовый вывод" НО! Как организовать передачу считанного значения из ФБ READ_ARCHIVE_DATA на следующий элемент текстового вывода? Как это красиво реализовать на FBD, используя только один блок чтения архивных данных, я не втыкаю. Может считать весь архив за смену, а потом работать со структурными данными? Но где тогда взять метку времени архива для выделения необходимых временных отрезков? HelpMePlease!
Скрины на FBD прилагаю.

Добрый день.

По описанию задачи Вам больше подойдёт перебор в цикле на языке ST. Таким образом и решите проблему с вызовом нескольких ФБ.

Stenzigan
05.04.2024, 10:05
Ну, что и требовалось доказать, смотрим в сторону ST.
Александр, спасибо за ответ!

Stenzigan
05.04.2024, 10:11
Я сильно удивлён, что при создании всего одного библиотечного ФБ для последовательного чтения архивных данных с 17-ю вложенными ФБ READ_ARCHIVE_DATA и парами десятков блоков простой булевой логики, смогут так затормозить работу интерфейса MS4D. Что-то здесь не так.