Как тегам задавать значение tia portal

Обновлено: 18.05.2024

В данной статье рассмотрим основы программирования в Tia Portal на примере структурированного языка управления SCL (Structured Control Language), являющегося высокоуровневым текстовым языком, основанным на языке PASCAL.

Данный язык поддерживает типовые операторы программирования, такие как присвоение (: =), математические функции (+ для сложения, — для вычитания, * для умножения, / для деления), а также использует стандартные операторы языка PASCAL, такие как IF-THEN-ELSE, CASE, REPEAT-UNTIL, GOTO и RETURN. Другие инструкции для SCL, такие как таймеры и счетчики, соответствуют LAD и FBD инструкциям.

Начнем мы изучение SCL с простых логических операций и математических выражений и сравним их с программированием на языке LADDER.

Ниже на рис. приведен пример FB блока на LAD, состоящий из пяти Network, в которых выполняются простые логические и математические операции, в том числе один таймер. Создадим подобный блок на языке SCL.

Tia Portal. Язык программирования SCL

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

Tia Portal SCL

Таблицу тегов будем использовать ту же самую, что и для LAD.

Начнем с самой простой задачи – логической операции AND. Значение TRUE на i1 и i2 активирует выход q1.


Комментарии в программе указываются с помощью двойной косой линии – слеша.


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

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

Переходим ко второму сегменту. В данном случае, выход будет активен, если значение хотя бы одного из входов (i1 или i3) выражения в скобках будет принимать значение TRUE и нет сигнала на входе i2.


Далее из меню основных инструкций добавим таймер с задержкой выключения — TOF. Параметры таймера указываются в скобках.


Тип таймера можно легко изменить, просто щелкнув по нему мышью.

В следующей строке напишем простое математическое выражение «А умноженное на В равно С». Если необходимо, вместо умножения можно использовать и другие операторы – сложение, вычитание, деление, сравнения и т.д.


Наконец, еще одно выражение «A + B = C», на этот раз с использованием временных переменных в функциональном блоке. В последней строке используется команда RETURN, то есть конец программного блока.


Наши последние несколько строк, написанных на SCL, заменили эти два сегмента программы LAD.


В принципе, это вся программа на SCL, которая представляет собой аналогичную программу на LAD, согласно первому рисунку в статье.

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

В следующем уроке мы продолжим изучение SCL и рассмотрим работу с детекторами фронтов, счетчиками.

Урок 14
Программирование в TIA Portal обмена данными по сети PROFINET между преобразователем частоты ATV630 и контроллером SIMATIC S7-1500

Задание

Сконфигурировать ПЧ и ПЛК так, чтобы ПЛК мог получать данные о состоянии ПЧ по сети PROFINET, и написать программу обработки данных в ПЛК.

Решение

  1. В качестве ПЧ возьмём Altivar Process ATV600, у которого на борту есть 3 разъёма RJ45:

Первый – для подключения графического дисплея:

Третий – для подключения к последовательной шине Modbus RTU:

Рис.2

Рис.9

В этом примере выбраны данные ПЧ (коммуникационные параметры) с адресами:

Рис.10

Рис.14

Адрес бита состоит из адреса байта и номера бита от 0 до 7. Например, адрес третьего бита в первом входном байте: I1.3.

В нашем преобразователе частоты биты в словах нумеруются от 0 до 15.

Если слово ST12 из ПЧ передаётся в слово IW30 в ПЛК, то какой адрес в ПЛК будет иметь бит 0 (который в слове ST12 равен 1 при обрыве аналогового сигнала на входе AI0)?

Этот бит окажется в крайнем правом положении слова IW30 (в байте IB31), его адрес: I31.0

Уроки TIA Portal, STEP7 и HMI

Урок 5
Создание фейсплаты дискретной задвижки (продолжение урока 4)

Задание

Разработать фейсплату задвижки.

Решение

  1. На основе разработанного графического интерфейса задвижки создаём фейсплату задвижки.
    Для этого в редакторе экрана панели оператора выделяем мышкой все графические элементы будущей фейсплаты, кликаем правой кнопкой и выбираем пункт меню Create faceplate:

Сбрасывать тег будем в программе ПЛК после его обработки. Потому что, если присваивать тегу 1 при нажатии кнопки (Press), и сбрасывать его при отпускании кнопки (Release), то:
1) Программа ПЛК может не успеть обработать нажатие кнопки
2) При обрыве связи между панелью оператора и ПЛК во время нажатия кнопки тег так и останется висеть в единице (и всё равно его придётся как-то сбрасывать в контроллере).

Рис. Видимость

- Выбираем подходящий тег и диапазон видимости:

Рис. Видимость

Рис. Закрытие

Рис. Связи

Рис. Название задвижки

Рис. Релиз

Рис. Опции релиза

Рис. Фейсплата мнемосхемы

Рис. Фейсплата мнемосхемы

Цветом полигона изображаем статус задвижки:
- серый – не открыто и не закрыто (среднее положение)
- белый – открыто
- черный – закрыто
- мигает белым и серым - открывается
- мигает чёрным и серым – закрывается

Цветом круга оповещаем о типе аварии:
- жёлтый – предупреждение
- красный – авария

Текстом информируем о режиме работы:
- Автоматический
- Ручной
- Местный

Уроки TIA Portal, STEP7 и HMI

Уроки TIA Portal, STEP7 и HMI

Урок 24
Уставки (Setpoints) в TIA Portal STEP7 или как не потерять настройки ПИД-регуляторов после пусконаладки

Задание

Сконфигурировать в TIA Portal уставки (Setpoints) – теги, значения которых изменяются в процессе пусконаладки (например, настроечные коэффициенты ПИД-регулятора), а в конце пусконаладки значения этих тегов могут быть сохранены в офлайн программе, как стартовые значения.

Решение

  1. Создаём блок данных, в котором хранятся коэффициенты ПИД-регулятора. Проставляем галочки в столбце Retain у тех тегов, которые должны сохранять свои значения при пропадании и восстановлении питания.

В столбце Start value задаём стартовые значения тегов (значения, которые принимают теги при перезапуске программы ПЛК).

Проставляем галочки в столбце Setpoint у тех тегов, которые являются уставками:

Рис.1

Рис.2

Рис.5

то при загрузке его в контроллер потребуется инициализация блока данных:

Рис.6

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

Рис.9

Рис.10

и сделаем онлайн копию памяти ЦПУ:

Рис.11

Рис.12

Видим, что все теги приняли свои стартовые значения:

Рис.13

Рис.14

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

Форум АСУТП

Массивы в TIA Portal

Здравствуйте!
Прошу подсказать как правильно работать с массивами в TIA Portal а лучше показать на примере?
Не до понимаю как работать с массивами. Нет желания например в большом проекте перелопачивать однотипные данные в нетворках, но пока видел только такие проекты. От одного проекта у меня волосы под мышками дыбом встали, 500 однотипных сигналов перебиральсь в ручную .

Про то что просто так массивы создать нельзя это я понял, надо создавать DB блок в котором и прописать массив.
Как например присвоить массиву значения входов с адреса %I0.0, ведь входа %I0.0-%I0.7 это массив бит.

Реализация TIA Portal с блоками DB мне показалась глупой, просто сравниваю с другой средой разработки.
Если кому не трудно можете в моём проекте показать TIA Portal 16, или в вашем. буду очень признателен.

Массивы в TIA Portal

С массивами лучше работать на языке SCL, мне кажется, вы очень нуждались в таком совете. Что касаемо копирования I,M,Q-областей в массивы, то тут надо смотреть вроде обычный MOVE или MOVE_BLK.

Массивы в TIA Portal

Здравствуйте.
Спасибо за совет.
То что с массивами необходимо работать в SCL это я понял .
Вообше предпочитаю текстовый язык.
Не совсем понял как присваивать адреса массивам.
А также назначение DB.
Попробую ваши советы и отпишусь.

Массивы в TIA Portal

Как например присвоить массиву значения входов с адреса %I0.0, ведь входа %I0.0-%I0.7 это массив бит. Ну и записывайте необходимый байт,слово,двойное слово входов в нужный DB. IB0 Move DB1.DBB0 (DB1.DBX0.0 - DB1.DBX0.7),IW0 Move DB1.DBW0 (DB1.DBX0.0 - DB1.DBX1.7),ID0 Move DB1.DBD0 (DB1.DBX0.0 - DB1.DBX3.7). Случается нередко нам
И труд и мудрость видеть там,
Где стоит только догадаться
За дело просто взяться.

Массивы в TIA Portal

ZETs , я правильно Вас понял, что Вам не нравится обращаться к дискретным входам по имени тега или по адресу типа %I0.0, а хочется обращаться через массив? Т.е. Вы бы хотели в разделе "PLC tags" объявить тип данных Array[0..xxx] of Bool, адресация которого начиналась бы с I0.0, и таким образом обращаться к дискретным входам по индексу?

Такой конструкции нет.

Вы можете воспользоваться простым присваиванием, как Вам уже написали, т.е. создать массив Array[0..xxx] of Bool в неоптимизированном DB и написать в начале программного цикла буквально несколько строк, где от 8 до 32 штук дискретных входов за раз присваивать типа

%DB0.DBD0 := %ID0;
%DB0.DBD4 := %ID4;
%DB0.DBW8 := %IW8;
%DB0.DBB10 := %ID10
и т.п.,
потом работать с этими данными в DB, обращаясь к ним по индексу вместо того, чтобы обращаться к тегам дискретных входов напрямую. Проблема - не проблема на самом деле.

Массивы в TIA Portal

I, M, Q - это древняя дремучая структура памяти из 80-х годов.
Датаблок DB - это аналог структуры struct <. >из языка С++.
DB - это вполне современная структура, но и тут есть нюанс:
1. неоптимизированный DB - датаблок дремучего типа
2. оптимизированный DB - современный датаблок.
Многие по старинке предпочитают неоптимизированные DB, иногда использование такого типа датаблока дает преимущества - по аналогии преимущества использования указателей перед ссылками в языке С++.

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

Некоторые программисты хранят свои переменные в памяти M. Это прошлый век. Надо хранить данные в датаблоке и тогда не придется думать, по какому аппаратному адресу хранятся данные.

В моих программах в памяти M хранятся только системный байт и тактовый байт, все остальные данные лежат в датаблоках DB.

Читайте также: