2014-01-09 3 views
1

Я недавно унаследовал проект ПЛК. Мы используем ПЛК Automation Direct и используем программное обеспечение C-more для написания логики лестницы.Рекомендации по программированию ПЛК

C-более позволяет мне добавить перекладины для «Execute при каждом сканировании», «Выполнить при вызове» и т.д.

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

Есть ли согласованные передовые методы структурирования программ логических схем? Я пытаюсь привнести здравый смысл в процесс развития.

+1

Стандартизация некоторых из «Лучшая практика» лестничной логики была причиной для создания этого [Шаблоны программирования логики лестницы] (http://www.contactandcoil.com/patterns-of-ladder-logic-programming/) (отказ от ответственности - это то, что я написал). –

ответ

1

В области программирования ПЛК не существует установленных норм, я разрабатывал, вводил в эксплуатацию, поддерживал (и реконструировал) программы ПЛК на 26 лет. Многие организации разрабатывают собственные стандарты, но нет общепринятых отраслевых стандартов. Тем не менее, метод, который я почерпнул из старого pro, диктует сначала поставить ступени принятия решений (оценивая условия и установить флаги), принимая решения по управлению в следующем сегменте, включение/выключение выходов в следующем разделе и мониторинг условий производительности/нарушения в последний.

Он основан на том, как старые машины оценивали ввод/вывод и обрабатывали выполнение лестницы. Появление подпрограмм лестницы помогло чрезвычайно; Обычно я рассматриваю каждый двигатель как элемент «подсистемы» и назначаю его собственную подпрограмму.

Надеюсь, это поможет!

2

Документ, как вы идете. Логика, элементы, карта памяти и т. Д. Документ для «другого человека», даже если этот человек ВАс. ПЛК и их программы имеют долгую жизнь, поэтому вы будете рады 1 год, 5 лет или даже 20 лет в будущем, когда вам придется настраивать/отлаживать этот ПЛК. Вы будете рады, что вы объясните это немного подробнее, документировав его для «другого человека».

Не ждите, пока «конец» не будет документировать. Да, это означает, что вам необходимо обновить документацию.

+0

Я надеялся, что кто-то услышит мнение о том, как лучше всего структурировать реальную программу логики лестниц (лучшие практики, организация и т. Д.). Вы правы, мне придется тщательно документировать и навязывать какую-то структуру, которая имеет смысл поскольку, насколько я могу сказать, люди в сообществе ПЛК, похоже, не слишком беспокоятся о таких вещах. – dacox

+0

@ dacox - дать людям время - тег ПЛК не самый популярный, но люди действительно появляются из времени ко времени. У меня есть несколько, которые я использую, но я профессионально не программировал ПЛК. Вы можете опубликовать этот же вопрос на форуме Automation Direct - вы можете получить хорошие самородки, специфичные для их линии ПЛК. – franji1

+0

Не специфичен для ПЛК, но отличный ответ для разработки ALL. Документ, как вы идете и держать его в курсе. (Даже ХОРОШИЙ уик-энд может заставить вас забыть, где вы собираетесь что-то - почти закончил действительно хитрый кусок кода в пятницу, а затем попытался закончить его с похмелья в понедельник, и вы не указали карту маршрута наверху это ямы. Это немного похоже на экзамен по математике - 70% для выбора действительного подхода 30% для правильного правильного выполнения. –

1

Есть много ответов на этот вопрос: Как сказано в Art, нет настоящих «лучших» практик. Все зависит от приложения. Нет «лучших» практик, потому что практика, которая делает ее «лучше» в одном аспекте, как правило, «ухудшает» ее в другой. Так же, как прямолинейный пример: если вы кодируете общность, вы жертвуете простотой. Кроме того, все, кто может сказать вам, это их собственные практики, и кто скажет, что они являются «лучшими»? С другой стороны, наилучшей практикой является тот, который работает; или, может быть, даже более того, наилучшей практикой является тот, который у вас есть. Вместо того, чтобы думать о «лучших» практиках, используйте имеющиеся в вашем распоряжении методы, чтобы довести проект до завершения, а затем подумайте об лучше практик.

Это, как говорится, это как раз об этом: Как сказано в статье, отдельные функциональные блоки в подпрограммы. Это организует ваш код и позволяет включать/выключать вещи, вызывая/не вызывая подпрограмму.

Сделайте части памяти многоразовыми, когда это возможно. Это можно сделать с помощью подпрограмм. Если вы можете быть уверены, что в какое-то конкретное время только одна подпрограмма будет использовать эту память, тогда эта память будет повторно использоваться в каждой подпрограмме. Это отлично подходит для систем ПЛК с экранами: каждый экран получает подпрограмму, содержащую логику лестницы, которая запускает этот экран, и каждый экран повторно использует один и тот же блок памяти, потому что, поскольку мы можем быть только на одном экране за раз, мы можем быть уверены что только одна подпрограмма пытается использовать это пространство памяти, включив подпрограмму этого экрана и остальную часть.

ПРЕДУПРЕЖДЕНИЕ. Если вы это сделаете, вы должны убедиться, что вы повторно инициализируете этот блок памяти, прежде чем использовать его подпрограмму. Если биты, управляющие логикой, остаются подпрограммой, которая ранее использовала пространство памяти, и вы неправильно инициализировали память до того, как следующая подпрограмма приступит к ее использованию, ну ... вы можете не получить ожидаемые результаты.

Итак, теперь вы должны выбрать способ смягчения последствий решения исходной проблемы, заключающейся в возможности повторного использования блоков памяти (просто для того, чтобы еще раз подчеркнуть, почему нет «лучших» практик: одно решение вызывает другие проблемы , с которым вы должны иметь дело). Сбрасываете ли вы все, как только вы его используете? Сбрасываете ли вы все сразу, когда все готово? Сбрасываете ли вы все сразу, прежде чем запускать следующую подпрограмму? Вы пытаетесь написать более надежный код, который будет соответствующим образом реагировать на различные сценарии инициализации? Я мог бы рассказать вам ответ. Это будет правильный ответ? Есть ли справа ответ? Я не знаю, но вместо того, чтобы дать вам ответ на этот вопрос, я представил 4 возможных решения. Программирование, по иронии судьбы, не является точной наукой.

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

Перейдя, вы, несомненно, будете использовать физические входы и выходы. Вы также можете использовать другие встроенные функции, такие как таймеры/счетчики, и рассчитанные значения на основе входов, которые вы будете отслеживать непрерывно, и использовать позже в системе в качестве параметров управления. Назовем все эти «операнды». Все ваши операнды должны быть буферизованы. Вместо того, чтобы писать свой код для непосредственного чтения или записи операндов, создайте систему, которая будет записывать все свои значения в другое место в памяти с возможностью включения/выключения этого процесса записи и написать весь код, который будет использовать операнды для вместо этого используйте эти «буферизованные» значения. Это дает вам возможность переключаться между «автоматическим» и «ручным» режимами. Даже если вы можете просто отключить, где ваши расчетные значения получат свой ввод, чтобы достичь этого для этих операндов, вам все равно придется буферизировать остальные (не рассчитанные значения), и есть много ситуаций, в которых вы хотели бы быть в состоянии сохранить значение, которое обычно было бы там, не переписывая его, когда вы переходите в ручной режим (т. е. счетчик или что-либо с постоянным значением). Даже если бы были ситуации, когда вы действительно не делаете заботитесь о сохранении постоянного значения (то есть скорости или чего-либо еще полностью мгновенного), вы все равно будете нарушать форму остальной части вашей автоматической/ручной системы, таким образом, вычисляемые значения.

Другая практика, с которой я начал использовать, с большим успехом (это, по-видимому, хорошо подходит для промышленных приложений управления), является «автоматом» стиля программирования. В простом примере программа может просто находиться в одном из нескольких состояний.Основная задняя часть программы, «автомат», управляет состоянием системы. Автомат существенно кодирует высокоуровневые аспекты системы. Вы кодируете автомат для взаимодействия с «тестовыми» подпрограммами, которые имитируют соответствующий ответ части кода, который обычно вызывается в этом случае. Теперь, когда системная архитектура высокого уровня закодирована, вы можете пройти и начать выключение тестовых подпрограмм с помощью реальных алгоритмов.

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

Смежные вопросы