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

2х часовые суточные отчеты

Ответить

Автор темы
Eugen123
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 09 фев 2024, 08:43
Имя: Евгений
Страна: Россия
Благодарил (а): 4 раза

2х часовые суточные отчеты

Сообщение Eugen123 »

Здравствуйте, столкнулся с задачей вывода суточного отчета в проекте PCS7.
С определенного времени (допустим, с 04:00) должен создаваться файл (*.csv или excel) в него записываются:
-текущая метка времени
-значение определенного тэга .
Далее каждые 2 часа в течение суток запись повторяется в созданный файл. Через 24 часа, создается новый файл и все повторяется.
На данный момент написал скрипт VB, который пишет значения тэга с меткой времени при вызове в файл Report_*Data*.csv. В скрипте имеется 2 переменных-счетчика, связанных с тэгами. counterCalls (связана с тэгом counter_call) - считает 12 повторений (12*2ч=24) и после создает файл отчета с новым именем, после обнуляется. counterDays (связана с тэгом counter_day) - считает прошедшие дни.
Скрипт закинул в глобальные скрипты. Но не могу выбрать подходящий триггер для него, т.к. повторения через 2 часа в стандартных циклах нет. Также глобальный скрипт начинает работать сразу после запуска рантайма, а требуется запуск ровно в 4:00.
Как добиться того, чтобы скрипт запускался ровно в 4:00 и далее каждые 2 часа
P.S. Возможно ли решить данную задачу без скриптов с использованием встроенного в WinCC ReportDesigner? Исторического сервера в проекте нет.
Код VB под спойлером
[+]

Код: Выделить всё

Dim file_path, fso, fso2, dataset1, counterCalls, counterDays, DateValue

'Connect variables with WinCC tags
Set counterCalls=HMIRuntime.Tags("counter_call")
Set counterDays=HMIRuntime.Tags("counter_days")
DateValue=Date

' Reading
counterCalls.Read
counterDays.Read

' Check condition  of execution
'If calls number > 12 then increment calls
If (counterCalls.Value >= 12) Then
counterDays.Value=counterDays.Value+1
counterDays.Write
' After that CounterCall = 0
counterCalls.Value=0
counterCalls.Write
End If

file_path="C:\HelloWorld\Report_" & counterDays.Value& "_"& DateValue& ".csv"

Set fso=CreateObject("Scripting.FileSystemObject")
dataset1 = Now() & ";" & HMIRuntime.Tags("Var1").Read

'Is Report File exist?
If (fso.FileExists(file_path)=True) Then
	'1 - read, 2 -write, 8 -append
	Set fso2=fso.OpenTextFile(file_path, 8, True)	
	fso2.WriteLine dataset1
	counterCalls.Value=counterCalls.Value + 1
	counterCalls.Write
Else
	Set fso2=fso.OpenTextFile(file_path, 2, True)
	fso2.WriteLine"date_time" & ";" & "value"
	fso2.WriteLine dataset1
	counterCalls.Value=counterCalls.Value +1
	counterCalls.Write
End If

fso2.Close

Set fso=Nothing
Set fso2 = Nothing

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

2х часовые суточные отчеты

Сообщение makesstr »

Ставьте триггер на ежечасно в 0 минут 0 секунд или когда вам надо.
В теле скрипта получите час от текущего времени Hour(Now()), делите его на 2, если остаток 0 -> здесь ваш отчет, End if
WinCC 7.4 SP1 Upd15, Step5.6

Автор темы
Eugen123
здесь недавно
здесь недавно
Сообщения: 10
Зарегистрирован: 09 фев 2024, 08:43
Имя: Евгений
Страна: Россия
Благодарил (а): 4 раза

2х часовые суточные отчеты

Сообщение Eugen123 »

Спасибо! Вопрос с отсевом нечетных часов решился. Осталось понять каким образом реализовать запуск скрипта именно с определенного времени? Если добавить условие, что Hour должен быть больше 2х часов (2:00), то отсекается запись данных в 00:00. Можно ли глобальный скрипт запустить не вместе с рантаймом а именно в назначенное для него время?

Код: Выделить всё


If ((Hour(Now())>=2) Or (counterCalls=11))  Then 'Условие запуска скрипта с 2:00 <- никакое
If (Hour(Now()) Mod 2 =0) Then 'условие отсева показаний нечетных часов
***
End If
End If

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

2х часовые суточные отчеты

Сообщение makesstr »

Отдельно нельзя, рантайм запускает скрипт. Просто в условии скрипта прописывайте нужные условия.
If Hour(Now())>=2) Or Hour(Now())>)=0
WinCC 7.4 SP1 Upd15, Step5.6
Ответить

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