Ситуация следующая: есть алгоритм программы, написанный на 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 :