Просмотр полной версии : DWORD + DWORD
Здравствуйте администраторы, здравствуйте Petera!!!
работаю с тензодатчиком. Результат в DWord
пытаюсь скомпенсировать 0, т.е. добавить константу, не получается.
float у ;
DWord X;
.. функция получения значения с тензодатчика в формате DWord
y=0.035;
X=X-Float_2_DWord(y);
так не работает.
Я конечно чайник в Си. Но чего вы хотите добиться своим преобразованием?
Float_2_DWord(y) - инструкция преобразования из плавающей в DWord . Дробная часть округляется. Если значение превышает DWord диапазон значений, будет использоваться значение 0 или 4294967295 .
Т.е. Float_2_DWord(0.035)=0
Прибавляйте свою константу как DWord. Наверняка Ваш результат с тензодатчика в DWord предполагает фиксированную точку.
И зачем вообще Вам макрос на Си. Что в ф.области Вам не хватило вычислений?
Евгений Кислов
23.08.2016, 15:32
Дробная часть округляется. Если значение превышает DWord диапазон значений, будет использоваться значение 0 или 4294967295 .
Т.е. Float_2_DWord(0.035)=0
Вовсе нет.
Float_2_DWord(0.035)=0xf5c293d0. Это интерпретация, а не конвертация.
Технос, выложите проект, пожалуйста, с подробным пояснением, чего вы ожидаете от макроса.
Спасибо за оперативную реакцию на моё сообщение!!!
DWORD X;
float y;
X=MY_4_READ(4, 20);
//y=DWord_2_Float(X);
//X=X-Int32_2_DWord(35000);
//X=X-Float_2_DWord(0.035);
//X=X*2;
PSW[300] = LOWORD(X);
PSW[301] = HIWORD(X);
// на дисплей вывожу PSW[300] и PSW[301] как float
// вижу значение 0,035
// Хотелось бы провести арифметические операции, для примера вычесть/прибавить константу типа float
// умножил Х на 2 тоже получил странный результат.
// хотелось бы сделать калибровку датчика
Евгений Кислов
23.08.2016, 15:56
Как верно заметил Petera - вы уверены, что вашу задачу необходимо реализовывать именно через макросы?
Выкладываю пример, те же самые операции можно производить через функциональную область.
25915
меня бы так устроило, если бы можно было добавить регистр а не константу
нашёл, можно и с регистром. пробую
Евгений Кислов
23.08.2016, 17:45
нет не работает
Работает и с регистром. Если этот вариант вас не устраивает, то напишите, чем именно.
Евгений, не пойму как Вы убедились в том, что работает.
чисто теоретически должно, согласен, но не работает.
Ёпрст:(
Хоть бы архивировали свои проекты.
578 кБ против 8.31Мб
Евгений Кислов
24.08.2016, 10:49
Евгений, не пойму как Вы убедились в том, что работает.
чисто теоретически должно, согласен, но не работает.
Я же выложил проект (Проект_edit.txp). В нем через функциональную область происходит сложение двух float значений. Насколько я понял, вам требовалось именно это.
дда если разрядность ограничить на уровне 6 знаков после запятой, то работает
Я же выложил проект (Проект_edit.txp). В нем через функциональную область происходит сложение двух float значений. Насколько я понял, вам требовалось именно это.
Я думаю, что так и требуется. Но...
У него две ф.области
Одна физически читает X из модуля.
Вторая вычисляет
X=X-y
где X- полученные значения от тензодатчика
y - поправка
Обе ф.области непрерывные. И кто из них первый, а кто второй никто не скажет.
Непонятно зачем ДВЕ ф.области.
Нужно всего одна, с двумя последовательными функциями
-вызов макроса Fun1
-математика(арифметические вычисления).
Petera, не думал, что у Вас проблемы с интернетом. У меня - безлимит, на это уже не обращаю внимания
Petera, не думал, что у Вас проблемы с интернетом. У меня - безлимит, на это уже не обращаю внимания
Безлимит и у меня, но если дома 50/25 Мбит/с, то на работе всего 4096/512 Кбит/с.
И на работе я не один.
Евгений Кислов
24.08.2016, 11:17
Я соглашусь с Petera, что одной функциональной области достаточно. Но при этом я до сих пор не увидел реальной необходимости в макросе - никто не мешает в одной функциональной области опрашивать датчик и производить арифметические операции. Если данные приходят в пригодном для обработки виде, то можно вообще все это делать в пределах действия Математические операции, в качестве одного из операндов выбрав регистры датчика.
да, с этим не спорю, но проблема не в этом. 25932 тип данных был DEC / Поставил float - заработало
Я соглашусь с Petera, что одной функциональной области достаточно. Но при этом я до сих пор не увидел реальной необходимости в макросе - никто не мешает в одной функциональной области опрашивать датчик и производить арифметические операции. Если данные приходят в пригодном для обработки виде, то можно вообще все это делать в пределах действия Математические операции, в качестве одного из операндов выбрав регистры датчика.
Я думаю, что макрос ему нужен для чтения из модуля собственной функцией (видимо осталось от СП270).
Мне только не понятно, чего он добивается
Модуль выдает данные в формате DWord. В этом же формате можно прибавлять/вычитать поправку.
Зачем Float в вычислениях? Или в итоге, для дальнейшего использования именно Float нужен.
А так каша какая-то получается.
ЗЫ. Может все таки модуль выдает данные Float, а не DWord? Тогда зачем этот макрос вообще?
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot