PDA

Просмотр полной версии : Графические языки и удобство программирования



Boris_K
11.02.2014, 12:58
На 5-дневном базовом курсе мы всё делали на графическом языке CFC, только в последний день нам совсем чуть-чуть рассказали про ST. Как я понял, CFC наиболее популярен, но сам (как имеющий опыт в кодинге) больше склоняюсь к текстовому ST, и вот почему:

1) Не знаю как в CFC реализовать любой цикл (FOR-NEXT или к примеру REPEAT-UNTIL), в теле которого было бы несколько инструкций. Просмотрел весь хелп к Кодесис, и реализация циклов описана только на ST. При добавлении аналогичных блоков в CFC-программу, у них отсутствуют входы, добавить входы тоже нельзя, а компилятор на это ругается :confused:

2) Такая нужная и обыденная вещь как условный оператор, на CFC делается чуть сложнее и дольше, это конечно терпимо, но как быть если например появилась необходимость сделать выполнение какого-то набора инструкций зависящим от условия? На ST это решается добавлением пары строчек (IF ... THEN и END_IF). А как это провернуть на CFC? Не иначе как воротить из того набора команд дополнительный POU и париться с добавлением MOVE с управляющим входом. :confused:

В Кодесис я недавно, поэтому прошу разъяснить эти 2 момента, если я где-то не прав, и действительно ли ST мощнее и удобнее?

capzap
11.02.2014, 13:02
скачайте все три библиотеки с oscat.de и проанализируйте какой язык наиболее популярен
1) В программах и на ST разве можно добавить входы/выходы?
2) Вам не представляли элемент графических языков под названием SEL?

IVM
11.02.2014, 13:29
В программе, сделанной в среде CoDeSys, можно одновременно использовать 5 языков программирования. При использовании модульного принципа программирования разные модули могут быть описаны на разных языках, т.е. на каком языке удобно писать конкретный модуль на таком и пишите. Если в каких-то библиотеках есть готовые модули, то удобно использовать их и не важно на каком языке они сделаны. В этом вся и прелесть. Истинные программисты естественно пишут в основном на ST, потому что на нем можно сделать все. CFC и прочие языки CoDeSys сделаны для не программистов, чтобы облегчить им жизнь.

Boris_K
11.02.2014, 13:48
Вам не представляли элемент графических языков под названием SEL SEL конечно будет чуть поудобнее, но он не решает главной проблемы - как быть, если нужно "заусловить" целый набор действий, а не какое-то одно присваивание переменной.


В программах и на ST разве можно добавить входы/выходы Я имел в виду что наоборот, в CFC у добавленного элемента repeat (например) не добавляются входы. И вообще неясно, как всё это там должно выглядеть...

Boris_K
11.02.2014, 13:50
Истинные программисты естественно пишут в основном на ST. CFC и прочие языки CoDeSys сделаны для не программистов, чтобы облегчить им жизнь да, на курсах тоже это говорили :)


разные модули могут быть описаны на разных языках, т.е. на каком языке удобно писать конкретный модуль на таком и пишите Mне удобно ВСЁ писать на ST :)

Sergey666
11.02.2014, 14:10
Mне удобно ВСЁ писать на ST :)

Так а в чем проблемма ? Пишите на ST , правда в некоторых организациях "корпоративный язык" FBD или CFC , тогда "кирпичи" и правила их использования изучать надо .

Boris_K
11.02.2014, 14:34
Проблемы нет, просто вопрос о функциональности.


правда в некоторых организациях "корпоративный язык" FBD или CFC , тогда "кирпичи" и правила их использования изучать надо
Такие организации думаю лучше слать лесом. Дело программиста - качественно выполнить свой программный модуль и качественно задокументировать работу с ним и взаимодействие его с другими модулями.

capzap
11.02.2014, 14:55
SEL конечно будет чуть поудобнее, но он не решает главной проблемы - как быть, если нужно "заусловить" целый набор действий, а не какое-то одно присваивание переменной.

нуне первый же раз это обсуждается, хотябы http://www.owen.ru/forum/showthread.php?t=10555&p=122622&viewfull=1#post122622

ongleb
11.02.2014, 15:02
Так а в чем проблемма ? Пишите на ST , правда в некоторых организациях "корпоративный язык" FBD или CFC , тогда "кирпичи" и правила их использования изучать надо .за 20 лет работы программистом первый раз встречаю понятие "корпоративный язык" применительно к языку программирования.
А поработать я успел за эти 20 лет и в коммерческих организациях разного масштаба и на госслужбе.
А уж возводить НеДоЯзыки типа FBD или CFC в ранг стандарта
Ну это, извините, за гранью разумного

99.9% работодателей хотят ехать а не шашечки
даже если заработает программа на армянском-матерном или того хуже "1с", все останутся довольны при условии достаточно информативных комментариях

Вольд
11.02.2014, 15:20
за 20 лет работы программистом первый раз встречаю понятие "корпоративный язык" применительно к языку программирования.
А поработать я успел за эти 20 лет и в коммерческих организациях разного масштаба и на госслужбе.
А уж возводить НеДоЯзыки типа FBD или CFC в ранг стандарта
Ну это, извините, за гранью разумного

99.9% работодателей хотят ехать а не шашечки
даже если заработает программа на армянском-матерном или того хуже "1с", все останутся довольны при условии достаточно информативных комментариях
Вы не правы. В STEP7 тоже подобный набор языков, но SCL не в почете. В основном программируют на LAD, STL, FBD, IL. В серьезных конторах вольности с выбором языка недопустимы.

Boris_K
11.02.2014, 15:28
Он прав как минимум в том что делать какой-то язык (тем более недостаточно функциональный) - "корпоративным" - ересь. Работать можно и на "армянском-матерном", :) если всё грамотно написано и описано.

ongleb
11.02.2014, 16:00
и я про что
после 3-х 4-х лет работы в условиях когда от программера требуется не процесс а результат
и качество оценивается не по формальным признакам а по действительно важным критериям,
типа
- функциональность
- бесперебойность
- информативность
- минимально необходимая квалификация оператора (чем меньше тем лучше)
- ресурсоемкость (иногда чем меньше тем лучше. иногда наоборот. зависит от сложности математического аппарата)
- эргономичность (как часто у пользователя первый раз севшего за прогу появляется вопрос "а как сделать ... ?")
- применительно к программам микроконтроллеров иногда автономность

переход на незнакомый язык после такой "школы" занимает примерно пару дней при наличии вменяемых комментариев
через пару дней комментарии перестают интересовать

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

amn
11.02.2014, 16:28
1) Не знаю как в CFC реализовать любой цикл (FOR-NEXT или к примеру REPEAT-UNTIL), в теле которого было бы несколько инструкций. Просмотрел весь хелп к Кодесис, и реализация циклов описана только на ST.

А Вы в курсе, что ПЛК работает в цикле? Поэтому использовать FOR-NEXT или REPEAT-UNTIL надо очень аккуратно. Если в цикле программа задержится слишком долго произойдет перезагрузка ПЛК.

smk1635
11.02.2014, 17:51
Программу на FBD, а тем более на LD сможет прочитать любой грамотный наладчик. И киповцам заказчика гораздо проще объяснить как работает программа если она на FBD. И при наладке оборудования, если программа написана кем то, отслеживать прохождение сигналов, для наладчика, гораздо удобней если она на FBD. А кому то и на LD.



Такие организации думаю лучше слать лесом. Дело программиста - качественно выполнить свой программный модуль и качественно задокументировать работу с ним и взаимодействие его с другими модулями.

Так что не надо слать такие организации лесом.

Программист для наладчика, а не наладчик для программиста.

lara197a
11.02.2014, 18:58
А Вы в курсе, что ПЛК работает в цикле? Поэтому использовать FOR-NEXT или REPEAT-UNTIL надо очень аккуратно. Если в цикле программа задержится слишком долго произойдет перезагрузка ПЛК.

Могу точно сказать, что используя в программе более 50 циклов FOR, каждый из которых обрабатывает 12 переменных и вообще программа очень большая. Больше 20 FB.
Общий цикл составляет 9-10мс. А на новом ПЛК110- 2-3мс.

Самые читаемые программы- это на LD.
Это самый понятный язык. Написать на нем можно все.
Не смотря на то, что ST писать быстрее и легче,для серьезных заказчиков приходится пользоваться LD.

Все большие предприятия и сложные машины работают как правило на программах, написанных наLD.

kolyan
11.02.2014, 19:26
Могу точно сказать, что используя в программе более 50 циклов FOR, каждый из которых обрабатывает 12 переменных и вообще программа очень большая. Больше 20 FB.
Общий цикл составляет 9-10мс. А на новом ПЛК110- 2-3мс.

Самые читаемые программы- это на LD.
Это самый понятный язык. Написать на нем можно все.
Не смотря на то, что ST писать быстрее и легче,для серьезных заказчиков приходится пользоваться LD.

Все большие предприятия и сложные машины работают как правило на программах, написанных наLD.

А как Вы на LD реализовываете FOR?

ongleb
11.02.2014, 19:34
Программа написаная понятнотым для наладчика языком... :D
Тут одна контора пытается продвинуть язык "понятный" для бухгалтеров
Ни один уважающий себя программист им пачкаться не хочет
Интересно на каком языке писать для продавцов?
А для юристов?
А для банкиров?
А для спецов по логистике? Машинки рисовть?
А для Гостинниц? Кроватки и подушки?

Нее парни
На заказчика можно работать
Но ложиться под него не стоит

Не понимает? Пускай читает мануал и исполнительную документацию
А жертвовать возможностями языка ради того чтобы кто то мог сальным пальцем елозить по экрану...
Пускай лучше провода крутит и предохранители прозванивает

Василий Кашуба
11.02.2014, 19:56
Программа написаная понятнотым для наладчика языком... :D
Тут одна контора пытается продвинуть язык "понятный" для бухгалтеров
Ни один уважающий себя программист им пачкаться не хочет
Интересно на каком языке писать для продавцов?
А для юристов?
А для банкиров?
А для спецов по логистике? Машинки рисовть?
А для Гостинниц? Кроватки и подушки?

Нее парни
На заказчика можно работать
Но ложиться под него не стоит

Не понимает? Пускай читает мануал и исполнительную документацию
А жертвовать возможностями языка ради того чтобы кто то мог сальным пальцем елозить по экрану...
Пускай лучше провода крутит и предохранители прозванивает
Какого вы высокого мнения о себе любимом.:) А я не гнушаюсь, ни проект составить, ни сделать монтаж оборудования, ни программу написать (хоть и на CFC), ни пусконаладочные работы провести, а потом гарантийное обслуживание. И тем не менее, меня уважают не меньше.

ongleb
11.02.2014, 20:01
Посмотрел бы я на наладчика способного разобраться в программе которая по показаниям датчика температуры и дифманометра на диафрагме
рассчитывает расход выбранной оператором жидкости или газа


Интересно еще посмотреть на такую программу писанную на FBD
Там распечатка будет как "Война и мир"
Хотя если честно я очень сомневаюсь что это на FBD вообще реализуемо.

Василий Кашуба
11.02.2014, 20:15
Посмотрел бы я на наладчика способного разобраться в программе которая...
А я хотел бы посмотреть на программиста, который сам проект сделал, потом монтаж и т.д. ...

ongleb
11.02.2014, 20:26
Делал. При чем весь проект
- схемотехнику
- программирование
- собственноручно изготовил 2 опытных образца
- конструкторскую документацию
- контроль качества мелкосерийного производства
- монтаж нескольких экземпляров
- подготовка исполнительной документации
- обучение наладчиков (с последующим поиском их косяков)

В результате около 120 внедренных экземпляров

Василий Кашуба
11.02.2014, 20:52
Делал. При чем весь проект
- схемотехнику
- программирование
- собственноручно изготовил 2 опытных образца
- конструкторскую документацию
- контроль качества мелкосерийного производства
- монтаж нескольких экземпляров
- подготовка исполнительной документации
- обучение наладчиков (с последующим поиском их косяков)

В результате около 120 внедренных экземпляров
Поздравляю, в нашем полку прибыло. Ещё один специалист шиироокого профиля.:) Давайте дружить фирмами. :D

ongleb
11.02.2014, 21:06
Фирмами не очень хочется
Предпочел бы лично
Ну или н на худой конец виртуально
:-)

smk1635
11.02.2014, 21:21
Посмотрел бы я на наладчика способного разобраться в программе которая по показаниям датчика температуры и дифманометра на диафрагме
рассчитывает расход выбранной оператором жидкости или газа

А наладчику и не надо в этом разбираться.
Когда он налаживает то же расходомер, ему глубоко по фене, по какому алгоритму он считает и какая программа там залита. Он должен только знать, какие сигналы должны приходить. Забить нужные параметры. И знать что он должен получить на выходе. Впрочем, как и с любым прибором.
Для себя давно взяли за стандарт, модули и ФБ, пиши на чём хочешь и как хочешь (но если не будет комментариев получишь по шее :D). А основное тело программы пишем на FBD.
Наладчик видит, вот ФБ, называется, допустим, «Управление вундервафлей». Вот входные сигналы от датчиков, концевиков и т.д. Вот выходные сигналы на контакторы, сигнализацию и т.п.
И легко отслеживает, пришел сигнал « кнопка «Пуск»», выход «контактор «Суперпривод»» не сработал. А почему ? Ага…нет сигнала «Концевой выключатель».
Легко объяснять, легко читать, легко налаживать.

Sergey666
11.02.2014, 21:26
Могу точно сказать, что используя в программе более 50 циклов FOR, каждый из которых обрабатывает 12 переменных и вообще программа очень большая. Больше 20 FB.
Общий цикл составляет 9-10мс. А на новом ПЛК110- 2-3мс.

Самые читаемые программы- это на LD.
Это самый понятный язык. Написать на нем можно все.
Не смотря на то, что ST писать быстрее и легче,для серьезных заказчиков приходится пользоваться LD.

Все большие предприятия и сложные машины работают как правило на программах, написанных наLD.

Это не потому что LD крут , а потому-что Мицубиши , Омрон и пр. других языков не знают .
Написать можно все на Любом языке , стиль разный и подходы разные .
Когда-то на форуме уже на подобную тему копья ломали , ответа однозначного нет и быть не может .

ASo
11.02.2014, 21:35
Не то чтобы совсем не знают.
Просто это Американская школа, которая базируется на LD. В отличии от Европейской, которая базируется на FBD (или CFC, часто его называют FBD).

Aleksandr
11.02.2014, 21:53
Это не потому что LD крут , а потому-что Мицубиши , Омрон и пр. других языков не знают .
Написать можно все на Любом языке , стиль разный и подходы разные .
Все они знают и продвигаются потихоньку на другие языки. Просто изначально так пошло, что в Азии и Америке контроллеры программировались на LD, а в Европе на ST. Поэтому и редактор LD у Allen-Bradley намного удобней чем в CoDeSys, и реализовать в нем можно все и достаточно компактно. А ST мне больше нравится в CoDeSys.
P.S. попробуйте конвертнуть программу - пример опроса через библиотеку ModBUS.Lib (что на диске) средствами CoDeSys из ST в LD.
И она займет раз в 5 меньше строчек...хотя конечно даже на LD станет непонятной.

И еще немного не в тему, можно ли от CoDeSys ожидать on-line редактирования проекта? У Allen-Bradley с этим все просто супер.
долго я тут писал....

lara197a
11.02.2014, 22:23
Это не потому что LD крут , а потому-что Мицубиши , Омрон и пр. других языков не знают .
Написать можно все на Любом языке , стиль разный и подходы разные .
Когда-то на форуме уже на подобную тему копья ломали , ответа однозначного нет и быть не может .

Я то сам предпочитаю ST, но мой личный опыт работы на больших заводах, причем как правило все начиналось с монтажа, свидетельствует о том, что все программы написаны в основном на LD. Только небольшая часть ФБ описана на чем-то другом.
Блоки OB1- исключительно на LD.
Сделано это для простоты и удобства отладки, обслуживания и эксплуатации.

Sergey666
11.02.2014, 23:28
Для наладки лучше интерфейс нормальный делать с выводом состояний концевиков (да для любителей СМИ или ИП320 и аналогичной дешевки недостижимо) .
Стремится надо к тому , что для поиска неисправности не надо с ноутом к ПЛК подключатся .
Как на LD написать , так простенько - M:=((A+B+C)*(D-F))/(G+K);(так простенько со вкусом , без Int_to_real :o).


А по поводу языков кроме LD у брэндов , долго мониторил (и сейчас продолжаю) мицубиши , омрон , шнайдер ,Дельта.
У всех в базе LD or IL , другие языки только в самых навороченных моделях с ценником ох...ным и доставкой , рак на горе быстрее свистнет.

capzap
11.02.2014, 23:39
Смешные какие все, как лягушки о своем болоте. По мне так не так уж и много языков и не такие они емкие, чтоб остановиться на-каком то конкретном, надо все знать.
Достаточно одного примера от семена, предпочитаю писать на scl,но когда выгружаешь актуальную версию из плк, поу передается на stl и как разобраться без знаний, если исходник кардинально поменялся, причем конвертации в другие языки не происходит

ongleb
11.02.2014, 23:46
Для наладки лучше интерфейс нормальный делать с выводом состояний концевиков (да для любителей СМИ или ИП320 и аналогичной дешевки недостижимо) .
Стремится надо к тому , что для поиска неисправности не надо с ноутом к ПЛК подключатся ...Очень согласен создаются же в MasterSCADA операторская "панель"
Очень разумная мысль создать аналогичную "панель" для наладки и/или диагностики
И не за чем для наладки лезть в прогу

Валенок
11.02.2014, 23:57
Для наладки лучше интерфейс нормальный делать с выводом состояний концевиков (да для любителей СМИ или ИП320 и аналогичной дешевки недостижимо) .
А зачем эксплуатации смотреть состояния концевиков ?

Стремится надо к тому , что для поиска неисправности не надо с ноутом к ПЛК подключатся ...
Легко решается на ИП320

Sergey666
12.02.2014, 00:12
А зачем эксплуатации смотреть состояния концевиков ?



Чтобы оператор , эксплуатирующий установку , машину , станок и тд и тп при остановке или неисправности вызывал не анжинера вумного с ноутбуком и шнурами , а КИПовца лихого , дабы тот концевичок отрегулировал или заменил.

Валенок
12.02.2014, 00:14
А я хотел бы посмотреть на программиста, который сам проект сделал, потом монтаж и т.д. ...
... и вымыл полы в офисе. Да легхо. Да же хочется порой. Но неэффективно. Платить за уборку как программисту - не будут. А если будут - я первый запишусь в уборщики. Рабочий день закончен - и всё !!. А так дома ужинаешь, и пытаешься упростить алгоритм обработки изделия до алгоритма поедания блинов.

Валенок
12.02.2014, 00:16
Чтобы оператор , эксплуатирующий установку , машину , станок и тд и тп при остановке или неисправности вызывал не анжинера вумного с ноутбуком и шнурами , а КИПовца лихого , дабы тот концевичок отрегулировал или заменил.
А зачем анжинер вумный, если в списке аварий белым по синему - "Проблема концевика ОТКРЫТ задвижки ХХХ" ?

Sergey666
12.02.2014, 00:23
А зачем анжинер вумный, если в списке аварий белым по синему - "Проблема концевика ОТКРЫТ задвижки ХХХ" ?

Да ни зачем , на..н он не нужен.
А как у вас блины ядять правильно ?

Валенок
12.02.2014, 00:34
он не нужен.
Во-о-о. Всегда умиляло как пялятся на нормально работающую установку. Вот произошла авария, тогда и читайте - что. А прога должна сообщать не только явные аварии, но и предаварийные проблемы. По возможности диагностирования ессно.


А как у вас блины ядять правильно ?
Ну не так точно

IF B=TRUE THEN
A := TRUE
ELSE
A := FALSE
END_IF

Sergey666
12.02.2014, 00:50
Во-о-о. Всегда умиляло как пялятся на нормально работающую установку. Вот произошла авария, тогда и читайте - что. А прога должна сообщать не только явные аварии, но и предаварийные проблемы. По возможности диагностирования ессно.


Например у таймера износ поршневых колец и шатун люфтит , скоро в ремонт...:p ...
Ой , хлопцы , шо мы курим...;)

Валенок
12.02.2014, 00:56
Например у таймера износ поршневых колец и шатун люфтит , скоро в ремонт
Ну так другой таймер заводим, и как положенное время истекло - на тебе :
"Таймер требует сервисного обслуживания. Телефон ... р/c ...."

PS

анжинера вумного.. КИПовца лихого..
Быль (почти 1:1). Звонок с объекта:
"А тута написано ВЫКЛЮЧЕН АВТОМАТ QS2, шо нам делать !!!???"

Sergey666
12.02.2014, 01:01
Ну так другой таймер заводим, и как положенное время истекло - на тебе :
"Таймер требует сервисного обслуживания. Телефон ... р/c ...."
Да,проклятые буржуины так и делают .
После оплаты счета через VNC меняют маховик у таймера , чистят свечи у счетчика и вперед к высокой производительности труда.

Тока это-ж буржуины , они далеко и их через VNC не достать , если кто так будет у нас баловаться , скорее всего хлопцы VNC засунут куда-нибудь ... не туда.

Валенок
12.02.2014, 01:13
Почему я не буржуин.. толстый, в цилиндре...
Наверно форум не тот.

Николаев Андрей
12.02.2014, 08:17
Уважаемые господа специалисты - предлагаю топикстартеру тему с флудом перенести в курилку... самостоятельно... :)

Если кому интересно - мои 5 копеек:
Очень люблю и рекомендую читать старый русский фольклор и сказки.
Например: "каждый кулик свое болото хвалит".
На курсах преподается на CFC так как большинство обучающихся начинают программировать "с нуля", а не приходя из софтверных компаний, где писали на C#, Delfi и остальных "мегапафосных" системах. "Програмеры" обычно учаться сами, но именно от них в начале пути работы с ПЛК слышится: "херня эти ваши контроллеры - не правильно они циклы выполняют", по тому как не разобрались в принципах работы ПЛК, который КАРДИНАЛЬНО отличается от принципов работы программ на ПК.
CODESYS создан универсальным, чтобы удовлетворить всех возможных специалистов, которые будут с ним работать.
Программист Вы изначально - ну так удачи - пишите на st (pascal). И структуры и массивы, case Вам в помощь.
Если Вы от электрики - милости просим - LD (релейная схема).
Если получили базовое образование (как я) АСУ ТП - так понятнее и удобнее всего CFC (FBD) и SFC. Поверьте мне - я на SFC за 1,5 минуты опишу "машиносостояние, условия переходов и пр." без всяких IF, case и прочих "ужасных и непонятных слов". И не понадобится 2 месяца на отладку, как это требуется классическим программистам :)
И уже при определенном опыте и приобретенных навыках начинаешь в проекте комбинировать программы на разных языках. Математику на st. Система безопасности котла оптимально и сильно быстрее пишется и отлаживается на LD. Условия состояний установки лучше всего на SFC. Все это пишется в виде "программ" или "функциональных блоков", которые уже собираются в финальную программу на CFC (для наглядности). Это и называется мастерством, которым, к сожалению обладают единицы.
Ну а тем, кто пока умеет работать и оптимально использовать только один язык - CODESYS представляет выбор из 5 языков.

Можно считать вопрос закрытым, или еще пофлудим? :)

З.Ы.: Обычно следующим шагом в таких спорах становится обсуждение "а зачем мне CODESYS - я и так хорош - дайте мне Linux и оставьте меня в покое" :)

capzap
12.02.2014, 08:23
Вот обидели сейчас про пафос и два месяца на др.языке,отличном от sfc

Николаев Андрей
12.02.2014, 08:25
Вот обидели сейчас про пафос и два месяца на др.языке,отличном от sfc
Если обидел кого - прошу прощения. Понятно, что для профессионала все гораздо быстрее. :)
Ну утрировал немного для того, чтобы в полной мере дать представление о возможностях :)

Boris_K
12.02.2014, 10:45
Ох нифига себе... Был бы я троллем, гадко хихикал бы :D Название темы конечно попахивает холиваром, но тема заключалась всего в 2 конкретных вопросах (см 1й пост), на которые пока так никто и не ответил.


А Вы в курсе, что ПЛК работает в цикле? Поэтому использовать FOR-NEXT или REPEAT-UNTIL надо очень аккуратно. Если в цикле программа задержится слишком долго произойдет перезагрузка ПЛК. В курсе. Скажу больше, не только ПЛК, а вообще любая программа которая должна долго работать и на что-то реагировать - это непременно какой-то цикл. Не принимайте меня за школьника. Я из чистого энтузиазма писал программы по 8 тысяч строк (но для компа, игру), и всё работает без единого глючка. Так что с циклами как-нибудь слажу :o Давайте не будем флудить, остаются только 2 конкретных вопроса о графических языках: 1) как сделать цикл и 2) как быстро вставить условие на набор команд.

Николаев Андрей
12.02.2014, 11:00
Ну я старался подробно объяснить. Продолжаем с цитатами: "...имеющий слух - услышит...". Хорошо, что Вы не троль. За это на форуме принято наказывать.

По существу вопросов.
Ну если в курсе, то должны понимать, что:
1. "Выполнить несколько раз в цикле" в разрезе ПЛК: надо использовать не for, а if. По тому как цикл уже организован. И Ваша задача не организовывать его, а включать и выключать из него нужные Вам вычисления. if uslovie<> ustavka then a:=a+1; end_if;
2. Для удобства ветвлений (организации условий перехода) можно использовать разные варианты. Это как реализация на st. Кто против? Тем более если Вам так удобнее. Это SFC - быстро и наглядно. Это операторы выбора при программировании на CFC, такие как sel, mul и другие операторы выборки и сравнения.
Вся прелесть, что выбор за Вами.

capzap
12.02.2014, 11:02
Ох нифига себе... Был бы я троллем, гадко хихикал бы :D Название темы конечно попахивает холиваром, но тема заключалась всего в 2 конкретных вопросах (см 1й пост), на которые пока так никто и не ответил.

В курсе. Скажу больше, не только ПЛК, а вообще любая программа которая должна долго работать и на что-то реагировать - это непременно какой-то цикл. Не принимайте меня за школьника. Я из чистого энтузиазма писал программы по 8 тысяч строк (но для компа, игру), и всё работает без единого глючка. Так что с циклами как-нибудь слажу :o Давайте не будем флудить, остаются только 2 конкретных вопроса о графических языках: 1) как сделать цикл и 2) как быстро вставить условие на набор команд.

Напишите цикл на ST, конвертируйте в графический язык FBD и воссоздайте полученный результат в CFC , в чем проблема то?

Boris_K
12.02.2014, 11:27
Продолжаем с цитатами: "...имеющий слух - услышит..."
Слух имеется.


Выполнить несколько раз в цикле" в разрезе ПЛК: надо использовать не for, а if. По тому как цикл уже организован. И Ваша задача не организовывать его, а включать и выключать из него нужные Вам вычисления.
Нет, это не катит, это плохо. Это "канает" только для совсем уж простых программ. А в общем, в одном большом цикле (без вложения других циклов) всё не обработаешь.


Это как реализация на st. Кто против? Тем более если Вам так удобнее. Это SFC - быстро и наглядно. Это операторы выбора при программировании на CFC, такие как sel, mul и другие операторы выборки и сравнения С помощью sel, mul и подобными можно обработать только одну выходную переменную. А если надо "заусловить" блок из 30 выражений, это придётся для каждого sel хреначить. Вот только и остаётся ST родимый.


Напишите цикл на ST, конвертируйте в графический язык FBD и воссоздайте полученный результат в CFC , в чем проблема то?
Спасибо за совет, попробую. Конвертацию ещё не приходилось делать. Интересно будет увидеть результат. Вангую, что будет что-то страшное ;)

capzap
12.02.2014, 11:38
Спасибо за совет, попробую. Конвертацию ещё не приходилось делать. Интересно будет увидеть результат. Вангую, что будет что-то страшное ;)

Ну так без фанатизма, если знаете досконально графические языки, адаптируете любой дикий код

amn
12.02.2014, 11:43
Нет, это не катит, это плохо. Это "канает" только для совсем уж простых программ. А в общем, в одном большом цикле (без вложения других циклов) всё не обработаешь.

Контроллер это не ПК. Тут мышление при программировании должно работать по-другому. Программу надо оптимизировать. Надо стараться не тормозить работу контроллера циклами, а наоборот разносить код по разным циклам, чтобы время цикла контроллера было по возможности минимальным.

Boris_K
12.02.2014, 12:22
Контроллер это не ПК. Тут мышление при программировании должно работать по-другому. Программу надо оптимизировать. Надо стараться не тормозить работу контроллера циклами, а наоборот разносить код по разным циклам, чтобы время цикла контроллера было по возможности минимальным. В плане оптимизации вы конечно правы. Но есть огромная куча примеров, когда обязательно нужен вложенный цикл. Чаще всего он прост и до тормозов ему далеко, но без него не обойтись. Чтобы не "квакать" бестолку, вот простой пример, "от балды":

Допустим есть входная целочисленная переменная, и есть массив целочисленных элементов. Нам надо узнать количество элементов в этом массиве, которые больше этой входной переменной. И найденное их количество уже используется в следующих шагах программы, и требуется оно в каждом цикле ПЛК. Без цикла FOR-NEXT не обойтись. Как сами понимаете, примеры могут быть самые разные, и возникают они очень часто.

Boris_K
12.02.2014, 13:12
Поконвертировал тут из ST в другие языки цикл FOR и условный оператор с набором нескольких команд в теле. Получилось неплохо, правда в CFC конвертить нельзя, а интересовал именно он. По идее на нём цикл можно сделать с помощью обратной связи, но как тогда заставлять программу выйти из этого кольца, к следующим конструкциям?

capzap
12.02.2014, 13:19
Поконвертировал тут из ST в другие языки цикл FOR и условный оператор с набором нескольких команд в теле. Получилось неплохо, правда в CFC конвертить нельзя, а интересовал именно он. По идее на нём цикл можно сделать с помощью обратной связи, но как тогда заставлять программу выйти из этого кольца, к следующим конструкциям?

есть джамп для этого, писал же нужно досканально знать CFC, если это не так то перейти на удобный язык

Boris_K
12.02.2014, 13:25
ОК, я протупил немного, закольцовывая ничего хорошего не получишь. Там в CFC есть оператор перехода, на нём конечно можно. Хотя в обычных языках аналогичный оператор (GOTO) использовать не рекомендуется т. к. при злоупотреблении им код получается трудно читаемым, т. е. дурным тоном считается.

kolyan
12.02.2014, 15:27
"Качество программного кода обратно пропорционально количеству операторов GOTO в нём"
Эдсгер Дейкстра

Boris_K
12.02.2014, 16:16
"Качество программного кода обратно пропорционально количеству операторов GOTO в нём"
Эдсгер Дейкстра Да, именно так :) Чем меньше ГОУТУ, тем меньше "спагетти-кода". Хотя некоторые известные кодеры с этим не согласны.

capzap
12.02.2014, 17:25
Да, именно так :) Чем меньше ГОУТУ, тем меньше "спагетти-кода". Хотя некоторые известные кодеры с этим не согласны.

незнаю, что Вы понимаете под этим, собственно цикл for и подразумевает некоторое количество использований goto, а Ваш перебор цикла у меня получился минут за пять, восновном время потрачено на расположение элементов

kolyan
12.02.2014, 17:30
Моделирую ситуацию:
15 дискретных входов и 15 дискретных выходов.
Программа все входы перебирает и соотв что то пишет в выходы.
Алгоритм расхода времени:
Чтение всех входов;
Выполнение одного цикла программы;
Запись в выходы.
Итог!: программа обработает 15-й вход только спустя 15 циклов алгоритма расхода времени при отсутствии оператора For (то есть только использовав If), а на 15-м входе срабатывание уже в начале 1го цикла.
Время выполнения тела программы может быть существенным, плюс время на чтение запись входов выходов.
For же на первом цикле программы(да, затратив время контроллера на перебор всех данных с входов) обработает ВСЕ данные с входов.

Мне кажется, по времени, For !в данном случае! будет выгоднее. ИМХО)

Amko
12.02.2014, 17:58
Так то 15 выходов можно и ручками прописать)

Валенок
12.02.2014, 18:41
С помощью sel, mul и подобными можно обработать только одну выходную переменную. А если надо "заусловить" блок из 30 выражений, это придётся для каждого sel хреначить. Вот только и остаётся ST родимый.
Шашлык делали ? Так же все 30 выражений насаживаете на EN
Можно изящней. Весь блок в макрос. В макросе, в начале, делаете вход (IF) и (IF)---o< RETURN>

Валенок
12.02.2014, 18:50
ОК, я протупил немного, закольцовывая ничего хорошего не получишь. Там в CFC есть оператор перехода, на нём конечно можно.
А ничего что условие перехода - логическое ?

kolyan
12.02.2014, 19:18
Так то 15 выходов можно и ручками прописать)

Выходы здесь указаны просто для примера, на самом деле ситуация может быть самая разная.
Я про то, что предлагают отказываться от FOR и переходить на что-то, вроде (пользуясь циклом самого ПЛК):
" if uslovie<> ustavka then a:=a+1; end_if; ".

Вот и представьте:
к примеру, есть 15 дискретных датчиков, они образуют массив.
Нужно в программе перебрать состояния всех 15-ти датчиков ( теперь уже элементов массива) и выполнить затем какие-либо операции в зависимости от их состояния.
Теперь задумайтесь:
в каком случае быстрее выполнится сама программа:
- если я в каждом цикле буду перебирать по одному элементу массива (на это уйдёт 15 циклов ПЛК);
- или же если я использую FOR и с его помощью я ЗА ОДИН ЦИКЛ ПЛК переберу ВСЕ элементы массива?
Это только один простенький примерчик насчет FOR.

А если элементов не 15, а 115?

Amko
12.02.2014, 19:56
Если датчиков 15 штук и требуется с ними сделать одинаковые действия - напишу ФБ, вызову ФБ 15 раз подряд. Не сломаюсь, и в дальнейшем проще разбираться.
Если датчиков 150 штук, в екселе макросом сделаю себе ST код на вызов всех 150 ФБшек, кину в отдельный блок и забуду ваще про их существование. Это если надо все за раз обрабатывать и прям в каждом цикле. Если можно обойтись, буду вызывать один ФБ в каждом цикле, на входе менять адрес датчика, за 150 вызовов ПЛК пройдусь по всем.

kolyan
12.02.2014, 20:01
Если датчиков 15 штук и требуется с ними сделать одинаковые действия - напишу ФБ, вызову ФБ 15 раз подряд. Не сломаюсь, и в дальнейшем проще разбираться.
Если датчиков 150 штук, в екселе макросом сделаю себе ST код на вызов всех 150 ФБшек, кину в отдельный блок и забуду ваще про их существование. Это если надо все за раз обрабатывать и прям в каждом цикле. Если можно обойтись, буду вызывать один ФБ в каждом цикле, на входе менять адрес датчика, за 150 вызовов ПЛК пройдусь по всем.

И смысл всех этих действ?
Если все просто:

FOR I:=1 TO 115 DO

И всё.
Что такого ужасного в FOR?
И зачем, если он такой плохой и ужасный - его ввели в ST?

Amko
12.02.2014, 20:14
Видимо вопрос по поводу целесообразности введения FOR был риторическим? Я понятия не имею, зачем его ввели :)
Может у меня какая то forофобия, не знаю. Просто не вижу смысла останавливать работу ПЛК на некоторое время, если это не требуется процессом. В своей практике не сталкивался с тем, чтобы мне требовалось обрабатывать несколько сотен датчиков именно в каждом цикле, потому не боюсь размазывать их обработку на несколько циклов. Все таки про остальной код тоже не стоит забывать, надо и ему дать выполняться :)

Jtag
12.02.2014, 20:43
Не пойму, что за формулировки "останавливать работу ПЛК"????? -> Сколько тактов тратит процессор на организацию цикла?
"остальное код, надо и ему дать выполняться" мне казалось все выполняется по шагам(определенный оператор занимает определенное количество тактов процессора), а сколько там в секунду тактов у проца, не подскажете...наверно я ошибаюсь:)

Для каждой конкретной задачи берется соотв оборудование и код! Может мне показалось, но по вашему, дисковая операционная система это гуд а винда масдай.
зы !Редко! комфорта удается добиться принципом все гениальное - просто. спс.

Amko
12.02.2014, 20:57
Для каждой конкретной задачи берется соотв оборудование и код!
Да что ж спорит!

Может мне показалось, но по вашему, дисковая операционная система это гуд а винда масдай.
Показалось)

Я хотел высказать, что запихивая много логики в цикл FOR мы увеличиваем цикл, тем самым снижаем быстродействие других процессов.
И поэтому вопрос - а оно надо? Стоит оно того, чтобы загружать ПЛК именно в каждом цикле?

Jtag
12.02.2014, 21:30
Главное, не нарваться на пса времени!

Boris_K
13.02.2014, 09:50
незнаю, что Вы понимаете под этим, собственно цикл for и подразумевает некоторое количество использований goto, а Ваш перебор цикла у меня получился минут за пять, восновном время потрачено на расположение элементов Я говорил только про то, что GOTO в обычном понимании это просто переход к произвольной метке в программе, и именно поэтому его рекомендуют избегать. А цикл же FOR чётко обособлен в коде между словами FOR и END_FOR, и программа воспринимается легко и понятно.

Цикл ваш посмотрел. А теперь представьте как это будет на ST: 3 простых строки! И на написание - не 5 минут а секунд 30.


Я хотел высказать, что запихивая много логики в цикл FOR мы увеличиваем цикл, тем самым снижаем быстродействие других процессов.
И поэтому вопрос - а оно надо? Стоит оно того, чтобы загружать ПЛК именно в каждом цикле? Есть же модуль статистики, где спокойно смотрится свободное время процессора в каждом такте ПЛК. Да и не так уж и грузит его среднестатистический цикл FOR, ибо работает он шустро.

Yegor
13.02.2014, 13:39
Ппц.

Википедия: Декларативное_программирование (http://ru.wikipedia.org/wiki/Декларативное_программирование) — LD, FBD, CFC
Википедия: Императивное_программирование (http://ru.wikipedia.org/wiki/Императивное_программирование) — IL, SFC, ST

Когда хочется сказать глаголом, надо говорить глаголом. Когда хочется назвать существительным, надо называть существительным. Остальное — канцеляризм и косноязычие.

У меня всё.

Boris_K
13.02.2014, 16:11
Когда хочется сказать глаголом, надо говорить глаголом. Когда хочется назвать существительным, надо называть существительным. Остальное — канцеляризм и косноязычие. В общем согласен. Только мне было бы очень интересно глянуть какой-нибудь пример, где графический язык (CFC например) оказывался бы реально удобнее текстового ST, то есть что-то, что делалось бы на графическом в разы быстрее чем на ST...

capzap
13.02.2014, 16:19
В общем согласен. Только мне было бы очень интересно глянуть какой-нибудь пример, где графический язык (CFC например) оказывался бы реально удобнее текстового ST, то есть что-то, что делалось бы на графическом в разы быстрее чем на ST...

в оскат посмотрите сетевую бибку, там в разделе демо все примеры на cfc, очень быстро накидать связи между различными блоками получится в графическом виде, чем писать текстовку и определять что куда вставить в качестве аргумента

Yegor
13.02.2014, 16:59
где графический язык (CFC например) оказывался бы реально удобнее текстового ST, то есть что-то, что делалось бы на графическом в разы быстрее чем на ST...Он может читаться в разы быстрее, если программа и/или способности читателя к этому располагают. Что бы такое вспомнить... Ну, например, самосбрасывающиеся таймеры видно в CFC за километр. Или какие-нибудь каскадные структуры, где в графическом представлении сразу видно цепочки. Или распределение одного множества переменных по другому множеству. Да хоть что, у чего есть быстро узнаваемый визуальный паттерн, который не просвечивается в текстовом виде. См. также подпись capzap'а.

kolyan
13.02.2014, 21:20
Не знаю - посмотрел пример capzap'а. Пост #57.
Неудобочитаемо, ИМХО. Хотя, сам с CFC начинал.
ST - есть ST. Там читаешь - и всё сразу понятно.
Видимо, поэтому, Русский язык не стали в виде блоков реализовывать))). (Сравнение неудачное, но всё же).