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

Фильтр аварий по дате и времени.

Ответить

Автор темы
buch20
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 28 дек 2020, 13:03
Имя: Игорь

Фильтр аварий по дате и времени.

Сообщение buch20 »

Добрый день.

VBS и С не знаю, все знания это чтение форумов.
Если поделитесь информацией, буду благодарен.


Хочу написать скрипт (язык не важен, мне больше нравится VBS) для фильтра аварий по дате и времени. Дату и время задавать через I/O Field/

Пробовал такой скрипт (найден на немецком форуме)

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

char sql_string[255];
sprintf (sql_string, "DATETIME >= '%s' " GetTagChar ("Time_Start"));
SetPropChar ("Avariya", "Alarm1", "MsgFilterSQL", sql_string);
Скрипт не работает. При замене Time_Start на конкретное время ( к примеру 2021-07-20 00:00:00.000) тоже не работает, но работает когда так :

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

SetPropChar ("Avariya", "Alarm1", "MsgFilterSQL", "DATETIME >= '2021-07-20  00:00:00.000' ");
Что я делаю не так ?

И второй вопрос : как получить значение "Time_Start" ?
Значение хочу получать примерно так же как и на скрине.
Снимок.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

Фильтр аварий по дате и времени.

Сообщение LexSL »

1. Для отладки скриптов пользуйтесь окном Global Diagnostics.
2. в строке -
buch20 писал(а): 20 июл 2021, 17:48 sprintf (sql_string, "DATETIME >= '%s' " GetTagChar ("Time_Start"));
пропущена запятая.
Должно быть так:

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

sprintf (sql_string, "DATETIME >= '%s' ", GetTagChar ("Time_Start"));
3. Если TimeStart - отдельный тег (string), то вот именно функцией GetTagChar его значение и получается.
Но исходя из Вашей картинки, можно предположить, что поля ввода (IO Field) даты и времени привязаны к отдельным тегам.
Тогда:

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

sprintf (str, "DATETIME >= '%d-%02d-%02d %02d:%02d:00' ", GetTagWord("year"), GetTagWord("month"), GetTagWord("day"), GetTagWord("hour"), GetTagWord("minute"));

Автор темы
buch20
здесь недавно
здесь недавно
Сообщения: 2
Зарегистрирован: 28 дек 2020, 13:03
Имя: Игорь

Фильтр аварий по дате и времени.

Сообщение buch20 »

Спасибо.
1. Для отладки скриптов пользуйтесь окном Global Diagnostics.
За это отдельное спасибо .

Почти разобрался как это работает, но теперь параметр из строки sprintf "DATETIME" не передает значение в строку SetPropChar.
У меня есть сомнения в том , что тут не нужны кавычки

SetPropChar ("Avariya", "Alarm1", "MsgFilterSQL", sql_string);

Подскажите литературу по VBS и С.

aisberg-007
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 21 ноя 2020, 19:39
Имя: Павел
Страна: Россия
город/регион: Великие Луки
Благодарил (а): 1 раз

Фильтр аварий по дате и времени.

Сообщение aisberg-007 »

9172.png
Привет вот мой вариант рабочего фильтра сообщений ....
'Автор: Инженер АСУ ТП, Солдатенко Павел Владимирович 2020/12/20
'Обьявлем вспомогательные тэги
Dim txt, FINISH, day_1,day_2,month_1,month_2,year_1,year_2,hour_1,min_1,sec_1,hour_2,min_2,sec_2, text, tag

'Записываем в тэг txt имена с ячейки AlarmLogging TEXT2(Area) и получаем сообщ. только по этим ячейкам
txt = txt + " AND TEXT2 IN('Маслонасос 1','Маслонасос 2','LT-01','АВР маслонасосов','СБРОС аварий')"

'Присваиваем значение фильтра тэгу
HMIRuntime.Tags("Btn_MSG").Write txt

'Фильтр по дате и времени (индикаторы ввода год/мес/число/час/мин/сек);
FINISH = ""
If HMIRuntime.Tags("ACTIVATE_FILTR").Read = 1 Then
day_1 = ScreenItems("IO_day_start").OutputValue ' Начальный фильтр - число;
month_1 = ScreenItems("IO_month_start").OutputValue ' Начальный фильтр - месяц;
year_1 = ScreenItems("IO_year_start").OutputValue ' Начальный фильтр - год;
hour_1 = ScreenItems("IO_hour_start").OutputValue ' Начальный фильтр - час;
min_1 = ScreenItems("IO_min_start").OutputValue ' Начальный фильтр - мин;
sec_1 = ScreenItems("IO_sec_start").OutputValue ' Начальный фильтр - сек;
day_2 = ScreenItems("IO_day_end").OutputValue ' Конечный фильтр - число;
month_2 = ScreenItems("IO_month_end").OutputValue ' Конечный фильтр - месяц;
year_2 = ScreenItems("IO_year_end").OutputValue ' Конечный фильтр - год;
hour_2 = ScreenItems("IO_hour_end").OutputValue ' Конечный фильтр - час;
min_2 = ScreenItems("IO_min_end").OutputValue ' Конечный фильтр - мин;
sec_2 = ScreenItems("IO_sec_end").OutputValue ' Конечный фильтр - сек;
tag = HMIRuntime.Tags("Btn_MSG").Read 'Чтение тэга в который пишутся данные фильтра с выбранной кнопки;

'склейка даты/времени начала фильтра И даты/времени конечного фильтра
FINISH = "DATETIME >= '"+CStr(year_1)+"-"+CStr(month_1)+"-"+CStr(day_1)+" "+CStr(hour_1)+":"+CStr(min_1)+":"+CStr(sec_1)+".000'" 'Дата/время начала фильтра
FINISH = FINISH + " AND DATETIME <= '"+CStr(year_2)+"-"+CStr(month_2)+"-"+CStr(day_2)+" "+CStr(hour_2)+":"+CStr(min_2)+":"+CStr(sec_2)+".999'" 'Дата/время конечного фильтра

End If

'склейка даты/время начало и конца и добовление данных фильтра
If HMIRuntime.Tags("ACTIVATE_FILTR").Read = 1 Then
FINISH = FINISH + tag
End If

'Присваиваем значение фильтра тегу
HMIRuntime.Tags("Filter_FilterString").Write FINISH

'Присваиваем значение фильтру окна Alarm Control
Set text=ScreenItems.Item("ALARM_LIST_HIS")
text.MsgFilterSQL = FINISH

End Sub
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

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