Программа пользователя выполняется через вызовы составляющих ее блоков. Порядок и вложенность вызовов блоков называется иерархией вызовов. Глубина вложенности, т.е. количество блоков, которые могут быть вложены друг в друга при выполнении задачи любого приоритетного класса (например, на основе ОВ1), зависит от конкретного ЦПУ. На рисунке 3.5 показаны порядок и глубина вложенности вызовов блоков внутри цикла программы.
Рисунок 3.5 – Иерархия вызовов в программе пользователя
Существует стандартный порядок создания блоков:
‒ блоки создаются сверху вниз, т.е. начиная с верхнего ряда блоков;
‒ вызываемый блок должен существовать, т.е. внутри ряда блоки создаются справа налево;
‒ последним создается блок ОВ1.
Применяя эти правила на практике, для рисунка 3.5, получим следующую последовательность создания блоков:
FC1 → FB1 + экземпляр DB1 → DB1 → SFC1 → FB2 + экземпляр DB2 → OB1.
На рисунке 3.6 показана последовательность вызовов блоков в программе пользователя. Программа вызывает второй блок, который полностью выполняется. Как только второй (вызываемый) блок выполнен, выполнение блока, из которого произведен вызов, продолжается с команды, следующей за вызовом блока.
|
|
Рисунок 3.6 – Вызов блока в программе пользователя
Перед программированием блока необходимо определить, какие данные будут использоваться программой, другими словами, необходимо объявить переменные блока.
Типы данных
Контроллеры SIMATIC S7 могут работать со следующими типами данных:
1) Элементарные типы данных (до 32 бит)
‒ Битовые типы данных:
BOOL (Бит)
Бит – это единица, соответствующая одному двоичному разряду. Два возможных значения бита обозначаются «0» (FALSE) и «1» (TRUE);
BYTE (Байт)
Байт состоит из 8 бит, которым соответствуют адреса от 0 до 7. Байт могут образовывать биты, адрес младшего из которых кратен 8 (например: 0, 8, 16 и т.д.). В контроллерах SIMATIC S7 байт может интерпретироваться как просто байт (набор бит) или как ASCII-символ;
WORD (Слово)
Следующая после байта по величине единица, длина 16 бит. Любые два соседних байта можно объединить в слово, старшим будет являться байт с меньшим адресом. Адрес слова – это адрес байта с меньшим адресом. В контроллерах SIMATIC S7 слово может интерпретироваться как просто слово (набор бит), целое число со знаком, дата, время и т.д.;
DWORD (Двойное слово)
Любые два соседних слова можно объединить в двойное слово, его длина 32 бита или 4 байта. Старшим словом (байтом) является слово (байт) с меньшим адресом. Адрес двойного слова – это адрес байта с меньшим адресом. В контроллерах SIMATIC S7 двойное слово можно интерпретировать как просто слово, длинное целое число со знаком, вещественное число в формате IEEE и т.д.;
|
|
CHAR (Литера)
Переменная типа CHAR (character) занимает один байт. Тип данных CHAR представляет одну литеру в ASCII-формате, например, ′А′;
‒ Математические типы данных:
INT (Целое число)
Переменная типа INT (integer) хранится как целое число (16-битное число с фиксированной запятой). Тип данных INT не имеет специального идентификатора. Сигнальные состояния битов с 0 по 14 представляют цифровые разряды (позиции) числа. Сигнальное состояние 15-го бита представляет знак («0» – положительное число, «1» – отрицательное число);
DINT (Двойное целое число)
Переменная типа DINT хранится как целое число (32-битное число с фиксированной запятой). Целое сохраняется в DINT-переменной, когда оно превышает 32767 или меньше -32768, или когда число предваряется идентификатором типа L#.
Под переменную DINT отводится двойное слово. Сигнальные состояния битов с 0 по 30 представляют цифровые позиции числа. Знак хранится в 31 бите;
REAL (Вещественный)
Переменная типа REAL представляет дробь и хранится как 32-битное число с плавающей запятой (десятичной точкой). Целое число сохраняется в формате REAL, если в нем за десятичной точкой записан ноль.
В экспоненциальном представлении вы можете предварить «е» или «Е» целым числом или дробью из семи соответствующих чисел и знака. Цифры, которые расположены за «е» или «Е» представляют экспоненту по базе 10. Step 7 производит преобразование REAL-переменной во внутреннее представление числа с плавающей точкой.
‒ Временные типы данных:
S5TIME
Переменная типа S5TIME используется в базовых языках STL, LAD и FBD для установки таймеров системы SIMATIC, занимает 16-разрядное слово (см. рисунок 3.7).
Время задается в часах, минутах, секундах и миллисекундах. Временная база (time base) может принимать следующие значения: 10 мс (0000), 100 мс (0001), 1с (0010), 10 с (0011). Время определяется как результат произведения временной базы на значение таймера.
Рисунок 3.7 – Тип данных S5TIME
DATE (Дата)
Переменная типа DATE хранится в машинном слове как число с фиксированной точкой без знака. Содержимое переменной соответствует количеству дней, начиная с 01.01.1990. Ее представление показывает год, месяц и день, разделенные дефисом.
TIME (Время)
Переменная типа TIME занимает одно двойное слово. Ее представление содержит информацию о днях (d), часах (h), минутах (m), секундах (s), миллисекундах (ms). Отдельные элементы этих данных могут быть пропущены. Содержимое переменной интерпретируется в миллисекундах и хранится как 32-битное число с фиксированной точкой со знаком.
TIME_OF_DAY (Время суток)
Переменная типа TIME_OF_DAY занимает одно двойное слово. Содержание переменной интерпретируется как число миллисекунд, начиная с начала дня (0.00 часов) и сохраняется в виде 32-битного числа с фиксированной точкой без знака. Ее представление содержит информацию о часах, минутах и секундах, разделенных двоеточием. Миллисекунды, которые следуют за секундами, отделены от них десятичной точкой. Миллисекунды могут отсутствовать.
2) Сложные типы данных (более 32 бит)
Step 7 определяет следующие четыре сложных типа данных:
‒ DATA_AND_TIME (дата и время суток в двоично-десятичном или BCD-коде);
‒ STRING (символьная строка, в которой может быть до 254 символов);
‒ ARRAY (массив, совокупность переменных одного типа);
‒ STRUCT (совокупность переменных разного типа);
Данные типов STRING, ARRAY и STRUCT должны быть заранее определены пользователем – для типа STRING задается длина символьной строки, а для типов ARRAY и STRUCT определяются состав и размеры данных-компонентов;
3) Типы данных, определенные пользователем (более 32 бит)
User Data Type (UDT) – Пользовательский тип данных. Соответствует структуре (комбинация компонентов любых типов) с действием на глобальном уровне. Вы можете воспользоваться пользовательским типом данных, если в вашей программе часто фигурирует структурный тип и переменные, или вы хотите структуре данных присвоить свое имя.
|
|
Типы UDT обладают глобальным действием, т.е. они описываются один раз и доступны для использования во всех блоках.
При объявлении переменных определяются следующие их свойства:
‒ символическое имя;
‒ тип данных;
‒ видимость переменной.
Переменные могут быть объявлены:
‒ в глобальной символьной таблице (элементарные типы данных);
‒ в таблице описаний глобального блока данных (все типы данных);
‒ в таблице описаний логического блока (ОВ, FB и FC).