конвертация из регистров в float FX3U Mitsubishi Electric |
Здравствуйте, гость ( Вход | Регистрация )
конвертация из регистров в float FX3U Mitsubishi Electric |
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 |
|
|
3.04.2010 - 01:28
Сообщение
#2
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
А что за формат данных в протоколе?
Это ведь не ASCII код, не натуральное двоичное число и не floating point двоичное число. Сообщение отредактировал Sergei Troizky - 3.04.2010 - 01:41 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
3.04.2010 - 08:32
Сообщение
#3
|
|
Читатель Группа: Пользователи Сообщений: 5 Регистрация: 1.04.2010 Пользователь №: 9293 |
формат данных иммено floating poin но в HEX формате. Я привел конкретный пример уже очищенный от crc остальных побочных вещей
иммено в таком формате данныe поступают из датчика и надо их пережевать и запихнутьв конкретную перемменую Сообщение отредактировал taden - 3.04.2010 - 08:50 |
|
|
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 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
3.04.2010 - 21:35
Сообщение
#5
|
|
Читатель Группа: Пользователи Сообщений: 5 Регистрация: 1.04.2010 Пользователь №: 9293 |
Cпасибо большое, попробую . А как из 32 битного регистра получить переменную с запятой (именно то занчение которое зафиксировал датчик). Команда FLT или какаято другая?
|
|
|
3.04.2010 - 23:02
Сообщение
#6
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Cпасибо большое, попробую . А как из 32 битного регистра получить переменную с запятой (именно то занчение которое зафиксировал датчик). Команда FLT или какаято другая? Floating point- это и есть "переменная с запятой", поэтому вопрос непонятен. Инструкция INT преобразует floating point число в целое 32-битное, отбрасывая дробную часть. Если перед этим умножить floating point на 100, можно иметь в integer регистре результат в сотых, т.е. фиксированно 2 десятичные цифры после запятой. Запятой в регистре, разумеется, нет. -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
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) |
|
|
Текстовая версия | Сейчас: 28.04.2024 - 10:32 |