SIEMENS, DF&PD

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

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




 [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: WinCC
СообщениеДобавлено: Пн дек 25, 2006 18:54 
Не в сети
Новый писатель

Зарегистрирован: Пт ноя 03, 2006 12:02
Сообщения: 42
Здравствуйте! Как в Си можно реализовать следующее:
(Этот код прописан в свойстве кнопки - Events/Mouse Action)

SetTagBit(Tag_Name,1);
Подержать это значение 0,5 секунды, и, далее:
SetTagBit(Tag_Name,0);

Как можно реализовать эту задержку по времени?
Помогите пожалуйста!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 26, 2006 6:28 
Не в сети
Начинающий писатель

Зарегистрирован: Вт мар 01, 2005 9:00
Сообщения: 81
Откуда: Магнитогорск
Код:
time_t tt;

SetTagBit(Tag_Name,1);

tt=time(NULL);
    do{        }while((time(NULL)-tt)<5);

SetTagBit(Tag_Name,0);

Значением времени поиграйтесь


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 26, 2006 8:27 
Не в сети
Писатель со стажем

Зарегистрирован: Пн май 16, 2005 7:41
Сообщения: 500
Откуда: Самара
Про это не раз писалось в форуме:
В одном скрипте делать этого не рекомендуется. На время задержки остановятся все остальные скрипты (и динамические диалоги) на графической форме. Если это будет реализовано в макросах (глобальных или локальных) то встанут макросы.

А тормоза в проете..... это не очень хорошо.


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

Зарегистрирован: Пт янв 14, 2005 9:29
Сообщения: 152
Откуда: Новокузнецк
Задержку по времени лучше делать в контроллере, а если необходимо сделать анализ времени удержания нажатой кнопки мыши пользователем, то объявляем в экшне WINAPI функцию :

Код:
#pragma code ("kernel32.dll")
DWORD GetTickCount();
#pragma code ()



По нажатию кнопки мыши (PressLeft) оцениваем с помощью функции количество миллисекунд, пройденных с момента запуска ОС и пишем его, скажем, во внутренний тег. А по отжатию кнопки мыши (ReleaseLeft) еще раз вызываем функцию и сравниваем полученное значение с тегом. Если выяснится, что пользователь удерживал кнопку мыши, скажем, 1000мс или 1 секунду, то выполняем какое-нибудь действие.

А тег "подержать" и сбросить можно таким способом:

1. Создаём внутренний unsigned 8-bit тег с именем Trigger
2. Создаём невидимый для пользователя (Display=No) объект I/O Field c Dynamic Dialog для свойства OutputValue, в котором пишем 'Trigger'%3+('Trigger'>0) и указываем в триггере для этого Dynamic Dialog период опроса тега с именем Trigger в 250мс.
3.На событие OutputValueChange поля с нашим диалогом пишем экшн:
Код:
// WINCC:TAGNAME_SECTION_START
#define TAG_1 "Trigger"
#define PLC_Tag "Tag_1"
// WINCC:TAGNAME_SECTION_END

// WINCC:PICNAME_SECTION_START
// WINCC:PICNAME_SECTION_END

if(value>=3)
{
SetTagBit(PLC_Tag,0); //Сбрасываем бит в контроллере
SetTagByte(TAG_1,0); //Сбрасываем триггерный тег
}

else
SetTagByte(TAG_1,(BYTE) (int) value);

}


Потом рисуем кнопку, по нажатию которой взводим бит в контроллере и устанавливаем значение тега с именем Trigger равным 1.
Ну и при отработке события OpenPicture данной экранной формы лучше тег Trigger устанавливать в 0.

В итоге "подержим" тег примерно 500мс, "примерно" потому, что у нас не система реального времени.


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

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


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

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


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

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