Здравствуйте.
На предприятии формируется 2-х часовая сводка технологических параметров.
Скрипт VBS записывает мгновенные значения с датчиков каждые два часа в шаблон excel.
Руководство озадачило выводом в сводку 2-х часовых усредненных значений технологических параметров таких как давление и температура.
Работаю в WinCC Runtime V7.3 Upd8, еще не совсем освоил работу с программой.
Скрипт во вложении.
Буду благодарен за помощь, может есть у кого пример доработки скрипта в VBS editor.
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Расчет 2-х часовых усредненных сводок
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 10
- Зарегистрирован: 09 ноя 2015, 09:33
- Имя: Марат
Расчет 2-х часовых усредненных сводок
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- освоился
- Сообщения: 222
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 38 раз
Расчет 2-х часовых усредненных сводок
Очень сложно написан скрипт.
Все эти if совершенно не нужны.
а = Hour(Now) + 6
b = Hour(now) + 22
c = Hour(now) + 55
d = Hour(now) + 71
e = Hour(now) + 38
Можно заменить на
If TimeStep = 0 Then
objXLSX.Cells(b, 3).Value = HMIRuntime.Tags("FT1/FT1_DAY.PV_Out#Value").Read
Else
NewValue = HMIRuntime.Tags("FT1/FT1_DAY.PV_Out#Value").Read
OldValue = objXLSX.Cells((b-1), 2).Value
objXLSX.Cells(b, 3).Value = NewValue - OldValue
End if
И так далее.
Я бы лучше создал 2 модуля, один для полуночи TimeStep=0 другой для всего остального и с помощью ежечасного скрипта вызывал бы один из модулей.
И зачем использовать такое огромное количество отступов в пол страницы?
Пример во вложениях
Все эти if совершенно не нужны.
а = Hour(Now) + 6
b = Hour(now) + 22
c = Hour(now) + 55
d = Hour(now) + 71
e = Hour(now) + 38
Можно заменить на
If TimeStep = 0 Then
objXLSX.Cells(b, 3).Value = HMIRuntime.Tags("FT1/FT1_DAY.PV_Out#Value").Read
Else
NewValue = HMIRuntime.Tags("FT1/FT1_DAY.PV_Out#Value").Read
OldValue = objXLSX.Cells((b-1), 2).Value
objXLSX.Cells(b, 3).Value = NewValue - OldValue
End if
И так далее.
Я бы лучше создал 2 модуля, один для полуночи TimeStep=0 другой для всего остального и с помощью ежечасного скрипта вызывал бы один из модулей.
И зачем использовать такое огромное количество отступов в пол страницы?
Пример во вложениях
У вас нет необходимых прав для просмотра вложений в этом сообщении.
WinCC 7.4 SP1 Upd15, Step5.6
-
- не первый раз у нас
- Сообщения: 372
- Зарегистрирован: 12 дек 2018, 14:47
- Имя: Влад
- Благодарил (а): 1 раз
- Поблагодарили: 50 раз
Расчет 2-х часовых усредненных сводок
Может лучше воспользоваться встроенным планировщиком WinCC? И скриптом который копирует данные в Excel с указанием времени.Например https://asutpforum.ru/viewtopic.php?p=105092#p105092
Таким скриптом я пользовался в WinCC Flexible.
Таким скриптом я пользовался в WinCC Flexible.
-
- освоился
- Сообщения: 208
- Зарегистрирован: 16 дек 2011, 15:13
- Имя: Алексей
- Страна: Россия
- Благодарил (а): 67 раз
- Поблагодарили: 53 раза
Расчет 2-х часовых усредненных сводок
Вы пишете:
Например, есть тег "PIT14/AI.PV_Out#Value". В TagLogging в архиве ProcessValueArchive создаете новый архивный тег (можно назвать как угодно),
который архивирует тег "PIT14/AI.PV_Out#Value" с параметрами:
Вкладка "Archiving":
Archiving type = Cyclic
Acquisition = 1 second
Archiving Factor = 1
Archiving Cycle = 1 minute
Вкладка "Parameters":
Processing = Mean Value
А также на вкладке "Archive Tag" в поле "Also put archived value in tag" выбираете какой нибудь тег, например "PIT14_AI_PV_Out_Avg", в который попадет архивное среднее.
Итого получаем: значение тега "PIT14/AI.PV_Out#Value" каждую секунду записывается в буфер, по прошествии 1 минуты берется этот буфер и вычисляется среднее значение и это среднее значение попадает в тег "PIT14_AI_PV_Out_Avg".
Обратите внимание: если Вам необходимо 2-х часовое среднее (Archiving Factor = 2, Archiving Cycle = 1 hours), то первое среднее значение посчитается лишь по прошествии 2 часов после запуска Runtime. Т.е. если запуск Runtime был в 10ч37м, то 2-х часовое среднее появится в 12ч37м и это будет среднее именно за 10ч37м..12ч37м.
Как я делал: уже есть 1 минутное среднее, в GlobalScript скрипт срабатывает каждую минуту, берет усредненное значение и суммирует
его в какой нибудь тег ( sum_1_min = sum_1_min + 1m_average).
Другой скрипт (часовой) берет эту сумму и делит на 60 (1 ч = 60 мин), получаем часовку.
Для 2-х часовок, соответственно нужно в часовом скрипте смотреть текущий час и если это 0,2,4,6...20, 22, брать сумму и делить на 120, получаем 2-х часовку.
а задача:
Получение усредненных значений за разные периоды времени в WinCC достаточно просто сделать, используя TagLogging.
Например, есть тег "PIT14/AI.PV_Out#Value". В TagLogging в архиве ProcessValueArchive создаете новый архивный тег (можно назвать как угодно),
который архивирует тег "PIT14/AI.PV_Out#Value" с параметрами:
Вкладка "Archiving":
Archiving type = Cyclic
Acquisition = 1 second
Archiving Factor = 1
Archiving Cycle = 1 minute
Вкладка "Parameters":
Processing = Mean Value
А также на вкладке "Archive Tag" в поле "Also put archived value in tag" выбираете какой нибудь тег, например "PIT14_AI_PV_Out_Avg", в который попадет архивное среднее.
Итого получаем: значение тега "PIT14/AI.PV_Out#Value" каждую секунду записывается в буфер, по прошествии 1 минуты берется этот буфер и вычисляется среднее значение и это среднее значение попадает в тег "PIT14_AI_PV_Out_Avg".
Обратите внимание: если Вам необходимо 2-х часовое среднее (Archiving Factor = 2, Archiving Cycle = 1 hours), то первое среднее значение посчитается лишь по прошествии 2 часов после запуска Runtime. Т.е. если запуск Runtime был в 10ч37м, то 2-х часовое среднее появится в 12ч37м и это будет среднее именно за 10ч37м..12ч37м.
Как я делал: уже есть 1 минутное среднее, в GlobalScript скрипт срабатывает каждую минуту, берет усредненное значение и суммирует
его в какой нибудь тег ( sum_1_min = sum_1_min + 1m_average).
Другой скрипт (часовой) берет эту сумму и делит на 60 (1 ч = 60 мин), получаем часовку.
Для 2-х часовок, соответственно нужно в часовом скрипте смотреть текущий час и если это 0,2,4,6...20, 22, брать сумму и делить на 120, получаем 2-х часовку.