Программная модель ПЛК
Современный логический контроллер можно представить как обычный компьютер. У него имеются все классические устройства микропроцессорной системы, пусть в несколько специфическом виде. Так же как и у обычных ПК, важнейшую роль играет программное обеспечение, которое делится на два класса: прошивка и управляющая программа.
Прошивка ПЛК представляет собой аналог операционной системы обычного компьютера. Она отвечает за исполнение основных функций, таких как соединение с устройствами программирования, загрузка и выгрузка программы, связь с другими устройствами по стандартным интерфейсам, контроль работоспособности и т.п. Прошивка, как правило, не доступна пользователю.
Прикладная программа целиком и полностью формируется пользователем и отвечает за последовательность включения и выключения выходных устройств на основе состояния входов. Для составления управляющей программы не достаточно знать основы одного из языков программирования. Необходимо разобраться как «железо» ПЛК будет «общаться» с управляющей программой. Главным понятием становится адресное пространство контроллера.
Распределение памяти ПЛК
Если рассмотреть работу программы без привязки к физическому оборудованию, то ПЛК будет выглядеть просто, как набор ячеек памяти. Работа управляющей программы заключается в чтении состояния или значения одних ячеек, каких-то преобразований и записи полученной информации в другие ячейки. В первом приближении, так работает любой компьютер. Реальность отличается от упрощенной модели главным образом тем, что состояние ячеек может изменяться под воздействием внешней среды (входа), либо изменять эту среду (выхода). Адресное пространство контроллера как раз и показывает, какие ячейки с чем связаны или за что отвечают. В частности в современных ПЛК вся память подразделяется на отдельные блоки: память устройств ввода/вывода, память внутренних устройств ПЛК, память пользовательских данных, память интерфейсов и т.п. Каждый блок имеет свое обозначение. Соответственно, чтобы получить какой-либо реальный результат в виде значения уровня сигнала на входе, либо переключения состояния выхода, программист должен точно знать с чем он будет работать. Сложность заключается не только в обозначении типа памяти, но и правил работы с номерами ячеек.
Например, обычный логический контроллер может использовать какое-то количество входов и выходов. Программист должен иметь возможность произвольно обратиться к этим элементам. Казалось бы, самым простым вариантом может стать сквозная нумерация всех входов и выходов. Такая нумерация встречается например в программируемом реле. Но в случае большого числа внешних цепей, такой подход осложняет быстрый поиск нужного терминала. Еще одной и при этом гораздо более серьезной проблемой, становится модульный принцип построения ПЛК. Каждый модуль может иметь разное число точек ввода/вывода, а возможность произвольной установки модулей при сквозной нумерации приведет к неупорядоченной системе обозначений. Поэтому, в ПЛК применяется специальный принцип нумерации. Заключается он в следующем: все возможные входные и выходные цепи делятся на равные группы. В разных контроллерах количество цепей в одной группе может быть равно 8 (байт) или 16 (слово). (В дальнейшем рассматривается вариант с 8-ми разрядными УВВ). Такая группа имеет свой собственный номер. Каждому входу в рамках такой группы также присвоен номер от 0 до 7. Соответственно для получения доступа к входу или выходу следует задать номер группы (байта, слова) и номер бита в группе. Формат задания обычно у каждого производителя свой.
Формат задания номера входа или выхода в контроллерах DeltaElectronics Принцип задания номера входа в ПЛК DeltaElectronics заключается в разделении на область входов (Х) и выходов (Y). Нумерация выполняется в восьмеричной системе. Это значит, что максимальная цифра, которая может присутствовать в номере - 7. Следующая за седьмой группа будет иметь номер 10, за 17 – 20 и т.д. С нумерацией битов проблем обычно не возникает, так как их значение может быть от 0 до 7. В итоге общий формат входа выглядит следующим образом: X04, X53, X107 и т.д. Буква указывает тип бита входа, с которым производится работа, последняя цифра – номер бита в группе, цифры в середине – номер группы. (на самом деле нумерация входов и выходов последовательная, но для упрощения восприятия человеком представлена подобным образом). Соответственно формат выхода полностью аналогичен, за исключением смены типа на Y.Обращение к другим областям имеет несколько иной формат. Используется идентификатор области памяти и обычный десятичный порядковый номер.
Формат задания номера входа или выхода в контроллерах OMRON . Контроллеры OMRON имеют 16-ти разрядную структуру памяти. Обращение к любой области памяти абсолютно идентично, будь это память устройств ввода/вывода (УВВ), таймеров или рабочих пользовательских данных. Для доступа используется идентификатор блока, номер слова и номер бита. Например, обращение к области УВВ выглядит как CIO0.5, CIO8.15, обращение к рабочей памяти W101.7 и т.д. Соответственно можно обратиться как к целому слову, так и к любому отдельному биту слова. Память ввода вывода (CIO) в контроллерах OMRON может быть разделена на отдельные области. Так для моноблочных ПЛК CP1L, значения с CIO0.0 до CIO99.15, будут относиться к входам, а начиная с CIO100.0 начнется область выходов, область CIO3000.0-CIO3015.15 используется для интерфейса связи и т.д.
Распределение групп может быть жестким, когда каждому модулю или устройству ввода вывода назначается конкретный номер группы (Обычно для УВВ моноблочных ПЛК, модулей АЦП), либо гибким. В последнем случае, применяемом в модульных системах, конкретный номер группы для конкретного модуля зависит от положения этого модуля в составе ПЛК и типе используемых модулей до него.
Каждому модулю может назначаться одна или несколько групп сигналов ввода/вывода. Если в модуле имеется только 4 входа, для него все равно резервируется полная группа. Свободные биты не используются.
Вся остальная память ПЛК делится на так называемые слова. Размер каждого слова составляет 16 бит. Каждый бит внутри слова нумеруется от 0 до 15. Все слова имеют сквозную нумерацию внутри одного блока, также называемую адресом. Диапазон номеров зависит о конкретной модели контроллера. В зависимости от назначения блока памяти он может быть использован для следующих задач:
- связь с входными и выходными физическими терминалами
- хранение промежуточных данных программы. В свою очередь эта область памяти может подразделяться на общую, энергонезависимую и специальную
- реализация работы таймеров
- реализация работы счетчиков
- выполнение служебных функций
Каждый блок имеет свое буквенное обозначение. Чтобы обратиться к конкретному слову в памяти необходимо указать буквенное обозначение требуемого блока, а также номер слова внутри этого блока.
Конкретные обозначения областей памяти, а также доступные диапазоны адресов приводятся в документации на контроллеры. В качестве примера ниже приведена таблица распределения памяти для контроллеров ES/EX/SS от Delta Electronics. Описание всех областей дано ниже.
Распределение памяти ПЛК ES/EX/SS от Delta Electronics
Тип | Описание | Диапазон | Кол-во | Примечание |
X | Физические входы | X0..X127, 128 точек | Всего 256 точек | |
Y | Физические выходы | Y0..Y127, 128 точек | ||
M | Вспомогательные реле (маркеры) | Общие | M0..M511, M768..M999, 744 точки | Всего 1280 точек Используется в программе в качестве промежуточных реле |
Энергонезависимые | M512..M767 256 точек | |||
Специальные | M1000..M1279, 280 точек | |||
Т | Таймеры | 100мс | T0..T63, 64 точки | Всего 128 точек |
10мс (M1028=ON) | T64..T126, 63 точки (если M1028=OFF, то 100 мс) | |||
1мс | T127, 1 точка | |||
С | Счетчики | 16-бит счет вверх | С0..С111, 112 точек | 128 точек |
16-бит счет вниз | С112..С127, 16 точек | |||
32-бит высокоскоростной, вверх/вниз, энергонезависимый | С235..С238, С241, С242, С244, 1 фаза 1 вход, 7 точек; С246, С247, С249, 1 фаза 2 входа, 3 точки; С251, С252, С254, 2 фазы 2 входа, 3 точки | 13 точек | ||
S | Шаговое реле | Инициализирование | S0..S9, 10 точек; | Всего 128 точек |
Возвращение в нулевую точку. | S10..S19, 10 точек (*2), исп. с инструкцией IST; | |||
Энергонезависимое | S20..S127, 108 точек | |||
D | Регистры данных | Общие | D0..D407, 408 точек | Всего 912 точек |
Энергонезависимые | D408..D599, 192 точки | |||
Специальные | D1000..D1311, 312 точек | |||
Индексные | E,F – 2 точки | Для косвенной адресации | ||
N | Для мастер-контроля | N0..N7, 8 точек | ||
P | Для инструкций CJ, CALL | P0..P63, 64 точки | ||
I | Для прерываний | Внешние | I001, I101, I201, I301, 4 точки | |
Временные | I6xx, (xx=1..99), шаг 1 мс | |||
Коммуникационные | I150, 1 точка |
Физические терминалы
Физические входы. Биты физических входов представляют собой ячейки памяти, значение которых отражает логический уровень сигнала на соответствующем входе. Если, например, на входе №3 присутствует высокий логический сигнал (напряжение 24В), то ячейка памяти X03 будет содержать 1. И наоборот, при отсутствии напряжения на входе, в ячейке всегда записан 0.
Физические выходы. Данная область памяти имеет прямо противоположные свойства, относительно физических входов. Состояние этих ячеек напрямую отражается на состоянии выходных элементов. При записи 1 в Y03, транзистор выхода №3 будет открыт (либо реле включено), и через него начнет протекать электрический ток. Соответственно нагрузка, подключенная к данному выходу будет активирована.
Вспомогательные реле
Вспомогательные биты (реле) представляют собой биты временного хранения. По своему назначению они соответствуют промежуточным реле в электрических схемах. Пользователь может произвольно включить или выключить эти биты и использовать их в любом месте программы.
Вспомогательные реле делятся на три группы:
- Общие. Представляют собой обычные биты для произвольной записи. Информация в этих битах сбрасывается при отключении питания.
- Энергонезависимые. Аналогично общим, эти биты доступны для произвольного использования в программе, но их состояние сохраняется при отключении питания
- Специальные. Каждый специальный бит имеет свою особую функцию, связанную либо с оборудованием самого ПЛК, либо с условиями исполнения программы или отдельных команд. Запись 1 в такой бит приводит к включению этой функции. Использовать такие ячейки для произвольной записи нельзя.
Функциональные реле
Таймеры. Главное назначение таймеров состоит в формировании различных временных интервалов. Таймер имеет вход, активирующий отсчет времени, и выход, который включается при истечении заданного времени. Количество таймеров, доступных в программе ограничено. Каждый таймер имеет собственный номер, начинающийся с буквы T. В контроллерах серии SS2 доступны три типа таймеров, отличающихся дискретностью счета: 100мс, 10мс, 1мс. Использование первого типа обеспечивает отсчет с дискретностью 100мс. Это значит что значение 3, на входе таймера приведет к задержке включения на 300мс, значение 10 даст 1000мс или 1 с. Текущее значение счета всегда можно получить, если использовать регистр, соответствующий номеру таймера. Это позволяет организовывать как контроль за работой, так и реализовать несколько задержек от одного таймера.
Счетчики. Назначение счетчика понятно из его названия. Он выполняет подсчет количества импульсов, поступающих ему на вход. В случае, если значение совпадает с уставкой, то активируется выход счетчика. Доступны 3 вида счетчиков. 16 разрядный счетчик на увеличение увеличивает свое значение на 1 при каждом входном импульсе. Счетчик на уменьшение наоборот, уменьшает значение на 1. Максимальное число импульсов, доступных для счета у 16 разрядных блоков – 65535. №2 разрядные счетчики имеют более сложную структуру, так как предназначены для организации работы совместно с внешними фотоимпульсными датчиками. Также как и у таймеров, текущее значение счетчика доступно для использования в программе.
Шаговые реле. Специализированные биты, используемые для переключения между отдельными шагами в циклических процессах.
Регистры данных
Регистры данных. Ячейки памяти, представляющие собой машинное слово и служащие для хранения какой-либо числовой информации. Также как и вспомогательные реле бывают общими, энергонезависимыми и специальными.