Просмотр полной версии : Перевод массива из 4х WORD в значение REAL
sng21099
11.04.2024, 14:42
Здравствуйте! Подскажите пожалуйста, у меня есть данные с расходомера Взлёт, 4 слова. Мне из этих 4х слов нужно собрать значение накопленного объёма в формате REAL. Сейчас значения регистров равны
0,0,16101,65003. Значение на расходомере 0.449. Может есть какой конвертер в Codesys?
https://ftp.owen.ru/CoDeSys3/11_Documentation/03_3.5.11.5/CDSv3.5_Modbus_v3.2.pdf#%5B%7B%22num%22%3A192%2C%2 2gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C68 %2C759%2C0%5D
Первые два регистра - целая часть в формате signed long, оставшиеся - дробная часть в формате float. Результат как сложение в формате double.
sng21099
11.04.2024, 15:34
Первые два регистра - целая часть в формате signed long, оставшиеся - дробная часть в формате float. Результат как сложение в формате double.
Ок, это ясно, но как 2 слова дробной части, которые записываются как массив, перевести в float значение?
Ок, это ясно, но как 2 слова дробной части, которые записываются как массив, перевести в float значение?
Выше ссылку на документацию привели. НЯП, "5.8.4 Функция WORD2_TO_REAL". Про кодесис я ничего не знаю.
sng21099
11.04.2024, 15:59
Выше ссылку на документацию привели. НЯП, "5.8.4 Функция WORD2_TO_REAL". Про кодесис я ничего не знаю.
Спасибо! Помогла установка библиотеки и функция эта!
kondor3000
11.04.2024, 16:08
Спасибо! Помогла установка библиотеки и функция эта!
А с первыми 2 числами, что делать будете? Там целочисленное, а не REAL )
Собирать надо научиться самому, при чём любые числа, а не функциями готовыми пользоваться .
Тут пример функции (ФБ - если нужно разобрать на 2-4 части), меняя входы и выходы, можно собирать, разбирать (переставлять) регистры и байты в любом типе переменных.
https://owen.ru/forum/showthread.php?t=37645&page=3#30
Там целочисленное, а не REAL )
с чего это целочисленное то 75143
если
0,0,16101,65003. Значение на расходомере 0.449
с чего это целочисленное то
Это взлётовская фишка представления double. Я выше уже писал:
Первые два регистра - целая часть в формате signed long, оставшиеся - дробная часть в формате float. Результат как сложение в формате double.
kondor3000
11.04.2024, 17:00
с чего это целочисленное то 75143
если
capzap, был бы новичёк, понятно, но вы то. Вырвать из контекста кусок, даже не поняв в чём дело, не прочитав тему, написать что кто-то не прав.
imaex уже повторил, то что было написано выше.
capzap, был бы новичёк, понятно, но вы то. Вырвать из контекста кусок, даже не поняв в чём дело, не прочитав тему, написать что кто-то не прав.
imaex уже повторил, то что было написано выше.
Answer | Phind-34B Model
Ваше замечание относится к ситуации, когда человек пытается высказать мнение или предложение, не полностью понимая контекст или основные аспекты проблемы. Это может быть связано с недостатком информации, неправильным пониманием задачи или недостаточным анализом ситуации. В таких случаях, вместо того чтобы критиковать или отвергать предложение, важно попытаться уточнить детали и понять, почему человек пришел к определенному выводу. Это поможет избежать недопонимания и конфликтов, а также может привести к более продуктивному обсуждению и решению проблемы.
В заключение, важно помнить, что критика и конструктивная обратная связь должны быть направлены на улучшение процесса и результатов работы, а не на критику личности или мнения. Это поможет создать более открытую и поддерживающую атмосферу в команде, где каждый член может свободно высказывать свое мнение и предложения, не боясь быть неправильно понятым или отвергнутым
со мной то ладно, а к ТС то Вы чего докопались, Ваш пост появился уже после как он решил проблему заданного вопроса им же, в созданной им же теме и сказал спасибо. На основании чего Вы решили что он не сможет из двух слов собрать DINT, из-за того что он воспользовался функцией, так я тоже вместо писанины беру и вставляю чего нибудь из oscat. Меня Ваше отношение к человеку возмутило, но Вы же еще и не останавливаетесь, в одном посте написали не пользоваться готовой функцией и предложили воспользоваться готовой функцией. И ради смеха о контексте, чем докажете если пост отредактирован уже после моего сообщения
aaaSashaMGGU
30.05.2024, 16:45
Просто оставлю это здесь...
//Перевод четырёх Word в LReal
FUNCTION Quadro_Word_To_LReal: LREAL;
VAR_INPUT
Word1: WORD; //Входной Word 1
Word2: WORD; //Входной Word 2
Word3: WORD; //Входной Word 3
Word4: WORD; //Входной Word 4
END_VAR
VAR
//Выход функции
Result: LREAL;
END_VAR
//Собираем из кусочков...
Memutils.MemCpy(ADR(Result) + 0, ADR(Word4), 2);
Memutils.MemCpy(ADR(Result) + 2, ADR(Word3), 2);
Memutils.MemCpy(ADR(Result) + 4, ADR(Word2), 2);
Memutils.MemCpy(ADR(Result) + 6, ADR(Word1), 2);
//Выход функции
Quadro_Word_To_LReal := Result;
Андрей Чернов
21.01.2025, 13:10
Просто оставлю это здесь...
//Перевод четырёх Word в LReal
FUNCTION Quadro_Word_To_LReal: LREAL;
VAR_INPUT
Word1: WORD; //Входной Word 1
Word2: WORD; //Входной Word 2
Word3: WORD; //Входной Word 3
Word4: WORD; //Входной Word 4
END_VAR
VAR
//Выход функции
Result: LREAL;
END_VAR
//Собираем из кусочков...
Memutils.MemCpy(ADR(Result) + 0, ADR(Word4), 2);
Memutils.MemCpy(ADR(Result) + 2, ADR(Word3), 2);
Memutils.MemCpy(ADR(Result) + 4, ADR(Word2), 2);
Memutils.MemCpy(ADR(Result) + 6, ADR(Word1), 2);
//Выход функции
Quadro_Word_To_LReal := Result;
Спасибо, добрый человек!
aaaSashaMGGU
22.01.2025, 11:36
Спасибо, добрый человек!
Не за что
P.S. Если что, "оставляя это здесь", я был не совсем прав, т.к., изначально в этой теме был вопрос о расходомере, где формат вообще не такой. Там 4 WORD преобразуются как целая часть (первые 2 WORD) + дробная часть (последние 2 WORD) или что-то вроде того
Мой вариант - это именно преобразование "четырёх WORD в LREAL" по аналогии "двух WORD в REAL". Но на "два WORD в REAL" в Codesys 3.5 есть стандартная функция, а на "четыре WORD в LREAL" не было - вот и пришлось написать
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot