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

Обмен байтами в REAL ABCD-ABDC

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

Ответить

Автор темы
sergo978
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 авг 2024, 07:27
Имя: Сергей
Страна: Казахстан
город/регион: Сатпаев

Обмен байтами в REAL ABCD-ABDC

Сообщение sergo978 »

Здраствуйте !
Опыт программирования не очень большой, но по работе пришлось столкнуться.
Подскажите пожалуйста, как в TIA Portal можно сделать замену байтов в REAL ABCD-ABDC?
Понимаю что в 300-1500 контролерах есть функция CAW через которую можно было это реализовать, в проекте использую 1200 плк этой функции там нет! И не могу найти альтернативу как это сделать ?
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 18747
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 972 раза
Поблагодарили: 1852 раза

Обмен байтами в REAL ABCD-ABDC

Сообщение Jackson »

Масками. Из DWORD выделяете два слова WORD_AB с AB и WORD_CD с CD. Затем из слова WORD_CD выделяете ещё два слова WORD_C содержащее только C и WORD_D содержащее только D. Затем сдвигаете биты, закидывая в старшие биты D а в младшие C. Затем WORD_2 = WORD_C + WORD_D. Затем преобразуете WORD_AB в DWORD_AB и в нём делаете то же самое - сдвигаете младшие 16 бит в старшие 16 бит. Затем WORD_2 преобразуете в DWORD_2. И, наконец, результат DWORD_RESULT = DWORD_AB + DWORD_2.

Это по сложному на элементарном уровне. Зато гарантированно.
По вопросам работы Форума можно обратиться по этим контактам.

Автор темы
sergo978
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 авг 2024, 07:27
Имя: Сергей
Страна: Казахстан
город/регион: Сатпаев

Обмен байтами в REAL ABCD-ABDC

Сообщение sergo978 »

Спасибо большое за быстрый ответ, но не подскажите через какой инструмент это можно сделать по точнее?
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 18747
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 972 раза
Поблагодарили: 1852 раза

Обмен байтами в REAL ABCD-ABDC

Сообщение Jackson »

sergo978 писал(а): 07 авг 2024, 08:49 Спасибо большое за быстрый ответ, но не подскажите через какой инструмент это можно сделать по точнее?
Очень странный вопрос. :)
Это операции обычного сложения и умножения. А инструмент всего один - калькулятор в виндовсе, в режиме "программист" сами посмотрите что с битами происходит.

За S7 не скажу, но поищите операции "сдвиг бита" и "циклический сдвиг", они много где есть. Это всё упростит.
По вопросам работы Форума можно обратиться по этим контактам.

LexSL
освоился
освоился
Сообщения: 208
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 67 раз
Поблагодарили: 53 раза

Обмен байтами в REAL ABCD-ABDC

Сообщение LexSL »

sergo978 писал(а): 07 авг 2024, 07:58 Подскажите пожалуйста, как в TIA Portal можно сделать замену байтов в REAL ABCD-ABDC?
Перестановка слов в REAL тут

а в слове байты поменять так:

Код: Выделить всё

...
псевдокод SCL, пишу на память:
old_word : WORD;
new_word : WORD;
new_word := SHL(IN:= (old_word AND 16#FF), N:= 8) + SHR(IN:= (old_word AND 16#FF00), N:=8); 
и там же по ссылке в конце темы функция STL CAW.
...и вообще, Jackson уже все написал...
Аватара пользователя

M3f
не первый раз у нас
не первый раз у нас
Сообщения: 386
Зарегистрирован: 31 янв 2017, 11:08
Имя: Николай
Благодарил (а): 8 раз
Поблагодарили: 122 раза

Обмен байтами в REAL ABCD-ABDC

Сообщение M3f »

sergo978, в дополнение к выше сказанному, еще можно воспользоваться функцией SWAP (для 1200 и 1500 ПЛК).

Код: Выделить всё

"Tag_Result" := SWAP("Tag_Value");
// Tag_Value = 0000 1111 0101 0101
// Tag_Result = 0101 0101 0000 1111
или

Код: Выделить всё

#word2.%B0 := #word1.%B1;
#word2.%B1 := #word1.%B0;
Последний раз редактировалось M3f 07 авг 2024, 11:28, всего редактировалось 1 раз.
EPLAN Electric P8 Professional+ 2.7 HF1 11496 | TIA Portal Professional V17 Upd1 | Creo Parametric 4.0 M070

Автор темы
sergo978
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 авг 2024, 07:27
Имя: Сергей
Страна: Казахстан
город/регион: Сатпаев

Обмен байтами в REAL ABCD-ABDC

Сообщение sergo978 »

При много всем благодарен !!!!

LexSL
освоился
освоился
Сообщения: 208
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 67 раз
Поблагодарили: 53 раза

Обмен байтами в REAL ABCD-ABDC

Сообщение LexSL »

M3f писал(а): 07 авг 2024, 11:17

Код: Выделить всё

#word2.%B0 := #word1.%B1;
#word2.%B1 := #word1.%B0;
Спасибо, сам все время забываю о "синтаксическом сахаре" в Tia Portal-е
Ответить

Вернуться в «Общие вопросы»