UniSet 2.32.1
Классы | Открытые типы | Открытые члены | Защищенные типы | Защищенные члены | Защищенные данные | Друзья | Полный список членов класса
Класс uniset::IONotifyController

#include <IONotifyController.h>

Граф наследования:uniset::IONotifyController:
Inheritance graph
[см. легенду]
Граф связей класса uniset::IONotifyController:
Collaboration graph
[см. легенду]

Классы

struct  ConsumerInfoExt
 
struct  ConsumerListInfo
 

Открытые типы

typedef std::list< ConsumerInfoExtConsumerList
 
typedef std::unordered_map< uniset::ObjectId, ConsumerListInfoAskMap
 
typedef std::unordered_map< UThresholdInfo *, ConsumerListInfoAskThresholdMap
 
- Открытые типы унаследованные от uniset::IOController
typedef std::unordered_map< uniset::ObjectId, std::shared_ptr< USensorInfo > > IOStateList
 
typedef sigc::signal< void, std::shared_ptr< USensorInfo > &, IOController * > ChangeSignal
 
typedef sigc::signal< void, std::shared_ptr< USensorInfo > &, IOController * > ChangeUndefinedStateSignal
 
typedef std::list< std::shared_ptr< UThresholdInfo > > ThresholdExtList
 

Открытые члены

 IONotifyController (const std::string &name, const std::string &section, std::shared_ptr< IOConfig > ioconf=nullptr)
 
 IONotifyController (const uniset::ObjectId id, std::shared_ptr< IOConfig > ioconf=nullptr)
 
virtual uniset::ObjectType getType () override
 
virtual uniset::SimpleInfogetInfo (const char *userparam=0) override
 
virtual void askSensor (const uniset::ObjectId sid, const uniset::ConsumerInfo &ci, UniversalIO::UIOCommand cmd) override
 
virtual void askThreshold (const uniset::ObjectId sid, const uniset::ConsumerInfo &ci, uniset::ThresholdId tid, CORBA::Long lowLimit, CORBA::Long hiLimit, CORBA::Boolean invert, UniversalIO::UIOCommand cmd) override
 
virtual IONotifyController_i::ThresholdInfo getThresholdInfo (const uniset::ObjectId sid, uniset::ThresholdId tid) override
 
virtual IONotifyController_i::ThresholdListgetThresholds (const uniset::ObjectId sid) override
 
virtual IONotifyController_i::ThresholdsListSeq * getThresholdsList () override
 
virtual uniset::IDSeqaskSensorsSeq (const uniset::IDSeq &lst, const uniset::ConsumerInfo &ci, UniversalIO::UIOCommand cmd) override
 
virtual Poco::JSON::Object::Ptr httpHelp (const Poco::URI::QueryParameters &p) override
 
virtual Poco::JSON::Object::Ptr httpRequest (const std::string &req, const Poco::URI::QueryParameters &p) override
 
- Открытые члены унаследованные от uniset::IOController
 IOController (const std::string &name, const std::string &section)
 
 IOController (const uniset::ObjectId id)
 
void setDBServer (const std::shared_ptr< uniset::DBServer > &dbserver)
 
virtual CORBA::Long getValue (uniset::ObjectId sid) override
 
virtual void setValue (uniset::ObjectId sid, CORBA::Long value, uniset::ObjectId sup_id=uniset::DefaultObjectId) override
 
virtual void setUndefinedState (uniset::ObjectId sid, CORBA::Boolean undefined, uniset::ObjectId sup_id=uniset::DefaultObjectId) override
 
virtual void freezeValue (uniset::ObjectId sid, CORBA::Boolean set, CORBA::Long value, uniset::ObjectId sup_id=uniset::DefaultObjectId) override
 
virtual IOController_i::SensorInfoSeq * getSensorSeq (const uniset::IDSeq &lst) override
 
virtual uniset::IDSeqsetOutputSeq (const IOController_i::OutSeq &lst, uniset::ObjectId sup_id) override
 
virtual UniversalIO::IOType getIOType (uniset::ObjectId sid) override
 
virtual IOController_i::SensorInfoSeq * getSensorsMap () override
 
virtual IOController_i::SensorIOInfo getSensorIOInfo (uniset::ObjectId sid) override
 
virtual CORBA::Long getRawValue (uniset::ObjectId sid) override
 
virtual void calibrate (uniset::ObjectId sid, const IOController_i::CalibrateInfo &ci, uniset::ObjectId adminId) override
 
IOController_i::CalibrateInfo getCalibrateInfo (uniset::ObjectId sid) override
 
IOController_i::SensorInfo SensorInfo (const uniset::ObjectId sid, const uniset::ObjectId node=uniset::uniset_conf() ->getLocalNode())
 
uniset::Message::Priority getPriority (const uniset::ObjectId id)
 
virtual IOController_i::ShortIOInfo getTimeChange (const uniset::ObjectId id) override
 
virtual IOController_i::ShortMapSeq * getSensors () override
 
ChangeSignal signal_change_value (uniset::ObjectId sid)
 
ChangeSignal signal_change_value ()
 
ChangeUndefinedStateSignal signal_change_undefined_state (uniset::ObjectId sid)
 
ChangeUndefinedStateSignal signal_change_undefined_state ()
 
IOStateList::iterator ioBegin ()
 
IOStateList::iterator ioEnd ()
 
IOStateList::iterator find (uniset::ObjectId k)
 
int ioCount () const noexcept
 
- Открытые члены унаследованные от uniset::UniSetManager
 UniSetManager (uniset::ObjectId id)
 
 UniSetManager (const std::string &name, const std::string &section)
 
virtual void broadcast (const uniset::TransportMessage &msg) override
 
virtual uniset::SimpleInfoSeq * getObjectsInfo (CORBA::Long MaxLength=300, const char *userparam=0) override
 
virtual bool add (const std::shared_ptr< UniSetObject > &obj)
 
virtual bool remove (const std::shared_ptr< UniSetObject > &obj)
 
size_t objectsCount () const
 
PortableServer::POA_ptr getPOA ()
 
PortableServer::POAManager_ptr getPOAManager ()
 
std::shared_ptr< UniSetManagerget_mptr ()
 
- Открытые члены унаследованные от uniset::UniSetObject
 UniSetObject (const std::string &name, const std::string &section)
 
 UniSetObject (uniset::ObjectId id)
 
virtual CORBA::Boolean exist () override
 
virtual uniset::ObjectId getId () override
 
const uniset::ObjectId getId () const
 
std::string getName () const
 
const std::string getStrType ()
 
virtual uniset::SimpleInfoapiRequest (const char *query) override
 
virtual void push (const uniset::TransportMessage &msg) override
 поместить сообщение в очередь
 
virtual void pushMessage (const char *msg, ::CORBA::Long mtype, const ::uniset::Timespec &tm, const ::uniset::ProducerInfo &pi, ::CORBA::Long priority, ::CORBA::Long consumer) override
 поместить текстовое сообщение в очередь
 
virtual Poco::JSON::Object::Ptr httpGet (const Poco::URI::QueryParameters &p) override
 
uniset::ObjectPtr getRef () const
 
std::shared_ptr< UniSetObjectget_ptr ()
 
virtual timeout_t askTimer (uniset::TimerId timerid, timeout_t timeMS, clock_t ticks=-1, uniset::Message::Priority p=uniset::Message::High) override
 
- Открытые члены унаследованные от uniset::LT_Object
timeout_t checkTimers (UniSetObject *obj)
 
timeout_t getTimeInterval (uniset::TimerId timerid) const
 
timeout_t getTimeLeft (uniset::TimerId timerid) const
 

Защищенные типы

enum  UserDataID { udataConsumerList = 0 }
 
- Защищенные типы унаследованные от uniset::IOController
typedef sigc::signal< void, std::shared_ptr< USensorInfo > &, IOController * > InitSignal
 
typedef std::function< void(std::shared_ptr< USensorInfo > &) UFunction)
 
- Защищенные типы унаследованные от uniset::UniSetManager
enum  OManagerCommand { deactiv , activ , initial }
 
typedef UniSetManagerList::iterator MListIterator
 
typedef std::function< void(const std::shared_ptr< UniSetObject > &) OFunction)
 
typedef std::function< void(const std::shared_ptr< UniSetManager > &) MFunction)
 
- Защищенные типы унаследованные от uniset::LT_Object
typedef std::deque< TimerInfoTimersList
 

Защищенные члены

virtual bool activateObject () override
 
virtual void sensorsRegistration () override
 
virtual void initItem (std::shared_ptr< USensorInfo > &usi, IOController *ic)
 
virtual void send (ConsumerListInfo &lst, const uniset::SensorMessage &sm, const uniset::ConsumerInfo *ci=nullptr)
 посылка информации об изменении состояния датчика (всем или указанному заказчику)
 
virtual void checkThreshold (std::shared_ptr< USensorInfo > &usi, bool send=true)
 проверка срабатывания пороговых датчиков
 
virtual void checkThreshold (IOController::IOStateList::iterator &li, const uniset::ObjectId sid, bool send_msg=true)
 
std::shared_ptr< UThresholdInfofindThreshold (const uniset::ObjectId sid, const uniset::ThresholdId tid)
 поиск информации о пороговом датчике
 
virtual void readConf ()
 
void onChangeUndefinedState (std::shared_ptr< USensorInfo > &usi, IOController *ic)
 
virtual long localSetValue (std::shared_ptr< USensorInfo > &usi, CORBA::Long value, uniset::ObjectId sup_id) override
 
Poco::JSON::Object::Ptr request_consumers (const std::string &req, const Poco::URI::QueryParameters &p)
 
Poco::JSON::Object::Ptr request_lost (const std::string &req, const Poco::URI::QueryParameters &p)
 
Poco::JSON::Object::Ptr getConsumers (uniset::ObjectId sid, ConsumerListInfo &clist, bool ifNotEmpty=true)
 
void showStatisticsForConsumer (std::ostringstream &inf, const std::string &consumer)
 
void showStatisticsForLostConsumers (std::ostringstream &inf)
 
void showStatisticsForConsusmers (std::ostringstream &inf)
 
void showStatisticsForConsumersWithLostEvent (std::ostringstream &inf)
 
void showStatisticsForSensor (std::ostringstream &inf, const std::string &name)
 
- Защищенные члены унаследованные от uniset::IOController
virtual long localSetValueIt (IOStateList::iterator &it, const uniset::ObjectId sid, CORBA::Long value, uniset::ObjectId sup_id)
 
virtual long localGetValue (IOStateList::iterator &it, const uniset::ObjectId sid)
 
virtual void localSetUndefinedState (IOStateList::iterator &it, bool undefined, const uniset::ObjectId sid)
 
virtual void localFreezeValueIt (IOController::IOStateList::iterator &li, uniset::ObjectId sid, CORBA::Boolean set, CORBA::Long value, uniset::ObjectId sup_id)
 
virtual void localFreezeValue (std::shared_ptr< USensorInfo > &usi, CORBA::Boolean set, CORBA::Long value, uniset::ObjectId sup_id)
 
long localGetValue (std::shared_ptr< USensorInfo > &usi)
 
virtual Poco::JSON::Object::Ptr request_get (const std::string &req, const Poco::URI::QueryParameters &p)
 
virtual Poco::JSON::Object::Ptr request_sensors (const std::string &req, const Poco::URI::QueryParameters &p)
 
void getSensorInfo (Poco::JSON::Array::Ptr &jdata, std::shared_ptr< USensorInfo > &s, bool shortInfo=false)
 
virtual bool deactivateObject () override
 
virtual void activateInit ()
 
virtual void sensorsUnregistration ()
 
InitSignal signal_init ()
 
void ioRegistration (std::shared_ptr< USensorInfo > &usi)
 
void ioUnRegistration (const uniset::ObjectId sid)
 
IOController_i::SensorIOInfo SensorIOInfo (long v, UniversalIO::IOType t, const IOController_i::SensorInfo &si, uniset::Message::Priority p=uniset::Message::Medium, long defval=0, IOController_i::CalibrateInfo *ci=0, uniset::ObjectId sup_id=uniset::DefaultObjectId, uniset::ObjectId depend_sid=uniset::DefaultObjectId)
 
virtual void logging (uniset::SensorMessage &sm)
 сохранение информации об изменении состояния датчика
 
virtual void dumpToDB ()
 сохранение состояния всех датчиков в БД
 
IOStateList::iterator myioBegin ()
 
IOStateList::iterator myioEnd ()
 
IOStateList::iterator myiofind (uniset::ObjectId id)
 
void initIOList (const IOStateList &&l)
 
void for_iolist (UFunction f)
 
- Защищенные члены унаследованные от uniset::UniSetManager
virtual bool addManager (const std::shared_ptr< UniSetManager > &mngr)
 
virtual bool removeManager (const std::shared_ptr< UniSetManager > &mngr)
 
virtual bool addObject (const std::shared_ptr< UniSetObject > &obj)
 
virtual bool removeObject (const std::shared_ptr< UniSetObject > &obj)
 
void objects (OManagerCommand cmd)
 
void managers (OManagerCommand cmd)
 
void initPOA (const std::weak_ptr< UniSetManager > &rmngr)
 
const std::shared_ptr< UniSetObjectfindObject (const std::string &name) const
 
const std::shared_ptr< UniSetManagerfindManager (const std::string &name) const
 
const std::shared_ptr< UniSetObjectdeepFindObject (const std::string &name) const
 
void getAllObjectsList (std::vector< std::shared_ptr< UniSetObject > > &vec, size_t lim=1000)
 
int getObjectsInfo (const std::shared_ptr< UniSetManager > &mngr, uniset::SimpleInfoSeq *seq, int begin, const long uplimit, const char *userparam)
 
void apply_for_objects (OFunction f)
 
void apply_for_managers (MFunction f)
 
- Защищенные члены унаследованные от uniset::UniSetObject
virtual void processingMessage (const uniset::VoidMessage *msg)
 
virtual void sysCommand (const uniset::SystemMessage *sm)
 
virtual void sensorInfo (const uniset::SensorMessage *sm)
 
virtual void timerInfo (const uniset::TimerMessage *tm)
 
virtual void onTextMessage (const uniset::TextMessage *tm)
 
VoidMessagePtr receiveMessage ()
 
VoidMessagePtr waitMessage (timeout_t msec=UniSetTimer::WaitUpTime)
 
void termWaiting ()
 
size_t countMessages ()
 
size_t getCountOfLostMessages () const
 
void uterminate ()
 
void thread (bool create)
 
void offThread ()
 
void onThread ()
 
virtual void callback ()
 
void setID (uniset::ObjectId id)
 
void setThreadPriority (Poco::Thread::Priority p)
 
void setMaxSizeOfMessageQueue (size_t s)
 
size_t getMaxSizeOfMessageQueue () const
 
bool isActive () const
 
void setActive (bool set)
 
virtual Poco::JSON::Object::Ptr httpGetMyInfo (Poco::JSON::Object::Ptr root)
 
Poco::JSON::Object::Ptr request_configure (const std::string &req, const Poco::URI::QueryParameters &p)
 
Poco::JSON::Object::Ptr request_configure_get (const std::string &req, const Poco::URI::QueryParameters &p)
 
Poco::JSON::Object::Ptr request_configure_by_name (const std::string &name, const std::string &props)
 
Poco::JSON::Object::Ptr request_params (const std::string &req, const Poco::URI::QueryParameters &p)
 
virtual Poco::JSON::Object::Ptr request_params_get (const std::string &req, const Poco::URI::QueryParameters &p)
 
virtual Poco::JSON::Object::Ptr request_params_set (const std::string &req, const Poco::URI::QueryParameters &p)
 
- Защищенные члены унаследованные от uniset::LT_Object
virtual std::string getTimerName (int id) const
 
TimersList getTimersList () const
 

Защищенные данные

std::shared_ptr< IOConfigrestorer
 
- Защищенные данные унаследованные от uniset::UniSetManager
PortableServer::POA_var poa
 
PortableServer::POAManager_var pman
 
- Защищенные данные унаследованные от uniset::UniSetObject
std::shared_ptr< UInterfaceui
 
std::string myname
 
std::weak_ptr< UniSetManagermymngr
 
- Защищенные данные унаследованные от uniset::LT_Object
timeout_t sleepTime
 

Друзья

class NCRestorer
 

Дополнительные унаследованные члены

- Статические открытые данные унаследованные от uniset::IOController
static const long not_specified_value = { std::numeric_limits<long>::max() }
 

Подробное описание

\page page_IONotifyController Хранение информации о состоянии с уведомлениями об изменении (IONotifyController)

Класс IONotifyController расширяет набор задач класса IOController.
Для ознакомления с базовыми функциями см. \ref page_IOController

Задачи решаемые IONotifyController-ом (\b IONC):
- \ref sec_NC_AskSensors
- \ref sec_NC_Consumers
- \ref sec_NC_Thresholds
- \ref sec_NC_Depends

\section sec_NC_AskSensors Механизм заказа датчиков
Главной задачей класса IONotifyController является уведомление

объектов (заказчиков) об изменении состояния датчика (входа или выхода).

Механизм функционирует по следующей логике: "заказчики" уведомляют IONC об изменении какого именно датчика они хотят получать уведомление, после чего, если данный датчик меняет своё состояние, заказчику посылается сообщение uniset::SensorMessage содержащее информацию о текущем(новом) состоянии датчика, времени изменения и т.п. В случае необходимости можно отказаться от уведомления. Для заказа датчиков предусмотрен ряд функций. На данный момент рекомендуется пользоваться функцией IONotifyController::askSensor.

ConsumerMaxAttempts - максимальное число неудачных попыток послать сообщение "заказчику". Настраивается в конфигурационном файле. По умолчанию = 5.

\section sec_NC_Consumers  Заказчики

В качестве "заказчиков" могут выступать любые UniSet-объекты (UniSetObject), обладающие "обратным адресом" (идентификатором), по которому присылается уведомление об изменении состояния. Свой обратный адрес, объекты указывают непосредственно при заказе (см. IONotifyController::askSensor).

Помимо "динамического" заказа во время работы процессов, существует возможность задавать список заказчиков на этапе конфигурирования системы ("статический" способ). Для этого в конфигурационном файле, в секции <sensors> у каждого датчика предусмотрена специальная секция <consumers>.

<sensors>
...
<item name="Sensors1" textname="sensor N1" iotype="AI" ...>
<consumers>
<consumer name="TestProc1" type="objects"/>
<consumer name="TestProc2" type="managers" node="RemoteNode"/>
...
</consumers>
</item>
...
</sensors>

"Статический" способ заказа гарантирует, что при перезапуске IONC список заказчиков будет восстановлен по конфигурационному файлу.

\section sec_NC_Thresholds Пороговые датчики

\section sec_NC_Depends Механизм зависимостей между датчиками
Механизм зависимостей позволяет задать зависимость одного датчика, от другого.

Например пока "разрешающий" датчик не равен "1", у зависимого держится значение "0". Зависимость настраивается в конфигурационном файле, непосредственно у "зависимого датчика".
Доступные настройки:

...
<sensors ..>
...
<item id="11" iotype="AI" name="AI11_AS" textname="AI 11" depend="Input4_S" depend_off_value="-50"/>
...
</sensors>

В данном примере можно увидеть, что датчик AI11_AS зависит от датчика Input4_S и пока Input4_S=0, в AI11_AS будет записано значение -50. Как только Input4_S=1 в AI11_AS - появиться его истинное значение.

Заметки
Следует иметь ввиду, что для ЗАВИСИМОГО датчика функция setValue(..) действует как обычно и даже если он "заблокирован", значение в него можно сохранять. Оно "появиться" как только снимется блокировка.

Оптимизация работы со списком "заказчиков"

Для оптимизации поиска списка заказчиков для конкретного датчика используется поле userdata (void*) у USensorInfo! Это опасный и "некрасивый" хак, но он позволяет избавиться от одного лишнего поиска по unordered_map<SensorID,ConsumerList>. Суть в том что к датчику через usedata мы привязываем указатель на список заказчиков. Сделано через userdata, т.к. сам map "хранится" в IOController и IONotifyController не может поменять тип (в текущей реализации по крайней мере). В userdata задействованы два места (см. UserDataID) для списка заказчиков и для списка порогов. При этом, чтобы гарантировать корректность работы, cписки заказчиков по тому или иному датчику, создаются (см. функцию ask()), но никогда не удаляются, даже если остаются пустыми. Это сделано, чтобы сохранённые указатели в userdata, оставались всегда валидными (т.к. используются из разных потоков).

Реализация IONotifyController. см. page_IONotifyController

Определения типов

◆ AskMap

словарь: датчик -> список потребителей

Перечисления

◆ UserDataID

Предупреждения
Оптимизация использует userdata! Это опасно, если кто-то ещё захочет его использовать!

Методы

◆ activateObject()

bool IONotifyController::activateObject ( )
overrideprotectedvirtual
Заметки
Переопределяя, не забывайте вызвать базовую

Регистрация объекта и всех его подобъектов в репозитории.

Заметки
Только после этого он (и они) становятся доступны другим процессам

Переопределяет метод предка uniset::IOController.

Переопределяется в uniset::SharedMemory.

◆ askSensor()

void IONotifyController::askSensor ( const uniset::ObjectId sid,
const uniset::ConsumerInfo & ci,
UniversalIO::UIOCommand cmd )
overridevirtual
Аргументы
si- информация о датчике
ci- информация о заказчике
cmd- команда см. UniversalIO::UIOCommand

◆ checkThreshold()

void IONotifyController::checkThreshold ( std::shared_ptr< USensorInfo > & usi,
bool send = true )
protectedvirtual

проверка срабатывания пороговых датчиков

◆ findThreshold()

std::shared_ptr< IOController::UThresholdInfo > IONotifyController::findThreshold ( const uniset::ObjectId sid,
const uniset::ThresholdId tid )
protected

поиск информации о пороговом датчике

◆ getInfo()

SimpleInfo * IONotifyController::getInfo ( const char * userparam = 0)
overridevirtual

Переопределяет метод предка uniset::IOController.

◆ getType()

virtual uniset::ObjectType uniset::IONotifyController::getType ( )
inlineoverridevirtual

Переопределяет метод предка uniset::IOController.

◆ httpHelp()

Poco::JSON::Object::Ptr IONotifyController::httpHelp ( const Poco::URI::QueryParameters & p)
overridevirtual

Переопределяет метод предка uniset::IOController.

◆ httpRequest()

Poco::JSON::Object::Ptr IONotifyController::httpRequest ( const std::string & req,
const Poco::URI::QueryParameters & p )
overridevirtual

Переопределяет метод предка uniset::IOController.

◆ localSetValue()

long IONotifyController::localSetValue ( std::shared_ptr< USensorInfo > & usi,
CORBA::Long value,
uniset::ObjectId sup_id )
overrideprotectedvirtual

Переопределяет метод предка uniset::IOController.

◆ readConf()

void IONotifyController::readConf ( )
protectedvirtual

чтение dump-файла

◆ send()

void IONotifyController::send ( ConsumerListInfo & lst,
const uniset::SensorMessage & sm,
const uniset::ConsumerInfo * ci = nullptr )
protectedvirtual

посылка информации об изменении состояния датчика (всем или указанному заказчику)

Заметки
В случае зависания в функции push, будут остановлены рассылки другим объектам. Возможно нужно ввести своего агента на удалённой стороне, который будет заниматься только приёмом сообщений и локальной рассылкой. Lav

◆ sensorsRegistration()

void IONotifyController::sensorsRegistration ( )
overrideprotectedvirtual

регистрация датчиков, за информацию о которых отвечает данный IOController

Переопределяет метод предка uniset::IOController.