- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Обмен байтами в REAL ABCD-ABDC
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 3
- Зарегистрирован: 07 авг 2024, 07:27
- Имя: Сергей
- Страна: Казахстан
- город/регион: Сатпаев
Обмен байтами в REAL ABCD-ABDC
Здраствуйте !
Опыт программирования не очень большой, но по работе пришлось столкнуться.
Подскажите пожалуйста, как в TIA Portal можно сделать замену байтов в REAL ABCD-ABDC?
Понимаю что в 300-1500 контролерах есть функция CAW через которую можно было это реализовать, в проекте использую 1200 плк этой функции там нет! И не могу найти альтернативу как это сделать ?
Опыт программирования не очень большой, но по работе пришлось столкнуться.
Подскажите пожалуйста, как в TIA Portal можно сделать замену байтов в REAL ABCD-ABDC?
Понимаю что в 300-1500 контролерах есть функция CAW через которую можно было это реализовать, в проекте использую 1200 плк этой функции там нет! И не могу найти альтернативу как это сделать ?
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Обмен байтами в REAL ABCD-ABDC
Масками. Из 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.
Это по сложному на элементарном уровне. Зато гарантированно.
Это по сложному на элементарном уровне. Зато гарантированно.
По вопросам работы Форума можно обратиться по этим контактам.
-
- здесь недавно
- Сообщения: 3
- Зарегистрирован: 07 авг 2024, 07:27
- Имя: Сергей
- Страна: Казахстан
- город/регион: Сатпаев
Обмен байтами в REAL ABCD-ABDC
Спасибо большое за быстрый ответ, но не подскажите через какой инструмент это можно сделать по точнее?
-
- администратор
- Сообщения: 18758
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1854 раза
Обмен байтами в REAL ABCD-ABDC
Очень странный вопрос. :)
Это операции обычного сложения и умножения. А инструмент всего один - калькулятор в виндовсе, в режиме "программист" сами посмотрите что с битами происходит.
За S7 не скажу, но поищите операции "сдвиг бита" и "циклический сдвиг", они много где есть. Это всё упростит.
По вопросам работы Форума можно обратиться по этим контактам.
-
- освоился
- Сообщения: 208
- Зарегистрирован: 16 дек 2011, 15:13
- Имя: Алексей
- Страна: Россия
- Благодарил (а): 67 раз
- Поблагодарили: 53 раза
Обмен байтами в 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);
...и вообще, Jackson уже все написал...
-
- не первый раз у нас
- Сообщения: 386
- Зарегистрирован: 31 янв 2017, 11:08
- Имя: Николай
- Благодарил (а): 8 раз
- Поблагодарили: 122 раза
Обмен байтами в REAL ABCD-ABDC
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
-
- здесь недавно
- Сообщения: 3
- Зарегистрирован: 07 авг 2024, 07:27
- Имя: Сергей
- Страна: Казахстан
- город/регион: Сатпаев
-
- освоился
- Сообщения: 208
- Зарегистрирован: 16 дек 2011, 15:13
- Имя: Алексей
- Страна: Россия
- Благодарил (а): 67 раз
- Поблагодарили: 53 раза
Обмен байтами в REAL ABCD-ABDC
Спасибо, сам все время забываю о "синтаксическом сахаре" в Tia Portal-еM3f писал(а): ↑07 авг 2024, 11:17Код: Выделить всё
#word2.%B0 := #word1.%B1; #word2.%B1 := #word1.%B0;