Показано с 1 по 10 из 10

Тема: вывод отрицательного значения

  1. #1

    По умолчанию вывод отрицательного значения

    Здравствуйте!
    Я использую сторонний прибор и через шлюз вывожу температуру.
    С положительными значениями проблем нет.
    А вот как вывести отрицательное значение?
    Можно выбрать формат данных только unsigned.

  2. #2
    Пользователь
    Регистрация
    08.04.2015
    Адрес
    Воронежская область
    Сообщений
    624

    По умолчанию

    Число в формате INT будет выводится отрицательные значения если оно имеет отрицательные значения
    в дополнительном коде . Смотри в картинках .
    Но есть подводный камень ФИЧА ( может уже исправили ) двойное преобразование --получает нормально , а из архива опять преобразует и результат иногда -1 получается 65535 (FFFF или 1111 1111 1111 1111) и т.д..
    Температура окружающего воздуха.png Преобразовать в дополнительный код.png
    Пока не проверял исправили или нет ---- температуры положительные на улице.
    Последний раз редактировалось Алексеев; 22.08.2019 в 23:51.

  3. #3

    По умолчанию

    спасибо разобрался , пришлось добавить 11111111 в старшие разряды

  4. #4
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    4,055

    По умолчанию

    Цитата Сообщение от urik446 Посмотреть сообщение
    спасибо разобрался , пришлось добавить 11111111 в старшие разряды
    Это в прямом коде положительные и отрицательные числа отличаются только значением бита в старшем разряде! В дополнительном коде, что там присутствует, это не так, там как бы, в отличии от прямого кода, отрицательные значения в "перевёрнутом" виде!
    Можно Овен попросить в настройки добавить дополнительно к знаковым целочисленным типам данных применяемый код(дополнительный, прямой, обратный), надеюсь понятно рассказал!
    https://ru.wikipedia.org/wiki/Дополнительный_код
    https://ru.wikipedia.org/wiki/Прямой_код
    https://ru.wikipedia.org/wiki/Обратный_код
    https://ru.wikipedia.org/wiki/Целое_(тип_данных)
    Последний раз редактировалось Сергей0308; 23.08.2019 в 22:14.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  5. #5
    Пользователь
    Регистрация
    08.04.2015
    Адрес
    Воронежская область
    Сообщений
    624

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение
    Это в прямом коде положительные и отрицательные числа отличаются только значением бита в старшем разряде! В дополнительном коде, что там присутствует, это не так, там как бы, в отличии от прямого кода, отрицательные значения в "перевёрнутом" виде!
    Можно Овен попросить в настройки добавить дополнительно к знаковым целочисленным типам данных применяемый код(дополнительный, прямой, обратный), надеюсь понятно рассказал!
    https://ru.wikipedia.org/wiki/Дополнительный_код
    Не совсем . Если вы хоть раз начали пользоваться двоичной арифметикой ( а не десятичной как мы пользуемся ) вы бы осознали
    что -1 это 1111 1111 1111 1111 , а 1 это 0000 0000 0000 0001 --- а теперь сложите .
    и получите 0000 0000 0000 0000 . Как и должно быть . И нечего мудрить . Во многих системах и языках очень много форматов данных,
    но это лишь для оптимизации памяти хранения и скорости вычисления . Мне так кажется .

  6. #6

    По умолчанию

    Да понятно, я считывал температуру с датчика ds18b20 ,получался обратный код но 8 разрядов . К примеру -3 получалось 1111 1100 .Я и передавал 0x00FC . И отображалось число 252 . А сейчас передаю 0xFFFC и теперь отображается всё правильно -3.

  7. #7
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    4,055

    По умолчанию

    Цитата Сообщение от Алексеев Посмотреть сообщение
    Не совсем . Если вы хоть раз начали пользоваться двоичной арифметикой ( а не десятичной как мы пользуемся ) вы бы осознали
    что -1 это 1111 1111 1111 1111 , а 1 это 0000 0000 0000 0001 --- а теперь сложите .
    и получите 0000 0000 0000 0000 . Как и должно быть . И нечего мудрить . Во многих системах и языках очень много форматов данных,
    но это лишь для оптимизации памяти хранения и скорости вычисления . Мне так кажется .
    Мудрить не стоит, но я же даже ссылку дал, можете почитать, зачем применяют тот или иной код, его преимущества и недостатки тоже можно изучить, этого никто не запрещает, а я даже советую, для этого и ссылку дал!
    Речь шла, во всяком случае до этого, об отображении, Вы говорите, по сути, к чёрту отображение, давайте лучше отнимем(сложим), найдём разность или сумму, какая здесь связь?
    Последний раз редактировалось Сергей0308; 23.08.2019 в 20:51.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  8. #8
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    4,055

    По умолчанию

    Цитата Сообщение от urik446 Посмотреть сообщение
    Да понятно, я считывал температуру с датчика ds18b20 ,получался обратный код но 8 разрядов . К примеру -3 получалось 1111 1100 .Я и передавал 0x00FC . И отображалось число 252 . А сейчас передаю 0xFFFC и теперь отображается всё правильно -3.
    У Вас наверно обратный код, надо переделать в дополнительный, тогда должно всё правильно отображаться!

    Предположу и другой вариант, на мой взгляд, более предпочтительный: возможно Вы не совсем точно посмотрели и "-3" в двоичном виде выглядит так: 1111 1101, тогда у вас дополнительный код и надо всего лишь преобразовать для 16 битной переменной, если нет такого типа данных(такой размерности) в облаке!

    Ранее в разговоре с представителями Овен они заверяли, что там(в облаке) есть все необходимые типы данных, что меня очень удивило, но я поспорить не мог, так как никогда не имел дела с ихним облачным сервисом, есть надежда, что практика это поправила и не всё у них(как обычно) предусмотрено!

    Если второй вариант, то так можно преобразовать:

    INT8_TO_INT16.PNG

    INT8_TO_INT16.owl
    Последний раз редактировалось Сергей0308; 24.08.2019 в 04:28.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

  9. #9
    Пользователь
    Регистрация
    08.04.2015
    Адрес
    Воронежская область
    Сообщений
    624

    По умолчанию

    Цитата Сообщение от Сергей0308 Посмотреть сообщение

    Если второй вариант, то так можно преобразовать:

    INT8_TO_INT16.PNG

    INT8_TO_INT16.owl
    Ранее было сказано что у коллеги устройство не фирмы овен . И как Я понял Он работал с одним байтом .
    А нужно было работать с двумя байтами то есть регистр или слово ( два байта ) , мне так это представляется,
    что произошло у коллеги .
    Последний раз редактировалось Алексеев; 25.08.2019 в 00:32.

  10. #10
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    4,055

    По умолчанию

    Цитата Сообщение от Алексеев Посмотреть сообщение
    Ранее было сказано что у коллеги устройство не фирмы овен . И как Я понял Он работал с одним байтом .
    А нужно было работать с двумя байтами то есть регистр или слово ( два байта ) , мне так это представляется,
    что произошло произошло у коллеги .
    В этом и проблема, что число однобайтовое, для двухбайтового в облачном сервисе есть тип данных INT16, а для однобайтовых знаковых чисел(INT8) нет такого типа данных в облачном сервисе Овена, хотя в природе существует! Вероятно такое будет редко встречаться, поэтому Овен счёл это ненужным!

    И невозможно с INT8(числа от "-128" до 127) обращаться как с INT16 даже уже потому, что весь его диапазон кодов(0-255) будет лежать в области положительных значений INT16!
    Последний раз редактировалось Сергей0308; 24.08.2019 в 09:36.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 15.03.2018, 09:24
  2. Вывод значения в несколько строк
    от Vova_20_02 в разделе Master SCADA
    Ответов: 3
    Последнее сообщение: 05.07.2017, 09:49
  3. Вывод значения аналогового входа на экран ПР200
    от sergey_gl в разделе Программируемые реле
    Ответов: 4
    Последнее сообщение: 13.10.2015, 10:53
  4. Вывод среднесуточного значения в ПЛК 154
    от desperadoes в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 14.11.2011, 12:24
  5. Ответов: 1
    Последнее сообщение: 03.02.2010, 23:57

Ваши права

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