|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
||||||
Как передать по modbus float08.06.2016, 15:36. Показов 25183. Ответов 23
Метки нет (Все метки)
Если я хочу передать по modbus float я разбиваю его на 4 байта и формирую 2 регистра, код прикладываю:
0
|
||||||
| 08.06.2016, 15:36 | |
|
Ответы с готовыми решениями:
23
Как переслать float по modbus?
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
||||||||
| 08.06.2016, 18:49 | ||||||||
|
_SayHelli, один вопрос одна тема
правила п 4.4
например так
2
|
||||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 08.06.2016, 19:49 [ТС] | |
|
ValeryS, то есть я регистры снова бью на байты а потом складываю их в массив? а не ch[3]? ведь там 4 байта вроде как
0
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
||||||||
| 08.06.2016, 20:41 | ||||||||
|
можешь сразу в объединение внести переменную типа регистр, я, к сожалению не знаю что это такое
0
|
||||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|||||||||||
| 08.06.2016, 20:59 [ТС] | |||||||||||
|
ValeryS, float - > 4 байта, ячейки массива итовые -> 2 байта. чтобы поместить туда float, я разбиваю его на 4 байта, объединяю их в инт и кладу в регистр по 2 байта.
1
|
|||||||||||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
|||||||||
| 08.06.2016, 21:21 | |||||||||
Сообщение было отмечено _SayHello как решение
Решение при объявлении число в скобках это количество элементов, а при обращении индекс
1
|
|||||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 09.06.2016, 11:33 [ТС] | |
|
ValeryS, спасибо замутил через union заработало)
0
|
|
|
0 / 0 / 0
Регистрация: 18.07.2019
Сообщений: 7
|
||||||
| 18.07.2019, 15:09 | ||||||
|
напишите пожалуйста подробно, ка Вы сделали обратное преобразование в float?
У меня есть 2 регистра принятых мастером с преобразованым float в байты, как Вы указали вначале тымы. Эти регистры в программе Ардуино(С++) называются au16data[0] и au16data[1], у них тип uint16_t Как правильно написать это объединение для моих регистров?
0
|
||||||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
|
| 18.07.2019, 15:25 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 18.07.2019
Сообщений: 7
|
|||||||||||
| 18.07.2019, 15:43 | |||||||||||
|
помогите пожалуйста правильно записать эту конструкцию.
У меня так: -обьявление переменных
*код программы, где принимаются данные и записываются в два регистра au16data *
Что я не так сделал?
0
|
|||||||||||
|
Модератор
|
|||||||||||
| 18.07.2019, 15:54 | |||||||||||
|
Я так понимаю, что после обращения к прибору по Modbus имеется результат в виде массива
C uint_16 au16data[100];
Единственно, уточняйте порядок байт в принятом числе. Мне доводилось для принятых двух слов обменивать порядок следования и пословно и побайтно. Это есть в документации на прибор. Например, для ОВЕН ТРМ212 после приёма числа потребуется поменять порядок с 0 1 2 3 на 3 2 1 0. Для ВКТ5 я менял только слова: с 0 1 2 3 на 2 3 0 1. Не знаю только, как это на C показать. Добавлено через 10 минут Вернее,
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 18.07.2019
Сообщений: 7
|
|
| 18.07.2019, 16:08 | |
|
а что делать со вторым регистром au16data[1] ?
0
|
|
|
Модератор
|
|
| 18.07.2019, 16:20 | |
|
Он уже учёлся в приведении типов (typecast). Элементы au16data[0] и au16data[1] занимают последовательные ячейки памяти.
Кроме union можно использовать typecast и адресную арифметику, как в примере Как сохранить float в переменной типа char? Добавлено через 2 минуты У вас есть эталонные корректные значения au16data и t? Приведите их.
0
|
|
|
0 / 0 / 0
Регистрация: 18.07.2019
Сообщений: 7
|
|
| 18.07.2019, 16:29 | |
|
а что такое single?
0
|
|
|
Модератор
|
|||||||||||
| 18.07.2019, 18:33 | |||||||||||
|
это float, только в других языках программирования. Только размер типа float зависит от компилятора, а single - однозначно 32 бита. Плохо знаю C/C++ и путаю ключевые слова из других языков.
Вам главное смысл уловить. Добавлено через 50 минут Набрал в gcc для компьютера тестовую программку. Рассмотрел четыре случая: 1. чудной с использованием union 2. принят массив с правильным расположением байт 3. принят массив с обратным расположением слов 4. принят массив с обратным расположением байт
Не по теме: Собственно, я знаю C/C++ также, как и вы, и только что увидел и применил адресную арифметику и приведение типов typecast Добавлено через 41 минуту Можно заполнять переменную float по мере приёма слов
0
|
|||||||||||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
||||||||
| 18.07.2019, 20:09 | ||||||||
|
ФедосеевПавел,несколько запутанные у вас знания
![]() single знаковый число может быть и положительным и отрицательным unsingle беззнаковый число только положительное и это приставка для целочисленных типов может быть (un)signed char размер один байт (un)signed int а здесь зависит от разрядности системы от 2 до 4 байт, в МК обычно 2 байта в старадавние времена решили int опускать, зачем не знаю, и можно встречать такие записи signed тоже что и signed int unsigned long тоже что и insigned long int вот как работать с объединениями
0
|
||||||||
|
Модератор
|
|||||||
| 18.07.2019, 20:59 | |||||||
|
У промежуточного топикстартера задача несколько сложнее, чем вывести на печать число float. И ещё, у него задача прямо противоположная самому первому топикстартеру - у того была передача в устройство, а у этого приём из устройства. Из порта ввода-вывода его программа получает два слова (по 16 бит каждое). Эти два слова ему нужно составить в переменную типа float (размеры совпадают), т.е. сделать typecast. Примерно эту ситуацию я воспроизвёл в
Поэтому я и привёл примеры преобразования массивов слов в число float. А также спросил об эталонных значениях принятых слов и их корректной интерпретации. Если у него реальное устройство, то интерпретацию он увидит на дисплее устройства, а значения массива просто выведет контрольной печатью. После этого, немного попереставляв байты, можно разобраться с порядком принимаемых байт.
0
|
|||||||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
|||||||
| 18.07.2019, 21:16 | |||||||
|
вот введение чисел и вывод на экран (или куда) нужно float
как ты знаешь, в памяти компа нет float, double, и прочей ереси есть байты, а как их интерпретировать, дело программы и программиста в данном случае в памяти 4 байта и FloatChar.au16data это читает эти 4 байта как массив из двух слов по 2 байта а FloatChar.t читает как float те же 4 байта по сути то что ты сделал руками , все это выполнит union
0
|
|||||||
|
Модератор
|
|
| 18.07.2019, 21:57 | |
|
Я понимаю, что такое union - это аналог записей с вариантами из Pascal.
Плохо пользуюсь преобразованиями C, поэтому не разобрался с применением union - хотел, оставляя переменную типом float, использовать именованный тип union для побайтовой адресации. Где-то запутался, а компилятор зорко следил за размерами переменных и типов - не дал выполнить typecast массива к типу union. Наверное, нужно было объявить два типа union размерами 2 и 4 байта, и уже ими оперировать при перестановке байт и слов. Добавлено через 4 минуты Я ассемблерщик волею случая. Мне ближе Pascal и некоторые IEC'овские языки. Еще пару лет назад мой ассемблер ограничивался TASM'ом и десятком инструкций допотопного процессора i8086.
0
|
|
|
0 / 0 / 0
Регистрация: 18.07.2019
Сообщений: 7
|
|
| 18.07.2019, 22:23 | |
|
Господа, благодарю за помощь! Я сам не программист, так, совсем немного балуюсь с микроконтроллерами Atmega.
ModBus устройства у меня не промышленные а просто соединил между собой два микроконтроллера Ардуино, пока по UART портам, у них своя есть библиотека по модбусу. Хочу понять как работает протокол. Уже могу зажигать например светодиоды на мастере при каком-либо событии на слейве. Вот хотелось теперь передать показания температуры и влажности, а они float. Завтра буду пробовать преобразование на ваших примерах.
0
|
|
| 18.07.2019, 22:23 | |
|
Помогаю со студенческими работами здесь
20
Как из mfc передать в Qt Activex массив float или double? Передать дробное число по modbus Как передать в строке "бесконечность" в метод float.TryParse(string)? Передать в функцию два значения float Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|