SIEMENS, DF&PD

Предыдущее посещение: Пн июл 04, 2016 0:44 Текущее время: Пн июл 04, 2016 0:44

Часовой пояс: UTC + 3 часа




 [ Сообщений: 18 ] 
Автор Сообщение
 Заголовок сообщения: Фильтрация Alarm'ов
СообщениеДобавлено: Пт июн 15, 2012 17:24 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
В AlarmLogging настроены одинаковые сообщения для нескольких одинаковых объектов. Для того, чтобы отличать объекты друг от друга ввел дополнительное поле в User text (где объекты названы Объект1, Объект2 и т.д).

Необходимо реализовать механизм фильтрации сообщений по этому текстовому полю, то есть по номерам объектов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 15, 2012 19:22 
Не в сети
Писатель со стажем

Зарегистрирован: Пн июл 06, 2009 9:37
Сообщения: 851
Откуда: Санкт-Петербург
по форуму не искали?
http://iadt.siemens.ru/forum/viewtopic. ... 0%F6%E8%FF
http://iadt.siemens.ru/forum/viewtopic. ... 0%F6%E8%FF


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2012 10:45 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
Александр В.. писал(а):
по форуму не искали?
Искал, но определенного ответа не нашел.

Пробовал. Но у меня не удается настроить фильтр в MsgFilterSQL. Поэтому и обратился с новым вопросом. У сделал кнопки, по нажатию которых запускается скрипт и внутреннему тегу присваиваются различные значения 1, 2 и т.д. В динамических свойствах MsgFilterSQL я записал этот тег.

В окне AlarnControl вообще ничего не выходит. Меня интересует подробности того, как работает механизм фильтрации. Ему нужно точное совпадение запрашиваемого выражения с имеющегося в БД?

То есть если задать в фильтр 1, то какие сообщения выйдут?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2012 12:50 
Не в сети
Писатель со стажем

Зарегистрирован: Пн июл 06, 2009 9:37
Сообщения: 851
Откуда: Санкт-Петербург
какая версия WinCC?
http://iadt.siemens.ru/forum/viewtopic. ... gfiltersql


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 17, 2012 1:00 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
6.2 SP2 asia


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 17, 2012 8:23 
Не в сети
Писатель со стажем

Зарегистрирован: Пн июл 06, 2009 9:37
Сообщения: 851
Откуда: Санкт-Петербург
вот эта картинка вам ничего не подсказывает?
Изображение
в поле "MsgFilterSQL" нужно поместить строку выборки из базы данных. строка должна содержать одно или несколько ключевых слов (полей MSGNR, STATE, CLASS, TYPE, DATETIME, TEXT1..TEXT10) и один или несколько операторов сравнения (=, <, >, LIKE), с помощью которых ключевые слова сравниваются с нужными данными.
вам нужно узнать в какое текстовое поле попала ваша строка и задавать фильтр по ней
http://iadt.siemens.ru/forum/viewtopic. ... 0617#30617


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 17, 2012 13:30 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
Александр В.. писал(а):
вот эта картинка вам ничего не подсказывает?
Изображение
в поле "MsgFilterSQL" нужно поместить строку выборки из базы данных. строка должна содержать одно или несколько ключевых слов (полей MSGNR, STATE, CLASS, TYPE, DATETIME, TEXT1..TEXT10) и один или несколько операторов сравнения (=, <, >, LIKE), с помощью которых ключевые слова сравниваются с нужными данными.
вам нужно узнать в какое текстовое поле попала ваша строка и задавать фильтр по ней
http://iadt.siemens.ru/forum/viewtopic. ... 0617#30617


Подсказывает. Спасибо. Завтра попробую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 18, 2012 6:25 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
Записи вида: TEXT4=Alarm_Index
TEXT4 LIKE Alarm_Index
где Alarm_Index внутренний 8-ми битный тег подвешивает RunTime.

То есть мне нужно фильтровать сообщения в зависимости от значения переменной Alarm_Index. А значения этой переменной я присваиваю с помощью скрипта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 18, 2012 8:29 
Не в сети
Писатель со стажем

Зарегистрирован: Пн июл 06, 2009 9:37
Сообщения: 851
Откуда: Санкт-Петербург
выложите скриншоты и скрипт (http://iadt.siemens.ru/forum/viewtopic.php?t=12781)
без всяких скриптов в свойствах Alarm Control задайте свойство MsgFilterSQL равным TEXT4 LIKE '1' или что там у вас
скорее всего проблема в работе со строками


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 18, 2012 8:38 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
Александр В.. писал(а):
выложите скриншоты и скрипт (http://iadt.siemens.ru/forum/viewtopic.php?t=12781)
без всяких скриптов в свойствах Alarm Control задайте свойство MsgFilterSQL равным TEXT4 LIKE '1' или что там у вас
скорее всего проблема в работе со строками


Так работает. Получается, что задав фильтр один раз будем видеть только сообщения для объекта 1. А объектов несколько и нужно выводить в одном окне AlarmControl сообщения для разных объектов: 1,2,3,4.

Воспользовался скриптом из примера:

https://support.automation.siemens.com/ ... ype=130000

Все заработало, но вопросы остались.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2012 6:55 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
С фильтрацией по текстовому полю разобрался.

А теперь к текстовому фильтру еще нужно добавить фильтр по времени. Как в SQL запрос фильтра MsgFilterSQL засунуть поиск по дате и времени, при чем дату и время нужно брать из DTPicker'ов

Скрипт такого плана не срабатывает

SetPropChar(lpszPictureName,"Control1","MsgFilterSQL","DATETIME >='begin' AND "DATETIME <='end'")

begin и end это DTPickerЫ


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2012 8:18 
Не в сети
Писатель со стажем

Зарегистрирован: Пн июл 06, 2009 9:37
Сообщения: 851
Откуда: Санкт-Петербург
DTPicker дату возвращает в виде 'ГГГГ-ММ-ДД чч:мм:сс.мсмсмс'?
отладку скрипта через printf делаете?
какая строка в фильтре получается у вас при таком коде?
Код:
SetPropChar(lpszPictureName,"Control1","MsgFilterSQL","DATETIME >='begin' AND "DATETIME <='end'")


разберитесь с этим готовым скриптом, там есть и по тексту, и по времени, и по номеру даже
http://iadt.siemens.ru/forum/viewtopic. ... 0617#30617


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2012 11:30 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
DTPocker возвращает 'ГГГГ-ММ-ДД чч:мм:сс'

Миллисекунды добавить нельзя в Custom формате.

А в фильтре при таком коде получаются нули.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2012 11:39 
Не в сети
Писатель со стажем

Зарегистрирован: Пн июл 06, 2009 9:37
Сообщения: 851
Откуда: Санкт-Петербург
что у вас получается после скрипта в этом окне в подчеркнутом поле?
Изображение

вы может чего-то не понимаете?
Код:
s = "DATETIME >= '"+CStr(y1)+"-"+CStr(m1)+"-"+CStr(d1)+" "+CStr(h1)+":"+CStr(mm1)+":"+CStr(s1)+".000'"
    s = s + " AND DATETIME <= '"+CStr(y2)+"-"+CStr(m2)+"-"+CStr(d2)+" "+CStr(h2)+":"+CStr(mm2)+":"+CStr(s2)+".999'"

это на VBS, перед тем как задать следующий вопрос изучите функции работы со строками на С


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2012 12:04 
Не в сети
Известный Писатель

Зарегистрирован: Пт окт 30, 2009 10:27
Сообщения: 435
Откуда: Москва
Код:
void MsgFilter()
{
#pragma code ("oleaut32.dll")       
INT VariantTimeToSystemTime(   DATE  vtime, LPSYSTEMTIME  lpSystemTime  );
#pragma code ()
DATE dtDT;
SYSTEMTIME stDT;
char date1[100]="";
char date2[100]="";

char SQL[300]="";

dtDT=GetPropDouble("Mess.PDL","date1", "Value");                  //Получаем данные dtPicker1 (начало выборки)
VariantTimeToSystemTime(dtDT, &stDT);
sprintf(date1,"%04d-%02d-%02d %02d:%02d:%02d",  stDT.wYear, stDT.wMonth,stDT.wDay, stDT.wHour, stDT.wMinute, stDT.wSecond);

dtDT=GetPropDouble("Mess.PDL","date2", "Value");                  //Получаем данные dtPicker2 (конец выборки)
VariantTimeToSystemTime(dtDT, &stDT);
sprintf(date2,"%04d-%02d-%02d %02d:%02d:%02d",  stDT.wYear, stDT.wMonth,stDT.wDay, stDT.wHour, stDT.wMinute, stDT.wSecond);

if (GetBorderColorTop("Mess.PDL","Button1")==0x0099A8AC)                  // Проверяем кнопку "Начало"
{strcpy(SQL,"DATETIME >=  '");                  // Собираем фильтр
strcat(SQL,date1);
strcat(SQL,".000'");}

if (GetBorderColorTop("Mess.PDL","Button2")==0x0099A8AC)                  // Проверяем кнопку "Окончание"
{if (strcmp(SQL,"")!=0) {strcat(SQL," AND ");}
strcat(SQL,"DATETIME <=  '");
strcat(SQL,date2);
strcat(SQL,".000'");
}

if (GetBorderColorTop("Mess.PDL","Button3")==0x0099A8AC)                  //Проверяем кнопку "Сообщение"
{   if (strcmp(SQL,"")!=0) {strcat(SQL," AND TEXT4 LIKE '");}
   else {strcpy(SQL,"TEXT4 LIKE '");}
   strcat(SQL,GetPropChar("Mess.PDL","TEXT","OutputValue"));
   strcat(SQL,"'");
}
   
            //Фильтр собран
SetPropChar("Mess.PDL","Control1","MsgFilterSQL",SQL);            //Применяем фильтр на объект
}



Вот как-то так. Пришлось урезать свой скрипт, т.к. он выполнял больше функций... Оставил только получение даты-времени из DTPicker-ов и фильтр по тексту. Для активации того или иного фильтра нужно было использовать кнопки (нажата/отжата).
Проверьте, если ошибки - исправлю, а то самому проверять сейчас некогда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2012 12:18 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
Александр В.. писал(а):
что у вас получается после скрипта в этом окне в подчеркнутом поле?
Изображение

вы может чего-то не понимаете?
Код:
s = "DATETIME >= '"+CStr(y1)+"-"+CStr(m1)+"-"+CStr(d1)+" "+CStr(h1)+":"+CStr(mm1)+":"+CStr(s1)+".000'"
    s = s + " AND DATETIME <= '"+CStr(y2)+"-"+CStr(m2)+"-"+CStr(d2)+" "+CStr(h2)+":"+CStr(mm2)+":"+CStr(s2)+".999'"

это на VBS, перед тем как задать следующий вопрос изучите функции работы со строками на С


Наверняка что-то не понимаю. Поэтому и задаю вопросы. Если бы все понимал, то вопросов бы не было.

Этот скрипт не выполняется. Пишет, что выбор сделан так, что отображать данное окно далее не предоставляется возможным. Селекшен будет отменен. Соответственно поле пустое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2012 12:43 
Не в сети
Известный Писатель

Зарегистрирован: Пт окт 30, 2009 10:27
Сообщения: 435
Откуда: Москва
Попробуйте СИшный скрипт с такими вот настройками:
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 20, 2012 11:31 
Не в сети
Известный Писатель

Зарегистрирован: Сб фев 10, 2007 7:47
Сообщения: 122
Большое спасибо. Все работает.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group