UniSet 2.32.1
Классы | Открытые типы | Открытые члены | Статические открытые данные | Защищенные члены | Защищенные данные | Друзья | Полный список членов класса
Класс uniset::Calibration

#include <Calibration.h>

Классы

class  Part
 
struct  Point
 

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

typedef float TypeOfValue
 
typedef std::vector< PartPartsVec
 

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

 Calibration (const std::string &name, const std::string &confile="calibration.xml", size_t reserv=50)
 
 Calibration (xmlNode *node, size_t reserv=50)
 
long getValue (const long raw, bool crop_raw=false)
 
long getMinValue () const noexcept
 
long getMaxValue () const noexcept
 
long getLeftValue () const noexcept
 
long getRightValue () const noexcept
 
long getRawValue (const long cal, bool range=false) const
 
long getMinRaw () const noexcept
 
long getMaxRaw () const noexcept
 
long getLeftRaw () const noexcept
 
long getRightRaw () const noexcept
 
void build (const std::string &name, const std::string &confile, xmlNode *node=0)
 
long tRound (const TypeOfValue &val) const
 
void setCacheSize (size_t sz)
 
size_t getCacheSize () const
 
void setCacheResortCycle (size_t n)
 
size_t getCacheResotrCycle () const noexcept
 
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()

Определения типов

◆ TypeOfValue

Тип для хранения значения

Методы

◆ build()

void uniset::Calibration::build ( const std::string & name,
const std::string & confile,
xmlNode * node = 0 )

построение характеристики из конф. файла

Аргументы
name- название характеристики в файле
confile- файл содержащий данные
node- если node!=0, то используется этот узел...

◆ getLeftRaw()

long uniset::Calibration::getLeftRaw ( ) const
inlinenoexcept

Возвращает крайнее левое значение 'y' встретившееся в диаграмме (ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ 'x'!)

◆ getLeftValue()

long uniset::Calibration::getLeftValue ( ) const
inlinenoexcept

Возвращает крайнее левое значение 'x' встретившееся в диаграмме (ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ 'x'!)

◆ getMaxRaw()

long uniset::Calibration::getMaxRaw ( ) const
inlinenoexcept

Возвращает максимальное значение 'y' встретившееся в диаграмме

◆ getMaxValue()

long uniset::Calibration::getMaxValue ( ) const
inlinenoexcept

Возвращает максимальное значение 'x' встретившееся в диаграмме

◆ getMinRaw()

long uniset::Calibration::getMinRaw ( ) const
inlinenoexcept

Возвращает минимальное значение 'y' встретившееся в диаграмме

◆ getMinValue()

long uniset::Calibration::getMinValue ( ) const
inlinenoexcept

Возвращает минимальное значение 'x' встретившееся в диаграмме

◆ getRawValue()

long uniset::Calibration::getRawValue ( const long cal,
bool range = false ) const

Получение сырого значения по калиброванному

Аргументы
range=trueвернуть крайнее значение в диаграмме если cal < leftVal или cal > rightVal (т.е. выходит за диапазон)

Если range=false, то может быть возвращено значение outOfRange.

◆ getRightRaw()

long uniset::Calibration::getRightRaw ( ) const
inlinenoexcept

Возвращает крайнее правое значение 'y' встретившееся в диаграмме (ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ 'x'!)

◆ getRightValue()

long uniset::Calibration::getRightValue ( ) const
inlinenoexcept

Возвращает крайнее правое значение 'x' встретившееся в диаграмме (ПОСЛЕ СОРТИРОВКИ ПО ВОЗРАСТАНИЮ 'x'!)

◆ getValue()

long uniset::Calibration::getValue ( const long raw,
bool crop_raw = false )

Получение калиброванного значения

Аргументы
raw- сырое значение
crop_raw- обрезать переданное значение по крайним точкам
Возвращает
Возвращает калиброванное или outOfRange

◆ tRound()

long uniset::Calibration::tRound ( const TypeOfValue & val) const
inline

преобразование типа для хранения в тип для аналоговых датчиков

Данные класса

◆ outOfRange

const long uniset::Calibration::outOfRange = std::numeric_limits<long>::max()
static

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

◆ ValueOutOfRange

const Calibration::TypeOfValue uniset::Calibration::ValueOutOfRange = std::numeric_limits<Calibration::TypeOfValue>::max()
static

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