1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Расчет 2-х часовых усредненных сводок

Ответить

Автор темы
boombox
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 09 ноя 2015, 09:33
Имя: Марат

Расчет 2-х часовых усредненных сводок

Сообщение boombox »

Здравствуйте.
На предприятии формируется 2-х часовая сводка технологических параметров.
Скрипт VBS записывает мгновенные значения с датчиков каждые два часа в шаблон excel.
Руководство озадачило выводом в сводку 2-х часовых усредненных значений технологических параметров таких как давление и температура.
Работаю в WinCC Runtime V7.3 Upd8, еще не совсем освоил работу с программой.
Скрипт во вложении.
Буду благодарен за помощь, может есть у кого пример доработки скрипта в VBS editor.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Расчет 2-х часовых усредненных сводок

Сообщение makesstr »

Очень сложно написан скрипт.
Все эти 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
End If

If TimeStep > 0 Then
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
Можно заменить на
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

v0v
не первый раз у нас
не первый раз у нас
Сообщения: 343
Зарегистрирован: 12 дек 2018, 14:47
Имя: Влад
Благодарил (а): 1 раз
Поблагодарили: 44 раза

Расчет 2-х часовых усредненных сводок

Сообщение v0v »

Может лучше воспользоваться встроенным планировщиком WinCC? И скриптом который копирует данные в Excel с указанием времени.Например https://asutpforum.ru/viewtopic.php?p=105092#p105092
Таким скриптом я пользовался в WinCC Flexible.

LexSL
осмотрелся
осмотрелся
Сообщения: 192
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 65 раз
Поблагодарили: 46 раз

Расчет 2-х часовых усредненных сводок

Сообщение LexSL »

Вы пишете:
boombox писал(а): 11 май 2020, 18:10 Скрипт VBS записывает мгновенные значения с датчиков каждые два часа в шаблон excel.
а задача:
boombox писал(а): 11 май 2020, 18:10 Руководство озадачило выводом в сводку 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-х часовку.
Ответить

Вернуться в «WinCC»