Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 42

Тема: 4 байта в число с плавающей запятой

  1. #1
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию 4 байта в число с плавающей запятой

    Codesys 3.5
    Подключил счетчик энергии, в нем полная активная энергия представлена в Int64 - 4 байта информации (т.е. 4 WORD числа, если смотреть в регистрах), как преобразовать в REAL (число с плавающей запятой)?
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  2. #2
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Вы запросите у них точный формат.
    Обычно так:
    A5: DWORD;
    A5: REAL;
    pt: POINTER TO REAL;

    pt :=ADR(A5); (*Копируем в префикс*)
    A6:=pt^; (*Превращение в реал(флоат)*)

  3. #3
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию

    Цитата Сообщение от lara197a Посмотреть сообщение
    Вы запросите у них точный формат.
    Обычно так:
    A5: DWORD;
    A5: REAL;
    pt: POINTER TO REAL;

    pt :=ADR(A5); (*Копируем в префикс*)
    A6:=pt^; (*Превращение в реал(флоат)*)
    64 разрядное целое число и вот его в реал
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  4. #4
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    а что конкретно смущает?
    у меня так с расходомера уже 7 лет пересчитывает из 2х ворд, в одном из которых мантиса, в другом экспонента.
    сложение в дворд я опустил, а результат такой.

  5. #5
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию

    Цитата Сообщение от lara197a Посмотреть сообщение
    а что конкретно смущает?
    у меня так с расходомера уже 7 лет пересчитывает из 2х ворд, в одном из которых мантиса, в другом экспонента.
    сложение в дворд я опустил, а результат такой.
    а как конкретно это в коде будет выглядеть?
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  6. #6
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию

    я с адресациями не очень
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  7. #7
    Пользователь Аватар для Пьер
    Регистрация
    26.01.2011
    Адрес
    Земля
    Сообщений
    518

    По умолчанию

    FUNCTION two_word_TO_real : REAL
    VAR_INPUT
    IN_Data: POINTER TO ARRAY[0..1] OF DWORD; (*Указатель на массив регистров для Float*)
    END_VAR
    VAR
    p1: POINTER TO BYTE;
    p2: POINTER TO BYTE;
    END_VAR
    ------------------------------------------------------------
    p1:=ADR(two_word_to_real);
    p2:=ADR(IN_Data^[1]);

    p1^:=p2^;
    p1:=p1+1;
    p2:=p2+1;
    p1^:=p2^;
    p1:=p1+1;
    p2:=ADR(IN_Data^[0]);
    p1^:=p2^;
    p1:=p1+1;
    p2:=p2+1;
    p1^:=p2^;
    ---------------------------
    этот код, работает для 2х байтов, но как преобразовать в 4 не пойму.
    Не зная броду, не суйся в воду. (Пословица.)
    Век живи, век учись(а умрешь дураком).
    Опыт растет прямо пропорционально выведенному из строя оборудованию.

  8. #8
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    не нужно так усложнять.
    в прг. складываю регистры, вам это не нужно.
    что нужно я написал в первом сообщении.
    программа такая.
    Вложения Вложения

  9. #9

    По умолчанию

    Что-то не совсем в сообщении задание понимаю.
    Int64 это же 8 байт, 4 слова, два двойных слова. А предлагают обычное преобразование в 4 -х байт в Real?
    Нужно 8 байт в Real?

  10. #10

    По умолчанию

    Может быть такой вариант только он не для Codesys делался. Функция WORD_TO_REAL не знаю есть ли в Codesys. Codesys оперирует указателями, у меня не было возможности их использовать поэтому решение получилось такое:
    FUNCTION FourWords2Real
    VAR_INPUT
    WORD1: WORD;
    WORD2: WORD;
    WORD3: WORD;
    WORD4: WORD;
    END_VAR

    VAR
    Temp1: REAL;
    Temp2: REAL;
    Temp3: REAL;
    Temp4: REAL;
    END_VAR
    Temp1:=WORD_TO_REAL(WORD1);
    Temp2:=WORD_TO_REAL(WORD2);
    Temp3:=WORD_TO_REAL(WORD3);
    Temp4:=WORD_TO_REAL(WORD4);
    Temp2:=Temp2*(2.0**16); (*сдвиг на 16 бит влево умножая на 2 в степени 16*)
    Temp3:=Temp3*(2.0**32);
    Temp4:=Temp4*(2.0**48);
    Temp4:=TEMP1 + TEMP2 + TEMP3 + TEMP4; (*сложение разрядов в общее значение*)
    FourWords2Real:= Temp4;
    END_FUNCTION

Страница 1 из 5 123 ... ПоследняяПоследняя

Похожие темы

  1. Как убрать скачки значения в знаки после запятой
    от skinnbatter в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 04.06.2017, 11:10
  2. Выбор из чисел с плавающей точкой
    от anthrwpos в разделе Среда программирования OWEN Logic
    Ответов: 2
    Последнее сообщение: 14.02.2017, 10:03
  3. ТРМ138 и Modbus RTU и числа с плавающей запятой
    от Dinf в разделе Помощь Разработчикам
    Ответов: 2
    Последнее сообщение: 10.06.2013, 13:18
  4. Положение запятой в ТРМ138
    от Turboblock в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 21.07.2009, 09:45
  5. Есть ли процедура чтения байта в библ. Owen_io.dll
    от незарегистрированный в разделе Сервисное ПО
    Ответов: 6
    Последнее сообщение: 08.10.2007, 11:36

Ваши права

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