|
| 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 () |
|
Класс позволяющий загружать калибровочную
характеристику из конфигурационного (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()