Я полагаю, что расклад надо делать не в одной плоскости. Значение того или иного языка сильно зависит от области применения.
В классической автоматике царствует LD. Это очень древний язык, существовал даже не до транзисторов и ламп, а в эпоху реле. Терминология дошла и до наших дней.
ST появился вместе с нелинейным программированием, да и вообще когда надвигалась эпоха повсеместного процедурного программирования. На ряду с LD, ST является одним из базовых языков.
CFC, FBD, SFC, PT и другие визуальные средства - это новое поколение технолгий автоматизации, и не только - они пришли из общей концепции UML.
Примерно такой расклад, каждый на своем месте.
С уважением, SAN
Я часто применяю языки в зависимости от задания.
1). Если надо реализовать релейную логику - то LD и FBD
2). Если задана циклограмма - то граф.
3). Если задана блок-схема - то граф или ST. Мнемокод (ассемблер) стараюсь не использовать.
Авторегулирование - FBD
Другими не пользуюсь
Сергей
Кстати PLCopen второй год разрабатывается новый стандарт по тестам быстродействия ПЛК. Сейчас используют 1000 команд на IL или время выполнения 1 команды (в интерпретирующих системах). По этим параметрам вообще ничего практически полезного оценить нельзя. Новые тесты дают гораздо более внятные критерии. Один тонкий момент: реализуются эти тесты только на языках ST и SFC. Т.е. целевая группа экспертов сочла их обязательными для реализации.
Igor Petrov
М-да, хороши эксперты. Во многих системах программа написанная на LD или FB исполняется быстрее, чем написаная на ST. Так что внятность критериев оценки опять под вопросом.
Первоначально опубликовано Pike
...Во многих системах программа написанная на LD или FB исполняется быстрее, чем написаная на ST...
Хороши системы! В нормальных системах никакой разницы нет, код после компилятора совпадает до бита
Igor Petrov
Первоначально опубликовано _IP_
Первоначально опубликовано Pike
...Во многих системах программа написанная на LD или FB исполняется быстрее, чем написаная на ST...
Хороши системы! В нормальных системах никакой разницы нет, код после компилятора совпадает до бита
Действительно так? По-моему, например, для FBD, где на все входы должно быть что-то подано обязательно, код из-за этого будет побольше, чем например ST. Нет? Впрочем, все зависит от программиста. Ну и от оптимизатора/компилятора. Теоретически, да, так оно и должно бы быть в идеале - совпадать до бита. А проверялось?
Не берусь выводить общее правило, но на тех контроллерах, которые я программировал, программа на LD исполняется стабильно медленнее ST, поскольку ST позволяет не обсчитывать заведомо "неработающие" на данном цикле Rung'и
Смотря что понимать под нормальными системами: классические "закрытые" ПЛК или софт ПЛК. Я говорю про классические. Разница в большенстве случаев не принципиальная, но...
Я много с этим экспериментировал. Проверял в CoDeSys V2 на классических ПЛК. Использовал встроенные в CoDeSys конверторы с одного языка на другой. При преобразовании в лоб 1 к 1 разницы нет. Ее и не должно быть исходя из внутреннего устройства генератора машинного кода для целевого микропроцессора. Но… Petrov правильно указал суть. (Хотя требования обязательно подавать нечто на входы экземпляров функциональных блоков нет. Вход вполне может болтаться свободным (просто удалите значки ???), если его значение задано ранее, например при инициализации.) Если программу ST преобразовать в лоб в FBD, то получается некрасивая программа с кучей цепей и переходов на метки. На FBD наши люди так не пишут. На ST вполне можно писать программы точно также как на FBD. Тогда код совпадает абсолютно. Этот язык легко перекрывает возможности IL, LD и FBD. В нем есть мощные команды организации циклов, ветвлений (IF-IFELSE, CASE), можно большие выражения записывать в одну строчку (например, вычисление полинома)… В итоге программа со сложными вычислениями и преобразованиями данных на ST будет компактнее, если она грамотно написана. Однако программы для классических применений (комбинационные и последовательностные алгоритмы) ПЛК на FBD выглядят явно проще и нагляднее.
На IL можно слегка оптимизировать для компилирующих систем. Нужно хорошо знать целевой процессор и посмотреть в какие команды ассемблера преобразуются конкретные команды IL. Тогда с некоторым опытом начинаешь 'видеть' с IL машинный код, понимать, когда хватает регистров процессора, когда включается стек, когда генерируются длинные переходы с переключением сегментов и др. В целом же эффект копеечный и при обычной работе можно такой ерундой не заниматься. Если кто не имеет привычки к IL, то и изучать его не нужно.
В итоге: разумно считать ST самым быстрым из МЭК языков. Достичь более компактного или быстрого кода путем прямого переписывания программы на другой язык МЭК нельзя. Выбор языка определяется программистом из его личных предпочтений и опыта. Ему должно быть удобно. Программа пишется человеком и человеком читается. Предпочтения у людей разные, поэтому нужно поддерживать все языки, дабы не терять заказчиков из-за такой ерунды. Контроллеру же до фонаря, на каком он языке запрограммирован.
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме