SIEMENS, DF&PD

Предыдущее посещение: Вс июл 03, 2016 23:19 Текущее время: Вс июл 03, 2016 23:19

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




 [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: проверить существование тега
СообщениеДобавлено: Пн дек 13, 2010 9:39 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
Каким образом можно проверить существует тег или нет?

Если юзать GetTagXXXState, то конечно узнать это можно, но при этом в лог сыпеться сообщение об ошибке. Т.е. при этом мы получаем состояние тега и пытаемся его читать. А мне нужно только узнать есть он или нет.
Как?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проверить существование тега
СообщениеДобавлено: Пн дек 13, 2010 19:09 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7509
Откуда: Украина
Eagle писал(а):
Каким образом можно проверить существует тег или нет?

Существует где? В программе PLC или в WinCC?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проверить существование тега
СообщениеДобавлено: Пн дек 13, 2010 19:36 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
Eugene1974 писал(а):
Существует где? В программе PLC или в WinCC?

Естественно в WinCC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проверить существование тега
СообщениеДобавлено: Пн дек 13, 2010 20:10 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7509
Откуда: Украина
Eagle писал(а):
Естественно в WinCC.

Механизм перекрёстных ссылок Вам в помощь. Если поверять факт существования тега надо в рантайме, посмотрите ODK, может найдёте нужную функцию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проверить существование тега
СообщениеДобавлено: Вт дек 14, 2010 5:22 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
Eugene1974 писал(а):
Механизм перекрёстных ссылок Вам в помощь. Если поверять факт существования тега надо в рантайме, посмотрите ODK, может найдёте нужную функцию.

Раз уж я указал функцию GetTagXXXState, то явно имел в виду рантайм.
В ODK максимум что есть, так это функция
DMEnumVariables - Enumerate tag names
она формирует список тегов, подходящих под критерии и для каждой вызывает пользовательскую функцию, но не выдаёт количество найденных тегов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проверить существование тега
СообщениеДобавлено: Вт дек 14, 2010 9:15 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7509
Откуда: Украина
Проверка существования тега на этапе исполнения - вещь совершенно бесполезная ИМХО. Раз такая необходимость возникает - у Вас неверный подход к проектированию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проверить существование тега
СообщениеДобавлено: Вт дек 14, 2010 9:53 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
Eugene1974 писал(а):
Проверка существования тега на этапе исполнения - вещь совершенно бесполезная ИМХО. Раз такая необходимость возникает - у Вас неверный подход к проектированию.

У меня порой тоже возникает подобная мысль.
Но,
берём однолинейную схему подстанции. около 60 выключателей.
для каждого выключателя необходимо отобразить параметры сети. т.е. в контекстном окне показали по нему информацию. например,
Iинт, Ia, Ib, Ic
Uинт, Ua, Ub, Uc

эти данные забираются из нескольких систем. Одна система обеспечит все данные, другая только Iинт и Uинт. Что делать для остальных значени? Просто создать тег и показывать ноль? А нафига он нужен этот тег? Будет сводит с толку диспетчера.
Т.е. для какого-то объекта показываем все данные, а для другого только те, которые есть. Реализация контекстного окна информации для всех одно. Делать несколько реализация слишком геморно. Во-первых надо вносить изменение уже не в одну pdl, а в несколько. Во-вторых надо задавать какие-то параметры объекту, для которого это окно вызывается.
Да и сопровождать будет легче. Обвязали новый терминал, добавили тег и всё в порядке. А иначе надо будет лезть и перелопачивать всё и вся.

ЗЫ: Кажется в VBS есть такая функция ListTag. Придётся там копаться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проверить существование тега
СообщениеДобавлено: Вт дек 14, 2010 10:27 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 22, 2006 15:35
Сообщения: 180
Откуда: Украина
Eagle писал(а):
Кажется в VBS есть такая функция ListTag. Придётся там копаться.


Да, можно выводить список всех тегов или создавать фильтр и выводить по маске только нужные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: проверить существование тега
СообщениеДобавлено: Вт дек 14, 2010 11:31 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
CatCesar писал(а):
Да, можно выводить список всех тегов или создавать фильтр и выводить по маске только нужные.

Не буду создавать новую тему.

Код:
Function OutputValue_Trigger(Byval Item)

   Dim objGO
   Dim arrContent
   
   Set objGO = CreateObject("HMIGenObjects.HMIGO")
      
   objGO.ListTag 5, arrContent, "???"
   
   'MsgBox UBound(arrContent), vbOKOnly, "Status Variable"
      
   objGO = Nothing
   
End Function

Вместо вопросов мне нужно задать тег, который состоит из TagPrefix + "_TS"
Не могу найти как я могу получить префикс тега.
Item.Parent.Parent тут нет, даже property нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 14, 2010 12:31 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
Оказалось, что ListTag работает оооооочень медленно.
Казалось бы, функция проще некуда...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 15, 2010 4:39 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
Нашёлся обходной путь. Привязал к IOField через SetLink.
Если бы ещё можно было сменить изображение, которое появляется когда тег недоступен.


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

Зарегистрирован: Пн авг 08, 2005 9:54
Сообщения: 337
Откуда: Украина, ПАО "НКМЗ"
Eagle писал(а):
Нашёлся обходной путь. Привязал к IOField через SetLink.
Если бы ещё можно было сменить изображение, которое появляется когда тег недоступен.

пробовали?
Изображение


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

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
Я не знаю как такое можно сделать через SetLink.

Т.е.

LINKINFO linkinfo;
linkinfo.LinkType = 1;
linkinfo.dwCycle = 0;
strcpy(linkinfo.szLinkName, "_I"); // <- используется TagPrefix
SetLink(lpszPictureName,"io_I","OutputValue", &linkinfo);

Как в диалоге можно использовать TagPrefix?


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

Зарегистрирован: Ср май 26, 2010 10:00
Сообщения: 113
Код:
static double limitValue[1] = {100.00000000000000,};
static unsigned long statusValue[15] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,};

if (statusValue[CheckLimitStatusQC (2,TAG_1, 14, 1,&limitValue[0])])


StatusValue это данные с TagStatus
7 по счету и есть Tag Not Found

сделайте так
Код:
static unsigned long statusValue[15] = {1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,};


и вам вернеться фалс если тэга небудет

можете поиграться и с остальными параметрами


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 15, 2010 12:51 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
ONYX писал(а):
Код:
static double limitValue[1] = {100.00000000000000,};
static unsigned long statusValue[15] = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,};

if (statusValue[CheckLimitStatusQC (2,TAG_1, 14, 1,&limitValue[0])])


StatusValue это данные с TagStatus
7 по счету и есть Tag Not Found

сделайте так
Код:
static unsigned long statusValue[15] = {1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,};


и вам вернеться фалс если тэга небудет

можете поиграться и с остальными параметрами

В этом случае происходит чтение тега и вывод ошибки "тег не существует" в консоль. Того же самого можно добиться просто вызвав GetTagXXXState и получить состояние тега. Что, как видите, недопустимо.


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

Зарегистрирован: Ср май 26, 2010 10:00
Сообщения: 113
Где вы это смотрите?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 15, 2010 14:20 
Не в сети
Писатель со стажем

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
ApplicationWindow киньте на картинку и там первую строку в списке выберите. Все ошибки сыпятся туда.
туда можно выводить в си через printf или в бейсике через HMIRuntime.Trace


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 15, 2010 14:44 
Не в сети
Известный Писатель

Зарегистрирован: Пт фев 29, 2008 15:27
Сообщения: 344
Откуда: Украина
А не смотрели функцию DMGetValueEx из ODK? Там есть структура, в которую пишется инфо о читаемом теге. Сам не пробовал, поэтому не знаю, будет ли выдаваться ошибка в диагностику, если тега нет.


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

Зарегистрирован: Ср апр 18, 2007 15:03
Сообщения: 508
Откуда: Красноярск
Неа, но теперь и нет желания пробовать. :)

Вообщем проблема решилась даже безо всяких SetLink. Если у PictureWindow заполнено свойство TagPrefix, то на внедрённой pdlке к тому же io field можно напрямую подкючить тег "_I" и при открытии окна он дополнит его префиксом. И кстати когда тег подключен напрямую, то появляются события state shange, quality change.


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

Зарегистрирован: Пн авг 08, 2005 9:54
Сообщения: 337
Откуда: Украина, ПАО "НКМЗ"
Eagle писал(а):
Неа, но теперь и нет желания пробовать. :)

Вообщем проблема решилась даже безо всяких SetLink. Если у PictureWindow заполнено свойство TagPrefix, то на внедрённой pdlке к тому же io field можно напрямую подкючить тег "_I" и при открытии окна он дополнит его префиксом. И кстати когда тег подключен напрямую, то появляются события state shange, quality change.


как то сумбурно у вас получилось - начали с одного, закончили тагпрефиксом...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 23 ]  На страницу 1, 2  След.

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


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

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


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

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