А ничего что условие перехода - логическое ?ОК, я протупил немного, закольцовывая ничего хорошего не получишь. Там в CFC есть оператор перехода, на нём конечно можно.
А ничего что условие перехода - логическое ?ОК, я протупил немного, закольцовывая ничего хорошего не получишь. Там в CFC есть оператор перехода, на нём конечно можно.
Выходы здесь указаны просто для примера, на самом деле ситуация может быть самая разная.
Я про то, что предлагают отказываться от FOR и переходить на что-то, вроде (пользуясь циклом самого ПЛК):
" if uslovie<> ustavka then a:=a+1; end_if; ".
Вот и представьте:
к примеру, есть 15 дискретных датчиков, они образуют массив.
Нужно в программе перебрать состояния всех 15-ти датчиков ( теперь уже элементов массива) и выполнить затем какие-либо операции в зависимости от их состояния.
Теперь задумайтесь:
в каком случае быстрее выполнится сама программа:
- если я в каждом цикле буду перебирать по одному элементу массива (на это уйдёт 15 циклов ПЛК);
- или же если я использую FOR и с его помощью я ЗА ОДИН ЦИКЛ ПЛК переберу ВСЕ элементы массива?
Это только один простенький примерчик насчет FOR.
А если элементов не 15, а 115?
Последний раз редактировалось kolyan; 12.02.2014 в 19:24.
Если датчиков 15 штук и требуется с ними сделать одинаковые действия - напишу ФБ, вызову ФБ 15 раз подряд. Не сломаюсь, и в дальнейшем проще разбираться.
Если датчиков 150 штук, в екселе макросом сделаю себе ST код на вызов всех 150 ФБшек, кину в отдельный блок и забуду ваще про их существование. Это если надо все за раз обрабатывать и прям в каждом цикле. Если можно обойтись, буду вызывать один ФБ в каждом цикле, на входе менять адрес датчика, за 150 вызовов ПЛК пройдусь по всем.
Видимо вопрос по поводу целесообразности введения FOR был риторическим? Я понятия не имею, зачем его ввели
Может у меня какая то forофобия, не знаю. Просто не вижу смысла останавливать работу ПЛК на некоторое время, если это не требуется процессом. В своей практике не сталкивался с тем, чтобы мне требовалось обрабатывать несколько сотен датчиков именно в каждом цикле, потому не боюсь размазывать их обработку на несколько циклов. Все таки про остальной код тоже не стоит забывать, надо и ему дать выполняться
Не пойму, что за формулировки "останавливать работу ПЛК"????? -> Сколько тактов тратит процессор на организацию цикла?
"остальное код, надо и ему дать выполняться" мне казалось все выполняется по шагам(определенный оператор занимает определенное количество тактов процессора), а сколько там в секунду тактов у проца, не подскажете...наверно я ошибаюсь
Для каждой конкретной задачи берется соотв оборудование и код! Может мне показалось, но по вашему, дисковая операционная система это гуд а винда масдай.
зы !Редко! комфорта удается добиться принципом все гениальное - просто. спс.
Да что ж спорит!Для каждой конкретной задачи берется соотв оборудование и код!
Показалось)Может мне показалось, но по вашему, дисковая операционная система это гуд а винда масдай.
Я хотел высказать, что запихивая много логики в цикл FOR мы увеличиваем цикл, тем самым снижаем быстродействие других процессов.
И поэтому вопрос - а оно надо? Стоит оно того, чтобы загружать ПЛК именно в каждом цикле?
Главное, не нарваться на пса времени!
Я говорил только про то, что GOTO в обычном понимании это просто переход к произвольной метке в программе, и именно поэтому его рекомендуют избегать. А цикл же FOR чётко обособлен в коде между словами FOR и END_FOR, и программа воспринимается легко и понятно.незнаю, что Вы понимаете под этим, собственно цикл for и подразумевает некоторое количество использований goto, а Ваш перебор цикла у меня получился минут за пять, восновном время потрачено на расположение элементов
Цикл ваш посмотрел. А теперь представьте как это будет на ST: 3 простых строки! И на написание - не 5 минут а секунд 30.
Есть же модуль статистики, где спокойно смотрится свободное время процессора в каждом такте ПЛК. Да и не так уж и грузит его среднестатистический цикл FOR, ибо работает он шустро.Я хотел высказать, что запихивая много логики в цикл FOR мы увеличиваем цикл, тем самым снижаем быстродействие других процессов.
И поэтому вопрос - а оно надо? Стоит оно того, чтобы загружать ПЛК именно в каждом цикле?
Последний раз редактировалось Boris_K; 13.02.2014 в 09:57.
Ппц.
Википедия: Декларативное_программирование — LD, FBD, CFC
Википедия: Императивное_программирование — IL, SFC, ST
Когда хочется сказать глаголом, надо говорить глаголом. Когда хочется назвать существительным, надо называть существительным. Остальное — канцеляризм и косноязычие.
У меня всё.
Последний раз редактировалось Yegor; 13.02.2014 в 13:42.