Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

128 советов начинающему программисту ПЛК

PLC, прочие контроллеры, промышленные компьютеры, операторские панели

Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

128 советов начинающему программисту ПЛК

Сообщение leon78 » 08 сен 2009, 20:52

В школе была у меня интересная книжка "128 советов начинающему программисту".
И даже на работе она мне как то помогла - делал по ней перевод времени в другой часовой пояс и в разные единицы в контроллере. Предлагаю сделать похожий сборник советов для ПЛК.
Сразу оговорюсь:
1. Возможно, я нарушаю правила форума - тогда извиняюсь.
2. Все советы носят рекомендательный характер, а так же могут взаимосиключать друг друга. Тем более, если пишут разные люди.
3. Здесь речь идеи именно о ПЛК, программирование контроллеров DCS - отдельная тема, опыт у меня в ней очень небольшой. Коллеги, которые могли бы про это написать, сейчас плотно сидят на объектах. Может есть люди, которые бы завели такую тему для DCS?
4. Я занимюсь в осоновном контроллерами одной фирмы, поэтому возможно какие то советы будут привязаны к этим контроллерам. Прошу вас присоединяться, чтобы не получилось однобокого взгляда на тему.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

16#0000 Самый лучший язык - ST

Сообщение leon78 » 08 сен 2009, 20:56

Если ваш контроллер обрабатывает больше 10 сигналов, если проект будет установлен хотя бы на 2х разных объектах, если вы не хотите запутаться в куче линий - пишите программу на ST
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

16#0001 Функциональные блоки

Сообщение leon78 » 08 сен 2009, 20:59

Если программа с какими-то отличиями будет использована хотя бы на 2х объектах - весь похожий код выносите в функциональные блоки. Иначе при исправлени ошибок или модернизации возникает путаница, что менялось в одной программе, а что в другой.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

16#0002 Вложенность функциональных блоков

Сообщение leon78 » 08 сен 2009, 21:02

Не увлекайтесь вложением функциональных блоков одного в другой. Это отнимает много памяти и увеличивает цикл сканирования контроллера
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


pike
не первый раз у нас
не первый раз у нас
Сообщения: 362
Зарегистрирован: 08 авг 2008, 09:43
Ф.И.О.: Щукин Андрей Александрович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: 16#0000 Самый лучший язык - ST

Сообщение pike » 09 сен 2009, 09:56

leon78 писал(а):Если ваш контроллер обрабатывает больше 10 сигналов, если проект будет установлен хотя бы на 2х разных объектах, если вы не хотите запутаться в куче линий - пишите программу на ST

Мягко говоря, спорное утверждение. Журнал Control Engineering частенько проводит опросы кто на каких языках пишет, пока уверенно выигрывает LD. Я, например, то же в линиях не путаюсь.
Все зависит от возможносте среды программирования по структурированию проекта, навыков программиста и (!!!) подготовки тех кто этот проект будет потом обслуживать (электрики в гробу видели ST и IL).

leon78 писал(а):Если программа с какими-то отличиями будет использована хотя бы на 2х объектах - весь похожий код выносите в функциональные блоки. Иначе при исправлени ошибок или модернизации возникает путаница, что менялось в одной программе, а что в другой.

Путаница не зависит от формы представления кода, а только от организации документирования проекта. Если не ведеться журнал изменений в проекте, швах по любому. FB могут еще и усугубить это, так как в некоторых средах программирования есть сравнение "открытого" кода, но нет сравнения по коду внутри FB подключенных к проекту.
Авторы ТЗ, с которыми я работаю, не имеют права жаловаться на дороги, ЖКХ, бюрократию и правительство.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Re: 16#0000 Самый лучший язык - ST

Сообщение leon78 » 09 сен 2009, 11:18

pike писал(а):Мягко говоря, спорное утверждение...

Вот и напишите это как совет, противоречаший совету 16#0000
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

16#0003 Распределение адресного пространства

Сообщение leon78 » 10 сен 2009, 09:36

Никто не хочет меня поддержать, продолжаю сам. Буду стараться дополнять список советов при наличии времени.

Речь в данном совете пойдет об обмене данными между PLC и HMI по протоколу Modbus во всех его видах или аналогичному.
1. Заранее подготовьте распределение адресов, которые будет читать ЧМИ из ПЛК.
2. Переменные, которые надо читать часто, храните отдельно от переменных, которые надо читать редко. Например, значения аналоговых параметров храните отдельно от настроек аналоговых параметров.
3. Оставляйте резервы. Будет потом очень непросто при ПНР или доработке двигать кучу адресов, если понадобиться добавить несколько сигналов.
4. Расчитывайте на то, что за один запрос ЧМИ должен прочитать как можно больше регистров. При обмене по сети один запрос на много регистров всегда лучше кучи запросов по несколько регистров.
5. Не храните булевские переменные для чтения ЧМИ - храните биты в регистрах. Помните, что 2 булевские переменные занимают целый 16-битный регистр!
6. Если есть флаги состояния или режима работы оборудования, не храните их поотдельности. Пример:
хранить сочетание бит 00 - закрыта, 01 - промежуток, 10 - открыта, 11 - неисправность намного лучше, чем хранить 4 независимых бита на каждое состояние.
7. Если в системе есть какие-то небольшие ЧМИ, требующие чтения небольшого количества данных, делайте для них в одном месте дублирование этих данных. Лучше эти ЧМИ прочитают необходимые данные одним запросом, чем будут делать кучу запросов по всему адресному пространству.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

Аватара пользователя

TEB
специалист по DEIF
специалист по DEIF
Сообщения: 7878
Зарегистрирован: 17 июн 2008, 15:01
Ф.И.О.: Евгений свет Брониславович
Благодарил (а): 35 раз
Поблагодарили: 63 раза
Контактная информация:

Re: 128 советов начинающему программисту ПЛК

Сообщение TEB » 10 сен 2009, 11:08

Полезная ветка однако.

А вот то же самое бы еще в стихах - вообще бы было прекрасно :) :)
По вопросам работы Форума можно обратиться ко мне, или по этим контактам.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Re: 128 советов начинающему программисту ПЛК

Сообщение leon78 » 10 сен 2009, 13:24

genelectric писал(а):А вот то же самое бы еще в стихах - вообще бы было прекрасно :) :)

Зря вы смеетесь. Человеку с опытом многие вещи кажутся прописными, но начинающий много шишек набьет, чтобы до них дойти.

Вот книга, про которую я говорил в начале:
http://www.infanata.org/2007/12/12/ochkov-v.f.-pukhnachev-ju.v.-128.html
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

Аватара пользователя

TEB
специалист по DEIF
специалист по DEIF
Сообщения: 7878
Зарегистрирован: 17 июн 2008, 15:01
Ф.И.О.: Евгений свет Брониславович
Благодарил (а): 35 раз
Поблагодарили: 63 раза
Контактная информация:

Re: 128 советов начинающему программисту ПЛК

Сообщение TEB » 10 сен 2009, 14:49

leon78 писал(а):Зря вы смеетесь. Человеку с опытом многие вещи кажутся прописными, но начинающий много шишек набьет, чтобы до них дойти.


Да я не смеюсь - просто настроение хорошее. :)

Если, закачав программу, получаешь STOP ERROR,
Не спеши копаться в коде - код, возможно, ни при чём.
Лучше глянь на сам контроллер (и в его же мануал),
Всё ль со схемами в порядке? Ничего не коротит?
Есть такие PLC-шки, очень умные они -
Каждый модуль видит чётко, что подключено к нему.
Если где-то нет питанья или выход подгорел,
То не будет код работать, как его ты ни крути!
По вопросам работы Форума можно обратиться ко мне, или по этим контактам.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Re: 128 советов начинающему программисту ПЛК

Сообщение leon78 » 10 сен 2009, 16:29

genelectric писал(а):Если, закачав программу, получаешь STOP ERROR...

Надо переобозвать это в совет 16#0004 :)
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

16#0005 Сообщения для ЧМИ

Сообщение leon78 » 11 сен 2009, 11:31

В DCS системах есть механизм передачи сообщений (алармов). В ПЛК этот механизм надо делать самим.
Для чего это надо? Ведь можно привязать сообщения к каким-то битам, состоянию дискретных параметров и т.п.
Приведу пример. У вас цикл сканирования ПЛК 50мс. ЧМИ может читать данные раз в 1 с. Получается, что ЧМИ "не видит" 19 изменений параметров из 20. Так же некоторые события являются не прямым следствием изменения параметров, а привязаны к выполнению алгоритма.
Ниже предлагаю один из вариантов реализации, требующий от SCADA ЧМИ наличия развитого программного языка. К сожалению, не все SCADA его имеют.
1. Договариваемся, что любое сообщение может иметь код от 0 до 65535, кажому коду соответствует некий текст. Как удобно сделать систему кодировки, постараюсь написать отдельно. Дополнительно можно договориться, чтобы каждому сообщению кроме текста соответсвовал определенный цвет и звуковой сигнал.
2. Выделяем в регистрах ПЛК, читаемых ЧМИ, буфер. Например на 500 регистров. И плюс один регистр - указатель буфера.
3. Делаем в ПЛК функциональный блок, который делает следующее:
- получает код сообщения для записи в буфер;
- записывает в элемент буфера, на который указывает указатель, код сообщения;
- увеличивает указатель на 1. Если указатель > 499, то указатель = 0.
4. Программа ЧМИ должна следить за указателем и хранить у себя ее копию. Если указатель и копия отличаются, то ЧМИ должен вычитать все непрочитанные коды из буфера, вывести на экран и добавить в архив.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


pike
не первый раз у нас
не первый раз у нас
Сообщения: 362
Зарегистрирован: 08 авг 2008, 09:43
Ф.И.О.: Щукин Андрей Александрович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: 16#0005 Сообщения для ЧМИ

Сообщение pike » 11 сен 2009, 12:44

В современных программируемых терминалах и SCADA тоже существует нормальный инструмент для работы с авариями/событиями (Alarm&Event List/Alarm&Event History). Очень удобно и со временем, и с датой, и с буффером громадненьким.
Аварии не должны "мигать", если зафиксирована авария поднимаем соотвествующий флаг и ни кого не должно волновать, что она исчезла. Сброс этого флага только с учетом кучи условий и в том числе с подтверждением от оператора.
Авторы ТЗ, с которыми я работаю, не имеют права жаловаться на дороги, ЖКХ, бюрократию и правительство.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Re: 16#0005 Сообщения для ЧМИ

Сообщение leon78 » 11 сен 2009, 21:17

pike писал(а):В современных программируемых терминалах и SCADA тоже существует нормальный инструмент для работы с авариями/событиями (Alarm&Event List/Alarm&Event History). Очень удобно и со временем, и с датой, и с буффером громадненьким.
Аварии не должны "мигать", если зафиксирована авария поднимаем соотвествующий флаг и ни кого не должно волновать, что она исчезла. Сброс этого флага только с учетом кучи условий и в том числе с подтверждением от оператора.

Ну на все сигналы и события флагов не наделаешь. В предложенном механизме сообщений можно завести специальный код - "метка времени". Тогда к сообщениям дата и время события (т.е. контроллера) будут привязаны, а не время, когда SCADA их прочитала.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


pike
не первый раз у нас
не первый раз у нас
Сообщения: 362
Зарегистрирован: 08 авг 2008, 09:43
Ф.И.О.: Щукин Андрей Александрович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: 16#0005 Сообщения для ЧМИ

Сообщение pike » 14 сен 2009, 11:55

leon78 писал(а):Ну на все сигналы и события флагов не наделаешь.

??? Это как? Есть авария, но нет сигнала который отключает это, и включает то? Жуть.

leon78 писал(а): В предложенном механизме сообщений можно завести специальный код - "метка времени". Тогда к сообщениям дата и время события (т.е. контроллера) будут привязаны, а не время, когда SCADA их прочитала.

Принципиальна ли разница в регистрации данных в 1 сек (а это единственный раз такое было в моей практике, да и то из-за ошибок в выборе комплектующих)? На практике, выбор оборудования всегда осуществляется так что бы цикл обмена между плк чми всегда был заведомо (и существенне) меньше 1 сек. Делается это не столько из-за регистрации данных, сколько из учета удобства работы оператора, которых ни что так не бесит, как "тормоза" чми. Так что всегда, на серийниках скорость 115000 или Ethernet + оптимизированные, для работы с данным оборудованием, протоколы связи.
Вот если есть действительная необходимость вести не зависимые от чми логи, то тогда надо использовать возможности плк. Правда в этих случаях дополнительно логи требуется хранить на какой нибудь CompactFlash.
Авторы ТЗ, с которыми я работаю, не имеют права жаловаться на дороги, ЖКХ, бюрократию и правительство.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Re: 16#0005 Сообщения для ЧМИ

Сообщение leon78 » 14 сен 2009, 16:17

pike писал(а):??? Это как? Есть авария, но нет сигнала который отключает это, и включает то? Жуть.

Я к тому, что в системе может быть 2 тыс сигналов, и только 100 из них - аварийные. На аварии согласен, надо делать флаги. Но на все остальные сигналы зачем? И без буфера событий будет потерян порядок возникновения события. Например, срабатывает защита, выключается система. Если делать сообщения по флагам, то может вполне быть зафиксирована в начале выключение системы, а потом срабатывание защиты. Теряется причинно-следственная связь!
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


pike
не первый раз у нас
не первый раз у нас
Сообщения: 362
Зарегистрирован: 08 авг 2008, 09:43
Ф.И.О.: Щукин Андрей Александрович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: 16#0005 Сообщения для ЧМИ

Сообщение pike » 14 сен 2009, 16:45

leon78 писал(а): Я к тому, что в системе может быть 2 тыс сигналов, и только 100 из них - аварийные.

Интересные у вас системы. У меня на 50 диск. вх/вых + 1 анал. вход. почти 100 аварий. Дальше маштабируем.

leon78 писал(а): На аварии согласен, надо делать флаги. Но на все остальные сигналы зачем? И без буфера событий будет потерян порядок возникновения события. Например, срабатывает защита, выключается система. Если делать сообщения по флагам, то может вполне быть зафиксирована в начале выключение системы, а потом срабатывание защиты. Теряется причинно-следственная связь!

Это как такое может получиться, если учесть что плк работает по циклу и обмен с чми циклический (или с обменом химичим в плане "оптимизации")? В худшем случае они могут получить одно и тоже время возникновения. Дальше возвращаемся к скорости обмена данными плк<->чми.
Авторы ТЗ, с которыми я работаю, не имеют права жаловаться на дороги, ЖКХ, бюрократию и правительство.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Re: 16#0005 Сообщения для ЧМИ

Сообщение leon78 » 14 сен 2009, 17:42

pike писал(а):Интересные у вас системы. У меня на 50 диск. вх/вых + 1 анал. вход. почти 100 аварий. Дальше маштабируем.

Ну у всех свои недостатки.

pike писал(а):
leon78 писал(а): На аварии согласен, надо делать флаги. Но на все остальные сигналы зачем? И без буфера событий будет потерян порядок возникновения события. Например, срабатывает защита, выключается система. Если делать сообщения по флагам, то может вполне быть зафиксирована в начале выключение системы, а потом срабатывание защиты. Теряется причинно-следственная связь!

Это как такое может получиться, если учесть что плк работает по циклу и обмен с чми циклический (или с обменом химичим в плане "оптимизации")? В худшем случае они могут получить одно и тоже время возникновения. Дальше возвращаемся к скорости обмена данными плк<->чми.

Допустим, завели вы для флагов аварий и прочих сообщений кучу битов. Например, у нас есть системы с 20тыс. разных сообщений. Если хранить их в 16тибитных регистрах, это уже получается 1250 регистров. Для чтения по Modbus TCP уже потребуется как минимум сделать 10 запросов. Если вы применяете чисто механизм SCADA, нет никакой гарантии что первые по порядку регистры после завершения скана ПЛК читаются раньше чем последние. А даже если это и так, то со 100% вероятностью будут ситуации, когда за 1 скан возникает несколько событий, для которых бит сообщения "о причине" будет лежать позже чем бит сообщения "о следствии". Т.е. за 1 скан вы получите кашу из сообщений, а в какой последовательности они произошли (вернее с какой последовательностью сгенерил их ваш алгоритм) вы никогда не узнаете.
Приведу по памяти сообщения, которые может выдать система за 1 скан:
Температура подшипника максимальная аварийная.
Агрегат остановить автоматически.
Задвижку закрыть автоматически.

Если не заморачиваться с последовательностью, может получиться каша:
Задвижку закрыть автоматически.
Агрегат остановить автоматически.
Температура подшипника максимальная аварийная.

тут всего 3 сообщения, а их за скан может быть и 100!
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


pike
не первый раз у нас
не первый раз у нас
Сообщения: 362
Зарегистрирован: 08 авг 2008, 09:43
Ф.И.О.: Щукин Андрей Александрович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: 128 советов начинающему программисту ПЛК

Сообщение pike » 18 сен 2009, 13:19

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

Если вы применяете чисто механизм SCADA, нет никакой гарантии что первые по порядку регистры после завершения скана ПЛК читаются раньше чем последние.

Еще раз - если плк работает циклически (самодиагностика, программа, сети, вх/вых), если опрос идет циклически (каждые 300мс по 2000 тегов, например, на винде), то как получается, что данные поступают как попало?
Авторы ТЗ, с которыми я работаю, не имеют права жаловаться на дороги, ЖКХ, бюрократию и правительство.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

16#0006 Почему ST лучше FBD

Сообщение leon78 » 03 дек 2009, 09:14

После "небольшого" перерыва продолжаю.

1. ST выполняется быстрее FBD. Если не предусматривать специальных мер, постоянно выполняются все блоки FBD, даже если по алгоритму в данный момент времени они не нужны. В ST выполняются только те части программы, которые должны выполниться по алгоритму.
2. Память данных для ST меньше, чем для FBD. Дело в том, что в ST один экземпляр функционального блока можно вызвать сколько угодно раз. В FBD для каждого вызова надо делать свой экземпляр.
3. В FBD нельзя сделать нормальные циклы.
4. В ST намного легче реализовать многие вещи, чем в FBD.
5. Сталкиваясь с DCS, многим не хватает именно текстовых языков программирования. Если бы в DCS были только текстовые языки, думаю никто бы не переживал.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2212
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 22 раза
Контактная информация:

Re: 128 советов начинающему программисту ПЛК

Сообщение Михайло » 03 дек 2009, 18:15

Я программирую в LD и не парюсь. Если у Вас тормозит ПЛК, то поменяйте на более быстрый, нечего изобретательством заниматься!

Второй язык, который я знаю - IL, он самый быстрый, мощный и компактный. IL - это по сути ассемблер, язык самого низкого уровня. FBD и LD чуть-чуть менее компактные, но практически незаметно. Не понимаю, с какого вдруг перепугу язык высокого уровня ST стал самым быстрым и компактным?


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Re: 128 советов начинающему программисту ПЛК

Сообщение leon78 » 04 дек 2009, 10:32

Михайло писал(а):Второй язык, который я знаю - IL, он самый быстрый, мощный и компактный. IL - это по сути ассемблер, язык самого низкого уровня. FBD и LD чуть-чуть менее компактные, но практически незаметно. Не понимаю, с какого вдруг перепугу язык высокого уровня ST стал самым быстрым и компактным?

Согласен что IL самый быстрый, но он сложнее, чем ST, в разработке и дальнейшем понимании кода.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


Автор темы
leon78
завсегдатай
завсегдатай
Сообщения: 565
Зарегистрирован: 25 июл 2008, 09:06
Ф.И.О.: U.L.A.
Благодарил (а): 1 раз
Поблагодарили: 4 раза
Контактная информация:

Re: 128 советов начинающему программисту ПЛК

Сообщение leon78 » 04 дек 2009, 10:57

Дмитрий Милосердов писал(а):А на ASMе писать не пробовали? Он еще быстрее :) И еще более сложнее в понимании и в скорости разработки. Ваш Заказчик будет просто счастлив от подобных реализаций, ага ;)

На самом деле в начале своей работы довольно многие вещи писал на IL. Причина - блок-схемы алгоритмов были начерчены так, что напрашивался оператор безусловного перехода, которого нет в ST. Постепенно понял, что это не лучшая практика. Реализовать эти алгоритмы можно было и на ST. Поэтому стараемся сейчас уходить от IL, т.к. в дальнейшем поддерживать такой код сложновато.
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.


pike
не первый раз у нас
не первый раз у нас
Сообщения: 362
Зарегистрирован: 08 авг 2008, 09:43
Ф.И.О.: Щукин Андрей Александрович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: 16#0006 Почему ST лучше FBD

Сообщение pike » 04 дек 2009, 17:43

leon78 писал(а): 1. ST выполняется быстрее FBD. Если не предусматривать специальных мер, постоянно выполняются все блоки FBD, даже если по алгоритму в данный момент времени они не нужны. В ST выполняются только те части программы, которые должны выполниться по алгоритму.
2. Память данных для ST меньше, чем для FBD. Дело в том, что в ST один экземпляр функционального блока можно вызвать сколько угодно раз. В FBD для каждого вызова надо делать свой экземпляр.

То что вы описываете это особенности "железки" конкретного производителя (а иногда даже и серии контроллера),без указания которого ваши советы "тень на плетень". Я например знаю несколько разных контроллеров в которых программа на ST занимает больше места, чем на LD, а использование FB одинакого влияет на объем программы. Ну, и про быстродействие тут тоже много чего интересного бывает, но в привязке к конкретной железке.

leon78 писал(а): 3. В FBD нельзя сделать нормальные циклы.

Задачи в плк и так циклические.

leon78 писал(а):4. В ST намного легче реализовать многие вещи, чем в FBD.

А какие-то в FBD (или мы CFC говорим?)... Старый спор какой из 5 языков лучше, стал сродни спору кто лучше: блондинки, шатенки или рыжие.
Авторы ТЗ, с которыми я работаю, не имеют права жаловаться на дороги, ЖКХ, бюрократию и правительство.


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2212
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 22 раза
Контактная информация:

Re: 128 советов начинающему программисту ПЛК

Сообщение Михайло » 04 дек 2009, 20:31

Просто leon оказался очередным программистом и не представляет простоту языка LD. Я знаю много языков, в том числе объектно-ориентированные, но в дискретно-логических задачах лучше LD ничего нет! :) LD формирует особое мышление, которое облегчает программирование.


Вернуться в «Средний уровень автоматизации»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей