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

Функция записи байтов из DB в Real

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

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

Ответить

Автор темы
Serega77
здесь недавно
здесь недавно
Сообщения: 60
Зарегистрирован: 30 ноя 2011, 15:36
Имя: Сидоров С.И.
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Функция записи байтов из DB в Real

Сообщение Serega77 »

Добрый день.
TIA 19, PLC 1214.
По Modbus RTU получаем данные со счетчика. Как обычно, порядок байт не совпадает и требуется их ручная обработка. 1-2-3-4 нужно расположить в порядке 4-3-2-1. При помощи Move все получается, но как то много и не красиво.

Помогите пожалуйста с созданием функции, на вход которой будет указываться байт 1 в DB и на выходе указываем тег Real , куда нужно записать полученное значение.
Сложности с тем как в функции получить доступ к следующим байтам в DB, 2-3-4.Данные в DB в виде байт.

Joshua
здесь недавно
здесь недавно
Сообщения: 98
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 21 раз

Функция записи байтов из DB в Real

Сообщение Joshua »

Лучше сделать универсальную функцию вместо указания какого-то там байта в какой-то ДБ.
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;
На входе Dword, на выходе Dword с перевёрнутыми байтами. DWORD_TO_REAL сконвертирует в вещественное.

AlexandrGr
не первый раз у нас
не первый раз у нас
Сообщения: 306
Зарегистрирован: 26 май 2022, 12:10
Имя: Александр
Страна: Россия
город/регион: lipetsk
Благодарил (а): 5 раз
Поблагодарили: 28 раз

Функция записи байтов из DB в Real

Сообщение AlexandrGr »

Joshua писал(а): 14 ноя 2024, 08:09 DWORD_TO_REAL сконвертирует в вещественное.
Вы уверены?
viewtopic.php?t=12462

Joshua
здесь недавно
здесь недавно
Сообщения: 98
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 21 раз

Функция записи байтов из DB в Real

Сообщение Joshua »

AlexandrGr писал(а): 14 ноя 2024, 09:53 Вы уверены?
Уверен. DWORD_TO_REAL просто побитово скопирует без изменений то, что лежит в DWORD и представит как REAL. А что окажется в DWORD после перестановки уже на совести того, кто переставлял байты.

Вопрос был задан как переставить 1-2-3-4 в 4-3-2-1. Если бы спрашивали как переставить ворды и ответ был бы другой.
Если на S7-1200 отключен оптимизированный доступ к DB, то можно было бы реализовать через AT.

Автор темы
Serega77
здесь недавно
здесь недавно
Сообщения: 60
Зарегистрирован: 30 ноя 2011, 15:36
Имя: Сидоров С.И.
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Функция записи байтов из DB в Real

Сообщение Serega77 »

Joshua писал(а): 14 ноя 2024, 08:09 На входе Dword, на выходе Dword с перевёрнутыми байтами. DWORD_TO_REAL сконвертирует в вещественное.
Спасибо. Вроде то, что надо. Вечером проверю на железке.
Joshua писал(а): 14 ноя 2024, 10:39 Если на S7-1200 отключен оптимизированный доступ к DB, то можно было бы реализовать через AT
Отключен. Можно пример тоже?

Joshua
здесь недавно
здесь недавно
Сообщения: 98
Зарегистрирован: 21 мар 2023, 02:12
Имя: Владимир
Страна: РФ
город/регион: Псков
Благодарил (а): 2 раза
Поблагодарили: 21 раз

Функция записи байтов из DB в Real

Сообщение Joshua »

Пример с AT есть по ссылке AlexandrGr. Там ворды, но с байтами суть та же.

Автор темы
Serega77
здесь недавно
здесь недавно
Сообщения: 60
Зарегистрирован: 30 ноя 2011, 15:36
Имя: Сидоров С.И.
Благодарил (а): 12 раз
Поблагодарили: 1 раз

Функция записи байтов из DB в Real

Сообщение Serega77 »

Принято. Спасибо.
Ответить

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