Сергей Александрович
Active Forum Member / Активный участник форума
Участник № / Member № 2884
отправлено / posted
Здравствуйте!
Ситуация следующая: есть алгоритм программы, написанный на Techo ST, в нем есть вызов функции с внешней библиотеки - простой функции задержки (Sleep). Так вот при работе функции, программа стопорится на n-ое количество секунд (как задаю), затем алгоритм продолжает свое выполнение, но вылетает окошко "Calc loop is big". В принципе понятно почему... Ведь время цикла действительно превышено из-за вынужденного тайм-аута. Не подскажите, как можно реализовать задержку выполнения алгоритма в программе 1)штатными средствами или 2)средствами внешней dll , но без появления этого окошка?
отправлено / posted
В любом варианте Вам надо организовать пересчет программы таким образом, чтобы она имела статическую (глобальную) переменную, которая выступала бы в качестве счетчика времени или циклов. По достижении значением этой переменной критической величины должен включаться блок выполнения нужного алгоритма в программе. Такая глобальная переменная может быть организована во внешней библиотеке. Но более простой способ - использовать глобальную переменную в ST-программе (например, счетчик вызовов программы) или, еще проще, использовать таймерные функциональные блоки языка FBD.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Grigorovskih
Forum Professor / Завсегдатай форума
Участник № / Member № 1915
отправлено / posted
Здравствуйте Господа! Мы уже сталкивались с такой проблемой, в данной ситуации не надо заморачиваться на внешние DLL, всё гораздол проще. Как уже сказал Модератор, надо завести гл переменку и сделать вызов функции в программе, где добавлять к значению переменки 1 и выходить, а в самой проге просто проверять значение гл. перем. на соответствие заданной величине, ну эта величина и будет мерой задержки.
Сообщения / Posts 362 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сергей Александрович
Active Forum Member / Активный участник форума
Участник № / Member № 2884
отправлено / posted
Спасибо за подсказки!
Действительно, с внешней DLL сплошные заморочки...
Однако, таймаут из DLL делает задержку ровно на n-ое количество секунд (а такая строгая задержка именно и нужна), тогда как время отработки программы всегда разное и варьируется в пределах секунды ...
Сообщения / Posts 65 | Из / From: Российская Федерация
| IP / IP: IP адрес / IP address |
отправлено / posted
Задайте в настройках узла период, кратный 0.1 сек. (например, 10*0.01) и организуйте вызов программы с периодом 1 секунда.
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сергей Александрович
Active Forum Member / Активный участник форума
Участник № / Member № 2884