Форум » » чайниковский вопрос » Ответить

чайниковский вопрос

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.: Да, кому и кобыла невеста.



полная версия страницы