Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 22 из 22

Тема: Помогите новичку

  1. #21
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,854

    По умолчанию

    Цитата Сообщение от кибернетик Посмотреть сообщение
    в массиве ARY_WORD 2 слова по 2 байта, данные в Hex, если я после ARY_WORD_TO_STRING делаю STRING_TO_WORD, на выходе 0, ошибку не выдает.
    Что Вы ерундой занимаетесь, какие ARY_WORD_TO_STRING?
    У вас из МВ110 приходит число с плавающей точкой - Float по стандарту
    IEEE_754.
    Оно действительно занимает 32 бита или два WORD или Ваш массив из двух WORD.
    Прежде чем преобразовывать этот массив во всякую ерунду посмотрели бы в начале, а что находится в этих WORD
    https://ru.wikipedia.org/wiki/%D0%A7...81%D1%82%D0%B8
    Захват-4.png
    Отсюда видно, что ничего общего со String получить нельзя, как нельзя склеить два полученных ворда в дворд и преобразовать во флоат. Чего склеивать? Он уже и так Float
    В одном Worde часть мантиссы, а во втором оставшаяся часть мантиссы, порядок и знак.
    Воспользуйтесь калькулятором http://www.binaryconvert.com/result_...cimal=440142E0 и убедитесь, что из 16#4401(0), 16#42E0(1) получиться примерно так: 517,045 (по крайней мере так пишет конфигуратор)
    Захват-2.png
    Так, что никакой склейки, только вычисления Вас спасут.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  2. #22
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,854

    По умолчанию

    Не знаю как там в GMWIN.
    В Кодесис без использования указателей вычисление в соответствии с этим описанием
    Захват-2.png
    Код:
    PROGRAM PLC_PRG
    VAR
        ARY_WORD: ARRAY [0..1] OF WORD:=16#4401,16#42E0; (*Данные в виде массива*)
        epo: INT; (*Порядок*)
        mant: DINT; (*Мантисса*)
        factor: REAL; (*Знак*)
        ARY_WORD_TO_FLOAT: REAL; (*Результат*)
    END_VAR
    
    IF ARY_WORD[0]>32768  THEN
    factor:=factor:=-1.0;
    ELSE
    factor:=factor:=1.0;
    END_IF
    epo:=SHR((16#7F80 AND ARY_WORD[0]),7) - 127; (*Для вычисления показателя степени из восьмиразрядного поля порядка вычитается смещение порядка равное 127*)
    
    mant:=WORD_TO_DINT(16#7F AND ARY_WORD[0])*65536 + WORD_TO_DINT(ARY_WORD[1]); (*Собираем мантиссу из частей*)
    mant:=mant+16#800000; (*Для вычисления мантиссы к единице добавляется дробная часть мантиссы из 23-х разрядного поля дробной части мантиссы*)
    
    ARY_WORD_TO_FLOAT:=factor*DINT_TO_REAL(mant)/EXPT(2,23-epo); (*Число равно произведению мантиссы со знаком на двойку в степени порядка*)
    Можно оформить в виде функции.
    Пример с Вашими данными
    Захват-10.png
    Последний раз редактировалось petera; 02.04.2016 в 22:09.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Страница 3 из 3 ПерваяПервая 123

Похожие темы

  1. помогите новичку
    от алексей7676 в разделе ПЛК63/73
    Ответов: 1
    Последнее сообщение: 15.08.2015, 13:44
  2. Помогите новичку))))
    от Витек в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 28.02.2014, 19:40
  3. Помогите новичку
    от mixa kuban в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 10.05.2012, 20:32
  4. Помогите новичку
    от RAzov112 в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 18.02.2011, 09:25
  5. помогите новичку
    от al_vl_sher в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 15.03.2010, 11:46

Ваши права

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