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

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

parent 8e80c2fd
......@@ -57,7 +57,6 @@ interface IOController_i : ObjectsManager_i
{
};
/*! Информация о датчике */
struct SensorInfo
{
......@@ -118,8 +117,7 @@ interface IOController_i : ObjectsManager_i
typedef sequence<SensorIOInfo> SensorInfoSeq;
SensorInfoSeq getSensorsMap();
SensorIOInfo getSInfo(in SensorInfo si) raises(NameNotFound);
SensorIOInfo getSensorIOInfo( in SensorInfo si ) raises(NameNotFound);
// -- Функции работы со списком датчиков --
......
......@@ -37,7 +37,6 @@ static struct option longopts[] = {
{ "create", no_argument, 0, 'b' },
{ "exist", no_argument, 0, 'e' },
{ "omap", no_argument, 0, 'o' },
{ "msgmap", no_argument, 0, 'm' },
{ "start", no_argument, 0, 's' },
{ "finish", no_argument, 0, 'f' },
{ "foldUp", no_argument, 0, 'u' },
......@@ -49,7 +48,6 @@ static struct option longopts[] = {
{ "getRawValue", required_argument, 0, 'w' },
{ "getCalibrate", required_argument, 0, 'y' },
{ "oinfo", required_argument, 0, 'p' },
{ "verbose", no_argument, 0, 'v' },
{ NULL, 0, 0, 0 }
};
......@@ -60,7 +58,6 @@ static bool commandToAll( const string& section, ObjectRepository *rep, Command
static void createSections( UniSetTypes::Configuration* c );
// --------------------------------------------------------------------------
int omap();
int msgmap();
int configure( const string& args, UniversalInterface &ui );
int logRotate( const string& args, UniversalInterface &ui );
int setValue( const string& args, UniversalInterface &ui, Configuration* conf = UniSetTypes::conf );
......@@ -96,7 +93,6 @@ static void usage()
print_help(24, "-b|--create ","Создание репозитория\n");
print_help(24, "-e|--exist ","Вызов функции exist() показывающей какие объекты зарегистрированы и доступны.\n");
print_help(24, "-o|--omap ","Вывод на экран списка объектов с идентификаторами.\n");
print_help(24, "-m|--msgmap ","Вывод на экран списка сообщений с идентификаторами.\n");
print_help(24, "-s|--start ","Посылка SystemMessage::StartUp всем объектам (процессам)\n");
print_help(24, "-u|--foldUp ","Посылка SystemMessage::FoldUp всем объектам (процессам)\n");
print_help(24, "-f|--finish ","Посылка SystemMessage::Finish всем объектам (процессам)\n");
......@@ -111,18 +107,17 @@ static void usage()
cout << endl;
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, "-v|--verbose","Подробный вывод логов.\n");
cout << endl;
}
// --------------------------------------------------------------------------------------
/*!
\todo Сделать по умолчанию режим silent и ключ --verbose.
\todo Оптимизировать commandToAll, т.к. сейчас НА КАЖДОМ ШАГЕ цикла
создаётся сообщение и происходит преобразование в TransportMessage.
TransportMessage можно создать один раз до цикла.
*/
// --------------------------------------------------------------------------------------
static bool verb = false;
int main(int argc, char** argv)
{
try
......@@ -130,18 +125,14 @@ int main(int argc, char** argv)
int optindex = 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
usage();
return 0;
case 'v':
verb=true;
break;
case 'c': //--confile
conffile = optarg;
break;
......@@ -151,7 +142,7 @@ int main(int argc, char** argv)
uniset_init(argc,argv,conffile);
return omap();
}
break;
break;
case 'b': //--create
{
......@@ -159,14 +150,7 @@ int main(int argc, char** argv)
createSections(conf);
}
return 0;
case 'm': //--msgmap
{
uniset_init(argc,argv,conffile);
return msgmap();
}
break;
case 'x': //--setValue
{
uniset_init(argc,argv,conffile);
......@@ -209,12 +193,11 @@ int main(int argc, char** argv)
UniversalInterface ui(conf);
Command cmd=Exist;
verb = true;
ObjectRepository* rep = new ObjectRepository(conf);
commandToAll(conf->getServicesSection(), rep, (Command)cmd);
commandToAll(conf->getControllersSection(), rep, (Command)cmd);
commandToAll(conf->getObjectsSection(), rep, (Command)cmd);
delete rep;
delete rep;
// cout<<"(exist): done"<<endl;
}
return 0;
......@@ -224,13 +207,13 @@ int main(int argc, char** argv)
// cout<<"(main):received option --start"<<endl;
uniset_init(argc,argv,conffile);
UniversalInterface ui(conf);
Command cmd=StartUp;
ObjectRepository* rep = new ObjectRepository(conf);
commandToAll(conf->getServicesSection(), rep, (Command)cmd);
commandToAll(conf->getControllersSection(), rep, (Command)cmd);
commandToAll(conf->getObjectsSection(), rep, (Command)cmd);
delete rep;
delete rep;
}
return 0;
......@@ -247,13 +230,13 @@ int main(int argc, char** argv)
// cout<<"(main):received option --finish"<<endl;
uniset_init(argc,argv,conffile);
UniversalInterface ui(conf);
Command cmd=Finish;
Command cmd=Finish;
ObjectRepository* rep = new ObjectRepository(conf);
commandToAll(conf->getServicesSection(), rep, (Command)cmd);
commandToAll(conf->getControllersSection(), rep, (Command)cmd);
commandToAll(conf->getObjectsSection(), rep, (Command)cmd);
delete rep;
delete rep;
cout<<"(finish): done"<<endl;
}
return 0;
......@@ -265,7 +248,7 @@ int main(int argc, char** argv)
return logRotate(optarg, ui);
}
break;
case 'y': //--getCalibrate
{
// cout<<"(main):received option --getCalibrate='"<<optarg<<"'"<<endl;
......@@ -281,12 +264,12 @@ int main(int argc, char** argv)
uniset_init(argc,argv,conffile);
UniversalInterface ui(conf);
Command cmd=FoldUp;
Command cmd=FoldUp;
ObjectRepository* rep = new ObjectRepository(conf);
commandToAll(conf->getServicesSection(), rep, (Command)cmd);
commandToAll(conf->getControllersSection(), rep, (Command)cmd);
commandToAll(conf->getObjectsSection(), rep, (Command)cmd);
delete rep;
delete rep;
// cout<<"(foldUp): done"<<endl;
}
return 0;
......@@ -297,40 +280,33 @@ int main(int argc, char** argv)
short_usage();
return 1;
}
}
}
}
return 0;
}
catch(Exception& ex)
{
if( verb )
cout <<"admin(main): " << ex << endl;
cout <<"admin(main): " << ex << endl;
}
catch(CORBA::SystemException& ex)
{
if( verb )
cerr << "поймали CORBA::SystemException:" << ex.NP_minorString() << endl;
cerr << "поймали CORBA::SystemException:" << ex.NP_minorString() << endl;
}
catch(CORBA::Exception&)
{
if( verb )
cerr << "поймали CORBA::Exception." << endl;
cerr << "поймали CORBA::Exception." << endl;
}
catch(omniORB::fatalException& fe)
{
if( verb )
{
cerr << "поймали omniORB::fatalException:" << endl;
cerr << " file: " << fe.file() << endl;
cerr << " line: " << fe.line() << endl;
cerr << " mesg: " << fe.errmsg() << endl;
}
cerr << "поймали omniORB::fatalException:" << endl;
cerr << " file: " << fe.file() << endl;
cerr << " line: " << fe.line() << endl;
cerr << " mesg: " << fe.errmsg() << endl;
}
catch(...)
{
if( verb )
cerr << "неизвестное исключение" << endl;
cerr << "неизвестное исключение" << endl;
}
return 1;
......@@ -339,17 +315,15 @@ int main(int argc, char** argv)
// ==============================================================================================
static bool commandToAll(const string& section, ObjectRepository *rep, Command cmd)
{
if( verb )
cout <<"\n||=======******** " << section << " ********=========||\n"<< endl;
cout <<"\n||=======******** " << section << " ********=========||\n"<< endl;
try
{
ListObjectName ls;
rep->list(section.c_str(),&ls);
if( ls.empty() )
if(ls.empty())
{
if( verb )
cout << "пусто!!!!!!" << endl;
cout << "пусто!!!!!!" << endl;
return false;
}
......@@ -377,8 +351,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if(CORBA::is_nil(obj)) break;
SystemMessage msg(SystemMessage::StartUp);
obj->push( Message::transport(msg) );
if( verb )
cout << setw(55) << ob <<" <--- start OK" << endl;
cout << setw(55) << ob <<" <--- start OK" << endl;
}
break;
......@@ -387,8 +360,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if(CORBA::is_nil(obj)) break;
SystemMessage msg(SystemMessage::FoldUp);
obj->push( Message::transport(msg) );
if( verb )
cout << setw(55) << ob << " <--- foldUp OK" << endl;
cout << setw(55) << ob << " <--- foldUp OK" << endl;
}
break;
......@@ -397,19 +369,15 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if(CORBA::is_nil(obj)) break;
SystemMessage msg(SystemMessage::Finish);
obj->push( Message::transport(msg) );
if( verb )
cout << setw(55)<< ob << " <--- finish OK" << endl;
cout << setw(55)<< ob << " <--- finish OK" << endl;
}
break;
case Exist:
{
if (obj->exist())
{
if( verb )
cout << setw(55) << ob << " <--- exist ok\n";
}
else if( verb )
cout << setw(55) << ob << " <--- exist ok\n";
else
cout << setw(55) << ob << " <--- exist NOT OK\n";
}
break;
......@@ -418,8 +386,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
{
SystemMessage sm(SystemMessage::ReConfiguration);
obj->push(sm.transport_msg());
if( verb )
cout << setw(55) << ob << " <--- configure ok\n";
cout << setw(55) << ob << " <--- configure ok\n";
}
break;
......@@ -427,28 +394,24 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
{
SystemMessage msg(SystemMessage::LogRotate);
obj->push( Message::transport(msg) );
if( verb )
cout << setw(55) << ob << " <--- logrotate ok\n";
cout << setw(55) << ob << " <--- logrotate ok\n";
break;
}
default:
{
if( verb )
cout << "неизвестная команда -" << cmd << endl;
cout << "неизвестная команда -" << cmd << endl;
return false;
}
}
}
catch(Exception& ex)
{
if( verb )
cout << setw(55) << ob << " <--- " << ex << endl;
cout << setw(55) << ob << " <--- " << ex << endl;
}
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 )
repf.createRootSection(rconf->getObjectsSection());
repf.createRootSection(rconf->getControllersSection());
repf.createRootSection(rconf->getServicesSection());
if( verb )
cout<<"(create): created"<<endl;
cout<<"(create): created"<<endl;
}
// ==============================================================================================
......@@ -486,30 +448,9 @@ int omap()
}
catch(Exception& ex)
{
if( verb )
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;;
unideb[Debug::CRIT] << " configuration init FAILED!!! \n";
return 1;
}
return 0;
}
......@@ -520,53 +461,38 @@ int setValue( const string& args, UniversalInterface &ui, Configuration* conf )
typedef std::list<UniSetTypes::ParamSInfo> SList;
SList sl = UniSetTypes::getSInfoList(args, conf);
if( verb )
cout << "====== setValue ======" << endl;
cout << "====== setValue ======" << endl;
for( SList::iterator it=sl.begin(); it!=sl.end(); it++ )
{
try
{
UniversalIO::IOTypes t = conf->getIOType(it->si.id);
if( verb )
{
cout << " value: " << it->val << endl;
cout << " name: (" << it->si.id << ") " << it->fname << endl;
cout << " iotype: " << t << endl;
cout << " text: " << conf->oind->getTextName(it->si.id) << "\n\n";
}
UniversalIO::IOType t = conf->getIOType(it->si.id);
cout << " value: " << it->val << endl;
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 )
it->si.node = conf->getLocalNode();
switch(t)
{
case UniversalIO::DigitalInput:
ui.saveState(it->si.id,(it->val?true:false),t,it->si.node);
break;
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:
case UniversalIO::DI:
case UniversalIO::DO:
case UniversalIO::AI:
case UniversalIO::AO:
ui.setValue(it->si.id,it->val,it->si.node);
break;
default:
if( verb )
cerr << "FAILED: Unknown 'iotype' for " << it->fname << endl;
cerr << "FAILED: Unknown 'iotype' for " << it->fname << endl;
err = 1;
break;
}
}
catch(Exception& ex)
{
if( verb )
cerr << "(setValue): " << ex << endl;;
cerr << "(setValue): " << ex << endl;;
err = 1;
}
}
......@@ -581,53 +507,37 @@ int getValue( const string& args, UniversalInterface &ui, Configuration* conf )
typedef std::list<UniSetTypes::ParamSInfo> SList;
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++ )
{
try
{
UniversalIO::IOTypes t = conf->getIOType(it->si.id);
if( verb )
{
cout << " name: (" << it->si.id << ") " << it->fname << endl;
cout << " iotype: " << t << endl;
cout << " text: " << conf->oind->getTextName(it->si.id) << "\n\n";
}
UniversalIO::IOType t = conf->getIOType(it->si.id);
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 )
it->si.node = conf->getLocalNode();
switch(t)
{
case UniversalIO::DigitalOutput:
case UniversalIO::DigitalInput:
if( verb )
cout << " state: " << ui.getState(it->si.id,it->si.node) << endl;
else
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);
case UniversalIO::DO:
case UniversalIO::DI:
case UniversalIO::AO:
case UniversalIO::AI:
cout << " value: " << ui.getValue(it->si.id,it->si.node) << endl;
break;
default:
if( verb )
cerr << "FAILED: Unknown 'iotype' for " << it->fname << endl;
cerr << "FAILED: Unknown 'iotype' for " << it->fname << endl;
err = 1;
break;
}
}
catch(Exception& ex)
{
if( verb )
cerr << "(getValue): " << ex << endl;
cerr << "(getValue): " << ex << endl;
err = 1;
}
}
......@@ -640,8 +550,7 @@ int getCalibrate( const std::string& args, UniversalInterface &ui )
int err = 0;
typedef std::list<UniSetTypes::ParamSInfo> SList;
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++ )
{
if( it->si.node == DefaultObjectId )
......@@ -671,30 +580,21 @@ int getRawValue( const std::string& args, UniversalInterface &ui )
int err = 0;
typedef std::list<UniSetTypes::ParamSInfo> SList;
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++ )
{
if( it->si.node == DefaultObjectId )
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
{
if( verb )
cout << " value: " << ui.getRawValue(it->si) << endl;
else
cout << " value: " << ui.getRawValue(it->si);
cout << " value: " << ui.getRawValue(it->si) << endl;
}
catch(Exception& ex)
{
if( verb )
cerr << "(getRawValue): " << ex << endl;;
cerr << "(getRawValue): " << ex << endl;;
err = 1;
}
}
......@@ -718,16 +618,14 @@ int logRotate( const string& arg, UniversalInterface &ui )
UniSetTypes::ObjectId id = conf->oind->getIdByName(arg);
if( id == DefaultObjectId )
{
if( verb )
cout << "(logrotate): name='" << arg << "' не найдено!!!\n";
cout << "(logrotate): name='" << arg << "' не найдено!!!\n";
return 1;
}
SystemMessage sm(SystemMessage::LogRotate);
TransportMessage tm(sm.transport_msg());
ui.send(id,tm);
if( verb )
cout << "\nSend 'LogRotate' to " << arg << " OK.\n";
cout << "\nSend 'LogRotate' to " << arg << " OK.\n";
}
return 0;
}
......@@ -749,15 +647,13 @@ int configure( const string& arg, UniversalInterface &ui )
UniSetTypes::ObjectId id = conf->oind->getIdByName(arg);
if( id == DefaultObjectId )
{
if( verb )
cout << "(configure): name='" << arg << "' не найдено!!!\n";
cout << "(configure): name='" << arg << "' не найдено!!!\n";
return 1;
}
SystemMessage sm(SystemMessage::ReConfiguration);
TransportMessage tm(sm.transport_msg());
ui.send(id,tm);
if( verb )
cout << "\nSend 'ReConfigure' to " << arg << " OK.\n";
cout << "\nSend 'ReConfigure' to " << arg << " OK.\n";
}
return 0;
}
......@@ -768,8 +664,7 @@ int oinfo( const string& arg, UniversalInterface &ui )
UniSetTypes::ObjectId oid(uni_atoi(arg));
if( oid==0 )
{
if( verb )
cout << "(oinfo): Не задан OID!"<< endl;
cout << "(oinfo): Не задан OID!"<< endl;
return 1;
}
......@@ -777,8 +672,7 @@ int oinfo( const string& arg, UniversalInterface &ui )
UniSetObject_i_var obj = UniSetObject_i::_narrow(o);
if(CORBA::is_nil(obj))
{
if( verb )
cout << "(oinfo): объект " << oid << " недоступен" << endl;
cout << "(oinfo): объект " << oid << " недоступен" << endl;
}
else
{
......
......@@ -20,7 +20,7 @@ void help_print()
struct ExtInfo:
public UniSetTypes::ParamSInfo
{
UniversalIO::IOTypes iotype;
UniversalIO::IOType iotype;
};
// -----------------------------------------------------------------------------
int main( int argc, char **argv )
......@@ -57,8 +57,8 @@ int main( int argc, char **argv )
std::list<ExtInfo> l;
for( std::list<UniSetTypes::ParamSInfo>::iterator it = lst.begin(); it!=lst.end(); ++it )
{
UniversalIO::IOTypes t = conf->getIOType( it->si.id );
if( t != UniversalIO::AnalogInput && t != UniversalIO::AnalogOutput )
UniversalIO::IOType t = conf->getIOType( it->si.id );
if( t != UniversalIO::AI && t != UniversalIO::AO )
{
cerr << endl << "Неверный типа датчика '" << t << "' для id='" << it->fname << "'. Тип должен быть AI или AO." << endl << endl;
return 1;
......@@ -122,9 +122,6 @@ int main( int argc, char **argv )
{
try
{
if( it->iotype == UniversalIO::AnalogInput )
ui.saveValue(it->si, j, UniversalIO::AnalogInput, DefaultObjectId);
else
ui.setValue(it->si, j, DefaultObjectId);
}
catch( Exception& ex )
......@@ -150,9 +147,6 @@ int main( int argc, char **argv )
{
try
{
if( it->iotype == UniversalIO::AnalogInput )
ui.saveValue(it->si, i, UniversalIO::AnalogInput, DefaultObjectId);
else
ui.setValue(it->si, i, DefaultObjectId);
}
catch( Exception& ex )
......
......@@ -346,7 +346,7 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
- remove deprecated services: InfoServer,TimeService,SystemGuard
- remove deprecated intefaces: MessageInterface
- remove deprecated messages: AlarmMessage, InfoMessage, DBMessage
- remove 'state' from SensorMessage
* Tue Dec 10 2013 Pavel Vainerman <pv@altlinux.ru> 1.7-alt3
- add RRDServer
......
......@@ -470,13 +470,13 @@ void IOControl::ioread( IOInfo* it )
return;
if( testmode == tmOnlyInputs &&
it->stype != UniversalIO::AnalogInput &&
it->stype != UniversalIO::DigitalInput )
it->stype != UniversalIO::AI &&
it->stype != UniversalIO::DI )
return;
if( testmode == tmOnlyOutputs &&
it->stype != UniversalIO::AnalogOutput &&
it->stype != UniversalIO::DigitalOutput )
it->stype != UniversalIO::AO &&
it->stype != UniversalIO::DO )
return;
}
......@@ -505,7 +505,7 @@ void IOControl::ioread( IOInfo* it )
try
{
if( it->stype == UniversalIO::AnalogInput )
if( it->stype == UniversalIO::AI )
{
int val = card->getAnalogChannel(it->subdev,it->channel, it->range, it->aref);
......@@ -521,7 +521,7 @@ void IOControl::ioread( IOInfo* it )
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);
/*
......@@ -548,7 +548,7 @@ void IOControl::ioread( IOInfo* it )
if( it->si.id == testLamp_S )
isTestLamp = set;
}
else if( it->stype == UniversalIO::AnalogOutput )
else if( it->stype == UniversalIO::AO )
{
if( !it->lamp )
{
......@@ -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);
if( !it->lamp || (it->lamp && !isTestLamp) )
......@@ -768,7 +768,7 @@ bool IOControl::initIOItem( UniXML_iterator& it )
inf.aref = 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");
if( inf.range < 0 || inf.range > 3 )
......@@ -851,12 +851,12 @@ void IOControl::sigterm( int signo )
if( it->subdev==DefaultSubdev || it->safety == NoSafety )
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;
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);
}
......@@ -892,9 +892,9 @@ void IOControl::initOutputs()
{
if( it->lamp )
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);
else if( it->stype == UniversalIO::AnalogOutput )
else if( it->stype == UniversalIO::AO )
card->setAnalogChannel(it->subdev,it->channel,it->defval,it->range,it->aref);
}
catch( Exception& ex )
......@@ -925,16 +925,16 @@ void IOControl::initIOCard()
// или "лампочки" (т.к. они фиктивные аналоговые датчики)
if( it->lamp )
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);
else if( it->stype == UniversalIO::DigitalOutput )
else if( it->stype == UniversalIO::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);
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);
}
......@@ -1041,12 +1041,12 @@ void IOControl::check_testmode()
if( it->subdev==DefaultSubdev || it->safety == NoSafety )
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;
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);
}
......@@ -1095,7 +1095,7 @@ void IOControl::check_testlamp()
if( !it->lamp || it->no_testlamp )
continue;
if( it->stype == UniversalIO::AnalogOutput )
if( it->stype == UniversalIO::AO )
{
if( isTestLamp )
{
......@@ -1116,7 +1116,7 @@ void IOControl::check_testlamp()
delBlink(&(*it),lstBlink3);
}
}
else if( it->stype == UniversalIO::DigitalOutput )
else if( it->stype == UniversalIO::DO )
{
if( isTestLamp )
addBlink(&(*it),lstBlink);
......@@ -1371,8 +1371,8 @@ void IOControl::askSensors( UniversalIO::UIOCommand cmd )
if( card == NULL || it->subdev==DefaultSubdev || it->channel==DefaultChannel )
continue;
if( it->stype == UniversalIO::AnalogOutput ||
it->stype == UniversalIO::DigitalOutput )
if( it->stype == UniversalIO::AO ||
it->stype == UniversalIO::DO )
{
try
{
......@@ -1420,7 +1420,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm )
<< endl;
}
if( it->stype == UniversalIO::AnalogOutput )
if( it->stype == UniversalIO::AO )
{
long prev_val = 0;
long cur_val = 0;
......@@ -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) )
{
......
......@@ -359,7 +359,7 @@ class IOControl:
PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat;
IOController::IOStateList::iterator aitHeartBeat;
bool force; /*!< флаг, означающий, что надо сохранять в SM, даже если значение не менялось */
bool force_out; /*!< флаг, включающий принудительное чтения выходов */
......@@ -376,7 +376,7 @@ class IOControl:
UniSetTypes::ObjectId testMode_as;
IOController::AIOStateList::iterator aitTestMode;
IOController::IOStateList::iterator aitTestMode;
long testmode;
long prev_testmode;
......
......@@ -145,11 +145,11 @@ void LProcessor::setOuts()
{
switch(it->iotype)
{
case UniversalIO::DigitalInput:
case UniversalIO::DI:
ui.saveState(it->sid,it->lnk->from->getOut(),it->iotype);
break;
case UniversalIO::DigitalOutput:
case UniversalIO::DO:
ui.setState(it->sid,it->lnk->from->getOut());
break;
......
......@@ -112,7 +112,7 @@ class LProcessor
struct EXTInfo
{
UniSetTypes::ObjectId sid;
UniversalIO::IOTypes iotype;
UniversalIO::IOType iotype;
bool state;
const Schema::EXTLink* lnk;
};
......@@ -120,7 +120,7 @@ class LProcessor
struct EXTOutInfo
{
UniSetTypes::ObjectId sid;
UniversalIO::IOTypes iotype;
UniversalIO::IOType iotype;
const Schema::EXTOut* lnk;
};
......
......@@ -155,11 +155,11 @@ void PassiveLProcessor::setOuts()
{
switch(it->iotype)
{
case UniversalIO::DigitalInput:
case UniversalIO::DI:
shm->saveLocalState(it->sid,it->lnk->from->getOut(),it->iotype);
break;
case UniversalIO::DigitalOutput:
case UniversalIO::DO:
shm->setState(it->sid,it->lnk->from->getOut());
break;
......@@ -187,11 +187,11 @@ void PassiveLProcessor::sigterm( int signo )
{
switch(it->iotype)
{
case UniversalIO::DigitalInput:
case UniversalIO::DI:
shm->saveLocalState(it->sid,false,it->iotype);
break;
case UniversalIO::DigitalOutput:
case UniversalIO::DO:
shm->setState(it->sid,false);
break;
......
......@@ -51,7 +51,7 @@ class PassiveLProcessor:
PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat;
IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::uniset_mutex mutex_start;
};
// ---------------------------------------------------------------------------
......
......@@ -669,8 +669,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
if( p->rnum <= 1 )
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
IOBase::processingAsDI( p, data[0], shm, force );
}
......@@ -687,8 +687,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
}
else if( p->vType == VTypes::vtSigned )
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
IOBase::processingAsDI( p, data[0], shm, force );
}
......@@ -699,8 +699,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
}
else if( p->vType == VTypes::vtUnsigned )
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
IOBase::processingAsDI( p, data[0], shm, force );
}
......@@ -1140,8 +1140,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
if( r->mb_initOK )
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
r->mbval = IOBase::processingAsDO( p, shm, force_out );
}
......@@ -1153,8 +1153,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
}
else
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
IOBase::processingAsDI( p, r->mbval, shm, force );
}
......@@ -1175,8 +1175,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
if( r->mb_initOK )
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
r->mbval = (signed short)IOBase::processingAsDO( p, shm, force_out );
}
......@@ -1188,8 +1188,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
}
else
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
IOBase::processingAsDI( p, r->mbval, shm, force );
}
......@@ -1206,8 +1206,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
if( r->mb_initOK )
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
r->mbval = (unsigned short)IOBase::processingAsDO( p, shm, force_out );
}
......@@ -1219,8 +1219,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
}
else
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
IOBase::processingAsDI( p, r->mbval, shm, force );
}
......@@ -1683,12 +1683,12 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
{
try
{
if( it->stype == UniversalIO::DigitalInput )
if( it->stype == UniversalIO::DI )
{
bool set = r->dev->rtu->getState(r->rtuJack,r->rtuChan,it->stype);
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);
IOBase::processingAsAI( &(*it), val, shm, force );
......@@ -1870,8 +1870,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
}
if( p.nbit > 0 &&
( p.stype == UniversalIO::AnalogInput ||
p.stype == UniversalIO::AnalogOutput ) )
( p.stype == UniversalIO::AI ||
p.stype == UniversalIO::AO ) )
{
dlog[Debug::WARN] << "(initRSProperty): (ignore) uncorrect param`s nbit>1 (" << p.nbit << ")"
<< " but iotype=" << p.stype << " for " << it.getProp("name") << endl;
......@@ -1935,7 +1935,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
if( !initRTU188item(it,r) )
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->mbfunc = RTUStorage::getFunction(r->rtuJack,r->rtuChan,t);
......@@ -2324,7 +2324,7 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::RSProperty& p )
<< " safety=" << p.safety
<< " invert=" << p.invert;
if( p.stype == UniversalIO::AnalogInput || p.stype == UniversalIO::AnalogOutput )
if( p.stype == UniversalIO::AI || p.stype == UniversalIO::AO )
{
os << p.cal
<< " cdiagram=" << ( p.cdiagram ? "yes" : "no" );
......@@ -2389,8 +2389,8 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
return false;
}
UniversalIO::IOTypes m_iotype = conf->getIOType(d->second->mode_id);
if( m_iotype != UniversalIO::AnalogInput )
UniversalIO::IOType m_iotype = conf->getIOType(d->second->mode_id);
if( m_iotype != UniversalIO::AI )
{
dlog[Debug::CRIT] << myname << "(initDeviceInfo): modeSensor='" << mod << "' must be 'AI'" << endl;
return false;
......
......@@ -170,7 +170,7 @@ class MBExchange:
bool resp_init;
bool ask_every_reg;
UniSetTypes::ObjectId mode_id;
IOController::AIOStateList::iterator mode_ait;
IOController::IOStateList::iterator mode_ait;
long mode; // режим работы с устройством (см. ExchangeMode)
// return TRUE if state changed
......@@ -292,11 +292,11 @@ class MBExchange:
PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat;
IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::ObjectId test_id;
UniSetTypes::ObjectId sidExchangeMode; /*!< иденидентификатор для датчика режима работы */
IOController::AIOStateList::iterator aitExchangeMode;
IOController::IOStateList::iterator aitExchangeMode;
long exchangeMode; /*!< режим работы см. ExchangeMode */
UniSetTypes::uniset_rwmutex actMutex;
......
......@@ -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) );
}
// -----------------------------------------------------------------------------
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 )
{
......@@ -194,7 +194,7 @@ float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO::
return 0;
}
if( t == UniversalIO::AnalogOutput )
if( t == UniversalIO::AO )
{
switch( jack )
{
......@@ -219,9 +219,9 @@ float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO::
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 )
{
......@@ -243,7 +243,7 @@ bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::I
return false;
}
if( t == UniversalIO::DigitalOutput )
if( t == UniversalIO::DO )
{
switch( jack )
{
......@@ -264,9 +264,9 @@ bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::I
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 )
{
......@@ -288,7 +288,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return -1;
}
if( t == UniversalIO::AnalogOutput )
if( t == UniversalIO::AO )
{
switch( jack )
{
......@@ -310,7 +310,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return -1;
}
if( t == UniversalIO::DigitalInput )
if( t == UniversalIO::DI )
{
switch( jack )
{
......@@ -332,7 +332,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return -1;
}
if( t == UniversalIO::DigitalOutput )
if( t == UniversalIO::DO )
{
switch( jack )
{
......@@ -353,9 +353,9 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
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 )
{
......@@ -373,7 +373,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return ModbusRTU::fnUnknown;
}
if( t == UniversalIO::AnalogOutput )
if( t == UniversalIO::AO )
{
switch( jack )
{
......@@ -393,7 +393,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return ModbusRTU::fnUnknown;
}
if( t == UniversalIO::DigitalInput )
if( t == UniversalIO::DI )
{
switch( jack )
{
......@@ -411,7 +411,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return ModbusRTU::fnUnknown;
}
if( t == UniversalIO::DigitalOutput )
if( t == UniversalIO::DO )
{
switch( jack )
{
......
......@@ -41,13 +41,13 @@ class RTUStorage
static RTUJack s2j( const std::string& jack );
static std::string j2s( RTUJack j );
long getInt( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t );
float getFloat( RTUJack jack, unsigned short channel, UniversalIO::IOTypes t );
bool getState( 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::IOType 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
void print();
......
......@@ -105,9 +105,9 @@ int main( int argc, char **argv )
cout << rtu << endl;
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++ )
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;
}
......
......@@ -683,7 +683,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd )
{
IOProperty* p(&it->second);
// if( p->stype != UniversalIO::DigitalOutput && p->stype != UniversalIO::AnalogOutput )
// if( p->stype != UniversalIO::DO && p->stype != UniversalIO::AO )
// continue;
// if( p->safety == NoSafetyState )
......@@ -708,14 +708,14 @@ void MBSlave::sensorInfo( UniSetTypes::SensorMessage* sm )
if( it->second.si.id == sm->id )
{
IOProperty* p(&it->second);
if( p->stype == UniversalIO::DigitalOutput ||
p->stype == UniversalIO::DigitalInput )
if( p->stype == UniversalIO::DO ||
p->stype == UniversalIO::DI )
{
uniset_rwmutex_wrlock lock(p->val_lock);
p->value = sm->state ? 1 : 0;
}
else if( p->stype == UniversalIO::AnalogOutput ||
p->stype == UniversalIO::AnalogInput )
else if( p->stype == UniversalIO::AO ||
p->stype == UniversalIO::AI )
{
uniset_rwmutex_wrlock lock(p->val_lock);
p->value = sm->value;
......@@ -963,7 +963,7 @@ std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p )
<< " safety=" << p.safety
<< " invert=" << p.invert;
if( p.stype == UniversalIO::AnalogInput || p.stype == UniversalIO::AnalogOutput )
if( p.stype == UniversalIO::AI || p.stype == UniversalIO::AO )
{
os << p.cal
<< " cdiagram=" << ( p.cdiagram ? "yes" : "no" );
......@@ -1090,8 +1090,8 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
if( p->vtype == VTypes::vtUnknown )
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
IOBase::processingAsDI( p, mbval, shm, force );
}
......@@ -1147,14 +1147,14 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
*/
/*
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
bool set = val ? true : false;
IOBase::processingAsDI(p,set,shm,force);
}
else if( p->stype == UniversalIO::AnalogInput ||
p->stype == UniversalIO::AnalogOutput )
else if( p->stype == UniversalIO::AI ||
p->stype == UniversalIO::AO )
{
IOBase::processingAsAI( p, val, shm, force );
}
......@@ -1274,13 +1274,13 @@ ModbusRTU::mbErrCode MBSlave::real_read_it( IOMap::iterator& it, ModbusRTU::Modb
if( p->amode == MBSlave::amWO )
return ModbusRTU::erBadDataAddress;
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
val = IOBase::processingAsDO(p,shm,force) ? 1 : 0;
}
else if( p->stype == UniversalIO::AnalogInput ||
p->stype == UniversalIO::AnalogOutput )
else if( p->stype == UniversalIO::AI ||
p->stype == UniversalIO::AO )
{
if( p->vtype == VTypes::vtUnknown )
{
......
......@@ -174,10 +174,10 @@ class MBSlave:
PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat;
IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::ObjectId test_id;
IOController::AIOStateList::iterator aitAskCount;
IOController::IOStateList::iterator aitAskCount;
UniSetTypes::ObjectId askcount_id;
IOController::DIOStateList::iterator ditRespond;
......
......@@ -38,7 +38,7 @@ class SMDBServer:
PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat;
IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::ObjectId test_id;
std::string db_locale;
......
......@@ -41,7 +41,7 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
activated(false),
workready(false),
dblogging(false),
iotypePulsar(UniversalIO::DigitalInput),
iotypePulsar(UniversalIO::DI),
msecPulsar(0)
{
mutex_start.setName(myname + "_mutex_start");
......@@ -128,7 +128,7 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
{
iotypePulsar = UniSetTypes::getIOType(t);
if( iotypePulsar == UniversalIO::UnknownIOType ||
iotypePulsar == UniversalIO::AnalogInput || iotypePulsar == UniversalIO::AnalogOutput )
iotypePulsar == UniversalIO::AI || iotypePulsar == UniversalIO::AO )
{
ostringstream err;
err << myname << ": Invalid iotype '" << t << "' for pulsar. Must be 'DI' or 'DO'";
......@@ -239,9 +239,9 @@ void SharedMemory::timerInfo( TimerMessage *tm )
{
bool st = localGetState(ditPulsar,siPulsar);
st ^= true;
if( iotypePulsar == UniversalIO::DigitalInput )
if( iotypePulsar == UniversalIO::DI )
localSaveState(ditPulsar,siPulsar,st,getId());
else if( iotypePulsar == UniversalIO::DigitalOutput )
else if( iotypePulsar == UniversalIO::DO )
localSetState(ditPulsar,siPulsar,st,getId());
}
}
......@@ -336,7 +336,7 @@ bool SharedMemory::activateObject()
// инициализируем указатели
for( HeartBeatList::iterator it=hlist.begin(); it!=hlist.end(); ++it )
{
it->ait = myaioEnd();
it->ait = myioEnd();
it->dit = mydioEnd();
}
......@@ -348,7 +348,7 @@ bool SharedMemory::activateObject()
// cerr << "history for id=" << it->id << " count=" << it->hlst.size() << endl;
for( HistoryList::iterator hit=it->hlst.begin(); hit!=it->hlst.end(); ++hit )
{
hit->ait = myaioEnd();
hit->ait = myioEnd();
hit->dit = mydioEnd();
}
}
......@@ -750,7 +750,7 @@ void SharedMemory::saveHistory()
{
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 );
else if( hit->dit != mydioEnd() )
hit->add( localGetState( hit->dit, hit->dit->second.si ), it->size );
......@@ -794,7 +794,25 @@ void SharedMemory::updateHistory( UniSetTypes::SensorMessage* sm )
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 ||
sm->sensor_type == UniversalIO::DigitalOutput )
......
......@@ -283,7 +283,7 @@ class SharedMemory:
UniSetTypes::ObjectId id;
HBuffer buf;
AIOStateList::iterator ait;
IOStateList::iterator ait;
DIOStateList::iterator dit;
void add( long val, size_t size )
......@@ -375,7 +375,7 @@ class SharedMemory:
UniSetTypes::ObjectId a_sid; // аналоговый счётчик
UniSetTypes::ObjectId d_sid; // дискретный датчик состояния процесса
AIOStateList::iterator ait;
IOStateList::iterator ait;
DIOStateList::iterator dit;
int reboot_msec; /*!< Время в течение которого, процесс обязан подтвердить своё существование,
......@@ -432,7 +432,7 @@ class SharedMemory:
DIOStateList::iterator ditPulsar;
IOController_i::SensorInfo siPulsar;
UniversalIO::IOTypes iotypePulsar;
UniversalIO::IOType iotypePulsar;
int msecPulsar;
UniSetTypes::uniset_mutex act_mutex;
......
......@@ -130,7 +130,7 @@ class UNetExchange:
PassiveTimer ptHeartBeat;
UniSetTypes::ObjectId sidHeartBeat;
int maxHeartBeat;
IOController::AIOStateList::iterator aitHeartBeat;
IOController::IOStateList::iterator aitHeartBeat;
UniSetTypes::ObjectId test_id;
int steptime; /*!< периодичность вызова step, [мсек] */
......@@ -178,7 +178,7 @@ class UNetExchange:
IOController::DIOStateList::iterator ditRespond;
bool respondInvert;
UniSetTypes::ObjectId sidLostPackets;
IOController::AIOStateList::iterator aitLostPackets;
IOController::IOStateList::iterator aitLostPackets;
};
typedef std::list<ReceiverInfo> ReceiverList;
......
......@@ -299,13 +299,13 @@ void UNetReceiver::real_update()
continue;
}
if( ii.iotype == UniversalIO::DigitalInput )
if( ii.iotype == UniversalIO::DI )
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());
else if( ii.iotype == UniversalIO::AnalogOutput )
else if( ii.iotype == UniversalIO::AO )
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());
else
dlog[Debug::CRIT] << myname << "(update): Unknown iotype for sid=" << id << endl;
......@@ -342,13 +342,13 @@ void UNetReceiver::real_update()
continue;
}
if( ii.iotype == UniversalIO::DigitalInput )
if( ii.iotype == UniversalIO::DI )
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());
else if( ii.iotype == UniversalIO::AnalogOutput )
else if( ii.iotype == UniversalIO::AO )
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());
else
dlog[Debug::CRIT] << myname << "(update): Unknown iotype for sid=" << d.id << endl;
......
......@@ -128,7 +128,7 @@ class UNetReceiver
IOController::DIOStateList::iterator ditRespond;
bool respondInvert;
UniSetTypes::ObjectId sidLostPackets;
IOController::AIOStateList::iterator aitLostPackets;
IOController::IOStateList::iterator aitLostPackets;
bool activated;
......@@ -171,9 +171,9 @@ class UNetReceiver
struct ItemInfo
{
long id;
IOController::AIOStateList::iterator ait;
IOController::IOStateList::iterator ait;
IOController::DIOStateList::iterator dit;
UniversalIO::IOTypes iotype;
UniversalIO::IOType iotype;
ItemInfo():
id(UniSetTypes::DefaultObjectId),
......
......@@ -90,9 +90,9 @@ void UNetSender::updateFromSM()
{
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;
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);
else
{
......@@ -126,12 +126,12 @@ void UNetSender::updateItem( DMap::iterator& it, long value )
if( it == dlist.end() )
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);
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);
mypack.setAData(it->pack_ind,value);
......@@ -286,7 +286,7 @@ bool UNetSender::initItem( UniXML_iterator& it )
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);
if ( p.pack_ind >= UniSetUDP::MaxDCount )
......@@ -299,7 +299,7 @@ bool UNetSender::initItem( UniXML_iterator& it )
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);
if ( p.pack_ind >= UniSetUDP::MaxACount )
......
......@@ -31,9 +31,9 @@ class UNetSender
id(UniSetTypes::DefaultObjectId),
pack_ind(-1){}
UniversalIO::IOTypes iotype;
UniversalIO::IOType iotype;
UniSetTypes::ObjectId id;
IOController::AIOStateList::iterator ait;
IOController::IOStateList::iterator ait;
IOController::DIOStateList::iterator dit;
int pack_ind;
......
......@@ -224,13 +224,13 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI
try
{
if( m->type == UniversalIO::DigitalInput )
if( m->type == UniversalIO::DI )
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() );
else if( map[i].type == UniversalIO::AnalogInput )
else if( map[i].type == UniversalIO::AI )
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() );
}
catch( Exception& ex )
......@@ -275,13 +275,13 @@ void UniExchange::updateLocalData()
try
{
uniset_rwmutex_wrlock lock(it->val_lock);
if( it->type == UniversalIO::DigitalInput ||
it->type == UniversalIO::DigitalOutput )
if( it->type == UniversalIO::DI ||
it->type == UniversalIO::DO )
{
it->val = shm->localGetState( it->dit, it->id );
}
else if( it->type == UniversalIO::AnalogInput ||
it->type == UniversalIO::AnalogOutput )
else if( it->type == UniversalIO::AI ||
it->type == UniversalIO::AO )
{
it->val = shm->localGetValue( it->ait, it->id );
}
......
......@@ -74,10 +74,10 @@ class UniExchange:
{}
IOController::DIOStateList::iterator dit;
IOController::AIOStateList::iterator ait;
IOController::IOStateList::iterator ait;
long val;
long id;
UniversalIO::IOTypes type;
UniversalIO::IOType type;
UniSetTypes::uniset_rwmutex val_lock;
};
......
......@@ -53,7 +53,7 @@ static const int NoSafety = -1;
bool check_depend( SMInterface* shm ); /*!< проверка разрешения(зависимости) от другого датчика */
IOController_i::SensorInfo si;
UniversalIO::IOTypes stype; /*!< тип канала (DI,DO,AI,AO) */
UniversalIO::IOType stype; /*!< тип канала (DI,DO,AI,AO) */
IOController_i::CalibrateInfo cal; /*!< калибровочные параметры */
Calibration* cdiagram; /*!< специальная калибровочная диаграмма */
......@@ -89,11 +89,11 @@ static const int NoSafety = -1;
// Зависимость (d - depend)
UniSetTypes::ObjectId d_id; /*!< идентификатор датчика, от которого зависит данный */
IOController::AIOStateList::iterator d_ait; /*! итератор на датчик от которого зависит данный */
IOController::IOStateList::iterator d_ait; /*! итератор на датчик от которого зависит данный */
IOController::DIOStateList::iterator d_dit; /*! итератор на датчик от которого зависит данный */
long d_value; /*!< разрешающее работу значение датчика от которого зависит данный */
long d_off_value; /*!< блокирующее значение */
UniversalIO::IOTypes d_iotype;
UniversalIO::IOType d_iotype;
// Порог
UniSetTypes::ObjectId t_ai; /*!< если данный датчик дискретный,
......@@ -103,7 +103,7 @@ static const int NoSafety = -1;
IONotifyController_i::ThresholdInfo ti;
IOController::AIOStateList::iterator t_ait; /*! итератор на датчик по которому формируется порог */
IOController::AIOStateList::iterator ait;
IOController::IOStateList::iterator ait;
IOController::DIOStateList::iterator dit;
UniSetTypes::uniset_rwmutex val_lock; /*!< блокировка на время "работы" со значением */
......
......@@ -16,11 +16,11 @@ class SMInterface
void setState ( UniSetTypes::ObjectId, bool state );
void setValue ( UniSetTypes::ObjectId, long value );
bool saveState ( IOController_i::SensorInfo& si, bool state, UniversalIO::IOTypes type, UniSetTypes::ObjectId supplier );
bool saveValue ( IOController_i::SensorInfo& si, long value, 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::IOType type, UniSetTypes::ObjectId supplier );
bool saveLocalState ( UniSetTypes::ObjectId id, bool state, UniversalIO::IOTypes type=UniversalIO::DigitalInput );
bool saveLocalValue ( UniSetTypes::ObjectId id, long value, UniversalIO::IOTypes type=UniversalIO::AnalogInput );
bool saveLocalState ( UniSetTypes::ObjectId id, bool state, UniversalIO::IOType type=UniversalIO::DI );
bool saveLocalValue ( UniSetTypes::ObjectId id, long value, UniversalIO::IOType type=UniversalIO::AI );
void setUndefinedState( IOController_i::SensorInfo& si, bool undefined, UniSetTypes::ObjectId supplier );
......@@ -34,7 +34,7 @@ class SMInterface
IOController_i::ASensorInfoSeq* getAnalogSensorsMap();
IONotifyController_i::ThresholdsListSeq* getThresholdsList();
void localSaveValue( IOController::AIOStateList::iterator& it,
void localSaveValue( IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id );
......@@ -46,26 +46,26 @@ class SMInterface
UniSetTypes::ObjectId sid,
CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id );
void localSetValue( IOController::AIOStateList::iterator& it,
void localSetValue( IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id );
bool localGetState( IOController::DIOStateList::iterator& it,
UniSetTypes::ObjectId sid );
long localGetValue( IOController::AIOStateList::iterator& it,
long localGetValue( IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid );
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
// для дискретных датчиков необходимости для подобной функции нет.
// см. логику выставления в функции localSaveState
*/
void localSetUndefinedState( IOController::AIOStateList::iterator& it,
void localSetUndefinedState( IOController::IOStateList::iterator& it,
bool undefined, UniSetTypes::ObjectId sid );
// специальные функции
IOController::DIOStateList::iterator dioEnd();
IOController::AIOStateList::iterator aioEnd();
void initAIterator( IOController::AIOStateList::iterator& it );
IOController::IOStateList::iterator ioEnd();
void initAIterator( IOController::IOStateList::iterator& it );
void initDIterator( IOController::DIOStateList::iterator& it );
bool exist();
......
......@@ -97,7 +97,7 @@ bool IOBase::check_depend( SMInterface* shm )
if( d_id == DefaultObjectId )
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 )
return true;
......@@ -105,7 +105,7 @@ bool IOBase::check_depend( SMInterface* shm )
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 )
return true;
......@@ -176,13 +176,13 @@ void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force
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() );
else if( it->stype == UniversalIO::AnalogOutput )
else if( it->stype == UniversalIO::AO )
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() );
else if( it->stype == UniversalIO::DigitalInput )
else if( it->stype == UniversalIO::DI )
shm->localSaveState( it->dit,it->si.id,(bool)val,shm->ID() );
it->value = val;
......@@ -234,13 +234,13 @@ void IOBase::processingFasAI( IOBase* it, float fval, SMInterface* shm, bool for
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() );
else if( it->stype == UniversalIO::AnalogOutput )
else if( it->stype == UniversalIO::AO )
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() );
else if( it->stype == UniversalIO::DigitalInput )
else if( it->stype == UniversalIO::DI )
shm->localSaveState( it->dit,it->si.id,(bool)val,shm->ID() );
it->value = val;
......@@ -265,13 +265,13 @@ void IOBase::processingAsDI( IOBase* it, bool set, SMInterface* shm, bool force
uniset_rwmutex_wrlock lock(it->val_lock);
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());
else if( it->stype == UniversalIO::DigitalOutput )
else if( it->stype == UniversalIO::DO )
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() );
else if( it->stype == UniversalIO::AnalogOutput )
else if( it->stype == UniversalIO::AO )
shm->localSetValue( it->ait,it->si.id,(set ? 1:0),shm->ID() );
it->value = set ? 1 : 0;
......@@ -290,16 +290,16 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool 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;
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);
it->value = val;
}
if( it->stype == UniversalIO::AnalogOutput ||
it->stype == UniversalIO::AnalogInput )
if( it->stype == UniversalIO::AO ||
it->stype == UniversalIO::AI )
{
if( it->cdiagram ) // задана специальная калибровочная диаграмма
{
......@@ -343,9 +343,9 @@ bool IOBase::processingAsDO( IOBase* it, SMInterface* shm, bool 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);
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;
}
......@@ -368,8 +368,8 @@ float IOBase::processingFasAO( IOBase* it, SMInterface* shm, bool force )
it->value = val;
}
if( it->stype == UniversalIO::AnalogOutput ||
it->stype == UniversalIO::AnalogInput )
if( it->stype == UniversalIO::AO ||
it->stype == UniversalIO::AI )
{
if( it->cdiagram ) // задана специальная калибровочная диаграмма
{
......@@ -522,7 +522,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
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.maxRaw = it.getIntProp("rmax");
......@@ -572,7 +572,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
if( !it.getProp("iir_coeff_new").empty() )
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,
f_iir_coeff_prev, f_iir_coeff_new );
......@@ -582,7 +582,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
if( !caldiagram.empty() )
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"));
if( !tai.empty() )
......
......@@ -140,7 +140,7 @@ void SMInterface::setValue ( UniSetTypes::ObjectId id, long value )
}
// --------------------------------------------------------------------------
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 )
{
......@@ -157,7 +157,7 @@ bool SMInterface::saveState ( IOController_i::SensorInfo& si, bool state,
}
// --------------------------------------------------------------------------
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 )
{
......@@ -210,7 +210,7 @@ bool SMInterface::getState ( UniSetTypes::ObjectId id )
}
// --------------------------------------------------------------------------
bool SMInterface::saveLocalState( UniSetTypes::ObjectId id, bool state,
UniversalIO::IOTypes type )
UniversalIO::IOType type )
{
IOController_i::SensorInfo si;
si.id = id;
......@@ -219,7 +219,7 @@ bool SMInterface::saveLocalState( UniSetTypes::ObjectId id, bool state,
}
// --------------------------------------------------------------------------
bool SMInterface::saveLocalValue ( UniSetTypes::ObjectId id, long value,
UniversalIO::IOTypes type )
UniversalIO::IOType type )
{
IOController_i::SensorInfo si;
si.id = id;
......@@ -325,13 +325,13 @@ IOController::DIOStateList::iterator SMInterface::dioEnd()
return ic->dioEnd();
}
// --------------------------------------------------------------------------
IOController::AIOStateList::iterator SMInterface::aioEnd()
IOController::IOStateList::iterator SMInterface::ioEnd()
{
CHECK_IC_PTR(aioEnd)
return ic->aioEnd();
CHECK_IC_PTR(ioEnd)
return ic->ioEnd();
}
// --------------------------------------------------------------------------
void SMInterface::localSaveValue( IOController::IOController::AIOStateList::iterator& it,
void SMInterface::localSaveValue( IOController::IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid,
CORBA::Long nval, UniSetTypes::ObjectId sup_id )
{
......@@ -376,7 +376,7 @@ void SMInterface::localSetState( IOController::DIOStateList::iterator& it,
ic->localSetState(it,si,newstate,sup_id);
}
// --------------------------------------------------------------------------
void SMInterface::localSetValue( IOController::AIOStateList::iterator& it,
void SMInterface::localSetValue( IOController::IOStateList::iterator& it,
UniSetTypes::ObjectId sid,
CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
......@@ -402,7 +402,7 @@ bool SMInterface::localGetState( IOController::DIOStateList::iterator& it, UniSe
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 )
return getValue( sid );
......@@ -414,7 +414,7 @@ long SMInterface::localGetValue( IOController::AIOStateList::iterator& it, UniSe
return ic->localGetValue(it,si);
}
// --------------------------------------------------------------------------
void SMInterface::localSetUndefinedState( IOController::AIOStateList::iterator& it,
void SMInterface::localSetUndefinedState( IOController::IOStateList::iterator& it,
bool undefined,
UniSetTypes::ObjectId sid )
{
......@@ -434,10 +434,10 @@ void SMInterface::localSetUndefinedState( IOController::AIOStateList::iterator&
ic->localSetUndefinedState(it,undefined,si);
}
// --------------------------------------------------------------------------
void SMInterface::initAIterator( IOController::AIOStateList::iterator& it )
void SMInterface::initAIterator( IOController::IOStateList::iterator& it )
{
if( ic )
it = ic->aioEnd();
it = ic->ioEnd();
// else
// cerr << "(SMInterface::initAIterator): ic=NULL" << endl;
}
......
......@@ -399,7 +399,7 @@ void UObject_SK::callback()
// "сердцебиение"
if( idHeartBeat!=DefaultObjectId && ptHeartBeat.checkTime() )
{
ui.saveValue(idHeartBeat,maxHeartBeat,UniversalIO::AnalogInput);
ui.saveValue(idHeartBeat,maxHeartBeat,UniversalIO::AI);
ptHeartBeat.reset();
}
......
......@@ -105,8 +105,8 @@ namespace UniSetTypes
xmlNode* getXMLServicesSection();
xmlNode* getXMLNodesSection();
xmlNode* getXMLObjectNode( UniSetTypes::ObjectId );
UniversalIO::IOTypes getIOType( UniSetTypes::ObjectId );
UniversalIO::IOTypes getIOType( const std::string name );
UniversalIO::IOType getIOType( UniSetTypes::ObjectId );
UniversalIO::IOType getIOType( const std::string name );
// net
inline unsigned int getCountOfNet() const { return countOfNet; }
......
......@@ -47,59 +47,31 @@ class 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 );
// -------------------- !!!!!!!!! ---------------------------------
// Реализуются конкретным 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,
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,
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,
CORBA::Boolean undefined,
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 UniversalIO::IOTypes 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 UniversalIO::IOType getIOType(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 void calibrate(const IOController_i::SensorInfo& si,
......@@ -118,7 +90,7 @@ class IOController:
};
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);
......@@ -141,46 +113,20 @@ class IOController:
void setDependsSlot( DependsSlot sl );
void setBlockDependsSlot( DependsSlot sl );
// структуры для внутреннего хранения информации по датчикам
struct UniDigitalIOInfo:
public IOController_i::DigitalIOInfo
struct USensorIOInfo:
public IOController_i::SensorIOInfo
{
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; }
virtual ~UniDigitalIOInfo(){}
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; /*!< не писать изменения в БД */
virtual ~USensorIOInfo(){}
UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */
};
USensorIOInfo(IOController_i::SensorIOInfo& r);
USensorIOInfo(IOController_i::SensorIOInfo* r);
USensorIOInfo(const IOController_i::SensorIOInfo& r);
struct UniAnalogIOInfo:
public IOController_i::AnalogIOInfo
{
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);
USensorIOInfo& operator=(IOController_i::SensorIOInfo& r);
const USensorIOInfo& operator=(const IOController_i::SensorIOInfo& r);
USensorIOInfo& operator=(IOController_i::SensorIOInfo* r);
void* any; /*!< расширение для возможности хранения своей информации */
DependsList dlst; /*!< список io зависящих от данного (для выставления поля undefined) */
......@@ -193,56 +139,38 @@ class IOController:
// Функции работы со списками датчиков (без изменения 'const')
typedef std::map<UniSetTypes::KeyType, UniDigitalIOInfo> DIOStateList;
typedef std::map<UniSetTypes::KeyType, UniAnalogIOInfo> AIOStateList;
typedef std::map<UniSetTypes::KeyType, USensorIOInfo> IOStateList;
inline DIOStateList::iterator dioBegin(){ return dioList.begin(); }
inline DIOStateList::iterator dioEnd(){ return dioList.end(); }
inline DIOStateList::iterator dfind(UniSetTypes::KeyType k){ return dioList.find(k); }
inline int dioCount(){ return dioList.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(); }
inline IOStateList::iterator ioBegin(){ return ioList.begin(); }
inline IOStateList::iterator ioEnd(){ return ioList.end(); }
inline IOStateList::iterator find(UniSetTypes::KeyType k){ return ioList.find(k); }
inline int ioCount(){ return ioList.size(); }
struct DependsInfo
{
DependsInfo( bool init=false );
DependsInfo( IOController_i::SensorInfo& si,
DIOStateList::iterator& dit, AIOStateList::iterator& ait );
DependsInfo( IOController_i::SensorInfo& si, IOStateList::iterator& it );
IOController_i::SensorInfo si;
DIOStateList::iterator dit;
AIOStateList::iterator ait;
IOStateList::iterator it;
bool block_invert; /*!< инвертирование логики для блокирования */
bool init;
};
// доступ к элементам через итератор
virtual void localSaveValue( AIOStateList::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,
virtual void localSetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id );
virtual bool localGetState( DIOStateList::iterator& it, const IOController_i::SensorInfo& si );
virtual long localGetValue( AIOStateList::iterator& it, const IOController_i::SensorInfo& si );
virtual long localGetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si );
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
// для дискретных датчиков необходимости для подобной функции нет.
// см. логику выставления в функции localSaveState
*/
virtual void localSetUndefinedState( AIOStateList::iterator& it, bool undefined,
virtual void localSetUndefinedState( IOStateList::iterator& it, bool undefined,
const IOController_i::SensorInfo& si );
protected:
// переопределяем для добавления вызова регистрации датчиков
virtual bool disactivateObject();
......@@ -253,47 +181,23 @@ class IOController:
/*! удаление из репозитория датчиков за информацию о которых отвечает данный IOController */
virtual void sensorsUnregistration();
/*! регистрация дискретного датчика
force=true - не проверять на дублирование (оптимизация)
*/
void dsRegistration( const UniDigitalIOInfo&, bool force=false );
/*! регистрация аналогового датчика
/*! регистрация датчика
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
DigitalIOInfo(bool s, UniversalIO::IOTypes 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,
inline IOController_i::SensorIOInfo
SensorIOInfo(long v, UniversalIO::IOType t, const IOController_i::SensorInfo& si,
UniSetTypes::Message::Priority p = UniSetTypes::Message::Medium,
long defval=0, IOController_i::CalibrateInfo* ci=0 )
{
IOController_i::AnalogIOInfo ai;
IOController_i::SensorIOInfo ai;
ai.si = si;
ai.type = t;
ai.value = v;
......@@ -315,31 +219,23 @@ class IOController:
return ai;
};
//! сохранение информации об изменении состояния датчика
virtual void logging(UniSetTypes::SensorMessage& sm);
//! сохранение состояния всех датчиков в БД
virtual void dumpToDB();
IOController();
// доступ к списку c изменением только для своих
DIOStateList::iterator mydioBegin();
DIOStateList::iterator mydioEnd();
AIOStateList::iterator myaioBegin();
AIOStateList::iterator myaioEnd();
AIOStateList::iterator myafind(UniSetTypes::KeyType k);
DIOStateList::iterator mydfind(UniSetTypes::KeyType k);
IOStateList::iterator myioBegin();
IOStateList::iterator myioEnd();
IOStateList::iterator myiofind(UniSetTypes::KeyType k);
// --------------------------
// ФИЛЬТРОВАНИЕ
//
typedef sigc::slot<bool,const UniAnalogIOInfo&, CORBA::Long, UniSetTypes::ObjectId> AFilterSlot;
typedef sigc::slot<bool,const UniDigitalIOInfo&, CORBA::Boolean, UniSetTypes::ObjectId> DFilterSlot;
typedef std::list<AFilterSlot> AFilterSlotList;
typedef std::list<DFilterSlot> DFilterSlotList;
typedef sigc::slot<bool,const USensorIOInfo&, CORBA::Long, UniSetTypes::ObjectId> IOFilterSlot;
typedef std::list<IOFilterSlot> IOFilterSlotList;
/*
Фильтрующая функция должна возвращать:
......@@ -347,21 +243,16 @@ class IOController:
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 );
DFilterSlotList::iterator addDFilter( DFilterSlot sl, bool push_front=false );
void eraseAFilter(AFilterSlotList::iterator& it);
void eraseDFilter(DFilterSlotList::iterator& it);
IOFilterSlotList::iterator addIOFilter( IOFilterSlot sl, bool push_front=false );
void eraseIOFilter(IOFilterSlotList::iterator& it);
// функии проверки текущего значения
bool checkDFilters( const UniDigitalIOInfo& ai, CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id );
bool checkAFilters( const UniAnalogIOInfo& ai, CORBA::Long& newvalue, UniSetTypes::ObjectId sup_id );
bool checkIOFilters( const USensorIOInfo& ai, CORBA::Long& newvalue, UniSetTypes::ObjectId sup_id );
inline bool afiltersEmpty(){ return afilters.empty(); }
inline bool dfiltersEmpty(){ return dfilters.empty(); }
inline int afiltersSize(){ return afilters.size(); }
inline int dfiltersSize(){ return dfilters.size(); }
inline bool iofiltersEmpty(){ return iofilters.empty(); }
inline int iodiltersSize(){ return iofilters.size(); }
// ---------------------------
// note: функция вызывается рекурсивно!!!
......@@ -371,16 +262,12 @@ class IOController:
private:
friend class AskDumper;
DIOStateList dioList; /*!< список с текущим состоянием дискретных входов/выходов */
AIOStateList aioList; /*!< список с текущим состоянием аналоговых входов/выходов */
UniSetTypes::uniset_rwmutex dioMutex; /*!< замок для блокирования совместного доступа к dioList */
UniSetTypes::uniset_rwmutex aioMutex; /*!< замок для блокирования совместного доступа к aioList */
IOStateList ioList; /*!< список с текущим состоянием аналоговых входов/выходов */
UniSetTypes::uniset_rwmutex ioMutex; /*!< замок для блокирования совместного доступа к ioList */
bool isPingDBServer; // флаг связи с DBServer-ом
AFilterSlotList afilters; /*!< список фильтров для аналоговых значений */
DFilterSlotList dfilters; /*!< список фильтров для дискретных значений */
IOFilterSlotList iofilters; /*!< список фильтров для аналоговых значений */
DependsSlot dslot; /*!< undefined depends slot */
DependsSlot bslot; /*!< block depends slot */
......
......@@ -119,16 +119,12 @@ class 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 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,
UniSetTypes::ThresholdId tid,
CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Long sensibility,
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,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
......@@ -183,7 +179,7 @@ class IONotifyController:
/*! итератор в списке датчиков
(для оптимально-быстрого доступа)
*/
IOController::DIOStateList::iterator itSID;
IOController::IOStateList::iterator itSID;
/*! инверсная логика */
bool inverse;
......@@ -207,31 +203,19 @@ class IONotifyController:
{
ThresholdsListInfo(){}
ThresholdsListInfo( IOController_i::SensorInfo& si, ThresholdExtList& list,
UniversalIO::IOTypes t=UniversalIO::AnalogInput ):
UniversalIO::IOType t=UniversalIO::AI ):
si(si),type(t),list(list){}
IOController_i::SensorInfo si;
AIOStateList::iterator ait;
UniversalIO::IOTypes type;
IOStateList::iterator ait;
UniversalIO::IOType type;
ThresholdExtList list;
};
/*! массив пар датчик->список порогов */
typedef std::map<UniSetTypes::KeyType,ThresholdsListInfo> AskThresholdMap;
virtual void localSaveValue( IOController::AIOStateList::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,
virtual void localSetValue( IOController::IOStateList::iterator& it,
const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id );
......@@ -240,15 +224,14 @@ class IONotifyController:
virtual bool activateObject();
// ФИЛЬТРЫ
bool myAFilter(const UniAnalogIOInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id);
bool myDFilter(const UniDigitalIOInfo& ai, CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id);
bool myIOFilter(const USensorIOInfo& ai, CORBA::Long newvalue, UniSetTypes::ObjectId sup_id);
//! посылка информации об изменении состояния датчика
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 );
//! поиск информации о пороговом датчике
......@@ -298,24 +281,13 @@ class IONotifyController:
bool removeThreshold(ThresholdExtList& lst, ThresholdInfoExt& ti, const UniSetTypes::ConsumerInfo& ci);
AskMap askDIOList; /*!< список потребителей по дискретным датчикам */
AskMap askAIOList; /*!< список потребителей по аналоговым датчикам */
AskMap askIOList; /*!< список потребителей по аналоговым датчикам */
AskThresholdMap askTMap; /*!< список порогов по аналоговым датчикам */
// Выходы
AskMap askDOList; /*!< список потребителей по дискретным выходам */
AskMap askAOList; /*!< список потребителей по аналоговым выходам */
/*! замок для блокирования совместного доступа к cписку потребителей дискретных датчиков */
UniSetTypes::uniset_rwmutex askDMutex;
/*! замок для блокирования совместного доступа к cписку потребителей аналоговых датчиков */
UniSetTypes::uniset_rwmutex askAMutex;
/*! замок для блокирования совместного доступа к cписку потребителей датчиков */
UniSetTypes::uniset_rwmutex askIOMutex;
/*! замок для блокирования совместного доступа к cписку потребителей пороговых датчиков */
UniSetTypes::uniset_rwmutex trshMutex;
/*! замок для блокирования совместного доступа к cписку потребителей аналоговых выходов */
UniSetTypes::uniset_rwmutex askAOMutex;
/*! замок для блокирования совместного доступа к cписку потребителей дискретных выходов */
UniSetTypes::uniset_rwmutex askDOMutex;
int maxAttemtps; /*! timeout for consumer */
};
......
......@@ -104,7 +104,6 @@ namespace UniSetTypes
public:
ObjectId id;
bool state;
long value;
bool undefined;
......@@ -112,7 +111,7 @@ namespace UniSetTypes
long sm_tv_sec;
long sm_tv_usec;
UniversalIO::IOTypes sensor_type;
UniversalIO::IOType sensor_type;
IOController_i::CalibrateInfo ci;
// для пороговых датчиков
......@@ -120,13 +119,9 @@ namespace UniSetTypes
UniSetTypes::ThresholdId tid;
SensorMessage();
SensorMessage(ObjectId id, bool state, Priority priority = Message::Medium,
UniversalIO::IOTypes st = UniversalIO::DigitalInput,
ObjectId consumer=UniSetTypes::DefaultObjectId);
SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci,
SensorMessage(ObjectId id, long value, const IOController_i::CalibrateInfo& ci=IOController_i::CalibrateInfo(),
Priority priority = Message::Medium,
UniversalIO::IOTypes st = UniversalIO::AnalogInput,
UniversalIO::IOType st = UniversalIO::AI,
ObjectId consumer=UniSetTypes::DefaultObjectId);
SensorMessage(const VoidMessage *msg);
......
......@@ -43,9 +43,9 @@ class NCRestorer
virtual ~NCRestorer();
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 )
{
this->si = si;
......@@ -56,15 +56,12 @@ class NCRestorer
SInfo()
{
this->type = UniversalIO::DigitalInput;
this->type = UniversalIO::DI;
this->priority = UniSetTypes::Message::Medium;
this->default_val = 0;
}
SInfo &operator=(IOController_i::DigitalIOInfo& inf);
SInfo &operator=(IOController_i::AnalogIOInfo& inf);
operator IOController::UniDigitalIOInfo();
SInfo &operator=(IOController_i::SensorIOInfo& inf);
};
virtual void read(IONotifyController* ic, const std::string fn="" )=0;
......@@ -79,46 +76,25 @@ class NCRestorer
// добавление списка порогов и заказчиков
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
void readSection(const std::string sec, const std::string secRoot);
void getInfo(UniSetTypes::ObjectId id);
virtual void updateDSensors(IOController_i::DSensorInfoSeq_var& dmap, 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 updateSensors( IOController_i::SensorInfoSeq_var& amap, UniSetTypes::ObjectId oid );
virtual void updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tlst, UniSetTypes::ObjectId oid );
const std::string csec;
void printInfo(UniSetTypes::ObjectId id, const std::string& sname, long value, const std::string& owner,
......
......@@ -45,7 +45,7 @@ class StorageInterface
virtual long getValue(const IOController_i::SensorInfo& si)=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:
......@@ -70,7 +70,7 @@ class STLStorage:
virtual long getValue(const IOController_i::SensorInfo& si);
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:
private:
......
......@@ -57,8 +57,8 @@ namespace UniSetTypes
/*! Функция делает ObjectType из const char * (переводит const-строку в обычную, что плохо, но мы обещаем не писать в неё :) ) */
inline static UniSetTypes::ObjectType getObjectType(const char * name) { const void *t = name; return (UniSetTypes::ObjectType)t; }
UniversalIO::IOTypes getIOType( const std::string s );
std::ostream& operator<<( std::ostream& os, const UniversalIO::IOTypes t );
UniversalIO::IOType getIOType( const std::string s );
std::ostream& operator<<( std::ostream& os, const UniversalIO::IOType t );
std::ostream& operator<<( std::ostream& os, const IOController_i::CalibrateInfo c );
......@@ -102,27 +102,9 @@ namespace UniSetTypes
};
const ObjectId DefaultObjectId = -1; /*!< Идентификатор объекта по умолчанию */
// typedef long MessageCode;
const MessageCode DefaultMessageCode = 0; /*!< код пустого сообщения */
const ThresholdId DefaultThresholdId = -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
{
......@@ -245,7 +227,6 @@ namespace UniSetTypes
long setoutregion(long raw, long rawMin, long rawMax);
bool file_exist( const std::string filename );
IDList explode( const std::string str, char sep=',' );
......@@ -268,6 +249,7 @@ namespace UniSetTypes
// Проверка xml-узла на соответсвие <...f_prop="f_val">,
// если не задано f_val, то проверяется, что просто f_prop!=""
bool check_filter( UniXML_iterator& it, const std::string f_prop, const std::string f_val="" );
// -----------------------------------------------------------------------------
}
......
......@@ -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
// ------------------------------------------------------
//! Получение состояния дискретного датчика
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 );
//! Вывод для дискретного датчика
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);
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 );
// установка неопределённого состояния
......@@ -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,
UniversalIO::UIOCommand cmd,
CORBA::Long lowLimit=0, CORBA::Long hiLimit=0, CORBA::Long sensibility=0,
......@@ -170,33 +133,14 @@ class UniversalInterface
void askRemoteSensor( UniSetTypes::ObjectId id, UniversalIO::UIOCommand cmd, UniSetTypes::ObjectId node,
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);
// 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::ShortMapSeq* getSensors( UniSetTypes::ObjectId id,
......
#include "UConnector.h"
#include "ORepHelpers.h"
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
using namespace std;
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
UConnector::UConnector( UTypes::Params* p, const char* xfile )throw(UException):
conf(0),
ui(0),
......@@ -42,7 +42,7 @@ xmlfile(xfile)
throw UException();
}
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
UConnector::~UConnector()
{
delete ui;
......@@ -54,34 +54,34 @@ const char* UConnector::getConfFileName()
// return xmlfile;
if( conf )
return conf->getConfFileName().c_str();
return "";
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
long UConnector::getValue( long id, long node )throw(UException)
{
if( !conf || !ui )
throw USysError();
if( node == UTypes::DefaultID )
node = conf->getLocalNode();
UniversalIO::IOTypes t = conf->getIOType(id);
UniversalIO::IOType t = conf->getIOType(id);
try
{
switch(t)
{
case UniversalIO::DigitalInput:
case UniversalIO::DigitalOutput:
case UniversalIO::DI:
case UniversalIO::DO:
return (ui->getState(id,node) ? 1 : 0);
break;
case UniversalIO::AnalogInput:
case UniversalIO::AnalogOutput:
case UniversalIO::AI:
case UniversalIO::AO:
return ui->getValue(id,node);
break;
default:
{
ostringstream e;
......@@ -102,7 +102,7 @@ long UConnector::getValue( long id, long node )throw(UException)
{
throw UException("(getValue): catch...");
}
throw UException("(getValue): unknown error");
}
//---------------------------------------------------------------------------
......@@ -110,32 +110,32 @@ void UConnector::setValue( long id, long val, long node )throw(UException)
{
if( !conf || !ui )
throw USysError();
if( node == UTypes::DefaultID )
node = conf->getLocalNode();
UniversalIO::IOTypes t = conf->getIOType(id);
UniversalIO::IOType t = conf->getIOType(id);
try
{
switch(t)
{
case UniversalIO::DigitalInput:
case UniversalIO::DI:
ui->saveState(id,val,t,node);
break;
case UniversalIO::DigitalOutput:
case UniversalIO::DO:
ui->setState(id,val,node);
break;
case UniversalIO::AnalogInput:
case UniversalIO::AI:
ui->saveValue(id,val,t,node);
break;
case UniversalIO::AnalogOutput:
case UniversalIO::AO:
ui->setValue(id,val,node);
break;
default:
{
ostringstream e;
......@@ -162,7 +162,7 @@ long UConnector::getSensorID( const char* name )
{
if( conf )
return conf->getSensorID(name);
return UTypes::DefaultID;
}
//---------------------------------------------------------------------------
......@@ -170,7 +170,7 @@ long UConnector::getNodeID( const char* name )
{
if( conf )
return conf->getNodeID(name);
return UTypes::DefaultID;
}
//---------------------------------------------------------------------------
......@@ -178,7 +178,7 @@ const char* UConnector::getName( long id )
{
if( conf )
return conf->oind->getMapName(id).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -186,7 +186,7 @@ const char* UConnector::getShortName( long id )
{
if( conf )
return ORepHelpers::getShortName(conf->oind->getMapName(id)).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -194,7 +194,7 @@ const char* UConnector::getTextName( long id )
{
if( conf )
return conf->oind->getTextName(id).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -38,22 +38,22 @@ long UInterface::getValue( long id )throw(UException)
{
if( !UniSetTypes::conf || !ui )
throw USysError();
UniversalIO::IOTypes t = UniSetTypes::conf->getIOType(id);
UniversalIO::IOType t = UniSetTypes::conf->getIOType(id);
try
{
switch(t)
{
case UniversalIO::DigitalInput:
case UniversalIO::DigitalOutput:
case UniversalIO::DI:
case UniversalIO::DO:
return (ui->getState(id) ? 1 : 0);
break;
case UniversalIO::AnalogInput:
case UniversalIO::AnalogOutput:
case UniversalIO::AI:
case UniversalIO::AO:
return ui->getValue(id);
break;
default:
{
ostringstream e;
......@@ -74,7 +74,7 @@ long UInterface::getValue( long id )throw(UException)
{
throw UException("(getValue): catch...");
}
throw UException("(getValue): unknown error");
}
//---------------------------------------------------------------------------
......@@ -82,28 +82,28 @@ void UInterface::setValue( long id, long val )throw(UException)
{
if( !UniSetTypes::conf || !ui )
throw USysError();
UniversalIO::IOTypes t = UniSetTypes::conf->getIOType(id);
UniversalIO::IOType t = UniSetTypes::conf->getIOType(id);
try
{
switch(t)
{
case UniversalIO::DigitalInput:
case UniversalIO::DI:
ui->saveState(id,val,t);
break;
case UniversalIO::DigitalOutput:
case UniversalIO::DO:
ui->setState(id,val);
break;
case UniversalIO::AnalogInput:
case UniversalIO::AI:
ui->saveValue(id,val,t);
break;
case UniversalIO::AnalogOutput:
case UniversalIO::AO:
ui->setValue(id,val);
break;
default:
{
ostringstream e;
......@@ -130,7 +130,7 @@ long UInterface::getSensorID( const char* name )
{
if( UniSetTypes::conf )
return UniSetTypes::conf->getSensorID(name);
return -1;
}
//---------------------------------------------------------------------------
......@@ -138,7 +138,7 @@ const char* UInterface::getName( long id )
{
if( UniSetTypes::conf )
return UniSetTypes::conf->oind->getMapName(id).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -146,7 +146,7 @@ const char* UInterface::getShortName( long id )
{
if( UniSetTypes::conf )
return ORepHelpers::getShortName(UniSetTypes::conf->oind->getMapName(id)).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -154,7 +154,7 @@ const char* UInterface::getTextName( long id )
{
if( UniSetTypes::conf )
return UniSetTypes::conf->oind->getTextName(id).c_str();
return "";
}
//---------------------------------------------------------------------------
......@@ -162,7 +162,7 @@ const char* UInterface::getConfFileName()
{
if( UniSetTypes::conf )
return UniSetTypes::conf->getConfFileName().c_str();
return "";
}
......
......@@ -226,8 +226,8 @@ long UModbus::data2value( VTypes::VType vtype, ModbusRTU::ModbusData* data )
if( p->rnum <= 1 )
{
if( p->stype == UniversalIO::DigitalInput ||
p->stype == UniversalIO::DigitalOutput )
if( p->stype == UniversalIO::DI ||
p->stype == UniversalIO::DO )
{
IOBase::processingAsDI( p, data[0], shm, force );
}
......
......@@ -109,110 +109,13 @@ void UniversalInterface::initBackId( UniSetTypes::ObjectId 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 - идентификатор датчика
*═\return текущее значение датчика
* \exception IOBadParam - генерируется если указано неправильное имя датчика или секции
* \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ
*/
long UniversalInterface::getValue(ObjectId name, ObjectId node)
long UniversalInterface::getValue( ObjectId name, ObjectId node )
throw(IO_THROW_EXCEPTIONS)
{
if ( name == DefaultObjectId )
......@@ -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,
UniSetTypes::ObjectId sup_id )
{
......@@ -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 node - идентификатор узла на котором заказывается датчик
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \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)
{
if( backid==UniSetTypes::DefaultObjectId )
backid = myid;
if( backid==UniSetTypes::DefaultObjectId )
throw UniSetTypes::IOBadParam("UI(askRemoteState): Unknown back ID");
throw UniSetTypes::IOBadParam("UI(askRemoteSensor): unknown back ID");
if ( name == DefaultObjectId )
throw ORepFailed("UI(askRemoteState): id=UniSetTypes::DefaultObjectId");
throw ORepFailed("UI(askRemoteSensor): id=UniSetTypes::DefaultObjectId");
try
{
......@@ -794,7 +502,7 @@ void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand
ConsumerInfo_var ci;
ci->id = backid;
ci->node = uconf->getLocalNode();
inc->askState(si, ci, cmd );
inc->askSensor(si, ci, cmd );
return;
}
catch(CORBA::TRANSIENT){}
......@@ -808,371 +516,55 @@ void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand
catch(IOController_i::NameNotFound &ex)
{
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)
{
rcache.erase(name, node);
throw UniSetTypes::IOBadParam("UI(askState): "+string(ex.err));
throw UniSetTypes::IOBadParam("UI(askSensor): "+string(ex.err));
}
catch(ORepFailed)
{
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)
{
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)
{
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)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askState): ошибка системы коммуникации" << endl;
// unideb[Debug::WARN] << "UI(askSensor): ошибка системы коммуникации" << endl;
}
catch(CORBA::SystemException& ex)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askState): CORBA::SystemException" << endl;
// unideb[Debug::WARN] << "UI(askSensor): CORBA::SystemException" << endl;
}
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 node - идентификатор узла на котором заказывается датчик
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика)
* \param name - идентификатор объекта
* \param node - идентификатор узла
*/
void UniversalInterface::askRemoteSensor( ObjectId name, 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(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)
IOType UniversalInterface::getIOType(ObjectId name, ObjectId node)
throw(IO_THROW_EXCEPTIONS)
{
if ( name == DefaultObjectId )
......@@ -1248,7 +640,7 @@ IOTypes UniversalInterface::getIOType(ObjectId name, ObjectId 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() );
}
......@@ -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 )
{
if( id == DefaultObjectId )
......@@ -2545,10 +1560,10 @@ IOController_i::CalibrateInfo UniversalInterface::getCalibrateInfo( const IOCont
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 )
return IOController_i::ASensorInfoSeq_var();
return IOController_i::SensorInfoSeq_var();
ObjectId sid = lst.getFirst();
......@@ -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 )
return UniversalIO::UnknownIOType;
......
......@@ -241,9 +241,6 @@ struct MsgInfo
MsgInfo():
type(Message::Unused),
id(DefaultObjectId),
acode(DefaultMessageCode),
ccode(DefaultMessageCode),
ch(0),
node(DefaultObjectId)
{
// struct timezone tz;
......@@ -254,9 +251,6 @@ struct MsgInfo
int type;
ObjectId id; // от кого
MessageCode acode; // код сообщения
MessageCode ccode; // код причины
int ch; // характер
struct timeval tm; // время
ObjectId node; // откуда
......@@ -271,12 +265,6 @@ struct MsgInfo
if( 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 )
return tm.tv_sec < mi.tm.tv_sec;
......
......@@ -313,16 +313,16 @@ using namespace UniSetTypes;
// ------------------------------------------------------------------------------------------
std::ostream& UniSetTypes::operator<<( std::ostream& os, const UniversalIO::IOType t )
{
if( t == UniversalIO::AnalogInput )
if( t == UniversalIO::AI )
return os << "AI";
if( t == UniversalIO::DigitalInput )
if( t == UniversalIO::DI )
return os << "DI";
if( t == UniversalIO::AnalogOutput )
if( t == UniversalIO::AO )
return os << "AO";
if( t == UniversalIO::DigitalOutput )
if( t == UniversalIO::DO )
return os << "DO";
return os << "UnknownIOType";
......@@ -351,3 +351,4 @@ using namespace UniSetTypes;
return true;
}
// ------------------------------------------------------------------------------------------
......@@ -33,25 +33,23 @@ using namespace UniversalIO;
using namespace std;
// ------------------------------------------------------------------------------------------
IOController::IOController():
dioMutex("dioMutex"),
aioMutex("aioMutex")
ioMutex("ioMutex"),
isPingDBServer(true)
{
}
// ------------------------------------------------------------------------------------------
IOController::IOController(const string name, const string section):
IOController::IOController(const string name, const string section):
ObjectsManager(name, section),
dioMutex(name+"_dioMutex"),
aioMutex(name+"_aioMutex"),
ioMutex(name+"_ioMutex"),
isPingDBServer(true)
{
}
IOController::IOController(ObjectId id):
IOController::IOController(ObjectId id):
ObjectsManager(id),
dioMutex(string(conf->oind->getMapName(id))+"_dioMutex"),
aioMutex(string(conf->oind->getMapName(id))+"_aioMutex"),
ioMutex(string(conf->oind->getMapName(id))+"_ioMutex"),
isPingDBServer(true)
{
}
......@@ -77,28 +75,13 @@ bool IOController::disactivateObject()
// ------------------------------------------------------------------------------------------
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();
li != aioList.end(); ++li)
for( IOStateList::iterator li = ioList.begin();
li != ioList.end(); ++li)
{
try
{
sUnRegistration( li->second.si );
ioUnRegistration( li->second.si );
}
catch(Exception& ex)
{
......@@ -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 )
{
AIOStateList::iterator li(aioList.end());
try
{
return localGetValue(li,si);
} // getState if not found...
catch( IOController_i::NameNotFound )
{
DIOStateList::iterator d(dioList.end());
return (localGetState(d,si) ? 1 : 0);
}
IOStateList::iterator li(ioList.end());
return localGetValue(li,si);
}
// ------------------------------------------------------------------------------------------
bool IOController::localGetState( IOController::DIOStateList::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,
long IOController::localGetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si )
{
if( li == aioList.end() )
li = aioList.find( key(si.id,si.node) );
if( li == ioList.end() )
li = ioList.find( key(si.id,si.node) );
if( li!=aioList.end() )
if( li!=ioList.end() )
{
if( li->second.undefined )
throw IOController_i::Undefined();
......@@ -180,53 +115,35 @@ long IOController::localGetValue( IOController::AIOStateList::iterator& li,
// -------------
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);
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl;
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,
CORBA::Boolean undefined, UniSetTypes::ObjectId sup_id )
{
IOController::AIOStateList::iterator li(aioList.end());
IOController::IOStateList::iterator li(ioList.end());
localSetUndefinedState( li,undefined,si );
}
// -----------------------------------------------------------------------------
void IOController::localSetUndefinedState( AIOStateList::iterator& li,
void IOController::localSetUndefinedState( IOStateList::iterator& li,
bool undefined, const IOController_i::SensorInfo& si )
{
// сохранение текущего состояния
if( li == aioList.end() )
li = aioList.find(key(si.id, si.node));
if( li == ioList.end() )
li = ioList.find(key(si.id, si.node));
if( li==aioList.end() )
if( li==ioList.end() )
{
ostringstream err;
err << myname << "(localSetUndefined): Unknown sensor (" << si.id << ":" << si.node << ")"
<< "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());
}
......@@ -237,114 +154,24 @@ void IOController::localSetUndefinedState( AIOStateList::iterator& li,
} // unlock
}
// ------------------------------------------------------------------------------------------
void IOController::localSaveState( IOController::DIOStateList::iterator& li,
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 )
void IOController::fastSetValue( const IOController_i::SensorInfo& si, CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
try
{
IOController::AIOStateList::iterator li(aioList.end());
localSaveValue( li, si,value, sup_id );
IOController::IOStateList::iterator li(ioList.end());
localSetValue( li, si, value, sup_id );
}
catch(...){}
}
// ------------------------------------------------------------------------------------------
void IOController::saveValue( const IOController_i::SensorInfo& si, CORBA::Long value,
IOTypes type, UniSetTypes::ObjectId sup_id )
void IOController::setValue( const IOController_i::SensorInfo& si, CORBA::Long value,
UniSetTypes::ObjectId sup_id )
{
IOController::AIOStateList::iterator li(aioList.end());
localSaveValue( li, si,value, sup_id );
IOController::IOStateList::iterator li(ioList.end());
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,
CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
......@@ -352,29 +179,19 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
sup_id = getId();
// сохранение текущего состояния
// AIOStateList::iterator li( aioList.end() );
if( li == aioList.end() )
li = aioList.find(key(si.id, si.node));
// IOStateList::iterator li( ioList.end() );
if( li == ioList.end() )
li = ioList.find(key(si.id, si.node));
if( li==aioList.end() )
if( li==ioList.end() )
{
ostringstream err;
err << myname << "(localSaveValue): Unknown sensor (" << si.id << ":" << si.node << ")"
<< "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());
}
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
uniset_rwmutex_wrlock lock(li->second.val_lock);
......@@ -383,11 +200,11 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
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) )
{
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)
<< " node: " << conf->oind->getMapName(si.node)
<< " value="<< value << endl;
......@@ -418,17 +235,12 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
} // 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);
// Проверяем в списке дискретных
DIOStateList::iterator li = dioList.find(k);
if( li!=dioList.end() )
return li->second.type;
// Проверяем в списке аналоговых
AIOStateList::iterator ali = aioList.find(k);
if( ali!=aioList.end() )
IOStateList::iterator ali = ioList.find(k);
if( ali!=ioList.end() )
return ali->second.type;
ostringstream err;
......@@ -437,139 +249,15 @@ IOTypes IOController::getIOType( const IOController_i::SensorInfo& si )
throw IOController_i::NameNotFound(err.str().c_str());
}
// ---------------------------------------------------------------------------
void IOController::setState( const IOController_i::SensorInfo& si, CORBA::Boolean state, UniSetTypes::ObjectId sup_id )
{
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,
#if 0
void IOController::localSetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si, CORBA::Long value,
UniSetTypes::ObjectId sup_id )
{
if( li == aioList.end() )
li = aioList.find( key(si.id, si.node) );
if( li == ioList.end() )
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
uniset_rwmutex_wrlock lock(li->second.val_lock);
......@@ -592,7 +280,7 @@ void IOController::localSetValue( IOController::AIOStateList::iterator& li,
li->second.tv_usec = tm.tv_usec;
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 << ")"
<< conf->oind->getNameById(si.id, si.node) << " = " << value
<< " blocked=" << li->second.blocked
......@@ -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);
unideb[Debug::INFO] << err.str() << endl;
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 )
{
ostringstream err;
err << "(IOCOntroller::dsRegistration): КОНТРОЛЛЕРУ НЕ ЗАДАН ObjectId. Регистрация невозможна.";
err << "(IOCOntroller::ioRegistration): КОНТРОЛЛЕРУ НЕ ЗАДАН ObjectId. Регистрация невозможна.";
unideb[Debug::WARN] << err.str() << endl;
throw ResolveNameError(err.str().c_str());
}
UniSetTypes::KeyType k = key(ainf.si.id, ainf.si.node);
{ // lock
uniset_rwmutex_wrlock lock(aioMutex);
uniset_rwmutex_wrlock lock(ioMutex);
if( !force )
{
AIOStateList::iterator li = aioList.find(k);
if( li!=aioList.end() )
IOStateList::iterator li = ioList.find(k);
if( li!=ioList.end() )
{
ostringstream err;
err << "Попытка повторной регистрации датчика("<< k << "). имя: "
......@@ -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 timezone tz;
......@@ -726,7 +337,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
ai.value = ai.default_val;
// более оптимальный способ(при условии вставки первый раз)
aioList.insert(AIOStateList::value_type(k,ai));
ioList.insert(IOStateList::value_type(k,ai));
}
try
......@@ -738,7 +349,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << myname
<< "(asRegistration): регистрирую "
<< "(ioRegistration): регистрирую "
<< conf->oind->getNameById(ainf.si.id, ainf.si.node) << endl;
}
ui.registered( ainf.si.id, ainf.si.node, getRef(), true );
......@@ -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(...)
{
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 );
}
// ---------------------------------------------------------------------------
void IOController::logging( UniSetTypes::SensorMessage& sm )
{
uniset_rwmutex_wrlock l(loggingMutex);
......@@ -805,31 +417,9 @@ void IOController::dumpToDB()
if( conf->getDBServer() == UniSetTypes::DefaultObjectId )
return;
// Проходим по списку дискретных
{ // lock
// uniset_mutex_lock lock(dioMutex, 100);
for( DIOStateList::iterator li = dioList.begin(); li!=dioList.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_mutex_lock lock(ioMutex, 100);
for( IOStateList::iterator li = ioList.begin(); li!=ioList.end(); ++li )
{
uniset_rwmutex_rlock lock(li->second.val_lock);
SensorMessage sm;
......@@ -837,7 +427,6 @@ void IOController::dumpToDB()
sm.node = li->second.si.node;
sm.sensor_type = li->second.type;
sm.value = li->second.value;
sm.state = sm.value!=0 ? true:false;
sm.undefined = li->second.undefined;
sm.priority = (Message::Priority)li->second.priority;
sm.sm_tv_sec = li->second.tv_sec;
......@@ -849,17 +438,17 @@ void IOController::dumpToDB()
} // unlock
}
// --------------------------------------------------------------------------------------------------------------
IOController_i::ASensorInfoSeq* IOController::getAnalogSensorsMap()
IOController_i::SensorInfoSeq* IOController::getSensorsMap()
{
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом
IOController_i::ASensorInfoSeq* res = new IOController_i::ASensorInfoSeq();
res->length( aioList.size());
IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq();
res->length( ioList.size());
// { // lock
// uniset_mutex_lock lock(aioMutex, 500);
// uniset_mutex_lock lock(ioMutex, 500);
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);
(*res)[i] = it->second;
......@@ -870,74 +459,25 @@ IOController_i::ASensorInfoSeq* IOController::getAnalogSensorsMap()
return res;
}
// --------------------------------------------------------------------------------------------------------------
IOController_i::DSensorInfoSeq* IOController::getDigitalSensorsMap()
UniSetTypes::Message::Priority IOController::getMessagePriority(UniSetTypes::KeyType k, UniversalIO::IOType type )
{
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом
IOController_i::DSensorInfoSeq* res = new IOController_i::DSensorInfoSeq();
res->length(dioList.size());
IOStateList::iterator it = ioList.find(k);
if( it!=ioList.end() )
return (UniSetTypes::Message::Priority)it->second.priority;
// { // 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; // ??
}
// --------------------------------------------------------------------------------------------------------------
UniSetTypes::Message::Priority IOController::getPriority(const IOController_i::SensorInfo& si,
UniversalIO::IOTypes type)
UniversalIO::IOType 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) );
if( it!=dioList.end() )
IOStateList::iterator it = ioList.find( key(si.id, si.node) );
if( it!=ioList.end() )
{
uniset_rwmutex_rlock lock(it->second.val_lock);
return it->second;
......@@ -945,43 +485,23 @@ IOController_i::DigitalIOInfo IOController::getDInfo(const IOController_i::Senso
// -------------
ostringstream err;
err << myname << "(getDInfo): Unknown digital sensor (" << 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;
}
err << myname << "(getAInfo): Unknown sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node);
// -------------
ostringstream err;
err << myname << "(getAInfo): Unknown analog sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node);
if( unideb.debugging(Debug::INFO) )
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
// --------------------------------------------------------------------------------------------------------------
CORBA::Long IOController::getRawValue(const IOController_i::SensorInfo& si)
{
AIOStateList::iterator it = aioList.find( key(si.id, si.node) );
if( it==aioList.end() )
IOStateList::iterator it = ioList.find( key(si.id, si.node) );
if( it==ioList.end() )
{
ostringstream err;
err << myname << "(getRawValue): Unknown analog sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node);
err << myname << "(getRawValue): Unknown analog sensor (" << si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id,si.node);
throw IOController_i::NameNotFound(err.str().c_str());
}
......@@ -990,11 +510,11 @@ CORBA::Long IOController::getRawValue(const IOController_i::SensorInfo& si)
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);
// п╨п╟п╩п╦п╠я─я┐п╣п╪ п╡ п╬п╠я─п╟я┌п╫я┐я▌ я│я┌п╬я─п╬п╫я┐ (п╫п╟ п╡я▀я┘п╬п╢)
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);
}
......@@ -1005,11 +525,11 @@ void IOController::calibrate(const IOController_i::SensorInfo& si,
const IOController_i::CalibrateInfo& ci,
UniSetTypes::ObjectId adminId )
{
AIOStateList::iterator it = aioList.find( key(si.id, si.node) );
if( it==aioList.end() )
IOStateList::iterator it = ioList.find( key(si.id, si.node) );
if( it==ioList.end() )
{
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);
throw IOController_i::NameNotFound(err.str().c_str());
}
......@@ -1022,87 +542,45 @@ void IOController::calibrate(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) );
if( it==aioList.end() )
IOStateList::iterator it = ioList.find( key(si.id, si.node) );
if( it==ioList.end() )
{
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);
throw IOController_i::NameNotFound(err.str().c_str());
}
return it->second.ci;
}
// --------------------------------------------------------------------------------------------------------------
IOController::UniDigitalIOInfo&
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),
IOController::USensorIOInfo::USensorIOInfo(IOController_i::SensorIOInfo& ai):
IOController_i::SensorIOInfo(ai),
any(0),
dlst_lock(false)
{}
IOController::UniDigitalIOInfo::UniDigitalIOInfo(const IOController_i::DigitalIOInfo& di):
IOController_i::DigitalIOInfo(di),
IOController::USensorIOInfo::USensorIOInfo(const IOController_i::SensorIOInfo& ai):
IOController_i::SensorIOInfo(ai),
any(0),
dlst_lock(false)
{}
IOController::UniAnalogIOInfo::UniAnalogIOInfo(IOController_i::AnalogIOInfo& ai):
IOController_i::AnalogIOInfo(ai),
IOController::USensorIOInfo::USensorIOInfo(IOController_i::SensorIOInfo* ai):
IOController_i::SensorIOInfo(*ai),
any(0),
dlst_lock(false)
{}
IOController::UniAnalogIOInfo::UniAnalogIOInfo(const IOController_i::AnalogIOInfo& ai):
IOController_i::AnalogIOInfo(ai),
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)
IOController::USensorIOInfo&
IOController::USensorIOInfo::operator=(IOController_i::SensorIOInfo& r)
{
(*this) = r;
// any=0;
return *this;
}
IOController::UniAnalogIOInfo&
IOController::UniAnalogIOInfo::operator=(IOController_i::AnalogIOInfo* r)
IOController::USensorIOInfo&
IOController::USensorIOInfo::operator=(IOController_i::SensorIOInfo* r)
{
(*this) = (*r);
// any=0;
......@@ -1110,8 +588,8 @@ IOController::UniAnalogIOInfo&
return *this;
}
const IOController::UniAnalogIOInfo&
IOController::UniAnalogIOInfo::operator=(const IOController_i::AnalogIOInfo& r)
const IOController::USensorIOInfo&
IOController::USensorIOInfo::operator=(const IOController_i::SensorIOInfo& r)
{
(*this) = r;
// any=0;
......@@ -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 )
{
for( DFilterSlotList::iterator it=dfilters.begin(); it!=dfilters.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 )
for( IOFilterSlotList::iterator it=iofilters.begin(); it!=iofilters.end(); ++it )
{
if( (*it)(ai,newvalue,sup_id) == false )
return false;
......@@ -1142,88 +609,37 @@ bool IOController::checkAFilters( const UniAnalogIOInfo& ai, CORBA::Long& newval
}
// ----------------------------------------------------------------------------------------
IOController::AFilterSlotList::iterator IOController::addAFilter( AFilterSlot 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 )
IOController::IOFilterSlotList::iterator IOController::addIOFilter( IOFilterSlot sl, bool push_front )
{
if( push_front == false )
{
dfilters.push_back(sl);
DFilterSlotList::iterator it(dfilters.end());
iofilters.push_back(sl);
IOFilterSlotList::iterator it(iofilters.end());
return --it;
}
dfilters.push_front(sl);
return dfilters.begin();
}
// ----------------------------------------------------------------------------------------
void IOController::eraseAFilter(IOController::AFilterSlotList::iterator& it)
{
afilters.erase(it);
iofilters.push_front(sl);
return iofilters.begin();
}
// ----------------------------------------------------------------------------------------
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()
{
// { // 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()
IOController::IOStateList::iterator IOController::myioBegin()
{
// { // lock
// uniset_mutex_lock lock(aioMutex, 200);
return aioList.end();
// }
return ioList.begin();
}
IOController::AIOStateList::iterator IOController::myafind(UniSetTypes::KeyType k)
IOController::IOStateList::iterator IOController::myioEnd()
{
// { // lock
// uniset_mutex_lock lock(aioMutex, 200);
return aioList.find(k);
// }
return ioList.end();
}
IOController::DIOStateList::iterator IOController::mydfind(UniSetTypes::KeyType k)
IOController::IOStateList::iterator IOController::myiofind(UniSetTypes::KeyType k)
{
// { // lock
// uniset_mutex_lock lock(dioMutex, 200);
return dioList.find(k);
// }
return ioList.find(k);
}
// -----------------------------------------------------------------------------
IOController::DependsInfo::DependsInfo( bool init ):
......@@ -1232,11 +648,9 @@ IOController::DependsInfo::DependsInfo( bool init ):
{
}
// -----------------------------------------------------------------------------
IOController::DependsInfo::DependsInfo( IOController_i::SensorInfo& si,
DIOStateList::iterator& dit, AIOStateList::iterator& ait ):
IOController::DependsInfo::DependsInfo( IOController_i::SensorInfo& si, IOStateList::iterator& it ):
si(si),
dit(dit),
ait(ait),
it(it),
block_invert(false),
init(true)
{
......@@ -1251,22 +665,13 @@ void IOController::updateDepends( IOController::DependsList& lst, bool undefined
lst_lock = true;
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);
updateDepends( it->dit->second.dlst,undefined,it->dit->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 );
updateDepends( it->it->second.dlst,undefined,it->it->second.dlst_lock );
}
}
}
......@@ -1285,23 +690,13 @@ void IOController::updateBlockDepends( IOController::DependsList& lst, bool blk_
{
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;
it->dit->second.blocked = set_blk;
localSaveState( it->dit, it->si,set, 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() );
long val = set_blk ? it->it->second.value : it->it->second.real_value;
it->it->second.blocked = set_blk;
localSetValue( it->it, it->si, val, getId() );
bslot(it,set_blk);
}
}
......@@ -1320,43 +715,21 @@ void IOController::setBlockDependsSlot( DependsSlot sl )
bslot = sl;
}
// -----------------------------------------------------------------------------
IOController_i::ASensorInfoSeq* IOController::getSensorSeq( const IDSeq& lst )
IOController_i::SensorInfoSeq* IOController::getSensorSeq( const IDSeq& lst )
{
int size = lst.length();
IOController_i::ASensorInfoSeq* res = new IOController_i::ASensorInfoSeq();
IOController_i::SensorInfoSeq* res = new IOController_i::SensorInfoSeq();
res->length(size);
for(int i=0; i<size; i++)
{
{
DIOStateList::iterator it = dioList.find( UniSetTypes::key(lst[i],conf->getLocalNode()) );
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;
}
}
for( int i=0; i<size; i++ )
{
IOStateList::iterator it = ioList.find( UniSetTypes::key(lst[i],conf->getLocalNode()) );
if( it!=ioList.end() )
{
AIOStateList::iterator it = aioList.find( UniSetTypes::key(lst[i],conf->getLocalNode()) );
if( it!=aioList.end() )
{
uniset_rwmutex_rlock lock(it->second.val_lock);
(*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
for(int i=0; i<size; i++)
{
{
DIOStateList::iterator it = dioList.find( UniSetTypes::key(lst[i].si.id,lst[i].si.node) );
if( it!=dioList.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() )
IOStateList::iterator it = ioList.find( UniSetTypes::key(lst[i].si.id,lst[i].si.node) );
if( it!=ioList.end() )
{
if( it->second.type == UniversalIO::AnalogInput )
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);
localSetValue(it,lst[i].si,lst[i].value, sup_id);
continue;
}
}
......@@ -1410,19 +767,8 @@ IDSeq* IOController::setOutputSeq(const IOController_i::OutSeq& lst, ObjectId su
// -----------------------------------------------------------------------------
IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i::SensorInfo& si )
{
DIOStateList::iterator dit = dioList.find( key(si.id, si.node) );
if( dit!=dioList.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() )
IOStateList::iterator ait = ioList.find( key(si.id, si.node) );
if( ait!=ioList.end() )
{
IOController_i::ShortIOInfo i;
uniset_rwmutex_rlock lock(ait->second.val_lock);
......@@ -1434,7 +780,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i::
// -------------
ostringstream err;
err << myname << "(getChangedTime): дискретный вход(выход) с именем "
err << myname << "(getChangedTime): вход(выход) с именем "
<< conf->oind->getNameById(si.id) << " не найден";
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
......@@ -1445,10 +791,10 @@ IOController_i::ShortMapSeq* IOController::getSensors()
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом
IOController_i::ShortMapSeq* res = new IOController_i::ShortMapSeq();
res->length( aioList.size() + dioList.size() );
res->length( ioList.size() );
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;
{
......@@ -1459,19 +805,7 @@ IOController_i::ShortMapSeq* IOController::getSensors()
}
(*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;
}
// -----------------------------------------------------------------------------
......@@ -40,8 +40,7 @@ using namespace std;
// ------------------------------------------------------------------------------------------
IONotifyController::IONotifyController():
restorer(NULL),
askDMutex("askDMutex"),
askAMutex("askAMutex"),
askIOMutex("askIOMutex"),
trshMutex("trshMutex"),
maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
{
......@@ -51,28 +50,24 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
IONotifyController::IONotifyController(const string name, const string section, NCRestorer* d ):
IOController(name, section),
restorer(d),
askDMutex(name+"askDMutex"),
askAMutex(name+"askAMutex"),
askIOMutex(name+"askIOMutex"),
trshMutex(name+"trshMutex"),
maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
{
// добавляем фильтры
addAFilter( sigc::mem_fun(this,&IONotifyController::myAFilter) );
addDFilter( sigc::mem_fun(this,&IONotifyController::myDFilter) );
addIOFilter( sigc::mem_fun(this,&IONotifyController::myIOFilter) );
setDependsSlot( sigc::mem_fun(this,&IONotifyController::onChangeUndefined) );
}
IONotifyController::IONotifyController( ObjectId id, NCRestorer* d ):
IOController(id),
restorer(d),
askDMutex(string(conf->oind->getMapName(id))+"_askDMutex"),
askAMutex(string(conf->oind->getMapName(id))+"_askAMutex"),
askIOMutex(string(conf->oind->getMapName(id))+"_askIOMutex"),
trshMutex(string(conf->oind->getMapName(id))+"_trshMutex"),
maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
{
// добавляем фильтры
addAFilter( sigc::mem_fun(this,&IONotifyController::myAFilter) );
addDFilter( sigc::mem_fun(this,&IONotifyController::myDFilter) );
addIOFilter( sigc::mem_fun(this,&IONotifyController::myIOFilter) );
setDependsSlot( sigc::mem_fun(this,&IONotifyController::onChangeUndefined) );
}
......@@ -146,168 +141,31 @@ bool IONotifyController::removeConsumer(ConsumerList& lst, const ConsumerInfo& c
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 ci - информация о заказчике
* \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 )
{
// провреки на несуществующий датчик проводить не надо т.к. заказчик ппинципиально
// не может обратится к этому контроллеру по ссылке на другой датчик
// (ведь ссылка на датчик это ссылка на контроллер который за него отвечает)
// контроль заказа именно АНАЛОГОВО датчика производится
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(si.id,si.node) << endl;
}
// если такого аналогового датчика нет, здесь сработает исключение...
AIOStateList::iterator li = myaioEnd();
IOStateList::iterator li = myioEnd();
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
uniset_rwmutex_wrlock lock(askAMutex);
uniset_rwmutex_wrlock lock(askIOMutex);
// а раз есть заносим(исключаем) заказчика
ask( askAIOList, si, ci, cmd);
ask( askIOList, si, ci, cmd);
} // unlock
// посылка первый раз состояния
......@@ -326,20 +184,19 @@ void IONotifyController::askValue(const IOController_i::SensorInfo& si,
{
uniset_rwmutex_rlock lock(li->second.val_lock);
smsg.value = li->second.value;
smsg.state = li->second.value ? true:false;
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());
TransportMessage tm(smsg.transport_msg());
try
{
ui.send(ci.id, tm, ci.node);
}
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 )
{
......@@ -439,13 +296,7 @@ void IONotifyController::ask(AskMap& askLst, const IOController_i::SensorInfo& s
}
}
// ------------------------------------------------------------------------------------------
bool IONotifyController::myDFilter(const UniDigitalIOInfo& di,
CORBA::Boolean newstate, UniSetTypes::ObjectId sup_id)
{
return ( di.state == newstate ) ? false : true;
}
// ------------------------------------------------------------------------------------------
bool IONotifyController::myAFilter(const UniAnalogIOInfo& ai,
bool IONotifyController::myIOFilter(const USensorIOInfo& ai,
CORBA::Long newvalue, UniSetTypes::ObjectId sup_id)
{
if( ai.value == newvalue )
......@@ -460,71 +311,16 @@ bool IONotifyController::myAFilter(const UniAnalogIOInfo& ai,
return true;
}
// ------------------------------------------------------------------------------------------
void IONotifyController::localSaveState( IOController::DIOStateList::iterator& it,
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,
void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
// Если датчик не найден сдесь сработает исключение
long prevValue = IOController::localGetValue( li, si );
if( li == myaioEnd() ) // ???
if( li == myioEnd() ) // ???
{
ostringstream err;
err << myname << "(localSaveValue): аналоговый вход(выход) с именем "
err << myname << "(localSetValue): аналоговый вход(выход) с именем "
<< conf->oind->getNameById(si.id) << " не найден";
if( unideb.debugging(Debug::INFO) )
......@@ -532,7 +328,7 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
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
// т.к. фактическое сохранённое значение может быть изменено
......@@ -547,7 +343,6 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
// Рассылаем уведомления только в слуае изменения значения
sm.id = si.id;
sm.node = si.node;
sm.state = li->second.value!=0 ? true:false;
sm.value = li->second.value;
sm.undefined = li->second.undefined;
sm.priority = (Message::Priority)li->second.priority;
......@@ -573,10 +368,10 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
}
catch(...){}
AskMap::iterator it = askAIOList.find( key(si.id,si.node) );
if( it!=askAIOList.end() )
AskMap::iterator it = askIOList.find( key(si.id,si.node) );
if( it!=askIOList.end() )
{ // lock
uniset_rwmutex_rlock lock(askAMutex);
uniset_rwmutex_rlock lock(askIOMutex);
send(it->second, sm);
}
......@@ -677,29 +472,8 @@ void IONotifyController::dumpOrdersList(const IOController_i::SensorInfo& si,
try
{
NCRestorer::SInfo inf;
UniversalIO::IOTypes t(getIOType(si));
switch( t )
{
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;
}
IOController_i::SensorIOInfo ainf( getSensorIOInfo(si) );
inf=ainf;
restorer->dump(this,inf,lst);
}
catch(Exception& ex)
......@@ -717,28 +491,8 @@ void IONotifyController::dumpThresholdList(const IOController_i::SensorInfo& si,
try
{
NCRestorer::SInfo inf;
UniversalIO::IOTypes t(getIOType(si));
switch( t )
{
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;
}
IOController_i::SensorIOInfo ainf(getSensorIOInfo(si));
inf=ainf;
restorer->dumpThreshold(this,inf,lst);
}
catch(Exception& ex)
......@@ -757,7 +511,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
throw IONotifyController_i::BadRange();
// если такого дискретного датчика нет сдесь сработает исключение...
AIOStateList::iterator li = myaioEnd();
IOStateList::iterator li = myioEnd();
CORBA::Long val = localGetValue(li,si);
{ // lock
......@@ -767,7 +521,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
UniSetTypes::KeyType skey( key(si.id,si.node) );
AskThresholdMap::iterator it = askTMap.find(skey);
ThresholdInfoExt ti(tid,lowLimit, hiLimit,sb);
ti.itSID = mydioEnd();
ti.itSID = myioEnd();
switch( cmd )
{
......@@ -781,7 +535,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
tli.si = si;
tli.list = lst;
tli.type = li->second.type;
tli.ait = myaioEnd();
tli.ait = myioEnd();
addThreshold(lst,ti,ci);
askTMap.insert(AskThresholdMap::value_type(skey,tli));
try
......@@ -826,7 +580,6 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
sm.id = si.id;
sm.node = si.node;
sm.value = val;
sm.state = val!=0 ? true:false;
sm.undefined = li->second.undefined;
sm.sensor_type = li->second.type;
sm.priority = (Message::Priority)li->second.priority;
......@@ -946,7 +699,7 @@ bool IONotifyController::removeThreshold(ThresholdExtList& lst, ThresholdInfoExt
return false;
}
// --------------------------------------------------------------------------------------------------------------
void IONotifyController::checkThreshold( AIOStateList::iterator& li,
void IONotifyController::checkThreshold( IOStateList::iterator& li,
const IOController_i::SensorInfo& si,
bool send_msg )
{
......@@ -962,10 +715,10 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if( lst->second.list.empty() )
return;
if( li == myaioEnd() )
li = myafind(key(si.id, si.node));
if( li == myioEnd() )
li = myiofind(key(si.id, si.node));
if( li==myaioEnd() )
if( li==myioEnd() )
return; // ???
SensorMessage sm;
......@@ -977,7 +730,6 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
{
uniset_rwmutex_rlock lock(li->second.val_lock);
sm.value = li->second.value;
sm.state = li->second.value!=0 ? true:false;
sm.undefined = li->second.undefined;
sm.sm_tv_sec = li->second.tv_sec;
sm.sm_tv_usec = li->second.tv_usec;
......@@ -1018,7 +770,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if( it->inverse )
state^=1;
localSaveState(it->itSID,SensorInfo(it->sid),state,getId());
localSetValue(it->itSID,SensorInfo(it->sid),(state ? 1:0),getId());
}
catch( UniSetTypes::Exception& ex )
{
......@@ -1028,7 +780,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
}
if( send_msg )
send(it->clst, sm);
send(it->clst, sm);
}
// Проверка верхнего предела
// значение должно быть больше hiLimit+чуствительность
......@@ -1056,7 +808,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if( it->inverse )
state^=1;
localSaveState(it->itSID,SensorInfo(it->sid),state,getId());
localSetValue(it->itSID,SensorInfo(it->sid),(state?1:0),getId());
}
catch( UniSetTypes::Exception& ex )
{
......@@ -1075,161 +827,8 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
}
// --------------------------------------------------------------------------------------------------------------
void IONotifyController::askOutput(const IOController_i::SensorInfo& si,
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd)
{
// провреки на несуществующий выход проводить не надо т.к. заказчик принципиально
// не может обратится к этому контроллеру по ссылке на другой датчик
// (ведь ссылка на датчик это ссылка на контроллер который за него отвечает)
// контроль заказа типа выхода здесь производится
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,
#if 0
void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
......@@ -1281,7 +880,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li
AskMap::iterator dit = askAOList.find( UniSetTypes::key(si.id,si.node) );
if( dit!=askAOList.end() )
{ // lock
uniset_rwmutex_rlock lock(askAMutex);
uniset_rwmutex_rlock lock(askIOMutex);
send(dit->second, sm);
}
......@@ -1292,7 +891,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li
// }
// catch(...){}
}
#endif
// --------------------------------------------------------------------------------------------------------------
IONotifyController::ThresholdExtList::iterator IONotifyController::findThreshold( UniSetTypes::KeyType key, UniSetTypes::ThresholdId tid )
......@@ -1386,39 +985,28 @@ void IONotifyController::onChangeUndefined( DependsList::iterator it, bool undef
sm.node = it->si.node;
sm.undefined = undefined;
if( it->dit != mydioEnd() )
{
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() )
if( it->it != myioEnd() )
{
sm.value = it->ait->second.value;
sm.state = sm.value!=0 ? true:false;
sm.sm_tv_sec = it->ait->second.tv_sec;
sm.sm_tv_usec = it->ait->second.tv_usec;
sm.priority = (Message::Priority)it->ait->second.priority;
sm.sensor_type = it->ait->second.type;
sm.ci = it->ait->second.ci;
sm.value = it->it->second.value;
sm.sm_tv_sec = it->it->second.tv_sec;
sm.sm_tv_usec = it->it->second.tv_usec;
sm.priority = (Message::Priority)it->it->second.priority;
sm.sensor_type = it->it->second.type;
sm.ci = it->it->second.ci;
sm.supplier = DefaultObjectId;
}
try
{
if( !it->ait->second.db_ignore )
if( !it->it->second.db_ignore )
loggingInfo(sm);
}
catch(...){}
AskMap::iterator it1 = askDIOList.find( key(it->si.id,it->si.node) );
if( it1!=askDIOList.end() )
AskMap::iterator it1 = askIOList.find( key(it->si.id,it->si.node) );
if( it1!=askIOList.end() )
{ // lock
uniset_rwmutex_rlock lock(askDMutex);
uniset_rwmutex_rlock lock(askIOMutex);
send(it1->second, sm);
} // unlock
}
......
......@@ -970,7 +970,7 @@ xmlNode* Configuration::getXMLObjectNode( UniSetTypes::ObjectId id )
return 0;
}
// -------------------------------------------------------------------------
UniversalIO::IOTypes Configuration::getIOType( UniSetTypes::ObjectId id )
UniversalIO::IOType Configuration::getIOType( UniSetTypes::ObjectId id )
{
const ObjectInfo* i = oind->getObjectInfo(id);
if( i && (xmlNode*)(i->data) )
......@@ -982,7 +982,7 @@ UniversalIO::IOTypes Configuration::getIOType( UniSetTypes::ObjectId id )
return UniversalIO::UnknownIOType;
}
// -------------------------------------------------------------------------
UniversalIO::IOTypes Configuration::getIOType( const std::string name )
UniversalIO::IOType Configuration::getIOType( const std::string name )
{
// Если указано "короткое" имя
// то просто сперва ищём ID, а потом по нему
......
......@@ -71,10 +71,9 @@ VoidMessage::VoidMessage()
//--------------------------------------------------------------------------------------------
SensorMessage::SensorMessage():
id(DefaultObjectId),
state(false),
value(0),
undefined(false),
sensor_type(UniversalIO::DigitalInput),
sensor_type(UniversalIO::DI),
threshold(false),
tid(UniSetTypes::DefaultThresholdId)
{
......@@ -90,37 +89,10 @@ tid(UniSetTypes::DefaultThresholdId)
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,
Priority priority,
UniversalIO::IOTypes st, ObjectId consumer):
UniversalIO::IOType st, ObjectId consumer):
id(id),
state(false),
value(value),
undefined(false),
sensor_type(st),
......@@ -128,7 +100,6 @@ ci(ci),
threshold(false),
tid(UniSetTypes::DefaultThresholdId)
{
state = value != 0;
type = Message::SensorInfo;
this->priority = priority;
this->consumer = consumer;
......
......@@ -57,14 +57,11 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
// Регистрируем (если не найден)
switch(inf.type)
{
case UniversalIO::DigitalInput:
case UniversalIO::DigitalOutput:
ic->dsRegistration(inf);
break;
case UniversalIO::AnalogInput:
case UniversalIO::AnalogOutput:
ic->asRegistration(inf);
case UniversalIO::DI:
case UniversalIO::DO:
case UniversalIO::AI:
case UniversalIO::AO:
ic->ioRegistration(inf);
break;
default:
......@@ -79,20 +76,11 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
switch(inf.type)
{
case UniversalIO::DigitalInput:
ic->askDIOList[k]=lst;
break;
case UniversalIO::AnalogInput:
ic->askAIOList[k]=lst;
break;
case UniversalIO::DigitalOutput:
ic->askDOList[k]=lst;
break;
case UniversalIO::AnalogOutput:
ic->askAOList[k]=lst;
case UniversalIO::DI:
case UniversalIO::AI:
case UniversalIO::DO:
case UniversalIO::AO:
ic->askIOList[k]=lst;
break;
default:
......@@ -117,14 +105,11 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
// Регистрируем (если не найден)
switch(inf.type)
{
case UniversalIO::DigitalInput:
case UniversalIO::DigitalOutput:
ic->dsRegistration(inf);
break;
case UniversalIO::AnalogInput:
case UniversalIO::AnalogOutput:
ic->asRegistration(inf);
case UniversalIO::DI:
case UniversalIO::DO:
case UniversalIO::AI:
case UniversalIO::AO:
ic->ioRegistration(inf);
break;
default:
......@@ -135,26 +120,26 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
// default init iterators
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) );
ic->askTMap[k].si = inf.si;
ic->askTMap[k].type = inf.type;
ic->askTMap[k].list = lst;
ic->askTMap[k].ait = ic->myaioEnd();
ic->askTMap[k].ait = ic->myioEnd();
try
{
switch( inf.type )
{
case UniversalIO::DigitalInput:
case UniversalIO::DigitalOutput:
case UniversalIO::AnalogOutput:
case UniversalIO::DI:
case UniversalIO::DO:
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);
}
break;
......@@ -178,25 +163,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
}
}
// ------------------------------------------------------------------------------------------
NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::DigitalIOInfo& 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)
NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::SensorIOInfo& inf)
{
this->si = inf.si;
this->type = inf.type;
......@@ -210,18 +177,3 @@ NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::AnalogIOInfo& in
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*
switch(inf.type)
{
case UniversalIO::DigitalOutput:
case UniversalIO::DigitalInput:
{
try
{
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:
case UniversalIO::DO:
case UniversalIO::DI:
case UniversalIO::AO:
case UniversalIO::AI:
{
try
{
asRegistration(ic, inf, true);
ioRegistration(ic, inf, true);
}
catch(Exception& ex)
{
......@@ -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.maxRaw = xml.getIntProp(it,"rmax");
......@@ -456,9 +442,9 @@ bool NCRestorer_XML::getThresholdInfo( UniXML& xml,xmlNode* node,
}
else
{
UniversalIO::IOTypes iotype = conf->getIOType(ti.sid);
UniversalIO::IOType iotype = conf->getIOType(ti.sid);
// Пока что IONotifyController поддерживает работу только с 'DI'.
if( iotype != UniversalIO::DigitalInput )
if( iotype != UniversalIO::DI )
{
unideb[Debug::CRIT] << "(NCRestorer_XML:getThresholdInfo): "
<< " 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
continue;
UniSetTypes::KeyType k = UniSetTypes::key(mydepinfo.si.id,mydepinfo.si.node);
mydepinfo.dit = dioFind(ic,k);
mydepinfo.ait = aioFind(ic,k);
if( mydepinfo.dit==dioEnd(ic) && mydepinfo.ait==aioEnd(ic) )
mydepinfo.it = ioFind(ic,k);
if( mydepinfo.it==ioEnd(ic) )
{
unideb[Debug::CRIT] << "(NCRestorer_XML:build_depends): Датчик "
<< xml.getProp(node,"name")
......@@ -602,9 +587,8 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
if( getDependsInfo(xml,dit,blk) )
{
k = UniSetTypes::key(blk.si.id,blk.si.node);
blk.dit = dioFind(ic,k);
blk.ait = aioFind(ic,k);
if( blk.dit==dioEnd(ic) && blk.ait==aioEnd(ic) )
blk.it = ioFind(ic,k);
if( blk.it==ioEnd(ic) )
{
unideb[Debug::CRIT] << ic->getName() << "(NCRestorer_XML:build_depends): "
<< " Не найдена зависимость на " << xml.getProp(dit,"name")
......@@ -616,33 +600,22 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
long block_val = dit.getIntProp("block_value");
long defval = 0;
if( blk.dit != dioEnd(ic) )
defval = blk.dit->second.default_val;
else if( blk.ait != aioEnd(ic) )
defval = blk.ait->second.default_val;
if( blk.it != ioEnd(ic) )
defval = blk.it->second.default_val;
// Проверка начальных условий для высталения блокировки
bool blk_set = defval ? false : true;
if( mydepinfo.block_invert )
blk_set ^= true;
if( mydepinfo.dit!=dioEnd(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) )
if( mydepinfo.it!=ioEnd(ic) )
{
mydepinfo.ait->second.blocked = blk_set;
mydepinfo.ait->second.block_value = block_val;
mydepinfo.it->second.blocked = blk_set;
mydepinfo.it->second.block_value = block_val;
if( blk_set )
{
mydepinfo.ait->second.real_value = mydepinfo.ait->second.value;
mydepinfo.ait->second.value = block_val;
mydepinfo.it->second.real_value = mydepinfo.it->second.value;
mydepinfo.it->second.value = block_val;
}
}
......@@ -650,21 +623,9 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
// (без проверки на дублирование
// т.к. не может быть два одинаковых ID
// в конф. файле...
if( blk.dit != dioEnd(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) )
if( blk.it != ioEnd(ic) )
{
blk.ait->second.dlst.push_back(mydepinfo);
blk.it->second.dlst.push_back(mydepinfo);
if( unideb.debugging(Debug::INFO) )
{
unideb[Debug::INFO] << ic->getName() << "(NCRestorer_XML:build_depends):"
......
......@@ -130,12 +130,7 @@ void SMonitor::sensorInfo( SensorMessage *si )
cout << "(" << setw(6) << si->id << "): " << setw(8) << UniversalInterface::timeToString(si->sm_tv_sec,":")
<< "(" << setw(6) << si->sm_tv_usec << "): ";
cout << setw(45) << conf->oind->getMapName(si->id);
if( si->sensor_type == UniversalIO::DigitalInput || si->sensor_type == UniversalIO::DigitalOutput )
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;
cout << "\tvalue=" << si->value << "\tfvalue=" << ( (float)si->value / pow(10.0,si->ci.precision) ) << endl;
if( !script.empty() )
{
......@@ -147,13 +142,7 @@ void SMonitor::sensorInfo( SensorMessage *si )
else
cmd << conf->getBinDir() << script;
cmd << " " << si->id << " ";
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;
cmd << " " << si->id << " " << si->value << " " << si->sm_tv_sec << " " << si->sm_tv_usec;
(void)system(cmd.str().c_str());
// if( WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
......
......@@ -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 )
return;
}
IOController_i::DSensorInfoSeq_var dmap = ioc->getDigitalSensorsMap();
IOController_i::ASensorInfoSeq_var amap = ioc->getAnalogSensorsMap();
IOController_i::SensorInfoSeq_var amap = ioc->getSensorsMap();
IONotifyController_i::ThresholdsListSeq_var tlst = ioc->getThresholdsList();
try
{ updateDSensors(dmap, id);
}catch(...){};
try
{ updateASensors(amap, id);
{ updateSensors(amap, id);
}catch(...){}
try
......@@ -213,59 +208,16 @@ void SViewer::getInfo( ObjectId id )
}
// ---------------------------------------------------------------------------
void SViewer::updateDSensors(IOController_i::DSensorInfoSeq_var& dmap, 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)
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 << "\t Датчики";
cout << "\n------------------------------------------------------"<< endl;
int size = amap->length();
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);
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
cout << "------------------------------------------------------\n";
cout << "\n======================================================\n" << owner;
cout << "\t Аналоговые выходы";
cout << "\t Выходы";
cout << "\n------------------------------------------------------"<< endl;
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);
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
cout << "(" << setw(5) << tlst[i].si.id << ") | ";
switch( tlst[i].type )
{
case UniversalIO::AnalogInput:
case UniversalIO::AI:
cout << "AI";
break;
case UniversalIO::AnalogOutput:
case UniversalIO::AO:
cout << "AO";
break;
......
......@@ -14,7 +14,7 @@ int main(int argc, const char **argv)
cout << "--confile - Configuration file. Default: test.xml" << endl;
return 0;
}
cout << "**** uni_atoi('')=" << uni_atoi("") << endl;
try
......@@ -32,38 +32,37 @@ int main(int argc, const char **argv)
string mn(conf->oind->getMapName(1));
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 << "**** 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;
UniversalIO::IOTypes t3=conf->getIOType("Input1_S");
cout << "**** check getIOType(name): for short name 'Input1_S': (" << t3 << ") " << ( t3 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
UniversalIO::IOType t3=conf->getIOType("Input1_S");
cout << "**** check getIOType(name): for short name 'Input1_S': (" << t3 << ") " << ( t3 == UniversalIO::UnknownIOType ? "FAILED" : "OK" ) << endl;
int i1 = uni_atoi("-100");
cout << "**** check uni_atoi: '-100' " << ( ( i1 != -100 ) ? "FAILED" : "OK" ) << endl;
int i2 = uni_atoi("20");
cout << "**** check uni_atoi: '20' " << ( ( i2 != 20 ) ? "FAILED" : "OK" ) << endl;
xmlNode* cnode = conf->getNode("testnode");
if( cnode == NULL )
{
cerr << "<testnode name='testnode'> not found" << endl;
return 1;
if( cnode == NULL )
{
cerr << "<testnode name='testnode'> not found" << endl;
return 1;
}
cout << "**** check conf->getNode function [OK] " << endl;
UniXML_iterator it(cnode);
UniXML_iterator it(cnode);
int prop2 = conf->getArgInt("--prop-id2",it.getProp("id2"));
cerr << "**** check conf->getArgInt(arg1,...): " << ( (prop2 == 0) ? "[FAILED]" : "OK" ) << endl;
int prop3 = conf->getArgInt("--prop-dummy",it.getProp("id2"));
cerr << "**** check conf->getArgInt(...,arg2): " << ( (prop3 != -100) ? "[FAILED]" : "OK" ) << endl;
int prop1 = conf->getArgPInt("--prop-id2",it.getProp("id2"),0);
cerr << "**** check conf->getArgPInt(...): " << ( (prop1 == 0) ? "[FAILED]" : "OK" ) << endl;
......@@ -72,10 +71,10 @@ int main(int argc, const char **argv)
int prop5 = conf->getArgPInt("--prop-dummy",it.getProp("dummy"),0);
cerr << "**** check conf->getArgPInt(...,...,defval): " << ( (prop5 != 0) ? "[FAILED]" : "OK" ) << endl;
return 0;
}
catch(SystemError& err)
......
......@@ -22,9 +22,9 @@ int main( int argc, const char **argv )
}
cout << "** check getConfIOType function **" << endl;
UniversalIO::IOTypes t = ui.getConfIOType(id1);
UniversalIO::IOType t = ui.getConfIOType(id1);
cout << "sensor ID=" << id1 << " iotype=" << t << endl;
if( t != UniversalIO::DigitalInput )
if( t != UniversalIO::DI )
{
cout << "** FAILED! check getSensorID function **" << endl;
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