Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 20

Тема: DWORD + DWORD

  1. #1

    По умолчанию DWORD + DWORD

    Здравствуйте администраторы, здравствуйте Petera!!!

    работаю с тензодатчиком. Результат в DWord

    пытаюсь скомпенсировать 0, т.е. добавить константу, не получается.


    float у ;
    DWord X;

    .. функция получения значения с тензодатчика в формате DWord

    y=0.035;
    X=X-Float_2_DWord(y);
    так не работает.
    Последний раз редактировалось Технос; 23.08.2016 в 15:05.

  2. #2
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    2,772

    По умолчанию

    Я конечно чайник в Си. Но чего вы хотите добиться своим преобразованием?
    Float_2_DWord(y) - инструкция преобразования из плавающей в DWord . Дробная часть округляется. Если значение превышает DWord диапазон значений, будет использоваться значение 0 или 4294967295 .
    Т.е. Float_2_DWord(0.035)=0
    Прибавляйте свою константу как DWord. Наверняка Ваш результат с тензодатчика в DWord предполагает фиксированную точку.

    И зачем вообще Вам макрос на Си. Что в ф.области Вам не хватило вычислений?
    26 лет деятельности в области промышленной безопасности
    https://www.youtube.com/c/ПетрАртюков

  3. #3
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    6,964

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Дробная часть округляется. Если значение превышает DWord диапазон значений, будет использоваться значение 0 или 4294967295 .
    Т.е. Float_2_DWord(0.035)=0
    Вовсе нет.
    Float_2_DWord(0.035)=0xf5c293d0. Это интерпретация, а не конвертация.

    Технос, выложите проект, пожалуйста, с подробным пояснением, чего вы ожидаете от макроса.

  4. #4

    По умолчанию

    Спасибо за оперативную реакцию на моё сообщение!!!

    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:49.

  5. #5
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    6,964

    По умолчанию

    Как верно заметил Petera - вы уверены, что вашу задачу необходимо реализовывать именно через макросы?
    Выкладываю пример, те же самые операции можно производить через функциональную область.

    Технос.txp

  6. #6

    По умолчанию

    меня бы так устроило, если бы можно было добавить регистр а не константу

  7. #7

    По умолчанию

    нашёл, можно и с регистром. пробую

  8. #8

    По умолчанию

    нет не работает
    Вложения Вложения

  9. #9

  10. #10

    По умолчанию

    Евгений, не пойму как Вы убедились в том, что работает.
    чисто теоретически должно, согласен, но не работает.
    Вложения Вложения
    Последний раз редактировалось Технос; 24.08.2016 в 11:04.

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. ПЛК 63 - DWORD в конфигурации
    от melky в разделе ПЛК63/73
    Ответов: 3
    Последнее сообщение: 13.10.2015, 18:12
  2. Передача DWORD в панель СП270
    от IIeroniux в разделе Панели оператора (HMI)
    Ответов: 15
    Последнее сообщение: 26.11.2013, 18:24
  3. REAL 2 DWORD СП270
    от kenny_sk8 в разделе ПЛК1хх
    Ответов: 1
    Последнее сообщение: 08.10.2012, 14:40
  4. 4байта dword из плк по модбус в lectus
    от alexval2006 в разделе ПЛК1хх
    Ответов: 5
    Последнее сообщение: 19.12.2011, 18:40

Ваши права

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