Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: ОВЕН СП307-Б Float_2_DWord()

  1. #1

    По умолчанию ОВЕН СП307-Б Float_2_DWord()

    При использовании следующей конструкции:

    Код:
    DWORD tmp_var;
    
    *(float*)(PSW+326)=100.0;
    
    tmp_var=Float_2_DWord(*(float*)(PSW+326));
    
    *(DWORD*)(PSW+400)=tmp_var;
    В ячейке *(DWORD*)(PSW+400) постоянно значение "0". Что не так?

  2. #2

  3. #3

    По умолчанию

    Здравствуйте!

    Это выжимка из кода, там дополнительные преобразования, которые в тестовом примере не указаны. Только тот участок который не работает:

    Код:
    tmp_var=Float_2_DWord(*(float*)(PSW+326));
    По идее пример должен сохранить значение "100" в ячейке PSW[400-401]. Но почему то в данной ячейке только "0x0000".
    Последний раз редактировалось r0mashkin0; 11.06.2018 в 22:55.

  4. #4
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,167

    По умолчанию

    По идее пример должен сохранить значение "100" в ячейке PSW[400-401]
    Нет, не должен. Данные функции не производят конверсию, поэтому в ячейках PSW[400-401] будет 0x42c80000.
    Вероятно, вы как раз видите значение младшего из этих регистров (там как раз 0).

    https://www.h-schmidt.net/FloatConverter/IEEE754.html

  5. #5

    По умолчанию

    Добавил элемент "Дисплей", в свойствах указал DWORD, адрес PSW[400] и формат Hex; и меня там почему то "0x00".
    Последний раз редактировалось r0mashkin0; 11.06.2018 в 23:09.

  6. #6

  7. #7

    По умолчанию

    Я выставлял 12 знаков. А что далает функция Float_2_DWord()?

  8. #8

  9. #9

    По умолчанию

    Загружу Ваш проект попозже, проверю. Повторю вопрос, что делает функция Float_2_DWord(). Если она не производит конвертацию, зачем она вообще нужна?

  10. #10
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,167

    По умолчанию

    Чтобы получить последовательность бит, соответствующую float-значению по стандарту IEEE 754.
    Я выше кидал ссылку на конвертер. Вот функция делает то же самое.

    Если вам надо что-то в стиле 100.0 (FLOAT) ----> 100 (DWORD), то достаточно сделать так:

    Код:
    DWORD tmp_var;
    
    *(float*)(PSW+326)=100.0;
    
    tmp_var=*(float*)(PSW+326);
    
    *(DWORD*)(PSW+400)=tmp_var;

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. ОВЕН СП307-Б
    от r0mashkin0 в разделе Панели оператора (HMI)
    Ответов: 7
    Последнее сообщение: 21.05.2018, 07:14
  2. ПЛК 150-И-М +СП307-Б
    от Виталий Попович в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 23.03.2018, 11:03
  3. СП307-Р
    от murdemon в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 18.10.2016, 11:55
  4. СП307-Р + S7-300
    от alexk54 в разделе Панели оператора (HMI)
    Ответов: 0
    Последнее сообщение: 07.10.2016, 16:17
  5. СП307+ПЧВ
    от pedro93 в разделе Панели оператора (HMI)
    Ответов: 35
    Последнее сообщение: 31.07.2016, 22:02

Ваши права

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