Инструкции TIA Portal

Операции перемещения
Передача и управление данными

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

Что такое операции перемещения в TIA Portal?

Операции перемещения позволяют копировать данные из одного места памяти в другое. Они варьируются от простого копирования переменной (MOVE) до сложной манипуляции целыми структурами для связи (Serialize/Deserialize) или управления непрерывными областями данных (MOVE_BLK).

TIA Portal предлагает современные инструкции для символьного доступа, динамического управления через типы Variant и оптимизированные функции для Array DB, сохраняя при этом инструкции Legacy для совместимости со старыми системами S7-300.

Базовая передача

Фундаментальные инструкции копирования и форматирования

MOVE — Копировать значение

MOVE

Что она делает

Копирует содержимое входа IN на выход OUT. Если типы данных различаются, может произойти неявное преобразование, если оно безопасно.

Когда использовать

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

Советы профи

Вы можете добавить несколько выходов (OUT1, OUT2...), чтобы скопировать значение в несколько мест одновременно.

В SCL просто используйте присваивание: destination := source;

Работает почти со всеми типами данных (Bool, Int, Real, Struct, String).

Serialize / Deserialize

SER

Что они делают

Serialize преобразует сложную структуру в последовательный поток байтов (Array of Byte). Deserialize делает обратное.

Когда использовать

Подготовка данных для отправки по протоколам связи (TCP/IP, UDP) или компактного хранения.

Советы профи

Используйте параметр POS для отслеживания индекса заполнения в целевом буфере.

Необходимо для обмена с системами сторонних производителей, которые не понимают UDT Siemens.

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

SWAP — Переставить байты

SWAP

Что она делает

Меняет порядок байтов (Endianness) в операнде IN.

Когда использовать

Связь с устройствами, использующими формат 'Little-Endian', когда ПЛК использует 'Big-Endian'.

Советы профи

Обычно используется для типов Word или DWord.

Полезно для обработки данных от определенных датчиков Modbus.

Можно использовать для переупорядочивания ASCII-кодов, полученных в обратном порядке.

Перемещение блоков

Манипуляция массивными и непрерывными областями памяти

MOVE_BLK / UMOVE_BLK

MOVE_BLK

Что она делает

Копирует определенное количество элементов из исходного массива в целевой. UMOVE_BLK — это непрерываемая (атомарная) версия.

Когда использовать

Управление буферами, архивирование исторических данных или дублирование рецептов изготовления.

Советы профи

Начальный индекс (COUNT) определяет количество копируемых элементов.

UMOVE_BLK гарантирует, что данные не будут изменены прерыванием (OB) во время копирования.

Типы данных источника и назначения должны быть идентичными.

MOVE_BLK_VARIANT

Что она делает

Расширенная версия MOVE_BLK, поддерживающая типы данных Variant для гибкой адресации.

Когда использовать

Разработка переиспользуемых библиотечных блоков, работающих с массивами разных размеров или типов.

Советы профи

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

Используйте CountOfElements для автоматизации параметра COUNT.

Очень мощный инструмент в S7-1500 для общего программирования.

Заполнение области

Быстрая инициализация диапазонов памяти

FILL_BLK / UFILL_BLK

FILL

Что она делает

Заполняет область памяти (массив) одним значением, указанным на входе IN.

Когда использовать

Сброс массива измерений в ноль или инициализация буфера значением по умолчанию.

Советы профи

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

Намного эффективнее, чем цикл FOR для инициализации большого массива.

COUNT указывает количество элементов для заполнения, начиная с указанного указателя.

Scatter / Gather

Разложение и композиция битов

SCATTER / GATHER

Что они делают

SCATTER раскладывает слово (Word, DWord...) на отдельные биты в структуру или массив. GATHER делает обратное.

Когда использовать

Извлечение битов состояния из слова диагностики или формирование командного слова из контрольных битов.

Советы профи

Выгодно заменяет множество доступов к битам (например, %X0).

Доступно на S7-1200 и S7-1500.

Обеспечивает более чистый и простой в обслуживании код.

Доступ к Array DB

Чтение и запись в блоках данных типа массив

ReadFromArrayDB / WriteToArrayDB

Что они делают

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

Когда использовать

Управление большими списками данных, где индексация должна быть динамической и быстрой.

Советы профи

Версии 'L' (например, ReadFromArrayDBL) обращаются к загрузочной памяти (Load Memory) для редко используемых данных.

Использование Array DB часто эффективнее, чем классический индексный доступ.

Убедитесь, что индекс находится в допустимых пределах во избежание ошибки доступа.

Манипуляция Variant

Инструменты для динамического программирования

VariantGet / VariantPut

Что они делают

VariantGet извлекает значение переменной Variant в типизированную переменную. VariantPut записывает типизированное значение в переменную Variant.

Когда использовать

Обработка данных, точный тип которых известен только в момент вызова блока.

Советы профи

Используйте EQ_Type для проверки типа перед извлечением значения.

Фундаментально для создания общих функций связи.

CountOfElements возвращает количество элементов, если Variant указывает на массив.

Границы массива

Динамическое определение пределов

LOWER_BOUND / UPPER_BOUND

Что она делает

Возвращает нижнюю (LOWER) или верхнюю (UPPER) границу массива, переданного как параметр Variant.

Когда использовать

Цикл по массиву неизвестного размера (например, Array[*] of MyUDT).

Советы профи

Необходимо для написания надежных циклов FOR: FOR i := LOWER_BOUND(...) TO UPPER_BOUND(...) DO

Работает как с одномерными, так и с многомерными массивами.

Параметр DIM указывает желаемую размерность (по умолчанию 1).

Инструкции Legacy

Совместимость со старыми системами S7-300/400

Инструкции, такие как BLKMOV, FILL и FieldRead/FieldWrite, сохранены для совместимости. Для новых проектов S7-1200/1500 предпочтительнее MOVE_BLK, FILL_BLK и прямой символьный доступ.

Сравнение методов копирования

Выбор правильной инструкции передачи

Вам нужно...Рекомендуемая инструкцияПример
Копировать простую переменнуюMOVEУставка -> Текущее
Копировать область памятиMOVE_BLKБуфер FIFO
Инициализировать массивFILL_BLKСброс ошибок
Подготовить сообщение TCPSerializeСтруктура -> Поток байтов
Разбить слово на битыSCATTERДиагностика слова -> структура
Динамический доступVARIANTУниверсальный библиотечный блок

Часто задаваемые вопросы

В чем разница между MOVE и MOVE_BLK?

MOVE предназначен для копирования одного значения или целой структуры за раз. MOVE_BLK оптимизирован для копирования части массива (определенного количества последовательных элементов).

Зачем использовать UMOVE_BLK вместо MOVE_BLK?

Буква 'U' означает Uninterruptible (непрерываемый). Эта инструкция гарантирует, что операция копирования не будет прервана циклом прерывания (приоритетными OB), обеспечивая полную согласованность скопированных данных.

Когда использовать Serialize и Deserialize?

Эти инструкции жизненно важны, когда вам нужно отправить структурированные данные через 'сырые' протоколы, такие как TSEND/TRCV, или на оборудование сторонних производителей. Они управляют выравниванием байтов стандартным образом.

Работает ли MOVE_BLK с абсолютными адресами (P#DB1.DBX0.0...)?

Да, но TIA Portal поощряет использование символьного доступа. Для сложной абсолютной адресации все еще используется BLKMOV (Legacy), хотя MOVE_BLK_VARIANT является рекомендуемым современным решением.

Автоматизируйте передачу данных

Опишите вашу потребность в манипулировании данными, и T-IA Connect сгенерирует оптимизированные блоки MOVE и Serialize для вашего приложения.