PDA

Просмотр полной версии : MBA8 modbus RTU



aven
30.04.2009, 17:17
Запрос:
[10] -адрес
[3] -команда
[00][00]-начальный регистр
[00][30]-конечный
[CRC][CRC]

Ответ:
[10] -адрес
[3] -команда
[60] -счётчик байт 0x60=96

[0][0][0][16][00][00][03][28][41][D2][60] -вход1
[0][0][0][00][F0][07][FF][FF][00][00][00][00] -вход2

[0][0][0][00][F0][07][FF][FF][00][00][00][00] -вход3
[0][0][0][00][F0][07][FF][FF][00][00][00][00] -вход4
[0][0][0][00][F0][07][FF][FF][00][00][00][00] -вход5
[0][0][0][00][F0][07][FF][FF][00][00][00][00] -вход6
[0][0][0][00][F0][07][FF][FF][00][00][00][00] -вход7
-вход8
[00][00]-положение 10-ной точки в целом значении
[00][00]-целое значение
[F0][07]-регистр статуса 0xF007 Датчик отключен
[FF][FF]-время измерения
[00][00][00][00] - [b]float32
[FB][F8] -CRC

В сопроводительной документации к МВА8 написано:
" 4-х байтовых значениях с плавающей точкой (без времени) "
а в таблице ещё обозначено "Float32"
Нельзя ли расписать побайтно формат Float32

Филоненко Владислав
30.04.2009, 17:34
http://yandex.ru/yandsearch?text=IEEE+754+

aven
30.04.2009, 17:41
http://yandex.ru/yandsearch?text=IEEE+754+

Ну так и надо в книжке писать формат IEEE_754:cool:
А где хвост где голова.
Как я понимаю в "родном" модбасе 16-bit передаётся ст.-мл.
В данном случае при передаче 32-bit пары байт случайно не перепутаны?
Старшая пара, потом младшая?

Малышев Олег
30.04.2009, 19:38
Путь число в формате IEEE 754 (32 бит) лежит в 4-х байтах 1(0..7бит),2(8..15),3(16..23),4(24..31 биты)
В стандарте модбас описано, что используется Big Endian адреса и расположение байт данных в регистрах.
Таким образом стандартно в памяти должны лежать два регистра формата 4,3,2,1 (наиболее часто воспринимаемый формат данных Modbus).

Иногда согласно, например, Спецификации Modbus TCP (2.2b)используется Little Endian для адресов, таким образом данные в памяти лежат как 2,1,4,3.

Для этого в разных Modbus мастерах введен режим переворачивания. В ПЛК он называется native mode(используем ARM в режиме Little Endian). Обычный режим называется Trcae Mode/
Другой режим

aven
01.05.2009, 19:42
На самом деле вроде всё лежит так для COM-порта

1 поступивший байт:

1бит - знак числа
2-7 бит - первые биты показателя степени со смещением 127

2 поступивший байт:
1 бит - продожение показателя степени
2-7 бит - первый байт - начало двоичной дроби

3 и 4 поступивший байты - продолжение дроби

sppppppp p.1111111 11111111 11111111
................||||
................||| -------- 0.0625 1/16
................|| --------- 0.125 1/8
................| ---------- 0.25 1/4
................. ---------- 0.5 1/2

Малышев Олег
02.05.2009, 21:39
смущает фраза в начале - на самом деле...
я вроде бы так и объяснял.

забавно, что на текущий момент практически в любом контроллере есть поддержка плавающего у кого то есть необходимость реверсировать Ieee