Добрый день.
TIA 19, PLC 1214.
По Modbus RTU получаем данные со счетчика. Как обычно, порядок байт не совпадает и требуется их ручная обработка. 1-2-3-4 нужно расположить в порядке 4-3-2-1. При помощи Move все получается, но как то много и не красиво.
Помогите пожалуйста с созданием функции, на вход которой будет указываться байт 1 в DB и на выходе указываем тег Real , куда нужно записать полученное значение.
Сложности с тем как в функции получить доступ к следующим байтам в DB, 2-3-4.Данные в DB в виде байт.
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Функция записи байтов из DB в Real
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 21 мар 2023, 02:12
- Имя: Владимир
- Страна: РФ
- город/регион: Псков
- Благодарил (а): 2 раза
- Поблагодарили: 21 раз
Функция записи байтов из DB в Real
Лучше сделать универсальную функцию вместо указания какого-то там байта в какой-то ДБ.
S7-1200 поддерживают slice-доступ. Этот код должен заработать:
На входе Dword, на выходе Dword с перевёрнутыми байтами. DWORD_TO_REAL сконвертирует в вещественное.
S7-1200 поддерживают slice-доступ. Этот код должен заработать:
Код: Выделить всё
FUNCTION "ReverseBytes" : DWord
VAR_INPUT
in : DWord;
END_VAR
#ReverseBytes.%B0 := #in.%B3;
#ReverseBytes.%B1 := #in.%B2;
#ReverseBytes.%B2 := #in.%B1;
#ReverseBytes.%B3 := #in.%B0;
-
- не первый раз у нас
- Сообщения: 306
- Зарегистрирован: 26 май 2022, 12:10
- Имя: Александр
- Страна: Россия
- город/регион: lipetsk
- Благодарил (а): 5 раз
- Поблагодарили: 28 раз
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 21 мар 2023, 02:12
- Имя: Владимир
- Страна: РФ
- город/регион: Псков
- Благодарил (а): 2 раза
- Поблагодарили: 21 раз
Функция записи байтов из DB в Real
Уверен. DWORD_TO_REAL просто побитово скопирует без изменений то, что лежит в DWORD и представит как REAL. А что окажется в DWORD после перестановки уже на совести того, кто переставлял байты.
Вопрос был задан как переставить 1-2-3-4 в 4-3-2-1. Если бы спрашивали как переставить ворды и ответ был бы другой.
Если на S7-1200 отключен оптимизированный доступ к DB, то можно было бы реализовать через AT.
-
- здесь недавно
- Сообщения: 60
- Зарегистрирован: 30 ноя 2011, 15:36
- Имя: Сидоров С.И.
- Благодарил (а): 12 раз
- Поблагодарили: 1 раз
Функция записи байтов из DB в Real
Спасибо. Вроде то, что надо. Вечером проверю на железке.
Отключен. Можно пример тоже?
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 21 мар 2023, 02:12
- Имя: Владимир
- Страна: РФ
- город/регион: Псков
- Благодарил (а): 2 раза
- Поблагодарили: 21 раз
Функция записи байтов из DB в Real
Пример с AT есть по ссылке AlexandrGr. Там ворды, но с байтами суть та же.