Commit 5ff3bb2e authored by Pavel Vainerman's avatar Pavel Vainerman

Небольшая оптимизация и правки документации

parent 712fbe5a
...@@ -31,15 +31,12 @@ prop_prefix(""), ...@@ -31,15 +31,12 @@ prop_prefix(""),
mb(0), mb(0),
pollActivated(false) pollActivated(false)
{ {
// cout << "$ $" << endl;
if( objId == DefaultObjectId ) if( objId == DefaultObjectId )
throw UniSetTypes::SystemError("(MBExchange): objId=-1?!! Use --" + prefix + "-name" ); throw UniSetTypes::SystemError("(MBExchange): objId=-1?!! Use --" + prefix + "-name" );
mutex_start.setName(myname + "_mutex_start"); mutex_start.setName(myname + "_mutex_start");
// xmlNode* cnode = conf->getNode(myname); string conf_name(conf->getArgParam("--" + prefix + "-confnode",myname));
string conf_name = conf->getArgParam("--" + prefix + "-confnode",myname);
cnode = conf->getNode(conf_name); cnode = conf->getNode(conf_name);
if( cnode == NULL ) if( cnode == NULL )
...@@ -86,7 +83,6 @@ pollActivated(false) ...@@ -86,7 +83,6 @@ pollActivated(false)
force = conf->getArgInt("--" + prefix + "-force",it.getProp("force")); force = conf->getArgInt("--" + prefix + "-force",it.getProp("force"));
force_out = conf->getArgInt("--" + prefix + "-force-out",it.getProp("force_out")); force_out = conf->getArgInt("--" + prefix + "-force-out",it.getProp("force_out"));
// ********** HEARTBEAT ************* // ********** HEARTBEAT *************
string heart = conf->getArgParam("--" + prefix + "-heartbeat-id",it.getProp("heartbeat_id")); string heart = conf->getArgParam("--" + prefix + "-heartbeat-id",it.getProp("heartbeat_id"));
if( !heart.empty() ) if( !heart.empty() )
......
...@@ -63,12 +63,12 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname ) ...@@ -63,12 +63,12 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
restorer = NULL; restorer = NULL;
NCRestorer_XML* rxml = new NCRestorer_XML(datafile); NCRestorer_XML* rxml = new NCRestorer_XML(datafile);
string s_field = conf->getArgParam("--s-filter-field"); string s_field(conf->getArgParam("--s-filter-field"));
string s_fvalue = conf->getArgParam("--s-filter-value"); string s_fvalue(conf->getArgParam("--s-filter-value"));
string c_field = conf->getArgParam("--c-filter-field"); string c_field(conf->getArgParam("--c-filter-field"));
string c_fvalue = conf->getArgParam("--c-filter-value"); string c_fvalue(conf->getArgParam("--c-filter-value"));
string t_field = conf->getArgParam("--t-filter-field"); string t_field(conf->getArgParam("--t-filter-field"));
string t_fvalue = conf->getArgParam("--t-filter-value"); string t_fvalue(conf->getArgParam("--t-filter-value"));
heartbeat_node = conf->getArgParam("--heartbeat-node"); heartbeat_node = conf->getArgParam("--heartbeat-node");
if( heartbeat_node.empty() ) if( heartbeat_node.empty() )
......
...@@ -210,18 +210,18 @@ ...@@ -210,18 +210,18 @@
id - задаёт (внутренний) идентификатор "истории" id - задаёт (внутренний) идентификатор "истории"
fuse_id - идентификатор датчика "детонатора" fuse_id - идентификатор датчика "детонатора"
fuse_value - значение срабатывания (для аналогового "детонатора") fuse_value - значение срабатывания (для аналогового "детонатора")
fuse_invert - ивертировать (для дискретный "детонаторов"). fuse_invert - ивертировать (для дискретных "детонаторов").
Т.е. срабатвание на значение "0". Т.е. срабатвание на значение "0".
size - количество точек в хранимой истории size - количество точек в хранимой истории
filter - поле используемое в качестве фильтра, определяющего датчики filter - поле используемое в качестве фильтра, определяющего датчики
входящие в данную историю. входящие в данную группу (историю).
\endcode \endcode
Каждый датчик может входить в любое количество историй. Каждый датчик может входить в любое количество групп (историй).
Механизм фукнционирует по следующей логике: Механизм фукнционирует по следующей логике:
При запуске происходит считывание параметров секции <History> При запуске происходит считывание параметров секции <History>
и заполнение соответствующих структур хранения. При этом происходит и заполнение соответствующих структур хранения. При этом происходит
проход по секции <sensors> и если встречается "не пустое" поле заданное проход по секции <sensors> и если встречается "не пустое" поле заданное
...@@ -234,8 +234,8 @@ ...@@ -234,8 +234,8 @@
Помимо этого в фукнциях изменения датчиков (saveXXX, setXXX) отслеживается Помимо этого в фукнциях изменения датчиков (saveXXX, setXXX) отслеживается
изменение состояния "детонаторов". Если срабатывает заданое условие для изменение состояния "детонаторов". Если срабатывает заданое условие для
"сброса" дампа инициируется сигнал, в который передаётся идентификатор истории "сброса" дампа, инициируется сигнал, в который передаётся идентификатор истории
и текущая накопленная информация. и текущая накопленная история.
\section sec_SM_Pulsar "Мигание" специальным датчиком \section sec_SM_Pulsar "Мигание" специальным датчиком
В SM реализован механизм позволяющий задать специальный дискретный датчик ("пульсар"), В SM реализован механизм позволяющий задать специальный дискретный датчик ("пульсар"),
...@@ -250,7 +250,7 @@ ...@@ -250,7 +250,7 @@
Для оптимизации, по умолчанию в SM отключено сохранение каждого изменения датчиков в БД Для оптимизации, по умолчанию в SM отключено сохранение каждого изменения датчиков в БД
(реализованное в базовом классе IONotifyController). (реализованное в базовом классе IONotifyController).
Параметр командной строки \b --db-logging 1 позволяет включить этот механизм Параметр командной строки \b --db-logging 1 позволяет включить этот механизм
(в свою очередь он требует отдельной настройки). (в свою очередь работа с БД требует отдельной настройки).
*/ */
class SharedMemory: class SharedMemory:
......
...@@ -4,7 +4,7 @@ export LD_LIBRARY_PATH="../../lib/.libs;../lib/.libs" ...@@ -4,7 +4,7 @@ export LD_LIBRARY_PATH="../../lib/.libs;../lib/.libs"
ulimit -Sc 10000000000 ulimit -Sc 10000000000
./uniset-start.sh -g ./uniset-smemory --smemory-id SharedMemory --pulsar-id DO_C --pulsar-iotype DO \ ./uniset-start.sh -f ./uniset-smemory --smemory-id SharedMemory --pulsar-id DO_C --pulsar-iotype DO \
--confile test.xml --datfile test.xml \ --confile test.xml --datfile test.xml \
--unideb-add-levels info,crit,warn,level9,system \ --unideb-add-levels info,crit,warn,level9,system \
--dlog-add-levels info,crit,warn \ --dlog-add-levels info,crit,warn \
......
...@@ -110,7 +110,7 @@ class Calibration ...@@ -110,7 +110,7 @@ class Calibration
/*! преобразование типа для хранения /*! преобразование типа для хранения
в тип для аналоговых датчиков в тип для аналоговых датчиков
*/ */
inline long tRound( const TypeOfValue& val ) inline long tRound( const TypeOfValue& val ) const
{ {
return lround(val); return lround(val);
} }
...@@ -118,8 +118,6 @@ class Calibration ...@@ -118,8 +118,6 @@ class Calibration
friend std::ostream& operator<<(std::ostream& os, Calibration& c ); friend std::ostream& operator<<(std::ostream& os, Calibration& c );
friend std::ostream& operator<<(std::ostream& os, Calibration* c ); friend std::ostream& operator<<(std::ostream& os, Calibration* c );
protected:
/*! точка характеристики */ /*! точка характеристики */
struct Point struct Point
{ {
...@@ -129,7 +127,7 @@ class Calibration ...@@ -129,7 +127,7 @@ class Calibration
TypeOfValue x; TypeOfValue x;
TypeOfValue y; TypeOfValue y;
inline bool operator < ( const Point& p ) const inline bool operator < ( const Point& p ) const
{ {
return ( x < p.x ); return ( x < p.x );
} }
...@@ -139,37 +137,37 @@ class Calibration ...@@ -139,37 +137,37 @@ class Calibration
class Part class Part
{ {
public: public:
Part( Point& pleft, Point& pright ); Part( const Point& pleft, const Point& pright );
~Part(){}; ~Part(){};
/*! находится ли точка на данном участке */ /*! находится ли точка на данном участке */
bool check( Point& p ); bool check( const Point& p ) const;
/*! находится ли точка на данном участке по X */ /*! находится ли точка на данном участке по X */
bool checkX( TypeOfValue x ); bool checkX( const TypeOfValue& x ) const;
/*! находится ли точка на данном участке по Y */ /*! находится ли точка на данном участке по Y */
bool checkY( TypeOfValue y ); bool checkY( const TypeOfValue& y ) const;
// функции могут вернуть OutOfRange // функции могут вернуть OutOfRange
TypeOfValue getY( TypeOfValue x ); /*!< получить значение Y */ TypeOfValue getY( const TypeOfValue& x ) const; /*!< получить значение Y */
TypeOfValue getX( TypeOfValue y ); /*!< получить значение X */ TypeOfValue getX( const TypeOfValue& y ) const; /*!< получить значение X */
TypeOfValue calcY( TypeOfValue x ); /*!< расчитать значение для x */ TypeOfValue calcY( const TypeOfValue& x ) const; /*!< расчитать значение для x */
TypeOfValue calcX( TypeOfValue y ); /*!< расчитать значение для y */ TypeOfValue calcX( const TypeOfValue& y ) const; /*!< расчитать значение для y */
inline bool operator < ( const Part& p ) const inline bool operator < ( const Part& p ) const
{ {
return (p_right < p.p_right); return (p_right < p.p_right);
} }
inline Point leftPoint(){ return p_left; } inline Point leftPoint() const { return p_left; }
inline Point rightPoint(){ return p_right; } inline Point rightPoint() const { return p_right; }
inline TypeOfValue getK(){ return k; } /*!< получить коэффициент наклона */ inline TypeOfValue getK() const { return k; } /*!< получить коэффициент наклона */
inline TypeOfValue left_x(){ return p_left.x; } inline TypeOfValue left_x() const { return p_left.x; }
inline TypeOfValue left_y(){ return p_left.y; } inline TypeOfValue left_y() const { return p_left.y; }
inline TypeOfValue right_x(){ return p_right.x; } inline TypeOfValue right_x() const { return p_right.x; }
inline TypeOfValue right_y(){ return p_right.y; } inline TypeOfValue right_y() const { return p_right.y; }
protected: protected:
Point p_left; /*!< левый предел участка */ Point p_left; /*!< левый предел участка */
...@@ -177,6 +175,8 @@ class Calibration ...@@ -177,6 +175,8 @@ class Calibration
TypeOfValue k; /*!< коэффициент наклона */ TypeOfValue k; /*!< коэффициент наклона */
}; };
protected:
// список надо отсортировать по x! // список надо отсортировать по x!
typedef std::list<Part> PartsList; typedef std::list<Part> PartsList;
......
#include <sstream> #include <sstream>
#include <iostream> #include <iostream>
#include <algorithm>
#include "UniXML.h" #include "UniXML.h"
#include "Exceptions.h" #include "Exceptions.h"
#include "Calibration.h" #include "Calibration.h"
...@@ -8,7 +9,7 @@ using namespace std; ...@@ -8,7 +9,7 @@ using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
Calibration::Part::Part( Point& pleft, Point& pright ): Calibration::Part::Part( const Point& pleft, const Point& pright ):
p_left(pleft), p_left(pleft),
p_right(pright), p_right(pright),
k(0) k(0)
...@@ -28,19 +29,19 @@ Calibration::Part::Part( Point& pleft, Point& pright ): ...@@ -28,19 +29,19 @@ Calibration::Part::Part( Point& pleft, Point& pright ):
k = ( p_right.y - p_left.y ) / ( p_right.x - p_left.x ); k = ( p_right.y - p_left.y ) / ( p_right.x - p_left.x );
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
bool Calibration::Part::check( Point& p ) bool Calibration::Part::check( const Point& p ) const
{ {
return ( checkX(p.x) && checkY(p.y) ); return ( checkX(p.x) && checkY(p.y) );
} }
bool Calibration::Part::checkX( TypeOfValue x ) bool Calibration::Part::checkX( const TypeOfValue& x ) const
{ {
if( x < p_left.x || x > p_right.x ) if( x < p_left.x || x > p_right.x )
return false; return false;
return true; return true;
} }
bool Calibration::Part::checkY( TypeOfValue y ) bool Calibration::Part::checkY( const TypeOfValue& y ) const
{ {
if( y < p_left.y || y > p_right.y ) if( y < p_left.y || y > p_right.y )
return false; return false;
...@@ -49,7 +50,7 @@ bool Calibration::Part::checkY( TypeOfValue y ) ...@@ -49,7 +50,7 @@ bool Calibration::Part::checkY( TypeOfValue y )
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
Calibration::TypeOfValue Calibration::Part::getY( TypeOfValue x ) Calibration::TypeOfValue Calibration::Part::getY( const TypeOfValue& x ) const
{ {
if( !checkX(x) ) if( !checkX(x) )
return Calibration::outOfRange; return Calibration::outOfRange;
...@@ -63,7 +64,7 @@ Calibration::TypeOfValue Calibration::Part::getY( TypeOfValue x ) ...@@ -63,7 +64,7 @@ Calibration::TypeOfValue Calibration::Part::getY( TypeOfValue x )
return calcY(x); return calcY(x);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
Calibration::TypeOfValue Calibration::Part::getX( TypeOfValue y ) Calibration::TypeOfValue Calibration::Part::getX( const TypeOfValue& y ) const
{ {
if( !checkY(y) ) if( !checkY(y) )
return Calibration::outOfRange; return Calibration::outOfRange;
...@@ -77,13 +78,13 @@ Calibration::TypeOfValue Calibration::Part::getX( TypeOfValue y ) ...@@ -77,13 +78,13 @@ Calibration::TypeOfValue Calibration::Part::getX( TypeOfValue y )
return calcX(y); return calcX(y);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
Calibration::TypeOfValue Calibration::Part::calcY( TypeOfValue x ) Calibration::TypeOfValue Calibration::Part::calcY( const TypeOfValue& x ) const
{ {
// y = y0 + kx // y = y0 + kx
return k*(x-p_left.x)+p_left.y; return k*(x-p_left.x)+p_left.y;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
Calibration::TypeOfValue Calibration::Part::calcX( TypeOfValue y ) Calibration::TypeOfValue Calibration::Part::calcX( const TypeOfValue& y ) const
{ {
// x = (y - y0) / k // x = (y - y0) / k
if( k == 0 ) if( k == 0 )
...@@ -220,16 +221,13 @@ void Calibration::build( const string& name, const string& confile, xmlNode* roo ...@@ -220,16 +221,13 @@ void Calibration::build( const string& name, const string& confile, xmlNode* roo
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
long Calibration::getValue( long raw, bool crop_raw ) long Calibration::getValue( long raw, bool crop_raw )
{ {
if( crop_raw ) // если x левее первого отрезка то берём первую точку...
{ if( raw < leftRaw )
// если x левее первого отрезка то берём первую точку... return (crop_raw ? leftVal : outOfRange);
if( raw < leftRaw )
return leftVal;
// если x правее последнего то берём крайнюю точку... // если x правее последнего то берём крайнюю точку...
if( raw > rightRaw ) if( raw > rightRaw )
return rightVal; return (crop_raw ? rightVal : outOfRange);
}
for( PartsList::iterator it=plist.begin(); it!=plist.end(); ++it ) for( PartsList::iterator it=plist.begin(); it!=plist.end(); ++it )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment