МУ_Проектирование распределенных систем управления 04.09.2023
.pdf
Кодирование аналоговых величин
Аналоговая величина с номинальным диапазоном тока / напряжения
(выбирается при параметрировании модуля в утилите HW Config) преобразуется в модуле в число из диапазона от 0 до +27648 (для симметричных значений, например, ±10V, от -27648 до+27648).
Представление аналоговых величин в диапазонах измерения напряжений в сигнальных модулях Siemens приведено в таблице.
Система |
|
Диапазон измерения напряжений |
|
|
Состояние |
||||
|
|
|
|
|
|
|
|
|
сигнала |
|
|
|
|
|
|
|
|
|
|
Десятичная |
16-ричная |
±10 В |
±5 В |
|
±2,5 В |
±1 В |
|
|
|
(DEC) |
(HEX) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32767 |
7FFF |
11,851 В |
5,926 |
В |
2,963 |
В |
1,185 |
В |
Переполнение |
|
|
|
|
|
|
|
|
|
|
32512 |
7F00 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32511 |
7EFF |
11,759 В |
5,879 |
В |
2,940 |
В |
1,176 |
В |
Перегрузка |
|
|
|
|
|
|
|
|
|
|
27649 |
6C01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27648 |
6C00 |
10 В |
5 В |
|
2,5 В |
|
1 В |
|
Номинальный |
|
|
|
|
|
|
|
диапазон |
||
20736 |
5100 |
7,5 В |
3,75 В |
1,875 |
В |
0,75 В |
|||
|
|
|
|
|
|
|
|
|
|
1 |
1 |
361,7 мкВ |
180,8 |
мкВ |
90,4 мкВ |
36,17 |
мкВ |
|
|
|
|
|
|
|
|
|
|
|
|
91
0 |
|
0 |
0 В |
|
0 В |
0 В |
|
0 В |
|
|
|
|
|
|
|
|
|
|
|
-1 |
|
FFFF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-20736 |
|
AF00 |
-7,5 В |
|
-3,75 В |
-1,875 |
В |
-0,75 В |
|
|
|
|
|
|
|
|
|
|
|
-27648 |
|
9400 |
-10 В |
|
-5 В |
-2,5 В |
-1 В |
|
|
|
|
|
|
|
|
|
|
|
|
-27649 |
|
93FF |
|
|
|
|
|
|
Отрицательная |
|
|
|
|
|
|
|
|
|
|
-32512 |
|
8100 |
-11,759 В |
|
-5,879 В |
-2,940 |
В |
-1,176 В |
перегрузка |
|
|
|
|
|
|
|
|
|
|
-32513 |
|
80FF |
|
|
|
|
|
|
Отрицательное |
|
|
|
|
|
|
|
|
|
|
-32768 |
|
8000 |
-11,851 В |
|
-5,926 В |
-2,963 |
В |
-1,185 В |
переполнение |
|
|
|
|
|
|
|
|
|
|
Масштабирование |
|
|
|
|
|
|
|
||
|
Масштабирование – |
математическое преобразование числовой |
|||||||
величины в значение из физического диапазона. Для униполярных сигналов
масштабирование выполняется по формуле:
OUT = [(FLOAT (IN) /27648) * (HI_LIM–LO_LIM)] + LO_LIM,
где IN – входное числовое значение аналоговой величины HI_LIM и LO_LIM
– верхний и нижний предел для физического диапазона.
Для обеспечения точности все вычисления должны проводитьс я с числами в формате Real. Необходимые преобразования форматов приводятся
в коде далее.
Полученный сигнал легко потом масштабируется в диапазон измерения датчика – в необходимых единицах измерения. Диапазон измерения указан в паспорте на каждое устройство.
Ход работы
Используйте предыдущий проект для работы. Необходимо поменять программу следующим образом.
Изменить тип данных аналоговых переменных области I на INT. Закомментировать часть программы FC, отвечающей за чтение
аналоговых данных с помощью
(*
Комментируемый код
*)
Создайте функциональный блок, который будет преобразовывать аналоговые переменные, задайте ему имя в таблице символов.
92
Задача – преобразовать код сигнала, полученный на аналогово - цифровом преобразователе, тип сигнала INT, диапазон сигнала от 0 до 27648. Кроме указанного сигнала предусмотрите во входных переменных диапазон унифицированного сигнала и диапазон измерений датчика. Результаты преобразования:
унифицированный сигнал датчика определенного вида (ток, напряжение) в определенном диапазоне значений;
физическая величина в единицах измерения.
Диапазон унифицированного сигнала задавать как входные параметры программы. Возможные диапазоны: 0-20мА, 4-20мА, +-5В, 0-10В.
Диапазон физических величин выбрать исходя из наименования сигнала и выбора подходящего датчика.
Преобразовать каждый входной аналоговый сигнал из работы 3 с использованием функциональных блоков в соответствии с вариантом.
Лабораторная работа №7. Вызов и использование программы преобразования аналогового сигнала. Проверка состояний
Цель работы: ознакомление с принципами обработки аналоговых сигналов в контроллере.
Содержание работы
1.Использование области ввода и вывода, запись переменных и блоков в таблицу символов.
2.Создание блоков данных DB.
3.Программирование функционального блока FB для чтения аналоговой величины.
4.Программирование блока OB1 на языке SCL.
5.Загрузка аппаратной конфигурации в PLC. Подтверждение отсутствия ошибок на PLC и модуле расширения.
Общие сведения
Обработка аналоговых величин в CPU требует их преобразования в цифровую форму. Для этого служит АЦП (аналогово-цифровой преобразователь) в модулях аналоговых входов. Результат преобразования записывается в память результатов (PIW) и остается там до тех пор, пока не перепишется новой величиной.
93
Каждый аналоговый канал занимает 2 байта. Таким образом, если аналоговый модуль имеет адрес 304, то 2-й канал этого модуля имеет адрес PIW306 (для выхода - PQW306). Для лабораторной работы будем использовать вместо области периферийных данных PI и PQ области I и Q для возможности задавать их в симуляторе вручную.
Время преобразования
Время преобразования для различных модулей приводится в руководстве по модулям.
Например, для модуля SM334 время преобразования для всех каналов не более 5 ms.
Если канал не используется, то при параметрировании модуля отметьте его как “Deactivated”. Это позволит уменьшить время преобразования.
Символьная адресация
Абсолютная адресация
При абсолютной адресации Вы указываете фактический адрес операнда, например, I 124.0. Программа в этом случае не отражает физического смысла операции, и, как следствие, хуже понимается. Абсолютный адрес может быть заменен символьным именем по Вашему выбору.
Символьная адресация
При символьной адресации Вы используете вместо абсолютного адреса символическое имя (например, T_min). При вводе имен нет необходимости вписывать кавычки. Редактор делает это за Вас. Символьная адресация обеспечивает лучшую читаемость программы.
Символьная таблица
94
Вы открываете таблицу символов в LAD/STL/FBD редакторе с помощью команды меню Options -> Symbol Table. Вы можете также открыть символьную таблицу из SIMATIC Manager: выберите программу в левом подокне проекта и дважды щелкните на объекте "Symbols".
Структура таблицы
Символьная таблица содержит столбцы для символики (Symbol),
адреса (Address), типа данных (Data type) и комментария (Comment).
Символьные имена, объявленные в символьной таблице, применимы во всех частях программы и называются глобальными переменными. Вы можете присваивать имена (не более 24 символов) ячейкам памяти из областей
I,Q,M,T,C,периферии (PI/PQ), а также имена программным блокам. Для облегчения программирования и улучшения документирования программы лучше использовать комбинацию кратких имен (до 10 знаков) и длинных комментариев.
Поиск и устранение ошибок
Концепция диагностики в SIMATIC S7
Когда происходит ошибка или событие, например, переход CPU в STOP , то выполняется следующее.
В диагностический буфер вводится сообщение с датой, временем и кодом диагностического события. Самое последнее сообщение записывае тся в начале буфера (принцип FIFO). Когда буфер становится полным, самые
95
ранние записи удаляются. Содержимое буфера находится в энергонезависимой памяти и не может быть удалено при сбросе CPU.
Если предусмотрено, то событие активизирует соответствующий OB ошибки (организационный блок).
Вы открываете диагностический буфер командой меню PLC -> Module Information.
Если Вы нажмете на кнопку “Help on Event”, то откроется помощь по выделенному событию. Если Вы нажмете на кнопку “Open Block”, то Вы откроете из CPU блок, который привел к ошибке (в примере FC2).
Создание блока данных
В шаблоне блока выбираем Insert -> Block Template -> DB.
Вместо DBxxx пишем символьное имя, которое указыается в таблице символов. В области STRUCT ….END_ STRUCT необходимо заполнить переменные,
например, таким образом:
STRUCT
96
Input_1 : BOOL; // переменная для хранения входа 1
Output_2, Output_3 : BOOL; // переменные для хранения входов 2 и 3
Counter1 : INT; // Счетчик Temp2 : REAL; // Температура Pressure1 : REAL; // Давление
END_STRUCT
Создание пользовательского блока данных UDT
Вы можете создавать данные пользовательского типа (UDT) или с помощью утилиты SIMATIC Manager, выбрав сначала объект Blocks (Блоки), а затем - опции меню: Insert -> S7 Block -> Data Type (Вставка -> S7 Block -> Тип данных) или в редакторе, выбрав опции меню: File -> New (Файл -> Создать) и задав затем "UDTn" в строке "Имя объекта". Создание UDT-блока с помощью исходных текстов программ (Sources). В SCL-редакторе выберите Insert -> Block Template -> UDT. При программировании, ориентированном на создание исходных текстов программ (Sources), создание данных, определенных пользователем (UDT), выполняется при вводе данных типа STRUCT ("структура"), заключенных между ключевыми словами TYPE и END_TYPE
Объявление (Declaration): TYPE udtname :
STRUCT
komp1name : datatype := pre-assignment; komp2name : datatype := pre-assignment;
END_STRUCT; END_TYPE
TYPE, END_TYPE, STRUCT и END_STRUCT - ключевые слова; они могут быть записаны также и в нижнем регистре.
udtname - имя данных, определенных пользователем (UDT); вместо udtname Вы можете использовать абсолютный адрес UDTn.
pre-assignment - предопределенное значение переменной; komp1name, komp2name - имена отдельных компонентов структуры;
datatype - тип данных отдельных компонентов структуры; здесь могут быть использованы все типы данных, кроме POINTER и ANY.
Пример объявления переменной типа UDT:
97
Создание функции
В шаблоне блока выбираем Insert -> Block Template -> FC. Пример функции:
FUNCTION Minim_val: INT // СРАВНЕНИЕ ТРЕХ ВЕЛИЧИН, ВЫБОР НАИМЕНЬШЕЙ
VAR_INPUT
IN1, IN2 : REAL; // Входные значение функции, которые сравниваем
END_VAR
IF IN1 >= IN2 THEN
Minim_val:= 2; // Функция возвращает номер второй величины, она меньше
ELSE
Minim_val:= 1; // Функция возвращает номер первой величины, она меньше
END_IF; END_FUNCTION
Обращение к переменным и вызов функций
Для символьного обращения к переменной с именем «Counter1» в блоке с именем «Settings» необходимо записать:
Settings.Counter1
Для вызова функции Minim_val в редакторе SCL выбираем В шаблоне блока выбираем Insert -> Block Call ->
Entry point = Project
Name = Имя Вашего проекта
Внизу в левом поле нужно раскрыть дерево до папки Bloks.
В поле справа появятся все созданные блоки, необходимо выбр ать нужный, и будет осуществлен вызов:
Minim_val( IN1 := , IN2 :=);
98
Для того, чтобы функция работала, нужно записать на вход конкретные переменные (из блока DB с именем Inputs переменные с именами Val1 и Val1, тип REAL). А поскольку функция возвращает значение – записать его в другую переменную (в блок DB с именем Results в переменную min1 типа
INT):
Results.min1 := Minim_val( IN1 := Inputs.Val1,
IN2 := Inputs.Val2);
Вызов функциональных блоков двумя способами
1. Первый способ – вызов с помощью нескольких экземпляров, или экземплярных блоков данных.
Данный способ использовался в работе 4. Количество экземплярных блоков данных должно соответствовать количеству вызовов целевого функционального блока.
Целевой функциональный блок – функциональный блок, программа, предназначенная для выполнения заданной программы и последующих вызовов необходимо количество раз.
Пример создания экземплярного DB: DATA_BLOCK DB291
FB291
BEGIN END_DATA_BLOCK
Пример вызова с помощью экземпляров:
FB291.DB291(IN := InputValue); Result := DB291.OUT;
Где FB291 - целевой функциональный блок, DB291 - экземплярный блоков данных.
Вызов записывается как адрес функционального блока с последующим
адресом экземплярного блока, отделенные точкой, и далее - список параметров в скобках. В качестве адресов могут использоваться либо абсолютный, либо символьный адрес блока.
Инициализация параметров функционального блока необязательна. Так как входные/выходные параметры сложных типов сохраняются как
99
указатели, они должны быть инициализированы значащими величинами при первом вызове функционального блока. Если параметр блока не инициализирован, то он сохраняет свое последнее определенное значение. Скобки должны присутствовать в записи, даже если не инициализированы никакие параметры.
Все параметры могут быть адресованы также как глобальные данные с указанием имени экземплярного блока данных и имени параметра. В примере граничные значения определены константами. Они также могут быть инициализированы до вызова функционального блока посредством операторов присваивания:
DB291.MAX := Maximum;
DB291.MIN := Minimum;
Выходные параметры не могут быть инициализированы при вызове функционального блока. Если требуется, их значения считываются непосредственно из экземплярного блока данных и в дальнейшем обрабатываются без промежуточного хранения.
IF DB291.OUT > 10000 THEN ... END_IF; DB291.MIN := Minimum;
2. Второй способ – целевой функциональный блок как локальный экземпляр. Вызов целевого FB осуществляется с помощью дополнительного вызывающего функционального блока. В этом блоке создаются переменные (локальные экземпляры целевого FB), тип которых – это целевой функциональный блок данных, т.е. в типе данных для каждой переменной указывается имя целевого функционального блока. Каждая такая переменная соответствует вызову целевого функционального блока.
Экземплярный блок данных в этом случае понадобится только один. Вызов каждой переменной осуществляется аналогично вызову
целевого блока, но вместо выражения
«Имя_целевого_FB.Имя_экземплярного_DB» используется выражение «Имя_локального_экземпляра».
Пример: FUNCTION_BLOCK FB290
...
VAR
Delimiter : FB291;
100
