Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Я имел в виду разбор телеграмм от различных устройств. (много приходится работать с протоколом модбас рту).
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.
В данном случае костылём является как раз UNION. ("Многабукв" за вместо одной строки)Ничего. Вы сами себе выбрали "костыли" (C)
Поиск по "DWORD_TO_REAL" никто не отменял. Результат 0 topic(s) found.Т.е. Вы утверждаете что прочитали весь хелп ?
Ну остальные участники форума то поняли, зачем так цепляться?Нет, непонятно что Вам нужно. Мелофон поломался
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
На счёт понимания:
Валенку не понравилось что я за вместо слова "интерпретировать" слово "перевести" использовал. Согласен, не точно выразился. Но ведь по смыслу то, меня ведь правильно поняли, что мне нужна интерпретация 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.
Ну в один момент времени там реал лежит, а в другой там может вообще какие нибудь дискретные сигналы лежат. Особенно если устройств опроса несколько или когда количество и качество запросов может меняться со временем.почему сразу не реал?
Или может быть я не правильно понял. Как это сразу REAL ?
Предложите пример.
Последний раз редактировалось @ND; 07.08.2015 в 16:51.
для какой среды? Для степа, так зачем изначально размещать в ДБшке двойное слово, когда можно реал и даже преобразовывать ничего не надо, для КДС3 - мне что то не попадалось где там в канальной части попадаются дворды, там только слова, для КДС2 - существует конфигуратор в котором сразу в мастере и вставляется нужный модуль - реал
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
А если мне нужно будет порядок байт для REALа поменять или на коэффициент умножить?
А считывать мне нужно одной большой телеграммой, в которой есть как использующиеся данные так и нет и лежать они могут там с разрывами.
Так же производители устройств с поддержкой MODBUS протокола могут разместить realы таким образом, что они будут отстоять друг от друга скажем на один байт, тогда у вас вообще не получится их прописать как реалы.
Вот к примеру программа для одного соединения в STEP7
Последний раз редактировалось @ND; 07.08.2015 в 17:39.