Форум » » чайниковский вопрос » Ответить
чайниковский вопрос
Vladimir: Извините за дилетантский вопрос (давненько не программировал, забылось уже....:-((() приходит hex-посылка \xFF\xA9 как на панели из него получить "-87" ?
Ответов - 15
Игорь K.: Примените прямую обработку события через Serial I/O. При получении \xFF\xA9 выдавайте \x2D\x38\x37 Кроме того, используйте Make String Permanent. Надеюсь, это поможет.
Igor: Vladimir, а откуда, если не секрет, такое приходит?
Vladimir: температура от автоматики котла по модбасу
Vladimir: если быть точнее то температура наружнего воздуха от датчика автоматики котла , -8,7 градуса было ночью под Питером.....
Igor: А, Modbus. Там может всплыть много нового, интересного, я бы даже сказал - увлекательного. Если стоит задача сделать быстро, а разработчиками автоматики не применено какое-нибудь колдунство для передачи, например, отрицательных величин, то соглашусь с предложением Игоря К.
marin_n: FF FF - FF A9 + 1d = 56H + 1d = 86d+1d = 87d переводим в serial ,добавим запятую и ставим впереди знак минус
Igor: marin_n, и откуда такой алгоритм? Документацию на автоматику изучили или дедукция?
marin_n: или я ошибаюсь? поправьте меня
Igor: marin_n, мы не знаем, потому интересуемся происхождением предложенного алгоритма.
Игорь K.: Если линейно изменяющуюся величину отображать и запускать в обработку, то нужно описание или снять десяток точек соответствия данных от датчика текущей температуры. А вот когда будет табличка с графиком, то и алгоритм можно соорудить. Ведь может зависимость и нелинейной быть, и своеобразно через 0 град. перескакивать.
marin_n: нужно несколько измерений
Вячеслав: Это обычное правило преобразования числа из отрицательного в положительное (по сути основы двоичного представления). Реализация только предложена необычная ) Чтоб из положительного преобразовать в отрицательное берем инверсию (not) и прибавляем единицу Чтоб из отрицательного получить положительное (с потерей знака само собой) отнимаем единицу и берем инверсию (not) Итого по вопросу: if (temp>32767) //определяем что число отрицательное по старшему биту { temp=not(temp-1); //преобразуем к положительному виду temp$="-"+ITOA(temp/10)+","+ITOA(temp mod 10)+"\xB0С";//добавляем знак минус впереди, выделяем целую и дробную части, добавляем символ градуса } else { temp$=ITOA(temp/10)+","+ITOA(temp mod 10)+"\xB0С";//тоже но для положительных температур } P.S. У нас офисный Modbus RTU выдает 4-x байтное представление температуры по стандарту IEEE 754. Которое надо декодировать AnalogToFloatingPoint (fptoa) модулем.
Игорь K.: Вячеслав, вас так и тянет здесь оперировать с отрицательными числами в SIMPL+. Может лучше прологарифмировать весь этот беспредел?
Вячеслав: Можно конечно тысячу строк-вариантов на Serial i/o нарисовать на каждое дробное значение в диапазоне -40.0 +50.9. Тут, как Вы сами говорите "каждый делает как ему удобно" Да и откуда вообще вдруг появилась задача апроксимации линейной или логарифмической? Ведь устройство возвращает конкретную величину текущей температуры.
Игорь K.: Да, кому и кобыла невеста.
полная версия страницы