Commit 08e088e0 authored by Pavel Vainerman's avatar Pavel Vainerman

Первый этап переделок в связи с переходом на getValue/setValue

parent 8e80c2fd
...@@ -57,7 +57,6 @@ interface IOController_i : ObjectsManager_i ...@@ -57,7 +57,6 @@ interface IOController_i : ObjectsManager_i
{ {
}; };
/*! Информация о датчике */ /*! Информация о датчике */
struct SensorInfo struct SensorInfo
{ {
...@@ -118,8 +117,7 @@ interface IOController_i : ObjectsManager_i ...@@ -118,8 +117,7 @@ interface IOController_i : ObjectsManager_i
typedef sequence<SensorIOInfo> SensorInfoSeq; typedef sequence<SensorIOInfo> SensorInfoSeq;
SensorInfoSeq getSensorsMap(); SensorInfoSeq getSensorsMap();
SensorIOInfo getSInfo(in SensorInfo si) raises(NameNotFound); SensorIOInfo getSensorIOInfo( in SensorInfo si ) raises(NameNotFound);
// -- Функции работы со списком датчиков -- // -- Функции работы со списком датчиков --
......
...@@ -37,7 +37,6 @@ static struct option longopts[] = { ...@@ -37,7 +37,6 @@ static struct option longopts[] = {
{ "create", no_argument, 0, 'b' }, { "create", no_argument, 0, 'b' },
{ "exist", no_argument, 0, 'e' }, { "exist", no_argument, 0, 'e' },
{ "omap", no_argument, 0, 'o' }, { "omap", no_argument, 0, 'o' },
{ "msgmap", no_argument, 0, 'm' },
{ "start", no_argument, 0, 's' }, { "start", no_argument, 0, 's' },
{ "finish", no_argument, 0, 'f' }, { "finish", no_argument, 0, 'f' },
{ "foldUp", no_argument, 0, 'u' }, { "foldUp", no_argument, 0, 'u' },
...@@ -49,7 +48,6 @@ static struct option longopts[] = { ...@@ -49,7 +48,6 @@ static struct option longopts[] = {
{ "getRawValue", required_argument, 0, 'w' }, { "getRawValue", required_argument, 0, 'w' },
{ "getCalibrate", required_argument, 0, 'y' }, { "getCalibrate", required_argument, 0, 'y' },
{ "oinfo", required_argument, 0, 'p' }, { "oinfo", required_argument, 0, 'p' },
{ "verbose", no_argument, 0, 'v' },
{ NULL, 0, 0, 0 } { NULL, 0, 0, 0 }
}; };
...@@ -60,7 +58,6 @@ static bool commandToAll( const string& section, ObjectRepository *rep, Command ...@@ -60,7 +58,6 @@ static bool commandToAll( const string& section, ObjectRepository *rep, Command
static void createSections( UniSetTypes::Configuration* c ); static void createSections( UniSetTypes::Configuration* c );
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
int omap(); int omap();
int msgmap();
int configure( const string& args, UniversalInterface &ui ); int configure( const string& args, UniversalInterface &ui );
int logRotate( const string& args, UniversalInterface &ui ); int logRotate( const string& args, UniversalInterface &ui );
int setValue( const string& args, UniversalInterface &ui, Configuration* conf = UniSetTypes::conf ); int setValue( const string& args, UniversalInterface &ui, Configuration* conf = UniSetTypes::conf );
...@@ -96,7 +93,6 @@ static void usage() ...@@ -96,7 +93,6 @@ static void usage()
print_help(24, "-b|--create ","Создание репозитория\n"); print_help(24, "-b|--create ","Создание репозитория\n");
print_help(24, "-e|--exist ","Вызов функции exist() показывающей какие объекты зарегистрированы и доступны.\n"); print_help(24, "-e|--exist ","Вызов функции exist() показывающей какие объекты зарегистрированы и доступны.\n");
print_help(24, "-o|--omap ","Вывод на экран списка объектов с идентификаторами.\n"); print_help(24, "-o|--omap ","Вывод на экран списка объектов с идентификаторами.\n");
print_help(24, "-m|--msgmap ","Вывод на экран списка сообщений с идентификаторами.\n");
print_help(24, "-s|--start ","Посылка SystemMessage::StartUp всем объектам (процессам)\n"); print_help(24, "-s|--start ","Посылка SystemMessage::StartUp всем объектам (процессам)\n");
print_help(24, "-u|--foldUp ","Посылка SystemMessage::FoldUp всем объектам (процессам)\n"); print_help(24, "-u|--foldUp ","Посылка SystemMessage::FoldUp всем объектам (процессам)\n");
print_help(24, "-f|--finish ","Посылка SystemMessage::Finish всем объектам (процессам)\n"); print_help(24, "-f|--finish ","Посылка SystemMessage::Finish всем объектам (процессам)\n");
...@@ -111,18 +107,17 @@ static void usage() ...@@ -111,18 +107,17 @@ static void usage()
cout << endl; cout << endl;
print_help(36, "-w|--getRawValue id1@node1=val,id2@node2=val2,id3=val3,.. ","Получить 'сырое' значение.\n"); print_help(36, "-w|--getRawValue id1@node1=val,id2@node2=val2,id3=val3,.. ","Получить 'сырое' значение.\n");
print_help(36, "-y|--getCalibrate id1@node1=val,id2@node2=val2,id3=val3,.. ","Получить параметры калибровки.\n"); print_help(36, "-y|--getCalibrate id1@node1=val,id2@node2=val2,id3=val3,.. ","Получить параметры калибровки.\n");
print_help(36, "-v|--verbose","Подробный вывод логов.\n");
cout << endl; cout << endl;
} }
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
/*! /*!
\todo Сделать по умолчанию режим silent и ключ --verbose.
\todo Оптимизировать commandToAll, т.к. сейчас НА КАЖДОМ ШАГЕ цикла \todo Оптимизировать commandToAll, т.к. сейчас НА КАЖДОМ ШАГЕ цикла
создаётся сообщение и происходит преобразование в TransportMessage. создаётся сообщение и происходит преобразование в TransportMessage.
TransportMessage можно создать один раз до цикла. TransportMessage можно создать один раз до цикла.
*/ */
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
static bool verb = false;
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
try try
...@@ -130,18 +125,14 @@ int main(int argc, char** argv) ...@@ -130,18 +125,14 @@ int main(int argc, char** argv)
int optindex = 0; int optindex = 0;
char opt = 0; char opt = 0;
while( (opt = getopt_long(argc, argv, "vhc:beomsfur:l:i:x:g:w:y:p:",longopts,&optindex)) != -1 ) while( (opt = getopt_long(argc, argv, "hc:beosfur:l:i:x:g:w:y:p:",longopts,&optindex)) != -1 )
{ {
switch (opt) //разбираем параметры switch (opt) //разбираем параметры
{ {
case 'h': //--help case 'h': //--help
usage(); usage();
return 0; return 0;
case 'v':
verb=true;
break;
case 'c': //--confile case 'c': //--confile
conffile = optarg; conffile = optarg;
break; break;
...@@ -151,7 +142,7 @@ int main(int argc, char** argv) ...@@ -151,7 +142,7 @@ int main(int argc, char** argv)
uniset_init(argc,argv,conffile); uniset_init(argc,argv,conffile);
return omap(); return omap();
} }
break; break;
case 'b': //--create case 'b': //--create
{ {
...@@ -159,14 +150,7 @@ int main(int argc, char** argv) ...@@ -159,14 +150,7 @@ int main(int argc, char** argv)
createSections(conf); createSections(conf);
} }
return 0; return 0;
case 'm': //--msgmap
{
uniset_init(argc,argv,conffile);
return msgmap();
}
break;
case 'x': //--setValue case 'x': //--setValue
{ {
uniset_init(argc,argv,conffile); uniset_init(argc,argv,conffile);
...@@ -209,12 +193,11 @@ int main(int argc, char** argv) ...@@ -209,12 +193,11 @@ int main(int argc, char** argv)
UniversalInterface ui(conf); UniversalInterface ui(conf);
Command cmd=Exist; Command cmd=Exist;
verb = true;
ObjectRepository* rep = new ObjectRepository(conf); ObjectRepository* rep = new ObjectRepository(conf);
commandToAll(conf->getServicesSection(), rep, (Command)cmd); commandToAll(conf->getServicesSection(), rep, (Command)cmd);
commandToAll(conf->getControllersSection(), rep, (Command)cmd); commandToAll(conf->getControllersSection(), rep, (Command)cmd);
commandToAll(conf->getObjectsSection(), rep, (Command)cmd); commandToAll(conf->getObjectsSection(), rep, (Command)cmd);
delete rep; delete rep;
// cout<<"(exist): done"<<endl; // cout<<"(exist): done"<<endl;
} }
return 0; return 0;
...@@ -224,13 +207,13 @@ int main(int argc, char** argv) ...@@ -224,13 +207,13 @@ int main(int argc, char** argv)
// cout<<"(main):received option --start"<<endl; // cout<<"(main):received option --start"<<endl;
uniset_init(argc,argv,conffile); uniset_init(argc,argv,conffile);
UniversalInterface ui(conf); UniversalInterface ui(conf);
Command cmd=StartUp; Command cmd=StartUp;
ObjectRepository* rep = new ObjectRepository(conf); ObjectRepository* rep = new ObjectRepository(conf);
commandToAll(conf->getServicesSection(), rep, (Command)cmd); commandToAll(conf->getServicesSection(), rep, (Command)cmd);
commandToAll(conf->getControllersSection(), rep, (Command)cmd); commandToAll(conf->getControllersSection(), rep, (Command)cmd);
commandToAll(conf->getObjectsSection(), rep, (Command)cmd); commandToAll(conf->getObjectsSection(), rep, (Command)cmd);
delete rep; delete rep;
} }
return 0; return 0;
...@@ -247,13 +230,13 @@ int main(int argc, char** argv) ...@@ -247,13 +230,13 @@ int main(int argc, char** argv)
// cout<<"(main):received option --finish"<<endl; // cout<<"(main):received option --finish"<<endl;
uniset_init(argc,argv,conffile); uniset_init(argc,argv,conffile);
UniversalInterface ui(conf); UniversalInterface ui(conf);
Command cmd=Finish; Command cmd=Finish;
ObjectRepository* rep = new ObjectRepository(conf); ObjectRepository* rep = new ObjectRepository(conf);
commandToAll(conf->getServicesSection(), rep, (Command)cmd); commandToAll(conf->getServicesSection(), rep, (Command)cmd);
commandToAll(conf->getControllersSection(), rep, (Command)cmd); commandToAll(conf->getControllersSection(), rep, (Command)cmd);
commandToAll(conf->getObjectsSection(), rep, (Command)cmd); commandToAll(conf->getObjectsSection(), rep, (Command)cmd);
delete rep; delete rep;
cout<<"(finish): done"<<endl; cout<<"(finish): done"<<endl;
} }
return 0; return 0;
...@@ -265,7 +248,7 @@ int main(int argc, char** argv) ...@@ -265,7 +248,7 @@ int main(int argc, char** argv)
return logRotate(optarg, ui); return logRotate(optarg, ui);
} }
break; break;
case 'y': //--getCalibrate case 'y': //--getCalibrate
{ {
// cout<<"(main):received option --getCalibrate='"<<optarg<<"'"<<endl; // cout<<"(main):received option --getCalibrate='"<<optarg<<"'"<<endl;
...@@ -281,12 +264,12 @@ int main(int argc, char** argv) ...@@ -281,12 +264,12 @@ int main(int argc, char** argv)
uniset_init(argc,argv,conffile); uniset_init(argc,argv,conffile);
UniversalInterface ui(conf); UniversalInterface ui(conf);
Command cmd=FoldUp; Command cmd=FoldUp;
ObjectRepository* rep = new ObjectRepository(conf); ObjectRepository* rep = new ObjectRepository(conf);
commandToAll(conf->getServicesSection(), rep, (Command)cmd); commandToAll(conf->getServicesSection(), rep, (Command)cmd);
commandToAll(conf->getControllersSection(), rep, (Command)cmd); commandToAll(conf->getControllersSection(), rep, (Command)cmd);
commandToAll(conf->getObjectsSection(), rep, (Command)cmd); commandToAll(conf->getObjectsSection(), rep, (Command)cmd);
delete rep; delete rep;
// cout<<"(foldUp): done"<<endl; // cout<<"(foldUp): done"<<endl;
} }
return 0; return 0;
...@@ -297,40 +280,33 @@ int main(int argc, char** argv) ...@@ -297,40 +280,33 @@ int main(int argc, char** argv)
short_usage(); short_usage();
return 1; return 1;
} }
} }
} }
return 0; return 0;
} }
catch(Exception& ex) catch(Exception& ex)
{ {
if( verb ) cout <<"admin(main): " << ex << endl;
cout <<"admin(main): " << ex << endl;
} }
catch(CORBA::SystemException& ex) catch(CORBA::SystemException& ex)
{ {
if( verb ) cerr << "поймали CORBA::SystemException:" << ex.NP_minorString() << endl;
cerr << "поймали CORBA::SystemException:" << ex.NP_minorString() << endl;
} }
catch(CORBA::Exception&) catch(CORBA::Exception&)
{ {
if( verb ) cerr << "поймали CORBA::Exception." << endl;
cerr << "поймали CORBA::Exception." << endl;
} }
catch(omniORB::fatalException& fe) catch(omniORB::fatalException& fe)
{ {
if( verb ) cerr << "поймали omniORB::fatalException:" << endl;
{ cerr << " file: " << fe.file() << endl;
cerr << "поймали omniORB::fatalException:" << endl; cerr << " line: " << fe.line() << endl;
cerr << " file: " << fe.file() << endl; cerr << " mesg: " << fe.errmsg() << endl;
cerr << " line: " << fe.line() << endl;
cerr << " mesg: " << fe.errmsg() << endl;
}
} }
catch(...) catch(...)
{ {
if( verb ) cerr << "неизвестное исключение" << endl;
cerr << "неизвестное исключение" << endl;
} }
return 1; return 1;
...@@ -339,17 +315,15 @@ int main(int argc, char** argv) ...@@ -339,17 +315,15 @@ int main(int argc, char** argv)
// ============================================================================================== // ==============================================================================================
static bool commandToAll(const string& section, ObjectRepository *rep, Command cmd) static bool commandToAll(const string& section, ObjectRepository *rep, Command cmd)
{ {
if( verb ) cout <<"\n||=======******** " << section << " ********=========||\n"<< endl;
cout <<"\n||=======******** " << section << " ********=========||\n"<< endl;
try try
{ {
ListObjectName ls; ListObjectName ls;
rep->list(section.c_str(),&ls); rep->list(section.c_str(),&ls);
if( ls.empty() ) if(ls.empty())
{ {
if( verb ) cout << "пусто!!!!!!" << endl;
cout << "пусто!!!!!!" << endl;
return false; return false;
} }
...@@ -377,8 +351,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c ...@@ -377,8 +351,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if(CORBA::is_nil(obj)) break; if(CORBA::is_nil(obj)) break;
SystemMessage msg(SystemMessage::StartUp); SystemMessage msg(SystemMessage::StartUp);
obj->push( Message::transport(msg) ); obj->push( Message::transport(msg) );
if( verb ) cout << setw(55) << ob <<" <--- start OK" << endl;
cout << setw(55) << ob <<" <--- start OK" << endl;
} }
break; break;
...@@ -387,8 +360,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c ...@@ -387,8 +360,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if(CORBA::is_nil(obj)) break; if(CORBA::is_nil(obj)) break;
SystemMessage msg(SystemMessage::FoldUp); SystemMessage msg(SystemMessage::FoldUp);
obj->push( Message::transport(msg) ); obj->push( Message::transport(msg) );
if( verb ) cout << setw(55) << ob << " <--- foldUp OK" << endl;
cout << setw(55) << ob << " <--- foldUp OK" << endl;
} }
break; break;
...@@ -397,19 +369,15 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c ...@@ -397,19 +369,15 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if(CORBA::is_nil(obj)) break; if(CORBA::is_nil(obj)) break;
SystemMessage msg(SystemMessage::Finish); SystemMessage msg(SystemMessage::Finish);
obj->push( Message::transport(msg) ); obj->push( Message::transport(msg) );
if( verb ) cout << setw(55)<< ob << " <--- finish OK" << endl;
cout << setw(55)<< ob << " <--- finish OK" << endl;
} }
break; break;
case Exist: case Exist:
{ {
if (obj->exist()) if (obj->exist())
{ cout << setw(55) << ob << " <--- exist ok\n";
if( verb ) else
cout << setw(55) << ob << " <--- exist ok\n";
}
else if( verb )
cout << setw(55) << ob << " <--- exist NOT OK\n"; cout << setw(55) << ob << " <--- exist NOT OK\n";
} }
break; break;
...@@ -418,8 +386,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c ...@@ -418,8 +386,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
{ {
SystemMessage sm(SystemMessage::ReConfiguration); SystemMessage sm(SystemMessage::ReConfiguration);
obj->push(sm.transport_msg()); obj->push(sm.transport_msg());
if( verb ) cout << setw(55) << ob << " <--- configure ok\n";
cout << setw(55) << ob << " <--- configure ok\n";
} }
break; break;
...@@ -427,28 +394,24 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c ...@@ -427,28 +394,24 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
{ {
SystemMessage msg(SystemMessage::LogRotate); SystemMessage msg(SystemMessage::LogRotate);
obj->push( Message::transport(msg) ); obj->push( Message::transport(msg) );
if( verb ) cout << setw(55) << ob << " <--- logrotate ok\n";
cout << setw(55) << ob << " <--- logrotate ok\n";
break; break;
} }
default: default:
{ {
if( verb ) cout << "неизвестная команда -" << cmd << endl;
cout << "неизвестная команда -" << cmd << endl;
return false; return false;
} }
} }
} }
catch(Exception& ex) catch(Exception& ex)
{ {
if( verb ) cout << setw(55) << ob << " <--- " << ex << endl;
cout << setw(55) << ob << " <--- " << ex << endl;
} }
catch( CORBA::SystemException& ex ) catch( CORBA::SystemException& ex )
{ {
if( verb ) cout << setw(55) << ob << " <--- недоступен!!(CORBA::SystemException): " << ex.NP_minorString() << endl;
cout << setw(55) << ob << " <--- недоступен!!(CORBA::SystemException): " << ex.NP_minorString() << endl;
} }
} }
} }
...@@ -470,8 +433,7 @@ static void createSections( UniSetTypes::Configuration* rconf ) ...@@ -470,8 +433,7 @@ static void createSections( UniSetTypes::Configuration* rconf )
repf.createRootSection(rconf->getObjectsSection()); repf.createRootSection(rconf->getObjectsSection());
repf.createRootSection(rconf->getControllersSection()); repf.createRootSection(rconf->getControllersSection());
repf.createRootSection(rconf->getServicesSection()); repf.createRootSection(rconf->getServicesSection());
if( verb ) cout<<"(create): created"<<endl;
cout<<"(create): created"<<endl;
} }
// ============================================================================================== // ==============================================================================================
...@@ -486,30 +448,9 @@ int omap() ...@@ -486,30 +448,9 @@ int omap()
} }
catch(Exception& ex) catch(Exception& ex)
{ {
if( verb ) unideb[Debug::CRIT] << " configuration init FAILED!!! \n";
unideb[Debug::CRIT] << " configuration init FAILED!!! \n";
return 1;
}
return 0;
}
// --------------------------------------------------------------------------------------
int msgmap()
{
try
{
cout.setf(ios::left, ios::adjustfield);
cout << "========================== MessagesMap =================================\n";
conf->mi->printMessagesMap(cout);
cout << "==========================================================================\n";
}
catch(Exception& ex)
{
if( verb )
unideb[Debug::CRIT] << " configuration init FAILED!!! " << ex << endl;;
return 1; return 1;
} }
return 0; return 0;
} }
...@@ -520,53 +461,38 @@ int setValue( const string& args, UniversalInterface &ui, Configuration* conf ) ...@@ -520,53 +461,38 @@ int setValue( const string& args, UniversalInterface &ui, Configuration* conf )
typedef std::list<UniSetTypes::ParamSInfo> SList; typedef std::list<UniSetTypes::ParamSInfo> SList;
SList sl = UniSetTypes::getSInfoList(args, conf); SList sl = UniSetTypes::getSInfoList(args, conf);
if( verb ) cout << "====== setValue ======" << endl;
cout << "====== setValue ======" << endl;
for( SList::iterator it=sl.begin(); it!=sl.end(); it++ ) for( SList::iterator it=sl.begin(); it!=sl.end(); it++ )
{ {
try try
{ {
UniversalIO::IOTypes t = conf->getIOType(it->si.id); UniversalIO::IOType t = conf->getIOType(it->si.id);
if( verb ) cout << " value: " << it->val << endl;
{ cout << " name: (" << it->si.id << ") " << it->fname << endl;
cout << " value: " << it->val << endl; cout << " iotype: " << t << endl;
cout << " name: (" << it->si.id << ") " << it->fname << endl; cout << " text: " << conf->oind->getTextName(it->si.id) << "\n\n";
cout << " iotype: " << t << endl;
cout << " text: " << conf->oind->getTextName(it->si.id) << "\n\n";
}
if( it->si.node == DefaultObjectId ) if( it->si.node == DefaultObjectId )
it->si.node = conf->getLocalNode(); it->si.node = conf->getLocalNode();
switch(t) switch(t)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
ui.saveState(it->si.id,(it->val?true:false),t,it->si.node); case UniversalIO::DO:
break; case UniversalIO::AI:
case UniversalIO::AO:
case UniversalIO::DigitalOutput:
ui.setState(it->si.id,(it->val?true:false),it->si.node);
break;
case UniversalIO::AnalogInput:
ui.saveValue(it->si.id,it->val,t,it->si.node);
break;
case UniversalIO::AnalogOutput:
ui.setValue(it->si.id,it->val,it->si.node); ui.setValue(it->si.id,it->val,it->si.node);
break; break;
default: default:
if( verb ) cerr << "FAILED: Unknown 'iotype' for " << it->fname << endl;
cerr << "FAILED: Unknown 'iotype' for " << it->fname << endl;
err = 1; err = 1;
break; break;
} }
} }
catch(Exception& ex) catch(Exception& ex)
{ {
if( verb ) cerr << "(setValue): " << ex << endl;;
cerr << "(setValue): " << ex << endl;;
err = 1; err = 1;
} }
} }
...@@ -581,53 +507,37 @@ int getValue( const string& args, UniversalInterface &ui, Configuration* conf ) ...@@ -581,53 +507,37 @@ int getValue( const string& args, UniversalInterface &ui, Configuration* conf )
typedef std::list<UniSetTypes::ParamSInfo> SList; typedef std::list<UniSetTypes::ParamSInfo> SList;
SList sl = UniSetTypes::getSInfoList( args, UniSetTypes::conf ); SList sl = UniSetTypes::getSInfoList( args, UniSetTypes::conf );
if( verb ) cout << "====== getValue ======" << endl;
cout << "====== getValue ======" << endl;
for( SList::iterator it=sl.begin(); it!=sl.end(); it++ ) for( SList::iterator it=sl.begin(); it!=sl.end(); it++ )
{ {
try try
{ {
UniversalIO::IOTypes t = conf->getIOType(it->si.id); UniversalIO::IOType t = conf->getIOType(it->si.id);
cout << " name: (" << it->si.id << ") " << it->fname << endl;
if( verb ) cout << " iotype: " << t << endl;
{ cout << " text: " << conf->oind->getTextName(it->si.id) << "\n\n";
cout << " name: (" << it->si.id << ") " << it->fname << endl;
cout << " iotype: " << t << endl;
cout << " text: " << conf->oind->getTextName(it->si.id) << "\n\n";
}
if( it->si.node == DefaultObjectId ) if( it->si.node == DefaultObjectId )
it->si.node = conf->getLocalNode(); it->si.node = conf->getLocalNode();
switch(t) switch(t)
{ {
case UniversalIO::DigitalOutput: case UniversalIO::DO:
case UniversalIO::DigitalInput: case UniversalIO::DI:
if( verb ) case UniversalIO::AO:
cout << " state: " << ui.getState(it->si.id,it->si.node) << endl; case UniversalIO::AI:
else cout << " value: " << ui.getValue(it->si.id,it->si.node) << endl;
cout << ui.getState(it->si.id,it->si.node);
break;
case UniversalIO::AnalogOutput:
case UniversalIO::AnalogInput:
if( verb )
cout << " value: " << ui.getValue(it->si.id,it->si.node) << endl;
else
cout << ui.getValue(it->si.id,it->si.node);
break; break;
default: default:
if( verb ) cerr << "FAILED: Unknown 'iotype' for " << it->fname << endl;
cerr << "FAILED: Unknown 'iotype' for " << it->fname << endl;
err = 1; err = 1;
break; break;
} }
} }
catch(Exception& ex) catch(Exception& ex)
{ {
if( verb ) cerr << "(getValue): " << ex << endl;
cerr << "(getValue): " << ex << endl;
err = 1; err = 1;
} }
} }
...@@ -640,8 +550,7 @@ int getCalibrate( const std::string& args, UniversalInterface &ui ) ...@@ -640,8 +550,7 @@ int getCalibrate( const std::string& args, UniversalInterface &ui )
int err = 0; int err = 0;
typedef std::list<UniSetTypes::ParamSInfo> SList; typedef std::list<UniSetTypes::ParamSInfo> SList;
SList sl = UniSetTypes::getSInfoList( args, UniSetTypes::conf ); SList sl = UniSetTypes::getSInfoList( args, UniSetTypes::conf );
if( verb ) cout << "====== getCalibrate ======" << endl;
cout << "====== getCalibrate ======" << endl;
for( SList::iterator it=sl.begin(); it!=sl.end(); it++ ) for( SList::iterator it=sl.begin(); it!=sl.end(); it++ )
{ {
if( it->si.node == DefaultObjectId ) if( it->si.node == DefaultObjectId )
...@@ -671,30 +580,21 @@ int getRawValue( const std::string& args, UniversalInterface &ui ) ...@@ -671,30 +580,21 @@ int getRawValue( const std::string& args, UniversalInterface &ui )
int err = 0; int err = 0;
typedef std::list<UniSetTypes::ParamSInfo> SList; typedef std::list<UniSetTypes::ParamSInfo> SList;
SList sl = UniSetTypes::getSInfoList( args, UniSetTypes::conf ); SList sl = UniSetTypes::getSInfoList( args, UniSetTypes::conf );
if( verb ) cout << "====== getRawValue ======" << endl;
cout << "====== getRawValue ======" << endl;
for( SList::iterator it=sl.begin(); it!=sl.end(); it++ ) for( SList::iterator it=sl.begin(); it!=sl.end(); it++ )
{ {
if( it->si.node == DefaultObjectId ) if( it->si.node == DefaultObjectId )
it->si.node = conf->getLocalNode(); it->si.node = conf->getLocalNode();
if( verb ) cout << " name: (" << it->si.id << ") " << it->fname << endl;
{ cout << " text: " << conf->oind->getTextName(it->si.id) << "\n\n";
cout << " name: (" << it->si.id << ") " << it->fname << endl;
cout << " text: " << conf->oind->getTextName(it->si.id) << "\n\n";
}
try try
{ {
if( verb ) cout << " value: " << ui.getRawValue(it->si) << endl;
cout << " value: " << ui.getRawValue(it->si) << endl;
else
cout << " value: " << ui.getRawValue(it->si);
} }
catch(Exception& ex) catch(Exception& ex)
{ {
if( verb ) cerr << "(getRawValue): " << ex << endl;;
cerr << "(getRawValue): " << ex << endl;;
err = 1; err = 1;
} }
} }
...@@ -718,16 +618,14 @@ int logRotate( const string& arg, UniversalInterface &ui ) ...@@ -718,16 +618,14 @@ int logRotate( const string& arg, UniversalInterface &ui )
UniSetTypes::ObjectId id = conf->oind->getIdByName(arg); UniSetTypes::ObjectId id = conf->oind->getIdByName(arg);
if( id == DefaultObjectId ) if( id == DefaultObjectId )
{ {
if( verb ) cout << "(logrotate): name='" << arg << "' не найдено!!!\n";
cout << "(logrotate): name='" << arg << "' не найдено!!!\n";
return 1; return 1;
} }
SystemMessage sm(SystemMessage::LogRotate); SystemMessage sm(SystemMessage::LogRotate);
TransportMessage tm(sm.transport_msg()); TransportMessage tm(sm.transport_msg());
ui.send(id,tm); ui.send(id,tm);
if( verb ) cout << "\nSend 'LogRotate' to " << arg << " OK.\n";
cout << "\nSend 'LogRotate' to " << arg << " OK.\n";
} }
return 0; return 0;
} }
...@@ -749,15 +647,13 @@ int configure( const string& arg, UniversalInterface &ui ) ...@@ -749,15 +647,13 @@ int configure( const string& arg, UniversalInterface &ui )
UniSetTypes::ObjectId id = conf->oind->getIdByName(arg); UniSetTypes::ObjectId id = conf->oind->getIdByName(arg);
if( id == DefaultObjectId ) if( id == DefaultObjectId )
{ {
if( verb ) cout << "(configure): name='" << arg << "' не найдено!!!\n";
cout << "(configure): name='" << arg << "' не найдено!!!\n";
return 1; return 1;
} }
SystemMessage sm(SystemMessage::ReConfiguration); SystemMessage sm(SystemMessage::ReConfiguration);
TransportMessage tm(sm.transport_msg()); TransportMessage tm(sm.transport_msg());
ui.send(id,tm); ui.send(id,tm);
if( verb ) cout << "\nSend 'ReConfigure' to " << arg << " OK.\n";
cout << "\nSend 'ReConfigure' to " << arg << " OK.\n";
} }
return 0; return 0;
} }
...@@ -768,8 +664,7 @@ int oinfo( const string& arg, UniversalInterface &ui ) ...@@ -768,8 +664,7 @@ int oinfo( const string& arg, UniversalInterface &ui )
UniSetTypes::ObjectId oid(uni_atoi(arg)); UniSetTypes::ObjectId oid(uni_atoi(arg));
if( oid==0 ) if( oid==0 )
{ {
if( verb ) cout << "(oinfo): Не задан OID!"<< endl;
cout << "(oinfo): Не задан OID!"<< endl;
return 1; return 1;
} }
...@@ -777,8 +672,7 @@ int oinfo( const string& arg, UniversalInterface &ui ) ...@@ -777,8 +672,7 @@ int oinfo( const string& arg, UniversalInterface &ui )
UniSetObject_i_var obj = UniSetObject_i::_narrow(o); UniSetObject_i_var obj = UniSetObject_i::_narrow(o);
if(CORBA::is_nil(obj)) if(CORBA::is_nil(obj))
{ {
if( verb ) cout << "(oinfo): объект " << oid << " недоступен" << endl;
cout << "(oinfo): объект " << oid << " недоступен" << endl;
} }
else else
{ {
......
...@@ -20,7 +20,7 @@ void help_print() ...@@ -20,7 +20,7 @@ void help_print()
struct ExtInfo: struct ExtInfo:
public UniSetTypes::ParamSInfo public UniSetTypes::ParamSInfo
{ {
UniversalIO::IOTypes iotype; UniversalIO::IOType iotype;
}; };
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
int main( int argc, char **argv ) int main( int argc, char **argv )
...@@ -57,8 +57,8 @@ int main( int argc, char **argv ) ...@@ -57,8 +57,8 @@ int main( int argc, char **argv )
std::list<ExtInfo> l; std::list<ExtInfo> l;
for( std::list<UniSetTypes::ParamSInfo>::iterator it = lst.begin(); it!=lst.end(); ++it ) for( std::list<UniSetTypes::ParamSInfo>::iterator it = lst.begin(); it!=lst.end(); ++it )
{ {
UniversalIO::IOTypes t = conf->getIOType( it->si.id ); UniversalIO::IOType t = conf->getIOType( it->si.id );
if( t != UniversalIO::AnalogInput && t != UniversalIO::AnalogOutput ) if( t != UniversalIO::AI && t != UniversalIO::AO )
{ {
cerr << endl << "Неверный типа датчика '" << t << "' для id='" << it->fname << "'. Тип должен быть AI или AO." << endl << endl; cerr << endl << "Неверный типа датчика '" << t << "' для id='" << it->fname << "'. Тип должен быть AI или AO." << endl << endl;
return 1; return 1;
...@@ -122,9 +122,6 @@ int main( int argc, char **argv ) ...@@ -122,9 +122,6 @@ int main( int argc, char **argv )
{ {
try try
{ {
if( it->iotype == UniversalIO::AnalogInput )
ui.saveValue(it->si, j, UniversalIO::AnalogInput, DefaultObjectId);
else
ui.setValue(it->si, j, DefaultObjectId); ui.setValue(it->si, j, DefaultObjectId);
} }
catch( Exception& ex ) catch( Exception& ex )
...@@ -150,9 +147,6 @@ int main( int argc, char **argv ) ...@@ -150,9 +147,6 @@ int main( int argc, char **argv )
{ {
try try
{ {
if( it->iotype == UniversalIO::AnalogInput )
ui.saveValue(it->si, i, UniversalIO::AnalogInput, DefaultObjectId);
else
ui.setValue(it->si, i, DefaultObjectId); ui.setValue(it->si, i, DefaultObjectId);
} }
catch( Exception& ex ) catch( Exception& ex )
......
...@@ -346,7 +346,7 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -346,7 +346,7 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
- remove deprecated services: InfoServer,TimeService,SystemGuard - remove deprecated services: InfoServer,TimeService,SystemGuard
- remove deprecated intefaces: MessageInterface - remove deprecated intefaces: MessageInterface
- remove deprecated messages: AlarmMessage, InfoMessage, DBMessage - remove deprecated messages: AlarmMessage, InfoMessage, DBMessage
- remove 'state' from SensorMessage
* Tue Dec 10 2013 Pavel Vainerman <pv@altlinux.ru> 1.7-alt3 * Tue Dec 10 2013 Pavel Vainerman <pv@altlinux.ru> 1.7-alt3
- add RRDServer - add RRDServer
......
...@@ -470,13 +470,13 @@ void IOControl::ioread( IOInfo* it ) ...@@ -470,13 +470,13 @@ void IOControl::ioread( IOInfo* it )
return; return;
if( testmode == tmOnlyInputs && if( testmode == tmOnlyInputs &&
it->stype != UniversalIO::AnalogInput && it->stype != UniversalIO::AI &&
it->stype != UniversalIO::DigitalInput ) it->stype != UniversalIO::DI )
return; return;
if( testmode == tmOnlyOutputs && if( testmode == tmOnlyOutputs &&
it->stype != UniversalIO::AnalogOutput && it->stype != UniversalIO::AO &&
it->stype != UniversalIO::DigitalOutput ) it->stype != UniversalIO::DO )
return; return;
} }
...@@ -505,7 +505,7 @@ void IOControl::ioread( IOInfo* it ) ...@@ -505,7 +505,7 @@ void IOControl::ioread( IOInfo* it )
try try
{ {
if( it->stype == UniversalIO::AnalogInput ) if( it->stype == UniversalIO::AI )
{ {
int val = card->getAnalogChannel(it->subdev,it->channel, it->range, it->aref); int val = card->getAnalogChannel(it->subdev,it->channel, it->range, it->aref);
...@@ -521,7 +521,7 @@ void IOControl::ioread( IOInfo* it ) ...@@ -521,7 +521,7 @@ void IOControl::ioread( IOInfo* it )
IOBase::processingAsAI( ib, val, shm, force ); IOBase::processingAsAI( ib, val, shm, force );
} }
else if( it->stype == UniversalIO::DigitalInput ) else if( it->stype == UniversalIO::DI )
{ {
bool set = card->getDigitalChannel(it->subdev,it->channel); bool set = card->getDigitalChannel(it->subdev,it->channel);
/* /*
...@@ -548,7 +548,7 @@ void IOControl::ioread( IOInfo* it ) ...@@ -548,7 +548,7 @@ void IOControl::ioread( IOInfo* it )
if( it->si.id == testLamp_S ) if( it->si.id == testLamp_S )
isTestLamp = set; isTestLamp = set;
} }
else if( it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AO )
{ {
if( !it->lamp ) if( !it->lamp )
{ {
...@@ -640,7 +640,7 @@ void IOControl::ioread( IOInfo* it ) ...@@ -640,7 +640,7 @@ void IOControl::ioread( IOInfo* it )
} }
} }
} }
else if( it->stype == UniversalIO::DigitalOutput ) else if( it->stype == UniversalIO::DO )
{ {
bool set = IOBase::processingAsDO(ib,shm,force_out); bool set = IOBase::processingAsDO(ib,shm,force_out);
if( !it->lamp || (it->lamp && !isTestLamp) ) if( !it->lamp || (it->lamp && !isTestLamp) )
...@@ -768,7 +768,7 @@ bool IOControl::initIOItem( UniXML_iterator& it ) ...@@ -768,7 +768,7 @@ bool IOControl::initIOItem( UniXML_iterator& it )
inf.aref = 0; inf.aref = 0;
inf.range = 0; inf.range = 0;
if( inf.stype == UniversalIO::AnalogInput || inf.stype == UniversalIO::AnalogOutput ) if( inf.stype == UniversalIO::AI || inf.stype == UniversalIO::AO )
{ {
inf.range = it.getIntProp("range"); inf.range = it.getIntProp("range");
if( inf.range < 0 || inf.range > 3 ) if( inf.range < 0 || inf.range > 3 )
...@@ -851,12 +851,12 @@ void IOControl::sigterm( int signo ) ...@@ -851,12 +851,12 @@ void IOControl::sigterm( int signo )
if( it->subdev==DefaultSubdev || it->safety == NoSafety ) if( it->subdev==DefaultSubdev || it->safety == NoSafety )
continue; continue;
if( it->stype == UniversalIO::DigitalOutput || it->lamp ) if( it->stype == UniversalIO::DO || it->lamp )
{ {
bool set = it->invert ? !((bool)it->safety) : (bool)it->safety; bool set = it->invert ? !((bool)it->safety) : (bool)it->safety;
card->setDigitalChannel(it->subdev,it->channel,set); card->setDigitalChannel(it->subdev,it->channel,set);
} }
else if( it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AO )
{ {
card->setAnalogChannel(it->subdev,it->channel,it->safety,it->range,it->aref); card->setAnalogChannel(it->subdev,it->channel,it->safety,it->range,it->aref);
} }
...@@ -892,9 +892,9 @@ void IOControl::initOutputs() ...@@ -892,9 +892,9 @@ void IOControl::initOutputs()
{ {
if( it->lamp ) if( it->lamp )
card->setDigitalChannel(it->subdev,it->channel,(bool)it->defval); card->setDigitalChannel(it->subdev,it->channel,(bool)it->defval);
else if( it->stype == UniversalIO::DigitalOutput ) else if( it->stype == UniversalIO::DO )
card->setDigitalChannel(it->subdev,it->channel,(bool)it->defval); card->setDigitalChannel(it->subdev,it->channel,(bool)it->defval);
else if( it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AO )
card->setAnalogChannel(it->subdev,it->channel,it->defval,it->range,it->aref); card->setAnalogChannel(it->subdev,it->channel,it->defval,it->range,it->aref);
} }
catch( Exception& ex ) catch( Exception& ex )
...@@ -925,16 +925,16 @@ void IOControl::initIOCard() ...@@ -925,16 +925,16 @@ void IOControl::initIOCard()
// или "лампочки" (т.к. они фиктивные аналоговые датчики) // или "лампочки" (т.к. они фиктивные аналоговые датчики)
if( it->lamp ) if( it->lamp )
card->configureChannel(it->subdev,it->channel,ComediInterface::DO); card->configureChannel(it->subdev,it->channel,ComediInterface::DO);
else if( it->stype == UniversalIO::DigitalInput ) else if( it->stype == UniversalIO::DI )
card->configureChannel(it->subdev,it->channel,ComediInterface::DI); card->configureChannel(it->subdev,it->channel,ComediInterface::DI);
else if( it->stype == UniversalIO::DigitalOutput ) else if( it->stype == UniversalIO::DO )
card->configureChannel(it->subdev,it->channel,ComediInterface::DO); card->configureChannel(it->subdev,it->channel,ComediInterface::DO);
else if( it->stype == UniversalIO::AnalogInput ) else if( it->stype == UniversalIO::AI )
{ {
card->configureChannel(it->subdev,it->channel,ComediInterface::AI); card->configureChannel(it->subdev,it->channel,ComediInterface::AI);
it->df.init( card->getAnalogChannel(it->subdev, it->channel, it->range, it->aref) ); it->df.init( card->getAnalogChannel(it->subdev, it->channel, it->range, it->aref) );
} }
else if( it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AO )
card->configureChannel(it->subdev,it->channel,ComediInterface::AO); card->configureChannel(it->subdev,it->channel,ComediInterface::AO);
} }
...@@ -1041,12 +1041,12 @@ void IOControl::check_testmode() ...@@ -1041,12 +1041,12 @@ void IOControl::check_testmode()
if( it->subdev==DefaultSubdev || it->safety == NoSafety ) if( it->subdev==DefaultSubdev || it->safety == NoSafety )
continue; continue;
if( it->stype == UniversalIO::DigitalOutput || it->lamp ) if( it->stype == UniversalIO::DO || it->lamp )
{ {
bool set = it->invert ? !((bool)it->safety) : (bool)it->safety; bool set = it->invert ? !((bool)it->safety) : (bool)it->safety;
card->setDigitalChannel(it->subdev,it->channel,set); card->setDigitalChannel(it->subdev,it->channel,set);
} }
else if( it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AO )
{ {
card->setAnalogChannel(it->subdev,it->channel,it->safety,it->range,it->aref); card->setAnalogChannel(it->subdev,it->channel,it->safety,it->range,it->aref);
} }
...@@ -1095,7 +1095,7 @@ void IOControl::check_testlamp() ...@@ -1095,7 +1095,7 @@ void IOControl::check_testlamp()
if( !it->lamp || it->no_testlamp ) if( !it->lamp || it->no_testlamp )
continue; continue;
if( it->stype == UniversalIO::AnalogOutput ) if( it->stype == UniversalIO::AO )
{ {
if( isTestLamp ) if( isTestLamp )
{ {
...@@ -1116,7 +1116,7 @@ void IOControl::check_testlamp() ...@@ -1116,7 +1116,7 @@ void IOControl::check_testlamp()
delBlink(&(*it),lstBlink3); delBlink(&(*it),lstBlink3);
} }
} }
else if( it->stype == UniversalIO::DigitalOutput ) else if( it->stype == UniversalIO::DO )
{ {
if( isTestLamp ) if( isTestLamp )
addBlink(&(*it),lstBlink); addBlink(&(*it),lstBlink);
...@@ -1371,8 +1371,8 @@ void IOControl::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -1371,8 +1371,8 @@ void IOControl::askSensors( UniversalIO::UIOCommand cmd )
if( card == NULL || it->subdev==DefaultSubdev || it->channel==DefaultChannel ) if( card == NULL || it->subdev==DefaultSubdev || it->channel==DefaultChannel )
continue; continue;
if( it->stype == UniversalIO::AnalogOutput || if( it->stype == UniversalIO::AO ||
it->stype == UniversalIO::DigitalOutput ) it->stype == UniversalIO::DO )
{ {
try try
{ {
...@@ -1420,7 +1420,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm ) ...@@ -1420,7 +1420,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm )
<< endl; << endl;
} }
if( it->stype == UniversalIO::AnalogOutput ) if( it->stype == UniversalIO::AO )
{ {
long prev_val = 0; long prev_val = 0;
long cur_val = 0; long cur_val = 0;
...@@ -1513,7 +1513,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm ) ...@@ -1513,7 +1513,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm )
} }
} }
} }
else if( it->stype == UniversalIO::DigitalOutput ) else if( it->stype == UniversalIO::DO )
{ {
if( unideb.debugging(Debug::LEVEL1) ) if( unideb.debugging(Debug::LEVEL1) )
{ {
......
...@@ -359,7 +359,7 @@ class IOControl: ...@@ -359,7 +359,7 @@ class IOControl:
PassiveTimer ptHeartBeat; PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat; UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat; int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat; IOController::IOStateList::iterator aitHeartBeat;
bool force; /*!< флаг, означающий, что надо сохранять в SM, даже если значение не менялось */ bool force; /*!< флаг, означающий, что надо сохранять в SM, даже если значение не менялось */
bool force_out; /*!< флаг, включающий принудительное чтения выходов */ bool force_out; /*!< флаг, включающий принудительное чтения выходов */
...@@ -376,7 +376,7 @@ class IOControl: ...@@ -376,7 +376,7 @@ class IOControl:
UniSetTypes::ObjectId testMode_as; UniSetTypes::ObjectId testMode_as;
IOController::AIOStateList::iterator aitTestMode; IOController::IOStateList::iterator aitTestMode;
long testmode; long testmode;
long prev_testmode; long prev_testmode;
......
...@@ -145,11 +145,11 @@ void LProcessor::setOuts() ...@@ -145,11 +145,11 @@ void LProcessor::setOuts()
{ {
switch(it->iotype) switch(it->iotype)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
ui.saveState(it->sid,it->lnk->from->getOut(),it->iotype); ui.saveState(it->sid,it->lnk->from->getOut(),it->iotype);
break; break;
case UniversalIO::DigitalOutput: case UniversalIO::DO:
ui.setState(it->sid,it->lnk->from->getOut()); ui.setState(it->sid,it->lnk->from->getOut());
break; break;
......
...@@ -112,7 +112,7 @@ class LProcessor ...@@ -112,7 +112,7 @@ class LProcessor
struct EXTInfo struct EXTInfo
{ {
UniSetTypes::ObjectId sid; UniSetTypes::ObjectId sid;
UniversalIO::IOTypes iotype; UniversalIO::IOType iotype;
bool state; bool state;
const Schema::EXTLink* lnk; const Schema::EXTLink* lnk;
}; };
...@@ -120,7 +120,7 @@ class LProcessor ...@@ -120,7 +120,7 @@ class LProcessor
struct EXTOutInfo struct EXTOutInfo
{ {
UniSetTypes::ObjectId sid; UniSetTypes::ObjectId sid;
UniversalIO::IOTypes iotype; UniversalIO::IOType iotype;
const Schema::EXTOut* lnk; const Schema::EXTOut* lnk;
}; };
......
...@@ -155,11 +155,11 @@ void PassiveLProcessor::setOuts() ...@@ -155,11 +155,11 @@ void PassiveLProcessor::setOuts()
{ {
switch(it->iotype) switch(it->iotype)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
shm->saveLocalState(it->sid,it->lnk->from->getOut(),it->iotype); shm->saveLocalState(it->sid,it->lnk->from->getOut(),it->iotype);
break; break;
case UniversalIO::DigitalOutput: case UniversalIO::DO:
shm->setState(it->sid,it->lnk->from->getOut()); shm->setState(it->sid,it->lnk->from->getOut());
break; break;
...@@ -187,11 +187,11 @@ void PassiveLProcessor::sigterm( int signo ) ...@@ -187,11 +187,11 @@ void PassiveLProcessor::sigterm( int signo )
{ {
switch(it->iotype) switch(it->iotype)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
shm->saveLocalState(it->sid,false,it->iotype); shm->saveLocalState(it->sid,false,it->iotype);
break; break;
case UniversalIO::DigitalOutput: case UniversalIO::DO:
shm->setState(it->sid,false); shm->setState(it->sid,false);
break; break;
......
...@@ -51,7 +51,7 @@ class PassiveLProcessor: ...@@ -51,7 +51,7 @@ class PassiveLProcessor:
PassiveTimer ptHeartBeat; PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat; UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat; int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat; IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::uniset_mutex mutex_start; UniSetTypes::uniset_mutex mutex_start;
}; };
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
......
...@@ -669,8 +669,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -669,8 +669,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
if( p->rnum <= 1 ) if( p->rnum <= 1 )
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, data[0], shm, force ); IOBase::processingAsDI( p, data[0], shm, force );
} }
...@@ -687,8 +687,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -687,8 +687,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
} }
else if( p->vType == VTypes::vtSigned ) else if( p->vType == VTypes::vtSigned )
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, data[0], shm, force ); IOBase::processingAsDI( p, data[0], shm, force );
} }
...@@ -699,8 +699,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty ...@@ -699,8 +699,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
} }
else if( p->vType == VTypes::vtUnsigned ) else if( p->vType == VTypes::vtUnsigned )
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, data[0], shm, force ); IOBase::processingAsDI( p, data[0], shm, force );
} }
...@@ -1140,8 +1140,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1140,8 +1140,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
if( r->mb_initOK ) if( r->mb_initOK )
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
r->mbval = IOBase::processingAsDO( p, shm, force_out ); r->mbval = IOBase::processingAsDO( p, shm, force_out );
} }
...@@ -1153,8 +1153,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1153,8 +1153,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
} }
else else
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, r->mbval, shm, force ); IOBase::processingAsDI( p, r->mbval, shm, force );
} }
...@@ -1175,8 +1175,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1175,8 +1175,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
if( r->mb_initOK ) if( r->mb_initOK )
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
r->mbval = (signed short)IOBase::processingAsDO( p, shm, force_out ); r->mbval = (signed short)IOBase::processingAsDO( p, shm, force_out );
} }
...@@ -1188,8 +1188,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1188,8 +1188,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
} }
else else
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, r->mbval, shm, force ); IOBase::processingAsDI( p, r->mbval, shm, force );
} }
...@@ -1206,8 +1206,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1206,8 +1206,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{ {
if( r->mb_initOK ) if( r->mb_initOK )
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
r->mbval = (unsigned short)IOBase::processingAsDO( p, shm, force_out ); r->mbval = (unsigned short)IOBase::processingAsDO( p, shm, force_out );
} }
...@@ -1219,8 +1219,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only ) ...@@ -1219,8 +1219,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
} }
else else
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, r->mbval, shm, force ); IOBase::processingAsDI( p, r->mbval, shm, force );
} }
...@@ -1683,12 +1683,12 @@ void MBExchange::updateRTU188( RegMap::iterator& rit ) ...@@ -1683,12 +1683,12 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
{ {
try try
{ {
if( it->stype == UniversalIO::DigitalInput ) if( it->stype == UniversalIO::DI )
{ {
bool set = r->dev->rtu->getState(r->rtuJack,r->rtuChan,it->stype); bool set = r->dev->rtu->getState(r->rtuJack,r->rtuChan,it->stype);
IOBase::processingAsDI( &(*it), set, shm, force ); IOBase::processingAsDI( &(*it), set, shm, force );
} }
else if( it->stype == UniversalIO::AnalogInput ) else if( it->stype == UniversalIO::AI )
{ {
long val = r->dev->rtu->getInt(r->rtuJack,r->rtuChan,it->stype); long val = r->dev->rtu->getInt(r->rtuJack,r->rtuChan,it->stype);
IOBase::processingAsAI( &(*it), val, shm, force ); IOBase::processingAsAI( &(*it), val, shm, force );
...@@ -1870,8 +1870,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it ) ...@@ -1870,8 +1870,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
} }
if( p.nbit > 0 && if( p.nbit > 0 &&
( p.stype == UniversalIO::AnalogInput || ( p.stype == UniversalIO::AI ||
p.stype == UniversalIO::AnalogOutput ) ) p.stype == UniversalIO::AO ) )
{ {
dlog[Debug::WARN] << "(initRSProperty): (ignore) uncorrect param`s nbit>1 (" << p.nbit << ")" dlog[Debug::WARN] << "(initRSProperty): (ignore) uncorrect param`s nbit>1 (" << p.nbit << ")"
<< " but iotype=" << p.stype << " for " << it.getProp("name") << endl; << " but iotype=" << p.stype << " for " << it.getProp("name") << endl;
...@@ -1935,7 +1935,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD ...@@ -1935,7 +1935,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
if( !initRTU188item(it,r) ) if( !initRTU188item(it,r) )
return false; return false;
UniversalIO::IOTypes t = UniSetTypes::getIOType(it.getProp("iotype")); UniversalIO::IOType t = UniSetTypes::getIOType(it.getProp("iotype"));
r->mbreg = RTUStorage::getRegister(r->rtuJack,r->rtuChan,t); r->mbreg = RTUStorage::getRegister(r->rtuJack,r->rtuChan,t);
r->mbfunc = RTUStorage::getFunction(r->rtuJack,r->rtuChan,t); r->mbfunc = RTUStorage::getFunction(r->rtuJack,r->rtuChan,t);
...@@ -2324,7 +2324,7 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::RSProperty& p ) ...@@ -2324,7 +2324,7 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::RSProperty& p )
<< " safety=" << p.safety << " safety=" << p.safety
<< " invert=" << p.invert; << " invert=" << p.invert;
if( p.stype == UniversalIO::AnalogInput || p.stype == UniversalIO::AnalogOutput ) if( p.stype == UniversalIO::AI || p.stype == UniversalIO::AO )
{ {
os << p.cal os << p.cal
<< " cdiagram=" << ( p.cdiagram ? "yes" : "no" ); << " cdiagram=" << ( p.cdiagram ? "yes" : "no" );
...@@ -2389,8 +2389,8 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM ...@@ -2389,8 +2389,8 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
return false; return false;
} }
UniversalIO::IOTypes m_iotype = conf->getIOType(d->second->mode_id); UniversalIO::IOType m_iotype = conf->getIOType(d->second->mode_id);
if( m_iotype != UniversalIO::AnalogInput ) if( m_iotype != UniversalIO::AI )
{ {
dlog[Debug::CRIT] << myname << "(initDeviceInfo): modeSensor='" << mod << "' must be 'AI'" << endl; dlog[Debug::CRIT] << myname << "(initDeviceInfo): modeSensor='" << mod << "' must be 'AI'" << endl;
return false; return false;
......
...@@ -170,7 +170,7 @@ class MBExchange: ...@@ -170,7 +170,7 @@ class MBExchange:
bool resp_init; bool resp_init;
bool ask_every_reg; bool ask_every_reg;
UniSetTypes::ObjectId mode_id; UniSetTypes::ObjectId mode_id;
IOController::AIOStateList::iterator mode_ait; IOController::IOStateList::iterator mode_ait;
long mode; // режим работы с устройством (см. ExchangeMode) long mode; // режим работы с устройством (см. ExchangeMode)
// return TRUE if state changed // return TRUE if state changed
...@@ -292,11 +292,11 @@ class MBExchange: ...@@ -292,11 +292,11 @@ class MBExchange:
PassiveTimer ptHeartBeat; PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat; UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat; int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat; IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::ObjectId test_id; UniSetTypes::ObjectId test_id;
UniSetTypes::ObjectId sidExchangeMode; /*!< иденидентификатор для датчика режима работы */ UniSetTypes::ObjectId sidExchangeMode; /*!< иденидентификатор для датчика режима работы */
IOController::AIOStateList::iterator aitExchangeMode; IOController::IOStateList::iterator aitExchangeMode;
long exchangeMode; /*!< режим работы см. ExchangeMode */ long exchangeMode; /*!< режим работы см. ExchangeMode */
UniSetTypes::uniset_rwmutex actMutex; UniSetTypes::uniset_rwmutex actMutex;
......
...@@ -165,14 +165,14 @@ void RTUStorage::poll( ModbusRTUMaster* mb ) ...@@ -165,14 +165,14 @@ void RTUStorage::poll( ModbusRTUMaster* mb )
} }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
long RTUStorage::getInt( RTUJack jack, unsigned short int chan, UniversalIO::IOTypes t ) long RTUStorage::getInt( RTUJack jack, unsigned short int chan, UniversalIO::IOType t )
{ {
return lroundf( getFloat(jack,chan,t) ); return lroundf( getFloat(jack,chan,t) );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO::IOTypes t ) float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO::IOType t )
{ {
if( t == UniversalIO::AnalogInput ) if( t == UniversalIO::AI )
{ {
switch( jack ) switch( jack )
{ {
...@@ -194,7 +194,7 @@ float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO:: ...@@ -194,7 +194,7 @@ float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO::
return 0; return 0;
} }
if( t == UniversalIO::AnalogOutput ) if( t == UniversalIO::AO )
{ {
switch( jack ) switch( jack )
{ {
...@@ -219,9 +219,9 @@ float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO:: ...@@ -219,9 +219,9 @@ float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO::
return 0; return 0;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::IOTypes t ) bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::IOType t )
{ {
if( t == UniversalIO::DigitalInput ) if( t == UniversalIO::DI )
{ {
switch( jack ) switch( jack )
{ {
...@@ -243,7 +243,7 @@ bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::I ...@@ -243,7 +243,7 @@ bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::I
return false; return false;
} }
if( t == UniversalIO::DigitalOutput ) if( t == UniversalIO::DO )
{ {
switch( jack ) switch( jack )
{ {
...@@ -264,9 +264,9 @@ bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::I ...@@ -264,9 +264,9 @@ bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::I
return false; return false;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan, UniversalIO::IOTypes t ) ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan, UniversalIO::IOType t )
{ {
if( t == UniversalIO::AnalogInput ) if( t == UniversalIO::AI )
{ {
switch( jack ) switch( jack )
{ {
...@@ -288,7 +288,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan ...@@ -288,7 +288,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return -1; return -1;
} }
if( t == UniversalIO::AnalogOutput ) if( t == UniversalIO::AO )
{ {
switch( jack ) switch( jack )
{ {
...@@ -310,7 +310,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan ...@@ -310,7 +310,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return -1; return -1;
} }
if( t == UniversalIO::DigitalInput ) if( t == UniversalIO::DI )
{ {
switch( jack ) switch( jack )
{ {
...@@ -332,7 +332,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan ...@@ -332,7 +332,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return -1; return -1;
} }
if( t == UniversalIO::DigitalOutput ) if( t == UniversalIO::DO )
{ {
switch( jack ) switch( jack )
{ {
...@@ -353,9 +353,9 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan ...@@ -353,9 +353,9 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return -1; return -1;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned short chan, UniversalIO::IOTypes t ) ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned short chan, UniversalIO::IOType t )
{ {
if( t == UniversalIO::AnalogInput ) if( t == UniversalIO::AI )
{ {
switch( jack ) switch( jack )
{ {
...@@ -373,7 +373,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho ...@@ -373,7 +373,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return ModbusRTU::fnUnknown; return ModbusRTU::fnUnknown;
} }
if( t == UniversalIO::AnalogOutput ) if( t == UniversalIO::AO )
{ {
switch( jack ) switch( jack )
{ {
...@@ -393,7 +393,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho ...@@ -393,7 +393,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return ModbusRTU::fnUnknown; return ModbusRTU::fnUnknown;
} }
if( t == UniversalIO::DigitalInput ) if( t == UniversalIO::DI )
{ {
switch( jack ) switch( jack )
{ {
...@@ -411,7 +411,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho ...@@ -411,7 +411,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return ModbusRTU::fnUnknown; return ModbusRTU::fnUnknown;
} }
if( t == UniversalIO::DigitalOutput ) if( t == UniversalIO::DO )
{ {
switch( jack ) switch( jack )
{ {
......
...@@ -41,13 +41,13 @@ class RTUStorage ...@@ -41,13 +41,13 @@ class RTUStorage
static RTUJack s2j( const std::string& jack ); static RTUJack s2j( const std::string& jack );
static std::string j2s( RTUJack j ); static std::string j2s( RTUJack j );
long getInt( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t ); long getInt( RTUJack jack, unsigned short channel, UniversalIO::IOType t );
float getFloat( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t ); float getFloat( RTUJack jack, unsigned short channel, UniversalIO::IOType t );
bool getState( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t ); bool getState( RTUJack jack, unsigned short channel, UniversalIO::IOType t );
static ModbusRTU::ModbusData getRegister( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t ); static ModbusRTU::ModbusData getRegister( RTUJack jack, unsigned short channel, UniversalIO::IOType t );
static ModbusRTU::SlaveFunctionCode getFunction( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t ); static ModbusRTU::SlaveFunctionCode getFunction( RTUJack jack, unsigned short channel, UniversalIO::IOType t );
// ДОДЕЛАТЬ: setState, setValue // ДОДЕЛАТЬ: setState, setValue
void print(); void print();
......
...@@ -105,9 +105,9 @@ int main( int argc, char **argv ) ...@@ -105,9 +105,9 @@ int main( int argc, char **argv )
cout << rtu << endl; cout << rtu << endl;
for( int i=0; i<24; i++ ) for( int i=0; i<24; i++ )
cout << "UNIO1 AI" << i << ": " << rtu.getFloat( RTUStorage::nJ1, i, UniversalIO::AnalogInput ) << endl; cout << "UNIO1 AI" << i << ": " << rtu.getFloat( RTUStorage::nJ1, i, UniversalIO::AI ) << endl;
for( int i=0; i<24; i++ ) for( int i=0; i<24; i++ )
cout << "UNIO1 DI" << i << ": " << rtu.getState( RTUStorage::nJ1, i, UniversalIO::DigitalInput ) << endl; cout << "UNIO1 DI" << i << ": " << rtu.getState( RTUStorage::nJ1, i, UniversalIO::DI ) << endl;
return 0; return 0;
} }
......
...@@ -683,7 +683,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd ) ...@@ -683,7 +683,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd )
{ {
IOProperty* p(&it->second); IOProperty* p(&it->second);
// if( p->stype != UniversalIO::DigitalOutput && p->stype != UniversalIO::AnalogOutput ) // if( p->stype != UniversalIO::DO && p->stype != UniversalIO::AO )
// continue; // continue;
// if( p->safety == NoSafetyState ) // if( p->safety == NoSafetyState )
...@@ -708,14 +708,14 @@ void MBSlave::sensorInfo( UniSetTypes::SensorMessage* sm ) ...@@ -708,14 +708,14 @@ void MBSlave::sensorInfo( UniSetTypes::SensorMessage* sm )
if( it->second.si.id == sm->id ) if( it->second.si.id == sm->id )
{ {
IOProperty* p(&it->second); IOProperty* p(&it->second);
if( p->stype == UniversalIO::DigitalOutput || if( p->stype == UniversalIO::DO ||
p->stype == UniversalIO::DigitalInput ) p->stype == UniversalIO::DI )
{ {
uniset_rwmutex_wrlock lock(p->val_lock); uniset_rwmutex_wrlock lock(p->val_lock);
p->value = sm->state ? 1 : 0; p->value = sm->state ? 1 : 0;
} }
else if( p->stype == UniversalIO::AnalogOutput || else if( p->stype == UniversalIO::AO ||
p->stype == UniversalIO::AnalogInput ) p->stype == UniversalIO::AI )
{ {
uniset_rwmutex_wrlock lock(p->val_lock); uniset_rwmutex_wrlock lock(p->val_lock);
p->value = sm->value; p->value = sm->value;
...@@ -963,7 +963,7 @@ std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p ) ...@@ -963,7 +963,7 @@ std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p )
<< " safety=" << p.safety << " safety=" << p.safety
<< " invert=" << p.invert; << " invert=" << p.invert;
if( p.stype == UniversalIO::AnalogInput || p.stype == UniversalIO::AnalogOutput ) if( p.stype == UniversalIO::AI || p.stype == UniversalIO::AO )
{ {
os << p.cal os << p.cal
<< " cdiagram=" << ( p.cdiagram ? "yes" : "no" ); << " cdiagram=" << ( p.cdiagram ? "yes" : "no" );
...@@ -1090,8 +1090,8 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod ...@@ -1090,8 +1090,8 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
if( p->vtype == VTypes::vtUnknown ) if( p->vtype == VTypes::vtUnknown )
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, mbval, shm, force ); IOBase::processingAsDI( p, mbval, shm, force );
} }
...@@ -1147,14 +1147,14 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod ...@@ -1147,14 +1147,14 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
*/ */
/* /*
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
bool set = val ? true : false; bool set = val ? true : false;
IOBase::processingAsDI(p,set,shm,force); IOBase::processingAsDI(p,set,shm,force);
} }
else if( p->stype == UniversalIO::AnalogInput || else if( p->stype == UniversalIO::AI ||
p->stype == UniversalIO::AnalogOutput ) p->stype == UniversalIO::AO )
{ {
IOBase::processingAsAI( p, val, shm, force ); IOBase::processingAsAI( p, val, shm, force );
} }
...@@ -1274,13 +1274,13 @@ ModbusRTU::mbErrCode MBSlave::real_read_it( IOMap::iterator& it, ModbusRTU::Modb ...@@ -1274,13 +1274,13 @@ ModbusRTU::mbErrCode MBSlave::real_read_it( IOMap::iterator& it, ModbusRTU::Modb
if( p->amode == MBSlave::amWO ) if( p->amode == MBSlave::amWO )
return ModbusRTU::erBadDataAddress; return ModbusRTU::erBadDataAddress;
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
val = IOBase::processingAsDO(p,shm,force) ? 1 : 0; val = IOBase::processingAsDO(p,shm,force) ? 1 : 0;
} }
else if( p->stype == UniversalIO::AnalogInput || else if( p->stype == UniversalIO::AI ||
p->stype == UniversalIO::AnalogOutput ) p->stype == UniversalIO::AO )
{ {
if( p->vtype == VTypes::vtUnknown ) if( p->vtype == VTypes::vtUnknown )
{ {
......
...@@ -174,10 +174,10 @@ class MBSlave: ...@@ -174,10 +174,10 @@ class MBSlave:
PassiveTimer ptHeartBeat; PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat; UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat; int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat; IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::ObjectId test_id; UniSetTypes::ObjectId test_id;
IOController::AIOStateList::iterator aitAskCount; IOController::IOStateList::iterator aitAskCount;
UniSetTypes::ObjectId askcount_id; UniSetTypes::ObjectId askcount_id;
IOController::DIOStateList::iterator ditRespond; IOController::DIOStateList::iterator ditRespond;
......
...@@ -38,7 +38,7 @@ class SMDBServer: ...@@ -38,7 +38,7 @@ class SMDBServer:
PassiveTimer ptHeartBeat; PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat; UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat; int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat; IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::ObjectId test_id; UniSetTypes::ObjectId test_id;
std::string db_locale; std::string db_locale;
......
...@@ -41,7 +41,7 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname ) ...@@ -41,7 +41,7 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
activated(false), activated(false),
workready(false), workready(false),
dblogging(false), dblogging(false),
iotypePulsar(UniversalIO::DigitalInput), iotypePulsar(UniversalIO::DI),
msecPulsar(0) msecPulsar(0)
{ {
mutex_start.setName(myname + "_mutex_start"); mutex_start.setName(myname + "_mutex_start");
...@@ -128,7 +128,7 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname ) ...@@ -128,7 +128,7 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
{ {
iotypePulsar = UniSetTypes::getIOType(t); iotypePulsar = UniSetTypes::getIOType(t);
if( iotypePulsar == UniversalIO::UnknownIOType || if( iotypePulsar == UniversalIO::UnknownIOType ||
iotypePulsar == UniversalIO::AnalogInput || iotypePulsar == UniversalIO::AnalogOutput ) iotypePulsar == UniversalIO::AI || iotypePulsar == UniversalIO::AO )
{ {
ostringstream err; ostringstream err;
err << myname << ": Invalid iotype '" << t << "' for pulsar. Must be 'DI' or 'DO'"; err << myname << ": Invalid iotype '" << t << "' for pulsar. Must be 'DI' or 'DO'";
...@@ -239,9 +239,9 @@ void SharedMemory::timerInfo( TimerMessage *tm ) ...@@ -239,9 +239,9 @@ void SharedMemory::timerInfo( TimerMessage *tm )
{ {
bool st = localGetState(ditPulsar,siPulsar); bool st = localGetState(ditPulsar,siPulsar);
st ^= true; st ^= true;
if( iotypePulsar == UniversalIO::DigitalInput ) if( iotypePulsar == UniversalIO::DI )
localSaveState(ditPulsar,siPulsar,st,getId()); localSaveState(ditPulsar,siPulsar,st,getId());
else if( iotypePulsar == UniversalIO::DigitalOutput ) else if( iotypePulsar == UniversalIO::DO )
localSetState(ditPulsar,siPulsar,st,getId()); localSetState(ditPulsar,siPulsar,st,getId());
} }
} }
...@@ -336,7 +336,7 @@ bool SharedMemory::activateObject() ...@@ -336,7 +336,7 @@ bool SharedMemory::activateObject()
// инициализируем указатели // инициализируем указатели
for( HeartBeatList::iterator it=hlist.begin(); it!=hlist.end(); ++it ) for( HeartBeatList::iterator it=hlist.begin(); it!=hlist.end(); ++it )
{ {
it->ait = myaioEnd(); it->ait = myioEnd();
it->dit = mydioEnd(); it->dit = mydioEnd();
} }
...@@ -348,7 +348,7 @@ bool SharedMemory::activateObject() ...@@ -348,7 +348,7 @@ bool SharedMemory::activateObject()
// cerr << "history for id=" << it->id << " count=" << it->hlst.size() << endl; // cerr << "history for id=" << it->id << " count=" << it->hlst.size() << endl;
for( HistoryList::iterator hit=it->hlst.begin(); hit!=it->hlst.end(); ++hit ) for( HistoryList::iterator hit=it->hlst.begin(); hit!=it->hlst.end(); ++hit )
{ {
hit->ait = myaioEnd(); hit->ait = myioEnd();
hit->dit = mydioEnd(); hit->dit = mydioEnd();
} }
} }
...@@ -750,7 +750,7 @@ void SharedMemory::saveHistory() ...@@ -750,7 +750,7 @@ void SharedMemory::saveHistory()
{ {
for( HistoryList::iterator hit=it->hlst.begin(); hit!=it->hlst.end(); ++hit ) for( HistoryList::iterator hit=it->hlst.begin(); hit!=it->hlst.end(); ++hit )
{ {
if( hit->ait != myaioEnd() ) if( hit->ait != myioEnd() )
hit->add( localGetValue( hit->ait, hit->ait->second.si ), it->size ); hit->add( localGetValue( hit->ait, hit->ait->second.si ), it->size );
else if( hit->dit != mydioEnd() ) else if( hit->dit != mydioEnd() )
hit->add( localGetState( hit->dit, hit->dit->second.si ), it->size ); hit->add( localGetState( hit->dit, hit->dit->second.si ), it->size );
...@@ -794,7 +794,25 @@ void SharedMemory::updateHistory( UniSetTypes::SensorMessage* sm ) ...@@ -794,7 +794,25 @@ void SharedMemory::updateHistory( UniSetTypes::SensorMessage* sm )
for( History::iterator it=hist.begin(); it!=hist.end(); ++it ) for( History::iterator it=hist.begin(); it!=hist.end(); ++it )
{ {
if( sm->id == it->fuse_id ) History::iterator it( (*it1) );
if( sm->sensor_type == UniversalIO::DI ||
sm->sensor_type == UniversalIO::DO )
{
bool st = it->fuse_invert ? !sm->state : sm->state;
if( st )
{
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl;
it->fuse_sec = sm->sm_tv_sec;
it->fuse_usec = sm->sm_tv_usec;
m_historySignal.emit( &(*it) );
}
}
else if( sm->sensor_type == UniversalIO::AI ||
sm->sensor_type == UniversalIO::AO )
>>>>>>> Первый этап переделок в связи с переходом на getValue/setValue
{ {
if( sm->sensor_type == UniversalIO::DigitalInput || if( sm->sensor_type == UniversalIO::DigitalInput ||
sm->sensor_type == UniversalIO::DigitalOutput ) sm->sensor_type == UniversalIO::DigitalOutput )
......
...@@ -283,7 +283,7 @@ class SharedMemory: ...@@ -283,7 +283,7 @@ class SharedMemory:
UniSetTypes::ObjectId id; UniSetTypes::ObjectId id;
HBuffer buf; HBuffer buf;
AIOStateList::iterator ait; IOStateList::iterator ait;
DIOStateList::iterator dit; DIOStateList::iterator dit;
void add( long val, size_t size ) void add( long val, size_t size )
...@@ -375,7 +375,7 @@ class SharedMemory: ...@@ -375,7 +375,7 @@ class SharedMemory:
UniSetTypes::ObjectId a_sid; // аналоговый счётчик UniSetTypes::ObjectId a_sid; // аналоговый счётчик
UniSetTypes::ObjectId d_sid; // дискретный датчик состояния процесса UniSetTypes::ObjectId d_sid; // дискретный датчик состояния процесса
AIOStateList::iterator ait; IOStateList::iterator ait;
DIOStateList::iterator dit; DIOStateList::iterator dit;
int reboot_msec; /*!< Время в течение которого, процесс обязан подтвердить своё существование, int reboot_msec; /*!< Время в течение которого, процесс обязан подтвердить своё существование,
...@@ -432,7 +432,7 @@ class SharedMemory: ...@@ -432,7 +432,7 @@ class SharedMemory:
DIOStateList::iterator ditPulsar; DIOStateList::iterator ditPulsar;
IOController_i::SensorInfo siPulsar; IOController_i::SensorInfo siPulsar;
UniversalIO::IOTypes iotypePulsar; UniversalIO::IOType iotypePulsar;
int msecPulsar; int msecPulsar;
UniSetTypes::uniset_mutex act_mutex; UniSetTypes::uniset_mutex act_mutex;
......
...@@ -130,7 +130,7 @@ class UNetExchange: ...@@ -130,7 +130,7 @@ class UNetExchange:
PassiveTimer ptHeartBeat; PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat; UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat; int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat; IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::ObjectId test_id; UniSetTypes::ObjectId test_id;
int steptime; /*!< периодичность вызова step, [мсек] */ int steptime; /*!< периодичность вызова step, [мсек] */
...@@ -178,7 +178,7 @@ class UNetExchange: ...@@ -178,7 +178,7 @@ class UNetExchange:
IOController::DIOStateList::iterator ditRespond; IOController::DIOStateList::iterator ditRespond;
bool respondInvert; bool respondInvert;
UniSetTypes::ObjectId sidLostPackets; UniSetTypes::ObjectId sidLostPackets;
IOController::AIOStateList::iterator aitLostPackets; IOController::IOStateList::iterator aitLostPackets;
}; };
typedef std::list<ReceiverInfo> ReceiverList; typedef std::list<ReceiverInfo> ReceiverList;
......
...@@ -299,13 +299,13 @@ void UNetReceiver::real_update() ...@@ -299,13 +299,13 @@ void UNetReceiver::real_update()
continue; continue;
} }
if( ii.iotype == UniversalIO::DigitalInput ) if( ii.iotype == UniversalIO::DI )
shm->localSaveState(ii.dit,id,val,shm->ID()); shm->localSaveState(ii.dit,id,val,shm->ID());
else if( ii.iotype == UniversalIO::AnalogInput ) else if( ii.iotype == UniversalIO::AI )
shm->localSaveValue(ii.ait,id,val,shm->ID()); shm->localSaveValue(ii.ait,id,val,shm->ID());
else if( ii.iotype == UniversalIO::AnalogOutput ) else if( ii.iotype == UniversalIO::AO )
shm->localSetValue(ii.ait,id,val,shm->ID()); shm->localSetValue(ii.ait,id,val,shm->ID());
else if( ii.iotype == UniversalIO::DigitalOutput ) else if( ii.iotype == UniversalIO::DO )
shm->localSetState(ii.dit,id,val,shm->ID()); shm->localSetState(ii.dit,id,val,shm->ID());
else else
dlog[Debug::CRIT] << myname << "(update): Unknown iotype for sid=" << id << endl; dlog[Debug::CRIT] << myname << "(update): Unknown iotype for sid=" << id << endl;
...@@ -342,13 +342,13 @@ void UNetReceiver::real_update() ...@@ -342,13 +342,13 @@ void UNetReceiver::real_update()
continue; continue;
} }
if( ii.iotype == UniversalIO::DigitalInput ) if( ii.iotype == UniversalIO::DI )
shm->localSaveState(ii.dit,d.id,d.val,shm->ID()); shm->localSaveState(ii.dit,d.id,d.val,shm->ID());
else if( ii.iotype == UniversalIO::AnalogInput ) else if( ii.iotype == UniversalIO::AI )
shm->localSaveValue(ii.ait,d.id,d.val,shm->ID()); shm->localSaveValue(ii.ait,d.id,d.val,shm->ID());
else if( ii.iotype == UniversalIO::AnalogOutput ) else if( ii.iotype == UniversalIO::AO )
shm->localSetValue(ii.ait,d.id,d.val,shm->ID()); shm->localSetValue(ii.ait,d.id,d.val,shm->ID());
else if( ii.iotype == UniversalIO::DigitalOutput ) else if( ii.iotype == UniversalIO::DO )
shm->localSetState(ii.dit,d.id,d.val,shm->ID()); shm->localSetState(ii.dit,d.id,d.val,shm->ID());
else else
dlog[Debug::CRIT] << myname << "(update): Unknown iotype for sid=" << d.id << endl; dlog[Debug::CRIT] << myname << "(update): Unknown iotype for sid=" << d.id << endl;
......
...@@ -128,7 +128,7 @@ class UNetReceiver ...@@ -128,7 +128,7 @@ class UNetReceiver
IOController::DIOStateList::iterator ditRespond; IOController::DIOStateList::iterator ditRespond;
bool respondInvert; bool respondInvert;
UniSetTypes::ObjectId sidLostPackets; UniSetTypes::ObjectId sidLostPackets;
IOController::AIOStateList::iterator aitLostPackets; IOController::IOStateList::iterator aitLostPackets;
bool activated; bool activated;
...@@ -171,9 +171,9 @@ class UNetReceiver ...@@ -171,9 +171,9 @@ class UNetReceiver
struct ItemInfo struct ItemInfo
{ {
long id; long id;
IOController::AIOStateList::iterator ait; IOController::IOStateList::iterator ait;
IOController::DIOStateList::iterator dit; IOController::DIOStateList::iterator dit;
UniversalIO::IOTypes iotype; UniversalIO::IOType iotype;
ItemInfo(): ItemInfo():
id(UniSetTypes::DefaultObjectId), id(UniSetTypes::DefaultObjectId),
......
...@@ -90,9 +90,9 @@ void UNetSender::updateFromSM() ...@@ -90,9 +90,9 @@ void UNetSender::updateFromSM()
{ {
long value = 0; long value = 0;
if( it->iotype == UniversalIO::DigitalInput || it->iotype == UniversalIO::DigitalOutput ) if( it->iotype == UniversalIO::DI || it->iotype == UniversalIO::DO )
value = shm->localGetState(it->dit,it->id) ? 1 : 0; value = shm->localGetState(it->dit,it->id) ? 1 : 0;
else if( it->iotype == UniversalIO::AnalogInput || it->iotype == UniversalIO::AnalogOutput ) else if( it->iotype == UniversalIO::AI || it->iotype == UniversalIO::AO )
value = shm->localGetValue(it->ait,it->id); value = shm->localGetValue(it->ait,it->id);
else else
{ {
...@@ -126,12 +126,12 @@ void UNetSender::updateItem( DMap::iterator& it, long value ) ...@@ -126,12 +126,12 @@ void UNetSender::updateItem( DMap::iterator& it, long value )
if( it == dlist.end() ) if( it == dlist.end() )
return; return;
if( it->iotype == UniversalIO::DigitalInput || it->iotype == UniversalIO::DigitalOutput ) if( it->iotype == UniversalIO::DI || it->iotype == UniversalIO::DO )
{ {
UniSetTypes::uniset_rwmutex_wrlock l(pack_mutex); UniSetTypes::uniset_rwmutex_wrlock l(pack_mutex);
mypack.setDData(it->pack_ind,value); mypack.setDData(it->pack_ind,value);
} }
else if( it->iotype == UniversalIO::AnalogInput || it->iotype == UniversalIO::AnalogOutput ) else if( it->iotype == UniversalIO::AI || it->iotype == UniversalIO::AO )
{ {
UniSetTypes::uniset_rwmutex_wrlock l(pack_mutex); UniSetTypes::uniset_rwmutex_wrlock l(pack_mutex);
mypack.setAData(it->pack_ind,value); mypack.setAData(it->pack_ind,value);
...@@ -286,7 +286,7 @@ bool UNetSender::initItem( UniXML_iterator& it ) ...@@ -286,7 +286,7 @@ bool UNetSender::initItem( UniXML_iterator& it )
p.id = sid; p.id = sid;
if( p.iotype == UniversalIO::DigitalInput || p.iotype == UniversalIO::DigitalOutput ) if( p.iotype == UniversalIO::DI || p.iotype == UniversalIO::DO )
{ {
p.pack_ind = mypack.addDData(sid,0); p.pack_ind = mypack.addDData(sid,0);
if ( p.pack_ind >= UniSetUDP::MaxDCount ) if ( p.pack_ind >= UniSetUDP::MaxDCount )
...@@ -299,7 +299,7 @@ bool UNetSender::initItem( UniXML_iterator& it ) ...@@ -299,7 +299,7 @@ bool UNetSender::initItem( UniXML_iterator& it )
return false; return false;
} }
} }
else if( p.iotype == UniversalIO::AnalogInput || p.iotype == UniversalIO::AnalogOutput ) else if( p.iotype == UniversalIO::AI || p.iotype == UniversalIO::AO )
{ {
p.pack_ind = mypack.addAData(sid,0); p.pack_ind = mypack.addAData(sid,0);
if ( p.pack_ind >= UniSetUDP::MaxACount ) if ( p.pack_ind >= UniSetUDP::MaxACount )
......
...@@ -31,9 +31,9 @@ class UNetSender ...@@ -31,9 +31,9 @@ class UNetSender
id(UniSetTypes::DefaultObjectId), id(UniSetTypes::DefaultObjectId),
pack_ind(-1){} pack_ind(-1){}
UniversalIO::IOTypes iotype; UniversalIO::IOType iotype;
UniSetTypes::ObjectId id; UniSetTypes::ObjectId id;
IOController::AIOStateList::iterator ait; IOController::IOStateList::iterator ait;
IOController::DIOStateList::iterator dit; IOController::DIOStateList::iterator dit;
int pack_ind; int pack_ind;
......
...@@ -224,13 +224,13 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI ...@@ -224,13 +224,13 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI
try try
{ {
if( m->type == UniversalIO::DigitalInput ) if( m->type == UniversalIO::DI )
shm->localSaveState( s->dit, m->id, (m->value ? true : false ), shm->ID() ); shm->localSaveState( s->dit, m->id, (m->value ? true : false ), shm->ID() );
else if( m->type == UniversalIO::DigitalOutput ) else if( m->type == UniversalIO::DO )
shm->localSetState( s->dit, m->id, (m->value ? true : false ), shm->ID() ); shm->localSetState( s->dit, m->id, (m->value ? true : false ), shm->ID() );
else if( map[i].type == UniversalIO::AnalogInput ) else if( map[i].type == UniversalIO::AI )
shm->localSaveValue( s->ait, m->id, m->value, shm->ID() ); shm->localSaveValue( s->ait, m->id, m->value, shm->ID() );
else if( map[i].type == UniversalIO::AnalogOutput ) else if( map[i].type == UniversalIO::AO )
shm->localSetValue( s->ait, m->id, m->value, shm->ID() ); shm->localSetValue( s->ait, m->id, m->value, shm->ID() );
} }
catch( Exception& ex ) catch( Exception& ex )
...@@ -275,13 +275,13 @@ void UniExchange::updateLocalData() ...@@ -275,13 +275,13 @@ void UniExchange::updateLocalData()
try try
{ {
uniset_rwmutex_wrlock lock(it->val_lock); uniset_rwmutex_wrlock lock(it->val_lock);
if( it->type == UniversalIO::DigitalInput || if( it->type == UniversalIO::DI ||
it->type == UniversalIO::DigitalOutput ) it->type == UniversalIO::DO )
{ {
it->val = shm->localGetState( it->dit, it->id ); it->val = shm->localGetState( it->dit, it->id );
} }
else if( it->type == UniversalIO::AnalogInput || else if( it->type == UniversalIO::AI ||
it->type == UniversalIO::AnalogOutput ) it->type == UniversalIO::AO )
{ {
it->val = shm->localGetValue( it->ait, it->id ); it->val = shm->localGetValue( it->ait, it->id );
} }
......
...@@ -74,10 +74,10 @@ class UniExchange: ...@@ -74,10 +74,10 @@ class UniExchange:
{} {}
IOController::DIOStateList::iterator dit; IOController::DIOStateList::iterator dit;
IOController::AIOStateList::iterator ait; IOController::IOStateList::iterator ait;
long val; long val;
long id; long id;
UniversalIO::IOTypes type; UniversalIO::IOType type;
UniSetTypes::uniset_rwmutex val_lock; UniSetTypes::uniset_rwmutex val_lock;
}; };
......
...@@ -53,7 +53,7 @@ static const int NoSafety = -1; ...@@ -53,7 +53,7 @@ static const int NoSafety = -1;
bool check_depend( SMInterface* shm ); /*!< проверка разрешения(зависимости) от другого датчика */ bool check_depend( SMInterface* shm ); /*!< проверка разрешения(зависимости) от другого датчика */
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
UniversalIO::IOTypes stype; /*!< тип канала (DI,DO,AI,AO) */ UniversalIO::IOType stype; /*!< тип канала (DI,DO,AI,AO) */
IOController_i::CalibrateInfo cal; /*!< калибровочные параметры */ IOController_i::CalibrateInfo cal; /*!< калибровочные параметры */
Calibration* cdiagram; /*!< специальная калибровочная диаграмма */ Calibration* cdiagram; /*!< специальная калибровочная диаграмма */
...@@ -89,11 +89,11 @@ static const int NoSafety = -1; ...@@ -89,11 +89,11 @@ static const int NoSafety = -1;
// Зависимость (d - depend) // Зависимость (d - depend)
UniSetTypes::ObjectId d_id; /*!< идентификатор датчика, от которого зависит данный */ UniSetTypes::ObjectId d_id; /*!< идентификатор датчика, от которого зависит данный */
IOController::AIOStateList::iterator d_ait; /*! итератор на датчик от которого зависит данный */ IOController::IOStateList::iterator d_ait; /*! итератор на датчик от которого зависит данный */
IOController::DIOStateList::iterator d_dit; /*! итератор на датчик от которого зависит данный */ IOController::DIOStateList::iterator d_dit; /*! итератор на датчик от которого зависит данный */
long d_value; /*!< разрешающее работу значение датчика от которого зависит данный */ long d_value; /*!< разрешающее работу значение датчика от которого зависит данный */
long d_off_value; /*!< блокирующее значение */ long d_off_value; /*!< блокирующее значение */
UniversalIO::IOTypes d_iotype; UniversalIO::IOType d_iotype;
// Порог // Порог
UniSetTypes::ObjectId t_ai; /*!< если данный датчик дискретный, UniSetTypes::ObjectId t_ai; /*!< если данный датчик дискретный,
...@@ -103,7 +103,7 @@ static const int NoSafety = -1; ...@@ -103,7 +103,7 @@ static const int NoSafety = -1;
IONotifyController_i::ThresholdInfo ti; IONotifyController_i::ThresholdInfo ti;
IOController::AIOStateList::iterator t_ait; /*! итератор на датчик по которому формируется порог */ IOController::AIOStateList::iterator t_ait; /*! итератор на датчик по которому формируется порог */
IOController::AIOStateList::iterator ait; IOController::IOStateList::iterator ait;
IOController::DIOStateList::iterator dit; IOController::DIOStateList::iterator dit;
UniSetTypes::uniset_rwmutex val_lock; /*!< блокировка на время "работы" со значением */ UniSetTypes::uniset_rwmutex val_lock; /*!< блокировка на время "работы" со значением */
......
...@@ -16,11 +16,11 @@ class SMInterface ...@@ -16,11 +16,11 @@ class SMInterface
void setState ( UniSetTypes::ObjectId, bool state ); void setState ( UniSetTypes::ObjectId, bool state );
void setValue ( UniSetTypes::ObjectId, long value ); void setValue ( UniSetTypes::ObjectId, long value );
bool saveState ( IOController_i::SensorInfo& si, bool state, UniversalIO::IOTypes type, UniSetTypes::ObjectId supplier ); bool saveState ( IOController_i::SensorInfo& si, bool state, UniversalIO::IOType type, UniSetTypes::ObjectId supplier );
bool saveValue ( IOController_i::SensorInfo& si, long value, UniversalIO::IOTypes type, UniSetTypes::ObjectId supplier ); bool saveValue ( IOController_i::SensorInfo& si, long value, UniversalIO::IOType type, UniSetTypes::ObjectId supplier );
bool saveLocalState ( UniSetTypes::ObjectId id, bool state, UniversalIO::IOTypes type=UniversalIO::DigitalInput ); bool saveLocalState ( UniSetTypes::ObjectId id, bool state, UniversalIO::IOType type=UniversalIO::DI );
bool saveLocalValue ( UniSetTypes::ObjectId id, long value, UniversalIO::IOTypes type=UniversalIO::AnalogInput ); bool saveLocalValue ( UniSetTypes::ObjectId id, long value, UniversalIO::IOType type=UniversalIO::AI );
void setUndefinedState( IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier ); void setUndefinedState( IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier );
...@@ -34,7 +34,7 @@ class SMInterface ...@@ -34,7 +34,7 @@ class SMInterface
IOController_i::ASensorInfoSeq* getAnalogSensorsMap(); IOController_i::ASensorInfoSeq* getAnalogSensorsMap();
IONotifyController_i::ThresholdsListSeq* getThresholdsList(); IONotifyController_i::ThresholdsListSeq* getThresholdsList();
void localSaveValue( IOController::AIOStateList::iterator& it, void localSaveValue( IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid, UniSetTypes::ObjectId sid,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id ); CORBA::Long newvalue, UniSetTypes::ObjectId sup_id );
...@@ -46,26 +46,26 @@ class SMInterface ...@@ -46,26 +46,26 @@ class SMInterface
UniSetTypes::ObjectId sid, UniSetTypes::ObjectId sid,
CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id ); CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id );
void localSetValue( IOController::AIOStateList::iterator& it, void localSetValue( IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid, UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id ); CORBA::Long value, UniSetTypes::ObjectId sup_id );
bool localGetState( IOController::DIOStateList::iterator& it, bool localGetState( IOController::DIOStateList::iterator& it,
UniSetTypes::ObjectId sid ); UniSetTypes::ObjectId sid );
long localGetValue( IOController::AIOStateList::iterator& it, long localGetValue( IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid ); UniSetTypes::ObjectId sid );
/*! функция выставления признака неопределённого состояния для аналоговых датчиков /*! функция выставления признака неопределённого состояния для аналоговых датчиков
// для дискретных датчиков необходимости для подобной функции нет. // для дискретных датчиков необходимости для подобной функции нет.
// см. логику выставления в функции localSaveState // см. логику выставления в функции localSaveState
*/ */
void localSetUndefinedState( IOController::AIOStateList::iterator& it, void localSetUndefinedState( IOController::IOStateList::iterator& it,
bool undefined, UniSetTypes::ObjectId sid ); bool undefined, UniSetTypes::ObjectId sid );
// специальные функции // специальные функции
IOController::DIOStateList::iterator dioEnd(); IOController::DIOStateList::iterator dioEnd();
IOController::AIOStateList::iterator aioEnd(); IOController::IOStateList::iterator ioEnd();
void initAIterator( IOController::AIOStateList::iterator& it ); void initAIterator( IOController::IOStateList::iterator& it );
void initDIterator( IOController::DIOStateList::iterator& it ); void initDIterator( IOController::DIOStateList::iterator& it );
bool exist(); bool exist();
......
...@@ -97,7 +97,7 @@ bool IOBase::check_depend( SMInterface* shm ) ...@@ -97,7 +97,7 @@ bool IOBase::check_depend( SMInterface* shm )
if( d_id == DefaultObjectId ) if( d_id == DefaultObjectId )
return true; return true;
if( d_iotype == UniversalIO::DigitalInput || d_iotype == UniversalIO::DigitalOutput ) if( d_iotype == UniversalIO::DI || d_iotype == UniversalIO::DO )
{ {
if( shm->localGetState(d_dit,d_id) == (bool)d_value ) if( shm->localGetState(d_dit,d_id) == (bool)d_value )
return true; return true;
...@@ -105,7 +105,7 @@ bool IOBase::check_depend( SMInterface* shm ) ...@@ -105,7 +105,7 @@ bool IOBase::check_depend( SMInterface* shm )
return false; return false;
} }
if( d_iotype == UniversalIO::AnalogInput || d_iotype == UniversalIO::AnalogOutput ) if( d_iotype == UniversalIO::AI || d_iotype == UniversalIO::AO )
{ {
if( shm->localGetValue(d_ait,d_id) == d_value ) if( shm->localGetValue(d_ait,d_id) == d_value )
return true; return true;
...@@ -176,13 +176,13 @@ void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force ...@@ -176,13 +176,13 @@ void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force
if( force || it->value != val ) if( force || it->value != val )
{ {
if( it->stype == UniversalIO::AnalogInput ) if( it->stype == UniversalIO::AI )
shm->localSaveValue( it->ait,it->si.id,val,shm->ID() ); shm->localSaveValue( it->ait,it->si.id,val,shm->ID() );
else if( it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AO )
shm->localSetValue( it->ait,it->si.id,val,shm->ID() ); shm->localSetValue( it->ait,it->si.id,val,shm->ID() );
else if( it->stype == UniversalIO::DigitalOutput ) else if( it->stype == UniversalIO::DO )
shm->localSetState( it->dit,it->si.id,(bool)val,shm->ID() ); shm->localSetState( it->dit,it->si.id,(bool)val,shm->ID() );
else if( it->stype == UniversalIO::DigitalInput ) else if( it->stype == UniversalIO::DI )
shm->localSaveState( it->dit,it->si.id,(bool)val,shm->ID() ); shm->localSaveState( it->dit,it->si.id,(bool)val,shm->ID() );
it->value = val; it->value = val;
...@@ -234,13 +234,13 @@ void IOBase::processingFasAI( IOBase* it, float fval, SMInterface* shm, bool for ...@@ -234,13 +234,13 @@ void IOBase::processingFasAI( IOBase* it, float fval, SMInterface* shm, bool for
if( force || it->value != val ) if( force || it->value != val )
{ {
if( it->stype == UniversalIO::AnalogInput ) if( it->stype == UniversalIO::AI )
shm->localSaveValue( it->ait,it->si.id,val,shm->ID() ); shm->localSaveValue( it->ait,it->si.id,val,shm->ID() );
else if( it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AO )
shm->localSetValue( it->ait,it->si.id,val,shm->ID() ); shm->localSetValue( it->ait,it->si.id,val,shm->ID() );
else if( it->stype == UniversalIO::DigitalOutput ) else if( it->stype == UniversalIO::DO )
shm->localSetState( it->dit,it->si.id,(bool)val,shm->ID() ); shm->localSetState( it->dit,it->si.id,(bool)val,shm->ID() );
else if( it->stype == UniversalIO::DigitalInput ) else if( it->stype == UniversalIO::DI )
shm->localSaveState( it->dit,it->si.id,(bool)val,shm->ID() ); shm->localSaveState( it->dit,it->si.id,(bool)val,shm->ID() );
it->value = val; it->value = val;
...@@ -265,13 +265,13 @@ void IOBase::processingAsDI( IOBase* it, bool set, SMInterface* shm, bool force ...@@ -265,13 +265,13 @@ void IOBase::processingAsDI( IOBase* it, bool set, SMInterface* shm, bool force
uniset_rwmutex_wrlock lock(it->val_lock); uniset_rwmutex_wrlock lock(it->val_lock);
if( force || (bool)it->value!=set ) if( force || (bool)it->value!=set )
{ {
if( it->stype == UniversalIO::DigitalInput ) if( it->stype == UniversalIO::DI )
shm->localSaveState(it->dit,it->si.id,set,shm->ID()); shm->localSaveState(it->dit,it->si.id,set,shm->ID());
else if( it->stype == UniversalIO::DigitalOutput ) else if( it->stype == UniversalIO::DO )
shm->localSetState(it->dit,it->si.id,set,shm->ID()); shm->localSetState(it->dit,it->si.id,set,shm->ID());
else if( it->stype == UniversalIO::AnalogInput ) else if( it->stype == UniversalIO::AI )
shm->localSaveValue( it->ait,it->si.id,(set ? 1:0),shm->ID() ); shm->localSaveValue( it->ait,it->si.id,(set ? 1:0),shm->ID() );
else if( it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AO )
shm->localSetValue( it->ait,it->si.id,(set ? 1:0),shm->ID() ); shm->localSetValue( it->ait,it->si.id,(set ? 1:0),shm->ID() );
it->value = set ? 1 : 0; it->value = set ? 1 : 0;
...@@ -290,16 +290,16 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force ) ...@@ -290,16 +290,16 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force )
if( force ) if( force )
{ {
if( it->stype == UniversalIO::DigitalInput || it->stype == UniversalIO::DigitalOutput ) if( it->stype == UniversalIO::DI || it->stype == UniversalIO::DO )
val = shm->localGetState(it->dit,it->si.id) ? 1 : 0; val = shm->localGetState(it->dit,it->si.id) ? 1 : 0;
else if( it->stype == UniversalIO::AnalogInput || it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AI || it->stype == UniversalIO::AO )
val = shm->localGetValue(it->ait,it->si.id); val = shm->localGetValue(it->ait,it->si.id);
it->value = val; it->value = val;
} }
if( it->stype == UniversalIO::AnalogOutput || if( it->stype == UniversalIO::AO ||
it->stype == UniversalIO::AnalogInput ) it->stype == UniversalIO::AI )
{ {
if( it->cdiagram ) // задана специальная калибровочная диаграмма if( it->cdiagram ) // задана специальная калибровочная диаграмма
{ {
...@@ -343,9 +343,9 @@ bool IOBase::processingAsDO( IOBase* it, SMInterface* shm, bool force ) ...@@ -343,9 +343,9 @@ bool IOBase::processingAsDO( IOBase* it, SMInterface* shm, bool force )
if( force ) if( force )
{ {
if( it->stype == UniversalIO::DigitalInput || it->stype == UniversalIO::DigitalOutput ) if( it->stype == UniversalIO::DI || it->stype == UniversalIO::DO )
set = shm->localGetState(it->dit,it->si.id); set = shm->localGetState(it->dit,it->si.id);
else if( it->stype == UniversalIO::AnalogInput || it->stype == UniversalIO::AnalogOutput ) else if( it->stype == UniversalIO::AI || it->stype == UniversalIO::AO )
set = shm->localGetValue(it->ait,it->si.id) ? true : false; set = shm->localGetValue(it->ait,it->si.id) ? true : false;
} }
...@@ -368,8 +368,8 @@ float IOBase::processingFasAO( IOBase* it, SMInterface* shm, bool force ) ...@@ -368,8 +368,8 @@ float IOBase::processingFasAO( IOBase* it, SMInterface* shm, bool force )
it->value = val; it->value = val;
} }
if( it->stype == UniversalIO::AnalogOutput || if( it->stype == UniversalIO::AO ||
it->stype == UniversalIO::AnalogInput ) it->stype == UniversalIO::AI )
{ {
if( it->cdiagram ) // задана специальная калибровочная диаграмма if( it->cdiagram ) // задана специальная калибровочная диаграмма
{ {
...@@ -522,7 +522,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -522,7 +522,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
b->d_iotype = conf->getIOType(b->d_id); b->d_iotype = conf->getIOType(b->d_id);
} }
if( b->stype == UniversalIO::AnalogInput || b->stype == UniversalIO::AnalogOutput ) if( b->stype == UniversalIO::AI || b->stype == UniversalIO::AO )
{ {
b->cal.minRaw = it.getIntProp("rmin"); b->cal.minRaw = it.getIntProp("rmin");
b->cal.maxRaw = it.getIntProp("rmax"); b->cal.maxRaw = it.getIntProp("rmax");
...@@ -572,7 +572,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -572,7 +572,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
if( !it.getProp("iir_coeff_new").empty() ) if( !it.getProp("iir_coeff_new").empty() )
f_iir_coeff_new = atof(it.getProp("iir_coeff_new").c_str()); f_iir_coeff_new = atof(it.getProp("iir_coeff_new").c_str());
if( b->stype == UniversalIO::AnalogInput ) if( b->stype == UniversalIO::AI )
b->df.setSettings( f_size, f_T, f_lsparam, f_iir, b->df.setSettings( f_size, f_T, f_lsparam, f_iir,
f_iir_coeff_prev, f_iir_coeff_new ); f_iir_coeff_prev, f_iir_coeff_new );
...@@ -582,7 +582,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -582,7 +582,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
if( !caldiagram.empty() ) if( !caldiagram.empty() )
b->cdiagram = UniSetExtensions::buildCalibrationDiagram(caldiagram); b->cdiagram = UniSetExtensions::buildCalibrationDiagram(caldiagram);
} }
else if( b->stype == UniversalIO::DigitalInput || b->stype == UniversalIO::DigitalOutput ) else if( b->stype == UniversalIO::DI || b->stype == UniversalIO::DO )
{ {
string tai(it.getProp("threshold_aid")); string tai(it.getProp("threshold_aid"));
if( !tai.empty() ) if( !tai.empty() )
......
...@@ -140,7 +140,7 @@ void SMInterface::setValue ( UniSetTypes::ObjectId id, long value ) ...@@ -140,7 +140,7 @@ void SMInterface::setValue ( UniSetTypes::ObjectId id, long value )
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
bool SMInterface::saveState ( IOController_i::SensorInfo& si, bool state, bool SMInterface::saveState ( IOController_i::SensorInfo& si, bool state,
UniversalIO::IOTypes type, UniSetTypes::ObjectId sup_id ) UniversalIO::IOType type, UniSetTypes::ObjectId sup_id )
{ {
if( ic ) if( ic )
{ {
...@@ -157,7 +157,7 @@ bool SMInterface::saveState ( IOController_i::SensorInfo& si, bool state, ...@@ -157,7 +157,7 @@ bool SMInterface::saveState ( IOController_i::SensorInfo& si, bool state,
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
bool SMInterface::saveValue ( IOController_i::SensorInfo& si, long value, bool SMInterface::saveValue ( IOController_i::SensorInfo& si, long value,
UniversalIO::IOTypes type, UniSetTypes::ObjectId sup_id ) UniversalIO::IOType type, UniSetTypes::ObjectId sup_id )
{ {
if( ic ) if( ic )
{ {
...@@ -210,7 +210,7 @@ bool SMInterface::getState ( UniSetTypes::ObjectId id ) ...@@ -210,7 +210,7 @@ bool SMInterface::getState ( UniSetTypes::ObjectId id )
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
bool SMInterface::saveLocalState( UniSetTypes::ObjectId id, bool state, bool SMInterface::saveLocalState( UniSetTypes::ObjectId id, bool state,
UniversalIO::IOTypes type ) UniversalIO::IOType type )
{ {
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
si.id = id; si.id = id;
...@@ -219,7 +219,7 @@ bool SMInterface::saveLocalState( UniSetTypes::ObjectId id, bool state, ...@@ -219,7 +219,7 @@ bool SMInterface::saveLocalState( UniSetTypes::ObjectId id, bool state,
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
bool SMInterface::saveLocalValue ( UniSetTypes::ObjectId id, long value, bool SMInterface::saveLocalValue ( UniSetTypes::ObjectId id, long value,
UniversalIO::IOTypes type ) UniversalIO::IOType type )
{ {
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
si.id = id; si.id = id;
...@@ -325,13 +325,13 @@ IOController::DIOStateList::iterator SMInterface::dioEnd() ...@@ -325,13 +325,13 @@ IOController::DIOStateList::iterator SMInterface::dioEnd()
return ic->dioEnd(); return ic->dioEnd();
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
IOController::AIOStateList::iterator SMInterface::aioEnd() IOController::IOStateList::iterator SMInterface::ioEnd()
{ {
CHECK_IC_PTR(aioEnd) CHECK_IC_PTR(ioEnd)
return ic->aioEnd(); return ic->ioEnd();
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void SMInterface::localSaveValue( IOController::IOController::AIOStateList::iterator& it, void SMInterface::localSaveValue( IOController::IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid, UniSetTypes::ObjectId sid,
CORBA::Long nval, UniSetTypes::ObjectId sup_id ) CORBA::Long nval, UniSetTypes::ObjectId sup_id )
{ {
...@@ -376,7 +376,7 @@ void SMInterface::localSetState( IOController::DIOStateList::iterator& it, ...@@ -376,7 +376,7 @@ void SMInterface::localSetState( IOController::DIOStateList::iterator& it,
ic->localSetState(it,si,newstate,sup_id); ic->localSetState(it,si,newstate,sup_id);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void SMInterface::localSetValue( IOController::AIOStateList::iterator& it, void SMInterface::localSetValue( IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid, UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id ) CORBA::Long value, UniSetTypes::ObjectId sup_id )
{ {
...@@ -402,7 +402,7 @@ bool SMInterface::localGetState( IOController::DIOStateList::iterator& it, UniSe ...@@ -402,7 +402,7 @@ bool SMInterface::localGetState( IOController::DIOStateList::iterator& it, UniSe
return ic->localGetState(it,si); return ic->localGetState(it,si);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
long SMInterface::localGetValue( IOController::AIOStateList::iterator& it, UniSetTypes::ObjectId sid ) long SMInterface::localGetValue( IOController::IOStateList::iterator& it, UniSetTypes::ObjectId sid )
{ {
if( !ic ) if( !ic )
return getValue( sid ); return getValue( sid );
...@@ -414,7 +414,7 @@ long SMInterface::localGetValue( IOController::AIOStateList::iterator& it, UniSe ...@@ -414,7 +414,7 @@ long SMInterface::localGetValue( IOController::AIOStateList::iterator& it, UniSe
return ic->localGetValue(it,si); return ic->localGetValue(it,si);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void SMInterface::localSetUndefinedState( IOController::AIOStateList::iterator& it, void SMInterface::localSetUndefinedState( IOController::IOStateList::iterator& it,
bool undefined, bool undefined,
UniSetTypes::ObjectId sid ) UniSetTypes::ObjectId sid )
{ {
...@@ -434,10 +434,10 @@ void SMInterface::localSetUndefinedState( IOController::AIOStateList::iterator& ...@@ -434,10 +434,10 @@ void SMInterface::localSetUndefinedState( IOController::AIOStateList::iterator&
ic->localSetUndefinedState(it,undefined,si); ic->localSetUndefinedState(it,undefined,si);
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void SMInterface::initAIterator( IOController::AIOStateList::iterator& it ) void SMInterface::initAIterator( IOController::IOStateList::iterator& it )
{ {
if( ic ) if( ic )
it = ic->aioEnd(); it = ic->ioEnd();
// else // else
// cerr << "(SMInterface::initAIterator): ic=NULL" << endl; // cerr << "(SMInterface::initAIterator): ic=NULL" << endl;
} }
......
...@@ -399,7 +399,7 @@ void UObject_SK::callback() ...@@ -399,7 +399,7 @@ void UObject_SK::callback()
// "сердцебиение" // "сердцебиение"
if( idHeartBeat!=DefaultObjectId && ptHeartBeat.checkTime() ) if( idHeartBeat!=DefaultObjectId && ptHeartBeat.checkTime() )
{ {
ui.saveValue(idHeartBeat,maxHeartBeat,UniversalIO::AnalogInput); ui.saveValue(idHeartBeat,maxHeartBeat,UniversalIO::AI);
ptHeartBeat.reset(); ptHeartBeat.reset();
} }
......
...@@ -105,8 +105,8 @@ namespace UniSetTypes ...@@ -105,8 +105,8 @@ namespace UniSetTypes
xmlNode* getXMLServicesSection(); xmlNode* getXMLServicesSection();
xmlNode* getXMLNodesSection(); xmlNode* getXMLNodesSection();
xmlNode* getXMLObjectNode( UniSetTypes::ObjectId ); xmlNode* getXMLObjectNode( UniSetTypes::ObjectId );
UniversalIO::IOTypes getIOType( UniSetTypes::ObjectId ); UniversalIO::IOType getIOType( UniSetTypes::ObjectId );
UniversalIO::IOTypes getIOType( const std::string name ); UniversalIO::IOType getIOType( const std::string name );
// net // net
inline unsigned int getCountOfNet() const { return countOfNet; } inline unsigned int getCountOfNet() const { return countOfNet; }
......
...@@ -47,59 +47,31 @@ class IOController: ...@@ -47,59 +47,31 @@ class IOController:
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("IOController"); } virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("IOController"); }
virtual CORBA::Boolean getState( const IOController_i::SensorInfo& si );
virtual CORBA::Long getValue( const IOController_i::SensorInfo& si ); virtual CORBA::Long getValue( const IOController_i::SensorInfo& si );
// -------------------- !!!!!!!!! --------------------------------- // -------------------- !!!!!!!!! ---------------------------------
// Реализуются конкретным i/o контроллером // Реализуются конкретным i/o контроллером
// Не забывайте писать реализацию этих функций // Не забывайте писать реализацию этих функций
virtual void setState( const IOController_i::SensorInfo& si, CORBA::Boolean state,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual void setValue( const IOController_i::SensorInfo& si, CORBA::Long value, virtual void setValue( const IOController_i::SensorInfo& si, CORBA::Long value,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual void fastSetState( const IOController_i::SensorInfo& si, CORBA::Boolean state,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual void fastSetValue( const IOController_i::SensorInfo& si, CORBA::Long value, virtual void fastSetValue( const IOController_i::SensorInfo& si, CORBA::Long value,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
// ---------------------------------------------------------------- // ----------------------------------------------------------------
/*! \warning Не сделано проверки, зарегистрирован ли такой датчик */
virtual void saveState(const IOController_i::SensorInfo& si, CORBA::Boolean state,
UniversalIO::IOTypes type = UniversalIO::DigitalInput,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual void fastSaveState(const IOController_i::SensorInfo& si, CORBA::Boolean state,
UniversalIO::IOTypes type = UniversalIO::DigitalInput,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
/*! \warning Не сделано проверки, зарегистрирован ли такой датчик */
virtual void saveValue(const IOController_i::SensorInfo& si, CORBA::Long value,
UniversalIO::IOTypes type = UniversalIO::AnalogInput,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual void fastSaveValue(const IOController_i::SensorInfo& si, CORBA::Long value,
UniversalIO::IOTypes type = UniversalIO::AnalogInput,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual void setUndefinedState(const IOController_i::SensorInfo& si, virtual void setUndefinedState(const IOController_i::SensorInfo& si,
CORBA::Boolean undefined, CORBA::Boolean undefined,
UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId sup_id = UniSetTypes::DefaultObjectId );
virtual IOController_i::ASensorInfoSeq* getSensorSeq(const UniSetTypes::IDSeq& lst); virtual IOController_i::SensorInfoSeq* getSensorSeq(const UniSetTypes::IDSeq& lst);
virtual UniSetTypes::IDSeq* setOutputSeq(const IOController_i::OutSeq& lst, UniSetTypes::ObjectId sup_id); virtual UniSetTypes::IDSeq* setOutputSeq(const IOController_i::OutSeq& lst, UniSetTypes::ObjectId sup_id);
// ---------------------------------------------------------------- // ----------------------------------------------------------------
virtual UniversalIO::IOTypes getIOType(const IOController_i::SensorInfo& si); virtual UniversalIO::IOType getIOType(const IOController_i::SensorInfo& si);
virtual IOController_i::ASensorInfoSeq* getAnalogSensorsMap();
virtual IOController_i::DSensorInfoSeq* getDigitalSensorsMap();
virtual IOController_i::DigitalIOInfo getDInfo(const IOController_i::SensorInfo& si);
virtual IOController_i::AnalogIOInfo getAInfo(const IOController_i::SensorInfo& si);
virtual IOController_i::SensorInfoSeq* getSensorsMap();
virtual IOController_i::SensorIOInfo getSensorIOInfo(const IOController_i::SensorInfo& si);
virtual CORBA::Long getRawValue(const IOController_i::SensorInfo& si); virtual CORBA::Long getRawValue(const IOController_i::SensorInfo& si);
virtual void calibrate(const IOController_i::SensorInfo& si, virtual void calibrate(const IOController_i::SensorInfo& si,
...@@ -118,7 +90,7 @@ class IOController: ...@@ -118,7 +90,7 @@ class IOController:
}; };
UniSetTypes::Message::Priority getPriority(const IOController_i::SensorInfo& si, UniSetTypes::Message::Priority getPriority(const IOController_i::SensorInfo& si,
UniversalIO::IOTypes type); UniversalIO::IOType type);
virtual IOController_i::ShortIOInfo getChangedTime(const IOController_i::SensorInfo& si); virtual IOController_i::ShortIOInfo getChangedTime(const IOController_i::SensorInfo& si);
...@@ -141,46 +113,20 @@ class IOController: ...@@ -141,46 +113,20 @@ class IOController:
void setDependsSlot( DependsSlot sl ); void setDependsSlot( DependsSlot sl );
void setBlockDependsSlot( DependsSlot sl ); void setBlockDependsSlot( DependsSlot sl );
// структуры для внутреннего хранения информации по датчикам struct USensorIOInfo:
struct UniDigitalIOInfo: public IOController_i::SensorIOInfo
public IOController_i::DigitalIOInfo
{ {
UniDigitalIOInfo():any(0),dlst_lock(false),block_state(false),db_ignore(false) USensorIOInfo():any(0),dlst_lock(false),block_value(0),db_ignore(false)
{ undefined = false; blocked=false; } { undefined = false; blocked=false; }
virtual ~UniDigitalIOInfo(){} virtual ~USensorIOInfo(){}
UniDigitalIOInfo(IOController_i::DigitalIOInfo& r);
UniDigitalIOInfo(const IOController_i::DigitalIOInfo& r);
UniDigitalIOInfo(IOController_i::DigitalIOInfo* r);
UniDigitalIOInfo& operator=(IOController_i::DigitalIOInfo& r);
UniDigitalIOInfo& operator=(IOController_i::DigitalIOInfo* r);
const UniDigitalIOInfo& operator=(const IOController_i::DigitalIOInfo& r);
void* any; /*!< расширение для возможности хранения своей информации */
DependsList dlst; /*!< список io зависящих от данного */
bool dlst_lock; /*!< флаг блокирующий работу со списком */
bool block_state;
bool db_ignore; /*!< не писать изменения в БД */
UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */ USensorIOInfo(IOController_i::SensorIOInfo& r);
}; USensorIOInfo(IOController_i::SensorIOInfo* r);
USensorIOInfo(const IOController_i::SensorIOInfo& r);
struct UniAnalogIOInfo: USensorIOInfo& operator=(IOController_i::SensorIOInfo& r);
public IOController_i::AnalogIOInfo const USensorIOInfo& operator=(const IOController_i::SensorIOInfo& r);
{ USensorIOInfo& operator=(IOController_i::SensorIOInfo* r);
UniAnalogIOInfo():any(0),dlst_lock(false),block_value(0),db_ignore(false)
{ undefined = false; blocked=false; }
virtual ~UniAnalogIOInfo(){}
UniAnalogIOInfo(IOController_i::AnalogIOInfo& r);
UniAnalogIOInfo(IOController_i::AnalogIOInfo* r);
UniAnalogIOInfo(const IOController_i::AnalogIOInfo& r);
UniAnalogIOInfo& operator=(IOController_i::AnalogIOInfo& r);
const UniAnalogIOInfo& operator=(const IOController_i::AnalogIOInfo& r);
UniAnalogIOInfo& operator=(IOController_i::AnalogIOInfo* r);
void* any; /*!< расширение для возможности хранения своей информации */ void* any; /*!< расширение для возможности хранения своей информации */
DependsList dlst; /*!< список io зависящих от данного (для выставления поля undefined) */ DependsList dlst; /*!< список io зависящих от данного (для выставления поля undefined) */
...@@ -193,56 +139,38 @@ class IOController: ...@@ -193,56 +139,38 @@ class IOController:
// Функции работы со списками датчиков (без изменения 'const') // Функции работы со списками датчиков (без изменения 'const')
typedef std::map<UniSetTypes::KeyType, UniDigitalIOInfo> DIOStateList; typedef std::map<UniSetTypes::KeyType, USensorIOInfo> IOStateList;
typedef std::map<UniSetTypes::KeyType, UniAnalogIOInfo> AIOStateList;
inline DIOStateList::iterator dioBegin(){ return dioList.begin(); } inline IOStateList::iterator ioBegin(){ return ioList.begin(); }
inline DIOStateList::iterator dioEnd(){ return dioList.end(); } inline IOStateList::iterator ioEnd(){ return ioList.end(); }
inline DIOStateList::iterator dfind(UniSetTypes::KeyType k){ return dioList.find(k); } inline IOStateList::iterator find(UniSetTypes::KeyType k){ return ioList.find(k); }
inline int dioCount(){ return dioList.size(); } inline int ioCount(){ return ioList.size(); }
inline AIOStateList::iterator aioBegin(){ return aioList.begin(); }
inline AIOStateList::iterator aioEnd(){ return aioList.end(); }
inline AIOStateList::iterator afind(UniSetTypes::KeyType k){ return aioList.find(k); }
inline int aioCount(){ return aioList.size(); }
struct DependsInfo struct DependsInfo
{ {
DependsInfo( bool init=false ); DependsInfo( bool init=false );
DependsInfo( IOController_i::SensorInfo& si, DependsInfo( IOController_i::SensorInfo& si, IOStateList::iterator& it );
DIOStateList::iterator& dit, AIOStateList::iterator& ait );
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
DIOStateList::iterator dit; IOStateList::iterator it;
AIOStateList::iterator ait;
bool block_invert; /*!< инвертирование логики для блокирования */ bool block_invert; /*!< инвертирование логики для блокирования */
bool init; bool init;
}; };
// доступ к элементам через итератор // доступ к элементам через итератор
virtual void localSaveValue( AIOStateList::iterator& it, const IOController_i::SensorInfo& si, virtual void localSetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id );
virtual void localSaveState( DIOStateList::iterator& it, const IOController_i::SensorInfo& si,
CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id );
virtual void localSetState( DIOStateList::iterator& it, const IOController_i::SensorInfo& si,
CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id );
virtual void localSetValue( AIOStateList::iterator& it, const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id ); CORBA::Long value, UniSetTypes::ObjectId sup_id );
virtual bool localGetState( DIOStateList::iterator& it, const IOController_i::SensorInfo& si ); virtual long localGetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si );
virtual long localGetValue( AIOStateList::iterator& it, const IOController_i::SensorInfo& si );
/*! функция выставления признака неопределённого состояния для аналоговых датчиков /*! функция выставления признака неопределённого состояния для аналоговых датчиков
// для дискретных датчиков необходимости для подобной функции нет. // для дискретных датчиков необходимости для подобной функции нет.
// см. логику выставления в функции localSaveState // см. логику выставления в функции localSaveState
*/ */
virtual void localSetUndefinedState( AIOStateList::iterator& it, bool undefined, virtual void localSetUndefinedState( IOStateList::iterator& it, bool undefined,
const IOController_i::SensorInfo& si ); const IOController_i::SensorInfo& si );
protected: protected:
// переопределяем для добавления вызова регистрации датчиков // переопределяем для добавления вызова регистрации датчиков
virtual bool disactivateObject(); virtual bool disactivateObject();
...@@ -253,47 +181,23 @@ class IOController: ...@@ -253,47 +181,23 @@ class IOController:
/*! удаление из репозитория датчиков за информацию о которых отвечает данный IOController */ /*! удаление из репозитория датчиков за информацию о которых отвечает данный IOController */
virtual void sensorsUnregistration(); virtual void sensorsUnregistration();
/*! регистрация дискретного датчика /*! регистрация датчика
force=true - не проверять на дублирование (оптимизация)
*/
void dsRegistration( const UniDigitalIOInfo&, bool force=false );
/*! регистрация аналогового датчика
force=true - не проверять на дублирование (оптимизация) force=true - не проверять на дублирование (оптимизация)
*/ */
void asRegistration( const UniAnalogIOInfo&, bool force=false ); void ioRegistration( const USensorIOInfo&, bool force=false );
/*! разрегистрация датчика */ /*! разрегистрация датчика */
void sUnRegistration(const IOController_i::SensorInfo& si); void ioUnRegistration( const IOController_i::SensorInfo& si );
UniSetTypes::Message::Priority getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOTypes type); UniSetTypes::Message::Priority getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOType type);
// ------------------------------ // ------------------------------
inline IOController_i::DigitalIOInfo inline IOController_i::SensorIOInfo
DigitalIOInfo(bool s, UniversalIO::IOTypes t, const IOController_i::SensorInfo& si, SensorIOInfo(long v, UniversalIO::IOType t, const IOController_i::SensorInfo& si,
UniSetTypes::Message::Priority p = UniSetTypes::Message::Medium,
bool defval=false )
{
IOController_i::DigitalIOInfo di;
di.si = si;
di.state = s;
di.real_state = s;
di.type = t;
di.priority = p;
di.default_val = defval;
di.blocked = false;
return di;
};
inline IOController_i::AnalogIOInfo
AnalogIOInfo(long v, UniversalIO::IOTypes t, const IOController_i::SensorInfo& si,
UniSetTypes::Message::Priority p = UniSetTypes::Message::Medium, UniSetTypes::Message::Priority p = UniSetTypes::Message::Medium,
long defval=0, IOController_i::CalibrateInfo* ci=0 ) long defval=0, IOController_i::CalibrateInfo* ci=0 )
{ {
IOController_i::AnalogIOInfo ai; IOController_i::SensorIOInfo ai;
ai.si = si; ai.si = si;
ai.type = t; ai.type = t;
ai.value = v; ai.value = v;
...@@ -315,31 +219,23 @@ class IOController: ...@@ -315,31 +219,23 @@ class IOController:
return ai; return ai;
}; };
//! сохранение информации об изменении состояния датчика //! сохранение информации об изменении состояния датчика
virtual void logging(UniSetTypes::SensorMessage& sm); virtual void logging(UniSetTypes::SensorMessage& sm);
//! сохранение состояния всех датчиков в БД //! сохранение состояния всех датчиков в БД
virtual void dumpToDB(); virtual void dumpToDB();
IOController(); IOController();
// доступ к списку c изменением только для своих // доступ к списку c изменением только для своих
DIOStateList::iterator mydioBegin(); IOStateList::iterator myioBegin();
DIOStateList::iterator mydioEnd(); IOStateList::iterator myioEnd();
AIOStateList::iterator myaioBegin(); IOStateList::iterator myiofind(UniSetTypes::KeyType k);
AIOStateList::iterator myaioEnd();
AIOStateList::iterator myafind(UniSetTypes::KeyType k);
DIOStateList::iterator mydfind(UniSetTypes::KeyType k);
// -------------------------- // --------------------------
// ФИЛЬТРОВАНИЕ // ФИЛЬТРОВАНИЕ
// //
typedef sigc::slot<bool,const UniAnalogIOInfo&, CORBA::Long, UniSetTypes::ObjectId> AFilterSlot; typedef sigc::slot<bool,const USensorIOInfo&, CORBA::Long, UniSetTypes::ObjectId> IOFilterSlot;
typedef sigc::slot<bool,const UniDigitalIOInfo&, CORBA::Boolean, UniSetTypes::ObjectId> DFilterSlot; typedef std::list<IOFilterSlot> IOFilterSlotList;
typedef std::list<AFilterSlot> AFilterSlotList;
typedef std::list<DFilterSlot> DFilterSlotList;
/* /*
Фильтрующая функция должна возвращать: Фильтрующая функция должна возвращать:
...@@ -347,21 +243,16 @@ class IOController: ...@@ -347,21 +243,16 @@ class IOController:
FALSE - если значение не подходит (отбрасывается) FALSE - если значение не подходит (отбрасывается)
Пример использования: Пример использования:
addAFilter( sigc::mem_fun(my,&MyClass::my_filter) ); addIOFilter( sigc::mem_fun(my,&MyClass::my_filter) );
*/ */
AFilterSlotList::iterator addAFilter( AFilterSlot sl, bool push_front=false ); IOFilterSlotList::iterator addIOFilter( IOFilterSlot sl, bool push_front=false );
DFilterSlotList::iterator addDFilter( DFilterSlot sl, bool push_front=false ); void eraseIOFilter(IOFilterSlotList::iterator& it);
void eraseAFilter(AFilterSlotList::iterator& it);
void eraseDFilter(DFilterSlotList::iterator& it);
// функии проверки текущего значения // функии проверки текущего значения
bool checkDFilters( const UniDigitalIOInfo& ai, CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id ); bool checkIOFilters( const USensorIOInfo& ai, CORBA::Long& newvalue, UniSetTypes::ObjectId sup_id );
bool checkAFilters( const UniAnalogIOInfo& ai, CORBA::Long& newvalue, UniSetTypes::ObjectId sup_id );
inline bool afiltersEmpty(){ return afilters.empty(); } inline bool iofiltersEmpty(){ return iofilters.empty(); }
inline bool dfiltersEmpty(){ return dfilters.empty(); } inline int iodiltersSize(){ return iofilters.size(); }
inline int afiltersSize(){ return afilters.size(); }
inline int dfiltersSize(){ return dfilters.size(); }
// --------------------------- // ---------------------------
// note: функция вызывается рекурсивно!!! // note: функция вызывается рекурсивно!!!
...@@ -371,16 +262,12 @@ class IOController: ...@@ -371,16 +262,12 @@ class IOController:
private: private:
friend class AskDumper; friend class AskDumper;
DIOStateList dioList; /*!< список с текущим состоянием дискретных входов/выходов */ IOStateList ioList; /*!< список с текущим состоянием аналоговых входов/выходов */
AIOStateList aioList; /*!< список с текущим состоянием аналоговых входов/выходов */ UniSetTypes::uniset_rwmutex ioMutex; /*!< замок для блокирования совместного доступа к ioList */
UniSetTypes::uniset_rwmutex dioMutex; /*!< замок для блокирования совместного доступа к dioList */
UniSetTypes::uniset_rwmutex aioMutex; /*!< замок для блокирования совместного доступа к aioList */
bool isPingDBServer; // флаг связи с DBServer-ом bool isPingDBServer; // флаг связи с DBServer-ом
AFilterSlotList afilters; /*!< список фильтров для аналоговых значений */ IOFilterSlotList iofilters; /*!< список фильтров для аналоговых значений */
DFilterSlotList dfilters; /*!< список фильтров для дискретных значений */
DependsSlot dslot; /*!< undefined depends slot */ DependsSlot dslot; /*!< undefined depends slot */
DependsSlot bslot; /*!< block depends slot */ DependsSlot bslot; /*!< block depends slot */
......
...@@ -119,16 +119,12 @@ class IONotifyController: ...@@ -119,16 +119,12 @@ class IONotifyController:
virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("IONotifyController"); } virtual UniSetTypes::ObjectType getType(){ return UniSetTypes::getObjectType("IONotifyController"); }
virtual void askSensor(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd); virtual void askSensor(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual void askState(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual void askValue(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual void askThreshold(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, virtual void askThreshold(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci,
UniSetTypes::ThresholdId tid, UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Long sensibility, CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Long sensibility,
UniversalIO::UIOCommand cmd ); UniversalIO::UIOCommand cmd );
virtual void askOutput(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual UniSetTypes::IDSeq* askSensorsSeq(const UniSetTypes::IDSeq& lst, virtual UniSetTypes::IDSeq* askSensorsSeq(const UniSetTypes::IDSeq& lst,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd); const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
...@@ -183,7 +179,7 @@ class IONotifyController: ...@@ -183,7 +179,7 @@ class IONotifyController:
/*! итератор в списке датчиков /*! итератор в списке датчиков
(для оптимально-быстрого доступа) (для оптимально-быстрого доступа)
*/ */
IOController::DIOStateList::iterator itSID; IOController::IOStateList::iterator itSID;
/*! инверсная логика */ /*! инверсная логика */
bool inverse; bool inverse;
...@@ -207,31 +203,19 @@ class IONotifyController: ...@@ -207,31 +203,19 @@ class IONotifyController:
{ {
ThresholdsListInfo(){} ThresholdsListInfo(){}
ThresholdsListInfo( IOController_i::SensorInfo& si, ThresholdExtList& list, ThresholdsListInfo( IOController_i::SensorInfo& si, ThresholdExtList& list,
UniversalIO::IOTypes t=UniversalIO::AnalogInput ): UniversalIO::IOType t=UniversalIO::AI ):
si(si),type(t),list(list){} si(si),type(t),list(list){}
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
AIOStateList::iterator ait; IOStateList::iterator ait;
UniversalIO::IOTypes type; UniversalIO::IOType type;
ThresholdExtList list; ThresholdExtList list;
}; };
/*! массив пар датчик->список порогов */ /*! массив пар датчик->список порогов */
typedef std::map<UniSetTypes::KeyType,ThresholdsListInfo> AskThresholdMap; typedef std::map<UniSetTypes::KeyType,ThresholdsListInfo> AskThresholdMap;
virtual void localSaveValue( IOController::AIOStateList::iterator& it, virtual void localSetValue( IOController::IOStateList::iterator& it,
const IOController_i::SensorInfo& si,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id );
virtual void localSaveState( IOController::DIOStateList::iterator& it,
const IOController_i::SensorInfo& si,
CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id );
virtual void localSetState( IOController::DIOStateList::iterator& it,
const IOController_i::SensorInfo& si,
CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id );
virtual void localSetValue( IOController::AIOStateList::iterator& it,
const IOController_i::SensorInfo& si, const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id ); CORBA::Long value, UniSetTypes::ObjectId sup_id );
...@@ -240,15 +224,14 @@ class IONotifyController: ...@@ -240,15 +224,14 @@ class IONotifyController:
virtual bool activateObject(); virtual bool activateObject();
// ФИЛЬТРЫ // ФИЛЬТРЫ
bool myAFilter(const UniAnalogIOInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id); bool myIOFilter(const USensorIOInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id);
bool myDFilter(const UniDigitalIOInfo& ai, CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id);
//! посылка информации об изменении состояния датчика //! посылка информации об изменении состояния датчика
virtual void send(ConsumerList& lst, UniSetTypes::SensorMessage& sm); virtual void send(ConsumerList& lst, UniSetTypes::SensorMessage& sm);
//! проверка срабатывания пороговых датчиков //! проверка срабатывания пороговых датчиков
virtual void checkThreshold( AIOStateList::iterator& li, virtual void checkThreshold( IOStateList::iterator& li,
const IOController_i::SensorInfo& si, bool send=true ); const IOController_i::SensorInfo& si, bool send=true );
//! поиск информации о пороговом датчике //! поиск информации о пороговом датчике
...@@ -298,24 +281,13 @@ class IONotifyController: ...@@ -298,24 +281,13 @@ class IONotifyController:
bool removeThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci); bool removeThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci);
AskMap askDIOList; /*!< список потребителей по дискретным датчикам */ AskMap askIOList; /*!< список потребителей по аналоговым датчикам */
AskMap askAIOList; /*!< список потребителей по аналоговым датчикам */
AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */ AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */
// Выходы /*! замок для блокирования совместного доступа к cписку потребителей датчиков */
AskMap askDOList; /*!< список потребителей по дискретным выходам */ UniSetTypes::uniset_rwmutex askIOMutex;
AskMap askAOList; /*!< список потребителей по аналоговым выходам */
/*! замок для блокирования совместного доступа к cписку потребителей дискретных датчиков */
UniSetTypes::uniset_rwmutex askDMutex;
/*! замок для блокирования совместного доступа к cписку потребителей аналоговых датчиков */
UniSetTypes::uniset_rwmutex askAMutex;
/*! замок для блокирования совместного доступа к cписку потребителей пороговых датчиков */ /*! замок для блокирования совместного доступа к cписку потребителей пороговых датчиков */
UniSetTypes::uniset_rwmutex trshMutex; UniSetTypes::uniset_rwmutex trshMutex;
/*! замок для блокирования совместного доступа к cписку потребителей аналоговых выходов */
UniSetTypes::uniset_rwmutex askAOMutex;
/*! замок для блокирования совместного доступа к cписку потребителей дискретных выходов */
UniSetTypes::uniset_rwmutex askDOMutex;
int maxAttemtps; /*! timeout for consumer */ int maxAttemtps; /*! timeout for consumer */
}; };
......
...@@ -104,7 +104,6 @@ namespace UniSetTypes ...@@ -104,7 +104,6 @@ namespace UniSetTypes
public: public:
ObjectId id; ObjectId id;
bool state;
long value; long value;
bool undefined; bool undefined;
...@@ -112,7 +111,7 @@ namespace UniSetTypes ...@@ -112,7 +111,7 @@ namespace UniSetTypes
long sm_tv_sec; long sm_tv_sec;
long sm_tv_usec; long sm_tv_usec;
UniversalIO::IOTypes sensor_type; UniversalIO::IOType sensor_type;
IOController_i::CalibrateInfo ci; IOController_i::CalibrateInfo ci;
// для пороговых датчиков // для пороговых датчиков
...@@ -120,13 +119,9 @@ namespace UniSetTypes ...@@ -120,13 +119,9 @@ namespace UniSetTypes
UniSetTypes::ThresholdId tid; UniSetTypes::ThresholdId tid;
SensorMessage(); SensorMessage();
SensorMessage(ObjectId id, bool state, Priority priority = Message::Medium, SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci=IOController_i::CalibrateInfo(),
UniversalIO::IOTypes st = UniversalIO::DigitalInput,
ObjectId consumer=UniSetTypes::DefaultObjectId);
SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci,
Priority priority = Message::Medium, Priority priority = Message::Medium,
UniversalIO::IOTypes st = UniversalIO::AnalogInput, UniversalIO::IOType st = UniversalIO::AI,
ObjectId consumer=UniSetTypes::DefaultObjectId); ObjectId consumer=UniSetTypes::DefaultObjectId);
SensorMessage(const VoidMessage *msg); SensorMessage(const VoidMessage *msg);
......
...@@ -43,9 +43,9 @@ class NCRestorer ...@@ -43,9 +43,9 @@ class NCRestorer
virtual ~NCRestorer(); virtual ~NCRestorer();
struct SInfo: struct SInfo:
public IOController::UniAnalogIOInfo public IOController::USensorIOInfo
{ {
SInfo( IOController_i::SensorInfo& si, UniversalIO::IOTypes& t, SInfo( IOController_i::SensorInfo& si, UniversalIO::IOType& t,
UniSetTypes::Message::Message::Priority& p, long& def ) UniSetTypes::Message::Message::Priority& p, long& def )
{ {
this->si = si; this->si = si;
...@@ -56,15 +56,12 @@ class NCRestorer ...@@ -56,15 +56,12 @@ class NCRestorer
SInfo() SInfo()
{ {
this->type = UniversalIO::DigitalInput; this->type = UniversalIO::DI;
this->priority = UniSetTypes::Message::Medium; this->priority = UniSetTypes::Message::Medium;
this->default_val = 0; this->default_val = 0;
} }
SInfo &operator=(IOController_i::DigitalIOInfo& inf); SInfo &operator=(IOController_i::SensorIOInfo& inf);
SInfo &operator=(IOController_i::AnalogIOInfo& inf);
operator IOController::UniDigitalIOInfo();
}; };
virtual void read(IONotifyController* ic, const std::string fn="" )=0; virtual void read(IONotifyController* ic, const std::string fn="" )=0;
...@@ -79,46 +76,25 @@ class NCRestorer ...@@ -79,46 +76,25 @@ class NCRestorer
// добавление списка порогов и заказчиков // добавление списка порогов и заказчиков
static void addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyController::ThresholdExtList& lst, bool force=false ); static void addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyController::ThresholdExtList& lst, bool force=false );
/*! регистрация дискретного датчика*/
static inline void dsRegistration( IONotifyController* ic, IOController::UniDigitalIOInfo& inf, bool force=false )
{
ic->dsRegistration(inf,force);
}
/*! регистрация аналогового датчика*/
static inline void asRegistration( IONotifyController* ic, IOController::UniAnalogIOInfo& inf, bool force=false )
{
ic->asRegistration(inf,force);
}
static inline IOController::AIOStateList::iterator aioFind(IONotifyController* ic, UniSetTypes::KeyType k) static inline void ioRegistration( IONotifyController* ic, IOController::USensorIOInfo& inf, bool force=false )
{ {
return ic->myafind(k); ic->ioRegistration(inf,force);
} }
static inline IOController::DIOStateList::iterator dioFind(IONotifyController* ic, UniSetTypes::KeyType k) static inline IOController::IOStateList::iterator ioFind( IONotifyController* ic, UniSetTypes::KeyType k )
{ {
return ic->mydfind(k); return ic->myiofind(k);
} }
static inline IOController::DIOStateList::iterator dioEnd( IONotifyController* ic ) static inline IOController::IOStateList::iterator ioEnd( IONotifyController* ic )
{ {
return ic->mydioEnd(); return ic->myioEnd();
} }
static inline IOController::AIOStateList::iterator aioEnd( IONotifyController* ic ) static inline IOController::IOStateList::iterator ioBegin( IONotifyController* ic )
{ {
return ic->myaioEnd(); return ic->myioBegin();
} }
static inline IOController::DIOStateList::iterator dioBegin( IONotifyController* ic )
{
return ic->mydioBegin();
}
static inline IOController::AIOStateList::iterator aioBegin( IONotifyController* ic )
{
return ic->myaioBegin();
}
}; };
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
/*! /*!
......
...@@ -48,9 +48,8 @@ class SViewer ...@@ -48,9 +48,8 @@ class SViewer
void readSection(const std::string sec, const std::string secRoot); void readSection(const std::string sec, const std::string secRoot);
void getInfo(UniSetTypes::ObjectId id); void getInfo(UniSetTypes::ObjectId id);
virtual void updateDSensors(IOController_i::DSensorInfoSeq_var& dmap, UniSetTypes::ObjectId oid); virtual void updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetTypes::ObjectId oid );
virtual void updateASensors(IOController_i::ASensorInfoSeq_var& amap, UniSetTypes::ObjectId oid); virtual void updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tlst, UniSetTypes::ObjectId oid );
virtual void updateThresholds(IONotifyController_i::ThresholdsListSeq_var& tlst, UniSetTypes::ObjectId oid);
const std::string csec; const std::string csec;
void printInfo(UniSetTypes::ObjectId id, const std::string& sname, long value, const std::string& owner, void printInfo(UniSetTypes::ObjectId id, const std::string& sname, long value, const std::string& owner,
......
...@@ -45,7 +45,7 @@ class StorageInterface ...@@ -45,7 +45,7 @@ class StorageInterface
virtual long getValue(const IOController_i::SensorInfo& si)=0; virtual long getValue(const IOController_i::SensorInfo& si)=0;
virtual void saveState(const IOController_i::DigitalIOInfo& di,bool st)=0; virtual void saveState(const IOController_i::DigitalIOInfo& di,bool st)=0;
virtual void saveValue(const IOController_i::AnalogIOInfo& ai, long val)=0; virtual void saveValue(const IOController_i::SensorIOInfo& ai, long val)=0;
protected: protected:
...@@ -70,7 +70,7 @@ class STLStorage: ...@@ -70,7 +70,7 @@ class STLStorage:
virtual long getValue(const IOController_i::SensorInfo& si); virtual long getValue(const IOController_i::SensorInfo& si);
virtual void saveState(const IOController_i::DigitalIOInfo& di,bool st); virtual void saveState(const IOController_i::DigitalIOInfo& di,bool st);
virtual void saveValue(const IOController_i::AnalogIOInfo& ai, long val); virtual void saveValue(const IOController_i::SensorIOInfo& ai, long val);
protected: protected:
private: private:
......
...@@ -57,8 +57,8 @@ namespace UniSetTypes ...@@ -57,8 +57,8 @@ namespace UniSetTypes
/*! Функция делает ObjectType из const char * (переводит const-строку в обычную, что плохо, но мы обещаем не писать в неё :) ) */ /*! Функция делает ObjectType из const char * (переводит const-строку в обычную, что плохо, но мы обещаем не писать в неё :) ) */
inline static UniSetTypes::ObjectType getObjectType(const char * name) { const void *t = name; return (UniSetTypes::ObjectType)t; } inline static UniSetTypes::ObjectType getObjectType(const char * name) { const void *t = name; return (UniSetTypes::ObjectType)t; }
UniversalIO::IOTypes getIOType( const std::string s ); UniversalIO::IOType getIOType( const std::string s );
std::ostream& operator<<( std::ostream& os, const UniversalIO::IOTypes t ); std::ostream& operator<<( std::ostream& os, const UniversalIO::IOType t );
std::ostream& operator<<( std::ostream& os, const IOController_i::CalibrateInfo c ); std::ostream& operator<<( std::ostream& os, const IOController_i::CalibrateInfo c );
...@@ -102,27 +102,9 @@ namespace UniSetTypes ...@@ -102,27 +102,9 @@ namespace UniSetTypes
}; };
const ObjectId DefaultObjectId = -1; /*!< Идентификатор объекта по умолчанию */ const ObjectId DefaultObjectId = -1; /*!< Идентификатор объекта по умолчанию */
// typedef long MessageCode;
const MessageCode DefaultMessageCode = 0; /*!< код пустого сообщения */
const ThresholdId DefaultThresholdId = -1; /*!< идентификатор порогов по умолчанию */ const ThresholdId DefaultThresholdId = -1; /*!< идентификатор порогов по умолчанию */
const ThresholdId DefaultTimerId = -1; /*!< идентификатор таймера по умолчанию */ const ThresholdId DefaultTimerId = -1; /*!< идентификатор таймера по умолчанию */
/*! Информация о сообщении */
struct MessageInfo
{
UniSetTypes::MessageCode code; /*!< идентификатор */
std::string text; /*!< текст */
std::string idname; /*!< текстовое название идентификатора */
inline bool operator < ( const MessageInfo& m ) const
{
return (code < m.code);
}
};
/*! Информация об имени объекта */ /*! Информация об имени объекта */
struct ObjectInfo struct ObjectInfo
{ {
...@@ -245,7 +227,6 @@ namespace UniSetTypes ...@@ -245,7 +227,6 @@ namespace UniSetTypes
long setoutregion(long raw, long rawMin, long rawMax); long setoutregion(long raw, long rawMin, long rawMax);
bool file_exist( const std::string filename ); bool file_exist( const std::string filename );
IDList explode( const std::string str, char sep=',' ); IDList explode( const std::string str, char sep=',' );
...@@ -268,6 +249,7 @@ namespace UniSetTypes ...@@ -268,6 +249,7 @@ namespace UniSetTypes
// Проверка xml-узла на соответсвие <...f_prop="f_val">, // Проверка xml-узла на соответсвие <...f_prop="f_val">,
// если не задано f_val, то проверяется, что просто f_prop!="" // если не задано f_val, то проверяется, что просто f_prop!=""
bool check_filter( UniXML_iterator& it, const std::string f_prop, const std::string f_val="" ); bool check_filter( UniXML_iterator& it, const std::string f_prop, const std::string f_val="" );
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
} }
......
...@@ -78,7 +78,7 @@ class UniversalInterface ...@@ -78,7 +78,7 @@ class UniversalInterface
// Группа должна принадлежать одному процессу! // Группа должна принадлежать одному процессу!
//! Получение состояния для списка указанных датчиков //! Получение состояния для списка указанных датчиков
IOController_i::ASensorInfoSeq_var getSensorSeq( UniSetTypes::IDList& lst ); IOController_i::SensorInfoSeq_var getSensorSeq( UniSetTypes::IDList& lst );
// Изменения состояния списка входов/выходов // Изменения состояния списка входов/выходов
// Возвращает список не найденных идентификаторов // Возвращает список не найденных идентификаторов
...@@ -90,40 +90,15 @@ class UniversalInterface ...@@ -90,40 +90,15 @@ class UniversalInterface
// ------------------------------------------------------ // ------------------------------------------------------
//! Получение состояния датчика
//! Получение состояния дискретного датчика
bool getState ( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node ) throw(IO_THROW_EXCEPTIONS);
bool getState ( UniSetTypes::ObjectId id );
//! Получение состояния аналогового датчика
long getValue ( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node )throw(IO_THROW_EXCEPTIONS); long getValue ( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node )throw(IO_THROW_EXCEPTIONS);
long getValue ( UniSetTypes::ObjectId id ); long getValue ( UniSetTypes::ObjectId id );
//! Вывод для дискретного датчика //! Выставление состояния датчика
void setState ( UniSetTypes::ObjectId id, bool state, UniSetTypes::ObjectId node ) throw(IO_THROW_EXCEPTIONS);
void setState ( UniSetTypes::ObjectId id, bool state );
void setState ( IOController_i::SensorInfo& si, bool state, UniSetTypes::ObjectId supplier );
//! Вывод для аналогового датчика
void setValue ( UniSetTypes::ObjectId id, long value, UniSetTypes::ObjectId node ) throw(IO_THROW_EXCEPTIONS); void setValue ( UniSetTypes::ObjectId id, long value, UniSetTypes::ObjectId node ) throw(IO_THROW_EXCEPTIONS);
void setValue ( UniSetTypes::ObjectId id, long value); void setValue ( UniSetTypes::ObjectId id, long value);
void setValue ( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier ); void setValue ( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
//! Запись состояния дискретного датчика на удаленный контроллер
bool saveState ( UniSetTypes::ObjectId id, bool state, UniversalIO::IOTypes type, UniSetTypes::ObjectId node ) throw(IO_THROW_EXCEPTIONS);
bool saveState ( UniSetTypes::ObjectId id, bool state, UniversalIO::IOTypes type );
bool saveState ( IOController_i::SensorInfo& si, bool state, UniversalIO::IOTypes type, UniSetTypes::ObjectId supplier );
//! Запись состояния аналогового датчика на удаленный контроллер
bool saveValue ( UniSetTypes::ObjectId id, long value, UniversalIO::IOTypes type, UniSetTypes::ObjectId node ) throw(IO_THROW_EXCEPTIONS);
bool saveValue ( UniSetTypes::ObjectId id, long value, UniversalIO::IOTypes type );
bool saveValue ( IOController_i::SensorInfo& si, long value, UniversalIO::IOTypes type, UniSetTypes::ObjectId supplier );
// функции не вырабатывающие исключений...
void fastSaveValue( IOController_i::SensorInfo& si, long value, UniversalIO::IOTypes type, UniSetTypes::ObjectId supplier );
void fastSaveState( IOController_i::SensorInfo& si, bool state, UniversalIO::IOTypes type, UniSetTypes::ObjectId supplier );
void fastSetState( IOController_i::SensorInfo& si, bool state, UniSetTypes::ObjectId supplier );
void fastSetValue( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier ); void fastSetValue( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
// установка неопределённого состояния // установка неопределённого состояния
...@@ -141,18 +116,6 @@ class UniversalInterface ...@@ -141,18 +116,6 @@ class UniversalInterface
//! Заказ информации об изменении дискретного датчика //! Заказ информации об изменении дискретного датчика
void askRemoteState( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId node,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId )throw(IO_THROW_EXCEPTIONS);
void askState( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId );
//! Заказ информации об изменении аналогового датчика
void askRemoteValue ( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId node,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId ) throw(IO_THROW_EXCEPTIONS);
void askValue ( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId );
void askThreshold ( UniSetTypes::ObjectId sensorId, UniSetTypes::ThresholdId tid, void askThreshold ( UniSetTypes::ObjectId sensorId, UniSetTypes::ThresholdId tid,
UniversalIO::UIOCommand cmd, UniversalIO::UIOCommand cmd,
CORBA::Long lowLimit=0, CORBA::Long hiLimit=0, CORBA::Long sensibility=0, CORBA::Long lowLimit=0, CORBA::Long hiLimit=0, CORBA::Long sensibility=0,
...@@ -170,33 +133,14 @@ class UniversalInterface ...@@ -170,33 +133,14 @@ class UniversalInterface
void askRemoteSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId node, void askRemoteSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId node,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId )throw(IO_THROW_EXCEPTIONS); UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId )throw(IO_THROW_EXCEPTIONS);
UniversalIO::IOType getIOType(UniSetTypes::ObjectId id, UniSetTypes::ObjectId node) throw(IO_THROW_EXCEPTIONS);
UniversalIO::IOType getIOType(UniSetTypes::ObjectId id);
void askOutput( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId );
void askRemoteOutput( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId node,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId )throw(IO_THROW_EXCEPTIONS);
//! Заказ таймера
void askTimer( UniSetTypes::TimerId timerid, CORBA::Long timeMS, CORBA::Short ticks=-1,
UniSetTypes::Message::Priority piority=UniSetTypes::Message::High,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId) throw(IO_THROW_EXCEPTIONS);
//! Заказ сообщения
void askMessage( UniSetTypes::MessageCode mid, UniversalIO::UIOCommand cmd, bool ack = true,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId ) throw(IO_THROW_EXCEPTIONS);
void askMessageRange( UniSetTypes::MessageCode from, UniSetTypes::MessageCode to,
UniversalIO::UIOCommand cmd, bool ack = true,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId ) throw(IO_THROW_EXCEPTIONS);
UniversalIO::IOTypes getIOType(UniSetTypes::ObjectId id, UniSetTypes::ObjectId node) throw(IO_THROW_EXCEPTIONS);
UniversalIO::IOTypes getIOType(UniSetTypes::ObjectId id);
UniSetTypes::ObjectType getType(UniSetTypes::ObjectId id, UniSetTypes::ObjectId node) throw(IO_THROW_EXCEPTIONS); UniSetTypes::ObjectType getType(UniSetTypes::ObjectId id, UniSetTypes::ObjectId node) throw(IO_THROW_EXCEPTIONS);
UniSetTypes::ObjectType getType(UniSetTypes::ObjectId id); UniSetTypes::ObjectType getType(UniSetTypes::ObjectId id);
// read from xml (only for xml!) // read from xml (only for xml!)
UniversalIO::IOTypes getConfIOType( UniSetTypes::ObjectId id ); UniversalIO::IOType getConfIOType( UniSetTypes::ObjectId id );
IOController_i::ShortIOInfo getChangedTime( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node ); IOController_i::ShortIOInfo getChangedTime( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node );
IOController_i::ShortMapSeq* getSensors( UniSetTypes::ObjectId id, IOController_i::ShortMapSeq* getSensors( UniSetTypes::ObjectId id,
......
#include "UConnector.h" #include "UConnector.h"
#include "ORepHelpers.h" #include "ORepHelpers.h"
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
using namespace std; using namespace std;
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
UConnector::UConnector( UTypes::Params* p, const char* xfile )throw(UException): UConnector::UConnector( UTypes::Params* p, const char* xfile )throw(UException):
conf(0), conf(0),
ui(0), ui(0),
...@@ -42,7 +42,7 @@ xmlfile(xfile) ...@@ -42,7 +42,7 @@ xmlfile(xfile)
throw UException(); throw UException();
} }
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
UConnector::~UConnector() UConnector::~UConnector()
{ {
delete ui; delete ui;
...@@ -54,34 +54,34 @@ const char* UConnector::getConfFileName() ...@@ -54,34 +54,34 @@ const char* UConnector::getConfFileName()
// return xmlfile; // return xmlfile;
if( conf ) if( conf )
return conf->getConfFileName().c_str(); return conf->getConfFileName().c_str();
return ""; return "";
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
long UConnector::getValue( long id, long node )throw(UException) long UConnector::getValue( long id, long node )throw(UException)
{ {
if( !conf || !ui ) if( !conf || !ui )
throw USysError(); throw USysError();
if( node == UTypes::DefaultID ) if( node == UTypes::DefaultID )
node = conf->getLocalNode(); node = conf->getLocalNode();
UniversalIO::IOTypes t = conf->getIOType(id); UniversalIO::IOType t = conf->getIOType(id);
try try
{ {
switch(t) switch(t)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
case UniversalIO::DigitalOutput: case UniversalIO::DO:
return (ui->getState(id,node) ? 1 : 0); return (ui->getState(id,node) ? 1 : 0);
break; break;
case UniversalIO::AnalogInput: case UniversalIO::AI:
case UniversalIO::AnalogOutput: case UniversalIO::AO:
return ui->getValue(id,node); return ui->getValue(id,node);
break; break;
default: default:
{ {
ostringstream e; ostringstream e;
...@@ -102,7 +102,7 @@ long UConnector::getValue( long id, long node )throw(UException) ...@@ -102,7 +102,7 @@ long UConnector::getValue( long id, long node )throw(UException)
{ {
throw UException("(getValue): catch..."); throw UException("(getValue): catch...");
} }
throw UException("(getValue): unknown error"); throw UException("(getValue): unknown error");
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -110,32 +110,32 @@ void UConnector::setValue( long id, long val, long node )throw(UException) ...@@ -110,32 +110,32 @@ void UConnector::setValue( long id, long val, long node )throw(UException)
{ {
if( !conf || !ui ) if( !conf || !ui )
throw USysError(); throw USysError();
if( node == UTypes::DefaultID ) if( node == UTypes::DefaultID )
node = conf->getLocalNode(); node = conf->getLocalNode();
UniversalIO::IOTypes t = conf->getIOType(id); UniversalIO::IOType t = conf->getIOType(id);
try try
{ {
switch(t) switch(t)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
ui->saveState(id,val,t,node); ui->saveState(id,val,t,node);
break; break;
case UniversalIO::DigitalOutput: case UniversalIO::DO:
ui->setState(id,val,node); ui->setState(id,val,node);
break; break;
case UniversalIO::AnalogInput: case UniversalIO::AI:
ui->saveValue(id,val,t,node); ui->saveValue(id,val,t,node);
break; break;
case UniversalIO::AnalogOutput: case UniversalIO::AO:
ui->setValue(id,val,node); ui->setValue(id,val,node);
break; break;
default: default:
{ {
ostringstream e; ostringstream e;
...@@ -162,7 +162,7 @@ long UConnector::getSensorID( const char* name ) ...@@ -162,7 +162,7 @@ long UConnector::getSensorID( const char* name )
{ {
if( conf ) if( conf )
return conf->getSensorID(name); return conf->getSensorID(name);
return UTypes::DefaultID; return UTypes::DefaultID;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -170,7 +170,7 @@ long UConnector::getNodeID( const char* name ) ...@@ -170,7 +170,7 @@ long UConnector::getNodeID( const char* name )
{ {
if( conf ) if( conf )
return conf->getNodeID(name); return conf->getNodeID(name);
return UTypes::DefaultID; return UTypes::DefaultID;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -178,7 +178,7 @@ const char* UConnector::getName( long id ) ...@@ -178,7 +178,7 @@ const char* UConnector::getName( long id )
{ {
if( conf ) if( conf )
return conf->oind->getMapName(id).c_str(); return conf->oind->getMapName(id).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -186,7 +186,7 @@ const char* UConnector::getShortName( long id ) ...@@ -186,7 +186,7 @@ const char* UConnector::getShortName( long id )
{ {
if( conf ) if( conf )
return ORepHelpers::getShortName(conf->oind->getMapName(id)).c_str(); return ORepHelpers::getShortName(conf->oind->getMapName(id)).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -194,7 +194,7 @@ const char* UConnector::getTextName( long id ) ...@@ -194,7 +194,7 @@ const char* UConnector::getTextName( long id )
{ {
if( conf ) if( conf )
return conf->oind->getTextName(id).c_str(); return conf->oind->getTextName(id).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -38,22 +38,22 @@ long UInterface::getValue( long id )throw(UException) ...@@ -38,22 +38,22 @@ long UInterface::getValue( long id )throw(UException)
{ {
if( !UniSetTypes::conf || !ui ) if( !UniSetTypes::conf || !ui )
throw USysError(); throw USysError();
UniversalIO::IOTypes t = UniSetTypes::conf->getIOType(id); UniversalIO::IOType t = UniSetTypes::conf->getIOType(id);
try try
{ {
switch(t) switch(t)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
case UniversalIO::DigitalOutput: case UniversalIO::DO:
return (ui->getState(id) ? 1 : 0); return (ui->getState(id) ? 1 : 0);
break; break;
case UniversalIO::AnalogInput: case UniversalIO::AI:
case UniversalIO::AnalogOutput: case UniversalIO::AO:
return ui->getValue(id); return ui->getValue(id);
break; break;
default: default:
{ {
ostringstream e; ostringstream e;
...@@ -74,7 +74,7 @@ long UInterface::getValue( long id )throw(UException) ...@@ -74,7 +74,7 @@ long UInterface::getValue( long id )throw(UException)
{ {
throw UException("(getValue): catch..."); throw UException("(getValue): catch...");
} }
throw UException("(getValue): unknown error"); throw UException("(getValue): unknown error");
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -82,28 +82,28 @@ void UInterface::setValue( long id, long val )throw(UException) ...@@ -82,28 +82,28 @@ void UInterface::setValue( long id, long val )throw(UException)
{ {
if( !UniSetTypes::conf || !ui ) if( !UniSetTypes::conf || !ui )
throw USysError(); throw USysError();
UniversalIO::IOTypes t = UniSetTypes::conf->getIOType(id); UniversalIO::IOType t = UniSetTypes::conf->getIOType(id);
try try
{ {
switch(t) switch(t)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
ui->saveState(id,val,t); ui->saveState(id,val,t);
break; break;
case UniversalIO::DigitalOutput: case UniversalIO::DO:
ui->setState(id,val); ui->setState(id,val);
break; break;
case UniversalIO::AnalogInput: case UniversalIO::AI:
ui->saveValue(id,val,t); ui->saveValue(id,val,t);
break; break;
case UniversalIO::AnalogOutput: case UniversalIO::AO:
ui->setValue(id,val); ui->setValue(id,val);
break; break;
default: default:
{ {
ostringstream e; ostringstream e;
...@@ -130,7 +130,7 @@ long UInterface::getSensorID( const char* name ) ...@@ -130,7 +130,7 @@ long UInterface::getSensorID( const char* name )
{ {
if( UniSetTypes::conf ) if( UniSetTypes::conf )
return UniSetTypes::conf->getSensorID(name); return UniSetTypes::conf->getSensorID(name);
return -1; return -1;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -138,7 +138,7 @@ const char* UInterface::getName( long id ) ...@@ -138,7 +138,7 @@ const char* UInterface::getName( long id )
{ {
if( UniSetTypes::conf ) if( UniSetTypes::conf )
return UniSetTypes::conf->oind->getMapName(id).c_str(); return UniSetTypes::conf->oind->getMapName(id).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -146,7 +146,7 @@ const char* UInterface::getShortName( long id ) ...@@ -146,7 +146,7 @@ const char* UInterface::getShortName( long id )
{ {
if( UniSetTypes::conf ) if( UniSetTypes::conf )
return ORepHelpers::getShortName(UniSetTypes::conf->oind->getMapName(id)).c_str(); return ORepHelpers::getShortName(UniSetTypes::conf->oind->getMapName(id)).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -154,7 +154,7 @@ const char* UInterface::getTextName( long id ) ...@@ -154,7 +154,7 @@ const char* UInterface::getTextName( long id )
{ {
if( UniSetTypes::conf ) if( UniSetTypes::conf )
return UniSetTypes::conf->oind->getTextName(id).c_str(); return UniSetTypes::conf->oind->getTextName(id).c_str();
return ""; return "";
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
...@@ -162,7 +162,7 @@ const char* UInterface::getConfFileName() ...@@ -162,7 +162,7 @@ const char* UInterface::getConfFileName()
{ {
if( UniSetTypes::conf ) if( UniSetTypes::conf )
return UniSetTypes::conf->getConfFileName().c_str(); return UniSetTypes::conf->getConfFileName().c_str();
return ""; return "";
} }
......
...@@ -226,8 +226,8 @@ long UModbus::data2value( VTypes::VType vtype, ModbusRTU::ModbusData* data ) ...@@ -226,8 +226,8 @@ long UModbus::data2value( VTypes::VType vtype, ModbusRTU::ModbusData* data )
if( p->rnum <= 1 ) if( p->rnum <= 1 )
{ {
if( p->stype == UniversalIO::DigitalInput || if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DigitalOutput ) p->stype == UniversalIO::DO )
{ {
IOBase::processingAsDI( p, data[0], shm, force ); IOBase::processingAsDI( p, data[0], shm, force );
} }
......
...@@ -109,110 +109,13 @@ void UniversalInterface::initBackId( UniSetTypes::ObjectId backid ) ...@@ -109,110 +109,13 @@ void UniversalInterface::initBackId( UniSetTypes::ObjectId backid )
myid = backid; myid = backid;
} }
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
/*
* \param id - идентификатор датчика
*═\return текущее состояние датчика
* \exception IOBadParam - генерируется если указано неправильное имя датчика или секции
* \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ
*/
bool UniversalInterface::getState(ObjectId name, ObjectId node)
throw(IO_THROW_EXCEPTIONS)
{
if ( name == DefaultObjectId )
throw ORepFailed("UI(getState): error: getState for id=UniSetTypes::DefaultObjectId ?!");
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(name, node);
}
catch( NameNotFound ){}
for( unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( name, node );
IOController_i_var iom = IOController_i::_narrow(oref);
IOController_i::SensorInfo_var si;
si->id = name;
si->node = node;
return iom->getState(si);
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(IOController_i::NameNotFound &ex)
{
rcache.erase(name, node);
throw UniSetTypes::NameNotFound("UI(getState): "+string(ex.err));
}
catch(IOController_i::IOBadParam& ex)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam("UI(getState): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(getState): ORepFailed ",name,node));
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(getState): method no implemented",name,node));
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(getState): object not exist",name,node));
}
catch(CORBA::COMM_FAILURE& ex)
{
// ошибка системы коммуникации
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(getState): CORBA::SystemException" << endl;
}
rcache.erase(name, node);
throw UniSetTypes::TimeOut(set_err("UI(getState): TimeOut ",name,node));
}
bool UniversalInterface::getState( ObjectId name )
{
return getState( name, uconf->getLocalNode() );
}
// ---------------------------------------------------------------------
/*!
* \param name - полное имя аналогового датчика
* \sa UniversalInterface::getValue( ObjectId id )
*/
/*
long UniversalInterface::getValue(const string name, const string node="NameService")throw(TimeOut,IOBadParam)
{
return getValue(oind->getIdByName(name.c_str()));
}
*/
/*! /*!
* \param id - идентификатор датчика * \param id - идентификатор датчика
*═\return текущее значение датчика *═\return текущее значение датчика
* \exception IOBadParam - генерируется если указано неправильное имя датчика или секции * \exception IOBadParam - генерируется если указано неправильное имя датчика или секции
* \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ * \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ
*/ */
long UniversalInterface::getValue(ObjectId name, ObjectId node) long UniversalInterface::getValue( ObjectId name, ObjectId node )
throw(IO_THROW_EXCEPTIONS) throw(IO_THROW_EXCEPTIONS)
{ {
if ( name == DefaultObjectId ) if ( name == DefaultObjectId )
...@@ -294,188 +197,6 @@ long UniversalInterface::getValue( ObjectId name ) ...@@ -294,188 +197,6 @@ long UniversalInterface::getValue( ObjectId name )
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
* \param state - состояние в которое его необходимо перевести
*═\return текущее значение датчика
* \exception IOBadParam - генерируется если указано неправильное имя вывода или секции
*/
void UniversalInterface::setState(ObjectId name, bool state, ObjectId node)
throw(IO_THROW_EXCEPTIONS)
{
if ( name == DefaultObjectId )
throw ORepFailed("UI(setState): error id=UniSetTypes::DefaultObjectId");
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(name, node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( name, node );
IOController_i_var iom = IOController_i::_narrow(oref);
IOController_i::SensorInfo_var si;
si->id = name;
si->node = node;
iom->setState(si, state, myid);
return;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound &ex)
{
rcache.erase(name, node);
throw UniSetTypes::NameNotFound( set_err("UI(setState):"+string(ex.err),name,node) );
}
catch(IOController_i::IOBadParam& ex)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam("UI(setState): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(name, node);
// не смогли получить ссылку на объект
throw UniSetTypes::IOBadParam(set_err("UI(setState): ORepFailed",name,node));
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(setState): method no implement",name,node));
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(setState): object not exist",name,node));
}
catch(CORBA::COMM_FAILURE)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(setState): CORBA::COMM_FAILURE " << endl;
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(setState): CORBA::SystemException" << endl;
}
rcache.erase(name, node);
throw UniSetTypes::TimeOut(set_err("UI(setState): TimeOut",name,node));
}
void UniversalInterface::setState(ObjectId name, bool state)
{
setState(name, state, uconf->getLocalNode());
}
void UniversalInterface::setState( IOController_i::SensorInfo& si, bool state, UniSetTypes::ObjectId supplier )
{
ObjectId old = myid;
try
{
myid = supplier;
setState(si.id,state,si.node);
}
catch(...)
{
myid = old;
throw;
}
myid = old;
}
// ------------------------------------------------------------------------------------------------------------
// функция не вырабатывает исключений!
void UniversalInterface::fastSetState( IOController_i::SensorInfo& si, bool state, UniSetTypes::ObjectId sup_id )
{
if( si.id == DefaultObjectId )
{
unideb[Debug::WARN] << "UI(fastSetState): ID=UniSetTypes::DefaultObjectId" << endl;
return;
}
if( sup_id == DefaultObjectId )
sup_id = myid;
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(si.id, si.node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( si.id, si.node );
IOController_i_var iom = IOController_i::_narrow(oref);
iom->fastSetState(si, state, sup_id );
return;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound &ex)
{
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << set_err("UI(fastSetState):"+string(ex.err),si.id,si.node) << endl;
}
catch(IOController_i::IOBadParam& ex)
{
rcache.erase(si.id, si.node);
throw UniSetTypes::IOBadParam("UI(fastSetState): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(si.id, si.node);
// не смогли получить ссылку на объект
unideb[Debug::WARN] << set_err("UI(fastSetState): resolve failed",si.id,si.node) << endl;
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << set_err("UI(fastSetState): method no implement",si.id,si.node) << endl;
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << set_err("UI(fastSetState): object not exist",si.id,si.node) << endl;
}
catch(CORBA::COMM_FAILURE){}
catch(CORBA::SystemException& ex){}
catch(...){}
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << set_err("UI(fastSetState): Timeout",si.id,si.node) << endl;
}
// ------------------------------------------------------------------------------------------------------------
void UniversalInterface::setUndefinedState( IOController_i::SensorInfo& si, bool undefined, void UniversalInterface::setUndefinedState( IOController_i::SensorInfo& si, bool undefined,
UniSetTypes::ObjectId sup_id ) UniSetTypes::ObjectId sup_id )
{ {
...@@ -740,35 +461,22 @@ void UniversalInterface::fastSetValue( IOController_i::SensorInfo& si, long valu ...@@ -740,35 +461,22 @@ void UniversalInterface::fastSetValue( IOController_i::SensorInfo& si, long valu
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
/*! /*!
* \param name - имя дискретного датчика
* \param fromName - имя объекта(заказчика) кому присылать сообщение об изменении
* \sa UniversalInterface::askState( ObjectId id, ObjectId backid, UniversalIO::UIOCommand cmd)
*/
/*
void UniversalInterface::askState(const string name, const string fromName, UniversalIO::UIOCommand cmd)
throw(TimeOut,IOBadParam)
{
askState( oind->getIdByName(name.c_str()), oind->getIdByName(fromName.c_str()), cmd);
}
*/
/*!
* \param sensor - идентификатор датчика * \param sensor - идентификатор датчика
* \param node - идентификатор узла на котором заказывается датчик * \param node - идентификатор узла на котором заказывается датчик
* \param cmd - команда см. \ref UniversalIO::UIOCommand * \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика) * \param backid - обратный адрес (идентификатор заказчика)
*/ */
void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand cmd, ObjectId node, void UniversalInterface::askRemoteSensor( ObjectId name, UniversalIO::UIOCommand cmd, ObjectId node,
UniSetTypes::ObjectId backid ) throw(IO_THROW_EXCEPTIONS) UniSetTypes::ObjectId backid ) throw(IO_THROW_EXCEPTIONS)
{ {
if( backid==UniSetTypes::DefaultObjectId ) if( backid==UniSetTypes::DefaultObjectId )
backid = myid; backid = myid;
if( backid==UniSetTypes::DefaultObjectId ) if( backid==UniSetTypes::DefaultObjectId )
throw UniSetTypes::IOBadParam("UI(askRemoteState): Unknown back ID"); throw UniSetTypes::IOBadParam("UI(askRemoteSensor): unknown back ID");
if ( name == DefaultObjectId ) if ( name == DefaultObjectId )
throw ORepFailed("UI(askRemoteState): id=UniSetTypes::DefaultObjectId"); throw ORepFailed("UI(askRemoteSensor): id=UniSetTypes::DefaultObjectId");
try try
{ {
...@@ -794,7 +502,7 @@ void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand ...@@ -794,7 +502,7 @@ void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand
ConsumerInfo_var ci; ConsumerInfo_var ci;
ci->id = backid; ci->id = backid;
ci->node = uconf->getLocalNode(); ci->node = uconf->getLocalNode();
inc->askState(si, ci, cmd ); inc->askSensor(si, ci, cmd );
return; return;
} }
catch(CORBA::TRANSIENT){} catch(CORBA::TRANSIENT){}
...@@ -808,371 +516,55 @@ void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand ...@@ -808,371 +516,55 @@ void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand
catch(IOController_i::NameNotFound &ex) catch(IOController_i::NameNotFound &ex)
{ {
rcache.erase(name, node); rcache.erase(name, node);
throw UniSetTypes::NameNotFound("UI(askState): "+string(ex.err) ); throw UniSetTypes::NameNotFound("UI(askSensor): "+string(ex.err) );
} }
catch(IOController_i::IOBadParam& ex) catch(IOController_i::IOBadParam& ex)
{ {
rcache.erase(name, node); rcache.erase(name, node);
throw UniSetTypes::IOBadParam("UI(askState): "+string(ex.err)); throw UniSetTypes::IOBadParam("UI(askSensor): "+string(ex.err));
} }
catch(ORepFailed) catch(ORepFailed)
{ {
rcache.erase(name, node); rcache.erase(name, node);
// не смогли получить ссылку на объект // не смогли получить ссылку на объект
throw UniSetTypes::IOBadParam(set_err("UI(askState): resolve failed ",name,node)); throw UniSetTypes::IOBadParam(set_err("UI(askSensor): resolve failed ",name,node));
} }
catch(CORBA::NO_IMPLEMENT) catch(CORBA::NO_IMPLEMENT)
{ {
rcache.erase(name, node); rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(askState): method no implement",name,node)); throw UniSetTypes::IOBadParam(set_err("UI(askSensor): method no implement",name,node));
} }
catch(CORBA::OBJECT_NOT_EXIST) catch(CORBA::OBJECT_NOT_EXIST)
{ {
rcache.erase(name, node); rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(askState): object not exist",name,node)); throw UniSetTypes::IOBadParam(set_err("UI(askSensor): object not exist",name,node));
} }
catch(CORBA::COMM_FAILURE& ex) catch(CORBA::COMM_FAILURE& ex)
{ {
// ошибка системы коммуникации // ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askState): ошибка системы коммуникации" << endl; // unideb[Debug::WARN] << "UI(askSensor): ошибка системы коммуникации" << endl;
} }
catch(CORBA::SystemException& ex) catch(CORBA::SystemException& ex)
{ {
// ошибка системы коммуникации // ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askState): CORBA::SystemException" << endl; // unideb[Debug::WARN] << "UI(askSensor): CORBA::SystemException" << endl;
} }
rcache.erase(name, node); rcache.erase(name, node);
throw UniSetTypes::TimeOut(set_err("UI(askState): Timeout",name,node)); throw UniSetTypes::TimeOut(set_err("UI(askSensor): Timeout",name,node));
} }
void UniversalInterface::askState( ObjectId name, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId backid ) void UniversalInterface::askSensor( ObjectId name, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId backid )
{ {
askRemoteState(name, cmd, uconf->getLocalNode(), backid); askRemoteSensor(name, cmd, uconf->getLocalNode(), backid);
} }
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
/*! /*!
* \param sensor - идентификатор датчика * \param name - идентификатор объекта
* \param node - идентификатор узла на котором заказывается датчик * \param node - идентификатор узла
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика)
*/ */
void UniversalInterface::askRemoteSensor( ObjectId name, UniversalIO::UIOCommand cmd, ObjectId node, IOType UniversalInterface::getIOType(ObjectId name, ObjectId node)
UniSetTypes::ObjectId backid ) throw(IO_THROW_EXCEPTIONS)
{
if( backid==UniSetTypes::DefaultObjectId )
backid = myid;
if( backid==UniSetTypes::DefaultObjectId )
throw UniSetTypes::IOBadParam("UI(askRemoteSensor): unknown back ID");
if ( name == DefaultObjectId )
throw ORepFailed("UI(askRemoteSensor): id=UniSetTypes::DefaultObjectId");
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(name, node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( name, node );
IONotifyController_i_var inc = IONotifyController_i::_narrow(oref);
IOController_i::SensorInfo_var si;
si->id = name;
si->node = node;
ConsumerInfo_var ci;
ci->id = backid;
ci->node = uconf->getLocalNode();
inc->askSensor(si, ci, cmd );
return;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound &ex)
{
rcache.erase(name, node);
throw UniSetTypes::NameNotFound("UI(askSensor): "+string(ex.err) );
}
catch(IOController_i::IOBadParam& ex)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam("UI(askSensor): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(name, node);
// не смогли получить ссылку на объект
throw UniSetTypes::IOBadParam(set_err("UI(askSensor): resolve failed ",name,node));
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(askSensor): method no implement",name,node));
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(askSensor): object not exist",name,node));
}
catch(CORBA::COMM_FAILURE& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askSensor): ошибка системы коммуникации" << endl;
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askSensor): CORBA::SystemException" << endl;
}
rcache.erase(name, node);
throw UniSetTypes::TimeOut(set_err("UI(askSensor): Timeout",name,node));
}
void UniversalInterface::askSensor( ObjectId name, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId backid )
{
askRemoteSensor(name, cmd, uconf->getLocalNode(), backid);
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param name - имя аналогового датчика
* \param fromName - имя объекта(заказчика) кому присылать сообщение об изменении
* \sa UniversalInterface::askValue( ObjectId id, ObjectId backid, UniversalIO::UIOCommand cmd)
*/
/*
void UniversalInterface::askValue(const string name, const string fromName, UniversalIO::UIOCommand cmd)
throw(TimeOut,IOBadParam)
{
askValue(oind->getIdByName(name.c_str()),oind->getIdByName(fromName.c_str()), cmd);
}
*/
/*!
* \param id - идентификатор датчика
* \param backid - идентификатор заказчика, кому присылать сообщение об изменении
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика)
* \exception IOBadParam - генерируется если указано неправильное имя вывода или секции
* \exception TimeOut - генерируется если нет связи объектом отвечающим за инф-ию об этом датчике
*/
void UniversalInterface::askRemoteValue( ObjectId sensid, UniversalIO::UIOCommand cmd, ObjectId node,
UniSetTypes::ObjectId backid) throw(IO_THROW_EXCEPTIONS)
{
if( backid==UniSetTypes::DefaultObjectId )
backid = myid;
if( backid==UniSetTypes::DefaultObjectId )
throw UniSetTypes::IOBadParam("UI(askRemoteValue): unknown back ID");
if ( sensid == DefaultObjectId )
throw ORepFailed("UI(askRemoteValue): id=UniSetTypes::DefaultObjectId");
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(sensid, node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( sensid, node );
IONotifyController_i_var inc = IONotifyController_i::_narrow(oref);
IOController_i::SensorInfo_var si;
si->id = sensid;
si->node = node;
ConsumerInfo_var ci;
ci->id = backid;
ci->node = uconf->getLocalNode();
inc->askValue(si,ci, cmd);
return;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound& ex)
{
rcache.erase(sensid, node);
throw UniSetTypes::NameNotFound("UI(askValue): "+string(ex.err));
}
catch(IOController_i::IOBadParam& ex)
{
rcache.erase(sensid, node);
throw UniSetTypes::IOBadParam("UI(askValue): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(sensid, node);
throw UniSetTypes::IOBadParam(set_err("UI(askValue): resolve failed ",sensid,node));
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(sensid, node);
throw UniSetTypes::IOBadParam(set_err("UI(askValue): method no implement",sensid,node));
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(sensid, node);
throw UniSetTypes::IOBadParam(set_err("UI(askValue): object not exist",sensid,node));
}
catch(CORBA::COMM_FAILURE& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askValue): ошибка системы коммуникации" << endl;
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askValue): CORBA::SystemException" << endl;
}
rcache.erase(sensid, node);
throw UniSetTypes::TimeOut(set_err("UI(askValue): Timeout",sensid,node));
}
void UniversalInterface::askValue( ObjectId name, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId backid )
{
askRemoteValue(name, cmd, uconf->getLocalNode(), backid);
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
* \param backid - идентификатор заказчика, кому присылать сообщение об изменении
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика)
* \exception IOBadParam - генерируется если указано неправильное имя вывода или секции
* \exception TimeOut - генерируется если нет связи объектом отвечающим за инф-ию об этом датчике
*/
void UniversalInterface::askRemoteOutput( ObjectId sensid, UniversalIO::UIOCommand cmd, ObjectId node,
UniSetTypes::ObjectId backid) throw(IO_THROW_EXCEPTIONS)
{
if( backid == UniSetTypes::DefaultObjectId )
backid = myid;
if( backid==UniSetTypes::DefaultObjectId )
throw UniSetTypes::IOBadParam("UI(askRemoteOutput): unknown back ID");
if ( sensid == DefaultObjectId )
throw ORepFailed("UI(askRemoteOutput): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId");
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(sensid, node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( sensid, node );
IONotifyController_i_var inc = IONotifyController_i::_narrow(oref);
IOController_i::SensorInfo_var si;
si->id = sensid;
si->node = node;
ConsumerInfo_var ci;
ci->id = backid;
ci->node = uconf->getLocalNode();
inc->askOutput(si,ci, cmd);
return;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound& ex)
{
rcache.erase(sensid, node);
throw UniSetTypes::NameNotFound("UI(askOutput): "+string(ex.err));
}
catch(IOController_i::IOBadParam& ex)
{
rcache.erase(sensid, node);
throw UniSetTypes::IOBadParam("UI(askOutput): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(sensid, node);
throw UniSetTypes::IOBadParam(set_err("UI(askOutput): resolve failed ",sensid,node));
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(sensid, node);
throw UniSetTypes::IOBadParam(set_err("UI(askOutput): method no implement",sensid,node));
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(sensid, node);
throw UniSetTypes::IOBadParam(set_err("UI(askOutput): object not exist",sensid,node));
}
catch(CORBA::COMM_FAILURE& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askOutput): ошибка системы коммуникации" << endl;
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askOutput): CORBA::SystemException" << endl;
}
rcache.erase(sensid, node);
throw UniSetTypes::TimeOut(set_err("UI(askOutput): Timeout",sensid,node));
}
// ------------------------------------------------------------------------------------------------------------
void UniversalInterface::askOutput( ObjectId name, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId backid )
{
askRemoteOutput(name, cmd, uconf->getLocalNode(), backid);
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param name - идентификатор объекта
* \param node - идентификатор узла
*/
IOTypes UniversalInterface::getIOType(ObjectId name, ObjectId node)
throw(IO_THROW_EXCEPTIONS) throw(IO_THROW_EXCEPTIONS)
{ {
if ( name == DefaultObjectId ) if ( name == DefaultObjectId )
...@@ -1248,7 +640,7 @@ IOTypes UniversalInterface::getIOType(ObjectId name, ObjectId node) ...@@ -1248,7 +640,7 @@ IOTypes UniversalInterface::getIOType(ObjectId name, ObjectId node)
throw UniSetTypes::TimeOut(set_err("UI(getIOType): Timeout",name, node)); throw UniSetTypes::TimeOut(set_err("UI(getIOType): Timeout",name, node));
} }
IOTypes UniversalInterface::getIOType(ObjectId name) IOType UniversalInterface::getIOType(ObjectId name)
{ {
return getIOType(name, uconf->getLocalNode() ); return getIOType(name, uconf->getLocalNode() );
} }
...@@ -1626,383 +1018,6 @@ void UniversalInterface::send( ObjectId name, TransportMessage& msg ) ...@@ -1626,383 +1018,6 @@ void UniversalInterface::send( ObjectId name, TransportMessage& msg )
} }
// ------------------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
* \param node - идентификатор узла
* \param type - тип датчика
* \param value - значение которое необходимо установить
*/
bool UniversalInterface::saveValue(ObjectId name, long value, IOTypes type, ObjectId node)
throw(IO_THROW_EXCEPTIONS)
{
if ( name == DefaultObjectId )
throw ORepFailed("UI(saveValue): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId");
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(name, node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( name, node );
IOController_i_var iom = IOController_i::_narrow(oref);
IOController_i::SensorInfo_var si;
si->id = name;
si->node = node;
iom->saveValue(si, value, type, myid);
return true;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound &ex)
{
rcache.erase(name, node);
throw UniSetTypes::NameNotFound("UI(saveValue): "+string(ex.err));
}
catch(IOController_i::IOBadParam& ex)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam("UI(saveValue): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(saveValue): resolve failed ",name,node));
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(saveValue): method no implement",name,node));
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(saveValue): object not exist",name,node));
}
catch(CORBA::COMM_FAILURE& ex)
{
// ошибка системы коммуникации
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveValue): CORBA::SystemException" << endl;
}
rcache.erase(name, node);
throw UniSetTypes::TimeOut(set_err("UI(saveValue): Timeout",name, node));
}
bool UniversalInterface::saveValue(ObjectId name, long value, IOTypes type)
{
return saveValue(name, value, type, uconf->getLocalNode() );
}
// ------------------------------------------------------------------------------------------------------------
bool UniversalInterface::saveValue( IOController_i::SensorInfo& si, long value, UniversalIO::IOTypes type,
UniSetTypes::ObjectId supplier )
{
ObjectId old = myid;
bool res(false);
try
{
myid = supplier;
res = saveValue(si.id,value,type,si.node);
}
catch(...)
{
myid = old;
throw;
}
myid = old;
return res;
}
// ------------------------------------------------------------------------------------------------------------
void UniversalInterface::fastSaveValue( IOController_i::SensorInfo& si, long value, UniversalIO::IOTypes type,
UniSetTypes::ObjectId supplier )
{
if ( si.id == DefaultObjectId )
{
unideb[Debug::WARN] << "UI(fastSaveValue): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId" << endl;
return;
}
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(si.id, si.node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( si.id, si.node );
IOController_i_var iom = IOController_i::_narrow(oref);
iom->fastSaveValue(si, value, type,supplier);
return;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound &ex)
{
rcache.erase(si.id,si.node);
unideb[Debug::WARN] << "UI(saveValue): " << ex.err << endl;
}
catch(IOController_i::IOBadParam& ex)
{
rcache.erase(si.id, si.node);
throw UniSetTypes::IOBadParam("UI(saveValue): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(si.id,si.node);
unideb[Debug::WARN] << set_err("UI(fastSaveValue): resolve failed ",si.id,si.node) << endl;
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(si.id,si.node);
unideb[Debug::WARN] << set_err("UI(fastSaveValue): method no implement",si.id,si.node) << endl;
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(si.id,si.node);
unideb[Debug::WARN] << set_err("UI(fastSaveValue): object not exist",si.id,si.node) << endl;
}
catch(CORBA::COMM_FAILURE& ex)
{
// ошибка системы коммуникации
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveValue): CORBA::SystemException" << endl;
}
catch(...){}
rcache.erase(si.id,si.node);
unideb[Debug::WARN] << set_err("UI(saveValue): Timeout",si.id, si.node) << endl;
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
* \param state - состояние в которое его необходимо перевести
* \param type - тип датчика
* \param node - идентификатор узла
*/
bool UniversalInterface::saveState(ObjectId name, bool state, IOTypes type, ObjectId node)
throw(IO_THROW_EXCEPTIONS)
{
if ( name == DefaultObjectId )
throw ORepFailed("UI(saveState): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId");
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(name, node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( name, node );
IOController_i_var iom = IOController_i::_narrow(oref);
IOController_i::SensorInfo_var si;
si->id = name;
si->node = node;
iom->saveState(si, state, type, myid);
return true;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound &ex)
{
rcache.erase(name, node);
throw UniSetTypes::NameNotFound("UI(saveState): "+string(ex.err));
}
catch(IOController_i::IOBadParam& ex )
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam("UI(saveState): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(saveState): resolve failed ",name,node));
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(saveState): method no implement",name,node));
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam(set_err("UI(saveState): object not exist",name,node));
}
catch(CORBA::COMM_FAILURE)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveState): CORBA::COMM_FAILURE " << endl;
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveState): CORBA::SystemException" << endl;
}
rcache.erase(name, node);
throw UniSetTypes::TimeOut(set_err("UI(saveState): Timeout",name, node));
}
bool UniversalInterface::saveState(ObjectId name, bool state, IOTypes type)
{
return saveState(name, state, type, uconf->getLocalNode() );
}
// ------------------------------------------------------------------------------------------------------------
bool UniversalInterface::saveState( IOController_i::SensorInfo& si, bool state, UniversalIO::IOTypes type,
UniSetTypes::ObjectId supplier )
{
ObjectId old = myid;
bool res(false);
try
{
myid = supplier;
res = saveState(si.id,state,type,si.node);
}
catch(...)
{
myid = old;
throw;
}
myid = old;
return res;
}
// ------------------------------------------------------------------------------------------------------------
void UniversalInterface::fastSaveState( IOController_i::SensorInfo& si, bool state, UniversalIO::IOTypes type,
UniSetTypes::ObjectId supplier)
{
if( si.id == DefaultObjectId )
{
unideb[Debug::WARN] << "UI(fastSaveState): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId" << endl;
return;
}
try
{
CORBA::Object_var oref;
try
{
oref = rcache.resolve(si.id, si.node);
}
catch( NameNotFound ){}
for (unsigned int i=0; i<uconf->getRepeatCount(); i++)
{
try
{
if( CORBA::is_nil(oref) )
oref = resolve( si.id, si.node );
IOController_i_var iom = IOController_i::_narrow(oref);
iom->fastSaveState(si, state, type, supplier);
return;
}
catch(CORBA::TRANSIENT){}
catch(CORBA::OBJECT_NOT_EXIST){}
catch(CORBA::SystemException& ex){}
msleep(uconf->getRepeatTimeout());
oref = CORBA::Object::_nil();
}
}
catch(UniSetTypes::TimeOut){}
catch(IOController_i::NameNotFound &ex)
{
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << "UI(fastSaveState): " << ex.err << endl;
}
catch(IOController_i::IOBadParam& ex )
{
rcache.erase(si.id, si.node);
throw UniSetTypes::IOBadParam("UI(fastSaveState): "+string(ex.err));
}
catch(ORepFailed)
{
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << set_err("UI(fastSaveState): resolve failed ",si.id,si.node) << endl;
}
catch(CORBA::NO_IMPLEMENT)
{
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << set_err("UI(fastSaveState): method no implement",si.id,si.node) << endl;
}
catch(CORBA::OBJECT_NOT_EXIST)
{
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << set_err("UI(fastSaveState): object not exist",si.id,si.node) << endl;
}
catch(CORBA::COMM_FAILURE)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveState): CORBA::COMM_FAILURE " << endl;
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveState): CORBA::SystemException" << endl;
}
catch(...){}
rcache.erase(si.id, si.node);
unideb[Debug::WARN] << set_err("UI(fastSaveState): Timeout",si.id, si.node) << endl;
}
// ------------------------------------------------------------------------------------------------------------
IOController_i::ShortIOInfo UniversalInterface::getChangedTime( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node ) IOController_i::ShortIOInfo UniversalInterface::getChangedTime( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node )
{ {
if( id == DefaultObjectId ) if( id == DefaultObjectId )
...@@ -2545,10 +1560,10 @@ IOController_i::CalibrateInfo UniversalInterface::getCalibrateInfo( const IOCont ...@@ -2545,10 +1560,10 @@ IOController_i::CalibrateInfo UniversalInterface::getCalibrateInfo( const IOCont
throw UniSetTypes::TimeOut(set_err("UI(getCalibrateInfo): Timeout",si.id,si.node)); throw UniSetTypes::TimeOut(set_err("UI(getCalibrateInfo): Timeout",si.id,si.node));
} }
// -------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------
IOController_i::ASensorInfoSeq_var UniversalInterface::getSensorSeq( UniSetTypes::IDList& lst ) IOController_i::SensorInfoSeq_var UniversalInterface::getSensorSeq( UniSetTypes::IDList& lst )
{ {
if( lst.size() == 0 ) if( lst.size() == 0 )
return IOController_i::ASensorInfoSeq_var(); return IOController_i::SensorInfoSeq_var();
ObjectId sid = lst.getFirst(); ObjectId sid = lst.getFirst();
...@@ -2897,7 +1912,7 @@ bool UniversalInterface::waitWorking( UniSetTypes::ObjectId id, int msec, int pm ...@@ -2897,7 +1912,7 @@ bool UniversalInterface::waitWorking( UniSetTypes::ObjectId id, int msec, int pm
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
UniversalIO::IOTypes UniversalInterface::getConfIOType( UniSetTypes::ObjectId id ) UniversalIO::IOType UniversalInterface::getConfIOType( UniSetTypes::ObjectId id )
{ {
if( !conf ) if( !conf )
return UniversalIO::UnknownIOType; return UniversalIO::UnknownIOType;
......
...@@ -241,9 +241,6 @@ struct MsgInfo ...@@ -241,9 +241,6 @@ struct MsgInfo
MsgInfo(): MsgInfo():
type(Message::Unused), type(Message::Unused),
id(DefaultObjectId), id(DefaultObjectId),
acode(DefaultMessageCode),
ccode(DefaultMessageCode),
ch(0),
node(DefaultObjectId) node(DefaultObjectId)
{ {
// struct timezone tz; // struct timezone tz;
...@@ -254,9 +251,6 @@ struct MsgInfo ...@@ -254,9 +251,6 @@ struct MsgInfo
int type; int type;
ObjectId id; // от кого ObjectId id; // от кого
MessageCode acode; // код сообщения
MessageCode ccode; // код причины
int ch; // характер
struct timeval tm; // время struct timeval tm; // время
ObjectId node; // откуда ObjectId node; // откуда
...@@ -271,12 +265,6 @@ struct MsgInfo ...@@ -271,12 +265,6 @@ struct MsgInfo
if( node != mi.node ) if( node != mi.node )
return node < mi.node; return node < mi.node;
if( acode != mi.acode )
return acode < mi.acode;
if( ch != mi.ch )
return ch < mi.ch;
if( tm.tv_sec != mi.tm.tv_sec ) if( tm.tv_sec != mi.tm.tv_sec )
return tm.tv_sec < mi.tm.tv_sec; return tm.tv_sec < mi.tm.tv_sec;
......
...@@ -313,16 +313,16 @@ using namespace UniSetTypes; ...@@ -313,16 +313,16 @@ using namespace UniSetTypes;
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
std::ostream& UniSetTypes::operator<<( std::ostream& os, const UniversalIO::IOType t ) std::ostream& UniSetTypes::operator<<( std::ostream& os, const UniversalIO::IOType t )
{ {
if( t == UniversalIO::AnalogInput ) if( t == UniversalIO::AI )
return os << "AI"; return os << "AI";
if( t == UniversalIO::DigitalInput ) if( t == UniversalIO::DI )
return os << "DI"; return os << "DI";
if( t == UniversalIO::AnalogOutput ) if( t == UniversalIO::AO )
return os << "AO"; return os << "AO";
if( t == UniversalIO::DigitalOutput ) if( t == UniversalIO::DO )
return os << "DO"; return os << "DO";
return os << "UnknownIOType"; return os << "UnknownIOType";
...@@ -351,3 +351,4 @@ using namespace UniSetTypes; ...@@ -351,3 +351,4 @@ using namespace UniSetTypes;
return true; return true;
} }
// ------------------------------------------------------------------------------------------
...@@ -33,25 +33,23 @@ using namespace UniversalIO; ...@@ -33,25 +33,23 @@ using namespace UniversalIO;
using namespace std; using namespace std;
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
IOController::IOController(): IOController::IOController():
dioMutex("dioMutex"), ioMutex("ioMutex"),
aioMutex("aioMutex") isPingDBServer(true)
{ {
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
IOController::IOController(const string name, const string section): IOController::IOController(const string name, const string section):
ObjectsManager(name, section), ObjectsManager(name, section),
dioMutex(name+"_dioMutex"), ioMutex(name+"_ioMutex"),
aioMutex(name+"_aioMutex"),
isPingDBServer(true) isPingDBServer(true)
{ {
} }
IOController::IOController(ObjectId id): IOController::IOController(ObjectId id):
ObjectsManager(id), ObjectsManager(id),
dioMutex(string(conf->oind->getMapName(id))+"_dioMutex"), ioMutex(string(conf->oind->getMapName(id))+"_ioMutex"),
aioMutex(string(conf->oind->getMapName(id))+"_aioMutex"),
isPingDBServer(true) isPingDBServer(true)
{ {
} }
...@@ -77,28 +75,13 @@ bool IOController::disactivateObject() ...@@ -77,28 +75,13 @@ bool IOController::disactivateObject()
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IOController::sensorsUnregistration() void IOController::sensorsUnregistration()
{ {
// Разрегистрируем дискретные датчики
for( DIOStateList::iterator li = dioList.begin();
li != dioList.end(); ++li)
{
try
{
sUnRegistration( li->second.si );
}
catch(Exception& ex)
{
unideb[Debug::CRIT] << myname << "(sensorsUnregistration): "<< ex << endl;
}
catch(...){}
}
// Разрегистрируем аналоговые датчики // Разрегистрируем аналоговые датчики
for( AIOStateList::iterator li = aioList.begin(); for( IOStateList::iterator li = ioList.begin();
li != aioList.end(); ++li) li != ioList.end(); ++li)
{ {
try try
{ {
sUnRegistration( li->second.si ); ioUnRegistration( li->second.si );
} }
catch(Exception& ex) catch(Exception& ex)
{ {
...@@ -109,67 +92,19 @@ void IOController::sensorsUnregistration() ...@@ -109,67 +92,19 @@ void IOController::sensorsUnregistration()
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
CORBA::Boolean IOController::getState( const IOController_i::SensorInfo& si )
{
DIOStateList::iterator li(dioList.end());
try
{
return localGetState(li,si);
} // getValue if not found...
catch( IOController_i::NameNotFound )
{
AIOStateList::iterator a(aioList.end());
return (localGetValue(a,si) ? true : false);
}
}
// ------------------------------------------------------------------------------------------
CORBA::Long IOController::getValue( const IOController_i::SensorInfo& si ) CORBA::Long IOController::getValue( const IOController_i::SensorInfo& si )
{ {
AIOStateList::iterator li(aioList.end()); IOStateList::iterator li(ioList.end());
try return localGetValue(li,si);
{
return localGetValue(li,si);
} // getState if not found...
catch( IOController_i::NameNotFound )
{
DIOStateList::iterator d(dioList.end());
return (localGetState(d,si) ? 1 : 0);
}
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool IOController::localGetState( IOController::DIOStateList::iterator& li, long IOController::localGetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si )
{
if( li == dioList.end() )
li = dioList.find( UniSetTypes::key(si.id,si.node) );
if( li != dioList.end() )
{
if( li->second.undefined )
throw IOController_i::Undefined();
uniset_rwmutex_rlock lock(li->second.val_lock);
return li->second.state;
}
// -------------
ostringstream err;
err << myname << "(localGetState): Not found digital sensor (" << si.id << ":" << si.node << ") "
<< conf->oind->getNameById(si.id);
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
// ---------------------------------------------------------------------------
long IOController::localGetValue( IOController::AIOStateList::iterator& li,
const IOController_i::SensorInfo& si ) const IOController_i::SensorInfo& si )
{ {
if( li == aioList.end() ) if( li == ioList.end() )
li = aioList.find( key(si.id,si.node) ); li = ioList.find( key(si.id,si.node) );
if( li!=aioList.end() ) if( li!=ioList.end() )
{ {
if( li->second.undefined ) if( li->second.undefined )
throw IOController_i::Undefined(); throw IOController_i::Undefined();
...@@ -180,53 +115,35 @@ long IOController::localGetValue( IOController::AIOStateList::iterator& li, ...@@ -180,53 +115,35 @@ long IOController::localGetValue( IOController::AIOStateList::iterator& li,
// ------------- // -------------
ostringstream err; ostringstream err;
err << myname << "(localGetValue): Not found analog sensor (" << si.id << ":" << si.node << ") " err << myname << "(localGetValue): Not found analog sensor (" << si.id << ":" << si.node << ") "
<< conf->oind->getNameById(si.id); << conf->oind->getNameById(si.id);
if( unideb.debugging(Debug::INFO) ) if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl; unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IOController::fastSaveState( const IOController_i::SensorInfo& si, CORBA::Boolean state,
IOTypes type, UniSetTypes::ObjectId sup_id )
{
try
{
DIOStateList::iterator li(dioList.end());
localSaveState(li, si, state, sup_id );
}
catch(...){}
}
// ------------------------------------------------------------------------------------------
void IOController::saveState( const IOController_i::SensorInfo& si, CORBA::Boolean state,
IOTypes type, UniSetTypes::ObjectId sup_id )
{
IOController::DIOStateList::iterator li(dioList.end());
localSaveState( li, si, state, sup_id );
}
// ------------------------------------------------------------------------------------------
void IOController::setUndefinedState(const IOController_i::SensorInfo& si, void IOController::setUndefinedState(const IOController_i::SensorInfo& si,
CORBA::Boolean undefined, UniSetTypes::ObjectId sup_id ) CORBA::Boolean undefined, UniSetTypes::ObjectId sup_id )
{ {
IOController::AIOStateList::iterator li(aioList.end()); IOController::IOStateList::iterator li(ioList.end());
localSetUndefinedState( li,undefined,si ); localSetUndefinedState( li,undefined,si );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void IOController::localSetUndefinedState( AIOStateList::iterator& li, void IOController::localSetUndefinedState( IOStateList::iterator& li,
bool undefined, const IOController_i::SensorInfo& si ) bool undefined, const IOController_i::SensorInfo& si )
{ {
// сохранение текущего состояния // сохранение текущего состояния
if( li == aioList.end() ) if( li == ioList.end() )
li = aioList.find(key(si.id, si.node)); li = ioList.find(key(si.id, si.node));
if( li==aioList.end() ) if( li==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(localSetUndefined): Unknown sensor (" << si.id << ":" << si.node << ")" err << myname << "(localSetUndefined): Unknown sensor (" << si.id << ":" << si.node << ")"
<< "name: " << conf->oind->getNameById(si.id) << "name: " << conf->oind->getNameById(si.id)
<< "node: " << conf->oind->getMapName(si.node); << "node: " << conf->oind->getMapName(si.node);
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
...@@ -237,114 +154,24 @@ void IOController::localSetUndefinedState( AIOStateList::iterator& li, ...@@ -237,114 +154,24 @@ void IOController::localSetUndefinedState( AIOStateList::iterator& li,
} // unlock } // unlock
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IOController::localSaveState( IOController::DIOStateList::iterator& li, void IOController::fastSetValue( const IOController_i::SensorInfo& si, CORBA::Long value, UniSetTypes::ObjectId sup_id )
const IOController_i::SensorInfo& si,
CORBA::Boolean state, UniSetTypes::ObjectId sup_id )
{
if( sup_id == UniSetTypes::DefaultObjectId )
sup_id = getId();
// сохранение текущего состояния
if( li == dioList.end() )
li = dioList.find(key(si.id, si.node));
if( li==dioList.end() )
{
ostringstream err;
err << myname << "(localSaveState): Unknown sensor (" << si.id << ":" << si.node << ")"
<< "name: " << conf->oind->getNameById(si.id)
<< "node: " << conf->oind->getMapName(si.node);
throw IOController_i::NameNotFound(err.str().c_str());
}
if( li->second.type != UniversalIO::DigitalInput ) // && li->second.type != UniversalIO::DigitalOutput )
{
ostringstream err;
err << myname << "(localSaveState): Bad sensor iotype=" << li->second.type
<< ". Sensor must be 'DI'. (" << si.id << ":" << si.node << ")"
<< " name: " << conf->oind->getNameById(si.id)
<< " node: " << conf->oind->getMapName(si.node);
throw IOController_i::IOBadParam(err.str().c_str());
}
// { // lock
// uniset_rwmutex_lock wrlock(li->second.val_lock,checkLockValuePause);
bool changed = false;
bool blk_set = false;
bool blocked = ( li->second.blocked || li->second.undefined );
if( checkDFilters(&li->second,state,sup_id) || blocked )
{
{ // lock
uniset_rwmutex_wrlock lock(li->second.val_lock);
if( !blocked )
li->second.real_state = li->second.state;
if( li->second.real_state != state )
changed = true;
if( blocked )
{
li->second.real_state = state;
li->second.state = li->second.block_state;
}
else
{
li->second.state = state;
li->second.real_state = state;
}
blk_set = li->second.state;
} // unlock
// запоминаем время изменения
struct timeval tm;
struct timezone tz;
tm.tv_sec = 0;
tm.tv_usec = 0;
gettimeofday(&tm,&tz);
li->second.tv_sec = tm.tv_sec;
li->second.tv_usec = tm.tv_usec;
}
// } // unlock
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << myname << ": save digital sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id, si.node)
<< " = " << state
<< " blocked=" << blocked
<< " --> state=" << li->second.state
<< " real_state=" << li->second.real_state
<< " changed=" << changed
<< endl;
}
// обновляем список зависимых
if( changed )
updateBlockDepends( li->second.dlst, blk_set, li->second.dlst_lock );
}
// ------------------------------------------------------------------------------------------
void IOController::fastSaveValue( const IOController_i::SensorInfo& si, CORBA::Long value,
IOTypes type, UniSetTypes::ObjectId sup_id )
{ {
try try
{ {
IOController::AIOStateList::iterator li(aioList.end()); IOController::IOStateList::iterator li(ioList.end());
localSaveValue( li, si,value, sup_id ); localSetValue( li, si, value, sup_id );
} }
catch(...){} catch(...){}
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IOController::saveValue( const IOController_i::SensorInfo& si, CORBA::Long value, void IOController::setValue( const IOController_i::SensorInfo& si, CORBA::Long value,
IOTypes type, UniSetTypes::ObjectId sup_id ) UniSetTypes::ObjectId sup_id )
{ {
IOController::AIOStateList::iterator li(aioList.end()); IOController::IOStateList::iterator li(ioList.end());
localSaveValue( li, si,value, sup_id ); localSetValue( li, si, value, sup_id );
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IOController::localSaveValue( IOController::AIOStateList::iterator& li, void IOController::localSetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si, const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id ) CORBA::Long value, UniSetTypes::ObjectId sup_id )
{ {
...@@ -352,29 +179,19 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li, ...@@ -352,29 +179,19 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
sup_id = getId(); sup_id = getId();
// сохранение текущего состояния // сохранение текущего состояния
// AIOStateList::iterator li( aioList.end() ); // IOStateList::iterator li( ioList.end() );
if( li == aioList.end() ) if( li == ioList.end() )
li = aioList.find(key(si.id, si.node)); li = ioList.find(key(si.id, si.node));
if( li==aioList.end() ) if( li==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(localSaveValue): Unknown sensor (" << si.id << ":" << si.node << ")" err << myname << "(localSaveValue): Unknown sensor (" << si.id << ":" << si.node << ")"
<< "name: " << conf->oind->getNameById(si.id) << "name: " << conf->oind->getNameById(si.id)
<< "node: " << conf->oind->getMapName(si.node); << "node: " << conf->oind->getMapName(si.node);
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
if( li->second.type != UniversalIO::AnalogInput ) // && li->second.type != UniversalIO::AnalogOutput )
{
ostringstream err;
err << myname << "(localSaveValue): Bad sensor iotype=" << li->second.type
<< ". Sensor must be 'AI'. (" << si.id << ":" << si.node << ")"
<< " name: " << conf->oind->getNameById(si.id)
<< " node: " << conf->oind->getMapName(si.node);
throw IOController_i::IOBadParam(err.str().c_str());
}
{ // lock { // lock
uniset_rwmutex_wrlock lock(li->second.val_lock); uniset_rwmutex_wrlock lock(li->second.val_lock);
...@@ -383,11 +200,11 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li, ...@@ -383,11 +200,11 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
bool blocked = ( li->second.blocked || li->second.undefined ); bool blocked = ( li->second.blocked || li->second.undefined );
if( checkAFilters(&li->second,value,sup_id) || blocked ) if( checkIOFilters(&li->second,value,sup_id) || blocked )
{ {
if( unideb.debugging(Debug::INFO) ) if( unideb.debugging(Debug::INFO) )
{ {
unideb[Debug::INFO] << myname << ": save analog sensor value (" << si.id << ":" << si.node << ")" unideb[Debug::INFO] << myname << ": save sensor value (" << si.id << ":" << si.node << ")"
<< " name: " << conf->oind->getNameById(si.id) << " name: " << conf->oind->getNameById(si.id)
<< " node: " << conf->oind->getMapName(si.node) << " node: " << conf->oind->getMapName(si.node)
<< " value="<< value << endl; << " value="<< value << endl;
...@@ -418,17 +235,12 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li, ...@@ -418,17 +235,12 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
} // unlock } // unlock
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
IOTypes IOController::getIOType( const IOController_i::SensorInfo& si ) IOType IOController::getIOType( const IOController_i::SensorInfo& si )
{ {
UniSetTypes::KeyType k = key(si.id,si.node); UniSetTypes::KeyType k = key(si.id,si.node);
// Проверяем в списке дискретных
DIOStateList::iterator li = dioList.find(k);
if( li!=dioList.end() )
return li->second.type;
// Проверяем в списке аналоговых IOStateList::iterator ali = ioList.find(k);
AIOStateList::iterator ali = aioList.find(k); if( ali!=ioList.end() )
if( ali!=aioList.end() )
return ali->second.type; return ali->second.type;
ostringstream err; ostringstream err;
...@@ -437,139 +249,15 @@ IOTypes IOController::getIOType( const IOController_i::SensorInfo& si ) ...@@ -437,139 +249,15 @@ IOTypes IOController::getIOType( const IOController_i::SensorInfo& si )
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
#if 0
void IOController::setState( const IOController_i::SensorInfo& si, CORBA::Boolean state, UniSetTypes::ObjectId sup_id ) void IOController::localSetValue( IOController::IOStateList::iterator& li,
{
if( sup_id == UniSetTypes::DefaultObjectId )
sup_id = getId();
IOController::DIOStateList::iterator li(dioList.end());
localSetState(li,si,state,sup_id);
}
void IOController::fastSetState( const IOController_i::SensorInfo& si, CORBA::Boolean state, UniSetTypes::ObjectId sup_id )
{
if( sup_id == UniSetTypes::DefaultObjectId )
sup_id = getId();
try
{
IOController::DIOStateList::iterator li(dioList.end());
localSetState(li,si,state,sup_id);
}
catch(...){}
}
// ---------------------------------------------------------------------------
void IOController::setValue( const IOController_i::SensorInfo& si, CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
if( sup_id == UniSetTypes::DefaultObjectId )
sup_id = getId();
try
{
IOController::AIOStateList::iterator li(aioList.end());
localSetValue(li,si,value,sup_id);
} // getValue if not found...
catch( IOController_i::NameNotFound )
{
IOController::DIOStateList::iterator li(dioList.end());
localSetState(li, si, (value ? true : false), sup_id);
}
}
void IOController::fastSetValue( const IOController_i::SensorInfo& si, CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
if( sup_id == UniSetTypes::DefaultObjectId )
sup_id = getId();
try
{
IOController::AIOStateList::iterator li(aioList.end());
localSetValue(li,si,value,sup_id);
}
catch(...){};
}
// ---------------------------------------------------------------------------
void IOController::localSetState( IOController::DIOStateList::iterator& li,
const IOController_i::SensorInfo& si, CORBA::Boolean state,
UniSetTypes::ObjectId sup_id )
{
if( li == dioList.end() )
li = dioList.find( key(si.id, si.node) );
if( li!=dioList.end() && li->second.type == UniversalIO::DigitalOutput )
{
bool blocked = false;
bool changed = false;
bool blk_set = false;
{ // lock
uniset_rwmutex_wrlock lock(li->second.val_lock);
blocked = ( li->second.blocked || li->second.undefined );
if ( !blocked )
li->second.real_state = li->second.state;
if( li->second.real_state != state )
changed = true;
if( blocked )
{
li->second.real_state = state;
li->second.state = false;
}
else
{
li->second.state = state;
li->second.real_state = state;
}
blk_set = li->second.state;
} // unlock
struct timeval tm;
struct timezone tz;
tm.tv_sec = 0;
tm.tv_usec = 0;
gettimeofday(&tm,&tz);
li->second.tv_sec = tm.tv_sec;
li->second.tv_usec = tm.tv_usec;
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << myname
<< ": save state for DO (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id, si.node) << " = " << state
<< " blocked=" << li->second.blocked
<<" --> state=" << li->second.state
<< " changed=" << changed
<< " blocked=" << blocked
<< endl;
}
if( changed )
updateBlockDepends( li->second.dlst, blk_set, li->second.dlst_lock );
return;
}
// -------------
ostringstream err;
err << myname << "(localSetState): Unknown sensor (" << si.id << ":" << si.node << ")" << conf->oind->getNameById(si.id);
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
// ---------------------------------------------------------------------------
void IOController::localSetValue( IOController::AIOStateList::iterator& li,
const IOController_i::SensorInfo& si, CORBA::Long value, const IOController_i::SensorInfo& si, CORBA::Long value,
UniSetTypes::ObjectId sup_id ) UniSetTypes::ObjectId sup_id )
{ {
if( li == aioList.end() ) if( li == ioList.end() )
li = aioList.find( key(si.id, si.node) ); li = ioList.find( key(si.id, si.node) );
if( li!=aioList.end() && li->second.type == UniversalIO::AnalogOutput ) if( li!=ioList.end() && li->second.type == UniversalIO::AO )
{ {
{ // lock { // lock
uniset_rwmutex_wrlock lock(li->second.val_lock); uniset_rwmutex_wrlock lock(li->second.val_lock);
...@@ -592,7 +280,7 @@ void IOController::localSetValue( IOController::AIOStateList::iterator& li, ...@@ -592,7 +280,7 @@ void IOController::localSetValue( IOController::AIOStateList::iterator& li,
li->second.tv_usec = tm.tv_usec; li->second.tv_usec = tm.tv_usec;
if( unideb.debugging(Debug::INFO) ) if( unideb.debugging(Debug::INFO) )
{ {
unideb[Debug::INFO] << myname << "(localSetValue): save analog value for (" unideb[Debug::INFO] << myname << "(localSetValue): save value for ("
<< si.id << ":" << si.node << ")" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id, si.node) << " = " << value << conf->oind->getNameById(si.id, si.node) << " = " << value
<< " blocked=" << li->second.blocked << " blocked=" << li->second.blocked
...@@ -607,104 +295,27 @@ void IOController::localSetValue( IOController::AIOStateList::iterator& li, ...@@ -607,104 +295,27 @@ void IOController::localSetValue( IOController::AIOStateList::iterator& li,
err << myname << "(localSetValue): Unknown sensor (" << si.id << ":" << si.node << ")" << conf->oind->getNameById(si.id); err << myname << "(localSetValue): Unknown sensor (" << si.id << ":" << si.node << ")" << conf->oind->getNameById(si.id);
unideb[Debug::INFO] << err.str() << endl; unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
}
// ---------------------------------------------------------------------------
void IOController::dsRegistration( const UniDigitalIOInfo& dinf, bool force )
{
// проверка задан ли контроллеру идентификатор
if( getId() == DefaultObjectId )
{
ostringstream err;
err << "(IOCOntroller::dsRegistration): КОНТРОЛЛЕРУ НЕ ЗАДАН ObjectId. Регистрация невозможна.";
unideb[Debug::WARN] << err.str() << endl;
throw ResolveNameError(err.str().c_str());
}
UniSetTypes::KeyType k = key(dinf.si.id, dinf.si.node);
{ // lock
uniset_rwmutex_wrlock lock(dioMutex);
if( !force )
{
DIOStateList::iterator li = dioList.find(k);
if( li!=dioList.end() )
{
ostringstream err;
err << "Попытка повторной регистрации датчика("<< k << "). имя: "
<< conf->oind->getNameById(dinf.si.id)
<< " узел: " << conf->oind->getMapName(dinf.si.node);
throw ObjectNameAlready(err.str().c_str());
}
}
DIOStateList::mapped_type di(dinf);
// запоминаем начальное время
struct timeval tm;
struct timezone tz;
tm.tv_sec = 0;
tm.tv_usec = 0;
gettimeofday(&tm,&tz);
di.tv_sec = tm.tv_sec;
di.tv_usec = tm.tv_usec;
di.state = di.default_val;
// более оптимальный способ (при условии вставки первый раз)
dioList.insert(DIOStateList::value_type(k,di));
}
try
{
for( int i=0; i<2; i++ )
{
try
{
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << myname
<< "(dsRegistration): регистрирую "
<< conf->oind->getNameById(dinf.si.id, dinf.si.node) << endl;
}
ui.registered( dinf.si.id, dinf.si.node, getRef(), true );
return;
}
catch(ObjectNameAlready& ex )
{
if( unideb.debugging(Debug::WARN) )
{
unideb[Debug::WARN] << myname
<< "(dsRegistration): ЗАМЕНЯЮ СУЩЕСТВУЮЩИЙ ОБЪЕКТ (ObjectNameAlready)" << endl;
}
ui.unregister(dinf.si.id,dinf.si.node);
}
}
}
catch(Exception& ex)
{
unideb[Debug::CRIT] << myname << "(dsRegistration): " << ex << endl;
}
catch(...)
{
unideb[Debug::CRIT] << myname << "(dsRegistration): catch ..."<< endl;
}
} }
#endif
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force ) void IOController::ioRegistration( const USensorIOInfo& ainf, bool force )
{ {
// проверка задан ли контроллеру идентификатор // проверка задан ли контроллеру идентификатор
if( getId() == DefaultObjectId ) if( getId() == DefaultObjectId )
{ {
ostringstream err; ostringstream err;
err << "(IOCOntroller::dsRegistration): КОНТРОЛЛЕРУ НЕ ЗАДАН ObjectId. Регистрация невозможна."; err << "(IOCOntroller::ioRegistration): КОНТРОЛЛЕРУ НЕ ЗАДАН ObjectId. Регистрация невозможна.";
unideb[Debug::WARN] << err.str() << endl; unideb[Debug::WARN] << err.str() << endl;
throw ResolveNameError(err.str().c_str()); throw ResolveNameError(err.str().c_str());
} }
UniSetTypes::KeyType k = key(ainf.si.id, ainf.si.node); UniSetTypes::KeyType k = key(ainf.si.id, ainf.si.node);
{ // lock { // lock
uniset_rwmutex_wrlock lock(aioMutex); uniset_rwmutex_wrlock lock(ioMutex);
if( !force ) if( !force )
{ {
AIOStateList::iterator li = aioList.find(k); IOStateList::iterator li = ioList.find(k);
if( li!=aioList.end() ) if( li!=ioList.end() )
{ {
ostringstream err; ostringstream err;
err << "Попытка повторной регистрации датчика("<< k << "). имя: " err << "Попытка повторной регистрации датчика("<< k << "). имя: "
...@@ -714,7 +325,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force ) ...@@ -714,7 +325,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
} }
} }
AIOStateList::mapped_type ai(ainf); IOStateList::mapped_type ai(ainf);
// запоминаем начальное время // запоминаем начальное время
struct timeval tm; struct timeval tm;
struct timezone tz; struct timezone tz;
...@@ -726,7 +337,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force ) ...@@ -726,7 +337,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
ai.value = ai.default_val; ai.value = ai.default_val;
// более оптимальный способ(при условии вставки первый раз) // более оптимальный способ(при условии вставки первый раз)
aioList.insert(AIOStateList::value_type(k,ai)); ioList.insert(IOStateList::value_type(k,ai));
} }
try try
...@@ -738,7 +349,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force ) ...@@ -738,7 +349,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
if( unideb.debugging(Debug::INFO) ) if( unideb.debugging(Debug::INFO) )
{ {
unideb[Debug::INFO] << myname unideb[Debug::INFO] << myname
<< "(asRegistration): регистрирую " << "(ioRegistration): регистрирую "
<< conf->oind->getNameById(ainf.si.id, ainf.si.node) << endl; << conf->oind->getNameById(ainf.si.id, ainf.si.node) << endl;
} }
ui.registered( ainf.si.id, ainf.si.node, getRef(), true ); ui.registered( ainf.si.id, ainf.si.node, getRef(), true );
...@@ -755,22 +366,23 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force ) ...@@ -755,22 +366,23 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
} }
} }
} }
catch(Exception& ex) catch( Exception& ex )
{ {
unideb[Debug::CRIT] << myname << "(asRegistration): " << ex << endl; if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] << myname << "(ioRegistration): " << ex << endl;
} }
catch(...) catch(...)
{ {
unideb[Debug::CRIT] << myname << "(asRegistration): catch ..."<< endl; if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] << myname << "(ioRegistration): catch ..."<< endl;
} }
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
void IOController::sUnRegistration( const IOController_i::SensorInfo& si ) void IOController::ioUnRegistration( const IOController_i::SensorInfo& si )
{ {
ui.unregister( si.id, si.node ); ui.unregister( si.id, si.node );
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
void IOController::logging( UniSetTypes::SensorMessage& sm ) void IOController::logging( UniSetTypes::SensorMessage& sm )
{ {
uniset_rwmutex_wrlock l(loggingMutex); uniset_rwmutex_wrlock l(loggingMutex);
...@@ -805,31 +417,9 @@ void IOController::dumpToDB() ...@@ -805,31 +417,9 @@ void IOController::dumpToDB()
if( conf->getDBServer() == UniSetTypes::DefaultObjectId ) if( conf->getDBServer() == UniSetTypes::DefaultObjectId )
return; return;
// Проходим по списку дискретных
{ // lock { // lock
// uniset_mutex_lock lock(dioMutex, 100); // uniset_mutex_lock lock(ioMutex, 100);
for( DIOStateList::iterator li = dioList.begin(); li!=dioList.end(); ++li ) for( IOStateList::iterator li = ioList.begin(); li!=ioList.end(); ++li )
{
uniset_rwmutex_rlock lock(li->second.val_lock);
SensorMessage sm;
sm.id = li->second.si.id;
sm.node = li->second.si.node;
sm.sensor_type = li->second.type;
sm.state = li->second.state;
sm.value = sm.state ? 1:0;
sm.undefined = li->second.undefined;
sm.priority = (Message::Priority)li->second.priority;
sm.sm_tv_sec = li->second.tv_sec;
sm.sm_tv_usec = li->second.tv_usec;
if ( !li->second.db_ignore )
logging(sm);
}
} // unlock
// Проходим по списку аналоговых
{ // lock
// uniset_mutex_lock lock(aioMutex, 100);
for( AIOStateList::iterator li = aioList.begin(); li!=aioList.end(); ++li )
{ {
uniset_rwmutex_rlock lock(li->second.val_lock); uniset_rwmutex_rlock lock(li->second.val_lock);
SensorMessage sm; SensorMessage sm;
...@@ -837,7 +427,6 @@ void IOController::dumpToDB() ...@@ -837,7 +427,6 @@ void IOController::dumpToDB()
sm.node = li->second.si.node; sm.node = li->second.si.node;
sm.sensor_type = li->second.type; sm.sensor_type = li->second.type;
sm.value = li->second.value; sm.value = li->second.value;
sm.state = sm.value!=0 ? true:false;
sm.undefined = li->second.undefined; sm.undefined = li->second.undefined;
sm.priority = (Message::Priority)li->second.priority; sm.priority = (Message::Priority)li->second.priority;
sm.sm_tv_sec = li->second.tv_sec; sm.sm_tv_sec = li->second.tv_sec;
...@@ -849,17 +438,17 @@ void IOController::dumpToDB() ...@@ -849,17 +438,17 @@ void IOController::dumpToDB()
} // unlock } // unlock
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
IOController_i::ASensorInfoSeq* IOController::getAnalogSensorsMap() IOController_i::SensorInfoSeq* IOController::getSensorsMap()
{ {
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!! // ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом // поэтому ему лучше пользоваться при получении _var-классом
IOController_i::ASensorInfoSeq* res = new IOController_i::ASensorInfoSeq(); IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq();
res->length( aioList.size()); res->length( ioList.size());
// { // lock // { // lock
// uniset_mutex_lock lock(aioMutex, 500); // uniset_mutex_lock lock(ioMutex, 500);
int i=0; int i=0;
for( AIOStateList::iterator it=aioList.begin(); it!=aioList.end(); ++it) for( IOStateList::iterator it=ioList.begin(); it!=ioList.end(); ++it)
{ {
uniset_rwmutex_rlock lock(it->second.val_lock); uniset_rwmutex_rlock lock(it->second.val_lock);
(*res)[i] = it->second; (*res)[i] = it->second;
...@@ -870,74 +459,25 @@ IOController_i::ASensorInfoSeq* IOController::getAnalogSensorsMap() ...@@ -870,74 +459,25 @@ IOController_i::ASensorInfoSeq* IOController::getAnalogSensorsMap()
return res; return res;
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
IOController_i::DSensorInfoSeq* IOController::getDigitalSensorsMap() UniSetTypes::Message::Priority IOController::getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOType type )
{ {
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!! IOStateList::iterator it = ioList.find(k);
// поэтому ему лучше пользоваться при получении _var-классом if( it!=ioList.end() )
IOController_i::DSensorInfoSeq* res = new IOController_i::DSensorInfoSeq(); return (UniSetTypes::Message::Priority)it->second.priority;
res->length(dioList.size());
// { // lock
// uniset_mutex_lock lock(dioMutex, 500);
int i=0;
for( DIOStateList::iterator it= dioList.begin(); it!=dioList.end(); ++it)
{
uniset_rwmutex_rlock lock(it->second.val_lock);
(*res)[i].si = it->second.si;
(*res)[i].type = it->second.type;
(*res)[i].state = it->second.state;
(*res)[i].real_state= it->second.real_state;
(*res)[i].priority = it->second.priority;
(*res)[i].tv_sec = it->second.tv_sec;
(*res)[i].tv_usec = it->second.tv_usec;
(*res)[i].undefined = it->second.undefined;
(*res)[i].blocked = it->second.blocked;
(*res)[i].default_val = it->second.default_val;
i++;
}
// }
return res;
}
// --------------------------------------------------------------------------------------------------------------
UniSetTypes::Message::Priority IOController::getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOTypes type )
{
switch(type)
{
case UniversalIO::DigitalInput:
case UniversalIO::DigitalOutput:
{
DIOStateList::iterator it = dioList.find(k);
if( it!=dioList.end() )
return (UniSetTypes::Message::Priority)it->second.priority;
}
break;
case UniversalIO::AnalogInput:
case UniversalIO::AnalogOutput:
{
AIOStateList::iterator it = aioList.find(k);
if( it!=aioList.end() )
return (UniSetTypes::Message::Priority)it->second.priority;
}
break;
default:
break;
}
return UniSetTypes::Message::Medium; // ?? return UniSetTypes::Message::Medium; // ??
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
UniSetTypes::Message::Priority IOController::getPriority(const IOController_i::SensorInfo& si, UniSetTypes::Message::Priority IOController::getPriority(const IOController_i::SensorInfo& si,
UniversalIO::IOTypes type) UniversalIO::IOType type)
{ {
return getMessagePriority(key(si.id,si.node), type); return getMessagePriority(key(si.id,si.node), type);
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
IOController_i::DigitalIOInfo IOController::getDInfo(const IOController_i::SensorInfo& si) IOController_i::SensorIOInfo IOController::getSensorIOInfo( const IOController_i::SensorInfo& si )
{ {
DIOStateList::iterator it = dioList.find( key(si.id, si.node) ); IOStateList::iterator it = ioList.find( key(si.id, si.node) );
if( it!=dioList.end() ) if( it!=ioList.end() )
{ {
uniset_rwmutex_rlock lock(it->second.val_lock); uniset_rwmutex_rlock lock(it->second.val_lock);
return it->second; return it->second;
...@@ -945,43 +485,23 @@ IOController_i::DigitalIOInfo IOController::getDInfo(const IOController_i::Senso ...@@ -945,43 +485,23 @@ IOController_i::DigitalIOInfo IOController::getDInfo(const IOController_i::Senso
// ------------- // -------------
ostringstream err; ostringstream err;
err << myname << "(getDInfo): Unknown digital sensor (" << si.id << ":" << si.node << ")" err << myname << "(getAInfo): Unknown sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node); << conf->oind->getNameById(si.id,si.node);
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
// --------------------------------------------------------------------------------------------------------------
IOController_i::AnalogIOInfo IOController::getAInfo(const IOController_i::SensorInfo& si)
{
AIOStateList::iterator it = aioList.find( key(si.id, si.node) );
if( it!=aioList.end() )
{
uniset_rwmutex_rlock lock(it->second.val_lock);
return it->second;
}
// ------------- if( unideb.debugging(Debug::INFO) )
ostringstream err;
err << myname << "(getAInfo): Unknown analog sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node);
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl; unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
CORBA::Long IOController::getRawValue(const IOController_i::SensorInfo& si) CORBA::Long IOController::getRawValue(const IOController_i::SensorInfo& si)
{ {
AIOStateList::iterator it = aioList.find( key(si.id, si.node) ); IOStateList::iterator it = ioList.find( key(si.id, si.node) );
if( it==aioList.end() ) if( it==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(getRawValue): Unknown analog sensor (" << si.id << ":" << si.node << ")" err << myname << "(getRawValue): Unknown analog sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node); << conf->oind->getNameById(si.id,si.node);
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
...@@ -990,11 +510,11 @@ CORBA::Long IOController::getRawValue(const IOController_i::SensorInfo& si) ...@@ -990,11 +510,11 @@ CORBA::Long IOController::getRawValue(const IOController_i::SensorInfo& si)
if( ci.maxCal!=0 && ci.maxCal!=ci.minCal ) if( ci.maxCal!=0 && ci.maxCal!=ci.minCal )
{ {
if( it->second.type == UniversalIO::AnalogInput ) if( it->second.type == UniversalIO::AI )
return UniSetTypes::lcalibrate(it->second.value,ci.minRaw,ci.maxRaw,ci.minCal,ci.maxCal,true); return UniSetTypes::lcalibrate(it->second.value,ci.minRaw,ci.maxRaw,ci.minCal,ci.maxCal,true);
// п╨п╟п╩п╦п╠я─я┐п╣п╪ п╡ п╬п╠я─п╟я┌п╫я┐я▌ я│я┌п╬я─п╬п╫я┐ (п╫п╟ п╡я▀я┘п╬п╢) // п╨п╟п╩п╦п╠я─я┐п╣п╪ п╡ п╬п╠я─п╟я┌п╫я┐я▌ я│я┌п╬я─п╬п╫я┐ (п╫п╟ п╡я▀я┘п╬п╢)
if( it->second.type == UniversalIO::AnalogOutput ) if( it->second.type == UniversalIO::AO )
return UniSetTypes::lcalibrate(it->second.value,ci.minCal,ci.maxCal,ci.minRaw,ci.maxRaw,true); return UniSetTypes::lcalibrate(it->second.value,ci.minCal,ci.maxCal,ci.minRaw,ci.maxRaw,true);
} }
...@@ -1005,11 +525,11 @@ void IOController::calibrate(const IOController_i::SensorInfo& si, ...@@ -1005,11 +525,11 @@ void IOController::calibrate(const IOController_i::SensorInfo& si,
const IOController_i::CalibrateInfo& ci, const IOController_i::CalibrateInfo& ci,
UniSetTypes::ObjectId adminId ) UniSetTypes::ObjectId adminId )
{ {
AIOStateList::iterator it = aioList.find( key(si.id, si.node) ); IOStateList::iterator it = ioList.find( key(si.id, si.node) );
if( it==aioList.end() ) if( it==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(calibrate): Unknown analog sensor (" << si.id << ":" << si.node << ")" err << myname << "(calibrate): Unknown analog sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node); << conf->oind->getNameById(si.id,si.node);
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
...@@ -1022,87 +542,45 @@ void IOController::calibrate(const IOController_i::SensorInfo& si, ...@@ -1022,87 +542,45 @@ void IOController::calibrate(const IOController_i::SensorInfo& si,
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
IOController_i::CalibrateInfo IOController::getCalibrateInfo(const IOController_i::SensorInfo& si) IOController_i::CalibrateInfo IOController::getCalibrateInfo(const IOController_i::SensorInfo& si)
{ {
AIOStateList::iterator it = aioList.find( key(si.id, si.node) ); IOStateList::iterator it = ioList.find( key(si.id, si.node) );
if( it==aioList.end() ) if( it==ioList.end() )
{ {
ostringstream err; ostringstream err;
err << myname << "(calibrate): Unknown analog sensor (" << si.id << ":" << si.node << ")" err << myname << "(calibrate): Unknown analog sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node); << conf->oind->getNameById(si.id,si.node);
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
return it->second.ci; return it->second.ci;
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
IOController::USensorIOInfo::USensorIOInfo(IOController_i::SensorIOInfo& ai):
IOController::UniDigitalIOInfo& IOController_i::SensorIOInfo(ai),
IOController::UniDigitalIOInfo::operator=(IOController_i::DigitalIOInfo& r)
{
(*this) = r;
// any=0;
return *this;
}
IOController::UniDigitalIOInfo&
IOController::UniDigitalIOInfo::operator=(IOController_i::DigitalIOInfo* r)
{
(*this) = (*r);
// any=0;
return *this;
}
const IOController::UniDigitalIOInfo&
IOController::UniDigitalIOInfo::operator=(const IOController_i::DigitalIOInfo& r)
{
(*this) = r;
// any=0;
return *this;
}
IOController::UniDigitalIOInfo::UniDigitalIOInfo(IOController_i::DigitalIOInfo& di):
IOController_i::DigitalIOInfo(di),
any(0),
dlst_lock(false)
{}
IOController::UniDigitalIOInfo::UniDigitalIOInfo(IOController_i::DigitalIOInfo* di):
IOController_i::DigitalIOInfo(*di),
any(0), any(0),
dlst_lock(false) dlst_lock(false)
{} {}
IOController::UniDigitalIOInfo::UniDigitalIOInfo(const IOController_i::DigitalIOInfo& di): IOController::USensorIOInfo::USensorIOInfo(const IOController_i::SensorIOInfo& ai):
IOController_i::DigitalIOInfo(di), IOController_i::SensorIOInfo(ai),
any(0), any(0),
dlst_lock(false) dlst_lock(false)
{} {}
IOController::UniAnalogIOInfo::UniAnalogIOInfo(IOController_i::AnalogIOInfo& ai): IOController::USensorIOInfo::USensorIOInfo(IOController_i::SensorIOInfo* ai):
IOController_i::AnalogIOInfo(ai), IOController_i::SensorIOInfo(*ai),
any(0), any(0),
dlst_lock(false) dlst_lock(false)
{} {}
IOController::UniAnalogIOInfo::UniAnalogIOInfo(const IOController_i::AnalogIOInfo& ai): IOController::USensorIOInfo&
IOController_i::AnalogIOInfo(ai), IOController::USensorIOInfo::operator=(IOController_i::SensorIOInfo& r)
any(0),
dlst_lock(false)
{}
IOController::UniAnalogIOInfo::UniAnalogIOInfo(IOController_i::AnalogIOInfo* ai):
IOController_i::AnalogIOInfo(*ai),
any(0),
dlst_lock(false)
{}
IOController::UniAnalogIOInfo&
IOController::UniAnalogIOInfo::operator=(IOController_i::AnalogIOInfo& r)
{ {
(*this) = r; (*this) = r;
// any=0; // any=0;
return *this; return *this;
} }
IOController::UniAnalogIOInfo& IOController::USensorIOInfo&
IOController::UniAnalogIOInfo::operator=(IOController_i::AnalogIOInfo* r) IOController::USensorIOInfo::operator=(IOController_i::SensorIOInfo* r)
{ {
(*this) = (*r); (*this) = (*r);
// any=0; // any=0;
...@@ -1110,8 +588,8 @@ IOController::UniAnalogIOInfo& ...@@ -1110,8 +588,8 @@ IOController::UniAnalogIOInfo&
return *this; return *this;
} }
const IOController::UniAnalogIOInfo& const IOController::USensorIOInfo&
IOController::UniAnalogIOInfo::operator=(const IOController_i::AnalogIOInfo& r) IOController::USensorIOInfo::operator=(const IOController_i::SensorIOInfo& r)
{ {
(*this) = r; (*this) = r;
// any=0; // any=0;
...@@ -1119,21 +597,10 @@ const IOController::UniAnalogIOInfo& ...@@ -1119,21 +597,10 @@ const IOController::UniAnalogIOInfo&
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
bool IOController::checkDFilters( const UniDigitalIOInfo& di, CORBA::Boolean newstate, bool IOController::checkIOFilters( const USensorIOInfo& ai, CORBA::Long& newvalue,
UniSetTypes::ObjectId sup_id ) UniSetTypes::ObjectId sup_id )
{ {
for( DFilterSlotList::iterator it=dfilters.begin(); it!=dfilters.end(); ++it ) for( IOFilterSlotList::iterator it=iofilters.begin(); it!=iofilters.end(); ++it )
{
if( it->operator()(di,newstate,sup_id) == false )
return false;
}
return true;
}
// ----------------------------------------------------------------------------------------
bool IOController::checkAFilters( const UniAnalogIOInfo& ai, CORBA::Long& newvalue,
UniSetTypes::ObjectId sup_id )
{
for( AFilterSlotList::iterator it=afilters.begin(); it!=afilters.end(); ++it )
{ {
if( (*it)(ai,newvalue,sup_id) == false ) if( (*it)(ai,newvalue,sup_id) == false )
return false; return false;
...@@ -1142,88 +609,37 @@ bool IOController::checkAFilters( const UniAnalogIOInfo& ai, CORBA::Long& newval ...@@ -1142,88 +609,37 @@ bool IOController::checkAFilters( const UniAnalogIOInfo& ai, CORBA::Long& newval
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
IOController::AFilterSlotList::iterator IOController::addAFilter( AFilterSlot sl, bool push_front ) IOController::IOFilterSlotList::iterator IOController::addIOFilter( IOFilterSlot sl, bool push_front )
{
if( push_front == false )
{
afilters.push_back(sl);
AFilterSlotList::iterator it(afilters.end());
return --it;
}
afilters.push_front(sl);
return afilters.begin();
}
// ----------------------------------------------------------------------------------------
IOController::DFilterSlotList::iterator IOController::addDFilter( DFilterSlot sl, bool push_front )
{ {
if( push_front == false ) if( push_front == false )
{ {
dfilters.push_back(sl); iofilters.push_back(sl);
DFilterSlotList::iterator it(dfilters.end()); IOFilterSlotList::iterator it(iofilters.end());
return --it; return --it;
} }
dfilters.push_front(sl); iofilters.push_front(sl);
return dfilters.begin(); return iofilters.begin();
}
// ----------------------------------------------------------------------------------------
void IOController::eraseAFilter(IOController::AFilterSlotList::iterator& it)
{
afilters.erase(it);
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
void IOController::eraseDFilter(IOController::DFilterSlotList::iterator& it) void IOController::eraseIOFilter(IOController::IOFilterSlotList::iterator& it)
{ {
dfilters.erase(it); iofilters.erase(it);
} }
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
IOController::DIOStateList::iterator IOController::mydioBegin() IOController::IOStateList::iterator IOController::myioBegin()
{
// { // lock
// uniset_mutex_lock lock(dioMutex, 200);
return dioList.begin();
// }
}
IOController::DIOStateList::iterator IOController::mydioEnd()
{
// { // lock
// uniset_mutex_lock lock(dioMutex, 200);
return dioList.end();
// }
}
IOController::AIOStateList::iterator IOController::myaioBegin()
{
// { // lock
// uniset_mutex_lock lock(aioMutex, 200);
return aioList.begin();
// }
}
IOController::AIOStateList::iterator IOController::myaioEnd()
{ {
// { // lock return ioList.begin();
// uniset_mutex_lock lock(aioMutex, 200);
return aioList.end();
// }
} }
IOController::AIOStateList::iterator IOController::myafind(UniSetTypes::KeyType k) IOController::IOStateList::iterator IOController::myioEnd()
{ {
// { // lock return ioList.end();
// uniset_mutex_lock lock(aioMutex, 200);
return aioList.find(k);
// }
} }
IOController::DIOStateList::iterator IOController::mydfind(UniSetTypes::KeyType k) IOController::IOStateList::iterator IOController::myiofind(UniSetTypes::KeyType k)
{ {
// { // lock return ioList.find(k);
// uniset_mutex_lock lock(dioMutex, 200);
return dioList.find(k);
// }
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
IOController::DependsInfo::DependsInfo( bool init ): IOController::DependsInfo::DependsInfo( bool init ):
...@@ -1232,11 +648,9 @@ IOController::DependsInfo::DependsInfo( bool init ): ...@@ -1232,11 +648,9 @@ IOController::DependsInfo::DependsInfo( bool init ):
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
IOController::DependsInfo::DependsInfo( IOController_i::SensorInfo& si, IOController::DependsInfo::DependsInfo( IOController_i::SensorInfo& si, IOStateList::iterator& it ):
DIOStateList::iterator& dit, AIOStateList::iterator& ait ):
si(si), si(si),
dit(dit), it(it),
ait(ait),
block_invert(false), block_invert(false),
init(true) init(true)
{ {
...@@ -1251,22 +665,13 @@ void IOController::updateDepends( IOController::DependsList& lst, bool undefined ...@@ -1251,22 +665,13 @@ void IOController::updateDepends( IOController::DependsList& lst, bool undefined
lst_lock = true; lst_lock = true;
for( DependsList::iterator it=lst.begin(); it!=lst.end(); ++it ) for( DependsList::iterator it=lst.begin(); it!=lst.end(); ++it )
{ {
if( it->dit != mydioEnd() ) if( it->it != myioEnd() )
{ {
if( it->dit->second.undefined != undefined ) if( it->it->second.undefined != undefined )
{ {
it->dit->second.undefined = undefined; it->it->second.undefined = undefined;
dslot(it,undefined); dslot(it,undefined);
updateDepends( it->dit->second.dlst,undefined,it->dit->second.dlst_lock ); updateDepends( it->it->second.dlst,undefined,it->it->second.dlst_lock );
}
}
else if( it->ait != myaioEnd() )
{
if( it->ait->second.undefined != undefined )
{
it->ait->second.undefined = undefined;
dslot(it,undefined);
updateDepends( it->ait->second.dlst,undefined,it->ait->second.dlst_lock );
} }
} }
} }
...@@ -1285,23 +690,13 @@ void IOController::updateBlockDepends( IOController::DependsList& lst, bool blk_ ...@@ -1285,23 +690,13 @@ void IOController::updateBlockDepends( IOController::DependsList& lst, bool blk_
{ {
bool set_blk = it->block_invert ? blk_state : !blk_state; bool set_blk = it->block_invert ? blk_state : !blk_state;
if( it->dit != mydioEnd() ) if( it->it != myioEnd() )
{ {
if( it->dit->second.blocked != set_blk ) if( it->it->second.blocked != set_blk )
{ {
bool set = set_blk ? it->dit->second.state : it->dit->second.real_state; long val = set_blk ? it->it->second.value : it->it->second.real_value;
it->dit->second.blocked = set_blk; it->it->second.blocked = set_blk;
localSaveState( it->dit, it->si,set, getId() ); localSetValue( it->it, it->si, val, getId() );
bslot(it,set_blk);
}
}
else if( it->ait != myaioEnd() )
{
if( it->ait->second.blocked != set_blk )
{
long val = set_blk ? it->ait->second.value : it->ait->second.real_value;
it->ait->second.blocked = set_blk;
localSaveValue( it->ait, it->si, val, getId() );
bslot(it,set_blk); bslot(it,set_blk);
} }
} }
...@@ -1320,43 +715,21 @@ void IOController::setBlockDependsSlot( DependsSlot sl ) ...@@ -1320,43 +715,21 @@ void IOController::setBlockDependsSlot( DependsSlot sl )
bslot = sl; bslot = sl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
IOController_i::ASensorInfoSeq* IOController::getSensorSeq( const IDSeq& lst ) IOController_i::SensorInfoSeq* IOController::getSensorSeq( const IDSeq& lst )
{ {
int size = lst.length(); int size = lst.length();
IOController_i::ASensorInfoSeq* res = new IOController_i::ASensorInfoSeq(); IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq();
res->length(size); res->length(size);
for(int i=0; i<size; i++) for( int i=0; i<size; i++ )
{ {
{ IOStateList::iterator it = ioList.find( UniSetTypes::key(lst[i],conf->getLocalNode()) );
DIOStateList::iterator it = dioList.find( UniSetTypes::key(lst[i],conf->getLocalNode()) ); if( it!=ioList.end() )
if( it!=dioList.end() )
{
uniset_rwmutex_rlock lock(it->second.val_lock);
(*res)[i].si = it->second.si;
(*res)[i].type = it->second.type;
(*res)[i].real_value= it->second.real_state ? 1 : 0;
(*res)[i].value = it->second.state ? 1 : 0;
(*res)[i].undefined = it->second.undefined;
(*res)[i].blocked = it->second.blocked;
(*res)[i].priority = it->second.priority;
// (*res)[i].ci = it->second.ci;
(*res)[i].tv_sec = it->second.tv_sec;
(*res)[i].tv_usec = it->second.tv_usec;
(*res)[i].default_val = it->second.default_val;
continue;
}
}
{ {
AIOStateList::iterator it = aioList.find( UniSetTypes::key(lst[i],conf->getLocalNode()) ); uniset_rwmutex_rlock lock(it->second.val_lock);
if( it!=aioList.end() ) (*res)[i] = it->second;
{ continue;
uniset_rwmutex_rlock lock(it->second.val_lock);
(*res)[i] = it->second;
continue;
}
} }
// элемент не найден... // элемент не найден...
...@@ -1377,26 +750,10 @@ IDSeq* IOController::setOutputSeq(const IOController_i::OutSeq& lst, ObjectId su ...@@ -1377,26 +750,10 @@ IDSeq* IOController::setOutputSeq(const IOController_i::OutSeq& lst, ObjectId su
for(int i=0; i<size; i++) for(int i=0; i<size; i++)
{ {
{ {
DIOStateList::iterator it = dioList.find( UniSetTypes::key(lst[i].si.id,lst[i].si.node) ); IOStateList::iterator it = ioList.find( UniSetTypes::key(lst[i].si.id,lst[i].si.node) );
if( it!=dioList.end() ) if( it!=ioList.end() )
{
if( it->second.type == UniversalIO::DigitalInput )
localSaveState(it,lst[i].si,(bool)lst[i].value, sup_id);
else // if( it.second.iotype == UniversalIO::DigitalOutput )
localSetState(it,lst[i].si,(bool)lst[i].value, sup_id);
continue;
}
}
{
AIOStateList::iterator it = aioList.find( UniSetTypes::key(lst[i].si.id,lst[i].si.node) );
if( it!=aioList.end() )
{ {
if( it->second.type == UniversalIO::AnalogInput ) localSetValue(it,lst[i].si,lst[i].value, sup_id);
localSaveValue(it,lst[i].si,lst[i].value, sup_id);
else // if( it.second.iotype == UniversalIO::AnalogOutput )
localSetValue(it,lst[i].si,lst[i].value, sup_id);
continue; continue;
} }
} }
...@@ -1410,19 +767,8 @@ IDSeq* IOController::setOutputSeq(const IOController_i::OutSeq& lst, ObjectId su ...@@ -1410,19 +767,8 @@ IDSeq* IOController::setOutputSeq(const IOController_i::OutSeq& lst, ObjectId su
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i::SensorInfo& si ) IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i::SensorInfo& si )
{ {
DIOStateList::iterator dit = dioList.find( key(si.id, si.node) ); IOStateList::iterator ait = ioList.find( key(si.id, si.node) );
if( dit!=dioList.end() ) if( ait!=ioList.end() )
{
IOController_i::ShortIOInfo i;
uniset_rwmutex_rlock lock(dit->second.val_lock);
i.value = dit->second.state ? 1 : 0;
i.tv_sec = dit->second.tv_sec;
i.tv_usec = dit->second.tv_usec;
return i;
}
AIOStateList::iterator ait = aioList.find( key(si.id, si.node) );
if( ait!=aioList.end() )
{ {
IOController_i::ShortIOInfo i; IOController_i::ShortIOInfo i;
uniset_rwmutex_rlock lock(ait->second.val_lock); uniset_rwmutex_rlock lock(ait->second.val_lock);
...@@ -1434,7 +780,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i:: ...@@ -1434,7 +780,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i::
// ------------- // -------------
ostringstream err; ostringstream err;
err << myname << "(getChangedTime): дискретный вход(выход) с именем " err << myname << "(getChangedTime): вход(выход) с именем "
<< conf->oind->getNameById(si.id) << " не найден"; << conf->oind->getNameById(si.id) << " не найден";
unideb[Debug::INFO] << err.str() << endl; unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
...@@ -1445,10 +791,10 @@ IOController_i::ShortMapSeq* IOController::getSensors() ...@@ -1445,10 +791,10 @@ IOController_i::ShortMapSeq* IOController::getSensors()
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!! // ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом // поэтому ему лучше пользоваться при получении _var-классом
IOController_i::ShortMapSeq* res = new IOController_i::ShortMapSeq(); IOController_i::ShortMapSeq* res = new IOController_i::ShortMapSeq();
res->length( aioList.size() + dioList.size() ); res->length( ioList.size() );
int i=0; int i=0;
for( AIOStateList::iterator it=aioList.begin(); it!=aioList.end(); ++it) for( IOStateList::iterator it=ioList.begin(); it!=ioList.end(); ++it)
{ {
IOController_i::ShortMap m; IOController_i::ShortMap m;
{ {
...@@ -1459,19 +805,7 @@ IOController_i::ShortMapSeq* IOController::getSensors() ...@@ -1459,19 +805,7 @@ IOController_i::ShortMapSeq* IOController::getSensors()
} }
(*res)[i++] = m; (*res)[i++] = m;
} }
for( DIOStateList::iterator it=dioList.begin(); it!=dioList.end(); ++it)
{
IOController_i::ShortMap m;
{
uniset_rwmutex_rlock lock(it->second.val_lock);
m.id = it->second.si.id;
m.value = it->second.state ? 1 : 0;
m.type = it->second.type;
}
(*res)[i++] = m;
}
return res; return res;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -40,8 +40,7 @@ using namespace std; ...@@ -40,8 +40,7 @@ using namespace std;
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
IONotifyController::IONotifyController(): IONotifyController::IONotifyController():
restorer(NULL), restorer(NULL),
askDMutex("askDMutex"), askIOMutex("askIOMutex"),
askAMutex("askAMutex"),
trshMutex("trshMutex"), trshMutex("trshMutex"),
maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5)) maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
{ {
...@@ -51,28 +50,24 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5)) ...@@ -51,28 +50,24 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
IONotifyController::IONotifyController(const string name, const string section, NCRestorer* d ): IONotifyController::IONotifyController(const string name, const string section, NCRestorer* d ):
IOController(name, section), IOController(name, section),
restorer(d), restorer(d),
askDMutex(name+"askDMutex"), askIOMutex(name+"askIOMutex"),
askAMutex(name+"askAMutex"),
trshMutex(name+"trshMutex"), trshMutex(name+"trshMutex"),
maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5)) maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
{ {
// добавляем фильтры // добавляем фильтры
addAFilter( sigc::mem_fun(this,&IONotifyController::myAFilter) ); addIOFilter( sigc::mem_fun(this,&IONotifyController::myIOFilter) );
addDFilter( sigc::mem_fun(this,&IONotifyController::myDFilter) );
setDependsSlot( sigc::mem_fun(this,&IONotifyController::onChangeUndefined) ); setDependsSlot( sigc::mem_fun(this,&IONotifyController::onChangeUndefined) );
} }
IONotifyController::IONotifyController( ObjectId id, NCRestorer* d ): IONotifyController::IONotifyController( ObjectId id, NCRestorer* d ):
IOController(id), IOController(id),
restorer(d), restorer(d),
askDMutex(string(conf->oind->getMapName(id))+"_askDMutex"), askIOMutex(string(conf->oind->getMapName(id))+"_askIOMutex"),
askAMutex(string(conf->oind->getMapName(id))+"_askAMutex"),
trshMutex(string(conf->oind->getMapName(id))+"_trshMutex"), trshMutex(string(conf->oind->getMapName(id))+"_trshMutex"),
maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5)) maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
{ {
// добавляем фильтры // добавляем фильтры
addAFilter( sigc::mem_fun(this,&IONotifyController::myAFilter) ); addIOFilter( sigc::mem_fun(this,&IONotifyController::myIOFilter) );
addDFilter( sigc::mem_fun(this,&IONotifyController::myDFilter) );
setDependsSlot( sigc::mem_fun(this,&IONotifyController::onChangeUndefined) ); setDependsSlot( sigc::mem_fun(this,&IONotifyController::onChangeUndefined) );
} }
...@@ -146,168 +141,31 @@ bool IONotifyController::removeConsumer(ConsumerList& lst, const ConsumerInfo& c ...@@ -146,168 +141,31 @@ bool IONotifyController::removeConsumer(ConsumerList& lst, const ConsumerInfo& c
return false; return false;
} }
// ------------------------------------------------------------------------------------------
/*!
* \param si - информация о датчике
* \param ci - информация о заказчике
* \param cmd - команда см. UniversalIO::UIOCommand
*/
void IONotifyController::askSensor(const IOController_i::SensorInfo& si, const UniSetTypes::ConsumerInfo& ci,
UniversalIO::UIOCommand cmd)
{
IOTypes type = IOController::getIOType(si);
switch(type)
{
case UniversalIO::DigitalInput:
askState(si,ci,cmd);
break;;
case UniversalIO::AnalogInput:
askValue(si,ci,cmd);
break;
case UniversalIO::AnalogOutput:
case UniversalIO::DigitalOutput:
askOutput(si,ci,cmd);
break;
default:
{
ostringstream err;
err << myname << "(askSensor): Неизвестен тип для " << conf->oind->getNameById(si.id);
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
break;
}
}
// ------------------------------------------------------------------------------------------
/*!
* \param si - информация о датчике
* \param ci - информация о заказчике
* \param cmd - команда см. UniversalIO::UIOCommand
*/
void IONotifyController::askState( const IOController_i::SensorInfo& si,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd )
{
// провреки на несуществующий датчик проводить не надо т.к. заказчик принципиально
// не может обратится к этому контроллеру по ссылке на другой датчик
// (ведь ссылка на датчик это ссылка на контроллер который за него отвечает)
// контроль заказа типа датчика(дискретного) здесь производится
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << "(askState): поступил " << ( cmd == UIODontNotify ? "отказ" :"заказ" )
<< " от "
<< conf->oind->getNameById(ci.id, ci.node) << " на дискретный датчик "
<< conf->oind->getNameById(si.id,si.node) << endl;
}
// если такого дискретного датчика нет, здесь сработает исключение...
DIOStateList::iterator li = mydioEnd();
localGetState(li,si);
// lock ???
if( li==mydioEnd() )
{
ostringstream err;
err << myname << "(askState): датчик имя: " << conf->oind->getNameById(si.id) << " не найден";
throw IOController_i::NameNotFound(err.str().c_str());
}
if( li->second.type != UniversalIO::DigitalInput )
{
ostringstream err;
err << myname << "(askState): ВХОДНОЙ ДИСКРЕТНЫЙ ДАТЧИК с именем " << conf->oind->getNameById(si.id) << " не найден";
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
{ //lock
uniset_rwmutex_wrlock lock(askDMutex);
// а раз есть заносим(исключаем) заказчика
ask( askDIOList, si, ci, cmd);
} // unlock
// посылка первый раз состояния
if( cmd==UniversalIO::UIONotify || (cmd==UIONotifyFirstNotNull && li->second.state) )
{
SensorMessage smsg;
smsg.id = si.id;
smsg.node = si.node;
smsg.consumer = ci.id;
smsg.sensor_type= li->second.type;
smsg.priority = (Message::Priority)li->second.priority;
smsg.supplier = getId();
{
uniset_rwmutex_rlock lock(li->second.val_lock);
smsg.state = li->second.state;
smsg.value = li->second.state ? 1:0;
smsg.undefined = li->second.undefined;
smsg.sm_tv_sec = li->second.tv_sec;
smsg.sm_tv_usec = li->second.tv_usec;
}
TransportMessage tm(smsg.transport_msg());
try
{
ui.send(ci.id, tm, ci.node);
}
catch(Exception& ex)
{
unideb[Debug::WARN] << myname << "(askState): "
<< conf->oind->getNameById(si.id, si.node) << " "<< ex << endl;
}
catch( CORBA::SystemException& ex )
{
unideb[Debug::WARN] << conf->oind->getNameById(ci.id, ci.node) << " недоступен!!(CORBA::SystemException): "
<< ex.NP_minorString() << endl;
}
catch(...){}
}
}
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
/*! /*!
* \param si - информация о датчике * \param si - информация о датчике
* \param ci - информация о заказчике * \param ci - информация о заказчике
* \param cmd - команда см. UniversalIO::UIOCommand * \param cmd - команда см. UniversalIO::UIOCommand
*/ */
void IONotifyController::askValue(const IOController_i::SensorInfo& si, void IONotifyController::askSensor(const IOController_i::SensorInfo& si,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd ) const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd )
{ {
// провреки на несуществующий датчик проводить не надо т.к. заказчик ппинципиально
// не может обратится к этому контроллеру по ссылке на другой датчик
// (ведь ссылка на датчик это ссылка на контроллер который за него отвечает)
// контроль заказа именно АНАЛОГОВО датчика производится
if( unideb.debugging(Debug::INFO) ) if( unideb.debugging(Debug::INFO) )
{ {
unideb[Debug::INFO] << "(askValue): поступил " << ( cmd == UIODontNotify ? "отказ" :"заказ" ) << " от " unideb[Debug::INFO] << "(askSensor): поступил " << ( cmd == UIODontNotify ? "отказ" :"заказ" ) << " от "
<< conf->oind->getNameById(ci.id, ci.node) << conf->oind->getNameById(ci.id, ci.node)
<< " на аналоговый датчик " << " на аналоговый датчик "
<< conf->oind->getNameById(si.id,si.node) << endl; << conf->oind->getNameById(si.id,si.node) << endl;
} }
// если такого аналогового датчика нет, здесь сработает исключение... // если такого аналогового датчика нет, здесь сработает исключение...
AIOStateList::iterator li = myaioEnd(); IOStateList::iterator li = myioEnd();
localGetValue(li,si); localGetValue(li,si);
if( li->second.type != UniversalIO::AnalogInput )
{
ostringstream err;
err << myname << "(askState): ВХОДНОЙ АНАЛОГОВЫЙ ДАТЧИК с именем " << conf->oind->getNameById(si.id)
<< " не найден";
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
{ // lock { // lock
uniset_rwmutex_wrlock lock(askAMutex); uniset_rwmutex_wrlock lock(askIOMutex);
// а раз есть заносим(исключаем) заказчика // а раз есть заносим(исключаем) заказчика
ask( askAIOList, si, ci, cmd); ask( askIOList, si, ci, cmd);
} // unlock } // unlock
// посылка первый раз состояния // посылка первый раз состояния
...@@ -326,20 +184,19 @@ void IONotifyController::askValue(const IOController_i::SensorInfo& si, ...@@ -326,20 +184,19 @@ void IONotifyController::askValue(const IOController_i::SensorInfo& si,
{ {
uniset_rwmutex_rlock lock(li->second.val_lock); uniset_rwmutex_rlock lock(li->second.val_lock);
smsg.value = li->second.value; smsg.value = li->second.value;
smsg.state = li->second.value ? true:false;
smsg.undefined = li->second.undefined; smsg.undefined = li->second.undefined;
smsg.sm_tv_sec = li->second.tv_sec; smsg.sm_tv_sec = li->second.tv_sec;
smsg.sm_tv_usec = li->second.tv_usec; smsg.sm_tv_usec = li->second.tv_usec;
} }
TransportMessage tm(smsg.transport_msg()); TransportMessage tm(smsg.transport_msg());
try try
{ {
ui.send(ci.id, tm, ci.node); ui.send(ci.id, tm, ci.node);
} }
catch(Exception& ex) catch(Exception& ex)
{ {
unideb[Debug::WARN] << myname << "(askValue): " << conf->oind->getNameById(si.id, si.node) << " catch "<< ex << endl; unideb[Debug::WARN] << myname << "(askSensor): " << conf->oind->getNameById(si.id, si.node) << " catch "<< ex << endl;
} }
catch( CORBA::SystemException& ex ) catch( CORBA::SystemException& ex )
{ {
...@@ -439,13 +296,7 @@ void IONotifyController::ask(AskMap& askLst, const IOController_i::SensorInfo& s ...@@ -439,13 +296,7 @@ void IONotifyController::ask(AskMap& askLst, const IOController_i::SensorInfo& s
} }
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool IONotifyController::myDFilter(const UniDigitalIOInfo& di, bool IONotifyController::myIOFilter(const USensorIOInfo& ai,
CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id)
{
return ( di.state == newstate ) ? false : true;
}
// ------------------------------------------------------------------------------------------
bool IONotifyController::myAFilter(const UniAnalogIOInfo& ai,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id) CORBA::Long newvalue, UniSetTypes::ObjectId sup_id)
{ {
if( ai.value == newvalue ) if( ai.value == newvalue )
...@@ -460,71 +311,16 @@ bool IONotifyController::myAFilter(const UniAnalogIOInfo& ai, ...@@ -460,71 +311,16 @@ bool IONotifyController::myAFilter(const UniAnalogIOInfo& ai,
return true; return true;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void IONotifyController::localSaveState( IOController::DIOStateList::iterator& it, void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si,
CORBA::Boolean state,
UniSetTypes::ObjectId sup_id )
{
// Если датчик не найден здесь сработает исключение NameNotFound
bool prevState = IOController::localGetState( it, si );
IOController::localSaveState( it, si, state, sup_id );
// сравниваем именно с li->second.state
// т.к. фактическое сохранённое значение может быть изменено
// фильтрами или блокировками..
SensorMessage sm(si.id, state);
{ // lock
uniset_rwmutex_rlock lock(it->second.val_lock);
if( prevState == it->second.state )
return;
// Уведомления рассылаем только в случае смены состояния...
sm.id = si.id;
sm.node = si.node;
sm.state = it->second.state;
sm.value = it->second.state ? 1:0;
sm.undefined = it->second.undefined;
sm.priority = (Message::Priority)it->second.priority;
sm.supplier = sup_id;
sm.sensor_type = it->second.type;
sm.sm_tv_sec = it->second.tv_sec;
sm.sm_tv_usec = it->second.tv_usec;
} // unlock
try
{
uniset_rwmutex_rlock l(sig_mutex);
changeSignal.emit(&sm);
}
catch(...){}
try
{
if( !it->second.db_ignore )
loggingInfo(sm);
}
catch(...){}
AskMap::iterator it1 = askDIOList.find( key(si.id,si.node) );
if( it1!=askDIOList.end() )
{ // lock
//uniset_mutex_lock lock(askDMutex, 1000);
uniset_rwmutex_rlock lock(askDMutex);
send(it1->second, sm);
} // unlock
}
// ------------------------------------------------------------------------------------------
void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& li,
const IOController_i::SensorInfo& si, const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id ) CORBA::Long value, UniSetTypes::ObjectId sup_id )
{ {
// Если датчик не найден сдесь сработает исключение // Если датчик не найден сдесь сработает исключение
long prevValue = IOController::localGetValue( li, si ); long prevValue = IOController::localGetValue( li, si );
if( li == myaioEnd() ) // ??? if( li == myioEnd() ) // ???
{ {
ostringstream err; ostringstream err;
err << myname << "(localSaveValue): аналоговый вход(выход) с именем " err << myname << "(localSetValue): аналоговый вход(выход) с именем "
<< conf->oind->getNameById(si.id) << " не найден"; << conf->oind->getNameById(si.id) << " не найден";
if( unideb.debugging(Debug::INFO) ) if( unideb.debugging(Debug::INFO) )
...@@ -532,7 +328,7 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l ...@@ -532,7 +328,7 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
throw IOController_i::NameNotFound(err.str().c_str()); throw IOController_i::NameNotFound(err.str().c_str());
} }
IOController::localSaveValue(li,si, value,sup_id); IOController::localSetValue(li,si, value,sup_id);
// сравниваем именно с li->second.value // сравниваем именно с li->second.value
// т.к. фактическое сохранённое значение может быть изменено // т.к. фактическое сохранённое значение может быть изменено
...@@ -547,7 +343,6 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l ...@@ -547,7 +343,6 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
// Рассылаем уведомления только в слуае изменения значения // Рассылаем уведомления только в слуае изменения значения
sm.id = si.id; sm.id = si.id;
sm.node = si.node; sm.node = si.node;
sm.state = li->second.value!=0 ? true:false;
sm.value = li->second.value; sm.value = li->second.value;
sm.undefined = li->second.undefined; sm.undefined = li->second.undefined;
sm.priority = (Message::Priority)li->second.priority; sm.priority = (Message::Priority)li->second.priority;
...@@ -573,10 +368,10 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l ...@@ -573,10 +368,10 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
} }
catch(...){} catch(...){}
AskMap::iterator it = askAIOList.find( key(si.id,si.node) ); AskMap::iterator it = askIOList.find( key(si.id,si.node) );
if( it!=askAIOList.end() ) if( it!=askIOList.end() )
{ // lock { // lock
uniset_rwmutex_rlock lock(askAMutex); uniset_rwmutex_rlock lock(askIOMutex);
send(it->second, sm); send(it->second, sm);
} }
...@@ -677,29 +472,8 @@ void IONotifyController::dumpOrdersList(const IOController_i::SensorInfo& si, ...@@ -677,29 +472,8 @@ void IONotifyController::dumpOrdersList(const IOController_i::SensorInfo& si,
try try
{ {
NCRestorer::SInfo inf; NCRestorer::SInfo inf;
UniversalIO::IOTypes t(getIOType(si)); IOController_i::SensorIOInfo ainf( getSensorIOInfo(si) );
switch( t ) inf=ainf;
{
case UniversalIO::DigitalInput:
case UniversalIO::DigitalOutput:
{
IOController_i::DigitalIOInfo dinf(getDInfo(si));
inf=dinf;
}
break;
case UniversalIO::AnalogOutput:
case UniversalIO::AnalogInput:
{
IOController_i::AnalogIOInfo ainf(getAInfo(si));
inf=ainf;
}
break;
default:
return;
}
restorer->dump(this,inf,lst); restorer->dump(this,inf,lst);
} }
catch(Exception& ex) catch(Exception& ex)
...@@ -717,28 +491,8 @@ void IONotifyController::dumpThresholdList(const IOController_i::SensorInfo& si, ...@@ -717,28 +491,8 @@ void IONotifyController::dumpThresholdList(const IOController_i::SensorInfo& si,
try try
{ {
NCRestorer::SInfo inf; NCRestorer::SInfo inf;
UniversalIO::IOTypes t(getIOType(si)); IOController_i::SensorIOInfo ainf(getSensorIOInfo(si));
switch( t ) inf=ainf;
{
case UniversalIO::DigitalInput:
case UniversalIO::DigitalOutput:
{
IOController_i::DigitalIOInfo dinf(getDInfo(si));
inf=dinf;
}
break;
case UniversalIO::AnalogOutput:
case UniversalIO::AnalogInput:
{
IOController_i::AnalogIOInfo ainf(getAInfo(si));
inf=ainf;
}
break;
default:
return;
}
restorer->dumpThreshold(this,inf,lst); restorer->dumpThreshold(this,inf,lst);
} }
catch(Exception& ex) catch(Exception& ex)
...@@ -757,7 +511,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons ...@@ -757,7 +511,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
throw IONotifyController_i::BadRange(); throw IONotifyController_i::BadRange();
// если такого дискретного датчика нет сдесь сработает исключение... // если такого дискретного датчика нет сдесь сработает исключение...
AIOStateList::iterator li = myaioEnd(); IOStateList::iterator li = myioEnd();
CORBA::Long val = localGetValue(li,si); CORBA::Long val = localGetValue(li,si);
{ // lock { // lock
...@@ -767,7 +521,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons ...@@ -767,7 +521,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
UniSetTypes::KeyType skey( key(si.id,si.node) ); UniSetTypes::KeyType skey( key(si.id,si.node) );
AskThresholdMap::iterator it = askTMap.find(skey); AskThresholdMap::iterator it = askTMap.find(skey);
ThresholdInfoExt ti(tid,lowLimit, hiLimit,sb); ThresholdInfoExt ti(tid,lowLimit, hiLimit,sb);
ti.itSID = mydioEnd(); ti.itSID = myioEnd();
switch( cmd ) switch( cmd )
{ {
...@@ -781,7 +535,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons ...@@ -781,7 +535,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
tli.si = si; tli.si = si;
tli.list = lst; tli.list = lst;
tli.type = li->second.type; tli.type = li->second.type;
tli.ait = myaioEnd(); tli.ait = myioEnd();
addThreshold(lst,ti,ci); addThreshold(lst,ti,ci);
askTMap.insert(AskThresholdMap::value_type(skey,tli)); askTMap.insert(AskThresholdMap::value_type(skey,tli));
try try
...@@ -826,7 +580,6 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons ...@@ -826,7 +580,6 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
sm.id = si.id; sm.id = si.id;
sm.node = si.node; sm.node = si.node;
sm.value = val; sm.value = val;
sm.state = val!=0 ? true:false;
sm.undefined = li->second.undefined; sm.undefined = li->second.undefined;
sm.sensor_type = li->second.type; sm.sensor_type = li->second.type;
sm.priority = (Message::Priority)li->second.priority; sm.priority = (Message::Priority)li->second.priority;
...@@ -946,7 +699,7 @@ bool IONotifyController::removeThreshold(ThresholdExtList& lst, ThresholdInfoExt ...@@ -946,7 +699,7 @@ bool IONotifyController::removeThreshold(ThresholdExtList& lst, ThresholdInfoExt
return false; return false;
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
void IONotifyController::checkThreshold( AIOStateList::iterator& li, void IONotifyController::checkThreshold( IOStateList::iterator& li,
const IOController_i::SensorInfo& si, const IOController_i::SensorInfo& si,
bool send_msg ) bool send_msg )
{ {
...@@ -962,10 +715,10 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li, ...@@ -962,10 +715,10 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if( lst->second.list.empty() ) if( lst->second.list.empty() )
return; return;
if( li == myaioEnd() ) if( li == myioEnd() )
li = myafind(key(si.id, si.node)); li = myiofind(key(si.id, si.node));
if( li==myaioEnd() ) if( li==myioEnd() )
return; // ??? return; // ???
SensorMessage sm; SensorMessage sm;
...@@ -977,7 +730,6 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li, ...@@ -977,7 +730,6 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
{ {
uniset_rwmutex_rlock lock(li->second.val_lock); uniset_rwmutex_rlock lock(li->second.val_lock);
sm.value = li->second.value; sm.value = li->second.value;
sm.state = li->second.value!=0 ? true:false;
sm.undefined = li->second.undefined; sm.undefined = li->second.undefined;
sm.sm_tv_sec = li->second.tv_sec; sm.sm_tv_sec = li->second.tv_sec;
sm.sm_tv_usec = li->second.tv_usec; sm.sm_tv_usec = li->second.tv_usec;
...@@ -1018,7 +770,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li, ...@@ -1018,7 +770,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if( it->inverse ) if( it->inverse )
state^=1; state^=1;
localSaveState(it->itSID,SensorInfo(it->sid),state,getId()); localSetValue(it->itSID,SensorInfo(it->sid),(state ? 1:0),getId());
} }
catch( UniSetTypes::Exception& ex ) catch( UniSetTypes::Exception& ex )
{ {
...@@ -1028,7 +780,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li, ...@@ -1028,7 +780,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
} }
if( send_msg ) if( send_msg )
send(it->clst, sm); send(it->clst, sm);
} }
// Проверка верхнего предела // Проверка верхнего предела
// значение должно быть больше hiLimit+чуствительность // значение должно быть больше hiLimit+чуствительность
...@@ -1056,7 +808,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li, ...@@ -1056,7 +808,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if( it->inverse ) if( it->inverse )
state^=1; state^=1;
localSaveState(it->itSID,SensorInfo(it->sid),state,getId()); localSetValue(it->itSID,SensorInfo(it->sid),(state?1:0),getId());
} }
catch( UniSetTypes::Exception& ex ) catch( UniSetTypes::Exception& ex )
{ {
...@@ -1075,161 +827,8 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li, ...@@ -1075,161 +827,8 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
} }
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
void IONotifyController::askOutput(const IOController_i::SensorInfo& si, #if 0
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd) void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
{
// провреки на несуществующий выход проводить не надо т.к. заказчик принципиально
// не может обратится к этому контроллеру по ссылке на другой датчик
// (ведь ссылка на датчик это ссылка на контроллер который за него отвечает)
// контроль заказа типа выхода здесь производится
string name = conf->oind->getNameById(ci.id, ci.node);
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << "(askOutput): поступил " << ( cmd == UIODontNotify ? "отказ" :"заказ" )
<< " от ("<< ci.id << ") "
<< name << " на выход "
<< conf->oind->getNameById(si.id,si.node) << endl;
}
// если такого выхода нет, то здесь сработает исключение...
IOTypes type = IOController::getIOType(si);
switch(type)
{
case UniversalIO::DigitalOutput:
{ //lock
uniset_rwmutex_wrlock lock(askDOMutex);
// а раз есть заносим(исключаем) заказчика
ask( askDOList, si, ci, cmd );
} // unlock
break;
case UniversalIO::AnalogOutput:
{ //lock
uniset_rwmutex_wrlock lock(askAOMutex);
// а раз есть заносим(исключаем) заказчика
ask( askAOList, si, ci, cmd );
} // unlock
break;
default:
{
ostringstream err;
err << myname << "(askOutput): 'выход' с именем " << conf->oind->getNameById(si.id) << " не найден";
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
break;
}
// посылка первый раз состояния
if( cmd==UniversalIO::UIONotify )
{
try
{
SensorMessage smsg;
smsg.id = si.id;
smsg.node = si.node;
try
{
if( type == UniversalIO::AnalogOutput )
{
smsg.value = IOController::getValue(si);
smsg.state = smsg.value!=0 ? true:false;
}
else
{
smsg.state = IOController::getState(si);
smsg.value = smsg.state ? 1:0;
}
smsg.undefined = false;
}
catch( IOController_i::Undefined )
{
smsg.undefined = true;
}
smsg.consumer = ci.id;
smsg.sensor_type = type;
smsg.supplier = getId();
TransportMessage tm(smsg.transport_msg());
ui.send(ci.id, tm, ci.node);
}
catch(Exception& ex)
{
unideb[Debug::WARN] << myname << "(askOutput): " << name << " "<< ex << endl;
}
catch( CORBA::SystemException& ex )
{
unideb[Debug::WARN] << myname << "(askOutput): " << name
<< " недоступен!!(CORBA::SystemException)"
<< ex.NP_minorString() << endl;
}
catch(...){}
}
}
// --------------------------------------------------------------------------------------------------------------
void IONotifyController::localSetState( IOController::DIOStateList::iterator& it,
const IOController_i::SensorInfo& si,
CORBA::Boolean state, UniSetTypes::ObjectId sup_id )
{
// Если датчик не найден сдесь сработает исключение NameNotFound
bool prevState = IOController::localGetState( it, si );
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << myname << "(IONotifyController::setState): state=" << state
<< " для выхода " << conf->oind->getNameById(si.id,si.node) << endl;
}
// сохраняем состояние
IOController::localSetState(it,si,state,sup_id);
// Рассылаем уведомления только если значение изменилось...
SensorMessage sm(si.id, state);
{ // lock
uniset_rwmutex_rlock lock(it->second.val_lock);
if( prevState == it->second.state )
return;
sm.id = si.id;
sm.node = si.node;
sm.state = it->second.state;
sm.value = sm.state ? 1:0;
sm.undefined = it->second.undefined;
sm.priority = (Message::Priority)it->second.priority;
sm.sm_tv_sec = it->second.tv_sec;
sm.sm_tv_usec = it->second.tv_usec;
sm.sensor_type = it->second.type;
sm.supplier = sup_id;
} // unlock
try
{
uniset_rwmutex_rlock l(sig_mutex);
changeSignal.emit(&sm);
}
catch(...){}
try
{
if( !it->second.db_ignore )
loggingInfo(sm);
}
catch(...){}
AskMap::iterator ait = askDOList.find( UniSetTypes::key(si.id,si.node) );
if( ait!=askDOList.end() )
{ // lock
uniset_rwmutex_rlock lock(askDMutex);
send(ait->second, sm);
} // unlock
}
// --------------------------------------------------------------------------------------------------------------
void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li,
const IOController_i::SensorInfo& si, const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id ) CORBA::Long value, UniSetTypes::ObjectId sup_id )
{ {
...@@ -1281,7 +880,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li ...@@ -1281,7 +880,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li
AskMap::iterator dit = askAOList.find( UniSetTypes::key(si.id,si.node) ); AskMap::iterator dit = askAOList.find( UniSetTypes::key(si.id,si.node) );
if( dit!=askAOList.end() ) if( dit!=askAOList.end() )
{ // lock { // lock
uniset_rwmutex_rlock lock(askAMutex); uniset_rwmutex_rlock lock(askIOMutex);
send(dit->second, sm); send(dit->second, sm);
} }
...@@ -1292,7 +891,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li ...@@ -1292,7 +891,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li
// } // }
// catch(...){} // catch(...){}
} }
#endif
// -------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------
IONotifyController::ThresholdExtList::iterator IONotifyController::findThreshold( UniSetTypes::KeyType key, UniSetTypes::ThresholdId tid ) IONotifyController::ThresholdExtList::iterator IONotifyController::findThreshold( UniSetTypes::KeyType key, UniSetTypes::ThresholdId tid )
...@@ -1386,39 +985,28 @@ void IONotifyController::onChangeUndefined( DependsList::iterator it, bool undef ...@@ -1386,39 +985,28 @@ void IONotifyController::onChangeUndefined( DependsList::iterator it, bool undef
sm.node = it->si.node; sm.node = it->si.node;
sm.undefined = undefined; sm.undefined = undefined;
if( it->dit != mydioEnd() ) if( it->it != myioEnd() )
{
sm.state = it->dit->second.state;
sm.value = sm.state ? 1:0;
sm.sm_tv_sec = it->dit->second.tv_sec;
sm.sm_tv_usec = it->dit->second.tv_usec;
sm.priority = (Message::Priority)it->dit->second.priority;
sm.sensor_type = it->dit->second.type;
sm.supplier = DefaultObjectId;
}
else if( it->ait != myaioEnd() )
{ {
sm.value = it->ait->second.value; sm.value = it->it->second.value;
sm.state = sm.value!=0 ? true:false; sm.sm_tv_sec = it->it->second.tv_sec;
sm.sm_tv_sec = it->ait->second.tv_sec; sm.sm_tv_usec = it->it->second.tv_usec;
sm.sm_tv_usec = it->ait->second.tv_usec; sm.priority = (Message::Priority)it->it->second.priority;
sm.priority = (Message::Priority)it->ait->second.priority; sm.sensor_type = it->it->second.type;
sm.sensor_type = it->ait->second.type; sm.ci = it->it->second.ci;
sm.ci = it->ait->second.ci;
sm.supplier = DefaultObjectId; sm.supplier = DefaultObjectId;
} }
try try
{ {
if( !it->ait->second.db_ignore ) if( !it->it->second.db_ignore )
loggingInfo(sm); loggingInfo(sm);
} }
catch(...){} catch(...){}
AskMap::iterator it1 = askDIOList.find( key(it->si.id,it->si.node) ); AskMap::iterator it1 = askIOList.find( key(it->si.id,it->si.node) );
if( it1!=askDIOList.end() ) if( it1!=askIOList.end() )
{ // lock { // lock
uniset_rwmutex_rlock lock(askDMutex); uniset_rwmutex_rlock lock(askIOMutex);
send(it1->second, sm); send(it1->second, sm);
} // unlock } // unlock
} }
......
...@@ -970,7 +970,7 @@ xmlNode* Configuration::getXMLObjectNode( UniSetTypes::ObjectId id ) ...@@ -970,7 +970,7 @@ xmlNode* Configuration::getXMLObjectNode( UniSetTypes::ObjectId id )
return 0; return 0;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
UniversalIO::IOTypes Configuration::getIOType( UniSetTypes::ObjectId id ) UniversalIO::IOType Configuration::getIOType( UniSetTypes::ObjectId id )
{ {
const ObjectInfo* i = oind->getObjectInfo(id); const ObjectInfo* i = oind->getObjectInfo(id);
if( i && (xmlNode*)(i->data) ) if( i && (xmlNode*)(i->data) )
...@@ -982,7 +982,7 @@ UniversalIO::IOTypes Configuration::getIOType( UniSetTypes::ObjectId id ) ...@@ -982,7 +982,7 @@ UniversalIO::IOTypes Configuration::getIOType( UniSetTypes::ObjectId id )
return UniversalIO::UnknownIOType; return UniversalIO::UnknownIOType;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
UniversalIO::IOTypes Configuration::getIOType( const std::string name ) UniversalIO::IOType Configuration::getIOType( const std::string name )
{ {
// Если указано "короткое" имя // Если указано "короткое" имя
// то просто сперва ищём ID, а потом по нему // то просто сперва ищём ID, а потом по нему
......
...@@ -71,10 +71,9 @@ VoidMessage::VoidMessage() ...@@ -71,10 +71,9 @@ VoidMessage::VoidMessage()
//-------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------
SensorMessage::SensorMessage(): SensorMessage::SensorMessage():
id(DefaultObjectId), id(DefaultObjectId),
state(false),
value(0), value(0),
undefined(false), undefined(false),
sensor_type(UniversalIO::DigitalInput), sensor_type(UniversalIO::DI),
threshold(false), threshold(false),
tid(UniSetTypes::DefaultThresholdId) tid(UniSetTypes::DefaultThresholdId)
{ {
...@@ -90,37 +89,10 @@ tid(UniSetTypes::DefaultThresholdId) ...@@ -90,37 +89,10 @@ tid(UniSetTypes::DefaultThresholdId)
ci.precision = 0; ci.precision = 0;
} }
SensorMessage::SensorMessage(ObjectId id, bool state, Priority priority,
UniversalIO::IOTypes st, ObjectId consumer):
id(id),
state(state),
value(0),
undefined(false),
sensor_type(st),
threshold(false),
tid(UniSetTypes::DefaultThresholdId)
{
value = state ? 1:0;
type = Message::SensorInfo;
this->priority = priority;
this->consumer = consumer;
sm_tv_sec = tm.tv_sec;
sm_tv_usec = tm.tv_usec;
ci.minRaw = 0;
ci.maxRaw = 0;
ci.minCal = 0;
ci.maxCal = 0;
ci.sensibility = 0;
ci.precision = 0;
}
SensorMessage::SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci, SensorMessage::SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci,
Priority priority, Priority priority,
UniversalIO::IOTypes st, ObjectId consumer): UniversalIO::IOType st, ObjectId consumer):
id(id), id(id),
state(false),
value(value), value(value),
undefined(false), undefined(false),
sensor_type(st), sensor_type(st),
...@@ -128,7 +100,6 @@ ci(ci), ...@@ -128,7 +100,6 @@ ci(ci),
threshold(false), threshold(false),
tid(UniSetTypes::DefaultThresholdId) tid(UniSetTypes::DefaultThresholdId)
{ {
state = value != 0;
type = Message::SensorInfo; type = Message::SensorInfo;
this->priority = priority; this->priority = priority;
this->consumer = consumer; this->consumer = consumer;
......
...@@ -57,14 +57,11 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController ...@@ -57,14 +57,11 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
// Регистрируем (если не найден) // Регистрируем (если не найден)
switch(inf.type) switch(inf.type)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
case UniversalIO::DigitalOutput: case UniversalIO::DO:
ic->dsRegistration(inf); case UniversalIO::AI:
break; case UniversalIO::AO:
ic->ioRegistration(inf);
case UniversalIO::AnalogInput:
case UniversalIO::AnalogOutput:
ic->asRegistration(inf);
break; break;
default: default:
...@@ -79,20 +76,11 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController ...@@ -79,20 +76,11 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
switch(inf.type) switch(inf.type)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
ic->askDIOList[k]=lst; case UniversalIO::AI:
break; case UniversalIO::DO:
case UniversalIO::AO:
case UniversalIO::AnalogInput: ic->askIOList[k]=lst;
ic->askAIOList[k]=lst;
break;
case UniversalIO::DigitalOutput:
ic->askDOList[k]=lst;
break;
case UniversalIO::AnalogOutput:
ic->askAOList[k]=lst;
break; break;
default: default:
...@@ -117,14 +105,11 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC ...@@ -117,14 +105,11 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
// Регистрируем (если не найден) // Регистрируем (если не найден)
switch(inf.type) switch(inf.type)
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
case UniversalIO::DigitalOutput: case UniversalIO::DO:
ic->dsRegistration(inf); case UniversalIO::AI:
break; case UniversalIO::AO:
ic->ioRegistration(inf);
case UniversalIO::AnalogInput:
case UniversalIO::AnalogOutput:
ic->asRegistration(inf);
break; break;
default: default:
...@@ -135,26 +120,26 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC ...@@ -135,26 +120,26 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
// default init iterators // default init iterators
for( IONotifyController::ThresholdExtList::iterator it=lst.begin(); it!=lst.end(); ++it ) for( IONotifyController::ThresholdExtList::iterator it=lst.begin(); it!=lst.end(); ++it )
it->itSID = ic->mydioEnd(); it->itSID = ic->myioEnd();
UniSetTypes::KeyType k( key(inf.si.id,inf.si.node) ); UniSetTypes::KeyType k( key(inf.si.id,inf.si.node) );
ic->askTMap[k].si = inf.si; ic->askTMap[k].si = inf.si;
ic->askTMap[k].type = inf.type; ic->askTMap[k].type = inf.type;
ic->askTMap[k].list = lst; ic->askTMap[k].list = lst;
ic->askTMap[k].ait = ic->myaioEnd(); ic->askTMap[k].ait = ic->myioEnd();
try try
{ {
switch( inf.type ) switch( inf.type )
{ {
case UniversalIO::DigitalInput: case UniversalIO::DI:
case UniversalIO::DigitalOutput: case UniversalIO::DO:
case UniversalIO::AnalogOutput:
break; break;
case UniversalIO::AnalogInput: case UniversalIO::AO:
case UniversalIO::AI:
{ {
IOController::AIOStateList::iterator it(ic->myaioEnd()); IOController::IOStateList::iterator it(ic->myioEnd());
ic->checkThreshold(it,inf.si,false); ic->checkThreshold(it,inf.si,false);
} }
break; break;
...@@ -178,25 +163,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC ...@@ -178,25 +163,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
} }
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::DigitalIOInfo& inf) NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::SensorIOInfo& inf)
{
this->si = inf.si;
this->type = inf.type;
this->priority = inf.priority;
this->default_val = inf.default_val;
this->real_value = inf.real_state ? 1 : 0;
this->ci.minRaw = 0;
this->ci.maxRaw = 0;
this->ci.minCal = 0;
this->ci.maxCal = 0;
this->ci.sensibility = 0;
this->db_ignore = false;
this->undefined = false;
this->any = 0;
return *this;
}
// ------------------------------------------------------------------------------------------
NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::AnalogIOInfo& inf)
{ {
this->si = inf.si; this->si = inf.si;
this->type = inf.type; this->type = inf.type;
...@@ -210,18 +177,3 @@ NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::AnalogIOInfo& in ...@@ -210,18 +177,3 @@ NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::AnalogIOInfo& in
return *this; return *this;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
NCRestorer::SInfo::operator IOController::UniDigitalIOInfo()
{
IOController::UniDigitalIOInfo ret;
ret.state = this->value ? true : false;
ret.si = this->si;
ret.type = this->type;
ret.priority = this->priority;
ret.default_val = this->default_val ? true : false;
ret.any = this->any;
ret.undefined = this->undefined;
ret.db_ignore = this->db_ignore;
return ret;
}
// ------------------------------------------------------------------------------------------
...@@ -132,28 +132,14 @@ void NCRestorer_XML::read_list( UniXML& xml, xmlNode* node, IONotifyController* ...@@ -132,28 +132,14 @@ void NCRestorer_XML::read_list( UniXML& xml, xmlNode* node, IONotifyController*
switch(inf.type) switch(inf.type)
{ {
case UniversalIO::DigitalOutput: case UniversalIO::DO:
case UniversalIO::DigitalInput: case UniversalIO::DI:
{ case UniversalIO::AO:
try case UniversalIO::AI:
{
IOController::UniDigitalIOInfo dinf(inf);
dinf.real_state = dinf.state;
dsRegistration(ic,dinf,true);
}
catch(Exception& ex)
{
unideb[Debug::WARN] << "(read_list): " << ex << endl;
}
}
break;
case UniversalIO::AnalogOutput:
case UniversalIO::AnalogInput:
{ {
try try
{ {
asRegistration(ic, inf, true); ioRegistration(ic, inf, true);
} }
catch(Exception& ex) catch(Exception& ex)
{ {
...@@ -294,7 +280,7 @@ bool NCRestorer_XML::getSensorInfo( UniXML& xml, xmlNode* it, SInfo& inf ) ...@@ -294,7 +280,7 @@ bool NCRestorer_XML::getSensorInfo( UniXML& xml, xmlNode* it, SInfo& inf )
} }
// калибровка // калибровка
if( inf.type == UniversalIO::AnalogInput || inf.type == UniversalIO::AnalogOutput ) if( inf.type == UniversalIO::AI || inf.type == UniversalIO::AO )
{ {
inf.ci.minRaw = xml.getIntProp(it,"rmin"); inf.ci.minRaw = xml.getIntProp(it,"rmin");
inf.ci.maxRaw = xml.getIntProp(it,"rmax"); inf.ci.maxRaw = xml.getIntProp(it,"rmax");
...@@ -456,9 +442,9 @@ bool NCRestorer_XML::getThresholdInfo( UniXML& xml,xmlNode* node, ...@@ -456,9 +442,9 @@ bool NCRestorer_XML::getThresholdInfo( UniXML& xml,xmlNode* node,
} }
else else
{ {
UniversalIO::IOTypes iotype = conf->getIOType(ti.sid); UniversalIO::IOType iotype = conf->getIOType(ti.sid);
// Пока что IONotifyController поддерживает работу только с 'DI'. // Пока что IONotifyController поддерживает работу только с 'DI'.
if( iotype != UniversalIO::DigitalInput ) if( iotype != UniversalIO::DI )
{ {
unideb[Debug::CRIT] << "(NCRestorer_XML:getThresholdInfo): " unideb[Debug::CRIT] << "(NCRestorer_XML:getThresholdInfo): "
<< " Bad iotype(" << iotype << ") for " << sid_name << ". iotype must be 'DI'!" << endl; << " Bad iotype(" << iotype << ") for " << sid_name << ". iotype must be 'DI'!" << endl;
...@@ -580,9 +566,8 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll ...@@ -580,9 +566,8 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
continue; continue;
UniSetTypes::KeyType k = UniSetTypes::key(mydepinfo.si.id,mydepinfo.si.node); UniSetTypes::KeyType k = UniSetTypes::key(mydepinfo.si.id,mydepinfo.si.node);
mydepinfo.dit = dioFind(ic,k); mydepinfo.it = ioFind(ic,k);
mydepinfo.ait = aioFind(ic,k); if( mydepinfo.it==ioEnd(ic) )
if( mydepinfo.dit==dioEnd(ic) && mydepinfo.ait==aioEnd(ic) )
{ {
unideb[Debug::CRIT] << "(NCRestorer_XML:build_depends): Датчик " unideb[Debug::CRIT] << "(NCRestorer_XML:build_depends): Датчик "
<< xml.getProp(node,"name") << xml.getProp(node,"name")
...@@ -602,9 +587,8 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll ...@@ -602,9 +587,8 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
if( getDependsInfo(xml,dit,blk) ) if( getDependsInfo(xml,dit,blk) )
{ {
k = UniSetTypes::key(blk.si.id,blk.si.node); k = UniSetTypes::key(blk.si.id,blk.si.node);
blk.dit = dioFind(ic,k); blk.it = ioFind(ic,k);
blk.ait = aioFind(ic,k); if( blk.it==ioEnd(ic) )
if( blk.dit==dioEnd(ic) && blk.ait==aioEnd(ic) )
{ {
unideb[Debug::CRIT] << ic->getName() << "(NCRestorer_XML:build_depends): " unideb[Debug::CRIT] << ic->getName() << "(NCRestorer_XML:build_depends): "
<< " Не найдена зависимость на " << xml.getProp(dit,"name") << " Не найдена зависимость на " << xml.getProp(dit,"name")
...@@ -616,33 +600,22 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll ...@@ -616,33 +600,22 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
long block_val = dit.getIntProp("block_value"); long block_val = dit.getIntProp("block_value");
long defval = 0; long defval = 0;
if( blk.dit != dioEnd(ic) ) if( blk.it != ioEnd(ic) )
defval = blk.dit->second.default_val; defval = blk.it->second.default_val;
else if( blk.ait != aioEnd(ic) )
defval = blk.ait->second.default_val;
// Проверка начальных условий для высталения блокировки // Проверка начальных условий для высталения блокировки
bool blk_set = defval ? false : true; bool blk_set = defval ? false : true;
if( mydepinfo.block_invert ) if( mydepinfo.block_invert )
blk_set ^= true; blk_set ^= true;
if( mydepinfo.dit!=dioEnd(ic) ) if( mydepinfo.it!=ioEnd(ic) )
{
mydepinfo.dit->second.blocked = blk_set;
mydepinfo.dit->second.block_state = (bool)block_val;
mydepinfo.dit->second.state = defval;
mydepinfo.dit->second.real_state = defval;
if( blk_set )
mydepinfo.dit->second.state = (bool)block_val;
}
else if( mydepinfo.ait!=aioEnd(ic) )
{ {
mydepinfo.ait->second.blocked = blk_set; mydepinfo.it->second.blocked = blk_set;
mydepinfo.ait->second.block_value = block_val; mydepinfo.it->second.block_value = block_val;
if( blk_set ) if( blk_set )
{ {
mydepinfo.ait->second.real_value = mydepinfo.ait->second.value; mydepinfo.it->second.real_value = mydepinfo.it->second.value;
mydepinfo.ait->second.value = block_val; mydepinfo.it->second.value = block_val;
} }
} }
...@@ -650,21 +623,9 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll ...@@ -650,21 +623,9 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
// (без проверки на дублирование // (без проверки на дублирование
// т.к. не может быть два одинаковых ID // т.к. не может быть два одинаковых ID
// в конф. файле... // в конф. файле...
if( blk.dit != dioEnd(ic) ) if( blk.it != ioEnd(ic) )
{
blk.dit->second.dlst.push_back(mydepinfo);
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << ic->getName() << "(NCRestorer_XML:build_depends):"
<< " add " << xml.getProp(it,"name")
<< " to list of depends for " << xml.getProp(dit,"name")
<< " blk_set=" << blk_set
<< endl;
}
}
else if( blk.ait != aioEnd(ic) )
{ {
blk.ait->second.dlst.push_back(mydepinfo); blk.it->second.dlst.push_back(mydepinfo);
if( unideb.debugging(Debug::INFO) ) if( unideb.debugging(Debug::INFO) )
{ {
unideb[Debug::INFO] << ic->getName() << "(NCRestorer_XML:build_depends):" unideb[Debug::INFO] << ic->getName() << "(NCRestorer_XML:build_depends):"
......
...@@ -130,12 +130,7 @@ void SMonitor::sensorInfo( SensorMessage *si ) ...@@ -130,12 +130,7 @@ void SMonitor::sensorInfo( SensorMessage *si )
cout << "(" << setw(6) << si->id << "): " << setw(8) << UniversalInterface::timeToString(si->sm_tv_sec,":") cout << "(" << setw(6) << si->id << "): " << setw(8) << UniversalInterface::timeToString(si->sm_tv_sec,":")
<< "(" << setw(6) << si->sm_tv_usec << "): "; << "(" << setw(6) << si->sm_tv_usec << "): ";
cout << setw(45) << conf->oind->getMapName(si->id); cout << setw(45) << conf->oind->getMapName(si->id);
if( si->sensor_type == UniversalIO::DigitalInput || si->sensor_type == UniversalIO::DigitalOutput ) cout << "\tvalue=" << si->value << "\tfvalue=" << ( (float)si->value / pow(10.0,si->ci.precision) ) << endl;
cout << "\tstate=" << si->state << endl;
else if( si->sensor_type == UniversalIO::AnalogInput || si->sensor_type == UniversalIO::AnalogOutput )
cout << "\tvalue=" << si->value << "\tfvalue=" << ( (float)si->value / pow(10.0,si->ci.precision) ) << endl;
if( !script.empty() ) if( !script.empty() )
{ {
...@@ -147,13 +142,7 @@ void SMonitor::sensorInfo( SensorMessage *si ) ...@@ -147,13 +142,7 @@ void SMonitor::sensorInfo( SensorMessage *si )
else else
cmd << conf->getBinDir() << script; cmd << conf->getBinDir() << script;
cmd << " " << si->id << " "; cmd << " " << si->id << " " << si->value << " " << si->sm_tv_sec << " " << si->sm_tv_usec;
if( si->sensor_type == UniversalIO::DigitalInput || si->sensor_type == UniversalIO::DigitalOutput )
cmd << si->state;
else if( si->sensor_type == UniversalIO::AnalogInput || si->sensor_type == UniversalIO::AnalogOutput )
cmd << si->value;
cmd << " " << si->sm_tv_sec << " " << si->sm_tv_usec;
(void)system(cmd.str().c_str()); (void)system(cmd.str().c_str());
// if( WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT)) // if( WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
......
...@@ -63,7 +63,7 @@ void STLStorage::saveState(const IOController_i::DigitalIOInfo& di,bool st) ...@@ -63,7 +63,7 @@ void STLStorage::saveState(const IOController_i::DigitalIOInfo& di,bool st)
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void STLStorage::saveValue(const IOController_i::AnalogIOInfo& ai, long val) void STLStorage::saveValue(const IOController_i::SensorIOInfo& ai, long val)
{ {
} }
......
...@@ -182,16 +182,11 @@ void SViewer::getInfo( ObjectId id ) ...@@ -182,16 +182,11 @@ void SViewer::getInfo( ObjectId id )
return; return;
} }
IOController_i::DSensorInfoSeq_var dmap = ioc->getDigitalSensorsMap(); IOController_i::SensorInfoSeq_var amap = ioc->getSensorsMap();
IOController_i::ASensorInfoSeq_var amap = ioc->getAnalogSensorsMap();
IONotifyController_i::ThresholdsListSeq_var tlst = ioc->getThresholdsList(); IONotifyController_i::ThresholdsListSeq_var tlst = ioc->getThresholdsList();
try try
{ updateDSensors(dmap, id); { updateSensors(amap, id);
}catch(...){};
try
{ updateASensors(amap, id);
}catch(...){} }catch(...){}
try try
...@@ -213,59 +208,16 @@ void SViewer::getInfo( ObjectId id ) ...@@ -213,59 +208,16 @@ void SViewer::getInfo( ObjectId id )
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
void SViewer::updateDSensors(IOController_i::DSensorInfoSeq_var& dmap, UniSetTypes::ObjectId oid ) void SViewer::updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetTypes::ObjectId oid )
{
string owner = ORepHelpers::getShortName(conf->oind->getMapName(oid));
cout << "\n======================================================\n" << owner;
cout << "\t Дискретные датчики";
cout << "\n------------------------------------------------------"<< endl;
int size = dmap->length();
for(int i=0; i<size; i++)
{
if( dmap[i].type == UniversalIO::DigitalInput )
{
// UniSetTypes::KeyType k = key(dmap[i].si.id, dmap[i].si.node);
string name(conf->oind->getNameById(dmap[i].si.id, dmap[i].si.node));
if( isShort )
name = ORepHelpers::getShortName(name);
string txtname( conf->oind->getTextName(dmap[i].si.id) );
printInfo(dmap[i].si.id, name, dmap[i].state, owner, txtname,"DI");
}
}
cout << "------------------------------------------------------\n";
cout << "\n======================================================\n" << owner;
cout << "\t Дискретные выходы";
cout << "\n------------------------------------------------------"<< endl;
for(int i=0; i<size; i++)
{
if( dmap[i].type == UniversalIO::DigitalOutput )
{
// UniSetTypes::KeyType k = key(dmap[i].si.id, dmap[i].si.node);
string name(conf->oind->getNameById(dmap[i].si.id, dmap[i].si.node));
if( isShort )
name = ORepHelpers::getShortName(name);
string txtname( conf->oind->getTextName(dmap[i].si.id) );
printInfo(dmap[i].si.id, name, dmap[i].state, owner, txtname, "DO");
}
}
cout << "------------------------------------------------------\n";
}
// ---------------------------------------------------------------------------
void SViewer::updateASensors(IOController_i::ASensorInfoSeq_var& amap, UniSetTypes::ObjectId oid)
{ {
string owner = ORepHelpers::getShortName(conf->oind->getMapName(oid)); string owner = ORepHelpers::getShortName(conf->oind->getMapName(oid));
cout << "\n======================================================\n" << owner; cout << "\n======================================================\n" << owner;
cout << "\t Аналоговые датчики"; cout << "\t Датчики";
cout << "\n------------------------------------------------------"<< endl; cout << "\n------------------------------------------------------"<< endl;
int size = amap->length(); int size = amap->length();
for(int i=0; i<size; i++) for(int i=0; i<size; i++)
{ {
if( amap[i].type == UniversalIO::AnalogInput ) if( amap[i].type == UniversalIO::AI || amap[i].type == UniversalIO::DI )
{ {
// UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node); // UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node);
string name(conf->oind->getNameById(amap[i].si.id, amap[i].si.node)); string name(conf->oind->getNameById(amap[i].si.id, amap[i].si.node));
...@@ -278,11 +230,11 @@ void SViewer::updateASensors(IOController_i::ASensorInfoSeq_var& amap, UniSetTyp ...@@ -278,11 +230,11 @@ void SViewer::updateASensors(IOController_i::ASensorInfoSeq_var& amap, UniSetTyp
cout << "------------------------------------------------------\n"; cout << "------------------------------------------------------\n";
cout << "\n======================================================\n" << owner; cout << "\n======================================================\n" << owner;
cout << "\t Аналоговые выходы"; cout << "\t Выходы";
cout << "\n------------------------------------------------------"<< endl; cout << "\n------------------------------------------------------"<< endl;
for(int i=0; i<size; i++) for(int i=0; i<size; i++)
{ {
if( amap[i].type == UniversalIO::AnalogOutput ) if( amap[i].type == UniversalIO::AO || amap[i].type == UniversalIO::DO )
{ {
// UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node); // UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node);
string name(conf->oind->getNameById(amap[i].si.id, amap[i].si.node)); string name(conf->oind->getNameById(amap[i].si.id, amap[i].si.node));
...@@ -309,11 +261,11 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls ...@@ -309,11 +261,11 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls
cout << "(" << setw(5) << tlst[i].si.id << ") | "; cout << "(" << setw(5) << tlst[i].si.id << ") | ";
switch( tlst[i].type ) switch( tlst[i].type )
{ {
case UniversalIO::AnalogInput: case UniversalIO::AI:
cout << "AI"; cout << "AI";
break; break;
case UniversalIO::AnalogOutput: case UniversalIO::AO:
cout << "AO"; cout << "AO";
break; break;
......
...@@ -14,7 +14,7 @@ int main(int argc, const char **argv) ...@@ -14,7 +14,7 @@ int main(int argc, const char **argv)
cout << "--confile - Configuration file. Default: test.xml" << endl; cout << "--confile - Configuration file. Default: test.xml" << endl;
return 0; return 0;
} }
cout << "**** uni_atoi('')=" << uni_atoi("") << endl; cout << "**** uni_atoi('')=" << uni_atoi("") << endl;
try try
...@@ -32,38 +32,37 @@ int main(int argc, const char **argv) ...@@ -32,38 +32,37 @@ int main(int argc, const char **argv)
string mn(conf->oind->getMapName(1)); string mn(conf->oind->getMapName(1));
cout << "**** check getMapName: " << ( mn.empty() ? "FAILED" : "OK" ) << endl; cout << "**** check getMapName: " << ( mn.empty() ? "FAILED" : "OK" ) << endl;
UniversalIO::IOTypes t1=conf->getIOType(1); UniversalIO::IOType t1=conf->getIOType(1);
cout << "**** getIOType for " << mn << endl; cout << "**** getIOType for " << mn << endl;
cout << "**** check getIOType(id): (" << t1 << ") " << ( t1 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl; cout << "**** check getIOType(id): (" << t1 << ") " << ( t1 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
UniversalIO::IOTypes t2=conf->getIOType(mn); UniversalIO::IOType t2=conf->getIOType(mn);
cout << "**** check getIOType(name): (" << t2 << ") " << ( t2 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl; cout << "**** check getIOType(name): (" << t2 << ") " << ( t2 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
UniversalIO::IOTypes t3=conf->getIOType("Input1_S"); UniversalIO::IOType t3=conf->getIOType("Input1_S");
cout << "**** check getIOType(name): for short name 'Input1_S': (" << t3 << ") " << ( t3 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl; cout << "**** check getIOType(name): for short name 'Input1_S': (" << t3 << ") " << ( t3 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
int i1 = uni_atoi("-100"); int i1 = uni_atoi("-100");
cout << "**** check uni_atoi: '-100' " << ( ( i1 != -100 ) ? "FAILED" : "OK" ) << endl; cout << "**** check uni_atoi: '-100' " << ( ( i1 != -100 ) ? "FAILED" : "OK" ) << endl;
int i2 = uni_atoi("20"); int i2 = uni_atoi("20");
cout << "**** check uni_atoi: '20' " << ( ( i2 != 20 ) ? "FAILED" : "OK" ) << endl; cout << "**** check uni_atoi: '20' " << ( ( i2 != 20 ) ? "FAILED" : "OK" ) << endl;
xmlNode* cnode = conf->getNode("testnode"); xmlNode* cnode = conf->getNode("testnode");
if( cnode == NULL ) if( cnode == NULL )
{ {
cerr << "<testnode name='testnode'> not found" << endl; cerr << "<testnode name='testnode'> not found" << endl;
return 1; return 1;
} }
cout << "**** check conf->getNode function [OK] " << endl; cout << "**** check conf->getNode function [OK] " << endl;
UniXML_iterator it(cnode); UniXML_iterator it(cnode);
int prop2 = conf->getArgInt("--prop-id2",it.getProp("id2")); int prop2 = conf->getArgInt("--prop-id2",it.getProp("id2"));
cerr << "**** check conf->getArgInt(arg1,...): " << ( (prop2 == 0) ? "[FAILED]" : "OK" ) << endl; cerr << "**** check conf->getArgInt(arg1,...): " << ( (prop2 == 0) ? "[FAILED]" : "OK" ) << endl;
int prop3 = conf->getArgInt("--prop-dummy",it.getProp("id2")); int prop3 = conf->getArgInt("--prop-dummy",it.getProp("id2"));
cerr << "**** check conf->getArgInt(...,arg2): " << ( (prop3 != -100) ? "[FAILED]" : "OK" ) << endl; cerr << "**** check conf->getArgInt(...,arg2): " << ( (prop3 != -100) ? "[FAILED]" : "OK" ) << endl;
int prop1 = conf->getArgPInt("--prop-id2",it.getProp("id2"),0); int prop1 = conf->getArgPInt("--prop-id2",it.getProp("id2"),0);
cerr << "**** check conf->getArgPInt(...): " << ( (prop1 == 0) ? "[FAILED]" : "OK" ) << endl; cerr << "**** check conf->getArgPInt(...): " << ( (prop1 == 0) ? "[FAILED]" : "OK" ) << endl;
...@@ -72,10 +71,10 @@ int main(int argc, const char **argv) ...@@ -72,10 +71,10 @@ int main(int argc, const char **argv)
int prop5 = conf->getArgPInt("--prop-dummy",it.getProp("dummy"),0); int prop5 = conf->getArgPInt("--prop-dummy",it.getProp("dummy"),0);
cerr << "**** check conf->getArgPInt(...,...,defval): " << ( (prop5 != 0) ? "[FAILED]" : "OK" ) << endl; cerr << "**** check conf->getArgPInt(...,...,defval): " << ( (prop5 != 0) ? "[FAILED]" : "OK" ) << endl;
return 0; return 0;
} }
catch(SystemError& err) catch(SystemError& err)
......
...@@ -22,9 +22,9 @@ int main( int argc, const char **argv ) ...@@ -22,9 +22,9 @@ int main( int argc, const char **argv )
} }
cout << "** check getConfIOType function **" << endl; cout << "** check getConfIOType function **" << endl;
UniversalIO::IOTypes t = ui.getConfIOType(id1); UniversalIO::IOType t = ui.getConfIOType(id1);
cout << "sensor ID=" << id1 << " iotype=" << t << endl; cout << "sensor ID=" << id1 << " iotype=" << t << endl;
if( t != UniversalIO::DigitalInput ) if( t != UniversalIO::DI )
{ {
cout << "** FAILED! check getSensorID function **" << endl; cout << "** FAILED! check getSensorID function **" << endl;
return 1; return 1;
......
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