Как преобразовать real в word

Обновлено: 03.07.2024

Мы здесь ради тебя.

Главная / Форум / Информация о среде разработки LogicLab / Преобразование из DWORD в REAL по стандарту IEEE-754
  • В этой теме 4 ответа, 2 участника, последнее обновление 1 неделю назад da Серхио Бертана .

Как я могу решить проблему?
Есть ли функциональный блок, который выполняет тот же тип преобразования, что и упомянутый выше преобразователь?

Оператор TO_REAL правильный, вы, вероятно, ошибаетесь в том, что видите, вот оно Скриншот пример конвертации.

Я использовал указатель только для того, чтобы одновременно видеть как РЕАЛЬНОЕ, так и его шестнадцатеричное значение, но вы также можете перейти в окно просмотра и выбрать переменную и щелкнуть правой кнопкой мыши на Формат и формат Шестнадцатеричный, чтобы увидеть то же самое.

Добавлю, что если нужно больше разрешения из версии XUnified Из систем мы ввели как целые, так и плавающие 64-битные числа.

Я объясню проблему лучше: у меня есть датчик расхода Hart, который передает значение сумматора на ведущее устройство Hart - преобразователь ведомого устройства Modbus, который, в свою очередь, передает данные в ПЛК через RS485. Elsist. Как видно изкартина «variable_1» типа DWORD передается мне преобразователем Hart master-Modbus slave и исходит от расходомера.

Если я использую функцию Block TO_REAL для преобразования DW, я получаю РЕАЛЬНОЕ число, которое не является правильным.

Значение, считываемое FB ModbusMaster, уже является РЕАЛЬНЫМ значением, поэтому вам не нужно преобразовывать его с помощью оператора TO_REAL, а просто определять переменную. variabile_1 РЕАЛЬНЫЙ тип.

Операторы приведения TO_REAL, TO_INT и т. Д. Не выполняют операций; они служат только для информирования компилятора о том, что программа выполняет передачу значения из переменной одного типа в переменную другого типа.

Я сталкиваюсь с незнанием Modbus. Мне нужно прочитать из ЦП некоторые значения в Modbus: значение в регистре номер 6, длина 2 слова, 32-битное целое число (это температура, следовательно, 32-битное целое число со знаком).

Я установил адрес ModbusMaster на 6, указывает на 2. Предположим, что прочитано значение 380. Если я передаю массив Word в качестве буфера, я обнаруживаю, что буфер [0] = 0000 и буфер [1] = 017C .

Если я передаю DWORD в качестве буфера, я обнаруживаю, что буфер = 017C0000, то есть два СЛОВА обмениваются. Это правильно?

Это проблема порядка байтов, о которой я говорил ранее, в Modbus не указано, как управлять передачей переменных длиной более 16 бит, поэтому обычно это зависит от порядка байтов устройства.

В вашем случае устройство, с которого вы читаете, имеет порядок байтов, отличный от SlimLine.

Чтобы вычислить правильное значение, выраженное в переменной DINT, вы можете поступить так же, как и вы, но я предлагаю вам использовать функцию VarSwap, передавая адрес буфера Modbus в качестве источника и адрес переменной DINT в качестве пункта назначения. Таким образом, также гарантируется управление отрицательными значениями.

Спасибо за ответ. А пока я немного поэкспериментировал со строками, РЕАЛЬНЫМИ значениями и так далее.
Производитель устройства написал все в руководстве, кроме endiannes: я написал в службу поддержки, надеясь, что они ответят.

Читайте также: