UniSet  2.2.1
Классы | Открытые типы | Открытые члены | Статические открытые данные | Защищенные члены | Защищенные данные | Друзья
Класс Calibration

#include <Calibration.h>

Полный список членов класса

Классы

struct  CacheInfo
class  Part
struct  Point

Открытые типы

typedef float TypeOfValue
typedef std::vector< PartPartsVec

Открытые члены

 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

Перекрестные ссылки 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().

выход за границы диапазона (TypeOfValue)

Используется в getRawValue(), getValue(), Calibration::Part::getX() и Calibration::Part::getY().


Объявления и описания членов классов находятся в файлах: