PDA

Просмотр полной версии : Как увеличить время цикла ПЛК или время периода Watchdog



Anatol_rus
01.03.2009, 22:44
Если можно бъясните,а то программа больша и в один цикл не умещается и Watchdog выдает ошибку зацикливания??

Николаев Андрей
01.03.2009, 22:48
Для работы с циклом ПЛК есть 2 переменные, которые можно менять. Максимальное время цикла и минимальное. Находятся в ресурсе "Конфигурация ПЛК" , вкладка параметры модуля самого контроллера.
Работает на прошивках 2.03 или 2.07

Anatol_rus
01.03.2009, 22:56
Для работы с циклом ПЛК есть 2 переменные, которые можно менять. Максимальное время цикла и минимальное. Находятся в ресурсе "Конфигурация ПЛК" , вкладка параметры модуля самого контроллера.
Работает на прошивках 2.03 или 2.07

А на эмуляторе как без привязке к таргету??

Николаев Андрей
02.03.2009, 01:48
А на эмуляторе Вы никак на это не повлияете - возьмите ПК по мощнее, так как функцию ПЛК выполняет ПК. Ну и увеличьте все-таки максимальное время

Anatol_rus
02.03.2009, 10:35
А на эмуляторе Вы никак на это не повлияете - возьмите ПК по мощнее, так как функцию ПЛК выполняет ПК. Ну и увеличьте все-таки максимальное время

Извине конечно за нубский вопрос,а где на эмуляторе увеличить максимальное время???А то чет не могу найти(((За ранее благодарен за ответ:D :o

Anatol_rus
02.03.2009, 10:37
Или может есть другой способ

Николаев Андрей
02.03.2009, 10:59
То есть Вы эмуляцию не на таргете ПЛК делаете, а на None (при выборе типа контроллера)?
Тогда нигде, и это никак вообще не связанно с контроллером.
Мощность Вашего ПК - сугубо Ваш гордость;) Но если ПК не справляется с задачей (без попытки эмулировать какой то из контроллеров), значит что то ему не хватает.
Возможно стоит подумать о разбиении программы на поменьше и распределении их вызова.

Игорь Петров
02.03.2009, 11:24
Не надо for вообще применять!!! Цикл в контроллере уже есть всегда. Поэтому так прямо PLC_PRG:

IF надо цикл запустить ТО i:=0;

if i < 1000 then
делам что надо
i := i + 1;
end_if

Вместо for используем рабочий цикл самого ПЛК. Все будет красиво и удобно. По шагам можно отлаживаться, никакой сторож срабатывать не будет…

Anatol_rus
02.03.2009, 12:06
То есть Вы эмуляцию не на таргете ПЛК делаете, а на None (при выборе типа контроллера)?
Тогда нигде, и это никак вообще не связанно с контроллером.
Мощность Вашего ПК - сугубо Ваш гордость;) Но если ПК не справляется с задачей (без попытки эмулировать какой то из контроллеров), значит что то ему не хватает.
Возможно стоит подумать о разбиении программы на поменьше и распределении их вызова.

Да делаю на None, и не хватает времени(((
А разбиение по меньше,ет вы предлогаете сделать несколько PLC_PRG??Если да,то они они будут вызываться последовательно???

Anatol_rus
02.03.2009, 12:09
Не надо for вообще применять!!! Цикл в контроллере уже есть всегда. Поэтому так прямо PLC_PRG:

IF надо цикл запустить ТО i:=0;

if i < 1000 then
делам что надо
i := i + 1;
end_if

Вместо for используем рабочий цикл самого ПЛК. Все будет красиво и удобно. По шагам можно отлаживаться, никакой сторож срабатывать не будет…

Это слишком усложнит задачу моего диплома,т.к. цикл самого gkr уже задействован

Игорь Петров
02.03.2009, 14:14
Это слишком усложнит задачу моего диплома,т.к. цикл самого gkr уже задействован
:confused: Это ж стандартная технология программирования на языках МЭК. В одной главной программе пишется подряд куча всяких штук, одна, за одной. Все они работают как бы параллельно. Посмотрите язык LD. Там в одной программе может быть ..000 цепей и все в одном цикле. Вы пытаетесь программировать ПЛК как компьютер. Отсюда встречное сопротивление программной среды.

В эмуляторе CoDeSys цикл соответствует тику таймера PC около 55 мс. Не вписаться в цикл тут просто не реально при всем желании. Это ж надо большую кучу вычислений с типами реал в одном месте навалить, все это в цикл завернуть на безумное число итераций… Даже если на ПЛК Овен (правильно) написать Большую программу управления Большим андронным коллаидром, то не будет она такую длительность цикла иметь….:cool:

Николаев Андрей
02.03.2009, 16:47
Для понимания того, что говорит Игорь надо сделать простое действие.
Напишите оч. простую программу:
a:=a+1; (тип переменной любой кроме Bool:cool: )
И что называется почувствуйте разницу:cool: Так как в Си для такого ж эффекта пришлось писать for...

Jeck
02.03.2009, 18:53
Это слишком усложнит задачу моего диплома
если это для диплома.... оставьте как есть. все равно из комиссии ни кто вникать не будет. имхо. :D

Anatol_rus
02.03.2009, 22:10
если это для диплома.... оставьте как есть. все равно из комиссии ни кто вникать не будет. имхо. :D

Будет:D У нас дедок там есть он еще в начале 50 на 1 из 3 тогда в союзе существующих кампов прогал рассчеты балестических траекторий ракет))
А на счет а := a + 1, ет я так понимаю последовательно создать несоклько PLC_PRG сделать??а в какой последовательности они вызываются?И как самому эту последовательность сделать??

Jeck
02.03.2009, 22:14
А на счет а := a + 1, ет я так понимаю последовательно создать несоклько PLC_PRG сделать??
проведите простой эксперимент. новый проект. единственое POU - PLC_PRG на ST. В PLC_PRG прописываете а := a + 1; . Больше ни чего! Подключаетесь и смотрите, что происходит с переменной "а".

Anatol_rus
03.03.2009, 01:01
проведите простой эксперимент. новый проект. единственое POU - PLC_PRG на ST. В PLC_PRG прописываете а := a + 1; . Больше ни чего! Подключаетесь и смотрите, что происходит с переменной "а".

Яне дурак ,я понимаю что она будет на каждом цикле прохода программы инкремироваться,я говорю про то как управлять несколькими PLC_PRG??Мне надо в опредиленной последовательности чтоб они запускались вот я и спрашиваю как ето делается:confused:

Jeck
03.03.2009, 01:12
как управлять несколькими PLC_PRG??

с названием PLC_PRG - может бы толька одна POU. как управлять? вариантов много.
можно так http://www.owen.ru/forum/showpost.php?p=19096&postcount=8 тоесть через IF THEN ELSE и таймеры или счетчики.
можно так http://www.owen.ru/forum/showpost.php?p=18115&postcount=36
можно написать PLC_PRG на SFC и расписать отдельные шаги по ветвям.
и д.р.
вы лучше нам расскажите, что вы там вызываете 1000 и 1 раз... может быть коллективный разум ( овен-форум ) найдет более элегантное решение...

Anatol_rus
03.03.2009, 09:29
с названием PLC_PRG - может бы толька одна POU. как управлять? вариантов много.
можно так http://www.owen.ru/forum/showpost.php?p=19096&postcount=8 тоесть через IF THEN ELSE и таймеры или счетчики.
можно так http://www.owen.ru/forum/showpost.php?p=18115&postcount=36
можно написать PLC_PRG на SFC и расписать отдельные шаги по ветвям.
и д.р.
вы лучше нам расскажите, что вы там вызываете 1000 и 1 раз... может быть коллективный разум ( овен-форум ) найдет более элегантное решение...

1000 раз я опредиляю радиус запаса устойчивости системы разомкнутой по главной обратной связи,и из нах беру лежащий наиболее близко к действительной оси
И после контроллера WinCon 8000 со средой программирования С# для меня это дико что из-за 1000 итераций возникаю такие проблемы(((

Chupakabra
03.03.2009, 11:39
1000 раз я опредиляю радиус запаса устойчивости системы разомкнутой по главной обратной связи,и из нах беру лежащий наиболее близко к действительной оси
И после контроллера WinCon 8000 со средой программирования С# для меня это дико что из-за 1000 итераций возникаю такие проблемы(((

Вы пытаететь 1000 раз определить радиус за 1 цикл контроллера?
Что это за алгоритм такой интересно, перебор какой-то?

Jeck
03.03.2009, 11:40
Anatol_rus,WinCon-8000 по сути не контроллер, а компьютер. отсюда и различия.
значит делайте так -
1 цикл перебор 100 значений
2 цикл перебор 100 значений
3 цикл перебор 100 значений
4 цикл перебор 100 значений
5 цикл перебор 100 значений
6 цикл перебор 100 значений
7 цикл перебор 100 значений
8 цикл перебор 100 значений
9 цикл перебор 100 значений
10цикл перебор 100 значений
11цикл выбор подходящего значения

Филоненко Владислав
03.03.2009, 13:34
А несколько PLC_PRG(с разнвми именами) можно вызывать через Task Configuration

Nik
03.03.2009, 16:27
Plc_prg - это и есть имя программного модуля (по умолчанию).