This is topic Задержка выполнения программы in forum Редактор проекта TRACE MODE 6 / at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/32/t/000203.html

Posted by Сергей Александрович (Участник № / Member № 2884) on :
 
Здравствуйте!

Ситуация следующая: есть алгоритм программы, написанный на Techo ST, в нем есть вызов функции с внешней библиотеки - простой функции задержки (Sleep). Так вот при работе функции, программа стопорится на n-ое количество секунд (как задаю), затем алгоритм продолжает свое выполнение, но вылетает окошко "Calc loop is big".
В принципе понятно почему... Ведь время цикла действительно превышено из-за вынужденного тайм-аута. Не подскажите, как можно реализовать задержку выполнения алгоритма в программе 1)штатными средствами или 2)средствами внешней dll , но без появления этого окошка?

Заранее благодарен!
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В любом варианте Вам надо организовать пересчет программы таким образом, чтобы она имела статическую (глобальную) переменную, которая выступала бы в качестве счетчика времени или циклов.
По достижении значением этой переменной критической величины должен включаться блок выполнения нужного алгоритма в программе.
Такая глобальная переменная может быть организована во внешней библиотеке.
Но более простой способ - использовать глобальную переменную в ST-программе (например, счетчик вызовов программы) или, еще проще, использовать таймерные функциональные блоки языка FBD.
 
Posted by Grigorovskih (Участник № / Member № 1915) on :
 
Здравствуйте Господа!
Мы уже сталкивались с такой проблемой, в данной ситуации не надо заморачиваться на внешние DLL, всё гораздол проще.
Как уже сказал Модератор, надо завести гл переменку и сделать вызов функции в программе, где добавлять к значению переменки 1 и выходить, а в самой проге просто проверять значение гл. перем. на соответствие заданной величине, ну эта величина и будет мерой задержки.
 
Posted by Сергей Александрович (Участник № / Member № 2884) on :
 
Спасибо за подсказки!

Действительно, с внешней DLL сплошные заморочки...

Однако, таймаут из DLL делает задержку ровно на n-ое количество секунд (а такая строгая задержка именно и нужна), тогда как время отработки программы всегда разное и варьируется в пределах секунды ...
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Задайте в настройках узла период, кратный 0.1 сек. (например, 10*0.01) и организуйте вызов программы с периодом 1 секунда.
 
Posted by Сергей Александрович (Участник № / Member № 2884) on :
 
Спасибо, помогло!
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2