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

Тема: DWORD_TO_REAL

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию DWORD_TO_REAL

    Мне нужно перевести 4 байта (16#40 00 00 00) в формат REAL
    Так как порядок следования байт в REAL для СПК перепутан, пробую так:

    dword_to_real(16#4000)

    По идее это должно мне дать значение real равное 2.0 , но это не так.
    Получается что dword это такой же числовой тип как и uint!
    Спрашивается, зачем нужны два одинаковых типа?

    И существует ли в ST оператор, который может нормально перевести 16#4000 в real = 2.0 ?
    Изображения Изображения
    • Тип файла: jpg dword.jpg (11.5 Кб, Просмотров: 139)

  2. #2

    По умолчанию

    По сути, мне нужно решить задачу: корректно перевести переменную типа dword в real не используя память данных М в языке ST.
    Это вообще реально?

  3. #3
    Пользователь Аватар для _Mikhail
    Регистрация
    25.07.2013
    Адрес
    Ярославль
    Сообщений
    510

    По умолчанию

    На форуме уже не раз выкладывался пример получения переменной типа REAL в СПК. Просто оператора нет, нужно написать функцию перестановки байт.

  4. #4

    По умолчанию

    Цитата Сообщение от _Mikhail Посмотреть сообщение
    На форуме уже не раз выкладывался пример получения переменной типа REAL в СПК. Просто оператора нет, нужно написать функцию перестановки байт.
    Байты уже переставлены. Мне реал получить надо.

  5. #5
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Получается что dword это такой же числовой тип как и uint!
    По стандарту он не числовой ни разу, но ощущение, что на это забили вообще все.

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

    d: DWORD;
    ptrReal: POINTER TO REAL;
    r: REAL;

    ptrReal := ADR(d);
    r := ptrReal^;

    Будь у меня свой кодесис, я бы запретил на фиг арифметику и неявные преобразования в число для типов, которые имеют в своём названии WORD, чтобы вот этой путаницы не возникало. И сделал бы операторы вроде DWORD_AS_REAL, чтобы обходиться без указателей.

  6. #6
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Тогда у Сименса логичнее. В кодесисе бред, с которым придётся смириться через указатели.

    Пометка на полях: из Кодесиса в Степ7 код не копипастить.

  7. #7

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Пометка на полях: из Кодесиса в Степ7 код не копипастить.
    Это уголовно наказуемо?
    Да и зачем. Там эта плюшка из коробки работает.

  8. #8

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    вроде бы логичнее, но тот кто в степе написал 105 (SCALE), вход почему то в интах завел
    Ну вообще то это логично подавать на вход число, характеризующую величину переменной процесса.
    Как раз не логичнее там было бы видеть ворд.

  9. #9

    По умолчанию

    Спасибо за своевременную помощь. Недооценил я указатели.
    А на счёт DWORD_TO_REAL , разработчикам КДС минус.

  10. #10

    По умолчанию

    1. Ну и что, что в документации есть Union. Dword_to_real то нет. То бишь документация не полная.

    2. Разницу между преобразованием и интерпретацией прекрасно понимаю, разве с самого начала не было понятно что мне нужно интерпретировать набор 4х байт в реал?

    3. String_to_real в Step7 вообще нет. Так же не понял на счёт убожества: интерпретировать реал из 4х байт предварительно поменяв два ворда в них коротенькой строкой - что тут плохого или убогого?

    4. UINT - числовой тип, DWORD - это не числовой тип. И я всегда привык работать с DWORD, как c не числовым типом. Потому то меня и выбило из колеи, когда DWORD_TO_REAL(16#1) дал мне 1.0

    5. В MODBUS RTU телеграммы - это набор байт. Если мне удобно для работы с этими байтами пользоваться различными бинарными операторами и интерпретировать с помощью DWORD_TO_REAL в случае STEP7, то почему бы и нет?
    Последний раз редактировалось @ND; 07.08.2015 в 13:22.

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

Ваши права

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