1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Обмен байтами внутри REAL

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)

Модератор: Глоб.модераторы

Ответить

Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 53
Зарегистрирован: 05 июл 2011, 16:03
Имя: Леонов Александр Сергеевич
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Обмен байтами внутри REAL

Сообщение Большой Зелёный »

Здравствуйте!
Недавно начал осваивать TIA Portal V13 вместо уже почти родного Step 7 V5.5.
Многое непривычно и непонятно.
Возникла проблема - в общих блоках данных не прописывается смещение переменных. В экземплярных блоках данных прописывается,а тут нет. Раньше я, зная точный адрес переменных с плавающей точкой внутри блока данных, мог поменять у них старшее слово с младшим (это нужно для связи с панелью оператора). А теперь фиг. Возможно, есть какая-то хитрая настройка, которая показывает смещение в общих блоках данных?
Впрочем, скорее всего, эта задача имеет другое решение, более человеческое.
В кодезисе я подобную задачу решал через указатели и циклический сдвиг.
А тут попал в тупик.
Подскажите, пожалуйста, как в TIA Portal легче всего поменять старшее и младшее слова местами внутри переменной типа REAL.

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Обмен байтами внутри REAL

Сообщение winb »

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

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

Обмен байтами внутри REAL

Сообщение Михайло »

Используй функцию SWAP для обмена байтов. По возможности не используй устаревшую технологию со смещением, но если что, там галочка в свойствах датаблоков убирается...

Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 53
Зарегистрирован: 05 июл 2011, 16:03
Имя: Леонов Александр Сергеевич
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Обмен байтами внутри REAL

Сообщение Большой Зелёный »

По поводу функции SWAP. Меня очень смутило, что в качестве входных переменных в хелпе указаны типы DWORD и WORD, а мне требуется поменять байты внутри REAL.

Михайло
эксперт
эксперт
Сообщения: 3643
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 8 раз
Поблагодарили: 286 раз

Обмен байтами внутри REAL

Сообщение Михайло »

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

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Обмен байтами внутри REAL

Сообщение winb »

А в TIA инструкции CAD больше нет? Для S7-300-400 должна быть, ей и приводил данные REAL из мотороловского формата к интеловскому.

Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 53
Зарегистрирован: 05 июл 2011, 16:03
Имя: Леонов Александр Сергеевич
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Обмен байтами внутри REAL

Сообщение Большой Зелёный »

Опять же, судя по хелпу, команда CAD меняет байты с ABCD на DCBA. А надо ABCD на CDAB. Хотя, в комбинации с командой CAW должно сработать.

Автор темы
Большой Зелёный
здесь недавно
здесь недавно
Сообщения: 53
Зарегистрирован: 05 июл 2011, 16:03
Имя: Леонов Александр Сергеевич
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Обмен байтами внутри REAL

Сообщение Большой Зелёный »

Попробовал последний вариант с комбинацией команд CAW и CAD:
L #X_Direct
CAW
T #Internal_1
L #Internal_1
CAD
T #Internal_2
L #Internal_2
CAW
T #Z_Real
Все переменные типа Real. В итоге получил то, что хотел: ABCD -> CDAB.
Всем спасибо за помощь :ges_up:
:thankyou:
Ответить

Вернуться в «Simatic Step7»