Подробности об языке программирования на 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 позволяет выполнить различные группы выражений в зависимости от условий, выраженных логическими выражениями.
1 2 3 4 5 6 7 8 | PROGRAM PLC_PRG VAR in:BOOL; out:INT; END_VAR IF in = TRUE THEN out:=1; ELSE out:=2; END_IF; |
Оператор множественного выбора 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 после тела цикла.
1 2 3 4 5 6 7 8 9 10 11 | 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 |
1 2 3 4 5 6 7 8 9 10 11 12 | 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 обеспечивает заданное количество повторений группы выражений.
1 2 3 4 5 6 7 8 9 10 | 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-массивы и циклы.
Использование циклов и массив облегчают жизнь программисту и увеличивает читабельность кода. Циклы очень удобны при использовании сложных и ресурсоёмких функций, таких как ПИД-регуляторы, опрос аналоговых входов, связь между ПЛК.
На этом я с вами прощаюсь, дорогие друзья, пишите в комментариях, подписывайтесь, рассказывайте друзьям. До встречи в следующих статьях.
С уважением, Гридин Семён.
Добрый день, Семён.
Внесу немного своего имхо в вашу статью.
ST вовсе не похож на СИ, он заимствовал синтаксис от PASCAL.
—
«Хочу обратить внимание, этот элемент практически схож во многих си-подобных языках (Питон, Ардуино IDE, СИ# т.д.)»
Если вы говорите о языках, то Ардуино IDE надо отсюда убрать, потому что это IDE, и кстати пишется там на C++.
—
«Использование циклов и массив облегчают жизнь программисту и увеличивает читабельность кода. Циклы очень удобны при использовании сложных и ресурсоёмких функций…»
С циклами надо быть очень осторожно, watch dog не простит вам длинного цикла и не очень хорошо если ваш ПЛК просто отрубится при управлении ГВС.
Привет, Саш. Насчёт синтаксиса согласен.
Насчёт Ардуино IDE, это среда интерпретатор. То есть по сути Codesys, Python и Arduino являются средами разработки. Если в общих чертах, смысл один и тот же. .
По поводу watch dog'a, честно говоря забыл указать этот нюанс. Так как бесконечный цикл он будет обрубать.
Codesys, Python и Arduino
Python — язык программирования, так же как ST, C++ и др.
Arduino — комплект платы+библиотека+IDE+в поставку включен компилятор
Codesys — только IDE+также включен компилятор
Ну в принципе, всё верно, небольшая поправочка. Я упустил момент, что Python это ЯП а не среда.
«Об языке программирования ST и типы переменных», еще и выделено красным. Не каждый день встретишь такую коллекцию грамматических ошибок в одном небольшом предложении, сами-то хоть читаете, что пишете? Да, это не статья по русскому языку, но грамотно писать нужно и технические статьи. Корректно было бы «О языке программирования ST и типах переменных», либо — «Язык программирования ST и типы переменных».
Благодарю за замечание, исправил.
Помогите пожалуйста пошагово описать программу в CoDeSys. Язык програмирования LD.
PROGRAM PLC_PRG
VAR
D1: BOOL;
D2: BOOL;
ludi: BYTE;
D2_PRED: BOOL;
D1_PRED: BOOL;
LIGTH: BOOL;
END_VAR
А что описать??
Требуется сделать пошаговое описание программы. То есть нужно описать подробно каждую строчку кода в отдельности, что она выполняет. (Сама программа написана для включения и выключения освещения в помещении. При последовательном срабатывании датчиков D1, D2 свет включается и производится подсчет людей в комнате например +1. А если датчики срабатываею в последовательности D2, D1 то счёт происходит как -1. При достижении 0 свет выключается. А при достижении 1 и более включается.
Я попытался, было прикрепить сюда скрины остальной части программы. То есть лестничную структуру и визуальзацию, но сюда не прикрепляетя.
Если это тоже нужно то могу скинуть на эл.почту если вышлете адрес.
Заранее благодарю за уделенное время)
Я честно не успеваю, может кто-то из комментаторов возьмётся?
Пиши на почту, сделаю любую задачу на LD, если ещё актуально
hamill79@bk.ru