Передача данных Unsignet Lonr Integer , Fload по Modbus
- Grafsaxar
- Лейтенант
- Сообщения: 377
- Зарегистрирован: 06 сен 2015, 16:04
- Откуда: Маркс-Энгелс
- Имя: Alexander
Передача данных Unsignet Lonr Integer , Fload по Modbus
Всем привет.
Пытаюсь понять как расшифровать данные Unsignet Lonr Integer , Fload по Modbus
Данные передаются по 2 регистрам.
При передачи числа 200000 = Unsignet Lonr Integer в первый рег. записывает 3 во второй 3392
При передачи числа 131070 = Unsignet Lonr Integer в первый рег. записывает 1 во второй 65534
Fload
При передачи числа 2.235 = Fload в первый рег. записывает 16399 во второй 2621
При передачи числа 3.659 = Fload в первый рег. записывает 16490 во второй 11534
При передачи числа 4.1 = Fload в первый рег. записывает 16515 во второй 13107
При передачи числа 5.324 = Fload в первый рег. записывает 16554 во второй 24117
При передачи числа 1 = Fload в первый рег. записывает 16256 во второй 0
При передачи числа 5 = Fload в первый рег. записывает 16544 во второй 0
При передачи числа 10 = Fload в первый рег. записывает 16672 во второй 0
По какой формуле можно получить передаваемое число?
Какая использована логика передачи?
Пытаюсь понять как расшифровать данные Unsignet Lonr Integer , Fload по Modbus
Данные передаются по 2 регистрам.
При передачи числа 200000 = Unsignet Lonr Integer в первый рег. записывает 3 во второй 3392
При передачи числа 131070 = Unsignet Lonr Integer в первый рег. записывает 1 во второй 65534
Fload
При передачи числа 2.235 = Fload в первый рег. записывает 16399 во второй 2621
При передачи числа 3.659 = Fload в первый рег. записывает 16490 во второй 11534
При передачи числа 4.1 = Fload в первый рег. записывает 16515 во второй 13107
При передачи числа 5.324 = Fload в первый рег. записывает 16554 во второй 24117
При передачи числа 1 = Fload в первый рег. записывает 16256 во второй 0
При передачи числа 5 = Fload в первый рег. записывает 16544 во второй 0
При передачи числа 10 = Fload в первый рег. записывает 16672 во второй 0
По какой формуле можно получить передаваемое число?
Какая использована логика передачи?
Качество — это делать что-либо правильно, даже когда никто не смотрит
Передача данных Unsignet Lonr Integer , Fload по Modbus
Присоединяюсь к вопросу. пробовал привязать Arduino к Simp Lite Scada. С типом Float непонятки возникли. Если считывать регистры как Word, то всё как описано выше. Если как Float32, то в первом регистре появляется отправляемое от Arduino число, а второй регистр не читается. Пока использую только первый, но всё таки интересно как правильно обрабатывать этот тип данных.
P.S. Я так понял, при чтении первого регистра как Float32 автоматически происходит чтение двух регистров (первого и следующего за ним), где первый является старшим. Поправьте если не так.
P.S. Я так понял, при чтении первого регистра как Float32 автоматически происходит чтение двух регистров (первого и следующего за ним), где первый является старшим. Поправьте если не так.
Последний раз редактировалось Strix 06 янв 2016, 20:02, всего редактировалось 1 раз.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Передача данных Unsignet Lonr Integer , Fload по Modbus
Strix, всё правильно понимаешь - при чтении float переменных указывается их размерность (32/64), чередование байт (обычно старшим словом вперёд) и адрес первого регистра.
Grafsaxar, для вычисления float переменных необходимо, как минимум, собрать из двух наборов байт одно четырёх байтное слово - так называемую мантису (для float 23 бита), следующие 8 бит - экспонента(степень числа 2, заранее увеличенная на 127), и самый старший бит - знак числа S (1 это -, 0 это +).
А теперь формула: Значение=(-1)в сепени S * 2 в степени (
экспонента -127) * (1 + ( мантису / 8388608))
ВСЁ!!!!
Grafsaxar, для вычисления float переменных необходимо, как минимум, собрать из двух наборов байт одно четырёх байтное слово - так называемую мантису (для float 23 бита), следующие 8 бит - экспонента(степень числа 2, заранее увеличенная на 127), и самый старший бит - знак числа S (1 это -, 0 это +).
А теперь формула: Значение=(-1)в сепени S * 2 в степени (
экспонента -127) * (1 + ( мантису / 8388608))
ВСЁ!!!!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
- Grafsaxar
- Лейтенант
- Сообщения: 377
- Зарегистрирован: 06 сен 2015, 16:04
- Откуда: Маркс-Энгелс
- Имя: Alexander
Передача данных Unsignet Lonr Integer , Fload по Modbus
Наконец-то понял как шифруются данные
Если кто хочет на Scada передавать большие числа.
Вот пример Unsignet Lonr Integer
65535= reg 1=0, reg2=65535 65536=reg1=1,reg2=0
65537=reg1=1,reg2=1 65538=reg1=1,reg2=2
131070=reg1=1,reg2=65534 = 65535*2+(1+65534)
131080=reg1=2,reg2=8 = 65535*2+(2+8)
200000=reg1=3,reg2=3392 = 65535*3+(3+3392)
250000=reg1=3,reg2=53392 = 65535*3+(3+53392)
Формула : Reg1=A; Reg2=B 65535*A+(A+B)
Sancho,
Вот в твой пример ну никак не могу врубиться.
Если кто хочет на Scada передавать большие числа.
Вот пример Unsignet Lonr Integer
65535= reg 1=0, reg2=65535 65536=reg1=1,reg2=0
65537=reg1=1,reg2=1 65538=reg1=1,reg2=2
131070=reg1=1,reg2=65534 = 65535*2+(1+65534)
131080=reg1=2,reg2=8 = 65535*2+(2+8)
200000=reg1=3,reg2=3392 = 65535*3+(3+3392)
250000=reg1=3,reg2=53392 = 65535*3+(3+53392)
Формула : Reg1=A; Reg2=B 65535*A+(A+B)
Sancho,
Вот в твой пример ну никак не могу врубиться.
Качество — это делать что-либо правильно, даже когда никто не смотрит
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Передача данных Unsignet Lonr Integer , Fload по Modbus
Попробую объяснить на твоём вопросе
При передачи числа 2.235 = Fload в первый рег. записывает 16399 во второй 2621
Добавлено (12.01.2016, 14:26)
---------------------------------------------
Это касается просьбы формулы перевода....
В реальности так не делают, а поступают проще -
Создаётся необходимая переменная float, затем вычисляется её адрес,
потом по четырём адресам (4 байта - два регистра) в ячейки записываются нужные значения.
Когда контроллер работает с этой переменной, он считывает значения по адресу переменной,
и уже сам вычисляет всё, что ему надо...
Вот как-то так...
При передачи числа 2.235 = Fload в первый рег. записывает 16399 во второй 2621
Добавлено (12.01.2016, 14:26)
---------------------------------------------
Это касается просьбы формулы перевода....
В реальности так не делают, а поступают проще -
Создаётся необходимая переменная float, затем вычисляется её адрес,
потом по четырём адресам (4 байта - два регистра) в ячейки записываются нужные значения.
Когда контроллер работает с этой переменной, он считывает значения по адресу переменной,
и уже сам вычисляет всё, что ему надо...
Вот как-то так...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Передача данных Unsignet Lonr Integer , Fload по Modbus
Как всё запутано то. Спасибо что просветили. Теперь хоть уверен, что правильно всё настроил.
Последний раз редактировалось Strix 12 янв 2016, 18:09, всего редактировалось 1 раз.
- Grafsaxar
- Лейтенант
- Сообщения: 377
- Зарегистрирован: 06 сен 2015, 16:04
- Откуда: Маркс-Энгелс
- Имя: Alexander
Передача данных Unsignet Lonr Integer , Fload по Modbus
Спасибо за разжёвывание.Sancho писал(а):Sancho
Попробую это всё дело на с или паскале осуществить.
У меня почему то во встроенном Simplelite модбасе принимает данные только с Slave 1 , с адресом 2 никаких данных не получает .
Качество — это делать что-либо правильно, даже когда никто не смотрит
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Передача данных Unsignet Lonr Integer , Fload по Modbus
Я для проверок корректной работы модбас слэйвов пользусь отличным, на мой взгляд, Universal Modbus Server от инсат.
Он бесплатен на 32 тега. Поддерживает все типы соединений.
Можно проверить как чтение, так и запись любых переменных, правильность адресов и т.д. и т. п.
Он бесплатен на 32 тега. Поддерживает все типы соединений.
Можно проверить как чтение, так и запись любых переменных, правильность адресов и т.д. и т. п.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Передача данных Unsignet Lonr Integer , Fload по Modbus
Честно говоря я так и не понял алгоритм передачи длинного числа
Подскажи , плз, как дешифровать например число 999999 ?? Спасибо!



Подскажи , плз, как дешифровать например число 999999 ?? Спасибо!
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Передача данных Unsignet Lonr Integer , Fload по Modbus
[ref]pwal1969[/ref], Отправляйте такое целое число просто через Holding Registr.
Или что именно у Вас не выходит?
Приложите проект - будет намного понятнее...
Или что именно у Вас не выходит?
Приложите проект - будет намного понятнее...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Передача данных Unsignet Lonr Integer , Fload по Modbus
Мне нужно передать число 999999(максимально возможное число на электросчетчике) через Holding Registr.
Оно занимает 2 ячейки, на мастер приходит число 16959 и 15
как их "слепить" в 999999 не могу понять

Оно занимает 2 ячейки, на мастер приходит число 16959 и 15
как их "слепить" в 999999 не могу понять


- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Передача данных Unsignet Lonr Integer , Fload по Modbus
[ref]pwal1969[/ref], А кто мастер?
Отправлено спустя 2 минуты 58 секунд:
Самый простой, но не совсем правильный вариант :
15/второе умножаете на const 65536 и прибавляете первое
Отправлено спустя 2 минуты 58 секунд:
Самый простой, но не совсем правильный вариант :
15/второе умножаете на const 65536 и прибавляете первое
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Передача данных Unsignet Lonr Integer , Fload по Modbus
qModMaster
но так то будет считывать данные деймон , а он только инт понимает
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Передача данных Unsignet Lonr Integer , Fload по Modbus
Не знаю, можно ссылку или поподробнее?
Но в таких случаях - укажите размерность числа 32 и адрес первой ячейки.
Отправлено спустя 48 секунд:
32 в ардуино - это типы long
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Передача данных Unsignet Lonr Integer , Fload по Modbus
деймон написан индивидуально для опроса слейвов,и складывает данные в mysql сервер под линуксом
получается что он считывает 2 ячейки у слейва заносит их в таблицу sql вопрос - как дешифровать их обратно????
Отправлено спустя 1 минуту 33 секунды:
вот скрин, стрелками указаны число https://yadi.sk/i/0JyGUxCc8-oIeQ
получается что он считывает 2 ячейки у слейва заносит их в таблицу sql вопрос - как дешифровать их обратно????
Отправлено спустя 1 минуту 33 секунды:
вот скрин, стрелками указаны число https://yadi.sk/i/0JyGUxCc8-oIeQ
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Передача данных Unsignet Lonr Integer , Fload по Modbus
Отправлено спустя 2 минуты 8 секунд:
rezult = a * 65536 + b // rezult - 32 битный тип
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей