CODESYS форум

Добро пожаловать на официальный форум CODESYS
Deutsche Version English version russian version 
Текущее время: Чт ноя 23, 2017 4:31 am

Часовой пояс: UTC+01:00




Начать новую тему  Ответить на тему  [ 12 сообщений ] 
Автор Сообщение
 Заголовок сообщения: DWORD в FLOAT
СообщениеДобавлено: Сб апр 16, 2011 2:53 pm 
Не в сети

Зарегистрирован: Чт фев 10, 2011 11:09 am
Сообщения: 0
Подскажите, пожалуйста:
Считываю по Modbus два регистра в которых сохраняется переменная типа FLOAT.
У себя на контролере собираю етих два регистра типа WORD (или 4 байта в DWORD). А как теперь ету переменную перевести в FLOAT?
Пробивал через онлайн калькулятор по IEEE754 перевести все работает отлично, но как в CodeSys отобразить ее переменой с плавающей точкой никак не могу разобраться


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Сб апр 16, 2011 3:54 pm 
Не в сети

Зарегистрирован: Вт авг 10, 2010 1:57 am
Сообщения: 0
http://www.owen.ru/forum/showthread.php ... ight=Float
Попробуй зависнуть на Овеновском форуме. Там проблемы с передачей флоат в панель.
И есть кое-какие советы по преобразованию. Может там что найдёшь.


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Сб апр 16, 2011 3:55 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Собрать надо не в DWORD, а в REAL. Либо скопирорвать через указатель.


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Пн апр 18, 2011 4:49 am 
Не в сети

Зарегистрирован: Ср июн 20, 2007 12:10 pm
Сообщения: 31
библиотека oscat, FUNCTION DW_TO_REAL.


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Пн апр 18, 2011 9:01 am 
Не в сети

Зарегистрирован: Чт фев 10, 2011 11:09 am
Сообщения: 0
Спасибо
Решилось с помощью статьи,  по которой написал преобразование с IEEE 754 в REAL. Жаль что плохо искал в OSCATE а то б сэкономил много времени
Ссылка с хорошим описанием, может когда не будь кому пригодится

http://www.softelectro.ru/ieee754.html


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Пн апр 18, 2011 2:04 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
А стандартная операция в CoDeSys – DWORD_TO_REAL не подходит?


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Чт апр 21, 2011 6:00 pm 
Не в сети

Зарегистрирован: Чт фев 10, 2011 11:09 am
Сообщения: 0
Почему то не подходит
Может я что-то не так делаю,… но мне не подошла, давала совсем не правильной результат


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Пт апр 22, 2011 9:02 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Нет контроллера проверить, но сильно подозреваю, что значение уже лежит в памяти правильно, и ничего преобразовывать не надо.

Регистр DWORD наверняка размещен в прямоадресуемой памяти I или M? На этот же адрес объявляем и переменную типа REAL. Все.


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Вт сен 23, 2014 11:07 am 
Не в сети

Зарегистрирован: Пн фев 15, 2010 3:39 pm
Сообщения: 3
Столкнулся с такой же проблемой.

У меня есть целочисленное значение 32 бит. Нужно преобразовать его в Real.
Функция из Codesys DWORD_TO_REAL не подходит, т. к. при превышении значения 16#7FFFFFFF преобразование идет не корректно.

Функция DW_TO_REAL не делает преобразование в Real, а переносит по битам значение.

Это значение хранится во внутренней переменной, так что адресоваться по-другому я не могу.

Как можно решить эту задачу?


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Ср сен 24, 2014 7:17 am 
Не в сети

Зарегистрирован: Пн фев 15, 2010 3:39 pm
Сообщения: 3
Задачу решил, разбив слово на два при помощи DWORD_TO_WORD и
затем преобразовав каждое слово в REAL по-отдельности.


Вернуться к началу
 Заголовок сообщения: Re: DWORD в FLOAT
СообщениеДобавлено: Чт дек 10, 2015 5:37 am 
Не в сети

Зарегистрирован: Пн ноя 16, 2015 4:06 pm
Сообщения: 3
Код:
FUNCTION DW_TO_REAL : REAL
VAR_INPUT
   DW : DWORD;
END_VAR
VAR
   pR : POINTER TO REAL;
END_VAR

pR := ADR(DW);
DW_TO_REAL := pR^;


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 12 сообщений ] 

Часовой пояс: UTC+01:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB