Здравствуйте!
Я использую сторонний прибор и через шлюз вывожу температуру.
С положительными значениями проблем нет.
А вот как вывести отрицательное значение?
Можно выбрать формат данных только unsigned.
Здравствуйте!
Я использую сторонний прибор и через шлюз вывожу температуру.
С положительными значениями проблем нет.
А вот как вывести отрицательное значение?
Можно выбрать формат данных только unsigned.
Число в формате INT будет выводится отрицательные значения если оно имеет отрицательные значения
в дополнительном коде . Смотри в картинках .
Но есть подводный камень ФИЧА ( может уже исправили ) двойное преобразование --получает нормально , а из архива опять преобразует и результат иногда -1 получается 65535 (FFFF или 1111 1111 1111 1111) и т.д..
Температура окружающего воздуха.png Преобразовать в дополнительный код.png
Пока не проверял исправили или нет ---- температуры положительные на улице.
Последний раз редактировалось Алексеев; 22.08.2019 в 23:51.
спасибо разобрался , пришлось добавить 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.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Не совсем . Если вы хоть раз начали пользоваться двоичной арифметикой ( а не десятичной как мы пользуемся ) вы бы осознали
что -1 это 1111 1111 1111 1111 , а 1 это 0000 0000 0000 0001 --- а теперь сложите .
и получите 0000 0000 0000 0000 . Как и должно быть . И нечего мудрить . Во многих системах и языках очень много форматов данных,
но это лишь для оптимизации памяти хранения и скорости вычисления . Мне так кажется .
Да понятно, я считывал температуру с датчика ds18b20 ,получался обратный код но 8 разрядов . К примеру -3 получалось 1111 1100 .Я и передавал 0x00FC . И отображалось число 252 . А сейчас передаю 0xFFFC и теперь отображается всё правильно -3.
Мудрить не стоит, но я же даже ссылку дал, можете почитать, зачем применяют тот или иной код, его преимущества и недостатки тоже можно изучить, этого никто не запрещает, а я даже советую, для этого и ссылку дал!
Речь шла, во всяком случае до этого, об отображении, Вы говорите, по сути, к чёрту отображение, давайте лучше отнимем(сложим), найдём разность или сумму, какая здесь связь?
Последний раз редактировалось Сергей0308; 23.08.2019 в 20:51.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
У Вас наверно обратный код, надо переделать в дополнительный, тогда должно всё правильно отображаться!
Предположу и другой вариант, на мой взгляд, более предпочтительный: возможно Вы не совсем точно посмотрели и "-3" в двоичном виде выглядит так: 1111 1101, тогда у вас дополнительный код и надо всего лишь преобразовать для 16 битной переменной, если нет такого типа данных(такой размерности) в облаке!
Ранее в разговоре с представителями Овен они заверяли, что там(в облаке) есть все необходимые типы данных, что меня очень удивило, но я поспорить не мог, так как никогда не имел дела с ихним облачным сервисом, есть надежда, что практика это поправила и не всё у них(как обычно) предусмотрено!
Если второй вариант, то так можно преобразовать:
INT8_TO_INT16.PNG
INT8_TO_INT16.owl
Последний раз редактировалось Сергей0308; 24.08.2019 в 04:28.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Последний раз редактировалось Алексеев; 25.08.2019 в 00:32.
В этом и проблема, что число однобайтовое, для двухбайтового в облачном сервисе есть тип данных INT16, а для однобайтовых знаковых чисел(INT8) нет такого типа данных в облачном сервисе Овена, хотя в природе существует! Вероятно такое будет редко встречаться, поэтому Овен счёл это ненужным!
И невозможно с INT8(числа от "-128" до 127) обращаться как с INT16 даже уже потому, что весь его диапазон кодов(0-255) будет лежать в области положительных значений INT16!
Последний раз редактировалось Сергей0308; 24.08.2019 в 09:36.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.