Руководство пользователя по программированию плк в CoDeSys 3
Скачать 5.57 Mb.
|
Внимание: Если превышено число одновременно отображаемых переменных, то в строке значений перемен- ных вы увидите сообщение: " Слишком много отображаемых переменных "(Too many monitoring variables). Что есть, что в CoDeSys CoDeSys V2.3 2-27 Пример мониторинга указателей: Эмуляция Во время эмуляции созданная программа выполняется не в ПЛК, а в компьютере, на котором запу- щен CoDeSys. В этом режиме допустимы все функции онлайн, что позволяет проверить логическую правильность программ, не используя контроллер. Внимание: функции внешних библиотек не выполняются в режиме эмуляции. Бортжурнал (Log) ‘ Бортжурнал ’ ( Log ) хронологически записывает действия пользователя, внутренние сообщения системы исполнения, изменения состояния и исключения в режиме онлайн. Это полезно для анали- за условий возникновения ошибки при отладке. 3 Пишем простой пример 3.1 Блок управления светофором В этой главе мы создадим небольшую программу-пример. Это - простой блок управления движени- ем на перекрестке, имеющем светофоры для двух пересекающихся направлений движения. Понят- но, что светофоры должны иметь два противоположных состояния – красный и зеленый. Чтобы из- бежать несчастных случаев, мы добавим общепринятые переходные стадии: желтый и желто- красный. Последняя стадия должна быть длиннее предыдущей. В этом примере мы покажем, как управляемые по времени процессы можно представить средства- ми языков стандарта МЭК 61131-3, как легко можно комбинировать различные языки в CoDeSys и познакомимся со средствами моделирования в CoDeSys. Создайте POU Начинать всегда легко: запустите CoDeSys и выберите ‘ Файл ’ ‘ Создать ’ (" File " " New "). В окне диалога определим первый POU. По умолчанию он получает наименование PLC_PRG. Не изменяйте его. Тип этого POU, безусловно, должен быть - программа. Каждый проект должен иметь программу с таким именем. В качестве языка программирования данного POU мы выберем язык Continuous Function Chart (CFC). Теперь создайте еще три объекта. Воспользуйтесь командой ‘ Проект ’ ‘ Объект - Добавить ’ (" Pro- ject " " Object Add ") в системном или в контекстном (нажмите правую кнопку мыши в Организаторе объектов) меню. Создайте: программу на языке Sequential Function Chart (SFC) с именем SEQUENCE, функциональный блок на языке Function Block Diagram (FBD) с именем TRAFFICSIGNAL и еще один аналогичный блок - WAIT, который мы будем описывать на языке Список Инструкции (IL). Что делает TRAFFICSIGNAL? В POU TRAFFICSIGNAL мы сопоставим определенные стадии процесса соответствующим цветам. То есть мы удостоверимся, что красный свет зажжен в красной стадии и в желто-красной стадии, желтый свет в желтой и желто-красной стадии и т.д. Что делает WAIT? В WAIT мы создадим простой таймер, который на вход получает длину стадии в миллисекундах и на выходе выдает состояние ИСТИНА по истечении заданного периода времени. Что делает SEQUENCE? В SEQUENCE все будет объединено так, чтобы нужные огни зажигались в правильное время и на нужный период времени. Что делает PLС_PRG? В PLC_PRG вводится входной сигнал включения, разрешающий начало работы светофора и 'цветовые команды’ каждой лампы связаны с соответствующими выходами аппаратуры. Объявления "TRAFFICSIGNAL" Вернемся теперь к POU TRAFFICSIGNAL. В редакторе объявлений определите входную перемен- ную (между ключевыми словами VAR_INPUT и END_VAR) по имени STATUS типа INT. STATUS будет иметь четыре возможных состояния, определяющие соответствующие стадии - зеленая, жел- тая, желто-красная и красная. Пишем простой пример CoDeSys V2.3 3-2 Поскольку наш блок TRAFFICSIGNAL имеет три выхода, нужно определить еще три переменных RED, YELLOW и GREEN. Теперь раздел объявлений блока TRAFFICSIGNAL должен выглядеть так: Функциональный блок TRAFFICSIGNAL, раздел объявлений: Программируем "TRAFFICSIGNAL" Теперь пора описать, что связывает вход STATUS с выходными переменными. Для этого перейдите в раздел кода POU (body). Щелкните на поле слева от первой цепи (серая область с номером 1). Вы теперь выбрали первую цепь. Теперь дайте команду меню ‘ Вставка ’ ‘ Элемент ’ (" Insert " " Box "). В первой цепи будет вставлен прямоугольник с оператором AND и двумя входами: Щелкните мышкой на тексте AND и замените его на EQ. Три знака вопроса около верхнего из двух входов замените на имя переменной STATUS. Для ниж- него входа вместо трех знаков вопроса нужно поставить 1. В результате Вы должны получить сле- дующий элемент: Щелкните теперь на месте позади прямоугольника EQ. Теперь выбран выход EQ. Выполните ко- манду меню ‘ Вставка ’ ‘ Присваивание ’(" Insert " " Assign "). Измените три вопроса ??? на GREEN. Вы теперь создали цепь следующего вида: STATUS сравнивается с 1, результат присваивается GREEN. Таким образом, GREEN будет вклю- чен, когда STATUS равен 1. Для других цветов TRAFFICSIGNAL нам понадобятся еще две цепи. Создаете их командой ‘ Вставка ’ ‘ Цепь (после) ’ (" Insert " " Network (after) "). Законченный POU должен выглядеть сле- дующим образом: Пишем простой пример CoDeSys V2.3 3-3 Функциональный блок TRAFFICSIGNAL: Чтобы вставить оператор перед входом другого оператора, Вы должны выделить сам вход, а не текст (выделяется прямоугольником). Далее используйте команду ‘ Вставка ’ ‘ Элемент ’(" Insert " " Box "). Теперь наш первый POU закончен. Как и планировалось, TRAFFICSIGNAL будет управлять вклю- чением выходов, руководствуясь значением переменной STATUS. Подключение standard.lib Для создания таймера в POU WAIT нам понадобится POU из стандартной библиотеки. Итак, от- кройте менеджер библиотек командами ‘ Окно ’ ‘ Менеджер библиотек ’ (" Window " " Library Man- ager "). Выберете ‘ Вставка ’ ‘ Добавить библиотеку ’ (" Insert " " Additional library "). Должно от- крыться диалоговое окно выбора файлов. Выберете standard.lib из списка библиотек. Объявления "WAIT" Теперь давайте вернемся к POU WAIT. Как предполагалось, этот POU будет работать таймером, за- дающим длительность стадий TRAFFICSIGNAL. Наш POU должен иметь входную переменную TIME типа TIME и генерировать на выходе двоичную (Boolean) переменную, которую мы назовем OK. Данная переменная должна принимать значение TRUE, когда желательный период времени закончен. Пишем простой пример CoDeSys V2.3 3-4 Предварительно мы устанавливаем эту переменную в FALSE в конце строки объявления (но до точки с запятой) ":= FALSE ". Теперь нам нужен генератор времени POU TP. Он имеет два входа (IN, PT) и два выхода (Q, ET). TP делает следующее: Пока IN установлен в FALSE, ET будет 0 и Q будет FALSE. Как только IN переключится в TRUE, выход ET начнет отсчитывать время в миллисекундах. Когда ET достигнет значения заданного PT, счет будет остановлен. Тем временем выход Q равен TRUE, пока ET меньше PT. Как только ET достигнет значения PT, выход Q снова переключится в FALSE. Описание всех POU из стандартной библиотеки приведено в приложении. Чтобы использовать TP в POU WAIT, мы должны создать его локальный экземпляр. Для этого мы объявляем локальную переменную ZAB (отсчитанное время) типа TP (между ключевыми словами VAR, END_VAR). Раздел объявлений WAIT теперь должен выглядеть так: Программируем "WAIT" Для создания желаемого таймера текст программы должен быть следующим: Сначала проверяется, установлен ли Q в TRUE (возможно, отсчет уже запущен), в этом случае мы не трогаем установки ZAB, а вызываем функциональный блок ZAB без входных переменных - что- бы проверить, закончен ли период времени. Иначе мы устанавливаем переменную IN ZAB в FALSE и одновременно ET в 0 и Q в FALSE. Таким образом, все переменные установлены в начальное состояние. Теперь мы устанавливаем необходи- Пишем простой пример CoDeSys V2.3 3-5 мое время TIME переменной PT и вызываем ZAB с IN:=TRUE. Функциональный блок ZAB теперь будет работать, пока не достигает значения TIME и не установит Q в FALSE. Инвертированное значение Q будет сохраняться в переменной OK после каждого выполнения WAIT. Как только Q станет FALSE, OK примет значение TRUE. С таймером покончено. Теперь пришло время объединять наши два блока WAIT и TRAFFICSIGNAL в главной программе PLC_PRG. "SEQUENCE" версия 1 Сначала объявим необходимые переменные. Это входная переменная START типа BOOL, две вы- ходных переменные TRAFFICSIGNAL1 и TRAFFICSIGNAL2 типа INT и одна типа WAIT (DELAY оригинально, не так ли). Программа SEQUENCE теперь выглядит так: Программа SEQUENCE версия 1, раздел объявлений: Создаем SFC диаграмму Первоначально SFC граф всегда состоит из этапа "Init" перехода "Trans0" и возврата назад к Init, ес- тественно, нам придется несколько дополнить его. Прежде чем программировать конкретные этапы и переходы, выстроим структуру графа. Сначала нам понадобятся этапы для каждой стадии TRAFFICSIGNAL. Вставьте их, отмечая Trans0 и выби- рая команды ‘ Вставка ’ ‘ Шаг-переход (снизу) ’(" Insert " " Step transition (after) "). Повторите эту процедуру еще три раза. Для редактирования названия перехода или этапа нужно просто щелкнуть мышкой на нужном тек- сте. Назовите первый переход после Init "START", а все прочие переходы "DELAY.OK". Первый переход разрешается, когда START устанавливается в TRUE, все же прочие - когда DELAY в OK станет TRUE, т.е. когда заданный период закончится. Этапы (сверху вниз) получают имена Switch1, Green2, Switch2, Green1, ну и Init, конечно, сохранит своё имя. "Switch" должен включать жёлтую фазу, в Green1 TRAFFICSIGNAL1 будет зеленым, в Пишем простой пример CoDeSys V2.3 3-6 Green2 TRAFFICSIGNAL2 будет зеленым. Наконец, измените адрес возврата Init на Switch1. Если вы всё сделали верно, диаграмма должна выглядеть так: Программа SEQUENCE версия 1, раздел инструкций: Теперь мы должны запрограммировать этапы. Если вы сделаете двойной щелчок мышью на изо- бражении этапа, то должен открыться диалог определения нового действия. В нашем случае мы бу- дем использовать язык IL (Список Инструкций). Программирование этапов и переходов Во время действия этапа Init проверяем, активен сигнал включения START или нет. Если сигнал не активен, то светофор выключается. Этого можно достичь, если записать в переменные TRAFFICSIGNAL1 и TRAFFICSIGNAL2 число 5. Этап Init: Пишем простой пример CoDeSys V2.3 3-7 В Green1 TRAFFICSIGNAL1 будет зеленым (STATUS:=1), TRAFFICSIGNAL2 будет красным (STATUS:=3), задержка в 5000 миллисекунд. Этап Green1: Switch1 изменяет состояние TRAFFICSIGNAL1 на 2 (жёлтое) и, соответственно, TRAFFICSIGNAL2 на 4 (жёлто-красное). Кроме того, теперь устанавливается задержка в 2000 миллисекунд. Это вы- глядит так: Этап Switch1: Green2 включает красный в TRAFFICSIGNAL1 (STATUS:=3) и зеленый в TRAFFICSIGNAL2 (STATUS:=1). Задержка устанавливается в 5000 миллисекунд. Этап Green2: В Switch2 STATUS в TRAFFICSIGNAL1 изменяется на 4 (жёлто-красный), соответственно, TRAFFICSIGNAL2 будет 2 (жёлтый). Задержка теперь должна быть в 2000 миллисекунд. Пишем простой пример CoDeSys V2.3 3-8 Этап Switch2: Первая версия нашей программы закончена. Если вы хотите проверить ее работу в режиме эмуляции, сделайте следующее: Откройте POU PLC_PRG. Каждый проект начинает работу с PLC_PRG. Вставьте в него компонент и замените “AND” на “SEQUENCE”. Входы и выходы оставьте пока свободными. Теперь вы можете откомпилировать (‘ Проект ’ ‘ Компилировать ’ - ' Project ' ' Build ') её и проверить отсутствие ошибок. В окне сообщений вы должны увидеть текст: "0 Errors, 0 Warnings". Теперь включите флажок ‘ Онлайн ’ ‘ Режим эмуляции ’ (‘ Online ’ ' Simulation mode ') и дайте ко- манду ' Онлайн ' ‘ Подключиться ’ (‘ Online ’ ' Login '). Запустите программу ' Онлайн ' ‘ Старт ’ (‘ Online ’ ' Run '). Откройте программу SEQUENCE. Программа запущена, но не работает, поскольку переменная START должна иметь значение TRUE. Далее это будет делать PLC_PRG, но сейчас вы можете из- менить ее вручную. Для этого щелкните дважды мышью по объявлению этой переменной. Ее зна- чение теперь выделено цветом и равно TRUE. Дайте команду записи значений переменных (' Онлайн ' ‘ Записать значения ’ – ‘ Online ’ ' Write values '). Теперь вы можете понаблюдать за рабо- той программы. Активные шаги диаграммы выделяются голубым цветом. Для продолжения редактирования программы закройте режим онлайн командой ' Онлайн ' ‘ Отклю- чение ’ (‘ Online ’ ' Logout '). "SEQUENCE" вторая версия Теперь немного усложним нашу программу. Разумно будет выключать наши светофоры на ночь. Для этого мы создадим в программе счетчик, который после некоторого числа циклов TRAFFICSIGNAL произведет отключение устройства. Для начала нам нужна новая переменная COUNTER типа INT. Объявите её как обычно в разделе объявлений SEQUENCE. Теперь выберете переход после Switch1 и вставьте ещё один этап и переход. Выберете результи- рующий переход и вставьте альтернативную ветвь вправо. После левого перехода вставьте допол- нительный этап и переход. После нового результирующего перехода вставьте удаленный переход (jump) на Init. Назовите новые части так: верхний из двух новых этапов нужно назвать "Count" и нижний "Off". Переходы будут называться (сверху вниз слева на право) EXIT, TRUE и DELAY.OK. Теперь новые части должны выглядеть как фрагмент, выделенный рамкой. Пишем простой пример CoDeSys V2.3 3-9 Программа "SEQUENCE", раздел инструкций: Теперь два новых этапа и перехода необходимо наполнить содержанием. На этапе Count выполняется только одно действие - COUNTER увеличивается на 1: Действие Count: На переходе EXIT1 проверяется достижение счетчиком заданного значения, например 7: Переход EXIT: На этапе Off состояние обоих светофоров устанавливается в 5 (светофор выключен), COUNTER сбрасывается в 0 и устанавливается задержка времени в 10 секунд. Пишем простой пример CoDeSys V2.3 3-10 Действие Off: Результат В нашей гипотетической ситуации ночь наступает после семи циклов TRAFFICSIGNAL. Светофо- ры полностью выключаются до рассвета, и процесс повторяется снова. При желании вы можете еще раз проверить работу программы в эмуляторе, прежде чем продолжить ее усовершенствование. PLC_PRG Мы определили два строго коррелированных во времени светофора в блоке SEQUENCE. Теперь полностью закончим программу. Для этого необходимо распределить входные и выходные пере- менные в блоке PLC_PRG. Мы хотим дать возможность запустить систему выключателем IN и хо- тим обеспечить переключение всех шести ламп (2 светофора) путем передачи ”команд переключе- ния” на каждом шаге SEQUENCE. Объявим теперь соответствующие Boolean переменные для всех шести выходов и одного входа, затем создадим программу и сопоставим переменные соответст- вующим IEC адресам. Следующий шаг - это объявление переменных LIGHT1 и LIGHT2 типа TRAFFICSIGNAL в редак- торе объявлений. Объявление LIGHT1 и LIGHT2: Для представления шести ламп светофоров нужно 6 переменных типа Boolean. Однако мы не будем объявлять их в разделе объявлений блока PLC_PRG, вместо этого используем глобальные перемен- ные (Global Variables) из ресурсов (Resources). Двоичная входная переменная IN, необходимая для установки переменной START блока SEQUENCE в TRUE, будет определена таким же образом. Выберете вкладку ‘ Ресурсы ’ ( Resources ) и откройте список ‘ Глобальные переменные ’ ( Global Variables ). Объявление глобальных переменных: Закончим PLC_PRG. Для этого мы перейдем в окно редактора. Мы выбрали редактор Непрерывных Функциональных Схем (CFC), и, следовательно, нам доступна соответствующая панель инструмен- тов. Пишем простой пример CoDeSys V2.3 3-11 Щелкните правой клавишей мыши в окне редактора и выберите элемент ‘ Блок ’ ( Box ). Щелкните на тексте AND и напишите ”SEQUENCE”. Элемент автоматически преобразуется в SEQUENCE с уже определенными входными и выходными переменными. Вставьте далее два элемента и назовите их TRAFFICSIGNAL. TRAFFICSIGNAL - это функцио- нальный блок, и, как обычно, Вы получите три красных знака вопроса, которые нужно заменить уже объявленными локальными переменными LIGHT1 и LIGHT2. Теперь создайте элемент типа Input, который получит название IN и шесть элементов типа Output, которым нужно дать следующие имена: L1_green, L1_yellow, L1_red, L2_green, L2_yellow, L2_red. Все элементы программы теперь на месте, и Вы можете соединять входы и выходы. Для этого щелкните мышью на короткой линии входа/выхода и тяните ее (не отпуская клавишу мыши) к вхо- ду/выходу нужного элемента. Наконец Ваша программа должна принять вид, показанный ниже. PLC_PRG: Теперь наша программа полностью готова. TRAFFICSIGNAL эмуляция Теперь проверьте окончательно вашу программу в режиме эмуляции. Убедитесь в правильности ее работы, контролируя значения переменных и последовательность выполнения в окнах редакторов CoDeSys. |