IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> конвертация из регистров в float FX3U Mitsubishi Electric
taden
сообщение 2.04.2010 - 18:55
Сообщение #1


Читатель
*

Группа: Пользователи
Сообщений: 5
Регистрация: 1.04.2010
Пользователь №: 9293



Недавно начал осваивать FX3U и сразу появилсь нестандратная задача.
Надо считать с датчика данные при помощи RS232. Все вроде понятно до момента когда данные появляются в контроллере в четырех регистрах
допустим D1 D2 D3 D4. Датчик шлет число в float формате. тоесть из этих четырех регистров надо выцедить одну переменную. Помогите плиз уже мозг взорвал пока искал.

пример

показания датчика= 1.36
получено по протоколу
3FAE147B

D1=3F
D2=AE
D3=14
D4=7B

как в контроллере получить переменную с нужным значением?

Сообщение отредактировал taden - 2.04.2010 - 19:02
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 3.04.2010 - 01:28
Сообщение #2


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



А что за формат данных в протоколе?
Это ведь не ASCII код, не натуральное двоичное число и не floating point двоичное число.


Сообщение отредактировал Sergei Troizky - 3.04.2010 - 01:41


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
taden
сообщение 3.04.2010 - 08:32
Сообщение #3


Читатель
*

Группа: Пользователи
Сообщений: 5
Регистрация: 1.04.2010
Пользователь №: 9293



формат данных иммено floating poin но в HEX формате. Я привел конкретный пример уже очищенный от crc остальных побочных вещей
иммено в таком формате данныe поступают из датчика и надо их пережевать и запихнутьв конкретную перемменую

Сообщение отредактировал taden - 3.04.2010 - 08:50
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 3.04.2010 - 19:40
Сообщение #4


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Подразумевая, что старшие байты всех исходных регистров всегда нулевые:
MOV D3 D10
SWAP D10
WOR D10 D4 D10
MOV D1 D11
SWAP D11
WOR D11 D2 D11

D10- итоговый floating point 32-битный регистр.

Сообщение отредактировал Sergei Troizky - 3.04.2010 - 20:42


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
taden
сообщение 3.04.2010 - 21:35
Сообщение #5


Читатель
*

Группа: Пользователи
Сообщений: 5
Регистрация: 1.04.2010
Пользователь №: 9293



Cпасибо большое, попробую . А как из 32 битного регистра получить переменную с запятой (именно то занчение которое зафиксировал датчик). Команда FLT или какаято другая?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 3.04.2010 - 23:02
Сообщение #6


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(taden @ 3.04.2010 - 21:35) *
Cпасибо большое, попробую . А как из 32 битного регистра получить переменную с запятой (именно то занчение которое зафиксировал датчик). Команда FLT или какаято другая?

Floating point- это и есть "переменная с запятой", поэтому вопрос непонятен.

Инструкция INT преобразует floating point число в целое 32-битное, отбрасывая дробную часть.
Если перед этим умножить floating point на 100, можно иметь в integer регистре результат в сотых, т.е. фиксированно 2 десятичные цифры после запятой. Запятой в регистре, разумеется, нет.


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
taden
сообщение 6.04.2010 - 14:20
Сообщение #7


Читатель
*

Группа: Пользователи
Сообщений: 5
Регистрация: 1.04.2010
Пользователь №: 9293



сегодня весь день сражаюсь опять ну никак ненахожу нужную функцию.
Есть два регистра D10 D11. В них находиться нужное число

[attachment=91:1.JPG]


D40 F600(в HEX)
D41 2042(в HEX)

D40+D41=2042F600(в HEX) =1.719146E-019(в float) так показывает в "мониторе"

а вот как мне сделать перемменную например davlenie (Real). чтоб значение было 1.719146E-019(в Dec)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 28.04.2024 - 10:32