Добрый день, форумчане!
стоит задача подружить контроллеры фирмы "нефтеавтоматика" MK-502CPU и контроллер "ПроСОФТ Системы" R500S CU 00 851 по протоколу Modbus TCP. MK502 master соответственно R500S slave. Для теста передаем значения счетчика(REAL), который считает от 0 до 1000 с шагом 10, вроде бы все хорошо, значения видим, но при передаче в момент когда счетчик досчитывает до 520, шаг становиться 8 + в соседнем регистре появляется "хвост" аля 4.5917748078995605780028770985244e-41. Сталкивался кто-то с данной проблемой? Может подскажите куда копать?
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Modbus Nafta и RegLab
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 2
- Зарегистрирован: 09 июл 2020, 13:27
- Имя: Николай
- Страна: Россия
- город/регион: Омск
-
- не первый раз у нас
- Сообщения: 396
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 12 раз
- Поблагодарили: 54 раза
Modbus Nafta и RegLab
Порядок слов, раз real (float), наверное. Если счётчик целочисленный, то для теста можно было бы и int/uint взять, как раз одно слово. А для real что-нибудь действительно с плавающей точкой взять, хотя бы и константу - чтобы порядок слов проверить.
-
- администратор
- Сообщения: 18747
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 972 раза
- Поблагодарили: 1852 раза
Modbus Nafta и RegLab
Опять 25! Нет на TCP мастеров и слейвов. Есть серверы и клиенты.
Все сталкивались. Берите модбаспул и читайте нужное, наблюдайте. Скорее всего у Вас неправильный порядок слов в телеграмме. Может случиться что значение не просто float а double float, но это вряд ли - описание регистров посмотрите, раздел "типы данных". Кстати там же должны быть и примеры чтения разных значений. На крайняк можно взять сниффер и сравнить Ваш обмен данными с примерами из мануала.
В соседнем не регистре а регистрах, float - 4 байта.
По вопросам работы Форума можно обратиться по этим контактам.
-
- специалист
- Сообщения: 600
- Зарегистрирован: 08 авг 2008, 10:43
- Имя: Щукин Андрей Александрович
- Страна: Россия
- город/регион: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 63 раза
Modbus Nafta и RegLab
В контроллерах по разному принимаются старшие и младшие байты передаваемых данных. У некоторых контроллеров это можно поменять в настройках связи/Modbus.
Если этого нет, то в библиотеке OSCAT для Codesys, который в Регуле, есть блоки SWAP_BYTE для 16 и 32 битных данных.
Для общего развития: https://ru.wikipedia.org/wiki/Порядок_байтов
Если этого нет, то в библиотеке OSCAT для Codesys, который в Регуле, есть блоки SWAP_BYTE для 16 и 32 битных данных.
Для общего развития: https://ru.wikipedia.org/wiki/Порядок_байтов
Авторы ТЗ, с которыми я работаю, не имеют права жаловаться на дороги, ЖКХ, бюрократию и правительство.
-
- здесь недавно
- Сообщения: 98
- Зарегистрирован: 21 мар 2023, 02:12
- Имя: Владимир
- Страна: РФ
- город/регион: Псков
- Благодарил (а): 2 раза
- Поблагодарили: 21 раз
Modbus Nafta и RegLab
Чтобы окончательно всех запутать возьмём ещё "Modbus RTU over TCP".
bngGLORY, вы пытаетесь прочитать REAL из одного регистра (2 байт), когда его нужно читать из двух соседних (4 байта). Скорее всего у вас ещё неявное преобразование word - int - real.
Есть полезный конвертер для проверки FLOAT, пощёлкайте для лучшего понимания.
В вашем случае вводим 520.0 - получаем 0х44020000 в HEX. Вводим 530.0 - получаем 0x44048000, проверим регистры по отдельности вводом их в поле HEX: 0x4404_0000 - это 528 (520 + 8 шаг), 0x0000_8000 - это искомое вами 4.591774807899560578002877E-41.
При проверке вещественных чисел шаг делайте с приращением дробной части, желательно чтобы и мантисса и экспонента менялись.
-
- не первый раз у нас
- Сообщения: 396
- Зарегистрирован: 28 сен 2022, 15:26
- Имя: Андрей
- Благодарил (а): 12 раз
- Поблагодарили: 54 раза
Modbus Nafta и RegLab
Интересно. Думаете, что если он неделю назад даже "мяу" в ответ не сказал, то за прошедшее время что-то изменилось?