Страница 1 из 1

Вопрос по циклу

СообщениеДобавлено: Чт янв 27, 2011 10:35 am
ingram
Мне нужен цикл пока пока не выполнится условие типа Do While а щас у меня
FOR i = 1 TO 10000000
IF Arj-Day_N== Arj-Ust-Day AND Arj-Hour_N== Arj-Ust-Hour THEN
YES = 1;
EXIT FOR;
ENDIF;

NEXT;

это вешает проект пока он проверяет кто знает как мне помочь не вешать проект чето мысли у меня кончились помогите

Re: Вопрос по циклу

СообщениеДобавлено: Чт янв 27, 2011 10:49 am
Klinkmann_Msk
ingram писал(а):Мне нужен цикл пока пока не выполнится условие типа Do While а щас у меня
FOR i = 1 TO 10000000
IF Arj-Day_N== Arj-Ust-Day AND Arj-Hour_N== Arj-Ust-Hour THEN
YES = 1;
EXIT FOR;
ENDIF;

NEXT;

это вешает проект пока он проверяет кто знает как мне помочь не вешать проект чето мысли у меня кончились помогите

You can avoid pausing other run-time processes by placing the FOR loop in an asynchronous QuickFunction. :wink:

Re: Вопрос по циклу

СообщениеДобавлено: Пт янв 28, 2011 2:57 am
ingram
You can avoid pausing other run-time processes by placing the FOR loop in an asynchronous QuickFunction. :wink:[/quote]

Да но это и есть QuickFunction тоесть у меня для считывания отчетов 3 функции в этой он проверяет выставлены ли теги OPC в регистры просто мне интересно если еще цикл в InTouch кроме For или опешите по подробнее как перебросить эту проверку в QuickFunction так чтоб не вешала ? спасибо

СообщениеДобавлено: Пт янв 28, 2011 4:02 am
Spaun
В окне этой QuickFunction - Options - галочка на Asynchronous.

Re: Вопрос по циклу

СообщениеДобавлено: Пт янв 28, 2011 7:08 pm
skom
ingram писал(а):Мне нужен цикл пока пока не выполнится условие типа Do While а щас у меня
FOR i = 1 TO 10000000
IF Arj-Day_N== Arj-Ust-Day AND Arj-Hour_N== Arj-Ust-Hour THEN
YES = 1;
EXIT FOR;
ENDIF;

NEXT;

это вешает проект пока он проверяет кто знает как мне помочь не вешать проект чето мысли у меня кончились помогите

Осторожнее с такими циклами, кстати в интаче есть таймаут по истечении которого он выходит сам из цикла, даже если не все итерации проведены. Этот параметр можно поменять то ли в InTouch.ini, то ли в каком-то другом конфигурационном файле.
Я бы подобные вещи делал совсем другим способом — скриптами по условию.

СообщениеДобавлено: Чт мар 03, 2011 9:29 am
Useful
как подсказывает личный опыт, такие задачи имеют более простое решение. Задачу "в студию" и ,может, поможем найти более приемлемое решение.

СообщениеДобавлено: Пн мар 21, 2011 5:46 am
ingram
Useful писал(а):как подсказывает личный опыт, такие задачи имеют более простое решение. Задачу "в студию" и ,может, поможем найти более приемлемое решение.



Ну как бы сама задача ( Необходимо записать в базу данных 3 отчета 2-х часовой сменный и суточный они записываются по истечению 2 часов , 12 часов , 24 часов только при записи необходимо запросить в контроллере нужный отчет весь обмен идет по MODBUS через сервер OPC то есть он запрашиваемый отчет выставляет не сразу а по истечению нескольких секунд вот в цикле проверка выставил ли он нужный отчет ) собственно вот и все если цикл стоит в InTouch.ini я написал чтоб предел цикла 15 секунд то все ок но иногда вылетает из цикла по истечению времени но в базу ложится все ровно при этом инточ просто виснет на цикл а по DataChange делать не удобно