Разное

Язык программирования st самоучитель: 14 Язык ST — Всё для чайников

Общие сведения о языке ST — Документация Beremiz

ST (Structured Text) – это текстовый язык высокого уровня общего назначения, по синтаксису схожий с языком Pascal. Удобен для программ, включающих числовой анализ или сложные алгоритмы. Может использоваться в программах, в теле функции или функционального блока, а также для описания действия и перехода внутри элементов SFC. Согласно IEC 61131-3 ключевые слова должны быть введены в символах верхнего регистра. Пробелы и метки табуляции не влияют на синтаксис, они могут использоваться везде.

Порядок их выполнения – справа налево. Выражения состоят из операндов и операторов. Операндом является литерал, переменная, структурированная переменная, компонент структурированной переменной, обращение к функции или прямой адрес.

Согласно стандарту IEC 61131-3, язык ST поддерживает весь необходимый набор типов, аналогичный классическим языкам программирования. Целочисленные типы: SINT (char), USINT (unsigned char), INT (short int), UINT (unsigned int), DINT (long), UDINT (unsigned long), LINT (64 бит целое), ULINT (64 бит целое без знака).

Действительные типы: REAL (float), LREAL (double). Специальные типы BYTE, WORD, DWORD, LWORD представляют собой битовые строки длиной 8, 16, 32 и 64 бит соответственно. Битовых полей в ST нет. К битовым строкам можно непосредственно обращаться побитно. Например:

a.3 := 1; (* Установить бит 3 переменной a *)

Логический тип BOOL может иметь значение TRUE или FALSE. Физически переменная типа BOOL может соответствовать одному биту. Строка STRING является именно строкой, а не массивом. Есть возможность сравнивать и копировать строки стандартными операторами. Например:

strA := strB;

Для работы со строками есть стандартный набор функций (см. приложение 2, раздел «Строковые операции с переменными типа STRING»).

Специальные типы в стандарте IEC определены для длительности (TIME), времени суток (TOD), календарной даты (DATE) и момента времени (DT).

В таблице 3.1 приведены значения по умолчанию, соответствующие описанным выше типам.

Таблица 3.1 – Значения по умолчанию для типов данных IEC 61131-3

Тип(ы) данныхЗначение
BOOL, SINT, INT, DINT, LINT0
USINT, UINT, UDINT, ULINT0
BYTE, WORD, DWORD, LWORD0
REAL, LREAL0. 0
TIMET#0S
DATED#0001-01-01
TIME_OF_DAYTOD#00:00:00
DATE_AND_TIMEDT#0001-01-01-00:00:00
STRING‘’ (пустая строка)

По умолчанию, все переменные инициализируются нулем. Иное значение переменной можно указать явно при ее объявлении. Например:

str1: STRING := ‘Hello world’;

В определённых ситуациях при разработке программных модулей удобно использовать обобщения типов, т.е. общее именование группы типов данных. Данные обобщения приведены в таблице 3.2.

Таблица 3.2 – Обобщения типов данных IEC 61131-3

ANY 
ANY_BITANY_NUMANY_DATE

TIME

STRING

и другие типы данных

BOOL

BYTE

WORD

DWORD

LWORD

ANY_INTANY_REAL

DATE

TIME_OF_DAY

DATE_AND_TIME

 

INT

SINT

DINT

LINT

UINT

USINT

UDINT

ULINT

REAL

LREAL

К конструкциям языка ST относятся:

  • арифметические операции;
  • логические (побитовые) операции;
  • операции сравнения;
  • операция присвоения;
  • конструкция IF – ELSEIF – ELSE;
  • цикл FOR;
  • цикл WHILE;
  • цикл REPAET UNTIL;
  • конструкция CASE.

При записи арифметических выражений допустимо использование скобок для указания порядка вычислений. При записи выражений допустимо использовать переменные (локальные и глобальные) и константы.

К арифметическим операциям относятся:

  • «+» – сложение;
  • «-» – вычитание;
  • «*» – умножение;
  • «/» – деление;
  • «mod» – остаток от целочисленного деления.

Приоритет операций в выражениях указан в таблице 3.4 (чем выше приоритет, тем раньше исполняется операция).

Логические (побитовые) операции

К данным операциям относятся:

  • «OR» – Логическое (побитовое) сложение;
  • «AND» – Логическое (побитовое) умножение;
  • «XOR» – Логическое (побитовое) «исключающее ИЛИ»;
  • «NOT» – Логическое (побитовое) отрицание.

Операции сравнения

Поддерживаются следующие операции сравнения:

  • «=» – сравнение на равенство;
  • «<>» – сравнение на неравенство;
  • «>» – сравнение на больше;
  • «>=» – сравнение на не меньше;
  • «<» – сравнение на меньше;
  • «<=» – сравнение на не больше.

В качестве результата сравнения всегда используется значение типа BOOL.

Присвоение

Для обозначения присвоения используется парный знак «:=». В правой и левой части выражения должны быть операнды одного типа (автоматического приведения типов не предусмотрено). В левой части выражения (принимающая сторона) может быть использована только переменная. Правая часть может содержать выражение или константу.

В таблице 3.4 приведены приоритеты при выполнении описанных выше операций.

Таблица 3.4 – Приоритеты операций

ОперацияПриоритет
Сравнения1
Сложение, вычитание2
Умножение, деление3
OR4
AND, XOR5
NOT6
Унарный минус7
Вызов функции8

Конструкция IF – ELSEIF – ELSE

Для описания некоторых конструкций языка удобно использовать фигурные и квадратные скобки. Считается, что:

  • выражение в фигурных скобках может использоваться ноль или больше раз подряд;
  • выражение в квадратных скобках не обязательно к использованию.

Конструкция IF-ELSEIF-ELSE имеет следующий формат:

IF <boolean expression> THEN <statement list>

[ELSEIF <boolean expression> THEN <statement list>]

[ELSE <statement list>]

END_IF;

Например:

IF Var <> 0

THEN Var := 1

ELSEIF Var > 0

THEN Var := 0;

ELSE Var := 10;

END_IF;

Конструкция допускает вложенность, т.е. внутри одного IF может быть еще один и т.д. Например:

IF Var > 10 THEN

IF Var < Var2 + 1

THEN Var := 10;

ELSE Var := 0;

END_IF;

END_IF;

Цикл FOR

Служит для задания цикла с фиксированным количеством итераций. Формат конструкции следующий:

FOR <Control Variable> := <expression1> TO <expression2>

[BY <expression3>] DO

<statement list>

END_FOR;

При задании условий цикла считается, что <Control Variable>, <expression1> … <expression3> имеют тип INT.

Выход из цикла будет произведен в том случае, если значение переменной цикла превысит значение <expression2>. Например:

FOR i := 1 TO 10 BY 2 DO

k := k * 2;

END_FOR;

Оператор BY задает приращение переменной цикла (в данном случае i будет увеличиваться на 2 при каждом проходе по циклу). Если оператор BY не указан, то приращение равно 1. Например:

FOR i := 1 TO k / 2 DO

var := var + k;

k := k – 1;

END_FOR;

Внутри цикла могут использоваться другие циклы, операторы IF и CASE. Для выхода из цикла (любого типа) может использоваться оператор EXIT. Например:

FOR i := 1 TO 10 BY 2 DO

k := k * 2;

IF k > 20 THEN

EXIT;

END_IF;

END_FOR;

Примечание 1: Выражения <expression1> … <expression3> вычисляются до входа в цикл, поэтому изменения значений переменных, входящих в любое из этих выражений не приведет к изменению числа итераций. Например:

01: k := 10;

02: FOR I := 1 TO k / 2 DO

03: k := 20;

04: END_FOR;

В строке 3 производится изменение переменной k, но цикл все равно выполнится только пять раз. Примечание 2: Значение переменной цикла может изменяться внутри тела цикла, но в начале очередной итерации значение данной переменной будет выставлено в соответствие с условиями цикла. Например:

01: FOR I := 1 TO 5 DO

02: I := 55;

03: END_FOR;

При первом проходе значение I будет равно 1, потом в строке 2 изменится на 55, но на втором проходе значение I станет равно 2 – следующему значению по условиям цикла.

Цикл WHILE

Служит для определения цикла с предусловием. Цикл будет исполняться до тех пор, пока выражение в предложении WHILE возвращает TRUE. Формат конструкции следующий:

WHILE <Boolean-Expression> DO

<Statement List>

END_WHILE;

Значение <Boolean-Expression> проверяется на каждой итерации. Завершение цикла произойдет, если выражение <Boolean-Expression> вернет FALSE. Например:

k := 10;

WHILE k > 0 DO

i := I + k;

k := k –1;

END_WHILE;

Внутри цикла могут использоваться другие циклы, операторы IF и CASE. Для досрочного завершения цикла используется оператор EXIT (см. пример в описание цикла FOR).

Цикл REPEAT UNTIL

Служит для определения цикла с постусловием. Завершение цикла произойдет тогда, когда выражение в предложении UNTIL вернет FALSE. Другими словами: цикл будет выполняться, пока условие в предложении UNTIL не выполнятся. Формат конструкции следующий:

REPEAT

<Statement List>

UNTIL <Boolean Expression>;

END_REPEAT;

Например:

k := 10;

REPEAT

i := i + k;

k := k – 1;

UNTIL k = 0;

END_REPEAT;

Внутри цикла могут использоваться другие циклы, операторы IF и CASE. Для досрочного завершения цикла используется оператор EXIT (см. пример в описании цикла FOR).

Конструкция CASE

Данная конструкция служит для организации выбора из диапазона значений. Формат конструкции следующий:

CASE <Expression> OF

CASE_ELEMENT {CASE_ELEMENT}

[ELSE <Statement List>]

END_CASE;

CASE_ELEMENT – это список значений, перечисленных через запятую. Элементом списка может быть целое число или диапазон целых чисел. Диапазон задается следующим образом BEGIN_VAL .. END_VAL.

Если текущее значение <Expression> не попало ни в один CASE_ELEMENT, то управление будет передано на предложение ELSE. Если предложение ELSE не указано, то никаких действий выполнено не будет.

Значение <Expression> может быть только целым. Например:

01: CASE k OF

02: 1:

03: k := k * 10;

04: 2..5:

05: k := k * 5;

06: i := 0;

07: 6, 9..20:

08: k := k – 1;

09: ELSE

10: k := 0;

11: i := 1;

12: END_CASE;

Строка 4 содержит диапазон значений. Если значение k принадлежит числовому отрезку [2, 5], то будут выполнены строки 5 и 6.

В строке 7 использован список значений. Строка 8 выполнится, если значение k будет равно 6 или будет принадлежать числовому отрезку [9, 20].

Строки 10 и 11 будут выполнены в том случае, если k < 1, или 6 < k < 9, или k > 20 (в данном случае сработает предложение ELSE).

При задании списка значений необходимо выполнять следующие условия:

  • наборы значений внутри одного CASE не должны пересекаться;
  • при указании диапазона значений начало диапазона должно быть меньше его конца.

В таблице 3.5 приведены примеры кода записи правильной и неправильной записи конструкции CASE.

Действия, предусмотренные для обработки каждого из случаев CASE, могут использовать циклы, операторы IF и CASE.

Таблица 3.5 – Запись конструкции CASE

Неправильная записьПравильная запись

01: CASE k OF

02: 1:

03: k := k * 10;

04: 2..5:

05: k := k * 5;

06: i := 0;

07: 5, 9..20:

08: k := k – 1;

09: ELSE

10: k := 0;

11: i := 1;

12: END_CASE;

Диапазоны в строках 4 и 7 пересекаются

01: CASE k OF

02: 1:

03: k := k * 10;

04: 2. .5:

05: k := k * 5;

06: i := 0;

07: 6, 9..20:

08: k := k – 1;

09: ELSE

10: k := 0;

11: i := 1;

12: END_CASE;

01: CASE k OF

02: 1:

03: k := k * 10;

04: 2..5:

05: k := k * 5;

06: i := 0;

07: 6, 20..9:

08: k := k – 1;

09: ELSE

10: k := 0;

11: i := 1;

12: END_CASE;

В строке 7 диапазон значений задан неправильно.

01: CASE k OF

02: 1:

03: k := k * 10;

04: 2..5:

05: k := k * 5;

06: i := 0;

07: 6, 9..20:

08: k := k – 1;

09: ELSE

10: k := 0;

11: i := 1;

12: END_CASE;

При написании программ на ST возможно использование стандартных и пользовательских функций и функциональных блоков.

Язык ST CoDeSyS — самый гибкий язык программирования

Прежде чем мы с вами будем рассматривать упрощённую графическую систему программирования для технологов, хотелось бы в двух словах рассказать о базисном языке программирования СИ. Язык ST CoDeSyS отличается от других своей гибкостью и адаптивностью под любые задачи. Он позволяет обрабатывать сложные решения и видеть всю картину в целом. Чаще всего применяется в функциональных блоках для обработки алгоритма той или иной части рабочего органа станка или линии.

Из этой статьи вы узнаете:

Об языке программирования ST и типы переменных
Перечень основных операторов
Советы по программированию ПЛК в среде CoDeSyS

Здравствуйте уважаемые Дамы и Господа! Меня зовут Гридин Семён, и я являюсь автором этого блога. В данном посте я хочу обсудить с вами базовые понятия языка программирования CoDeSyS. Называется он ST CoDeSyS, очень сильно напоминает СИ.

Язык программирования ST и типы переменных

ST (Structured text) — это одна из составных частей комплекса CoDeSyS и представляет собой текстовый редактор высокого уровня. Он очень похож на Basic или Pascal. Такой способ программирования является идеальным инструментом для людей-программистов. Преимуществом языка является создание сложных математических и разветвленных алгоритмов.

ST позволяет без труда описывать сложные операции компактным и лёгким для восприятия текстом. Structured Text содержит в себе много конструкций, позволяющие присваивать переменные, использовать готовые библиотеки, функции и функциональные блоки.

В чём преимущество данного способа программирования? давайте с вами перечислим:

  1. Наглядность. Вы можете на одном листинге оценить всю последовательность действий и выполнение условий
  2. Программа на ST может быть создана в любом текстовом редакторе
  3. Читабельность. За счёт символьного представления текста и выделения блоков разными цветами

С этим мы разобрались, но, прежде чем переходить к непосредственному изучению азов программирования, необходимо ознакомиться с элементом языка — тип данных. Хочу обратить внимание, этот элемент практически схож во многих си-подобных языках (Питон, Ардуино IDE, СИ# т. д.)

Тип данных переменной определяет род информации, диапазон представлений и множество допустимых операций. Языки МЭК используют строгую идеологию в этом отношений. Любую переменную можно использовать только после её объявления. Присваивать значения одной переменной другой можно, только если они одного типа. В другом случае используются преобразователи типов.

В таблице ниже я представлю типы данных, которые используются чаще всех:

ТипНазваниеПределРазмер в байтах
BOOLЛогическое1 бит1 бит
BYTEЦелочисленое8 бит1 байт
WORDЦелочисленое16 бит2 байта
INTЦелочисленое-32768-327672 байта
UINTЦелочисленое0-655352 байта
FLOATВещественное±10³³4 байта
DATE_AND_TIMEДата и время
STRINGСтроковое

Перечень основных операторов

Операторы — это символы определённых операций. Но их можно определить и как функции, наделёнными определёнными привилегиями. Они имеют определённые ключевые слова и формы для представления на ST.

Оператор выбора IF  позволяет выполнить различные группы выражений в зависимости от условий, выраженных логическими выражениями.

Arduino

PROGRAM PLC_PRG VAR in:BOOL; out:INT; END_VAR IF in = TRUE THEN out:=1; ELSE out:=2; END_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 позволяет выполнить различные группы выражений в зависимости от значения одной целочисленной переменной или выражения.

Arduino

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 после тела цикла.

Arduino

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

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

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 обеспечивает заданное количество повторений группы выражений.

Arduino

PROGRAM PLC_PRG VAR in:BOOL; test:INT; out:INT; END_VAR FOR test:=1 TO 10 DO out:=out+1; END_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)

В этой статье мы обсудим основы программирования ПЛК с использованием структурированного текста.

Являясь одним из языков программирования ПЛК IEC-61131, структурированный текст или просто ST основан на традиционных языках программирования, таких как Python или Java, и напоминает их.

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

Преимущества программирования структурированного текста

Как и все языки программирования, структурированный текст имеет свои преимущества и недостатки, а также существуют причины, по которым вы, как программист, можете выбрать использование структурированного текста в своем следующем проекте программирования ПЛК, так что давайте приступим к делу.

1) Опыт программирования ПЛК не требуется

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

2) ST является текстовым

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

Это также упрощает редактирование проекта при отладке. Хотя эта функция структурированного текста полезна, помните, что без программного обеспечения для программирования, такого как TIA Portal или RSLogix, вы не сможете скомпилировать и отладить свою программу.

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

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

3) ST — облегченный язык программирования

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

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

4) Файлы программирования на языке ST можно очень легко совместно использовать заказчику для запуска под ключ.

В этих случаях файл программы вашего ПЛК может храниться в автономном режиме в виде текстового файла или документа Word и может быть легко отправлен в виде вложения электронной почты для загрузки в ПЛК и развертывания.

Основные правила синтаксиса ST

Синтаксис структурированного текста следует некоторым основным правилам.

— Во-первых, все операторы в структурированном тексте заканчиваются точкой с запятой.

– Подпрограмма закроется оператором End_If.

-Пробелы и табуляции не требуются, но хороший программист все равно будет использовать их для удобства чтения.

— Кроме того, структурированный текст не чувствителен к регистру, но если вы назначаете переменную, известную как тег или символ, например control valve 1 , тогда рекомендуется использовать CamelCase ControlValve1 .

Использование комментариев в программировании на языке ST

Другим очень распространенным и полезным синтаксисом структурированного текста является использование комментариев. Для начинающего программиста использование комментариев необходимо для создания кода, который можно будет прочитать позже.

Вот пример комментария в структурированном текстовом программировании: 

(*эта строка кода закроет регулирующий клапан 1*)

Как видите, чтобы добавить комментарий в структурированный текст, вы должны начать с левой скобки, за которой следует звездочка. Чтобы закрыть свой комментарий, вы добавите еще одну звездочку, а затем правую скобку.

Операторы структурированного текста

Структурированный текст также использует операторы для управления данными. Некоторыми примерами операторов являются логические операторы, такие как И, ИЛИ и НЕ. Логический оператор используется для сравнения логических данных и создания на их основе логики.

Примеры структурированного текста

Пример логического оператора в структурированном тексте выглядит следующим образом:

В этом случае, если регулирующий клапан 1 НЕ закрыт, программа будет выполняться на основе любых следующих инструкций, следующих за инструкцией. .

Вот еще один пример:

В этом случае, если регулирующий клапан 1 закрыт или если выполняется другое параллельное условие, программа будет выполняться на основе любых следующих инструкций, следующих за инструкцией.

Помните, хотя выражение говорит нам, что регулирующий клапан 1 не закрыт, мы все еще не уверены, что он открыт! Нам нужно будет создать логику, которая говорит нам, что он открыт.

Давайте создадим простую инструкцию в структурированном тексте, чтобы включить насос, когда регулирующий клапан открыт.

Во-первых, давайте начнем с оценки состояния регулирующего клапана. Вы захотите убедиться, что клапан открыт, используя этот оператор. IF ControlValve1_Closed — это ложь, а ControlValve1_Open — это правда.

С помощью этого утверждения вы определили, что регулирующий клапан не закрыт и что регулирующий клапан открыт.

Теперь включим насос. Для этого вы добавите в оператор , тогда Pump_Start станет истинным .

Теперь, когда насос работает, необходимо добавить логику для остановки насоса при закрытии регулирующего клапана. Для этого вы просто добавите в логику еще один оператор, например… IF ControlValve1_Closed — ИСТИНА ИЛИ ControlValve1_Open  — ЛОЖЬ, ТОГДА запуск насоса — ЛОЖЬ.

Оператор ELSIF

Теперь давайте объединим все наши операторы, чтобы создать процедуру. Для этого у вас будет первый оператор, а затем добавьте ELSE под ним. Затем у вас будет второй оператор, а затем добавьте… END_IF  в конце.

В этой программе, если регулирующий клапан 1 не закрыт И открыт, ТОГДА насос запускается.

В противном случае, если регулирующий клапан 1 закрыт и не открыт, насос останавливается. Очень легко, правда?

Чтобы другим было легче читать и понимать эту процедуру, вы также можете добавить комментарий над ней.

Итак, вы наберете левую круглую скобку, за которой следует звездочка, а затем добавите… эта процедура запускает насос, когда регулирующий клапан открыт, и останавливает насос, когда регулирующий клапан закрыт или не открыт. Чтобы закрыть комментарий, вы добавите еще одну звездочку, а затем правую круглую скобку.

Поздравляем! Вы только что создали свою первую процедуру в структурированном тексте! Как это круто? Хотя это простое руководство было введением в структурированный текст, добавление возможности использовать структурированный текст в ваших проектах станет еще одним мощным инструментом в наборе инструментов вашего программиста.

Позволяет быстро и эффективно создавать большие и сложные проекты ПЛК, максимально используя память.

Мы надеемся, что вам понравилось это простое руководство, подготовленное командой RealPars.

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

У вас есть друг, клиент или коллега, которым может пригодиться эта информация? Пожалуйста, поделитесь этой статьей.

Введение в программирование структурированного текста в RSLogix и Studio 5000 Allen Bradley

Введение

По мере развития навыков программирования ПЛК вы поймете, что существует множество способов выполнения одной и той же задачи. Однако некоторые подходы могут быть более применимы в одних случаях и менее применимы в других. С помощью лестничной логики вы можете создавать программы, которые легко поддерживать, понимать и расширять с течением времени. При этом большинство ПЛК, включая Allen Bradley, предлагают другие способы реализации логики. Эти различные способы программирования следующие: Структурированный текст [ST], схемы функциональных блоков [FBD] и схемы последовательных функций [SFC] .

Преимущество использования структурированного текста перед релейной логикой не всегда очевидно. Обычно сложно перейти к структурированному тексту после того, как вы потратите время на изучение лестничной логики. Напротив, тем, кто занимается программированием ПЛК с опытом работы в области разработки программного обеспечения, может быть легче понять, чем релейную логику. На самом деле структура ST намного ближе к традиционным языкам программирования, таким как C, C++, Java или Python 9.0008, чем в релейной логике.

Реализация в структурированном тексте позволяет программисту создавать сложные подпрограммы и потоки, которые не всегда легко реализовать в релейной логике. Например, для реализации цикла FOR на ST потребуется одна строка кода, а для релейной логики требуется отдельная процедура. Кроме того, также можно использовать манипуляции со строками в Excel, чтобы создать простой для копирования и вставки код для ваших простых заданий.

В этом вводном руководстве мы изучим основы структурированного текста, пройдемся по основам интерфейса, которые отличаются от релейной логики, и, наконец, создадим несколько простых примеров, иллюстрирующих назначение переменной.

Интерфейс программирования структурированного текста в RSLogix Studio 5000

Процесс создания процедуры структурированного текста такой же, как и раньше. Просто «щелкните правой кнопкой мыши» программу, выберите «Создать новую процедуру» и измените тип на «Структурированный текст». Обратите внимание, что вам нужно будет создать инструкцию JSR из основной процедуры, чтобы выполнить код в новой процедуре. Точно так же, как мы всегда делали в Ladder Logic.

Интерфейс программирования структурированного текста в RSLogix Studio 5000 Allen Bradley Compact Logix PLC
  1. Подпрограмма структурированного текста «_05_Practice» добавлена ​​в программу «ST_Practice». Для выполнения новой подпрограммы добавляется инструкция JSR.
  2. Подпрограммы редактирования представлений — в структурированном тексте мы будем редактировать всю подпрограмму, а не одну ступень в релейной логике. При нажатии на крайнюю левую кнопку пользователю будет представлен исходный вид программы. Другими словами, такой, какой была рутина до редактирования. При нажатии средней кнопки пользователю открывается окно, в котором он или она может добавлять или редактировать существующую логику. Наконец, самая левая кнопка используется для просмотра «Тестовых изменений», когда начинают вноситься определенные изменения.
  3. Ожидание плановых правок — как и в Ladder Logic, можно начинать правки, принимать правки и отменять правки. Эти действия выполняются тремя кнопками в указанном порядке.
  4. Ожидающие изменения программы — так же, как и в Ladder Logic, можно принять или отменить изменения, внесенные во всю программу.
  5. Завершить все изменения в программе — не всегда рекомендуется использовать эту кнопку, но она зафиксирует все изменения, сделанные пользователем в программе.

Интерфейс структурированного текста немного отличается от интерфейса лестничной логики. При этом большая часть того, что вы узнали, применима повторно.

Первый вопрос, который возникает у пользователей при переходе от релейной логики к структурированному тексту, касается устранения неполадок. В лестничной логике пользователю было показано, какой тег активизирован, какое значение было задано целым числом, какая строка была отправлена ​​в переменную и т. д. Как это отображается в структурированном тексте? На самом деле структурированный текст будет отображать окно со всеми тегами, используемыми в подпрограмме под редактором на вкладке «Наблюдение» . В этом окне пользователь сможет видеть различные теги и их значения по мере их изменения. Это окно очень похоже на то, что вы ожидаете увидеть в редакторе тегов в разделе «Мониторинг тегов». Обратите внимание, что для адаптации к этой методологии отслеживания значений тегов может потребоваться время.

Окно просмотра тегов структурированного текста в RSLogix Studio 5000

Структуры назначения тегов структурированного текста

В структурированном тексте, 9Значения 0007 присвоены тегам . Думайте об этом действии, как о ваших инструкциях OTE и MOV, объединенных в один шаг. Так же, как мы видели в лестничной логике, есть определенные правила, о которых нужно помнить. Например, тип тега будет принимать только определенные значения; логический тег позволит программе компилироваться только в том случае, если он назначен 0, 1 или другому логическому тегу.

Начиная с логического значения , мы можем выполнить следующие присваивания:

NewTagBOOL := 0;

NewTagBOOL := 1;

Назначения, записанные как таковые, эквивалентны инструкциям OTL и OTU, которые мы видели в программировании релейной логики. Обратите внимание, что программа выдаст ошибку, если пользователь попытается присвоить логическое значение статическому значению, отличному от 0 или 1.

NewTagBOOL := NewTagBOOL2;

Как упоминалось ранее, можно присвоить логическое значение тегу того же типа (логическому). Эта операция будет эквивалентна оценке XIC логического значения и присвоению защелки 1 вторичному логическому значению. Если XIC окажется ложным, будет присвоен 0.

Далее идут целые числа: INT, DINT, SINT:

NewTagINT := 45;

NewTagINT := 567;

NewTagINT := NewTagINT2;

Целые числа могут быть присвоены значениям в их пределах или другим целым числам того же типа. Обратите внимание, что компилятор выдаст ошибку, если вы попытаетесь записать DINT в INT.

Работа со строками в структурированном тексте немного отличается от того, к чему вы, возможно, привыкли:

NewTagSTRING.DATA[0] := 65;

NewTagSTRING.DATA[1] := 66;

Строки создаются путем назначения отдельных символов ASCII. При установке первого символа на 65 фактическое строковое значение устанавливается в букву «A». Вот таблица, из которой вы можете взять значения для использования в строках:

 Таблица ASCII для назначений строк в RSLogix 5000

Назначения несохраняемых тегов

Назначение несохраняемых тегов в структурированном тексте эквивалентно действию, которое мы наблюдаем в OTE. Обучение лестничной логике. Другими словами, , когда условия истинны, тег оценивается как 1; пока их нет, тег будет сброшен на 0 . Приведенные выше задания не будут иметь такого же эффекта. Они установят тег в значение по выбору и останутся как есть независимо от того, что происходит с тегом.

В настоящее время мы не видели примера, демонстрирующего использование несохраняемого присваивания. Тем не менее, важно понимать основной принцип обучения и знать, что есть разница в заданиях.

Заключение

Мы рассмотрели основные функции структурированного текста и реализовали простые назначения тегов. Мы также рассмотрели незначительные различия в функциях редактора и то, как они отражаются на релейной логике. Наконец, мы обсудили назначения тегов и то, чем они отличаются в структурированном тексте.

На этом этапе было бы важно начать просматривать редактор, знакомясь с различиями и тем, как реализованы логические изменения. Вы также должны начать создавать новые теги и назначать их переменным и самим себе, чтобы полностью понять, как работает назначение тегов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *