SIEMENS, DF&PD

Предыдущее посещение: Чт июл 07, 2016 15:29 Текущее время: Чт июл 07, 2016 15:29

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




 [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Динамическое управление кадрами WinCC 7.0
СообщениеДобавлено: Сб июн 16, 2012 19:53 
Не в сети
Новый писатель

Зарегистрирован: Сб июн 16, 2012 11:59
Сообщения: 24
Откуда: Украина
Доброго времени суток.
WINCC занимаюсь меньше месяца.Боюсь показаться тупым, но решение не найду.

Задача, есть стартовый экран, на котором расположены picture window, все ссылаются на один кадр.

1. Как организовать динамическое управление в С-подобном скрипте, из любой степени вложенности кадров, к этим p.w. (к примеру, нажимаешь на задвижку -> выпадает меню настройки -> логон -> меню изменения параметров работы задвижки, если параметры были изменены, загорается напоминание на стартовом).

2. И, как можно проверить передачу данных из SQL в поля ВинСС. Как я понял в ВинСС дебагера нет никакого??? Для проверки работы запросов и циклов, использовал месседжбоксы, SQL работает нормально. Причем этот же скрипт работает на другом компе.

Перебрал массу вариантов написания. Голову уже сломал окончательно. Буду рад любому грамотному совету.


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

Зарегистрирован: Сб июн 16, 2012 11:59
Сообщения: 24
Откуда: Украина
Неужели такая проблема, подсказать скрипт на С, позволяющий динамически, по префиксу сделать видимым кадр из второстепенного окна. Сваял такой пример, но он не работает. дебагер ругается на "ненайденное окно".

Код:
#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
#define BlSens "BlSens"
#define DisSens"@local::Bl_Sens.excl"

SetTagBit (  DisSens, 1-(GetTagBit( DisSens)));

SetTagChar("PW1.PDL","ALARM_SENS.Pdl");   //Return-Type: BOOL
SetTagPrefix(lpszPictureName,"pwSensAlarm","Sensors_Alarm.");
SetPictureName(lpszPictureName,"pwSensAlarm","ALARM_SENS.Pdl");

if ( (GetTagBit(DisSens)) ==1 ) {
   SetTagBit (  BlSens,1);
   SetVisible("PW1.PDL","pwSensAlarm",TRUE);   //Return-Type: BOOL
   SetTagBit (  DisSens, 1);
}
else {
   SetTagBit (  BlSens,0);

}
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 18, 2012 15:16 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс фев 26, 2006 21:44
Сообщения: 1688
Откуда: Липецк, ОАО "НЛМК"
В субботу вечером все только о смене pdl-ек в WinCC думают, конечно.
В сторону Faceplate не смотрели? Правда, полпроекта переделывать... зато редактирование и "доделывание" потом сильно упрощаются.


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

Зарегистрирован: Пн июл 06, 2009 9:37
Сообщения: 851
Откуда: Санкт-Петербург
у вас запутанное описание задачи, особенно пугает "из любой степени вложенности кадров"
Код:
SetTagBit (  DisSens, 1-(GetTagBit( DisSens)));
оригинально
Код:
SetTagChar("PW1.PDL","ALARM_SENS.Pdl");   //Return-Type: BOOL
как это?


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

Зарегистрирован: Чт май 29, 2008 15:48
Сообщения: 985
Откуда: Минск
Aventes писал(а):
Неужели такая проблема, подсказать скрипт на С, позволяющий динамически, по префиксу сделать видимым кадр из второстепенного окна. Сваял такой пример, но он не работает. дебагер ругается на "ненайденное окно".



Первый ваш вопрос как-то сумбурно написан, мне, по-крайней мере, не понятен.
Произвольные всплывающие окошки можно делать через вызов свободной picture window, которых заранее набросать на главный кадр невидимыми. Написать Project function, которая найдет свободную pwшку, задаст ей атрибуты, имя PDLки и префикс тега как минимум, и сделает ее visible. Функцию можно вызывать из любого вложенного окна, если мешают префиксы, использовать "@NOTP::" перед именами тегов.
По вашему скрипту, опять же, особо не вникая что он делает, бросается в глаза строчка
Код:
SetTagChar("PW1.PDL","ALARM_SENS.Pdl");
У этой функции первый параметр - имя текстового тега. Еще ньюанс, функция SetTagPrefix() не заменит префикс уже открытого окна, нужно или до показа окна менять префикс, или прятать и вновь показывать.

Что касается отладки, есть, например, консоль, куда можно сваливать диагностику функцией printf() в Си или HMIRuntime.Trace в VBS. Консольку можно вытащить из панели Smart Objects - Application Window - Global Scripts - GSC Diagnostics.


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

Зарегистрирован: Чт май 29, 2008 15:48
Сообщения: 985
Откуда: Минск
Александр В.. писал(а):
Код:
SetTagBit (  DisSens, 1-(GetTagBit( DisSens)));
оригинально


Нормально, инверсия бита.


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

Зарегистрирован: Пт окт 30, 2009 10:27
Сообщения: 435
Откуда: Москва
Поразбирал код:
Код:
{
#define BlSens "BlSens"
#define DisSens"@local::Bl_Sens.excl"

SetTagBit (  DisSens, 1-(GetTagBit( DisSens)));   // ну инверсия, а зачем?

SetTagChar("PW1.PDL","ALARM_SENS.Pdl");   // про это уже писали
SetTagPrefix(lpszPictureName,"pwSensAlarm","Sensors_Alarm.");
SetPictureName(lpszPictureName,"pwSensAlarm","ALARM_SENS.Pdl");

if ( (GetTagBit(DisSens)) ==1 ) {
   SetTagBit (  BlSens,1);
   SetVisible("PW1.PDL","pwSensAlarm",TRUE);   //Return-Type: BOOL
   SetTagBit (  DisSens, 1);    //а это зачем? он и так ==1 согласно условию
}
else {
   SetTagBit (  BlSens,0);

}
}

по решению задачи могу предложить привязать видимость PW к внутренним тегам, а состоянием нужных тегов рулить из любого места, в том числе с использованием "@NOTP::"


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

Зарегистрирован: Сб июн 16, 2012 11:59
Сообщения: 24
Откуда: Украина
RAN писал(а):
Поразбирал код:
Код:
{
#define BlSens "BlSens"
#define DisSens"@local::Bl_Sens.excl"

SetTagBit (  DisSens, 1-(GetTagBit( DisSens)));   // ну инверсия, а зачем?

SetTagChar("PW1.PDL","ALARM_SENS.Pdl");   // про это уже писали
SetTagPrefix(lpszPictureName,"pwSensAlarm","Sensors_Alarm.");
SetPictureName(lpszPictureName,"pwSensAlarm","ALARM_SENS.Pdl");

if ( (GetTagBit(DisSens)) ==1 ) {
   SetTagBit (  BlSens,1);
   SetVisible("PW1.PDL","pwSensAlarm",TRUE);   //Return-Type: BOOL
   SetTagBit (  DisSens, 1);    //а это зачем? он и так ==1 согласно условию
}
else {
   SetTagBit (  BlSens,0);

}
}

по решению задачи могу предложить привязать видимость PW к внутренним тегам, а состоянием нужных тегов рулить из любого места, в том числе с использованием "@NOTP::"


Битовая инверсия нужна для кнопки, не захотел заморачиваться с десятков кнопочек. Поэтому подключил одну кнопку на "один процесс" ( включил - исключил).
Спасибо всем, все отлично получилось, правда все равно немного недопонимаю организацию передачи префикса. По ходу разберусь.


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

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
Aventes, для реализации подобных вещей требуется довольно длительная разработка и тестирование. И внедрение только после того как все будет до блеска отлажено. Но не дай Бог разбираться с этим в наладке, что слишком часто имеет место.

Все-таки рекомендую вам реализовать все традиционными способами, пусть они в WinCC, извините, унылы. В первую очередь думая о тех, кто будет потом работать после вас.

Ведь на самом не просто понять все премудрости этого языка, да для WinCC, в большинстве случаев, не нужно (классика жанра):

#define offsetof(tp, mem) ((size_t) ((char *)&((tp *) 0)->mem-(char *)((tp *)0))) // Вычисляет смещение элемента mem относительно начала структуры или объединения tp (в байтах)

Куда проще будет тысячу раз перезабить тэг или перерисовать элемент на мнемосхеме.


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

Зарегистрирован: Сб июн 16, 2012 11:59
Сообщения: 24
Откуда: Украина
Alexey_Spb_82 писал(а):
Aventes, для реализации подобных вещей требуется довольно длительная разработка и тестирование. И внедрение только после того как все будет до блеска отлажено.

Все-таки рекомендую вам реализовать все традиционными способами, пусть они в WinCC, извините, унылы. В первую очередь думая о тех, кто будет потом работать после вас.

Ведь на самом не просто понять все премудрости этого языка, да для WinCC, в большинстве случаев, не нужно (классика жанра):

Куда проще будет тысячу раз перезабить тэг или перерисовать элемент на мнемосхеме.

Согласен с Вами на все 100%, я новичек в программровании на СИМЕНС, и мягко говоря смущает организация отладки, и усложненность довольно простых вещей. О глюках в работе WinCC, на форуме было сказано не мало.
А задачки в этой теме, я делал как раз для наладки (а именно блокировки датчиков), и возможности проверки связки PCS.


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

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


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

Сейчас этот форум просматривают: YandexBot и гости: 6


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

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