Commit c6a97f32 authored by Pavel Vainerman's avatar Pavel Vainerman

доперенёс потерянные изменения из 1.x

parent 8f9b2053
# This file is a part of the NCS project. (c) 1999-2002 All rights reserved.
# $Id: idl.mk,v 1.2 2006/10/14 16:53:22 vpashka Exp $
# Общий файл для IDL
# Нужно иметь в виду, что когда порождаемые omniidl файлы
# будут кем-либо изменены, они перегенерируются только
# при изменении исходного IDL
IDLFLAGS = -I$(top_builddir)/IDL
# Получения списков генерируемых файлов
HHTARG=$(patsubst %.idl, ${HHDIR}/%.hh, ${IDLFILES})
CCTARG=$(patsubst %.idl, ${CCDIR}/%SK.cc, ${IDLFILES})
########################################################################
all: ${HHTARG} ${CCTARG}
dynamic: all
${HHTARG} ${CCTARG}: ${IDLFILES}
for i in $^; do ${IDL} -v -bcxx ${IDLFLAGS} $$i; done
mv --target-directory=${HHDIR} *.hh
mv --target-directory=${CCDIR} *.cc
.PHONY: clean depend
clean:
${RM} ${HHTARG} ${CCTARG}
depend:
install:
...@@ -5,7 +5,5 @@ ...@@ -5,7 +5,5 @@
SUBDIRS = scripts Admin NullController SViewer-text \ SUBDIRS = scripts Admin NullController SViewer-text \
SMonit MBTester codegen SImitator SMonit MBTester codegen SImitator
include $(top_builddir)/conf/common.mk
...@@ -9,44 +9,17 @@ ...@@ -9,44 +9,17 @@
in - входные регистры (только для чтения) in - входные регистры (только для чтения)
out - выходные регистры (запись) out - выходные регистры (запись)
--> -->
<TestProc> <Skel>
<settings> <settings>
<set name="class-name" val="TestProc"/> <set name="class-name" val="Skel"/>
<set name="msg-count" val="30"/> <set name="msg-count" val="20"/>
<set name="sleep-msec" val="150"/> <set name="sleep-msec" val="150"/>
</settings> </settings>
<variables> <smap>
<item name="changeTime" type="int" default="2000" min="0" comment="change state time" const="1" public="1" />
<item name="checkWorkingTime" type="int" default="3000" min="0" comment="check working time" const="1" public="1" />
<item name="checkTime" type="int" default="3000" min="0" comment="check Working time" const="1" public="1" />
<item name="checkLogTime" type="int" default="2500" min="0" comment="Проверка управления логами" const="1" public="1" />
</variables>
<smap>
<!-- name - название переменной в конф. файле --> <!-- name - название переменной в конф. файле -->
<item name="on_s" vartype="in" comment="Тестовый вход" smTestID="1"/>
<item name="lamp_c" vartype="out" comment="Лампочка (тестовый выход)"/>
<!-- проверка работы механизма зависимостей -->
<item name="depend_c" vartype="out" comment="Датчик от которого зависит состояние другого"/>
<item name="d1_check_s" vartype="in" comment="состояние зависимого датчика"/>
<item name="d2_check_s" vartype="in" comment="состояние зависимого датчика"/>
<item name="set_d1_check_s" vartype="out" comment="для выставления датчика"/>
<item name="set_d2_check_s" vartype="out" comment="для выставления датчика"/>
<!-- проверка работы undefined state -->
<item name="undef_c" vartype="out" comment="аналоговый датчик (для проверки undef-состояния)"/>
<item name="check_undef_s" vartype="in" comment="датчик для выставления undef-состояния"/>
<!-- проверка работы threshold-ов -->
<item name="t_set_c" vartype="out" comment="аналоговый датчик (для выставления порога)"/>
<item name="t_check_s" vartype="in" comment="датчик для проверки срабатывания"/>
<!-- Проверка управления логами -->
<item name="log_c" vartype="out" comment="аналоговый датчик для выставления уровня логов"/>
<item name="log_s" vartype="in" comment="датчик для управления логами" loglevel="1"/>
</smap> </smap>
<msgmap> <msgmap>
<!-- name - название переменной в конф. файле -->
</msgmap> </msgmap>
</TestProc> </Skel>
/*! \page page_Concept Основные понятия /*! \page page_Concept Основные понятия
В библиотеке \b uniset имеется ряд основопологающих кубиков (терминов), В библиотеке \b uniset имеется ряд основопологающих кубиков (терминов),
из которых складывается библиотека, и которые используются во многих из которых складывается библиотека, и которые используются во многих
местах данной документации. Здесь приводятся определения этих терминов. местах данной документации. Здесь приводятся определения этих терминов.
- \ref sec_Cnpt_Object - \ref sec_Concept_Object
- \ref sec_Cnpt_ObjectTypes - \ref sec_Concept_ObjectTypes
- \ref sec_Cnpt_Message - \ref sec_Concept_Message
- \ref sec_Cnpt_ObjectId - \ref sec_Concept_ObjectId
- \ref sec_Cnpt_Repository - \ref sec_Concept_Repository
- \ref sec_Cnpt_Sensor - \ref sec_Concept_Sensor
- \ref sec_Cnpt_Process - \ref sec_Concept_Process
\section sec_Cnpt_Object Объект \section sec_Concept_Object Объект
В разных местах описаний, в зависимости от контекста, В разных местах описаний, в зависимости от контекста,
под "объектом" подразумевается либо объект класса так или иначе наследующегося под "объектом" подразумевается либо объект класса так или иначе наследующегося
от базового класса библиотеки UniSetObject, либо от базового класса библиотеки UniSetObject, либо
некий концептуальный программный объект способный некий концептуальный программный объект способный
получать и обрабатывать сообщения. получать и обрабатывать сообщения.
\section sec_Cnpt_ObjectTypes Основные типы объектов \section sec_Concept_ObjectTypes Основные типы объектов
В библиотеке произведено условное деление на следующие типы объектов: В библиотеке произведено условное деление на следующие типы объектов:
- (простые) объекты - наследуются от класса UniSetObject - (простые) объекты - наследуются от класса UniSetObject
- контроллеры - являются наследниками класса IOController - контроллеры - являются наследниками класса IOController
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
- узлы - в строгом смысле, не являются объектами, - узлы - в строгом смысле, не являются объектами,
но обладают уникальным идентификатором. но обладают уникальным идентификатором.
\section sec_Cnpt_Message Сообщения \section sec_Concept_Message Сообщения
Вся система взаимодейтсвия между объектами в основном Вся система взаимодейтсвия между объектами в основном
построена на использовании сообщений (передаваемых построена на использовании сообщений (передаваемых
путём удаленного вызова специальных функций, путём удаленного вызова специальных функций,
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
Для разработчиков систем на основе libuniset, заложена Для разработчиков систем на основе libuniset, заложена
возможность определять свои типы сообщений, при этом их возможность определять свои типы сообщений, при этом их
идентификаторы \b должны начинатся от значения идентификаторы \b должны начинатся от значения
UniSetTypes::Message::TheLastFieldOfTypeOfMessage. UniSetTypes::Message::TheLastFieldOfTypeOfMessage.
\code \code
enum MyMessageTypes enum MyMessageTypes
...@@ -53,15 +53,15 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage. ...@@ -53,15 +53,15 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage.
\endcode \endcode
\section sec_Cnpt_ObjectId Идентификатор объекта \section sec_Concept_ObjectId Идентификатор объекта
Каждый объект, которому необходимо взаимодействовать с другими объектами Каждый объект, которому необходимо взаимодействовать с другими объектами
(в том числе датчиками см. \ref sec_Cnpt_Sensor) должен обладать уникальным (в том числе датчиками см. \ref sec_Concept_Sensor) должен обладать уникальным
идентификатором. В качестве идентификатора выступает любое число типа \b UniSetTypes::ObjectId. идентификатором. В качестве идентификатора выступает любое число типа \b UniSetTypes::ObjectId.
Зарезервированным числом является UniSetTypes::DefaultObjectId. Зарезервированным числом является UniSetTypes::DefaultObjectId.
Минимальное требование - это уникальность в рамках одного узла. Минимальное требование - это уникальность в рамках одного узла.
Так как полный идентификатор объекта формируется парой \b <id,\b node> Так как полный идентификатор объекта формируется парой \b <id,\b node>
Где \b node - такое же число, являющееся идентификатором узла. Где \b node - такое же число, являющееся идентификатором узла.
При этом приветствуется использование идентификатора уникального При этом приветствуется использование идентификатора уникального
в рамках всей создаваемой системы. Т.к. в последствии возможен в рамках всей создаваемой системы. Т.к. в последствии возможен
уход от использования параметра node. уход от использования параметра node.
...@@ -99,7 +99,7 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage. ...@@ -99,7 +99,7 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage.
<objects name="UniObjects"> <objects name="UniObjects">
<item name="TestProc1"/> <item name="TestProc1"/>
<item name="TestProc2"/> <item name="TestProc2"/>
</objects> </objects>
</ObjectsMap> </ObjectsMap>
... ...
</Configurations> </Configurations>
...@@ -155,7 +155,7 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage. ...@@ -155,7 +155,7 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage.
<objects name="UniObjects"> <objects name="UniObjects">
<item id="200" name="TestProc1"/> <item id="200" name="TestProc1"/>
<item id="201" name="TestProc2"/> <item id="201" name="TestProc2"/>
</objects> </objects>
</ObjectsMap> </ObjectsMap>
... ...
</Configurations> </Configurations>
...@@ -165,13 +165,13 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage. ...@@ -165,13 +165,13 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage.
следить сам разработчик (хотя эта проверка может быть автоматизирована следить сам разработчик (хотя эта проверка может быть автоматизирована
не сложными скриптами). не сложными скриптами).
\section sec_Concept_Repository Репозиторий объектов
\section sec_Cnpt_Repository Репозиторий объектов \section sec_Concept_Sensor Датчик
\section sec_Cnpt_Sensor Датчик
Датчик - это одно из базовых понятий при построении систем на основе libuniset. Датчик - это одно из базовых понятий при построении систем на основе libuniset.
Датчик - это информационная единица. Практически любая информация Датчик - это информационная единица. Практически любая информация
(о событиях, о состоянии того или иного процесса, объекта, сообщение оператору и т.п.) (о событиях, о состоянии того или иного процесса, объекта, сообщение оператору и т.п.)
передаётся через состояние "датчика". В библиотеке предусмотрено четыре типа датчиков. передаётся через состояние "датчика". В библиотеке предусмотрено четыре типа датчиков.
- DI - UniversalIO::DigitalInput - дискретный вход - DI - UniversalIO::DigitalInput - дискретный вход
- DO - UniversalIO::DigitalOutput - дискретный выход - DO - UniversalIO::DigitalOutput - дискретный выход
...@@ -183,15 +183,15 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage. ...@@ -183,15 +183,15 @@ UniSetTypes::Message::TheLastFieldOfTypeOfMessage.
"Входы"(DI,AI) - это информация от объекта "в систему управления". "Входы"(DI,AI) - это информация от объекта "в систему управления".
Помимо этого, датчики не обязательно должны быть "живыми" входами или выходами. Помимо этого, датчики не обязательно должны быть "живыми" входами или выходами.
При помощи этих четырёх типов, можно кодировать любую информацию, При помощи этих четырёх типов, можно кодировать любую информацию,
Например можно передавать сообщения оператору, заранее создавая для каждого Например можно передавать сообщения оператору, заранее создавая для каждого
сообщения свой "датчик" и в случае необходимости послать сообщение сообщения свой "датчик" и в случае необходимости послать сообщение
выставлять его в "1". выставлять его в "1".
Удобство и универсальность датчиков (цифр) позволяет использовать для Удобство и универсальность датчиков (цифр) позволяет использовать для
передачи данных большое число различных протоколов, расчитанных передачи данных большое число различных протоколов, расчитанных
на передачу цифровой информации (не текстовой). на передачу цифровой информации (не текстовой).
Например CAN, ModbusRTU, ModbusTCP и т.п. Например CAN, ModbusRTU, ModbusTCP и т.п.
\section sec_Cnpt_Process Процесс \section sec_Concept_Process Процесс
Под процессом в документации чаще всего подразумевается системный Под процессом в документации чаще всего подразумевается системный
процесс (запущенная программа) выполняющий те или иные функции управления процесс (запущенная программа) выполняющий те или иные функции управления
и обменивающийся для этого с другими процессами сообщениями или и обменивающийся для этого с другими процессами сообщениями или
......
...@@ -108,7 +108,7 @@ void PassiveLProcessor::sysCommand( const UniSetTypes::SystemMessage *sm ) ...@@ -108,7 +108,7 @@ void PassiveLProcessor::sysCommand( const UniSetTypes::SystemMessage *sm )
switch( sm->command ) switch( sm->command )
{ {
case SystemMessage::StartUp: case SystemMessage::StartUp:
{ {
if( !shm->waitSMready(smReadyTimeout) ) if( !shm->waitSMready(smReadyTimeout) )
{ {
dcrit << myname << "(ERR): SM not ready. Terminated... " << endl; dcrit << myname << "(ERR): SM not ready. Terminated... " << endl;
...@@ -126,11 +126,11 @@ void PassiveLProcessor::sysCommand( const UniSetTypes::SystemMessage *sm ) ...@@ -126,11 +126,11 @@ void PassiveLProcessor::sysCommand( const UniSetTypes::SystemMessage *sm )
case SystemMessage::Finish: case SystemMessage::Finish:
askSensors(UniversalIO::UIODontNotify); askSensors(UniversalIO::UIODontNotify);
break; break;
case SystemMessage::WatchDog: case SystemMessage::WatchDog:
{ {
// ОПТИМИЗАЦИЯ (защита от двойного перезаказа при старте) // ОПТИМИЗАЦИЯ (защита от двойного перезаказа при старте)
// Если идёт локальная работа // Если идёт локальная работа
// (т.е. RTUExchange запущен в одном процессе с SharedMemory2) // (т.е. RTUExchange запущен в одном процессе с SharedMemory2)
// то обрабатывать WatchDog не надо, т.к. мы и так ждём готовности SM // то обрабатывать WatchDog не надо, т.к. мы и так ждём готовности SM
// при заказе датчиков, а если SM вылетит, то вместе с этим процессом(RTUExchange) // при заказе датчиков, а если SM вылетит, то вместе с этим процессом(RTUExchange)
...@@ -169,7 +169,7 @@ void PassiveLProcessor::sysCommand( const UniSetTypes::SystemMessage *sm ) ...@@ -169,7 +169,7 @@ void PassiveLProcessor::sysCommand( const UniSetTypes::SystemMessage *sm )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool PassiveLProcessor::activateObject() bool PassiveLProcessor::activateObject()
{ {
// блокирование обработки Starsp // блокирование обработки Starsp
// пока не пройдёт инициализация датчиков // пока не пройдёт инициализация датчиков
// см. sysCommand() // см. sysCommand()
{ {
......
...@@ -9,47 +9,47 @@ using namespace UniSetExtensions; ...@@ -9,47 +9,47 @@ using namespace UniSetExtensions;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
int main(int argc, const char **argv) int main(int argc, const char **argv)
{ {
try try
{ {
string confile=UniSetTypes::getArgParam("--confile",argc,argv,"configure.xml"); string confile=UniSetTypes::getArgParam("--confile",argc,argv,"configure.xml");
conf = new Configuration( argc, argv, confile ); conf = new Configuration( argc, argv, confile );
string logfilename(conf->getArgParam("--logicproc-logfile")); string logfilename(conf->getArgParam("--logicproc-logfile"));
if( logfilename.empty() ) if( logfilename.empty() )
logfilename = "logicproc.log"; logfilename = "logicproc.log";
conf->initDebug(dlog,"dlog");
std::ostringstream logname;
string dir(conf->getLogDir());
logname << dir << logfilename;
ulog.logFile( logname.str() );
dlog.logFile( logname.str() );
conf->initDebug(dlog,"dlog"); string schema = conf->getArgParam("--schema");
if( schema.empty() )
{
dcrit << "schema-file not defined. Use --schema" << endl;
return 1;
}
std::ostringstream logname; LProcessor plc;
string dir(conf->getLogDir()); plc.execute(schema);
logname << dir << logfilename; return 0;
unideb.logFile( logname.str() ); }
dlog.logFile( logname.str() ); catch( LogicException& ex )
{
string schema = conf->getArgParam("--schema"); cerr << ex << endl;
if( schema.empty() ) }
{ catch( Exception& ex )
dlog[Debug::CRIT] << "schema-file not defined. Use --schema" << endl; {
return 1; cerr << ex << endl;
} }
catch( ... )
LProcessor plc; {
plc.execute(schema); cerr << " catch ... " << endl;
return 0; }
}
catch( LogicException& ex ) return 1;
{
cerr << ex << endl;
}
catch( Exception& ex )
{
cerr << ex << endl;
}
catch( ... )
{
cerr << " catch ... " << endl;
}
return 1;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#!/bin/sh
ln -s -f ../../Utilities/scripts/uniset-start.sh
ln -s -f ../../Utilities/scripts/uniset-stop.sh stop.sh
ln -s -f ../../Utilities/scripts/uniset-functions.sh
ln -s -f ../../conf/test.xml test.xml
bin_PROGRAMS = @PACKAGE@-rtuexchange @PACKAGE@-mtr-conv @PACKAGE@-rtu188-state @PACKAGE@-vtconv @PACKAGE@-mtr-setup
# не забывайте править версию в pc-файле
URTU_VER=2:0:0
lib_LTLIBRARIES = libUniSetRTU.la
libUniSetRTU_la_LDFLAGS = -version-info $(URTU_VER)
libUniSetRTU_la_LIBADD = $(top_builddir)/lib/libUniSet.la \
$(top_builddir)/extensions/SharedMemory/libUniSetSharedMemory.la \
$(top_builddir)/extensions/lib/libUniSetExtensions.la \
$(top_builddir)/extensions/ModbusMaster/libMBMaster.la \
$(SIGC_LIBS)
libUniSetRTU_la_CXXFLAGS = -I$(top_builddir)/extensions/include -I$(top_builddir)/extensions/SharedMemory -I$(top_builddir)/extensions/ModbusMaster $(SIGC_CFLAGS)
libUniSetRTU_la_SOURCES = RTUExchange.cc
@PACKAGE@_rtuexchange_SOURCES = rtuexchange.cc
@PACKAGE@_rtuexchange_LDADD = libUniSetRTU.la $(top_builddir)/lib/libUniSet.la \
$(top_builddir)/extensions/SharedMemory/libUniSetSharedMemory.la \
$(top_builddir)/extensions/lib/libUniSetExtensions.la \
$(top_builddir)/extensions/ModbusMaster/libMBMaster.la \
$(SIGC_LIBS)
@PACKAGE@_rtuexchange_CXXFLAGS = -I$(top_builddir)/extensions/include -I$(top_builddir)/extensions/SharedMemory -I$(top_builddir)/extensions/ModbusMaster $(SIGC_CFLAGS)
@PACKAGE@_mtr_conv_SOURCES = mtrconv.cc
@PACKAGE@_mtr_conv_LDADD = $(top_builddir)/extensions/lib/libUniSetExtensions.la $(top_builddir)/lib/libUniSet.la
@PACKAGE@_mtr_conv_CXXFLAGS = -I$(top_builddir)/extensions/include
@PACKAGE@_mtr_setup_SOURCES = mtr-setup.cc
@PACKAGE@_mtr_setup_LDADD = $(top_builddir)/extensions/lib/libUniSetExtensions.la $(top_builddir)/lib/libUniSet.la
@PACKAGE@_mtr_setup_CXXFLAGS = -I$(top_builddir)/extensions/include
@PACKAGE@_vtconv_SOURCES = vtconv.cc
@PACKAGE@_vtconv_LDADD = $(top_builddir)/extensions/lib/libUniSetExtensions.la $(top_builddir)/lib/libUniSet.la
@PACKAGE@_vtconv_CXXFLAGS = -I$(top_builddir)/extensions/include
@PACKAGE@_rtu188_state_LDADD = libUniSetRTU.la \
$(top_builddir)/extensions/lib/libUniSetExtensions.la $(top_builddir)/lib/libUniSet.la \
$(top_builddir)/extensions/ModbusMaster/libMBMaster.la
@PACKAGE@_rtu188_state_CXXFLAGS = -I$(top_builddir)/extensions/include -I$(top_builddir)/extensions/ModbusMaster
@PACKAGE@_rtu188_state_SOURCES = rtustate.cc
# install
devel_include_HEADERS = *.h
devel_includedir = $(pkgincludedir)/extensions
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libUniSetRTU.pc
all-local:
ln -sf ../RTUExchange/$(devel_include_HEADERS) ../include
#!/bin/sh
ln -s -f ../../Utilities/scripts/uniset-start.sh
ln -s -f ../../Utilities/scripts/uniset-stop.sh stop.sh
ln -s -f ../../Utilities/scripts/uniset-functions.sh
ln -s -f ../../conf/test.xml test.xml
#!/bin/sh
ln -s -f ../../Utilities/scripts/uniset-start.sh
ln -s -f ../../Utilities/scripts/uniset-stop.sh stop.sh
ln -s -f ../../Utilities/scripts/uniset-functions.sh
ln -s -f ../../conf/test.xml test.xml
#include <sstream>
#include "ObjectsActivator.h"
#include "Extensions.h"
#include "UDPExchange.h"
// -----------------------------------------------------------------------------
using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
try
{
if( argc>1 && (!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h")) )
{
cout << "--smemory-id objectName - SharedMemory objectID. Default: read from <SharedMemory>" << endl;
cout << "--confile filename - configuration file. Default: configure.xml" << endl;
cout << "--udp-logfile filename - logfilename. Default: udpexchange.log" << endl;
cout << endl;
UDPExchange::help_print(argc,argv);
return 0;
}
string confile=UniSetTypes::getArgParam("--confile",argc,argv,"configure.xml");
conf = new Configuration( argc, argv, confile );
string logfilename(conf->getArgParam("--udp-logfile"));
if( logfilename.empty() )
logfilename = "udpexchange.log";
conf->initDebug(dlog,"dlog");
std::ostringstream logname;
string dir(conf->getLogDir());
logname << dir << logfilename;
unideb.logFile( logname.str() );
dlog.logFile( logname.str() );
ObjectId shmID = DefaultObjectId;
string sID = conf->getArgParam("--smemory-id");
if( !sID.empty() )
shmID = conf->getControllerID(sID);
else
shmID = getSharedMemoryID();
if( shmID == DefaultObjectId )
{
cerr << sID << "? SharedMemoryID not found in " << conf->getControllersSection() << " section" << endl;
return 1;
}
UDPExchange* rs = UDPExchange::init_udpexchange(argc,argv,shmID);
if( !rs )
{
dlog[Debug::CRIT] << "(udpexchange): init не прошёл..." << endl;
return 1;
}
ObjectsActivator act;
act.addObject(static_cast<class UniSetObject*>(rs));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
unideb(Debug::ANY) << "\n\n\n";
unideb[Debug::ANY] << "(main): -------------- UDP Exchange START -------------------------\n\n";
dlog(Debug::ANY) << "\n\n\n";
dlog[Debug::ANY] << "(main): -------------- UDP Exchange START -------------------------\n\n";
act.run(false);
// msleep(500);
// rs->execute();
return 0;
}
catch( Exception& ex )
{
dlog[Debug::CRIT] << "(udpexchange): " << ex << std::endl;
}
catch(...)
{
dlog[Debug::CRIT] << "(udpexchange): catch ..." << std::endl;
}
return 1;
}
#include <sstream>
#include "ObjectsActivator.h"
#include "Extensions.h"
#include "UDPReceiver.h"
// -----------------------------------------------------------------------------
using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
try
{
if( argc>1 && (!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h")) )
{
cout << "--smemory-id objectName - SharedMemory objectID. Default: read from <SharedMemory>" << endl;
cout << "--confile filename - configuration file. Default: configure.xml" << endl;
cout << "--udp-logfile filename - logfilename. Default: udpexchange.log" << endl;
cout << endl;
UDPReceiver::help_print(argc,argv);
return 0;
}
string confile=UniSetTypes::getArgParam("--confile",argc,argv,"configure.xml");
conf = new Configuration( argc, argv, confile );
string logfilename(conf->getArgParam("--udp-logfile"));
if( logfilename.empty() )
logfilename = "udpexchange.log";
conf->initDebug(dlog,"dlog");
std::ostringstream logname;
string dir(conf->getLogDir());
logname << dir << logfilename;
unideb.logFile( logname.str() );
dlog.logFile( logname.str() );
ObjectId shmID = DefaultObjectId;
string sID = conf->getArgParam("--smemory-id");
if( !sID.empty() )
shmID = conf->getControllerID(sID);
else
shmID = getSharedMemoryID();
if( shmID == DefaultObjectId )
{
cerr << sID << "? SharedMemoryID not found in " << conf->getControllersSection() << " section" << endl;
return 1;
}
UDPReceiver* udp = UDPReceiver::init_udpreceiver(argc,argv,shmID);
if( !udp )
{
dlog[Debug::CRIT] << "(udpreceiver): init не прошёл..." << endl;
return 1;
}
ObjectsActivator act;
act.addObject(static_cast<class UniSetObject*>(udp));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
unideb(Debug::ANY) << "\n\n\n";
unideb[Debug::ANY] << "(main): -------------- UDPRecevier START -------------------------\n\n";
dlog(Debug::ANY) << "\n\n\n";
dlog[Debug::ANY] << "(main): -------------- UDPReceiver START -------------------------\n\n";
act.run(false);
// msleep(500);
// rs->execute();
return 0;
}
catch( Exception& ex )
{
dlog[Debug::CRIT] << "(udpexchange): " << ex << std::endl;
}
catch( ost::SockException& e )
{
ostringstream s;
s << e.getString() << ": " << e.getSystemErrorString();
dlog[Debug::CRIT] << s.str() << endl;
}
catch(...)
{
dlog[Debug::CRIT] << "(udpexchange): catch ..." << std::endl;
}
return 1;
}
#include <sstream>
#include "ObjectsActivator.h"
#include "Extensions.h"
#include "UDPSender.h"
// -----------------------------------------------------------------------------
using namespace std;
using namespace UniSetTypes;
using namespace UniSetExtensions;
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
try
{
if( argc>1 && (!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h")) )
{
cout << "--smemory-id objectName - SharedMemory objectID. Default: read from <SharedMemory>" << endl;
cout << "--confile filename - configuration file. Default: configure.xml" << endl;
cout << "--udp-logfile filename - logfilename. Default: udpexchange.log" << endl;
cout << endl;
UDPSender::help_print(argc,argv);
return 0;
}
string confile=UniSetTypes::getArgParam("--confile",argc,argv,"configure.xml");
conf = new Configuration( argc, argv, confile );
string logfilename(conf->getArgParam("--udp-logfile"));
if( logfilename.empty() )
logfilename = "udpexchange.log";
conf->initDebug(dlog,"dlog");
std::ostringstream logname;
string dir(conf->getLogDir());
logname << dir << logfilename;
unideb.logFile( logname.str() );
dlog.logFile( logname.str() );
ObjectId shmID = DefaultObjectId;
string sID = conf->getArgParam("--smemory-id");
if( !sID.empty() )
shmID = conf->getControllerID(sID);
else
shmID = getSharedMemoryID();
if( shmID == DefaultObjectId )
{
cerr << sID << "? SharedMemoryID not found in " << conf->getControllersSection() << " section" << endl;
return 1;
}
UDPSender* udp = UDPSender::init_udpsender(argc,argv,shmID);
if( !udp )
{
dlog[Debug::CRIT] << "(udpsender): init не прошёл..." << endl;
return 1;
}
ObjectsActivator act;
act.addObject(static_cast<class UniSetObject*>(udp));
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
unideb(Debug::ANY) << "\n\n\n";
unideb[Debug::ANY] << "(main): -------------- UDPSender START -------------------------\n\n";
dlog(Debug::ANY) << "\n\n\n";
dlog[Debug::ANY] << "(main): -------------- UDPSender START -------------------------\n\n";
act.run(false);
// msleep(500);
// rs->execute();
return 0;
}
catch( Exception& ex )
{
dlog[Debug::CRIT] << "(udpsender): " << ex << std::endl;
}
catch( ost::SockException& e )
{
dlog[Debug::CRIT] << "(udpsender): " << e.getSystemErrorString() << endl;
}
catch(...)
{
dlog[Debug::CRIT] << "(udpsender): catch ..." << std::endl;
}
return 1;
}
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
START=uniset2-start.sh START=uniset2-start.sh
${START} -f ./smemory-test --confile test.xml --dlog-add-levels level1 --localNode LocalhostNode $* ${START} -f ./smemory-test --confile ./test.xml --dlog-add-levels level1 --localNode LocalhostNode $*
#--ulog-add-levels crit,warn,info #--ulog-add-levels crit,warn,info
......
<?xml version="1.0" encoding="utf-8"?>
<!--
name - название класса
msgcount - сколько сообщений обрабатывается за один раз
sleep_msec - пауза между итерациями в работе процесса
type
====
in - входные регистры (только для чтения)
out - выходные регистры (запись)
-->
<TestProc>
<settings>
<set name="class-name" val="TestProc"/>
<set name="msg-count" val="30"/>
<set name="sleep-msec" val="150"/>
</settings>
<variables>
<item name="changeTime" type="int" default="2000" min="0" comment="change state time" const="1" public="1" />
<item name="checkWorkingTime" type="int" default="3000" min="0" comment="check working time" const="1" public="1" />
<item name="checkTime" type="int" default="3000" min="0" comment="check Working time" const="1" public="1" />
<item name="checkLogTime" type="int" default="2500" min="0" comment="Проверка управления логами" const="1" public="1" />
</variables>
<smap>
<!-- name - название переменной в конф. файле -->
<item name="on_s" vartype="in" comment="Тестовый вход" smTestID="1"/>
<item name="lamp_c" vartype="out" comment="Лампочка (тестовый выход)"/>
<!-- проверка работы механизма зависимостей -->
<item name="depend_c" vartype="out" comment="Датчик от которого зависит состояние другого"/>
<item name="d1_check_s" vartype="in" comment="состояние зависимого датчика"/>
<item name="d2_check_s" vartype="in" comment="состояние зависимого датчика"/>
<item name="set_d1_check_s" vartype="out" comment="для выставления датчика"/>
<item name="set_d2_check_s" vartype="out" comment="для выставления датчика"/>
<!-- проверка работы undefined state -->
<item name="undef_c" vartype="out" comment="аналоговый датчик (для проверки undef-состояния)"/>
<item name="check_undef_s" vartype="in" comment="датчик для выставления undef-состояния"/>
<!-- проверка работы threshold-ов -->
<item name="t_set_c" vartype="out" comment="аналоговый датчик (для выставления порога)"/>
<item name="t_check_s" vartype="in" comment="датчик для проверки срабатывания"/>
<!-- Проверка управления логами -->
<item name="log_c" vartype="out" comment="аналоговый датчик для выставления уровня логов"/>
<item name="log_s" vartype="in" comment="датчик для управления логами" loglevel="1"/>
</smap>
<msgmap>
</msgmap>
</TestProc>
...@@ -20,10 +20,10 @@ ...@@ -20,10 +20,10 @@
/*! \file /*! \file
* \author Pavel Vainerman * \author Pavel Vainerman
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
# ifndef CallBackTimer_TEMPLATE_H_ # ifndef CallBackTimer_TCC_H_
# define CallBackTimer_TEMPLATE_H_ # define CallBackTimer_TCC_H_
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include <unistd.h> #include <unistd.h>
#include <sstream> #include <sstream>
#include "CallBackTimer.h" #include "CallBackTimer.h"
...@@ -69,7 +69,7 @@ void CallBackTimer<Caller>::work() ...@@ -69,7 +69,7 @@ void CallBackTimer<Caller>::work()
terminated = false; terminated = false;
while( !terminated ) while( !terminated )
{ {
usleep(UniSetTimer::MIN_QUANTITY_TIME_MKS); usleep(UniSetTimer::MIN_QUANTITY_TIME_MKS);
for( typename TimersList::iterator li=lst.begin(); li!=lst.end(); ++li ) for( typename TimersList::iterator li=lst.begin(); li!=lst.end(); ++li )
{ {
...@@ -110,9 +110,9 @@ void CallBackTimer<Caller>::add( int id, int timeMS )throw(UniSetTypes::LimitTim ...@@ -110,9 +110,9 @@ void CallBackTimer<Caller>::add( int id, int timeMS )throw(UniSetTypes::LimitTim
{ {
ostringstream err; ostringstream err;
err << "CallBackTimers: превышено максимальное количество таймеров" << MAXCallBackTimer; err << "CallBackTimers: превышено максимальное количество таймеров" << MAXCallBackTimer;
throw UniSetTypes::LimitTimers(err.str()); throw UniSetTypes::LimitTimers(err.str());
} }
PassiveTimer pt(timeMS); PassiveTimer pt(timeMS);
TimerInfo ti(id, pt); TimerInfo ti(id, pt);
lst.push_back(ti); lst.push_back(ti);
...@@ -124,7 +124,7 @@ template <class Caller> ...@@ -124,7 +124,7 @@ template <class Caller>
void CallBackTimer<Caller>::remove( int id ) void CallBackTimer<Caller>::remove( int id )
{ {
// STL - способ поиска // STL - способ поиска
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id)); typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() ) if( li!=lst.end() )
lst.erase(li); lst.erase(li);
} }
...@@ -147,7 +147,7 @@ void CallBackTimer<Caller>::clearTimers() ...@@ -147,7 +147,7 @@ void CallBackTimer<Caller>::clearTimers()
template <class Caller> template <class Caller>
void CallBackTimer<Caller>::reset( int id ) void CallBackTimer<Caller>::reset( int id )
{ {
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id)); typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() ) if( li!=lst.end() )
li->pt.reset(); li->pt.reset();
} }
...@@ -155,7 +155,7 @@ void CallBackTimer<Caller>::reset( int id ) ...@@ -155,7 +155,7 @@ void CallBackTimer<Caller>::reset( int id )
template <class Caller> template <class Caller>
void CallBackTimer<Caller>::setTiming( int id, int timeMS ) void CallBackTimer<Caller>::setTiming( int id, int timeMS )
{ {
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id)); typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() ) if( li!=lst.end() )
li->pt.setTimer(timeMS); li->pt.setTimer(timeMS);
} }
...@@ -163,7 +163,7 @@ void CallBackTimer<Caller>::setTiming( int id, int timeMS ) ...@@ -163,7 +163,7 @@ void CallBackTimer<Caller>::setTiming( int id, int timeMS )
template <class Caller> template <class Caller>
int CallBackTimer<Caller>::getInterval( int id ) int CallBackTimer<Caller>::getInterval( int id )
{ {
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id)); typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() ) if( li!=lst.end() )
return li->pt.getInterval(); return li->pt.getInterval();
return -1; return -1;
...@@ -172,12 +172,12 @@ int CallBackTimer<Caller>::getInterval( int id ) ...@@ -172,12 +172,12 @@ int CallBackTimer<Caller>::getInterval( int id )
template <class Caller> template <class Caller>
int CallBackTimer<Caller>::getCurrent( int id ) int CallBackTimer<Caller>::getCurrent( int id )
{ {
typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id)); typename TimersList::iterator li= find_if(lst.begin(),lst.end(),FindId_eq(id));
if( li!=lst.end() ) if( li!=lst.end() )
return li->pt.getCurrent(); return li->pt.getCurrent();
return -1; return -1;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
# endif //CallBackTimer_H_ # endif //CallBackTimer_TCC_H_
...@@ -44,11 +44,11 @@ class ProxyManager: ...@@ -44,11 +44,11 @@ class ProxyManager:
void attachObject( PassiveObject* po, UniSetTypes::ObjectId id ); void attachObject( PassiveObject* po, UniSetTypes::ObjectId id );
void detachObject( UniSetTypes::ObjectId id ); void detachObject( UniSetTypes::ObjectId id );
UInterface* uin; UInterface* uin;
protected: protected:
ProxyManager(); ProxyManager();
virtual void processingMessage( UniSetTypes::VoidMessage* msg ); virtual void processingMessage( UniSetTypes::VoidMessage* msg );
virtual void allMessage( UniSetTypes::VoidMessage* msg ); virtual void allMessage( UniSetTypes::VoidMessage* msg );
......
...@@ -8,7 +8,5 @@ libProcesses_la_LIBADD = $(SIGC_LIBS) ...@@ -8,7 +8,5 @@ libProcesses_la_LIBADD = $(SIGC_LIBS)
libProcesses_la_SOURCES = IOController_iSK.cc IOController.cc IONotifyController.cc IONotifyController_LT.cc \ libProcesses_la_SOURCES = IOController_iSK.cc IOController.cc IONotifyController.cc IONotifyController_LT.cc \
NCRestorer.cc NCRestorer_XML.cc NCRestorer.cc NCRestorer_XML.cc
include $(top_builddir)/conf/setting.mk
local-clean: local-clean:
rm -rf *iSK.cc rm -rf *iSK.cc
\ No newline at end of file
...@@ -6,7 +6,5 @@ libServices_la_CPPFLAGS = $(SIGC_CFLAGS) ...@@ -6,7 +6,5 @@ libServices_la_CPPFLAGS = $(SIGC_CFLAGS)
libServices_la_LIBADD = $(SIGC_LIBS) libServices_la_LIBADD = $(SIGC_LIBS)
libServices_la_SOURCES = DBServer.cc libServices_la_SOURCES = DBServer.cc
include $(top_builddir)/conf/setting.mk
local-clean: local-clean:
rm -rf *iSK.cc rm -rf *iSK.cc
\ No newline at end of file
...@@ -50,6 +50,3 @@ dlog_SOURCES = dlog.cc ...@@ -50,6 +50,3 @@ dlog_SOURCES = dlog.cc
dlog_LDADD = $(top_builddir)/lib/libUniSet2.la ${SIGC_LIBS} $(COMCPP_LIBS) dlog_LDADD = $(top_builddir)/lib/libUniSet2.la ${SIGC_LIBS} $(COMCPP_LIBS)
dlog_CPPFLAGS = -I$(top_builddir)/include ${SIGC_CFLAGS} $(COMCPP_CFLAGS) dlog_CPPFLAGS = -I$(top_builddir)/include ${SIGC_CFLAGS} $(COMCPP_CFLAGS)
include $(top_builddir)/conf/setting.mk
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