|
UniSet
2.2.1
|
#include <Calibration.h>
Классы | |
| struct | CacheInfo |
| class | Part |
| struct | Point |
Открытые типы | |
| typedef float | TypeOfValue |
| typedef std::vector< Part > | PartsVec |
Открытые члены | |
| Calibration (const std::string &name, const std::string &confile="calibration.xml") | |
| Calibration (xmlNode *node) | |
| long | getValue (long raw, bool crop_raw=false) |
| long | getMinValue () |
| long | getMaxValue () |
| long | getLeftValue () |
| long | getRightValue () |
| long | getRawValue (long cal, bool range=false) |
| long | getMinRaw () |
| long | getMaxRaw () |
| long | getLeftRaw () |
| long | getRightRaw () |
| void | build (const std::string &name, const std::string &confile, xmlNode *node=0) |
| long | tRound (const TypeOfValue &val) const |
| void | setCacheSize (unsigned int sz) |
| unsigned int | getCacheSize () |
| void | setCacheResortCycle (unsigned int n) |
| unsigned int | getCacheResotrCycle () |
| std::string | getName () |
Статические открытые данные | |
| static const TypeOfValue | ValueOutOfRange = std::numeric_limits<Calibration::TypeOfValue>::max() |
| static const long | outOfRange = std::numeric_limits<long>::max() |
Защищенные члены | |
| void | insertToCache (const long raw, const long val) |
Защищенные данные | |
| long | minRaw |
| long | maxRaw |
| long | minVal |
| long | maxVal |
| long | rightVal |
| long | leftVal |
| long | rightRaw |
| long | leftRaw |
Друзья | |
| std::ostream & | operator<< (std::ostream &os, Calibration &c) |
| std::ostream & | operator<< (std::ostream &os, Calibration *c) |
Класс позволяющий загружать калибровочную характеристику из конфигурационного (xml)файла и получать по ней точки.
C, калиброванное значение
^
|
|
|
|
-------->
R(raw value), сырое значение
Сами диаграммы представляют из себя следующую секцию в xml x - сырое значение (по которому ведётся поиск) y - калиброванное значение
<Calibrations name="Calibrations"> <diagram name="testcal"> <point x="-200" y="-60"/> <point x="-100" y="-60"/> <point x="-50" y="-20"/> <point x="0" y="0"/> <point x="50" y="20"/> <point x="100" y="60"/> <point x="200" y="60"/> </diagram> <diagram name="NNN"> ... </diagram> <diagram name="ZZZ"> ... </diagram> ... </Calibrations>
Диаграмма позволяет задать множество точек. На отрезках между точками используется линейная аппроксимация.
Т.е. часто большую часть времени (во многих задачах) аналоговое значение, меняется в небольших пределах, то добавлен кэш ( rawValue --> calValue ) по умолчанию на 5 значений. Размер кэша можно задать (поменять или отключить) при помощи Calibration::setCacheSize().
Помимо этого, с учётом того, что каждое попадание в кэш обновляет счётчик обращений к значению, необходимо пересортировывать весь кэш (чтобы наиболее часто используемые были в начале). Чтобы не делать эту операцию каждый раз, сделан счётчик циклов. Т.е. через какое количество обращений к кэшу, производить принудительную пересортировку. Значение по умолчанию - 5(размер кэша). Задать можно при помощи Calibration::setCacheResortCycle()
| typedef float Calibration::TypeOfValue |
Тип для хранения значения
| void Calibration::build | ( | const std::string & | name, |
| const std::string & | confile, | ||
| xmlNode * | node = 0 |
||
| ) |
построение характеристрики из конф. файла
| name | - название характеристики в файле |
| confile | - файл содержащий данные |
| node | - если node!=0, то используется этот узел... |
Перекрестные ссылки UniXML_iterator::goChildren() и UniXML_iterator::goNext().
| long Calibration::getLeftRaw | ( | ) | [inline] |
Возвращает крайнее левое значение 'y' встретившееся в диаграмме (ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ 'x'!)
| long Calibration::getLeftValue | ( | ) | [inline] |
Возвращает крайнее левое значение 'x' встретившееся в диаграмме (ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ 'x'!)
| long Calibration::getMaxRaw | ( | ) | [inline] |
Возвращает максимальное значение 'y' встретившееся в диаграмме
| long Calibration::getMaxValue | ( | ) | [inline] |
Возвращает максимальное значение 'x' втретившееся в диаграмме
| long Calibration::getMinRaw | ( | ) | [inline] |
Возвращает минимальное значение 'y' встретившееся в диаграмме
| long Calibration::getMinValue | ( | ) | [inline] |
Возвращает минимальное значение 'x' встретившееся в диаграмме
| long Calibration::getRawValue | ( | long | cal, |
| bool | range = false |
||
| ) |
Получение сырого значения по калиброванному
| range=true | вернуть крайнее значение в диаграмме если cal < leftVal или cal > rightVal (т.е. выходит за диапазон) |
Если range=false, то может быть возвращено значение outOfRange.
Перекрестные ссылки outOfRange, tRound() и ValueOutOfRange.
| long Calibration::getRightRaw | ( | ) | [inline] |
Возвращает крайнее правое значение 'y' встретившееся в диаграмме (ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ 'x'!)
| long Calibration::getRightValue | ( | ) | [inline] |
Возвращает крайнее правое значение 'x' встретившееся в диаграмме (ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ 'x'!)
| long Calibration::getValue | ( | long | raw, |
| bool | crop_raw = false |
||
| ) |
Получение калиброванного значения
| raw | - сырое значение |
| crop_raw | - обрезать переданное значение по крайним точкам |
Перекрестные ссылки outOfRange, tRound() и ValueOutOfRange.
| long Calibration::tRound | ( | const TypeOfValue & | val | ) | const [inline] |
преобразование типа для хранения в тип для аналоговых датчиков
Используется в getRawValue() и getValue().
const long Calibration::outOfRange = std::numeric_limits<long>::max() [static] |
выход за границы диапазона
Используется в getRawValue() и getValue().
const Calibration::TypeOfValue Calibration::ValueOutOfRange = std::numeric_limits<Calibration::TypeOfValue>::max() [static] |
выход за границы диапазона (TypeOfValue)
Используется в getRawValue(), getValue(), Calibration::Part::getX() и Calibration::Part::getY().
1.7.6.1