Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 36

Тема: ПР-200 переменные с плавающей точкой Float32 и Home assistant

  1. #21
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,750

    По умолчанию

    Валенок вчера было вчера, просто взял опять из лога ПР200, а RAW это из калькулятора в нете, как видно по нему, байты не переставляются. 99 9A - это одно слово, 41 F1 это второе слово, замена их местами дает правильный результат.
    Последний раз редактировалось melky; 31.01.2022 в 10:05.

  2. #22
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,750

    По умолчанию

    Валенок простите, а какая разница с какого регистра оно в ПР ? если вторым регистром передается следующий ? Это вам не ПЛК, тут пофигу четным его сделаешь или нечетным.
    В моем случае регистры всех float начинаются с нечетных, потому что первым стоит у меня ushort (2 байта) а потом уже пошли float-ы

    В ПР нет выравнивания как в ПЛК Овен
    Последний раз редактировалось melky; 31.01.2022 в 10:15.

  3. #23

    По умолчанию

    спасибо за помощь все получилось
    конечный код
    - type: rtuovertcp
    host: 192.168.43.45 # ip шлюза через который подключен прибор к home assistant
    port: 502 # порт шлюза
    name: "hub1"
    close_comm_on_error: true
    delay: 5
    timeout: 5
    sensors:
    - name: sensor1
    slave: 17 #(номер устройства в сети)
    address: 528 #(адресс переменной)
    swap: word #(смена порядка чтения бит на 3412)
    precision: 2 #(число знаков после запятой)
    data_type: float32
    пробелы не отображаются корректно в форуме но общий вид кода верен
    все приборы работают в режиме Slave
    подробности и точный код по ссылке https://4pda.to/forum/index.php?show...entry112873472
    Последний раз редактировалось sergkovalev; 31.01.2022 в 11:01.

  4. #24
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,750

    По умолчанию

    Валенок, неа (00 00 (это 2 байта ushort) 00 00 00 00 (это 4 байта UTC время у меня) 99 9A.. а уже это и далее это float у меня )
    Опять же, адрес с 0 то есть 2 байта = 0, 4 байта 1 и 2, далее float. А если сравнивать с ПЛК100 например, то еще бы пару байт образовалось перед float но на ПР нет выравнивания, можно лепить куда и как угодно.

    Да не структура это, просто так переменные в ПР расположил. Порядок байт для всех float установлен 2301(3412 для других систем) в общей настройке, по этому тут на скрине нет указания на порядок.
    Изображения Изображения
    Последний раз редактировалось melky; 31.01.2022 в 12:06.

  5. #25
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,750

    По умолчанию

    Валенок Не знаю, что тут странного, RAW это отображение числа, как оно должно быть 0х41 (самый старший байт) 0хF1 (младшее) 0х99 (еще младшее) 0х9A (самый младший байт) когда в онлайн калькулятор подставляешь 99 9A 41 F1 - он говорит, что это Float - Mid-Little Endian (CDAB) тут буквенный порядок байт, что соответствует 3412.

    Есть масса онлайн калькуляторов, по которым можно проверить, что надо переставить, зная реальное число

    Соответственно если вам надо в ПЛК превратить в правильное число то надо правильно расположить, как впрочем и в ПК.

    А че, в ST массивы с 1-цы ? ООООО

    http://www.binaryconvert.com/result_...cimal=41F1999A ну вот например, так что 9A тут самый младший байт
    Последний раз редактировалось melky; 31.01.2022 в 22:41.

  6. #26
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,750

    По умолчанию

    Валенок честно, никогда не запаривался с Modbus, хватало калькуляторов, чтобы понять, какой порядок прописать для перестановки байт из устройства, просто считав любой float, пока ни разу не ошибался.

    Если вы про OSI, можно покопаться в исходниках Modbus драйвера, ну или просто спросить у разработчика.

    Факт остается фактом, из ПР200 на Scada, HA достаточно было переставить как я написал и не париться.

  7. #27
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,750

    По умолчанию

    Валенок Ну? регистр СТАРШИМ байтом вперед, 99 9A как раз и есть 99 старший байт, 9A младший байт - что не так то? Так же как и 41 старший байт а F1 младший байт. Переставив местами и получаем 0x41F1999A что соответствует нашему числу.

    Другое дело, что из массива байт в языках должно быть [9A 99 F1 41] чтобы преобразовать его во float, думаю не только в C#, то есть именно массив байт преобразовать нужно такое расположение если у нас архитектура процессора LittleEndian. Вот именно этим похоже и занимается сам драйвер Modbus.
    А нам какое дело лезть в дебри? не на ПЛК же разбор полетов устраиваем, разбирая принятый массив.

  8. #28

    По умолчанию

    Здравствуйте. Нужно было передать значение с аналогового входа ПР200 (температура от PT100) в телемеханикалайт, соответственно возникла та же проблема, что у ТС. Полученное значение (флот32) умножил на 100 и преобразовал в int, передал в скаду и разделил на 100.

  9. #29

    По умолчанию

    Цитата Сообщение от McCay Посмотреть сообщение
    Здравствуйте. Нужно было передать значение с аналогового входа ПР200 (температура от PT100) в телемеханикалайт, соответственно возникла та же проблема, что у ТС. Полученное значение (флот32) умножил на 100 и преобразовал в int, передал в скаду и разделил на 100.
    Это один из вариантов, когда нужно экономить сетевые регистры, но если у Вас будет отрицательная температура, появятся другие "костыли".

    Вычитать правильно float, займет с перебором всех 4 вариантов две минуты, с любого прибора, SCADA, при этом можно даже не задумываться кто и где переворачивает байты/регистры.
    Вставляем в slave константу во float, в мастере перебираем варианты до получения правильного значения, все.

    Вторая тема за неделю, 10 страниц инфы, но для новичка, полезности 0
    С уважением, Ревака Юрий.
    Инженер группы технической поддержки компании "ОВЕН"
    e-mail: yu.revaka@owen.ru

    Шаблон описания ошибки ПР или OL http://ftp-ow.owen.ru/softupdate/OWE...s/Shablon.docx
    Видео уроки по ПР200 и OWEN Logic http://edu.owen.ru/series/pr200_rev/
    Другие видеоролики по тематике ПР https://www.youtube.com/channel/UCj4...H5H3d_t6iDlQOQ

  10. #30

    По умолчанию

    проблема в том что в овен лоджик если ставить мастер при одной сетевой плате то все сетевые переменные блокируются от сюда и все тараканы народ не хочет пр загонять в мастер
    плюс я так же не понимаю как обратится к мастеру по сети, если со слейвом нужно указать номер устройства славе- то в режиме мастер номер устройства просто отсутствует
    по мне так заморочки с переносом сетевых переменных просто сильно усложняют проект и съедают кучу памяти. -поправьте если не прав я сам не разу не переводил устройство в режим мастер как раз из за того что не хочется напасть на другие грабли
    плюс конечный итог в режиме славе порядок байт всегда один а с матером при связки большого количества приборов можно запутаться пропадает универсальность .
    Последний раз редактировалось sergkovalev; 01.02.2022 в 16:48.

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Как разбить одно число с плавающей точкой, на два целых?
    от Сыродел в разделе Среда программирования OWEN Logic
    Ответов: 4
    Последнее сообщение: 06.04.2020, 23:17
  2. Ответов: 3
    Последнее сообщение: 09.11.2018, 08:05
  3. Сетевой обмен данными с плавающей точкой
    от LamSer в разделе Программируемые реле
    Ответов: 13
    Последнее сообщение: 10.03.2017, 14:44
  4. Выбор из чисел с плавающей точкой
    от anthrwpos в разделе Среда программирования OWEN Logic
    Ответов: 2
    Последнее сообщение: 14.02.2017, 10:03
  5. Ответов: 1
    Последнее сообщение: 22.10.2010, 10:24

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •