Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 34

Тема: DWORD_TO_REAL

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

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

    По умолчанию

    Ничего. Вы сами себе выбрали "костыли" (C)
    В данном случае костылём является как раз UNION. ("Многабукв" за вместо одной строки)

    Т.е. Вы утверждаете что прочитали весь хелп ?
    Поиск по "DWORD_TO_REAL" никто не отменял. Результат 0 topic(s) found.

    Нет, непонятно что Вам нужно. Мелофон поломался
    Ну остальные участники форума то поняли, зачем так цепляться?

  2. #2

    По умолчанию

    На счёт понимания:
    Валенку не понравилось что я за вместо слова "интерпретировать" слово "перевести" использовал. Согласен, не точно выразился. Но ведь по смыслу то, меня ведь правильно поняли, что мне нужна интерпретация 4х байт в реале, и правильно предложили написать функцию с использованием указателей.

    всё хотел узнать зачем Вам дворд
    Ну REAL занимает 4 байта, значение REAL можно интерпретировать, указав на на DWORD, или на два WORDа, или четыре байта, или 32 бита. Просто я выбрал одновесные типы вот и всё.

    Пример из использования в Step7
    Когда телеграммам прилетает на порт, она ложится в определенный DBxxx, по определенному адресу.
    И если мне нужно интерпретировать REAL c 4х байт начиная с 200 адреса я пользовался следующей конструкцией:
    real_var := DWORD_TO_REAL(DBxxx.DBD200);

    int_var := WORD_TO_INT(DBxxx.DBW200); для интерпретации инта соотвтетственно.

    Коротко и удобно.
    Последний раз редактировалось @ND; 07.08.2015 в 16:50.

  3. #3

    По умолчанию

    почему сразу не реал?
    Ну в один момент времени там реал лежит, а в другой там может вообще какие нибудь дискретные сигналы лежат. Особенно если устройств опроса несколько или когда количество и качество запросов может меняться со временем.

    Или может быть я не правильно понял. Как это сразу REAL ?
    Предложите пример.
    Последний раз редактировалось @ND; 07.08.2015 в 16:51.

  4. #4

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    для какой среды? Для степа, так зачем изначально размещать в ДБшке двойное слово, когда можно реал и даже преобразовывать ничего не надо, для КДС3 - мне что то не попадалось где там в канальной части попадаются дворды, там только слова, для КДС2 - существует конфигуратор в котором сразу в мастере и вставляется нужный модуль - реал
    А если мне нужно будет порядок байт для REALа поменять или на коэффициент умножить?
    А считывать мне нужно одной большой телеграммой, в которой есть как использующиеся данные так и нет и лежать они могут там с разрывами.
    Так же производители устройств с поддержкой MODBUS протокола могут разместить realы таким образом, что они будут отстоять друг от друга скажем на один байт, тогда у вас вообще не получится их прописать как реалы.

    Вот к примеру программа для одного соединения в STEP7
    Вложения Вложения
    • Тип файла: txt CON_1.txt (29.0 Кб, Просмотров: 31)
    Последний раз редактировалось @ND; 07.08.2015 в 17:39.

  5. #5

    По умолчанию

    Дело еще в том, что этот код у меня пишет скрипт на VBA, и мне гораздо удобнее не заморачиваться со структурами, тем более еще с преобразованиями к этим структурам.
    Мне гораздо удобнее, когда одна строка соответствует записи в один тег.
    Последний раз редактировалось @ND; 07.08.2015 в 18:19.

  6. #6

    По умолчанию

    и во всем виноват S3 software
    Да нет конечно.

    Ну просто получается в STEP7 есть интерпретаторы типа DWORD_TO_REAL, WORD_TO_INT, ... и.т.д. так сказать из коробки,
    а в КДС их нет. А ведь это хороший, достаточно нужный инструмент.
    Последний раз редактировалось @ND; 07.08.2015 в 18:28.

  7. #7

    По умолчанию

    в КДС есть чтоТоТам_TO_чтоТоЕще, как оказалось с разницей, что степ DWORD переводит в REAL согласно IEEE745 только ради удобства а не логики
    А где прослеживается логика, когда 16#1 переводится как 1.0 ? Учитывая, что DWORD это вообще не числовой тип.

  8. #8
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,799

    По умолчанию

    А кто сказал что DWORD не целочисленный тип ?
    В Help КДС :
    "
    Integer Data Types

    BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, and UDINT are all integer data types
    Each of the different number types covers a different range of values. The following range limitations apply to the integer data types:

    И чего полемику устраивать ?
    А вот для ПЛК известных брэндов , работающих под языком LD есть мощнейший оператор MOV , который безусловно и безоглядно перенесет откуда нужно куда нужно , заменяя указатели Кодесис . Но никому в голову не приходит пенять кодесис за отсутствие "MOV" .
    Организация памяти не та .

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

    По умолчанию

    А кто сказал что DWORD не целочисленный тип ?
    Стандарт сказал:

    dword.png dword1.png

    Арифметические операции не определены для битовых строк:

    dword2.png

    Битовые операции не определены для числовых типов:

    dword3.png
    Последний раз редактировалось Yegor; 08.08.2015 в 09:10.

  10. #10

    По умолчанию

    Добавлю терминов.
    То, что требовалось ТС - typecast (приведение типов). Из целей безопасности кода typecast напрямую запрещён в CoDeSys. Искать лень, но это прописано где-то в начале изучения CoDeSys. Поэтому такие сложности - чтобы не случайно, а осмысленно выполнялось.

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Ваши права

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