Форум TRACE MODE: техническая поддержка   
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Языки программирования (IL/FBD) / Algorithm Programming Languages » Вопрос по таймеру

   
Автор / Author Тема / Topic: Вопрос по таймеру
Droshnev
Forum Member / Участник форума
Участник № / Member № 132


Icon 5 отправлено / posted      Профиль для / Profile for Droshnev           Редактировать/удалить сообщение / Edit/Delete Post 
Уважаемые разработчики. Помогите пожалуйста.

На сколько я понял в рамках Техно IL нет возможности реализовать таймер по типу:

1) Запустились с таймером 15сек
2) проверяем какое-то условие
3) Сработал таймер(прошло 15 сек).

Можно только так:
1) Запустились с таймером 15сек(SETTMR 0 15000)
2) проверяем какое-то условие
3) Проверяем таймер (CHECKTMR 0)
4) Когда таймер сработал - уходим на метку (JMPC <метка>)

У нас алгоритм большой, в нем несколько различных таимеров и такие переходы нас не устраивают.

Хотели попробовать через TM.CLK (TM.CLK+15сек),
но при попытке Q1 = TM.CLK, на выходе был 0:(

Подскажите, как нам реализовать таймер в пределах одной подпрограммы и почему не работает TM.CLK?

Сообщения / Posts 60 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 2 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
Не совсем понятно - в чем разница между первым и вторым алгоритмом? Так же производится анализ на превышение таймером уставки и осуществляется какое-либо действие. В IL это действие - переход на определенный участок кода по значению системного флага CMP (по другому состояние флага CMP в IL никак контролировать нельзя).

Чем именно Вас не устраивают переходы по JMPC, тем, что алгоритм будет большой - объяснение странное? [Недоумение / Confused]

Функция TM.CLK никак не относится к таймеру - она возвращяет сколько миллисекунд прошло с момента вызова программы и обнуляется каждый раз при новом вызове программы IL.

Сообщения / Posts 15120 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Droshnev
Forum Member / Участник форума
Участник № / Member № 132


Icon 1 отправлено / posted      Профиль для / Profile for Droshnev           Редактировать/удалить сообщение / Edit/Delete Post 
Во втором алгоритме(в Teхно IL) срабатывание таймера "обрабатывается" в другой подпрограмме. А в первом - в теле самой программы.

У меня в алгоритме 5 почти подряд идущих таймеров, подскажите, как мне реализовать возврат из кода метки "подпрограммы" в "вызывающую программу".

Меня не неустраивает, мне не понятно, как вернуться из метки?

Почему-то TM.CLK у нас ничего не возвращает [Неодобрение / Frown]
Q1 = TM.CLK, а в ответ - 0.

Сообщения / Posts 60 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 2 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
1) Возврат только по метке! IL - не процедурный язык, это некий праобраз Асемблера - одноадресный язык! Кроме JMP или GOTO других возможностей для переходов нет (таков стандарт). [clever / умный]

2) Странно, что возвращает ноль... [Недоумение / Confused]
Может у Вас код программы настолько небольшой, что он выполняется меньше 1 мс - т.е., за микросекунды? Дело в том, что эта функция измеряет только в целых числах миллисекунд!
Вот, например, код - он точно работает:

code:
  
PROGRAM
VAR_IN_OUT
I0 new-xx01-0001 In
Q1 new-xx01-0002 In
Q2 new-xx01-0003 In
Q3 new-xx01-0005 In
END_VAR

Q1 = TM.SEC
F0 = I0

WHILE F0
F0 - 1
END_WHILE

Q2 = TM.CLK


Сообщения / Posts 15120 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Droshnev
Forum Member / Участник форума
Участник № / Member № 132


Icon 1 отправлено / posted      Профиль для / Profile for Droshnev           Редактировать/удалить сообщение / Edit/Delete Post 
ПОМОГИТЕ РЕАЛИЗОВАТЬ БЛОК "ТАЙМЕР"
На вход I0 подается время в милисекундах, по истечении которого на выходе Q0 появляется "1"

Конструкции типа:
F0 = I0

SETTMR 1 F0
CHECKTMR 1

JMPC M1
EXIT

M1:
Q0=1

Не работают.

Сообщения / Posts 60 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 10 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post 
У Вас алгоритм неверный! При каждом вызове такого блока он будет постоянно инициализировать таймер, и никогда не дожидаться его завершения, потому что на следующем же вызове он опять будет инициализирован. Ваш код должен быть примерно следующим:
code:
F0=I0

IF E0==0
THEN
SETTMR 1 F0
E0=1
Q0=0
ELSE
CHECKTMR 1
JMPC M1
END_IF
EXIT

M1:
Q0=1
E0=0


Сообщения / Posts 15120 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2