Редактирование кода

Особенность редактора Hardella IDE заключается в том, что по факту, он не является текстовым редактором. Редактор языка ST похож на текстовый редактор, но по факту он ближе к “заполненю формы с заранее обозначенными ячейками для ввода данных”.

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

Из-за этой же особенности, вставка текстового кода из буфера обмена может не срабатывать. Если код скопирован из Hardella, то всё должно работать. А скопировать код из браузера и вставить в редактор сейчас не получится (это планируется поправить в будущем).

Создание функциональных блоков

Для создания FB нужно нажать правой кнопкой в Logical View (левая часть экрана), и выбрать New > c.g.v.iec61131.types > FB.

Меню создания ФБ

Альтернативный вариант – ctrl+c / ctrl+v для какого-нибудь имеющегося блока.

Так будет выглядеть новый блок после создания:

Новосозданный ФБ

Здесь видно, что “каркас” всегда одинаков (слова FUNCTION_BLOCK, variables, body), а для конкретных значений оставлено “место ввода данных”.

Название блока является обязательным, поэтому оно выделено красным. Список переменных и тело блока опциональны, поэтому они красным не подсвечены.

Сделаем блок для OR. Смысла в нём немного (ведь можно использовать операцию a OR b), но для примера вполне подойдёт.

Записываем название: Новосозданный ФБ

Далее нужно объявить переменные. Для этого можно нажать tab и курсор переместится в область объявления переменных. Можно использовать стрелки, мышку и т.п. (кому что удобнее).

Объявление переменных

Для добавления элемента в список следует использовать enter. Т.е. нажимаем enter и Hardella создаёт “рыбу” для объявления переменной.

Рыба объявления переменной

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

Пишем x (имя переменной), нажимаем tab (или стрелку вправо) для перехода к выбору типа переменной.

Указали имя переменной

Нужно как-то указать BOOL тип. Один вариант это взять и написать BOOL (большими буквами). Более интересный – и спользованием автодополнения. Можно написать часть идентификатора, а можно вообще ничего не писать и нажать ctrl+пробел.

Выбор типа переменной

BOOL находится на втором месте, его можно выбрать стрелочками и нажать enter. Такой подход помогает когда точное называние блока забыто.

Хорошо, получили x : BOOL, но как обозначить, что это будет входная переменная?

Флаги input, output

Для указания input, output флагов, нужно разместить курсор слева от названия переменной (т.е. слева от x), нажать пробел и воспользоваться одним из следующих вариантов:

  • напечатать input (или output)
  • нажать ctrl+пробел и выбрать нужный вариант в меню: Флаги input, output

Дублирование строк, блоков кода

Одной входной переменной явно мало, но можно её размножить клавишей ctrl+d (от слова duplicate). Нажимаем несколько раз и получаем такую картину: Размноженные переменные

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

Редактируем имена, и меняем тип последней переменной с input на output. Для этого стираем input и добавляем output.

Среда автоматически добавляет пустые строки между разнотипными группами переменных, поэтому в итоге код будет выглядеть так:

Переменные объявлены

Введение выражений

Переходим к телу ФБ, нажимаем ctrl+пробел, выбираем StatementList. После этого можно писать код на языке ST.

Для того, чтобы получить z := x OR y;, нужно нажимать следующие клавиши:

  1. z – появится z;
  2. := – появится z := ___;
  3. x – появится z := x;
  4. пробел. Если после x не нажать пробел, то вместо x OR среда подумает, что мы имеем ввиду переменную с именем xOR
  5. OR. В итоге будет z := x OR ___;
  6. ‘y’

Можно было зайти и с другого конца:

  1. : – появится ___ := ___; Дело в том, что присваивание это единственная операция с двоеточием, поэтому сразу после довоеточия среда и понимает, что нужна операция присваивания
  2. z – появится z := ___;
  3. tab для перехода в правую часть
  4. OR, нажать ctrl+пробел, и выбрать в меню or expression – появится z := ___ OR ___;
  5. Далее заполнить левый и правый аргументы операции OR нужными переменными

Копирование и вставка

ctrl+c / ctrl+v работает. Следует понимать, что среда следит за типами и смыслом выражения. Например, не получится скопировать в буфер конструкцию IF ... END_IF и вставить её на место объявления переменной (смысла, конечно, в такой операции немного, но стоит понимать, что и в других местах будет подобное поведение).

С другой стороны, скопировать объявление переменной и вставить рядом с другим объявлением – можно, в том числе и в другом блоке.

Большинство сложных конструкций копируются только целиком. Например, невозможно скопировать IF без закрывающего END_IF или без части ELSIF веток. Если реально нужно, то нужно скопировать целиком, а потом удалить лишнее.

Переименование переменных, блоков

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

Перемещение строк, блоков вверх-вниз

Очень часто приходится тасовать строки, параметры и целые фрагменты кода (например, внести операцию внутрь IF или, наоборот, вынести из ветки).

Для этого есть горячие клавиши: ctrl+shift+↑ и ctrl+shift+↓

Обновлено:

Комментировать