Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
MyBuffer = MyPyatn[15-i];
MyPyatn[15-i] = MyPyatn[MyRand];
MyPyatn[MyRand] = MyBuffer;написать однуswap(MyPyatn[MyRand], MyPyatn[15-i]);нужно как минимум знать о существовании алгоритма swap. А чтобы не дублировать кусок кода, выводящий поле — нужно знать о существовании функций… с другой стороны мне тяжело представить себе человека способного разобраться с тем, как работают макросы в FBD и не способного понять как устроены функции в C++ — но, возможно, в этой разнице и есть какая-то тайна…Ну и кроме того (в этом посте я в отличие от предыдущих не акцентировал на этом внимание), написать программу на FBD может любой человек, знакомый с основами логики (операции И, ИЛИ, НЕ) и примерно представляющий как работает счетчик и триггер.Да, но ведь это — весьма небольшой процент от всего населения. Вот и возникает вопрос: а много ли вообще в природе людей способных понять «как работает счетчик и триггер», но неспособных изучить «нормальный» язык программирования?
Главное преимущество FBD — возможность по связям быстро проследить логику работы программы.Всё зависит от размеров оной программы. FBD, насколько я вижу, неплохо соотносится с «железом», он близок к тому же Verilogу. Ну отлично — возьмите небольшую программу, реализацию какого-нибудь 68k где-то на 50-100 тысяч элементов. Вы точно уверены, что в ней будет проще разобраться если это будет диаграмма на уж-не-знаю-сколько-ватманов, чем если это будет записано в текстовом виде?
Могу поспорить, что это за 15 минут можно объяснить это любому школьнику,В это — верю.
после чего он из таких блоков сможет писать полноценные технологические программыА вот в это, извините — но не верю. Особенно в свете вот этого:
узкоспециализированные алгоритмы управления техпроцессами вообще никому кроме пары десятков человек не интересны и непонятныКобол со своими «x IS GREATER THAN y» тоже преследовал цель «быть понтяным всем и каждому», но оказалось, что это просто никому не нужно.
И конкретно в программировании в АСУ ТП я считаю, что FBD проще и нагляднее и удобнее всего остального.Ну как раз тут всё просто: «в связке» есть ведь разные языки. Нужно просто посмотреть — как часто разные подходы используются. Если использование FBD растёт, а ST падает — значит вы правы, если наоборот — то неправы. Если вы этим занимаетесь, то, может быть, у вас есть статистика?
А вот в это, извините — но не верю. Особенно в свете вот этого:
Если вы этим занимаетесь, то, может быть, у вас есть статистика?
По моему личному опыту (возможно если сюда заглянут люди, непосредственно занимающиеся внедрением АСУ ТП в различных областях и на разных системах то они поправят/дополнят) процентов 80 всех программ АСУ ТП в области энергетики пишется на FBD. Еще 15% на ST. Остальные 5% на оставшиеся 3 языка.Вот это — уже серьёзно. И показывает что у программистов — таки мозги реально в чём-то другие.
И FBD популярен именно потому, что даже если кто-то другой наворотил в контроллере черт знает что, то разобраться что и как там работает при использовании FBD гораздо проще и быстрее, чем на каком-либо другом языке.Вот это-то и странно. Потому что у меня — впечатление ровно противоположное: когда я вижу все эти «безумные схемы», то у меня по первости никаких словей, кроме матерных в голове не возникает, а когда первое впечатление проходит и кроме «за что?», «им что — реально так удобнее?» в голове возникают другие мысли и я быстренько превращаю весь этот ужас в нормальный, «удобочитаемый» текстовый вид, после чего обычно проходит «понимание»: «ага… тут они гланды… автогеном… через жопу… но зачем?»…
«Реализовать на FBD алгоритм» и «изучить технологию для дальнейшего написания алгоритмов» это совсем разные вещи. Второе нереально, а вот первое — без проблем.Ну не знаю. Я могу себе придумать примерно как реализовать какой-нибудь алгоритм на ST, но даже представить себе не могу нетривиальный алгоритм, который бы реализовывался на FBD. Ну то есть я представляю себе как на FBD реализовать, скажем, Жизнь, а поскольку та полна по Тьюрингу, то, понятно, там и любой другой алгоритм реализуется, но реализовывать алгоритм напрямую на FBD? Как он выглядеть-то должен, чтобы его «любой школьник» мог реализовать?
И FBD популярен именно потому, что даже если кто-то другой наворотил в контроллере черт знает что, то разобраться что и как там работает при использовании FBD гораздо проще и быстрее, чем на каком-либо другом языке.Вы это серьёзно? Если я сейчас через А* решу описанную выше задачку и переведу это решение на FBD — вы в нём разберётесь??? Это же жуть будет!
Когда рассматриваются примеры типа Hello World (а на FBD — элементарная логическая схема) то и там, и там все предельно просто. Когда же дело доходит до действительно сложных задач...
У нас сотрудники делали алгоритмы автоматического розжига котла целиком на FBD. Там контроль сотен параметров и управление сотней арматуры. Задача реально большая и сложная.Стоп. Откуда там взялась «сотня разнотипных параметров»? Или это были, условно говоря, сто датчиков температуры, сто датчиков давления и ещё десяток других датчиков? Сколько видов данных в обработке участовало? Потому что ведь только это влияет на сложность задачи: в задаче может быть вообще пяток датчиков, но при этом над ними будет строиться такая математическая модель, что для её обсчёта потребуются гигабайты памяти, а может быть и миллион датчиков, которые просто усредняются — тогда задача, в общем и целом — тривиальна.
Как вы считаете, что будет проще: ковыряться в текстовых исходниках, правя константы, ветки if и т.п. или найти несколько блоков проверки условий и задать на них новые значения?Зависит от размеров задачи. Я когда говорил про небольшую программу, реализацию какого-нибудь 68k где-то на 50-100 тысяч элементов — это не было сарказмом. Программа подобного размера действительно программистами обычно воспринимается как «небольшая». Большая программа — это миллионы строк кода. Но судя по описанному выше, где задача с «сотнями параметров и с сотней арматуры» считается «большой и сложной» возникает ощущение, что мы вообще о задачах разных масштабов говорим…
возникает ощущение, что мы вообще о задачах разных масштабов говорим…
Откуда там взялась «сотня разнотипных параметров»?
Помимо порога вхождения важен еще и верхний порог, характеризующий возможности инструмента
Разумеется при грамотной организации исходных текстов.
А если нет?А если нет — то людей, которые «это» сотворили нужно уволить и нанять других.
Поэтому когда мы разрабатывали эту систему, то все время присутствовала обратная связь в лице специалистов по проектированию и эксплуатации. И вот этот верхний порог подгонялся под их нужды и в итоге всех устраивал.Что очень и очень грустно. Это значит что вся система разрабатывалась не для того, чтобы успешно создать что-то, что будет конкурировать с пресловутыми «лучшими мировыми образцами», а для того, чтобы с ней могли работать существующие кадры.
А если нет — то людей, которые «это» сотворили нужно уволить и нанять других.
Что очень и очень грустно.
И показывает что у программистов — таки мозги реально в чём-то другие.
когда я вижу все эти «безумные схемы», то у меня по первости никаких словей, кроме матерных в голове не возникает
вы в нём разберётесь??? Это же жуть будет!
Это будет жуть, но в ней при правильном подходе будет несложно разобраться.Вы это серьёзно? Вы сможете понять, где у меня в «мешанине проводов» находится очередь с приоритетами и как именно в ней кодируются позиции? Надо будет попробовать — но я не верю даже в то, что я сам смогу разобраться в том, что сотворю (вы что — думаете что я реально планирую писать что-то на FBD? конечно нет: если будет время то, разумеется, напишу генератор программ на FBD — а уж что он там нагенерит меня мало волновать будет), а вы хотите «разобраться в алгоритме» глядя на эту кашу.
Там (внезапно) 9000 блоков. И что? Разве такое количество вызывает какие-то непреодолимые проблемы? В той программе можно минут за 20 разобраться от и до.Да какая, нафиг, разница — сколько там блоков? Важно сколько там уникальных конфигураций! Там макросы использовались, если мне память не отшибло — то есть реально-то программа совсем небольшая. Да и даже если бы это было просто 9000 блоков без макросов… это как-то ну совсем не внушает. Откуда взяться проблемам в столь небольшой программе? Даже если специально попробовать запутать — это не так-то просто сделать будет… Хотя есть умельцы, они могут и программу в 100 строк запутать так, что в ней разобраться непросто будет…
Хотел программист сделать их удобными и понятными для всех или лепил как получится. И от языка это не сильно зависит.Зависит, ой как зависит. Попробуйте реализовать мало-мальски нетривиальный алгоритм — и вы это сразу поймёте. Попробуйте сделать, к примеру, «решатель» для тех же пятнашек. Боюсь, правда, что полноценное поле 4x4 в микроконтроллер просто не влезет (там 10 триллионов возможных позиций, так что для решения требуется вполне приличное количество памяти), ну так проблем-то: возьмите поле 3x3, там позиций всего лишь 181 440, самое длинное решение — 31 ход (24 «длинных» хода), это даже в калькулятор можно упихать! Но — придётся как-то всё-таки реализовывать нетривиальные стурктуры данных. А сделать это на FBD — это как «автогеном через жопу», я извиняюсь, гланды вырезать…
И представьте что вам нужно в этом разобраться но при этом вы не можете форматировать текст, поставить отступы, пробелы, нет подсветки синтаксиса и т.п.А кто мне запретит-то? Откуда такие странные ограничения?
Зависит, ой как зависит.
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.
------.--------.>+.>. А кто мне запретит-то? Откуда такие странные ограничения?
А сделать это на FBD — это как «автогеном через жопу», я извиняюсь, гланды вырезать…
Можно программу написать так, чтоб она была понятной, а можно и запутать так, что нихрена не разберешься даже с поллитрой.Да, конечно. Но как тут уже говорилось: для того, чтобы реализовывать реально сложные алгоритмы требуются реально сложные же и языки программирования. А FBD… торетически на нём можно реализовать всё, что угодно, а практически — максимальная сложность алгоритов, которые прямо на нём можно реально реализовать катастрофически низка.
Специфика АСУ ТП. Работает объект, управляемый контроллером с такой вот программой. Там все приемосдаточные испытания проведены, протоколы подписаны и т.д. И никто не даст вам лезть и что то сильно менять. Только маленький кусочек или вообще несколько констант. Т.е. любое форматирование того что есть исключено.Да уж. Напомнило историю с Google Maps. Её лет 10 назад представители BMW хотели получить к себе в авто. Пришли с примерно такими же требованиями: вы нам типа — передайте исходники, мы их три года будем тестировать, а потом только в машину поставим. Каждое изменение — через новую сертификацию. Их с этими идеями послали, после чего они ушли, полностью уверенные в своей правоте — ждать пока Гугл «прогнётся». Дождались того, что их поделием люди перестали пользоваться, их отдел сократили, а люди таки пользуются Google Maps.
Но как тут уже говорилось: для того, чтобы реализовывать реально сложные алгоритмы требуются реально сложные же и языки программирования.
Да уж.
Задачи, жёстко завязанные на безопасность (какое-нибудь аварийное отключение атомного реатора) лучше всего делать вообще без всякого ПО (простейшая аппаратная схема)
А фраза «язык FBD это простой и понятный язык» — это сарказм или нет?
Учитывая что статья в хабе "Ненормальное программирование" — все же сарказм.
Пишем задачки на FBD. Пятнашки и Симпсон