Язык ST CoDeSyS — самый гибкий язык программирования
Прежде чем мы с вами будем рассматривать упрощённую графическую систему программирования для технологов, хотелось бы в двух словах рассказать о базисном языке программирования СИ. Язык ST CoDeSyS отличается от других своей гибкостью и адаптивностью под любые задачи. Он позволяет обрабатывать сложные решения и видеть всю картину в целом. Чаще всего применяется в функциональных блоках для обработки алгоритма той или иной части рабочего органа станка или линии.
Из этой статьи вы узнаете:
Об языке программирования ST и типы переменных
Перечень основных операторов
Советы по программированию ПЛК в среде CoDeSyS
Здравствуйте уважаемые Дамы и Господа! Меня зовут Гридин Семён, и я являюсь автором этого блога. В данном посте я хочу обсудить с вами базовые понятия языка программирования CoDeSyS. Называется он ST CoDeSyS, очень сильно напоминает СИ.
Язык программирования ST и типы переменных
ST (Structured text) — это одна из составных частей комплекса CoDeSyS и представляет собой текстовый редактор высокого уровня. Он очень похож на Basic или Pascal. Такой способ программирования является идеальным инструментом для людей-программистов. Преимуществом языка является создание сложных математических и разветвленных алгоритмов.
ST позволяет без труда описывать сложные операции компактным и лёгким для восприятия текстом. Structured Text содержит в себе много конструкций, позволяющие присваивать переменные, использовать готовые библиотеки, функции и функциональные блоки.
В чём преимущество данного способа программирования? давайте с вами перечислим:
- Наглядность. Вы можете на одном листинге оценить всю последовательность действий и выполнение условий
- Программа на ST может быть создана в любом текстовом редакторе
- Читабельность. За счёт символьного представления текста и выделения блоков разными цветами
С этим мы разобрались, но, прежде чем переходить к непосредственному изучению азов программирования, необходимо ознакомиться с элементом языка — тип данных. Хочу обратить внимание, этот элемент практически схож во многих си-подобных языках (Питон, Ардуино IDE, СИ# т.д.)
Тип данных переменной определяет род информации, диапазон представлений и множество допустимых операций. Языки МЭК используют строгую идеологию в этом отношений. Любую переменную можно использовать только после её объявления. Присваивать значения одной переменной другой можно, только если они одного типа. В другом случае используются преобразователи типов.
В таблице ниже я представлю типы данных, которые используются чаще всех:
Тип | Название | Предел | Размер в байтах |
BOOL | Логическое | 1 бит | 1 бит |
BYTE | Целочисленое | 8 бит | 1 байт |
WORD | Целочисленое | 16 бит | 2 байта |
INT | Целочисленое | -32768-32767 | 2 байта |
UINT | Целочисленое | 0-65535 | 2 байта |
FLOAT | Вещественное | ±10³³ | 4 байта |
DATE_AND_TIME | Дата и время | — | — |
STRING | Строковое | — | — |
Перечень основных операторов
Операторы — это символы определённых операций. Но их можно определить и как функции, наделёнными определёнными привилегиями. Они имеют определённые ключевые слова и формы для представления на ST.
Оператор выбора IF позволяет выполнить различные группы выражений в зависимости от условий, выраженных логическими выражениями.
PROGRAM PLC_PRG VAR in:BOOL; out:INT; END_VAR IF in = TRUE THEN out:=1; ELSE out:=2; END_IF;
PROGRAM PLC_PRG VAR in:BOOL; out:INT; END_VAR
IF in = TRUE THEN out:=1; ELSE out:=2; END_IF; |
Оператор множественного выбора CASE позволяет выполнить различные группы выражений в зависимости от значения одной целочисленной переменной или выражения.
PROGRAM PLC_PRG VAR in:BOOL; test:INT; out:INT; END_VAR CASE test/2 OF 0,127: in:=TRUE; out:=123; 15..30: in:=FALSE; out:=456; ELSE out:=789; END_CASE;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | PROGRAM PLC_PRG VAR in:BOOL; test:INT; out:INT; END_VAR
CASE test/2 OF 0,127: in:=TRUE; out:=123; 15. .30: in:=FALSE; out:=456; ELSE out:=789; END_CASE; |
Циклы WHILE и REPEAT обеспечивают повторение группы выражений, пока верно условное логическое выражение. Если условное выражение всегда истинно, то цикл становится бесконечным. Условие в цикле WHILE выполняется до начала цикла, а в REPEAT после тела цикла.
PROGRAM PLC_PRG VAR in:BOOL; test:INT:=64; out:INT; END_VAR WHILE test>1 DO out:=out+1; test:=test/2; END_WHILE
PROGRAM PLC_PRG VAR in:BOOL; test:INT:=64; out:INT; END_VAR
WHILE test>1 DO out:=out+1; test:=test/2; END_WHILE |
PROGRAM PLC_PRG VAR in:BOOL; test:INT:=64; out:INT; END_VAR REPEAT out:=out+1; test:=test/2; UNTIL test>1 END_REPEAT
PROGRAM PLC_PRG VAR in:BOOL; test:INT:=64; out:INT; END_VAR
REPEAT out:=out+1; test:=test/2; UNTIL test>1 END_REPEAT |
Цикл FOR обеспечивает заданное количество повторений группы выражений.
PROGRAM PLC_PRG VAR in:BOOL; test:INT; out:INT; END_VAR FOR test:=1 TO 10 DO out:=out+1; END_FOR
PROGRAM PLC_PRG VAR in:BOOL; test:INT; out:INT; END_VAR
FOR test:=1 TO 10 DO out:=out+1; END_FOR |
Советы по программированию ПЛК в среде CoDeSyS
Одно из значительных отличий написание алгоритмов для АСУТП от классического программирования — это меньший уровень абстракции. Для описания тех. процесса не требуется глубокое и огромное описание. Достаточно опираться на логику процесса и здравый смысл.
Не стремитесь использовать чужие библиотеки и чужой код в своих проектах.
Обращаю ваше внимание, чужие библиотеки, скачанные с форума на реальных объектах использовать категорически НЕ РЕКОМЕНДУЮ. Для этого есть куча готовых библиотек, такие как Standart, Utill, OSCAT. Фирма ОВЕН для своего оборудования пишет свои ПРОТЕСТИРОВАННЫЕ библиотеки.
У меня был такой горький опыт. Когда мы занимались автоматизацией ЦТП, а точнее контуром отопления и ГВС, я скачал с форума библиотеки для ПИД-регулирования задвижек. И что же в итоге получилось? Код тупо не сработал, вообще! Пришлось работать сутками, и днём и ночью допиливать программу в режиме цейтнота.
Пишите программы компактно, и оставляйте комментарии.
Когда пишите объёмную и сложную программу, пользуйтесь функциями, функциональными блоками и подпрограммами. Пишите комментарии возле каждого узла автоматизации. Это очень сильно упрощает жизнь. Особенно тогда, когда нужно через некоторое время что-то исправлять.
Пользуйтесь интерактивной справкой в среде разработки.
В данном каталоге вы можете найти ответы на многие ваши вопросы, особенно это актуально для новичков. Открывается справка по нажатию кнопки F1.
Плюсы языка ST-массивы и циклы.
Использование циклов и массив облегчают жизнь программисту и увеличивает читабельность кода. Циклы очень удобны при использовании сложных и ресурсоёмких функций, таких как ПИД-регуляторы, опрос аналоговых входов, связь между ПЛК.
На этом я с вами прощаюсь, дорогие друзья, пишите в комментариях, подписывайтесь, рассказывайте друзьям. До встречи в следующих статьях.
С уважением, Гридин Семён.
Блог об АСУ ТП и КИПиА. Блоки CoDeSys
Советы конкретные и философские. С примерами и скриншотами. Буду дополнять.
Пользуйтесь реальностью процессовОдно из фундаментальных отличий программирования технологических процессов от классического программирования — это обычно значительно меньший уровень абстракции. Алгоритмы определяются технологией процесса, который в свою очередь часто опирается на здравый смысл и простую логику. Об этом часто забывают увлекаясь программированием ради программирования.
Не путайте причины и следствия
Например, пусть при падении давления нужно выключать насос, а при выключенном насосе какой-то клапан должен быть закрыт; предположим, никаких иных условий выключения и закрытия — нет. Ошибочно при этом (даже якобы в целях оптимизации кода) закрывать клапан при падении давления, т.к. алгоритм закрытия клапана строго привязан именно к состоянию насоса. При удлинении или изменении следственных цепочек это может привести к серьезным ошибкам в процессе или сложностям в модификации кода.
Настройка среды CODESYS 2.3
Некоторые настройки «по умолчанию» в CODESYS удивляют. Например, эта среда — единственная из виденных мной, в которой шрифт не моноширинный, т.е. символы в нем имеют разную ширину. Сразу же после установки среды заходите в Проект > Опции > Редактор > Шрифт и выбирайте Consolas (код на всех скриншотах) или хотя бы Courier New.
После этого отмените автообъявление (штука, появляющаяся когда вы вводите незнакомый Кодесису набор символов), этот адский источник всплывающих окон, которыми так любит радовать эта среда.
В настройках «Рабочего стола» уберите лишние галочки и уменьшите таймауты связи до 1000 мс — это сильно упростит вам жизнь, поверьте.
Чтобы перепроверить правильность кода — после каждого изменения жмите клавишу F11 для компиляции кода. После нажатия в нижней части экрана высветятся сообщения о текущих ошибках или их отсутствии. Чтобы скрыть лишнюю плашку с этими сообщениями — нажмите SHIFT+ESC.
Не стремитесь использовать чужой код
Вторичное использование чужого кода в классическом программировании — норма и необходимость, обусловленная множеством причин. В АСУ ТП же, по моему мнению, почти нет необходимости использовать сторонний код.
Я не считаю себя профессионалом и не писал особо сложных программ, но для тех что писал мне вполне хватало стандартных библиотек Util.lib и Standart.lib. Те же библиотеки Oscat (скачать + мануалы на англ) шикарны и всеохватывающи, но в них нет ничего сверхестественного и, мне кажется, лучше самому писать аналогичные функции. А на тот код, который обычно выкладывают на форумах, лучше вообще не смотреть. Даже с тем, что я выкладываю в блоге лучше просто ознакамливаться, а не использовать.
Примеры правильного кода внутри библиотек
Чтобы понять как должен выглядеть грамотный код и узнать некоторые программистские приёмчки не нужно далеко ходить. Открывайте Кодесисом библиотеки Util.lib и Oscat.lib как обычные проекты и впитывайте мудрость строк.
NB Может я и негодяй, но с помощью этой проги вы можете взломать запароленные библиотеки.
Пользуйтесь интегрированной справкой CODESYS
Банально, но там есть ответы на большинство вопросов начинающих. Справка небольшая поэтому лучше пробежаться по ней всей чтобы познакомится с возможностями языков и функций.
Вызов справки по «F1» работает по большинству служебных слов и элементам библиотек Util.lib и Standart.lib. Иногда в CODESYS 2.3 вызов по «F1» не срабатывает, например для SEL и ARRAY, поэтому вручную открывайте справку и ищите нужный идентификатор во вкладке «Поиск»
Не повторяйте код
Это самый распространенный косяк у неопытных программистов независимо от платформы и языка программирования. Видите дублированный код — выносите его в отдельную функцию или функциональный блок, и/или же переводите переменные в элементы массивов и прогоняйте в цикле. Предыдущее предложение вам может быть непонятно, но подробности можно загуглить.
На скриншоте код, обрабатывающий данные с частотных преобразователей Danfoss. Переменные типа CWS1_FREQ созданы в Конфигурации ПЛК в разделе ModBus (Master). Слева представлена первая версия кода где каждый ПЧ представлен отдельным куском из восьми строк; код в каждом куске различается только данными, а логика одинакова.
Справа оптимизированная версия — логика вынесена в отдельную функцию GET_PUMP (с адресацией и указателями, о которых расскажу ниже), а код для конкретного ПЧ теперь занимает одну строчку. Если бы в Конфигурации можно было задавать переменные как элементы массива (типа FREQ_CWS[1]), то код обработки
кликните на скриншот чтобы увеличить его
Плюсы языка ST — массивы и циклы
Язык ST я использую из-за того, что моё знакомство с программированием началось с C/C++. В некоторых случаях удобно использовать CFC или что похуже, но в целом ST более ёмок, лаконичен и чёток. Но, чем действительно он отличается от других языков так это возможностью нормального использования массивов и циклов, которые мне сильно облегчают жизнь и увеличивают читабельность кода.
Не злоупотребляйте циклами
При том, что циклы FOR бывают крайне удобны, всегда помните, что код в ПЛК выполняется в суперцикле и часто можно обойтись простым инкрементированием с обнулением (см. скриншот ниже). Также большие циклы FOR и тем более WHILE могут сильно «затормозить» суперцикл ПЛК вплоть до срабатывания сторожевого таймера (об этом в следующем совете). Иногда, конечно, нужно сделать перебор в текущем суперцикле и тут уж лучше использовать FOR.
| j станет равным 25000 за 1 цикл, но |
Сторожевой таймер и сброс ПЛК
Если суперцикл выполняется слишком долго, то ПЛК производит аппаратный сброс на уровне микроконтроллера.
Сброс по watchdog’у отличается от любого сброса через среду CODESYS. Этим можно пользоваться. В моей практике сторожевой таймер применяется в контроллерах ОВЕН. В этих ПЛК иногда происходит неприятный момент — созданный в Конфигурации модуль ModBus (Master) перестает вести опрос Слейвов (обычно это возникает после перезаливки программы). Поначалу это решали сбросом питания, но тут возникали трудности при удаленной закачке через интернет.
Позже я обнаружил, что проблему решает искусственное заведение программы в бесконечный цикл. Я вывел сброс на кнопку в визуализации. Или же можно анализировать изменение переменной «Опрашиваемый адрес» в ModBus (Master) — если Slave-устройств больше одного, то она должна меняться каждый цикл.
Расширенное использование функций
Помимо вывода одного-единственного значения любого стандартного типа функция способна возвращать значения пользовательского типа, например структуры, которые могут состояться из любого количества переменных разного типа.
Но что интереснее, имеется возможность изменения переменных, которые являются аргументами функции, внутри самой функции. Это возможно благодаря использованию указателей и адресации на эти переменные. Понять что к чему можно по скриншоту ниже, на котором приведен код функции, инициализирующий переменную если та равна нулю. Параметр внутри функции определяется как указатель на нужный тип, а при вызове функции в параметре используется не сама переменная, а её адрес (функция ADR).
Иногда SEL удобнее IF
В случае когда при каком-то условии переменная должна изменить своё значение, а в противном — иметь другое значение, применение IF может быть не лучшем решением. Если условие применимо только к этой единственной переменной — используйте функцию-селектор SEL. Она работает с переменными любого типа.
Буль не буль
Очень часто в чужом коде встречаю странное использование операций с булевыми величинами или, наоборот, игнорирование булевой логики.
Во-первых, операции типа сравнения или проверки равенства возвращают булевы значения.
Во-вторых нет необходимости явно сравнивать булеву переменную со значениями TRUE или FALSE.
Сравнение возвращает TRUE или FALSE | Нет необходимости явного сравнения |
Наглядная работа с булями
Мне очень часто для сокращения кода приходится использовать явные преобразования BOOL в целое число, например, в формулах. Для этого приходится использовать функцию приведения типов в её стандартном неуклюжем виде BOOL_TO_BYTE(). Но как-то раз наткнулся на блог Егора Петрова, где он придумал более простое и изящное решение — по сути переименовать эту функцию в более читаемую — WHEN(). Теперь пользуюсь, пользуйтесь и вы.
Удобное использование булевых переменных и функции WHEN | Код функции WHEN |
Получи +10 к карме — поделись в комментариях
своими фишками и замечаниями.
Язык непрерывных функциональных схем CFC. Часть 1
Пять основных языков программирования (ST, SFC, FBD, LD, IL), установленных стандартом МЭК 61131-3, используются при написании программ для логических контроллеров. В дополнение к ним CODESYS предлагает язык непрерывных функциональных схем (CFC). Редактор языка и сама его структура интуитивно понятна. Для написания программ не требуется специальных знаний. Именно поэтому CFC является языком выбора для начинающих программистов.
Начиная с 1993 года стандартом IEC 61131-3 (МЭК 61131-3) определено пять основных языков (ST, SFC, FBD, LD, IL) для программирования логических контроллеров. Из них наиболее простым в изучении и удобным в работе является графический язык FBD.
Некоторые компании для облегчения программирования внедряют в свои программные продукты языки, не входящие в стандарт МЭК. Например, CODESYS использует язык непрерывных функциональных схем (CFC), как вариант языка FBD. Язык удобен для прикладных специалистов, не имеющих специальной подготовки в области информатики.
Принципиальное отличие CFC от FBD заключается в том, что в редакторе CFC размещать компоненты программы (функциональные и логические блоки) и задавать порядок их выполнения можно произвольным образом. Такие возможности позволяют легко реализовывать обратные связи, что удобно при разработке схем регулирования. При создании программ на CFC необходимо вручную выстраивать связи между элементами, в то время как на FBD соединения выполняются автоматически.
Свойства редактора CFC
Существуют две разновидности редактора CFC: стандартный (рис. 1) и страничный (рис. 2). Выбрать тип редактора можно при создании нового проекта или при добавлении POU (компонент организации программы) в уже существующий проект
Рис. 1Рис. 2
Страничный тип редактора CFC удобен при создании проектов, содержащих большое количество последовательно выполняющихся частей программы. Постраничное размещение программы позволяет быстро переключаться между ее разделами, акцентировать внимание только на необходимых элементах, снижает риск построения ошибочных связей и делает проект интуитивно понятным. При работе программы страницы выполняются последовательно, а передача информации с одной страницы на другую осуществляется с помощью меток соединения.
Стандартный тип редактора CFC более популярен среди пользователей, так как обладает рядом преимуществ: наглядность представления кода (все блоки и связи между ними расположены на единой рабочей области), не требуется переключения между страницами, что позволяет избежать лишних действий при написании кода.
Важно помнить, что стандартный и страничный типы редактора не конвертируются один в другой.
Общие свойства блоков
Программа на языке CFC начинается с добавления блоков на рабочую область редактора. Нужный блок добавляется мышкой с панели инструментов.
Блоки имеют фиксированное значение входных и выходных контактов. Можно добавить дополнительные контакты с панели инструментов Входной и Выходной контакт или из пункта: Контакты, контекстного меню, вызываемого нажатием ПКМ на рабочей области редактора.
При работе с большим числом ФБ могут остаться не задействованными входные/выходные контакты. Для компактности программы их можно удалить. При необходимости удаленные контакты всегда можно восстановить функцией сброс контактов. Операции удаления и сброса контактов выполняются аналогично добавлению входных и выходных контактов, а также при помощи соответствующих кнопок на панели инструментов. Чтобы поменять порядок входных/выходных контактов, необходимо их удалить, а потом заново добавить в нужном порядке.
После создания блока начинается этап создания входов и выходов путем перемещения их с панели инструментов. Если блок имеет два-три входных/выходных контакта, то операция занимает мало времени. Если у блока большое число контактов, то потребуется оптимизировать процесс. Необходимо выделить входной или выходной контакт блока и начать вводить имя переменной или константу. Таким образом выход будет добавляться автоматически столько раз, сколько потребуется (рис. 3).
Рис. 3Существует еще один способ добавления входа/выхода блока сразу с переменной. Для этого переменные задаются в разделе программы VAR: выделяется имя переменной и перемещается к нужному входному или выходному контакту блока.
При формировании логики программы блоки добавляются, как правило, в произвольном порядке и так же строятся связи между ними. Это приводит к тому, что нумерация блоков отличается от последовательности их расположения (порядка выполнения) (рис. 4). Чтобы соблюсти очередность выполнения (рис. 5), нужно перед запуском программы нажать ПКМ на рабочем поле редактора CFC и в меню Порядок выполнения, выбрать пункт Упорядочить в соответствии с потоком данных.
Рис. 4Рис. 5
В версии CODESYS V3.5 SP15 появилась новая опция – автоматическая нумерация блоков в соответствии с потоком данных. Теперь элементы можно добавлять на рабочую область редактора в любом порядке и как угодно перемещать. Автоматическая нумерация элементов программы установлена по умолчанию. Вместе с тем сохранена нумерация элементов в режиме заданного порядка выполнения. Переключаться между режимами можно из свойств POU на вкладке: Порядок выполнения CFC. Посмотреть номера элементов при автоматической нумерации (рис. 6) можно из пункта контекстного меню Порядок выполнения с помощью кнопки Показать порядок выполнения или с помощью этой же кнопки, расположенной на панели инструментов.
Рис. 6Функциональные блоки и структуры
При работе с ФБ, имеющими большое количество входов/выходов, или структурами, содержащими большое количество переменных, удобно использовать компоновщик и селектор (рис. 7), которые находятся на панели инструментов.
Компоновщик упаковывает входы ФБ или структуры, а селектор распаковывает в отдельные выходы, таким образом заменяется большое количество близко расположенных линий связи на одну. Такой подход позволяет избежать ошибок и ускорить процесс компоновки и перемещения блоков, а также экономит место на рабочей области редактора и делает код программы нагляднее.
Рис. 7Линии связи
Для построения линии связи между двумя элементами нужно соединить контакты двух блоков. В редакторе CFC реализован ряд полезных функций по построению линий свиязи. Функция автосоединения линий связи по умолчанию активна, ее можно включить или отключить в меню Инструменты, пункт Опции. Для автосоединения необходимо вплотную приблизить контакты элементов. Существует поддержка параллельной связи от одного элемента к многим другим (рис. 3).
Если линия связи целиком не умещается на экране монитора, нужно выделить один из контактов линии связи (зажать клавишу <Ctrl> + нажать стрелку <Влево/Вправо>), тогда рабочая область сама сдвинется к входным или выходным контактам.
Для того чтобы избежать проблем из-за наличия большого количества линий связи, в стандартном редакторе CFC используют соединительные метки (рис. 8). Единственная задача меток – заменить длинные нечитаемые линии связи. Соединительные метки можно установить с панели инструментов. Сначала добавляется метка выхода (ей автоматически присваивается идентификационный номер), затем добавляется метка входа, и ей присваивается соответствующий номер. Заменить линию связи метками можно в пункте Метка соединения контекстного меню, вызываемого нажатием ПКМ на самой линии или на соответствующем входе/выходе. Аналогичным образом можно восстановить линию из меток.
Рис. 8В страничном редакторе CFC нельзя добавить соединительную метку на рабочую область (заменить ими линии связи), так как они выполняют другую задачу. Соединительные метки служат входами и выходами на страницах проекта – осуществляют передачу данных с одной страницы на другую (рис. 9). Метки добавляются не на рабочей области, что улучшает наглядность проекта и экономит место непосредственно на рабочей области редактора.
Рис. 9Оформление и компоновка программ
Неотъемлемой частью оформления программы являются комментарии. В редакторе CFC можно свободно размещать комментарии на рабочей области. Создать комментарий можно с помощью одноименного элемента на панели инструментов. Переход на новую строку при написании комментария осуществляется с помощью комбинации клавиш: <Ctrl>+<Enter>.
В редакторе CFC существует возможность печати проекта с двумя типами подгонки – Постер и Страница, выбрать один из них можно в меню Инструменты, в пункте Опции. По умолчанию стоит печать постером. Перед печатью проекта можно выполнить его предварительный просмотр в пункте Файл.
Во второй части статьи речь пойдет о реализации условий на языке CFC; особенностях работы с элементами, охваченными обратной связью; свойствах раздела VAR_INPUT CONSTANT в ФБ; кастомизации проектов и других важных особенностях работы с CFC.
Codesys для чайников программирование
Петров И.В., «Программируемые контроллеры. Стандартные языки и приемы прикладного проектирования» / Под ред. проф. В.П. Дьяконова.-М.:СОЛОН-Пресс, 2004. — 256с. |
В книге описана практика применения промышленных программируемых контроллеров, излагаются языки программирования на основе действующего стандарта МЭК 61131-3. Описаны инструменты программирования ПЛК – текстовые и графические редакторы, средства отладки, комплекс CoDeSys, приведены многочисленные примеры программ.
Петров И.В., Вагнер Р., Долл В. «Отладка прикладных ПЛК программ в CoDeSys» «Промышленные АСУ и контроллеры» 2006/2007г. |
«Компьютерная программа выполняет то, что вы ей приказали делать, а не то, чтобы вы хотели, чтобы она делала.»
Третий закон Грида
- Текст статьи Часть 1. (pdf 287K)
Нач. примеры в CoDeSys (zip 4K) - Текст статьи Часть 2. (pdf 295K)
- Текст статьи Часть 3. (pdf 212K)
- Текст статьи Часть 4. (pdf 300K)
- Текст статьи Часть 5. (pdf 204K)
- Текст статьи Часть 6. (pdf 178K)
- Текст статьи Часть 7. (pdf 239K)
- Текст статьи Часть 8. (pdf 225K)
- Текст статьи Часть 9. (pdf 170K)
- Текст статьи Часть 10. (pdf 160K)
Пример к ч. 9 (zip 10K)
Петров И. В., Пастушенков Д.В. «Программируем временные сложности» «Промышленные АСУ и контроллеры» №7-9 2004г. |
История календаря от Вавилона до наших дней. Високосные года и секунды. Общедоступные стандарты источники точного времени: GMT, TAI, UTC; радиомаяки и Интернет, GPS, ACTS, SNTP. Время для виртуального пространства: Biel Mean Time и Greenwich e-time. Дата, время и длительность в МЭК 61131-3. Преобразование данных и вычисления со временем и датами. Примеры реализации эффективных алгоритмов в CoDeSys: определение дня недели, дней в месяце, високосного года, упаковка и распаковка даты и времени, часы реального времени, сторожевой таймер, МЭК таймеры.
- Петров И.В. «Язык ST для C программиста»
«Мир компьютерной автоматизации»
Практика показывает что, профессиональные программисты, работая с CoDeSys, чаше всего выбирают язык ST. Практически все они в совершенстве владеют языком C. Данная статья имеет целью быстро очертить C программистам границы возможностей языка ST в CoDeSys .
Текст статьи (pdf 158K)
- Золотарев С.В., Пастушенков Д.В. «CoDeSys SP RTE: SoftPLC + возможности реального времени в среде Windows»
«Мир компьютерной автоматизации» N3 2005г.
Полный текст статьи (pdf 190K)
Программирование ПЛК ОВЕН. Языки МЭК61131-3. Среда CoDeSys. Основы. Alex IA. Видеокурс. 2017
Возможности среды CoDeSys. Языки программирования ПЛК. Библиотеки. Типы данных, операторы. Примеры.
Программирование ПЛК ОВЕН. Языки МЭК 61131-3. Среда CoDeSys. Гайнутдинов К. Видеокурс. 2013
Возможности среды разработки CoDeSys. Языки программирования контроллеров. Операторы. Типы данных. Стандартные библиотеки.
CoDeSys. v3.5. ЧаВо. FAQ. Руководство. ОВЕН. Pdf. 2018
Сборник часто задаваемых вопросов, возникающих во время работы с контроллерами ОВЕН, программируемых в среде CODESYS V3.5, и ответов на них. В некоторых случаях вопросы охватывают слишком большую предметную область – тогда вместо ответа приводится ссылка на документ, посвященный затронутой теме.
CoDeSys. v3.5. Форум. Owen.ru. ОВЕН
Вопросы и ответы. Настройка обмена с другими устройствами (Modbus, ОВЕН, OPC и др.). Визуализация. Архивация. Онлайн-FAQ. История обновлений Шаблоны модулей Mx110 для CODESYS V3.5. Библиотеки: ModemOwenLib, библиотеки для опроса электросчётчиков и тепловычислителей, библиотека OwenStringUtils.
CoDeSys. v3.5. Таргет-файлы. ПЛК ОВЕН. Руководство. ОВЕН. Pdf. 2018
Описание переменных таргет-файла ПЛК ОВЕН для CODESYS V3.5. Таргет-файл (файл целевой платформы) это обязательная частью каждого проекта CODESYS. Target-файл содержит информацию о ресурсах контроллера, обеспечивает его связь со средой программирования и позволяет работать с дополнительным функционалом (например, яркостью подсветки, зуммером и т. д.). Каждая модель контроллера ОВЕН имеет соответствующий таргет-файл, который необходимо установить перед началом создания проекта в CODESYS.
CoDeSys. v3.5. Старт. Руководство. ОВЕН. Pdf. 2018
Вводная информация для работы с контроллерами ОВЕН в среде CODESYS V3. 5. Установка ПО. Настройка связи между контроллером и компьютером. Интерфейс CODESYS. Подключение к контроллеру модулей ввода-вывода и их конфигурирование. Создание и запуск демонстрационного проекта.
CoDeSys. v3.5. Справка-онлайн. Официал.сайт. Ru. 2017
Справочная онлайн-система по CoDeSys на официальном сайте производителя 3S-Smart Software Solutions. Постоянно обновляется. На русском и английском языках. Удобная навигация.
CoDeSys. v3.5. Связь, обмен данными. Сокеты. Руководство. ОВЕН. Pdf. 2018
Связь по интерфейсу Ethernet и протоколам на стеке TCP/IP – Modbus TCP, KNX, MQTT, SNMP и др. Передача данных в OPC-серверы и SCADA-системы, передача файлов (по FTP), синхронизации с серверами точного времени (NTP), рассылка сообщений по электронной почте (SMTP/POP3) и т. д. Работа с сетевыми сокетами в CODESYS V3.5 позволяет программисту реализовать свой протокол обмена поверх стандартных UDP и TCP.
CoDeSys. v3.5. Связь, обмен данными.
Протокол. Нестандартный. Руководство. ОВЕН. Pdf. 2018В основном обмен данными происходит по последовательным интерфейсам RS-232/485 и стандартным промышленным протоколам (например, Modbus RTU). Но иногда необходим обмен с устройством поддерживающим только свой специфичный протокол, например тепло- и электросчетчики, весовые индикаторы, модули ввода-вывода и т.д. Поддержку этого протокола в контроллере можно организовать с помощью системных библиотек, которые позволяют работать с последовательным портом напрямую.
CoDeSys. v3.5. Связь, обмен данными. Протокол. OWEN. Руководство. ОВЕН. Pdf. 2018
Обмен данными с использованием протокола ОВЕН для контроллеров ОВЕН, программируемых в среде CODESYS V3.5. Протокол ОВЕН поддерживается такими устройствами, как ТРМ, СИ, модули Mx110 и др. Работа с протоколом в CODESYS реализована в библиотеке OwenNet. Описание библиотеки и пример ее использования для опроса ТРМ212 (на языках CFC и ST).
CoDeSys. v3.
5. Связь, обмен данными. Протокол. Modbus. ПЛК ОВЕН. Руководство. ОВЕН. Pdf. 2018Обмен данными между контроллерами, программируемыми в CODESYS V3.5 и CoDeSys V2.3 по протоколу Modbus. Контроллеры могут работать как в режиме Master, так и в режиме Slave.
CoDeSys. v3.5. Связь, обмен данными. Протокол. Modbus. Контроллер СПК. Руководство. ОВЕН. Pdf. 2016
Обмен данными по протоколу Modbus для панельных контроллеров ОВЕН СПК в среде CODESYS V3.5. Способы организации связи: шаблоны модулей, стандартные средства конфигурирования CODESYS, библиотека ModulsOwenLib, библиотеки Modbus и ModbusSlave.
CoDeSys. v3.5. Связь, обмен данными. Верхний уровень. Руководство. ОВЕН. Pdf. 2018
Web-визуализация, VPN вместо сложной SCADA. Обмен данными между контроллерами в локальной сети при помощи сетевых переменных. Передача данных в SCADA с помощью OPC-сервера. Передача данных в облачный сервис типа OwenCloud.
CoDeSys. v3.5. Проект. Адаптация.
Руководство. ОВЕН. Pdf. 2018Перенос проектов CODESYS из предыдущих версий среды в новую. Перенос проектов, созданных в CODESYS V3.5 SP5 Patch 5 и CoDeSys V2.3, в CODESYS V3.5 SP11 Patch 5.
CoDeSys. v3.5. Визуализация. Руководство. ОВЕН. Pdf. 2018
Cоздание экранов визуализации для контроллеров, программируемых в среде CODESYS V3.5, с подробным описанием характеристик и настроек всех графических примитивов, а также примерами работы с ними.
CoDeSys. v3.5. Версии ПО и документации. Руководство. ОВЕН. Pdf. 2019
Определение версии: встроенного ПО (прошивки) прибора, таргет-файла, компонента, библиотеки, документа (руководства).
CoDeSys. v3.5. Библиотеки. OwenStringUtils. Руководство. ОВЕН. Pdf. 2018
Библиотека OwenStringUtils предоставляющая программисту дополнительный функционал для работы со строками – функции конвертации строк ASCII в строки Unicode и Unicode в ASCII.
CoDeSys. v3.5. Библиотеки.
CmpSysExec. Руководство. ОВЕН. Pdf. 2018Библиотека CmpSysExec позволяет организовать доступ к терминалу ОС Linux из программы контроллера. Реализация библиотеки находится в Linux (библиотека CODESYS представляет только интерфейс), поэтому может меняться в зависимости от версии прошивки контроллера.
CoDeSys. v3.5. Архивация. Руководство. ОВЕН. Pdf. 2018
Контроллеры ОВЕН могут архивировать данные во внутреннюю память или на внешний носитель (USB- или SD-накопитель). Для этого могут использоваться компонент OwenArchiver или библиотека CAA File.
CoDeSys. v2.3. Форум. Owen.ru
Форум компании ОВЕН по Codesys версии 2.3. Вопросы, обсуждения, полезности, примеры.
CoDeSys. Среда программирования ПЛК. Обучение: видеокурсы, уроки, документация, книги, для чайников, статьи.
Курс молодого бойца по программированию ПЛК из среды CoDeSys.
На YouTube канале Овен выходят уроки программирования ПЛК в среде CoDeSys v2. Выглядит это как законченный курс молодого бойца.
Кому интересно не просто ознакомится с азами программирования в среде CODESYS, а быстро и качественно запрограммировать и запустить в эксплуатацию смонтированное оборудование, вам сюда.
Уроки 1-8:
Программное обеспечение и ПЛК. Описание, внедрение, ПЛК на «кодесис». Примеры программ CODESYS.
CODESYS – это не только среда программирования — это целый комплекс средств по работе с промышленным оборудованием. Он включает собственный OPC-сервер, графический редактор для создания визуализаций, менеджер рецептов, лог аварий и многое другое. На данный момент выпускаются контроллеры на базе двух версий CODESYS: версия 2 и версия 3.
CODESYS v2 поддерживается производителем только в режиме исправления ошибок. Новые функции в него уже не добавляются. Тем не менее, функционала CODESYS v2 достаточно для подавляющего большинства задач. К тому же он требует меньше ресурсов ПЛК и компьютера.
CODESYS v3 – это совершенно новая разработка. В основу CODESYS v3 положен модульный принцип, который позволяет дополнять систему посредством подключения дополнительных модулей.
Основные отличия СODESYS v3 от v2:
- Поддержка элементов Объектно Ориентированного Программирования (ООП).
- Новый язык программирования UML (Unified Modelling Language), тесно связанный с ООП.
- Сети ПЛК — инструмент управления в одном проекте несколькими контроллерами.
- Управление системами движения (CODESYS SoftMotion).
- Оптимизация программного кода (сложные конструкции типа IF … END_ IF можно «сворачивать» для упрощения просмотра кода).
- Обновленный и улучшенный менеджер визуализаций. Появились стили визуализаций, которые позволяют изменить оформление проекта в один клик, а также существенно расширилась библиотека графических элементов.
И это лишь немногие изменения, которые принесла третья версия CODESYS. Таким образом, CODESYS v3 аккумулировал в себе многие тенденции современной промышленной автоматизации и продолжает регулярно обновляться, обзаводясь всё новыми и новыми функциями.
О тенденциях в промышленных сетях
С тех пор, как в 1979 году появился протокол Modbus, он стал де-факто стандартом промышленной сети. Изначально он был спроектирован для использования с последовательными интерфейсами RS-232/RS-485. Позже практически без изменений он «перекочевал» в сети Ethernet в виде протокола Modbus TCP.
Всемирная популярность протокола Modbus обусловлена несколькими причинами:
- Протокол является полностью открытым, его спецификация доступна всем. При этом нет необходимости в специальных интерфейсных микросхемах для реализации.
- Реализация Modbus очень проста на программном уровне.
- Дешевая среда передачи (обычная витая пара).
- Высокая надежность передачи данных благодаря использованию в каждой посылке контрольной суммы.
При разработке протокол был рассчитан на потребности и вычислительные возможности оборудования того времени. Многие актуальные для сетей нынешнего времени вопросы учтены не были:
- Это низкая пропускная способность шины.
- Отсутствие какой-либо начальной инициализации системы. Пользователю вручную придется настраивать каждое устройство перед включением его в сеть (а именно задавать ему адрес, скорость обмена и т.д.).
- Дешевая среда передачи (обычная витая пара).
- В стандарте четко прописано использование только двух типов данных: BOOL и WORD. Соответственно, при передаче других типов данных зачастую возникают разночтения между устройствами разных производителей.
Стремление к развитию промышленных сетей привело в появлению в 2003 году стандарта EtherCAT.
Основой EtherCAT является технология Ethernet, что позволяет использовать все преимущества данной технологии.
Программирование ПЛК CoDeSys под ключ, заказать программирование CoDeSys. СКОМА
ООО СКОМА занимается программированием промышленных контроллеров и операторских панелей в среде разработки Codesys. Программируем ПЛК разных серий, предлагаем готовые решения для типовых задач. Тщательно тестируем ПО, гарантируем отказоустойчивость системы.
CoDeSys: для каких целей подходит?
CoDeSys — интегрированная среда программирования (IDE) для промышленных ПЛК. Включает непосредственно среду разработки, систему исполнения. Работает с внешними библиотеками. Имеет встроенные конфигураторы, поддерживающие интерфейсы ввода/вывода: Modbus, PROFIBUS, PROFINET, DeviceNet, CANopen, J1939, EtherCAT, SERCOS III, Ethernet IP.
Codesys поддерживает пять языков МЭК 61131-3: три визуальных (LD, FBD, SFC), низкоуровневый аппаратно-независимый ассемблер (IL), высокоуровневый язык (ST).
Благодаря большому выбору инструментов, CoDeSys позволяет гибко настроить контроллер, реализовать нестандартные функции. Может запускаться поверх операционной системы (совместимость с VxWorks, Windows CE, Linux, RTKernel, QNX, Nucleus и др.), на голом железе с нуля.
Достоинства:
- CoDeSys позволяет выжать максимум из железа и обеспечить рекордное быстродействие на слабых платформах;
- возможна синхронизация параллельных процессов с задержкой всего в долю секунды;
- встроенный разработчик для визуализации техпроцессов, проектирования графических интерфейсов для ПЛК с дисплеем, подключенных операторских панелей, HMI для операторского управления с отдельного ПК или веб-приложений без использования внешних SCADA-систем;
- среда разработки поддерживает низкоуровневый ассемблер, с которым можно гибко прописать программный код с учетом архитектуры микроконтроллера, задействовать все ресурсы;
- встроенный конфигуратор для программирования модульных и распределенных АСУ ТП.
Изначально среда программирования Codesys применялась при разработке программного обеспечения ПЛК в тех сферах, где была важна высокая автономность, надежность, быстродействие. Строительная техника, яхты, автомобильные ЭБУ, печатные, деревообрабатывающие станки, прокатные станы, сборочные роботы, насосные станции и другое технологическое оборудование. Постепенно сфера расширилась.
Компания ООО СКОМА выполняет программирование ПЛК в Codesys для технологического оборудования, децентрализованных и распределенных АСУ ТП в разных отраслях: пищевой, энергетике, текстильной, металлургии, машиностроении, станкостроении и др. Используем все возможности среды разработки. Обеспечим высокое быстродействие. Реализуем наиболее сложные схемы управления.
Программирование ПЛК в CoDeSys: готовые решения
ООО СКОМА сотрудничает с производственными предприятиями, которые нуждаются в модернизации или расширении производства, производителями, поставщиками технологического оборудования, которые планируют расширить возможности выпускаемых технологических установок. Часто сталкиваемся с типичными задачами. Чтобы ускорить реализацию проектов, предлагаем готовые решения для автоматизации:
- насосной станции;
- компрессоров;
- промышленных вентиляторов;
- холодильного оборудования;
- непрерывного дозирования сыпучих, жидких компонентов;
- затаривалелей мягких контейнеров Биг-бегов;
- конвейеров.
Перед поставкой и загрузкой программного кода в контроллер, адаптируем программное обеспечение с учетом особенностей используемого оборудования, режимов работы.
Цели разработки в CoDeSys
Главная цель разработки программного обеспечения для ПЛК — обеспечить автоматизированное управление оборудованием и автоматическую поддержку заданных параметров (без контроля оператором) технологических процессов. Также наши инженеры ООО СКОМА добиваются второстепенных, но не менее важных задач:
- оптимальные режимы работы технологических установок;
- безопасный запуск оборудования, плавный выход технологических параметров на заданный уровень, без резких скачков температуры, давления, скорости;
- безопасная остановка оборудования в случае аварийной ситуации;
- простота и удобство при обслуживании, управлении;
- аварийная сигнализация в случае отклонения технологических параметров от заданного уровня, отказе одного из узлов.
ПО, разработанное инженерами ООО СКОМА для промышленных контроллеров позволяет оптимизировать производство, сократить потребление энергии, продлить ресурс оборудования, обеспечивает качественное регулирование.
Услуги программирования контроллеров в Codesys включают разработку управляющей программы, HMI для операторских пультов или веб-интерфейса. Обеспечим удобный, информативный контроль.
Серии программируемых контроллеров на CoDeSys
Более 350 производителей выпускают контроллеры с системой исполнения (Control Runtime System, CRS) CoDeSys, и этот список постоянно расширяется. Инженеры ООО СКОМА выполнят программирование популярных серий ПЛК и интеллектуальных реле, которые официально реализуются в России:
- ОВЕН ПЛК;
- Weintek;
- FASTWEL;
- ABB;
- Moeller;
- WAGO;
- Lenze;
- IFM.
Можем выполнить разработку ПО для ПЛК других серий. Чтобы уточнить, для каких, позвоните.
Почему для разработки программного обеспечения контроллеров выбирают нас?
ООО СКОМА — инжиниринговая компания с собственной производственной базой, исследовательской лабораторией и инженерами различных направлений. Перед программированием ПЛК в Codesys внимательно изучаем особенности работы машин, которые будут автоматизированы. Знаем тонкости эксплуатации автоматических систем управления. Уделяем внимание даже небольшим мелочам, которые могут повлиять на энергоэффективность, точность управления. Мы нацелены на идеальный результат. При необходимости дадим рекомендации, доработаем схему АСУ. После разработки моделируем работу ПО, оцениваем эффективность выбранных алгоритмов управления. При необходимости, корректируем программный код.
Мы уверены в своей работе. Даем гарантию. Передаем заказчику скомпилированный и исходный код.
Сроки разработки программного обеспечения ТП CoDeSys
Работаем быстро, сразу приступаем к разработке ПО после обращения заказчика. При наличии проекта, подготовим программное обеспечение для ПЛК в течение 6 рабочих дней.
Если нужен полный цикл разработки, требуется проработка технических условий, ПО подготовим в срок от 1 месяца. Чтобы получить больше информации позвоните.
Новости » Индивидуальные курсы обучения специалистов по ПЛК1ххх ОВЕН
Открыт набор для обучения специалистов по базовому практическому курсу «ПЛК1хх базовый курс (программирование в среде CODESYS 2.3 — ведущее независимое программное обеспечение автоматизации IEC 61131-3 IEC 61131-3 для систем управления)».
Наш курс специально разработан для специалистов АСУТП (КИПиА), которые раньше не имели опыта в программировании промышленных контроллеров ОВЕН.
Для начального обучения программированию используется самый дружелюбный к начинающему специалисту язык визуального программирования CFC.
Этот язык был специально создан для проектирования систем управления непрерывными технологическими процессами.
На базовом курсе мы даем только ту информацию, которая необходима для успешного и быстрого старта.
Минимально необходимая теория, сведённая к простым и понятным принципам.
Много практических заданий, позволяющих быстро начать программировать в CoDeSys 2.3.
Расписанные по шагам интуитивно понятная последовательность логика операций.
Индивидуальный разбор наиболее часто возникающих вопросов и сложностей.
Список приборов для обучения на каждого обучающегося (4 комплекта):
Для изложения теоретической части будет проектор для наглядного пособия и магнитная доска.
Программа семинара (скачать):
1 день
- Обзор контроллеров ОВЕН ПЛК.
- Установка среды программирования CODESYS 2.3. с таргет файлами, библиотеками.
- Создание нового проекта на языке CFC.
- Обзор основных типов данных используемых в Codesys.
- Принципы работы ПЛК.
- Рабочий цикл ПЛК:
- обработка входных сигналов,
- исполнение написанного программного кода,
- запись выходных сигналов,
- обслуживание аппаратных ресурсов ПЛК.
- Работа с дискретными входами и выходами ПЛК110.
2 день
- Переменные и типы данных CODESYS.
- Стандартные операторы CODESYS:
- логика,
- арифметика,
- сравнение.
3 день
- Стандартная библиотека Standart.lib:
- таймеры,
- счетчики,
- детекторы фронтов.
- Создание программы управление освещением на 9 действий.
4 день
- Настройка связи между ПЛК и CODESYS.
- Методы отладки программы.
- Применение точек останова.
- Обзор универсальных и скоростных аналоговых входов, и выходов.
- Операторы преобразования типов данных.
- Явное и неявное преобразование.
- Создание блока плавного разгона и плавной остановки.
5 день
- Библиотека Util.lib:
- генератор сигналов,
- двухпозиционный регулятор,
- ШИМ-сигнал.
- ПИД-алгоритм в ПЛК.
- Знакомство с макросами.
6 день
- Обзор модулей ввода-вывода Мх110.
- Принципы информационного обмена в сети RS-485 по протоколу ModBus.
- Конфигурирование модулей Мх110.
- Настройка связи модулей и ПЛК.
- Особенности совместной работы ПЛК и модулей ввода-вывода.
7 день
- Принципы связи ПЛК и панели оператора.
- Обзор интерфейса RS-232.
- Конфигурирование панели СП3хх.
- Настройка работы панели СП3хх в режиме Master.
- Настройка работы ПЛК в режиме Slave.
8 день
- Пользовательские программные компоненты:
- функциональные блоки,
- программы,
- функции.
- Создание пользовательской библиотеки.
- Работа с часами реального времени ПЛК.
- Обзор библиотеки Syslibtime.
9 день
- Знакомство с языком ST.
- Оператор сравнения IF.
- Знакомство с визуализациями в CODESYS.
10 день
- Итоговая аттестация.
Записаться на курс.
Структурированный текст: научитесь программировать ПЛК (шаг за шагом)
Вам также сложно читать свои собственные и другие огромные лестничные диаграммы?
На самом деле, хотя релейная логика — это простой язык программирования для начинающих, его может быть очень трудно читать и понимать. Вот почему некоторые считают Structured Text лучшим языком программирования для ПЛК — и вы можете узнать о нем все в этом руководстве.
В большой программе ПЛК, написанной на языке релейной логики, может быть почти невозможно найти «начало и конец».Таким образом, то, что может показаться легким для изучения (особенно для техников и электриков), не всегда лучше всего программировать. Ваша лестничная диаграмма будет трудна для понимания другими людьми, кроме вас самих.
Как я могу быть в этом уверен? Попробуй сам. Взгляните на один из этих примеров релейной логики и посмотрите, сколько времени потребуется, чтобы понять его. Понимаете мою точку зрения?
К счастью, существует лучший язык программирования ПЛК. Он называется структурированный текст .
Содержание структурированного текста Учебное пособие
Что такое программирование структурированного текста?
Structured Text — это язык программирования ПЛК, определенный в PLCOpen в IEC 61131-3 .Язык программирования основан на тексте, по сравнению с графической лестничной диаграммой или функциональной блок-схемой.
Сначала может показаться, что для программирования ПЛК лучше использовать графический язык программирования. Но, на мой взгляд, это верно только для небольших программ ПЛК. При использовании текстового языка программирования ПЛК ваша программа будет занимать гораздо меньше места, а последовательность операций / логику будет легче читать и понимать. Вы можете, например, масштабировать аналоговый вход или выход ПЛК с помощью всего одной строки кода или установить аварийный сигнал для вашего системного решения SCADA.
Еще одним преимуществом является то, что вы можете комбинировать разные языки программирования. У вас даже могут быть функциональные блоки, содержащие функции, написанные в структурированном тексте. Тот факт, что это стандартизованный язык программирования, также дает нам возможность программировать различные марки ПЛК с помощью структурированного текста. Вероятно, самый распространенный ПЛК (по крайней мере, в Европе) — это ПЛК Siemens S7. Они могут быть запрограммированы с помощью структурированного текста, и вы можете начать уже сейчас со стартового набора Siemens S7-1200, который также является отличным набором для знакомства со средой Siemens PLC.
Не забудьте ознакомиться с моими обзорами лучших курсов по программированию ПЛК . Это отличный способ научиться программировать различные типы ПЛК.
Языки программирования высокого уровня
Если вы уже знакомы с языками программирования высокого уровня, такими как PHP, Python и C, структурированный текст покажется вам знакомым. Синтаксис структурированного текста разработан так, чтобы он выглядел как синтаксис языка программирования высокого уровня с циклами, переменными, условиями и операторами.
Но, с другой стороны, если вы никогда не видели язык программирования высокого уровня, структурированный текст может стать отличным введением в эти языки и используемый синтаксис. Иногда может быть хорошей идеей начать с более простого языка программирования, чтобы понять, как работают логика и ПЛК. Например, стартовый комплект Siemens LOGO — это программируемое реле с очень простым языком визуального программирования.
Перед тем, как вы прочитаете это руководство, я рекомендую вам кратко взглянуть на эту программу ПЛК, написанную в структурированном тексте.Попытайтесь понять, можете ли вы понять функцию этой программы. Вам знаком структурированный текст?
ПРОГРАММА stexample VAR x: BOOL; END_VAR х: = ИСТИНА; ПОВТОРИТЬ x: = ЛОЖЬ; ДО x: = ЛОЖЬ; END_REPEAT; END_PROGRAM;
Поток структурированного текста
Первое, что вам следует изучить, — это структура или синтаксис структурированного текста. Когда вы поймете структуру, вы поймете, как работает поток вашей программы.
Начиная с приведенного выше примера, вы можете видеть, что вся программа начинается с PROGRAM и заканчивается END_PROGRAM . Все, что находится между ними, — это ваша программа ПЛК. Эти два слова являются ключевыми словами-разделителями для объявлений программ. Подробнее о ключевых словах позже.
Не запутайтесь насчет END_PROGRAM, потому что ваша программа на этом не закончится полностью. Когда ПЛК достигнет END_PROGRAM, цикл сканирования ПЛК начнется снова, и ваша программа повторится.
Последовательность программы структурированного текста.
Это похоже на релейную логику или любой другой язык программирования ПЛК — он будет запускаться снова и снова. И если вы привыкли программировать микроконтроллеры, такие как Arduino UNO, PROGRAM / END_PROGRAM будет похожа на бесконечный цикл в C.
ПРИМЕЧАНИЕ:
Здесь нужно добавить, что при программировании в структурированном тексте, вы часто не будете использовать конструкцию PROGRAM / END_PROGRAM. Это уже будет сделано с помощью программного обеспечения для программирования ПЛК, и код, который вы должны написать, — это то, что вы хотите внутри этой конструкции.
Управление потоком программ ПЛК, написанных в структурированном тексте, такое же, как и в релейной логике: выполняет одну строку за раз .
Начало с синтаксиса структурированного текста
Синтаксис языка программирования — это определение того, как он написан. Точнее, какие символы используются для придания языку его формы и значения.
Как видно из примера, структурированный текст состоит из двоеточий, точек с запятой и других символов. Все эти символы имеют значение и используются для обозначения чего-либо.Некоторые из них являются операторами, некоторые — функциями, операторами или переменными.
Все детали синтаксиса будут объяснены по мере продвижения по этому руководству. Но есть некоторые общие правила синтаксиса структурированного текста, о которых вам следует знать. На данный момент вам не нужно запоминать все правила синтаксиса, как вы это сделаете, когда приступите к программированию:
- Все операторы разделены точками с запятой
Структурированный текст состоит из операторов и точек с запятой для их разделения. - Язык не чувствителен к регистру
Хотя для удобства чтения рекомендуется использовать верхний и нижний регистр, в этом нет необходимости. - Пробелы не имеют функции
Но их следует использовать для удобства чтения.
Здесь действительно важно понимать, что когда вы пишете программу ПЛК в структурированном тексте, ваш компьютер переводит ее на язык, который ПЛК может понять.
Когда вы загружаете программу ПЛК со структурированным текстом в свой ПЛК, программное обеспечение для программирования, которое вы используете, скомпилирует вашу программу.Это означает, что он преобразует код в своего рода машинный код , который может быть выполнен ПЛК.
Компилятор использует синтаксис языка программирования для понимания вашей программы.
Например — каждый раз, когда компилятор видит точку с запятой , он будет знать, что достигнут конец текущего оператора . Компилятор будет читать все, пока не достигнет точки с запятой, а затем выполнит этот оператор.
Комментарий Синтаксис
В текстовых языках программирования у вас есть возможность писать текст, который не выполняется.Эта функция используется для добавления комментариев в ваш код.
Комментарии хороши, и, как новичок, вы всегда должны комментировать свой код. Это упрощает понимание вашего кода позже.
В структурированном тексте вы можете делать однострочные или многострочные комментарии.
Однострочный комментарий:
// комментарий
Комментарий после конца строки ST:
<выражение>; / * комментарий * /
или
<заявление>; (* комментарий *)
Многострочный комментарий:
/ * начало комментария ... конечный комментарий * /
или
(* начальный комментарий ... конец комментария *)
Стоит ли комментировать каждую деталь?
По мере того, как вы постепенно становитесь все лучше и лучше, вы должны делать все меньше и меньше комментариев о функциональности. Причина тому — «Дао программирования», книга о программировании, вдохновленная старым китайским «Дао Дэ Цзин». Или на самом деле принцип, лежащий в основе книги, является причиной.
Возьмите эту небольшую историю из главы 2.4:
Послушник спросил Учителя: «Вот программист, который никогда не проектирует, не документирует и не тестирует свои программы. Но все, кто его знает, считают его одним из лучших программистов в мире. Почему это?»
Мастер ответил: «Этот программист овладел Дао. Он вышел за рамки потребности в дизайне; он не злится, когда система дает сбой, но беззаботно принимает вселенную. Он вышел за рамки необходимости в документации; его больше не волнует, увидит ли кто-нибудь его код.Он вышел за рамки необходимости тестирования; каждая из его программ совершенна сама по себе, безмятежна и элегантна, их цель очевидна. Поистине, он вошел в тайну Дао ».
Хотя это может показаться крайним, вы всегда должны писать свой код, чтобы он был как можно более легким для понимания. Даже без комментариев. Вы начинаете делать это с простого упрощения чтения кода с помощью пробелов.
Но пока не беспокойтесь о комментариях. Сделайте столько, сколько хотите, пока вы еще новичок.
Создание операторов со структурированным текстом
Итак, структурированный текст состоит из операторов . Но что такое заявления?
Вы, наверное, знаете, что утверждения исходят от людей. Вы можете сделать заявление, президент или даже компания может сделать заявление. И в программировании ПЛК операторы почти такие же.
Оператор указывает ПЛК, что делать.
Возьмем для примера первую инструкцию:
X: BOOL;
Компилятор прочитает это как , один оператор , потому что, когда он достигает точки с запятой, он знает, что это конец этого оператора.Помните, что операторы разделяются точкой с запятой. Это главное синтаксическое правило этого языка.
В в этом операторе вы сообщаете ПЛК создать переменную с именем X , и эта переменная должна иметь тип BOOL .
Использование переменных в структурированном тексте
Прежде чем мы углубимся в утверждение, позвольте мне вернуться к ключевым словам, которые я упоминал ранее. Как видите, переменная X определяется между двумя другими ключевыми словами — VAR и END_VAR .
И PROGRAM / END_PROGRAM, и VAR / END_VAR представляют собой конструкции , что означает, что они ограничивают определенную область в вашей программе для чего-то конкретного. В конструкции PROGRAM находится вся ваша программа ПЛК, а в конструкции VAR вы определяете переменные.
Все четыре называются ключевыми словами, потому что они зарезервированы. Вы не можете использовать эти слова ни для чего другого при программировании в структурированном тексте. Имя вашей программы не может быть PROGRAM или даже program (STL не чувствителен к регистру), потому что это слово может использоваться только для создания конструкции, ограничивающей вашу программу PLC.
Вернуться к переменных …
Если вы знаете другие языки программирования, скорее всего, вы уже знаете о переменных.
Но если вы этого не сделаете, вот введение в переменные, которые вам, вероятно, понравятся:
Переменная — это место, где вы можете хранить данные.
В зависимости от типа данных, которые вы хотите сохранить, доступно несколько типов данных . Различные типы данных называются типами данных.Например, если у вас есть переменная, в которой вы хотите сохранить TRUE или FALSE , вы можете объявить ее как тип BOOL .
Тип BOOL — это логический тип данных , что означает, что он может содержать логическое значение (ИСТИНА или ЛОЖЬ).
Итак, это два момента о переменных. У них есть определенный тип данных, и они содержат значение этого типа данных. Но есть еще одна вещь, которую вы можете контролировать в своих переменных. Имя переменной.
Чтобы упростить использование переменных во всей программе ПЛК, все они имеют имена. Когда вы определяете переменную в конструкции VAR, вы начинаете с присвоения переменной ее имени:
X: BOOL;
Этот оператор создаст переменную с именем X с типом данных BOOL.
Имейте в виду, что при программировании с помощью некоторого программного обеспечения ПЛК, такого как Siemens STEP 7 или Rockwell, вы не будете использовать VAR / END_VAR для объявления переменных. Вместо этого переменные часто называют тегами или символами, и даже если вы программируете в структурированном тексте, вы объявляете их визуально (как на изображении ниже) или в функциональном блоке.
Переменные, теги или символы?
И последнее, что нужно добавить, — это то, что в программировании ПЛК переменные часто называются тегами . В программном обеспечении для программирования ПЛК Studio 5000 Logix Designer для ПЛК Allen Bradley переменные называются тегами. Но если вы программируете в старых версиях программного обеспечения SIMATIC STEP 7 для ПЛК Siemens, переменные называются символами. В более новых версиях STEP 7 (начиная с TIA Portal версии 11) переменные называются тегами.
SIMATIC STEP 7 Переменные портала TIA, называемые тегами ПЛК.
Но какие бы переменные ни вызывались, они всегда выполняют одну и ту же функцию. А с программным обеспечением для программирования IEC 61131-3, таким как STEP 7, Codesys или Studio 5000, всегда будут доступны стандартные типы данных.
Типы данных в структурированном тексте
В зависимости от того, какой ПЛК вы используете, вам будут доступны различные типы данных. В ПЛК Siemens доступны типы данных в STEP 7, аналогичные стандартным в IEC 61131-3. Но у вас также будут другие типы данных, используемые только в ПЛК SIEMENS, такие как S5TIME.
Все стандартные типы данных определены организацией PLCOpen и являются частью языков программирования ПЛК. Эти типы данных включены в каждое программное обеспечение для программирования ПЛК со структурированным текстом. В стандарте IEC типы данных делятся на две категории: Элементарные типы данных и производные типы данных .
Элементарные типы данных
- Целые числа
- Плавающие точки
- Время
- Строки
- Битовые строки
Для каждого элементарного типа данных доступно несколько типов данных IEC . ± 308
Время: 6
Тип данных Формат | Использовать | |
ВРЕМЯ | Продолжительность времени после события | T # 10d4h48m57s12ms TIME # 10d4h48m |
DATE DATE | DATE | Дата # 1989-05-22 |
TIME_OF_DAY | Время суток | TOD # 14: 32: 07 TIME_OF_DAY # 14: 32: 07.77 |
DATE_AND_TIME | Дата и время дня | DT # 1989-06-15-13: 56: 14.77 DATE_AND_TIME # 1989-06-15-13: 56: 14.77 |
Строки:
Тип данных IEC | Формат | Диапазон |
STRING | Символьная строка | ‘Моя строка’ | 6 9329
Тип данных IEC | Формат | Диапазон |
BOOL | Логическое значение | 1 бит |
BYTE | ||
16 бит | ||
DWORD | Двойное слово | 32 бит |
LWORD | Длинное слово | 64 бита |
Производные типы данных
- Структурированные типы данных
- Перечислимые типы данных
- Типы данных поддиапазонов
- Типы данных массива
Производные типы данных являются вашими собственными пользовательских типов данных .Все производные типы данных создаются путем создания ключевых слов TYPE и END_TYPE . Между ключевыми словами находится тип производного типа данных, который вы хотите объявить.
Все эти разные типы данных сейчас могут показаться немного подавляющими. Особенно, если вы раньше не использовали текстовый язык программирования. Но не о чем беспокоиться.
На данный момент вам нужно запомнить только несколько из них, чтобы начать программировать с помощью структурированного текста. По мере того, как вы становитесь лучше и усложняете свои программы, вы постепенно узнаете о большем количестве типов данных по мере их использования.Здесь важно не продвигаться вперед слишком быстро. Вы хотите понять основы.
Как видите, разные типы данных могут содержать разные форматы данных и, следовательно, разные значения.
Но как поставить значения в переменные? А как использовать переменные?
С выписками и операторами.
Операторы и выражения в STL
Следующее, что вам нужно знать, это операторов . Операторы используются для манипулирования данными и являются частью практически любого языка программирования.Это подводит нас ко второй вещи, о которой вы должны знать — выражений .
Как и операторы, выражения являются важной частью языков программирования.
Выражение — это конструкция , которая при вычислении дает значение .
Это означает, что когда компилятор компилирует выражение, он оценивает выражение и заменяет оператор результатом. Возьмем этот пример с двумя переменными A и B .
A содержит значение 10 , а B содержит 8 .
A + B
Результатом этого выражения будет 18 . Таким образом, вместо A + B компилятор вставит значение 18.
Выражение состоит из операторов и операндов .
Итак, что такое операторы и операнды?
Поскольку вы только что видели пример выражения, вы только что видели и оператор, и два операнда.A и B являются операндами, а + — оператором.
Выражения языка программирования с операндами и операторами.
Помните, что операторы используются для управления данными. Это именно то, что делает +. Он берет значение переменной A и добавляет его к значению в B.
+ также называется оператором сложения, потому что это операция сложения.
Операторы
В структурированном тексте доступно несколько операторов. Опять же, МЭК 61131-3 описывает все стандартные операторы на языке структурированного текста:
Операция | Символ | Приоритет | |||||
Старшие скобки | 3(выражение) | ||||||
Оценка функции | MAX (A, B) | ||||||
Отрицание Дополнение | — НЕ | ||||||
Возведение в степень | ** | ** | Умножение | ||||
Добавить Вычесть | + — | ||||||
Сравнение | <,>, <=,> = | ||||||
Равенство Неравенство | |||||||
логическое И логическое И | и И | ||||||
логическое Исключающее ИЛИ | XOR | ||||||
Логическое ИЛИ | ИЛИ | Наименьшее |
Все операторы в приведенной выше таблице отсортированы с приоритетом .Это также называется порядком операций, о котором вы можете узнать из математики.
Порядок операций — это порядок, в котором операции выполняются или рассчитываются. Просто взгляните на это выражение:
A + B * MAX (C, D)
Как это выражение будет вычисляться компилятором?
Как вы можете видеть в таблице операторов, оператор с наивысшим приоритетом заключен в круглую скобку. Это означает, что первое, что будет оценено, — это все, что указано в скобках — в этом примере: (C, D).
Но поскольку MAX (C, D) на самом деле является функцией, мы можем перейти на одну строку вниз в таблице для оценки функции.
Итак, в приведенном выше выражении первое, что будет оценено, — это функция: MAX (C, D). Функция выдаст (заменит функцию) ответом. Которая в данном случае является наивысшей из двух переменных C и D.
Пусть изображение C является результатом. Выражение теперь будет выглядеть так:
A + B * C
Теперь вы можете перемещаться по таблице вниз, пока не дойдете до строки со следующим оператором, используемым в этом выражении.
Осталось две операции: умножение и сложение. Но поскольку умножение имеет более высокий приоритет, оно будет оценено первым.
B * C идет первым, а затем результат добавляется к A.
Каждый раз, когда вычисляется выражение, оценка следует в порядке приоритета, как в таблице выше.
4 типа операторов, 4 типа выражений
Операторы, используемые для выражений в структурированном тексте, можно разделить на четыре группы. Каждая группа операторов будет иметь определенную функцию и приведет к определенному типу данных.
- Арифметические операторы
- Операторы отношения
- Логические операторы
- Побитовые операторы
Арифметические операторы
Все арифметические операторы часто называют математическими операторами . Результат всегда будет математическим результатом выражения.
- + (добавить)
- — (вычесть / отрицать)
- * (умножить)
- ** (показатель степени)
- / (разделить)
- MOD ( деление по модулю)
Пример:
15 MOD 4
Результат:
3
Операторы отношения
Чтобы сравнить или найти связь между двумя значениями, вы можете использовать одно из реляционные операторы .Они используются для сравнения, и результатом будет логическое значение (тип BOOL), ИСТИНА или ЛОЖЬ.
- = (равно)
- < (меньше)
- <= (меньше или равно)
- > (больше)
- > = (больше или равно )
- <> (не равно)
Пример:
ТЕМПЕРАТУРА: = 93,9; ТЕМПЕРАТУРА> = 100.0
Результат:
FALSE
Логические операторы
Если вы хотите сравнить логические значения (BOOL) и сделать из них некоторую логику, вы должны использовать логических операторов . Эти операторы также выдают логическое значение ИСТИНА или ЛОЖЬ в результате выражения.
Пример:
LIMIT_SWITCh2: = TRUE; LIMIT_SWITCh3: = FALSE; LIMIT_SWITCh2 OR LIMIT_SWITCh3
Результат:
TRUE
Побитовые операторы
Последняя группа операторов называется побитовыми операторами , потому что операции выполняются побитово.Это просто означает, что логическая операция выполняется для каждого бита двух чисел. Результат — новое число — общий результат побитовых операций.
Пример:
15 AND 8
Результат:
15
Поскольку эта операция побитовая, расчет будет побитовым. Итак, чтобы понять, что здесь происходит, вам нужно преобразовать числа в двоичные значения:
15 = 1111
8 = 1000
Теперь каждый бит числа 1111 (15) можно использовать в логической операции с другим числом. 1000 (8):
1111 И 1000
Номер бита | 1111 (15) | 1000 (8) | Результат | |||
1 | 1 | |||||
1 | 1 | 0 | 0 | |||
2 | 1 | 0 | 0 | 0 |
Операторы и инструкции
Итак, в предыдущем разделе вы узнали, что выражений оценивают .Это означает, что все выражения дадут результат, а компилятор заменит выражение результатом.
Но что, если вы хотите, чтобы ПЛК (компилятор) не оценивал что-то, а DO что-то?
Утверждения — это ответ.
Как я упоминал ранее в этой статье, операторы сообщают ПЛК, что делать. Это инструкция, которую вы даете ПЛК, чтобы действовать.
Если вы создадите выражение, которое дает результат, это мало что даст.Выражения — это все вычисления, и если вы не используете результаты этих выражений в некоторых действиях (утверждениях), это будет похоже на покупку продуктов, но не на приготовление еды.
Давайте посмотрим, какие действия или утверждения вы можете делать в структурированном тексте.
Оператор присвоения и оператор
В структурированном тексте доступно несколько операторов. Все они представляют собой действие или условие .
Начиная с действий, наиболее фундаментальным утверждением в структурированном тексте является оператор присвоения .Операторы также описаны в стандарте IEC, разработанном PLCOpen, и первым из них, который они перечисляют, является оператор присваивания.
Вот как выглядит оператор присваивания:
A: = B;
Что этот оператор говорит компилятору делать?
Чтобы взять значение переменной B и поместить его в переменную A .
ПЛК присваивает значение переменной. Вот еще более простой пример:
A: = 10;
Этот оператор примет значение 10 и поместит его в переменную A.Или, иначе говоря, переменной A будет присвоено значение 10.
Поскольку значение A теперь равно 10, мы можем сделать другое утверждение, но на этот раз с выражением:
B: = A + 2;
Когда эта строка кода скомпилирована, выражение A + 2 будет оценено как 12. Компилятор заменит выражение на результат 12. Теперь оператор будет выглядеть для компилятора следующим образом:
B: = 12;
Теперь произойдет то, что компилятор присвоит значение 12 переменной B.
Как оператор присваивания с выражением будет оцениваться компилятором.
Последнее, что символ: = называется оператором присваивания . Да, это оператор, аналогичный операторам, используемым в выражениях. Часто эти два типа операторов ошибочно принимают друг за друга и неправильно используют.
Распространенной ошибкой является использование оператора равенства (=) вместо оператора присваивания (: =). Но даже если они похожи друг на друга, между ними есть огромная разница.Возьмем эти два примера:
A = B
A: = B;
Первая строка — это выражение. Поскольку это выражение, оператор будет использоваться для оценки строки. Оператор равенства оценивается следующим образом:
Если правая и левая стороны равны, он оценивается как ИСТИНА или 1. Если нет, он будет оцениваться как ЛОЖЬ или 0.
С некоторыми другими операторами оператор равенства имеет вид оператор отношения . Все операторы отношения будут иметь значение ИСТИНА или ЛОЖЬ.
Во второй строке вы увидите выписку. На этот раз оператор будет использоваться для действия, а не для оценки. Присваивание — это действие, и здесь значению A будет присвоено значение B.
Наконец, вы всегда можете идентифицировать оператор по точке с запятой. Еще раз, точка с запятой — это то, как компилятор узнает, когда достигнут конец оператора.
В операторах присваивания можно использовать все виды выражений, от простых значений, таких как числа, до переменных и функций.Поскольку сначала будут вычислены все выражения, а затем результат этой оценки будет использоваться в операторе присваивания.
Условные операторы
Что ж, оператор присваивания был довольно простым: возьмите значение правой части и сохраните его в левой части.
Но давайте немного уменьшим масштаб и подумаем о программах ПЛК. Программа ПЛК — это часть логики (я называю ее логикой ПЛК), поэтому она должна принимать некоторые решения. Вот почему мы используем ПЛК или любой другой контроллер.Принимать решения и действовать в соответствии с текущим состоянием.
Упрощенное: ПЛК будет смотреть на состояния всех входов и использовать вашу программу ПЛК, чтобы решить, какие выходы установить.
Итак, в вашей программе ПЛК вам нужен способ принятия решений. Это подводит нас к условным операторам.
Условные операторы используются именно для этого: Для принятия решений.
Есть два способа выполнения условных операторов в структурированном тексте: операторов IF и операторов CASE .
Операторы IF
Я думаю, что Билл Гейтс лучше объясняет оператор IF, чем я. По крайней мере, он может объяснить это чуть более чем за 1 минуту в этом замечательном видео с code.org. Вы можете пропустить это видео, если вы знакомы с операторами IF, хотя я бы рекомендовал вам его посмотреть.
Операторы IF — это решения с условиями.
Но даже несмотря на то, что IF-операторы довольно просты для понимания, вы все равно должны знать, как дать ПЛК условные операторы.Это возвращает нас к синтаксису.
Для операторов IF существует специальный синтаксис. Это означает, что вы должны написать его определенным образом, чтобы компилятор его понял. Поскольку так же, как точки с запятой используются для завершения операторов, существуют специальные ключевые слова для создания оператора IF.
Вот как выглядит синтаксис операторов IF в STL:
IF [логическое выражение] THEN <заявление>; ELSIF [логическое выражение] THEN <заявление>; ELSE <заявление>; END_IF;
Обратите внимание, что синтаксис операторов IF очень похож на обычный английский.Первая строка содержит два ключевых слова: IF и THEN. Между этими двумя ключевыми словами находится условие, которое является выражением. Но не просто выражение. Логическое выражение.
Логические и числовые выражения
Вы можете разделить выражения на две группы в зависимости от того, что они дают.
Логическое выражение оценивается как значение типа BOOL, ИСТИНА или ЛОЖЬ.
Вот пример логического выражения:
1 = 1
Это выражение оценивает или возвращает ИСТИНА.Логическое выражение также может выглядеть так:
1> 2
Но на этот раз логическое выражение будет иметь значение FALSE, поскольку 1 не больше 2.
Числовые выражения оцениваются как целое число или с плавающей запятой. номер.
Числовое выражение может выглядеть так же просто, как это:
13,2 + 19,8
Это выражение будет оценивать число с плавающей запятой 33,0 и, следовательно, является числовым выражением.
Логические выражения используются в операторах IF как условия.
ЕСЛИ логическое выражение оценивается как ИСТИНА, ТОГДА будут выполнены следующие операторы.
ПЛК будет выполнять операторы, следующие за ключевым словом THEN, только если выражение имеет значение ИСТИНА. Это проиллюстрировано следующим примером:
A: = 0; ЕСЛИ A = 0 ТО B: = 0; END_IF;
Строка номер 3 будет выполнена, только если A равно 0.В этом случае будет. Значение 0 присваивается переменной A в операторе прямо перед оператором IF.
Видите, что я здесь сделал?
В приведенном выше примере решение было принято в зависимости от значения переменной. Теперь, хотя это было довольно простое решение, мы уже можем воплотить его в реальном программировании ПЛК.
Допустим, вы хотите создать программу, которая устанавливает выход ПЛК в зависимости от состояния входа. С помощью простого оператора IF вы можете сделать это в структурированном тексте:
IF INPUT1 = TRUE THEN ВЫХОД1: = ИСТИНА; END_IF;
Хотя этот пример представляет собой всего лишь часть более крупной программы (переменная INPUT1 представляет вход, а OUTPUT1 — выход), он показывает, как можно принять решение о выходе ПЛК.Переменная OUTPUT1 будет установлена в значение TRUE, только если переменная INPUT1 имеет значение TRUE.
Поскольку обе переменные INPUT1 и OUTPUT1 относятся к типу BOOL, первая строка в операторе также может выглядеть так:
IF INPUT1 THEN
Если просто записать выражение как «INPUT1», все равно будет оцениваться как ИСТИНА. , когда переменная ИСТИНА.
Что еще, если нет?
На данный момент вы видели простой оператор IF, в котором операторы выполняются только в том случае, если выражение имеет значение ИСТИНА.Если это выражение оценивается как ЛОЖЬ, операторы просто не будут выполняться.
Но что, если ваша программа ПЛК требует нескольких условий?
Конечно, вы можете записать это как несколько отдельных операторов IF. Но в структурированном тексте есть больше вариантов для операторов IF.
Как и большинство других языков программирования, вы можете использовать ключевые слова ELSIF и ELSE для нескольких условий в одном операторе IF.
И ELSIF, и ELSE необязательны в операторах IF, но синтаксис выглядит следующим образом:
IF [логическое выражение] THEN <заявление>; ELSIF [логическое выражение] THEN <заявление>; ELSE <заявление>; END_IF;
Если логическое выражение в строке 1 — ЛОЖЬ, приведенные ниже операторы просто не будут выполнены.Вместо этого компилятор проверит логическое выражение после ключевого слова ELSIF.
Здесь это работает так же, как с ключевым словом IF: если логическое выражение после ключевого слова истинно, будут выполнены следующие операторы.
Наконец, ключевое слово ELSE . Он работает как опция по умолчанию для вашего оператора IF. Если все логические выражения IF и ELSIF оцениваются как FALSE, будут выполнены операторы после ключевого слова ELSE.
Как ПЛК будет выполнять операторы IF в структурированном тексте.
Объединение операторов для расширенных условий
Помимо создания нескольких условий, вы также можете расширить свои условия, чтобы включить несколько переменных. Вы можете комбинировать несколько выражений, как правило, с помощью логического оператора, чтобы получить более крупное выражение.
Что делать, если вы хотите, чтобы не только 1, но и 2 входа были ИСТИННЫ, прежде чем выход будет установлен. Выражение будет выглядеть так:
IF (INPUT1) AND (INPUT2) THEN ВЫХОД1: = ИСТИНА; END_IF;
Теперь выражение будет иметь значение ИСТИНА, только если INPUT1 и INPUT2 имеют значение ИСТИНА.
Операторы CASE
Второй способ принятия решений в структурированном тексте — это операторы CASE.
По сути, операторы CASE и операторы IF одинаковы. Но операторы CASE используют числовых выражений вместо логических выражений. Операторы CASE также имеют немного другой синтаксис, что делает их более подходящими для определенных целей.
Вот как синтаксис операторов CASE выглядит в структурированном тексте:
CASE [числовое выражение] OF результат1: <заявление>; resultN:; ELSE <заявление>; END_CASE;
В операторах CASE есть только одно выражение.Результат этого выражения затем используется, чтобы решить, какие операторы будут выполнены.
По умолчанию операторы CASE также содержат ключевое слово ELSE. Операторы после этого ключевого слова выполняются только в том случае, если ни один из результатов (или случаев) не совпадает с результатом числового выражения.
Вот очень простой пример:
PROGRAM_STEP: = 3; ПРИМЕР ПРОГРАММЫ_ШАГ ИЗ 1: PROGRAM_STEP: = PROGRAM_STEP + 1; 2: PROGRAM_STEP: = PROGRAM_STEP + 2; 3: PROGRAM_STEP: = PROGRAM_STEP + 3; ELSE PROGRAM_STEP: = PROGRAM_STEP + 10; END_CASE;
Хотя это очень простой пример (переменная имеет фиксированное значение), в нем показано, как принять решение в зависимости от результата числового выражения.В этом примере числовое выражение — это просто значение переменной 3. If может быть любым выражением, результатом которого является целое число или значение с плавающей запятой.
Итерация с повторяющимися циклами
Вероятно, одна из самых мощных функций структурированного текста — это возможность создавать циклы, которые повторяют строки кода.
Еще раз, Code.org сделал одно из лучших введений в повторяющиеся циклы. На этот раз основатель Facebook Марк Цукерберг использует чуть больше минуты, чтобы объяснить повторяющиеся циклы.
В отношении ПЛК циклы программирования могут использоваться для многих различных целей. У вас может быть функция или набор операторов, которые вы хотите выполнять определенное количество раз или до тех пор, пока что-то не остановит цикл.
В структурированном тексте вы найдете 3 различных типа повторяющихся циклов:
- FOR
- WHILE
- REPEAT
Общим для всех типов циклов является то, что они имеют условие для повторения или остановка цикла.Условие в циклах FOR и WHILE определяет, должен ли цикл повторяться или нет . Но для цикла REPEAT условием является условие ДО , и оно будет определять, должен ли цикл останавливаться или нет .
Циклы FOR
Первый цикл — это цикл FOR, который используется для повторения определенное количество раз. У циклов FOR есть и другие ключевые слова. TO, BY, DO и END_FOR.
Это синтаксис циклов FOR в структурированном тексте:
FOR count: = initial_value TO final_value BY приращение DO <заявление>; END_FOR;
На первый взгляд первая строка выглядит немного сложной, но это не так, если вы разделите ее на части:
FOR
Ключевое слово, с которого начинается оператор цикла FOR.
count: = initial_value
В этой операции присваивания вы устанавливаете начальное значение, от которого хотите вести подсчет. Счетчик — это имя переменной, а начальное_значение — это значение, с которого вы хотите начать отсчет.
TO
Ключевое слово перед значением, до которого выполняется подсчет.
final_value
Это значение, до которого вы хотите произвести подсчет. Поместите здесь 100, и ваш цикл будет считать до 100.
BY
Ключевые слова для использования настраиваемого инкрементного значения.
приращение
Значение, счет которого вы хотите увеличивать при каждом запуске цикла. Если вы установите приращение на 10 и счет на 100, цикл будет выполняться 10 раз.
DO
<заявление>;
END_FOR;
Последняя часть между ключевыми словами DO и END_FOR — это операторы, которые вы хотите выполнять каждый раз при запуске цикла. Эти операторы будут выполняться столько раз, сколько повторяются циклы.
Поскольку циклы FOR могут иметь только предустановленное количество времени, они будут повторяться, это то, для чего они используются.В программировании ПЛК это может быть что-то столь же простое, как предмет, который нужно красить / сушить четыре раза. Цикл FOR, который считает до четырех, здесь будет работать нормально.
Наконец, вы можете использовать оператор IF с ключевым словом EXIT , чтобы остановить цикл перед подсчетом. Вы можете добавить логическое условие, что если TRUE останавливает цикл.
IF [логическое выражение] THEN ВЫХОД; END_IF;
Циклы WHILE
Цикл while немного отличается от цикла FOR, потому что он используется для повторения цикла, пока некоторые условия истинны.Цикл WHILE будет повторяться до тех пор, пока логическое выражение имеет значение ИСТИНА.
Вот синтаксис циклов WHILE:
WHILE [логическое выражение] DO <заявление>; END_WHILE;
Между ключевыми словами WHILE и DO находится логическое выражение. Если это логическое выражение имеет значение ИСТИНА, все операторы до ключевого слова END_WHILE будут выполнены.
При достижении END_WHILE логическое выражение будет вычислено снова.Это будет повторяться снова и снова, пока выражение не перестанет принимать значение ИСТИНА. Но чтобы цикл остановился в какой-то момент, вам нужно изменить значение в логическом выражении. Только так логическое выражение может перейти от ИСТИНА к ЛОЖЬ.
Вот пример цикла WHILE в структурированном тексте:
counter: = 0; WHILE counter <10 DO счетчик: = счетчик + 1; machine_status: = counter * 10; END_WHILE;
Если вы посмотрите на третью строку, вы увидите, как цикл в конечном итоге перестанет повторяться.Логическое выражение использует переменную счетчика и проверяет, меньше ли ее значение или равно 10. Но поскольку значение счетчика установлено на 0 прямо перед циклом WHILE, логическое выражение будет ИСТИНА, если счетчик не будет изменен.
Это то, что происходит в строке 3. Это первая инструкция в цикле WHILE, а остальные инструкции выполняются каждый раз, когда цикл повторяется. В третьей строке значение переменной счетчика увеличивается на 1. Можно сказать, что значение приращения равно 1.
В приведенном выше примере цикл повторяется 10 раз. Когда значение count достигает 10, логическое выражение будет оценено как FALSE (потому что 10 не меньше 10), и цикл остановится.
Вы также можете использовать ключевое слово EXIT в цикле WHILE, чтобы остановить повторение цикла до того, как логическое выражение станет FALSE. Синтаксис представляет собой оператор IF с ключевым словом EXIT внутри. Поместите его где-нибудь между ключевыми словами DO и END_WHILE.
IF [логическое выражение] THEN ВЫХОД; END_IF;
Циклы REPEAT
Последний тип повторяющегося цикла в структурированном тексте — цикл REPEAT.Он работает противоположно циклу WHILE. Этот цикл перестанет повторяться, когда логическое выражение будет ИСТИНА.
В ST синтаксис циклов REPEAT выглядит следующим образом:
REPEAT <заявление>; UNTIL [логическое выражение] END_REPEAT;
Обратите внимание, что, поскольку логическое выражение в этом типе цикла находится после операторов, операторы всегда будут выполняться по крайней мере один раз. Это полезно, если вы хотите, чтобы действие произошло один раз, а затем, с условием, решите, должно ли это действие повториться снова.
Как и в случае с циклами WHILE, вы должны по ходу изменить значение в логическом выражении, чтобы цикл перестал повторяться. Это можно сделать путем увеличения значения переменной (для подсчета) или с помощью условного оператора, такого как оператор IF внутри цикла.
Программное обеспечение для программирования структурированного текста
Теперь, даже если вы подробно прочитали эту статью, вы только начали изучать структурированный текст. Что вам нужно сделать сейчас, так это погрузиться в грязь и начать использовать структурированный текст.
Вам следует написать несколько программ для ПЛК. Потому что это способ действительно изучить структурированный текст и овладеть языком программирования.
Beckhoff TwinCat 3
Одним из лучших программных продуктов для программирования ПЛК, если вы хотите изучить структурированный текст, является Beckhoff TwinCat 3. Программное обеспечение для программирования от Beckhoff полностью совместимо со всеми языками программирования ПЛК IEC 61131-3, включая Ladder. Диаграмма (LD) и структурированный текст (ST).
Для учащихся самым большим преимуществом TwinCat 3 является то, что в него включен симулятор.Вам не нужно покупать ПЛК, достаточно использовать soft PLC .
На YouTube есть бесплатная серия видеороликов от SquishyBrained. Вы должны следовать за ним! Он даже снял серию видео о своем 3D-принтере DIY. Это отличный видеоурок, который поможет вам начать программирование ПЛК со структурированным текстом в TwinCat 3.
Codesys
Возможно, вы слышали о Codesys раньше. Это программная среда с открытым исходным кодом для программирования ПЛК IEC 61131-3. Открытый исходный код просто означает, что его можно бесплатно скачать, что делает его идеальным для студентов.
Несмотря на то, что не так много хороших ресурсов о том, как использовать Codesys для начинающих, Брайан Хобби сделал несколько замечательных обучающих видео.
В первом видео показано, как создать новый проект в Codesys. В видео также включена небольшая лестничная логика.
Второе видео поможет вам программировать структурированный текст с помощью Codesys.
Заключение
Изучение нового языка программирования может быть довольно сложной задачей.Но новичкам следует всегда помнить об основных вещах:
- Обучение требует времени
Вы только начали. Дайте себе время, чтобы изучить язык (синтаксис, функции,…) - Практикуйтесь как можно больше
Постарайтесь сделать как можно больше программ и решений для ПЛК в структурированном тексте. - Учитесь на своих ошибках
Не огорчайтесь каждый раз, когда совершаете ошибку. Учитесь на этом и станьте лучшим программистом. - Продолжайте учиться
Никогда не прекращайте читать, смотреть учебные пособия и другие учебные материалы. - Поговорите с другими программистами ПЛК
И последнее, но не менее важное, это обсуждение на форумах и задание вопросов. Участвуйте и учитесь у других программистов ПЛК.
Я считаю, что последняя часть самая важная. Изучение опыта других людей может быть наиболее эффективным способом изучения не только языка программирования, но и того, как его использовать.
Присоединяйтесь к обсуждению ниже : Задайте свой первый вопрос о структурированном тексте и свяжитесь с другими программистами ПЛК.
Что вы узнали из этого руководства?
CoDeSys | STW Technic
CoDeSys
CoDeSys — это мощный инструмент разработки на базе Windows для управляющего программного обеспечения, основанный на стандарте IEC 61131-3. CoDeSys, первоначально разработанный немецкой компанией-разработчиком программного обеспечения 3S и настроенный STW, сочетает в себе мощь передовых языков программирования, таких как C, с простотой использования и высокоуровневым интерфейсом систем программирования ПЛК.Кроме того, сам CoDeSys может использоваться для запуска управляющего программного обеспечения для диагностики и отладки в реальном времени путем входа в контроллер через интерфейс CAN и запуска программы через этот интерфейс.
STW предоставляет несколько уникальных библиотек для среды CoDeSys. Эти библиотеки включают в себя все основные функции, необходимые для работы любого из наших продуктов, а также более мощные функции, такие как фильтрация и контуры обратной связи ПИД-регулятора для более сложных приложений.
CoDeSys разработан таким образом, что все пять языков IEC 61131 могут использоваться в одной программе.Эти пять языков:
Функциональная блок-схема:
Графический язык. Функции состоят из набора элементарных блоков между входными и выходными переменными, соединенными ориентированными линиями.
Список инструкций:
Текстовый язык низкого уровня на основе стека, напоминающий ассемблер.
Релейная логика:
Графический метод построения электрических логических схем. Программа на релейной логике похожа на схему для набора релейных цепей и полезна, потому что широкий спектр инженеров и техников может понять и использовать ее без особой дополнительной подготовки.
Последовательная функциональная схема:
Графический язык, используемый для программирования процессов, которые можно разбить на этапы.
Структурированный текст:
Текстовый язык высокого уровня с блочной структурой, напоминающий PASCAL или C. Программисты, имеющие опыт работы с этими языками, будут чувствовать себя очень комфортно, используя структурированный текст.
Дополнительная информация
% PDF-1.4 % 4083 0 объект > эндобдж xref 4083 334 0000000016 00000 н. 0000007055 00000 н. 0000007239 00000 н. 0000011844 00000 п. 0000012140 00000 п. 0000012227 00000 п. 0000012388 00000 п. 0000012479 00000 п. 0000012633 00000 п. 0000012696 00000 п. 0000012871 00000 п. 0000012929 00000 п. 0000013122 00000 п. 0000013289 00000 п. 0000013357 00000 п. 0000013452 00000 п. 0000013549 00000 п. 0000013719 00000 п. 0000013787 00000 п. 0000013893 00000 п. 0000013997 00000 п. 0000014185 00000 п. 0000014315 00000 п. 0000014447 00000 п. 0000014515 00000 п. 0000014641 00000 п. 0000014709 00000 п. 0000014891 00000 п. 0000014949 00000 п. 0000015070 00000 п. 0000015181 00000 п. 0000015362 00000 п. 0000015482 00000 п. 0000015594 00000 п. 0000015652 00000 п. 0000015802 00000 п. 0000015860 00000 п. 0000016035 00000 п. 0000016093 00000 п. 0000016210 00000 п. 0000016366 00000 п. 0000016543 00000 п. 0000016601 00000 п. 0000016709 00000 п. 0000016818 00000 п. 0000016992 00000 н. 0000017050 00000 п. 0000017148 00000 п. 0000017246 00000 п. 0000017304 00000 п. 0000017418 00000 п. 0000017532 00000 п. 0000017590 00000 п. 0000017648 00000 п. 0000017706 00000 п. 0000017764 00000 п. 0000017822 00000 п. 0000017880 00000 п. 0000018048 00000 п. 0000018158 00000 п. 0000018257 00000 п. 0000018374 00000 п. 0000018432 00000 п. 0000018549 00000 п. 0000018607 00000 п. 0000018665 00000 п. 0000018799 00000 п. 0000018857 00000 п. 0000018915 00000 п. 0000018973 00000 п. 0000019104 00000 п. 0000019209 00000 п. 0000019327 00000 п. 0000019458 00000 п. 0000019516 00000 п. 0000019644 00000 п. 0000019702 00000 п. 0000019822 00000 п. 0000019880 00000 п. 0000020018 00000 н. 0000020076 00000 п. 0000020203 00000 п. 0000020261 00000 п. 0000020319 00000 п. 0000020377 00000 п. 0000020435 00000 п. 0000020493 00000 п. 0000020551 00000 п. 0000020609 00000 п. 0000020667 00000 п. 0000020725 00000 п. 0000020880 00000 п. 0000020948 00000 н. 0000021090 00000 п. 0000021158 00000 п. 0000021226 00000 п. 0000021294 00000 п. 0000021362 00000 п. 0000021430 00000 н. 0000021498 00000 п. 0000021566 00000 п. 0000021624 00000 н. 0000021735 00000 п. 0000021843 00000 п. 0000021966 00000 п. 0000022024 00000 н. 0000022148 00000 п. 0000022206 00000 п. 0000022330 00000 п. 0000022388 00000 п. 0000022516 00000 п. 0000022574 00000 п. 0000022632 00000 п. 0000022769 00000 п. 0000022827 00000 н. 0000022955 00000 п. 0000023081 00000 п. 0000023139 00000 п. 0000023197 00000 п. 0000023255 00000 п. 0000023313 00000 п. 0000023479 00000 п. 0000023616 00000 п. 0000023749 00000 п. 0000023807 00000 п. 0000023865 00000 п. 0000023923 00000 п. 0000024071 00000 п. 0000024183 00000 п. 0000024241 00000 п. 0000024299 00000 п. 0000024458 00000 п. 0000024558 00000 п. 0000024698 00000 п. 0000024854 00000 п. 0000024912 00000 п. 0000025074 00000 п. 0000025132 00000 п. 0000025190 00000 п. 0000025248 00000 п. 0000025306 00000 п. 0000025469 00000 п. 0000025581 00000 п. 0000025717 00000 п. 0000025775 00000 п. 0000025933 00000 п. 0000026050 00000 п. 0000026176 00000 п. 0000026305 00000 п. 0000026363 00000 п. 0000026493 00000 п. 0000026551 00000 п. 0000026678 00000 п. 0000026736 00000 п. 0000026900 00000 п. 0000026958 00000 п. 0000027016 00000 п. 0000027074 00000 п. 0000027132 00000 н. 0000027297 00000 н. 0000027439 00000 п. 0000027556 00000 п. 0000027716 00000 н. 0000027774 00000 п. 0000027913 00000 н. 0000027971 00000 п. 0000028029 00000 п. 0000028087 00000 п. 0000028145 00000 п. 0000028309 00000 п. 0000028432 00000 п. 0000028557 00000 п. 0000028697 00000 п. 0000028755 00000 п. 0000028885 00000 п. 0000028943 00000 п. 0000029084 00000 п. 0000029142 00000 п. 0000029279 00000 н. 0000029337 00000 п. 0000029395 00000 п. 0000029453 00000 п. 0000029511 00000 п. 0000029672 00000 н. 0000029770 00000 п. 0000029828 00000 н. 0000029959 00000 н. 0000030017 00000 п. 0000030130 00000 п. 0000030260 00000 п. 0000030393 00000 п. 0000030451 00000 п. 0000030509 00000 п. 0000030567 00000 п. 0000030691 00000 п. 0000030749 00000 п. 0000030807 00000 п. 0000030970 00000 п. 0000031028 00000 п. 0000031193 00000 п. 0000031288 00000 п. 0000031346 00000 п. 0000031455 00000 п. 0000031513 00000 п. 0000031638 00000 п. 0000031761 00000 п. 0000031910 00000 п. 0000031968 00000 п. 0000032103 00000 п. 0000032161 00000 п. 0000032299 00000 н. 0000032357 00000 п. 0000032488 00000 н. 0000032546 00000 п. 0000032684 00000 п. 0000032742 00000 п. 0000032880 00000 п. 0000032938 00000 п. 0000033086 00000 п. 0000033144 00000 п. 0000033202 00000 п. 0000033260 00000 п. 0000033381 00000 п. 0000033439 00000 п. 0000033497 00000 п. 0000033700 00000 п. 0000033758 00000 п. 0000033867 00000 п. 0000033973 00000 п. 0000034104 00000 п. 0000034162 00000 п. 0000034220 00000 п. 0000034278 00000 п. 0000034336 00000 п. 0000034394 00000 п. 0000034564 00000 п. 0000034678 00000 п. 0000034831 00000 н. 0000034889 00000 п. 0000035055 00000 п. 0000035180 00000 п. 0000035316 00000 п. 0000035462 00000 п. 0000035520 00000 п. 0000035645 00000 п. 0000035703 00000 п. 0000035761 00000 п. 0000035819 00000 п. 0000035943 00000 п. 0000036001 00000 п. 0000036121 00000 п. 0000036243 00000 п. 0000036301 00000 п. 0000036359 00000 п. 0000036417 00000 п. 0000036475 00000 п. 0000036532 00000 п. 0000036702 00000 п. 0000036807 00000 п. 0000036919 00000 п. 0000037038 00000 п. 0000037096 00000 п. 0000037226 00000 п. 0000037284 00000 п. 0000037415 00000 п. 0000037473 00000 п. 0000037610 00000 п. 0000037668 00000 п. 0000037725 00000 п. 0000037891 00000 п. 0000038012 00000 п. 0000038069 00000 п. 0000038169 00000 п. 0000038226 00000 п. 0000038283 00000 п. 0000038340 00000 п. 0000038397 00000 п. 0000038566 00000 п. 0000038689 00000 п. 0000038813 00000 п. 0000038870 00000 п. 0000038927 00000 п. 0000038983 00000 п. 0000039091 00000 п. 0000039194 00000 п. 0000039327 00000 п. 0000039384 00000 п. 0000039441 00000 п. 0000039600 00000 п. 0000039657 00000 п. 0000039770 00000 п. 0000039882 00000 п. 0000040033 00000 п. 0000040090 00000 н. 0000040147 00000 п. 0000040285 00000 п. 0000040424 00000 п. 0000040481 00000 п. 0000040609 00000 п. 0000040666 00000 п. 0000040723 00000 п. 0000040780 00000 п. 0000040836 00000 п. 0000040892 00000 п. 0000040994 00000 п. 0000041128 00000 п. 0000041265 00000 п. 0000041321 00000 п. 0000041377 00000 п. 0000041433 00000 п. 0000041723 00000 п. 0000042817 00000 п. 0000043099 00000 п. 0000044215 00000 п. 0000045305 00000 п. 0000045578 00000 п. 0000045602 00000 п. 0000046747 00000 п. 0000046770 00000 п. 0000047623 00000 п. 0000047646 00000 п. 0000048556 00000 п. 0000048579 00000 н. 0000049443 00000 п. 0000049466 00000 п. 0000050420 00000 п. 0000050444 00000 п. 0000051556 00000 п. 0000051579 00000 п. 0000052653 00000 п. 0000052676 00000 п. 0000052727 00000 н. 0000007395 00000 н. 0000011820 00000 п. трейлер ] >> startxref 0 %% EOF 4084 0 объект > >> эндобдж 4085 0 объект `Dz — # _ m_} g) / U (D
Что такое CoDeSys | DAJO Solutions
Что такое CODESYS?
CODESYS — это язык программирования с открытым исходным кодом, используемый в физических и промышленных вычислениях.Его соответствие промышленному стандарту IEC 61131-3 означает, что он используется сотнями разработчиков аппаратного обеспечения по всему миру. Это полноценная среда разработки для ПЛК и ПК, которая в настоящее время имеет более четырех миллионов активных лицензий по всему миру.
Что означает CoDeSys?
CoDeSys означает Co ntrolled De velopment Sys tem. Хотя недавно аббревиатура CoDeSys была упразднена, и теперь система называется просто CODESYS.
Откуда это?
CODESYS был разработан немецкой компанией-разработчиком программного обеспечения 3S-Smart Software Solutions из Кемптена. Первая версия CoDeSys была выпущена в 1994 году, хотя эта версия больше не поддерживается. Версия 2.3 CODESYS будет поддерживаться до конца 2019 года. В настоящее время пользователи также могут выбирать из версий 3 и 3.5. CODESYS. Лицензии бесплатны и могут быть установлены без ограничений на законных основаниях без защиты от копирования на рабочих станциях.
CODESYS Языки:
CODESYS содержит интегрированную систему визуализации, уникальный инструмент, поддерживающий разработку и отладку кода.Также следует отметить, что все приложения контроллера программирования построены в соответствии с международным промышленным стандартом: IEC 61131-3
.CODESYS использует пять языков программирования для поддержки приложений. два из них — текстовые редакторы, остальные три — графические редакторы.
В состав текстовых редакторов входят:
- Структурированный текст (ST): , который похож на языки программирования, такие как PASCAL или C.
- Списки инструкций (IL): Низкоуровневый язык программирования, очень похожий на ассемблер.
Графический редактор состоит из трех блоков:
- Релейные диаграммы (LD) , которые показывают графическое представление элементов схемы, таких как переключатели, катушки и двигатели.
- Схемы функциональных блоков (FBD) Показывает функции как блоки с входными и выходными соединениями.
- Последовательные функциональные схемы (SFC) Поддержка координации крупномасштабных задач в более мелкие процессы.
Дополнительный функционал
Схема непрерывных функций (CFC)
Это еще один графический редактор в CoDeSys, не входящий в стандартный протокол IEC.Его можно рассматривать как расширение редактора функциональных блок-схем (FBD) . Одним из ограничений FBD является то, что соединения устанавливаются приложением автоматически. Однако в CFC соединения рисуются программистом вручную. Это позволяет программисту свободно размещать блоки, поэтому петли обратной связи могут быть созданы без необходимости использования промежуточных переменных.
CODESYS также имеет встроенное моделирование ПЛК и встроенный HMI (человеко-машинный интерфейс), возможность . Это снижает потребность в дополнительных приложениях.
XSoft — CODESYS версия 3.5
Это версия Eaton среды программирования CODESYS, которая используется во всей линейке контроллеров Eaton XV и XC.
Другие статьи, связанные с Что такое CODESYS:
Программирование Raspberry Pi с помощью CODESYS: 8 шагов
Теперь для этого шага нам потребуются дополнительные детали, как описано в шаге 1.
Подключение системы:
— Сдвиньте промышленный ввод-вывод модули вместе. (см. рисунок)
— Подключите промышленный модуль ввода-вывода к источнику питания 24 В.(см. рисунок) (Все провода, которые я протягиваю, просто соединяют цифровые выходы с цифровыми входами для тестирования)
— Включите IO.
Нам также нужно будет подключить Pi немного иначе. Вам нужно будет подключить Pi к сетевому подключению через адаптер USB-Ethernet. Помните, что это, вероятно, даст нам IP-адрес, отличный от предыдущего, и появится рядом с устройством «eth2» на Pi при использовании команды «ifconfig».
— Подключите Pi к вашей сети через адаптер с помощью одного кабеля Ethernet.
— Подключите IO (используя верхний порт) к порту Ethernet Pi, используя другой кабель Ethernet.
— Включите Pi.
Прежде чем мы сможем подключить ввод-вывод, нам нужно убедиться, что у вас есть XML-файлы описания устройства от производителя промышленного ввода-вывода, и они добавлены в CODESYS.
— Если вы используете Beckhoff, файлы XML можно найти здесь:
http: //www.beckhoff.co.uk/english.asp? Download / elc …
— Загрузите и распакуйте zip-файл где-нибудь безопасный.
— Откройте CODESYS, на панели инструментов выберите Инструменты> Репозиторий устройств …
— Нажмите «Установить …»
— Перейдите в папку, которую вы только что разархивировали, выберите XML-файл «EKxxxx» и нажмите «Открыть», CODESYS автоматически установит устройство.
— Повторите вышеуказанные 2 шага для всех других устройств, которые вы принесли, в моем случае для EL1008 и EL2008 я устанавливаю «EL1xxx» и «EL2xxx».
Теперь для подключения к промышленному вводу-выводу с помощью CODESYS:
— Запустите новый проект в CODESYS и подключитесь к Pi так же, как показано на шаге 3.
— Щелкните правой кнопкой мыши «Устройство» в дереве устройств и выберите «Добавить устройство …».
— В новом окне (см. Рисунок) выберите «Мастер EtherCAT» и нажмите «Добавить устройство».
— Закройте окно.
— Щелкните правой кнопкой мыши «EtherCat_Master» в дереве устройств и выберите «Добавить устройство …».
— Выберите «EK1100» из EtherCat> Slave> Beckhoff Automation System Couplers и нажмите «Добавить устройство …».
— Закройте окно.
— Щелкните правой кнопкой мыши «EK1100» в дереве устройств и выберите «Добавить устройство»… «.
— Выберите первый из ваших модулей ввода-вывода, в моем случае» EL1008 «из EtherCat> Slave> Beckhoff Automation Digital Input Terminals и нажмите» Добавить устройство … «.
— Повторите вышеуказанный шаг для все дополнительные вводы-выводы в порядке их подключения к системному соединителю.
Существует функция сканирования, которую вы можете использовать для автоматического добавления всех вводов-выводов, но я не буду описывать это в этой инструкции, так как хорошо понять, как CODESYS создает IO.
Теперь нам нужно будет узнать аппаратный (MAC) адрес порта Ethernet Pi, чтобы сообщить CODESYS, где искать IO, для этого подключите Pi к монитору или SSH и используйте команду ifconfig «в терминале.Вы ищете код рядом с HWaddr из порта eth0 (см. Рисунок).
Когда у вас есть адрес, нам нужно добавить его в CODESYS:
— В дереве устройств дважды щелкните «EtherCAT_Master».
— Введите адрес оборудования, указанный ранее, в текстовое поле ввода «Адрес источника (MAC)».
Все оборудование настроено, и теперь мы готовы создать нашу первую программу для управления промышленным вводом-выводом.
— Дважды щелкните «PLC_PRG (PRG)» в дереве устройств.
— Теперь скопируйте текст с моего снимка экрана (я приложил документ .txt, чтобы упростить задачу) в правильные окна, отмечая, что верхнее окно предназначено для объявления переменных, а нижнее — для кода. По сути, это процедура мигания, основанная на использовании двух таймеров для мигания светодиода выхода 1 устройства Beckhoff IO.
Теперь нам нужно связать нашу переменную «Output1» с нашим Beckhoff IO, для этого:
— Дважды щелкните «EL2008» в дереве устройств.
— Перейдите на вкладку «EtherCAT I / O Mapping».
— Дважды щелкните поле первой переменной. (см. рисунок)
— Щелкните по «…», которое теперь появилось в поле. (см. рисунок)
— Теперь нам нужно выбрать переменную Output1, чтобы найти ее, выполните Application> PLC_PRG, затем дважды щелкните «Output1». Этот вывод теперь отображается на эту переменную.
Чтобы запустить программу:
— Нажмите «F11» на клавиатуре, это построит / скомпилирует код. Также находится в разделе «Сборка» на панели инструментов.
— После компиляции кода нажмите «Alt + F8» на клавиатуре, чтобы войти в Pi (или в ПЛК, чтобы дать ему правильное имя).Также находится в разделе «Интернет» на панели инструментов.
— Нажмите «Да» во всплывающем окне, чтобы загрузить программу.
— После загрузки программы нажмите «F5», чтобы запустить программу. Также находится в разделе «Отладка» на панели инструментов.
Теперь вы должны увидеть, как светодиод выхода 1 на терминале Beckhoff будет мигать с интервалом в 1 секунду. Чтобы увидеть, как работает код, дважды щелкните «PLC_PRG» в дереве устройств, и вы должны увидеть прямую трансляцию состояния переменных.
Чтобы остановить код, нажмите «Shift + F8» на клавиатуре.Также находится в разделе «Отладка» на панели инструментов.
Связывание входов от EL1008 работает таким же образом. Попробуйте подключить выход 1 к входу 1 и добавить переменную, чтобы увидеть, как переменная также переключается между ложью и истиной.
Теперь вы можете управлять вводом-выводом промышленного уровня с помощью Raspberry Pi, подумайте о возможностях.
Некоторые примеры могут включать использование аналоговых входов для мониторинга различных датчиков, выходов ШИМ для управления двигателями и т. Д.
Если у вас возникнут какие-либо проблемы, я добавил свой программный файл Codesys в Instructable для сравнения.
Использование ПЛК Codesys soft — документация p-net
Мы запускаем среду выполнения Codesys («COntroller DEvelopment SYStem») на Raspberry Pi, и настройка выполняется с помощью программного обеспечения на базе Windows (Codesys Development Система).
Загрузка и установка Codesys Development System на ПК с Windows
Программу можно скачать с https://store.codesys.com/codesys.html Доступна пробная версия. Требуется регистрация.
Скачать «CODESYS Development System V3».Имя файла, например «CODESYS 64 3.5.15.30.exe». Установите его на компьютер с Windows, дважды щелкнув значок.
Также скачайте «CODESYS Control для Raspberry Pi SL».
Установите его, дважды щелкнув файл .package
.
После установки перезапустите программу.
Если вы используете пробную версию, вам необходимо перезапустить среду выполнения Codesys на Raspberry Pi каждые два часа.
Просканируйте сеть, чтобы найти Raspberry Pi, и установите на него среду выполнения Codesys
Убедитесь, что ваш компьютер с Windows и Raspberry Pi подключены к та же локальная сеть.
В Codesys в Windows используйте меню Инструменты -> «Обновить Raspberry Pi». Нажмите «Сканировать», чтобы найти IP-адрес.
Нажмите «Установить» для пакета Codesys Runtime. Используйте «стандартную» среду выполнения во всплывающем окне.
Создать проект в Codesys
На компьютере с Windows сначала создайте подходящую область проекта на жестком диске. привод. Например Documents / Codesys / Democontroller.
В меню Codesys создайте новый проект. Используйте недавно созданный каталог и «Стандартный проект».Назовите его «Демоконтроллер». Выберите устройство «Codesys Control for Raspberry Pi SL» и выберите для программирования в «Структурированный текст (СТ)»
Важно, чтобы вы выбрали ту же версию среды выполнения (одно ядро = «SL» или multicore = «SL MC») как во время выполнения, так и в проекте, в противном случае контроллер не будет найден, когда вы попытаетесь его использовать.
Убедитесь, что «Устройство» в левом меню отображается как «Codesys Control for Raspberry Pi SL ». Дважды щелкните «Устройство». Перейдите на вкладку «Сканировать сеть», и выберите Raspberry Pi.Маркер на изображении должен стать зеленым. Использовать вкладки «Устройство» и «Отправить эхо-сервис» для проверки связи.
В меню «Инструменты» Codesys выберите «Репозиторий устройства». Нажмите «Установить» и выберите файл GSDML на жестком диске.
На «Устройстве (CODESY Control для Raspberry Pi SL)» на левой панели, щелкните правой кнопкой мыши и выберите Добавить устройство. Используйте «Ethernet-адаптер», «Ethernet».
В «Ethernet» щелкните правой кнопкой мыши и выберите «Добавить устройство».Используйте «Profinet IO master», «PN-Controller».
Щелкните правой кнопкой мыши «PN_Controller» и выберите «Добавить устройство». Воспользуйтесь «ДЕМО-устройством rt-labs».
На «rt_labs_DEMO_device» щелкните правой кнопкой мыши и выберите «Добавить устройство». Используйте «8 бит I 8 бит 0».
Дважды щелкните узел «Ethernet» в левом меню. Выберите интерфейс «eth0». IP-адрес будет соответственно обновлен.
Дважды щелкните узел «PN_controller» в левом меню. Отрегулируйте диапазон IP используя «Первый IP» и «Последний IP», чтобы иметь существующий IP-адрес вашего IO-устройство (например, ноутбук с Linux или встроенная плата Linux, на которой sample_app).
Дважды щелкните узел «rt_labs_DEMO_device» в левом меню. Установить IP-адрес на существующий адрес вашего IO-устройства.
Язык программирования структурированного текста для ПЛК
Structured Text (ST) — это текстовый язык программирования для ПЛК. Об этом читайте на https://en.wikipedia.org/wiki/Structured_text
.Учебное пособие можно найти здесь: https://www.plcacademy.com/structured-text-tutorial/
Создать приложение контроллера
Введите программу в «PLC_PRG».
Раздел переменных:
ПРОГРАММА PLC_PRG VAR in_pin_button_LED: BOOL; out_pin_LED: BOOL; in_pin_button_LED_previous: BOOL; мигает: BOOL; состояние_ осциллятора: BOOL: = FALSE; осциллятор_циклы: UINT: = 0; END_VAR
Раздел программы:
осциллятор_циклы: = осциллятор_циклы + 1; ЕСЛИ осциллятор_циклов> 200 ТО осциллятор_циклы: = 0; состояние_ осциллятора: = НЕ состояние_ осциллятора; END_IF ЕСЛИ in_pin_button_LED = ИСТИНА, ТО ЕСЛИ in_pin_button_LED_previous = ЛОЖЬ, ТО мигает: = НЕ мигает; END_IF out_pin_LED: = ИСТИНА; ELSIF мигает = ИСТИНА ЗАТЕМ out_pin_LED: = состояние_ осциллятора; ЕЩЕ out_pin_LED: = ЛОЖЬ; END_IF in_pin_button_LED_previous: = in_pin_button_LED;
На узле «_8_bits_I_8_bits_O» щелкните правой кнопкой мыши и выберите «Редактировать сопоставление ввода-вывода».Дважды щелкните строку, которую вы хотите изменить. Сопоставьте «Входной бит 7» с «in_pin_button_LED» и «Выходной бит 7» с «out_pin_LED»
В «Application -> MainTask» выберите «Cyclic» с 4 мс.
В «Приложение -> Profinet_CommunicationTask» выберите «Циклический» с 10 мс. Использовать приоритет 30.
Перенести приложение контроллера на (контроллер) Raspberry Pi
В верхнем меню используйте Build -> Build.
Перенесите приложение на Raspberry Pi с помощью верхнего меню Онлайн -> Войти.Во всплывающем окне нажмите «Да».
В верхнем меню используйте Debug -> Start
Вы можете следить за журналом контроллера, используя главное меню Инструменты -> «Обновить». Raspberry Pi». Нажмите кнопку «Информация о системе» и посмотрите «Информация о времени выполнения». текстовое окно. Он покажет сообщение об ошибке, если не сможет найти IO-устройство на сеть.
Используйте Wireshark, чтобы убедиться, что контроллер отправляет пакеты LLDP каждые 5 секунд. Каждые 15 секунд он будет отправлять ARP-пакет, чтобы запросить (первое?) IO-устройство. IP-адрес и пакет PN-DCP для запроса IO-устройства с именем «RT-labs-dev».
Запуск приложения
См. Страницу «Учебное пособие».
После настройки Codesys softplc, работающего на Raspberry Pi, вы можете выключить персональный компьютер (запустив настольное приложение Codesys) используется для его настройки. Помните, что вам необходимо выключать и снова включать Raspberry Pi, запускающий softplc, каждые два часа, если используется пробная версия.
Остающийся текст на этой странице посвящен более сложным темам и не является обязательным. для запуска примера приложения в учебнике.
Отрегулируйте настройки синхронизации ПЛК
Можно настроить время цикла, которое использует IO-контроллер (PLC). для циклической передачи данных с IO-устройством.
В левом меню дважды щелкните «rt_labs_DEMO_device» и откройте «Общие» таб. В разделе «Связь» показаны часы отправки в миллисекундах, как считано. из файла GSDML. Используя «Коэффициент уменьшения», вы можете замедлить связи, умножив время цикла на коэффициент, указанный в падать.
Также возможно увеличить время сторожевого таймера, по истечении которого ПЛК установит сигнализация об отсутствии входящих циклических данных. Сторожевой таймер также отключит связь и инициировать последующий перезапуск связи.
В случае возникновения проблем, значительно увеличьте значение коэффициента уменьшения (и тайм-аута), а затем постепенно уменьшайте его, чтобы найти наименьшее полезное значение.
Запись и чтение параметров IO-устройства
Параметры для различных субмодулей записываются как часть обычного запуска.
Чтобы вручную запустить отправку параметров через Codesys, дважды щелкните значок _8_bits_I_8_bits_O устройство в левом меню. Используйте вкладку Общие, а Часть страницы настроек. Щелкните правой кнопкой мыши параметр, который вы хотите отправить, и выберите «Записать на устройство».
Аналогичным образом можно прочитать параметр.
При нажатии значка «Записать все значения» отправляется один запрос на запись для каждого параметр.
Чтобы изменить значение параметра в графическом интерфейсе Codesys, вам необходимо сначала перейти не в сети.
Установка статуса производителя вывода (IOPS)
Обычно Codesys устанавливает выходной PS на ХОРОШО (0x80 = 128) во время работы. Установка флажка «Выходной PS» на вкладке «IOxS» на устройстве ввода-вывода Profinet. устанавливает значение ПЛОХО (0).
Отображение ошибок
Щелкните IO-устройство в древовидной структуре в левой части экрана. Используйте вкладку «Журнал» для отображения ошибок.
Отображение аварийных сигналов, отправленных с устройства ввода-вывода
Входящие технологические и диагностические сигналы тревоги появляются в нескольких местах настольного приложения Codesys.
Codesys Raspberry Pi: на вкладке «Журнал» отображаются аварийные сигналы процесса и диагностики.
PN_Controller: на вкладке «Журнал» отображаются аварийные сигналы процесса и диагностики.
Устройство ввода-вывода: на вкладке «Журнал» отображаются аварийные сигналы процесса и диагностики. На вкладке «Статус» отображаются аварийные сигналы, относящиеся к встроенным (DAP) модулям.
Вставлен модуль в устройство ввода-вывода: аварийные сигналы процесса и диагностики отображаются на вкладке «Состояние».
Состояние подключения
Перейдите на страницу устройства ввода-вывода Profinet и просмотрите вкладку «Объекты PNIO IEC».Расширять самый верхний ряд. Показаны состояния этих логических полей:
xRunning: Периодические данные отправляются
xBusy: Контроллер пытается подключиться к IO-устройству
xError: Ошибка подключения к устройству ввода-вывода
Если соединение с IO-устройством вообще отсутствует, состояние изменится на xBusy из xError каждые 5 секунд.
Изменить IP-адрес IO-устройства
Измените IP-адрес, дважды щелкнув узел «rt_labs_DEMO_device» в левом меню на вкладке «Общие».Установите новое значение IP-адреса.
IO-контроллер отправит новый IP-адрес в сообщении «DCP Set» на IO-устройство с заданным именем станции. Затем он будет использовать сообщения ARP для устройство ввода-вывода, чтобы найти его MAC-адрес и обнаружить конфликты IP-адресов.
Сканирование устройств, назначение IP-адреса, сброс устройств и изменение имени станции
Скан
В левом боковом меню щелкните правой кнопкой мыши PN_Controller и выберите «Сканировать устройств ». Появятся работающие IO-устройства, и можно увидеть, какие модули вставлены в какой слот.
Это реализовано в Codesys путем отправки DCP «Запрос идентификации, все». сообщение от IO-контроллера. Это работает также, если в левом иерархическом меню нет загруженных устройств ввода-вывода. Устройство ввода-вывода ответит сообщением DCP «Ident OK». Затем IO-контроллер выполнит «неявный запрос чтения» для «APIData», на котором устройство ввода-вывода отвечает поддерживаемыми API. Аналогичный запрос на «RealIdentificationData для одного API» выполняется IO-контроллером, на котором IO-устройство отвечает, какие модули (и субмодули) в какие слоты вставлены (и подслоты).
Заводские настройки
Чтобы восстановить заводские настройки устройства, выберите его в списке просканированных устройств и нажмите кнопку «сброс».
При сбросе настроек к заводским настройкам IO-контроллер отправляет сообщение DCP «Установить запрос». с подопцией «Сбросить заводские настройки». После отправки ответа IO-устройство выполнит сброс настроек, а также отправит сообщение LLDP с новые ценности. Затем IO-контроллер отправляет «Идентификационный запрос, все», на который IO-устройство отвечает.
Установить имя и IP
Чтобы изменить имя или IP-адрес станции, измените соответствующие поля. в списке просканированных устройств и нажмите «Установить имя и IP-адрес».
IO-контроллер отправляет сообщение DCP «Установить запрос». с подопциями «Имя станции» и «Параметр IP». После отправки ответ, IO-устройство изменит IP-адрес и имя станции. Так и будет также отправьте сообщение LLDP с новыми значениями. Тогда IO-контроллер отправляет «Ident request, all», на который IO-устройство отвечает.
Светодиод вспышки
Есть возможность мигать светодиодом на IO-устройстве. Выберите свое устройство в список просканированных устройств и нажмите кнопку «Мигающий светодиод».Кнопка остается активным, пока вы не нажмете его снова.
Мигание светодиода осуществляется путем отправки DCP-сообщения «Установить запрос» с подопцией. «Сигнал» один раз в 5 секунд, пока соответствующая кнопка активирована.
Данные по идентификации и техническому обслуживанию (I&M)
Для считывания данных идентификации и обслуживания (I&M) устройство должно присутствовать как IO-устройство, подключенное к IO-контроллеру в левом боковом меню. Выберите устройство в списке просканированных устройств и нажмите кнопку «I&M».
Чтение данных I&M выполняется контроллером ввода-вывода путем отправки четырех сообщений «Неявное чтение». запросить сообщения DCP, по одному для каждого из I & M0 — I & M3.
При записи данных I&M из Codesys он отправляет соединение, запись и освобождение.
Включение проверки имени одноранговой станции и идентификатора порта
Устройство ввода-вывода можно проверить, подключено ли оно к правильный сосед (одноранговый узел), проверив его имя станции и идентификатор порта (как отправлено в кадрах LLDP соседом).
Дважды щелкните узел «rt_labs_DEMO_device» в левом меню. О «опциях» На вкладке в появившемся окне используйте поля «Peer station» и «port». Это кажется возможным выбрать названия станций только с других устройств или контроллеров уже имеется в проекте.
Во время запуска ПЛК отправляет заданные значения на IO-Device через написать команду. Если правильный сосед отсутствует, будет отправлен сигнал тревоги. устройством ввода-вывода к ПЛК.
CoDeSys | Руководство по ПЛК
CoDeSys — это аббревиатура от Controller Development System.Это программа разработки, которая позволяет пользователю создавать визуализации операций и процессов приложений. CoDeSys содержит уникальную и очень полезную интегрированную систему визуализации. Его приложения контроллеров программирования построены в соответствии с международными промышленными стандартами. Программа
CodeSys проста в установке и находится в свободном доступе на сайте компании.
Это программное обеспечение позволяет оператору рисовать наглядную диаграмму данных контроллера, а также легко наблюдать и оценивать производительность.Никаких дополнительных инструментов для этого программного обеспечения не требуется. Руководство поставляется с программным обеспечением, которое содержит всю информацию и имеет интегрированную визуальную программу.
Кредит разработки CoDeSys принадлежит компании-разработчику программного обеспечения, расположенной в Германии, и ее последняя версия была выпущена компанией в 1994 году. В CoDeSys используются пять языков программирования, которые позволяют программировать различные приложения.
Пять языков программирования программного обеспечения CoDeSys включают два текстовых редактора и три графических редактора, которые подробно описаны в стандартах IEC.Текстовые редакторы состоят из списка инструкций, который является типом языка программирования, и теста структуры, который имеет аналогичное программирование, как PASCAL или C.
Графический редактор имеет три модуля: релейную диаграмму (LD), функциональную блок-схему (FBD,) и последовательную функциональную диаграмму (SFC). Пользователь может комбинировать контакты и катушки с использованием LD и FBD, что обеспечит простоту быстрого программирования аналоговых и логических выражений. Thridly SFC позволяет пользователю удобно программировать последовательные процессы приложения.
Функциональная схема CoDeSys
Помимо этих пяти, в CoDeSys есть еще один дополнительный графический редактор, который не включен в стандартный протокол IEC, и называется он функциональной схемой продолжения (CFC). Его можно рассматривать как расширение редактора функциональных блок-схем. В FBD соединения устанавливаются автоматически операторами, но в CFC они должны быть нарисованы вручную программистом.