Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
44303a48
Commit
44303a48
authored
Aug 08, 2016
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Мелкие правки коментариев.
parent
182ac80f
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
17 additions
and
12 deletions
+17
-12
SharedMemory.h
extensions/SharedMemory/SharedMemory.h
+2
-0
IONotifyController.h
include/IONotifyController.h
+13
-10
ModbusServer.cc
src/Communications/Modbus/ModbusServer.cc
+2
-2
No files found.
extensions/SharedMemory/SharedMemory.h
View file @
44303a48
...
@@ -394,6 +394,8 @@ class SharedMemory:
...
@@ -394,6 +394,8 @@ class SharedMemory:
return
histSaveTime
;
/*!< период между точками "дампа", мсек */
return
histSaveTime
;
/*!< период между точками "дампа", мсек */
}
}
// -------------------------------------------------------------------------------
inline
std
::
shared_ptr
<
LogAgregator
>
logAgregator
()
inline
std
::
shared_ptr
<
LogAgregator
>
logAgregator
()
{
{
return
loga
;
return
loga
;
...
...
include/IONotifyController.h
View file @
44303a48
...
@@ -51,15 +51,12 @@ class NCRestorer;
...
@@ -51,15 +51,12 @@ class NCRestorer;
объектов (заказчиков) об изменении состояния датчика (входа или выхода).
объектов (заказчиков) об изменении состояния датчика (входа или выхода).
Механизм функционирует по следующей логике:
Механизм функционирует по следующей логике:
"заказчики" уведомляют \b IONC о том, об изменении какого именно датчика
"заказчики" уведомляют \b IONC об изменении какого именно датчика они хотят получать уведомление,
они хотят получать уведомление.
после чего, если данный датчик меняет своё состояние, заказчику посылается
После чего, если данный датчик меняет своё состояние, заказчику посылается
сообщение UniSetTypes::SensorMessage содержащее информацию о текущем(новом) состоянии датчика,
сообщение UniSetTypes::SensorMessage содержащее информацию о текущем(новом) состоянии датчика,
времени изменения и т.п. В случае необходимости можно отказатся от уведомления.
времени изменения и т.п. В случае необходимости можно отказатся от уведомления.
Для заказа датчиков предусмотрен ряд функций. На данный момент рекомендуется
Для заказа датчиков предусмотрен ряд функций. На данный момент рекомендуется
пользоватся функцией IONotifyController::askSensor. Функции askState и askValue считаются устаревшими
пользоватся функцией IONotifyController::askSensor.
и оставлены для совместимости со старыми интерфейсами.
... продолжение следует...
\section sec_NC_Consumers Заказчики
\section sec_NC_Consumers Заказчики
В качестве "заказчиков" могут выступать любые UniSet-объекты (UniSetObject),
В качестве "заказчиков" могут выступать любые UniSet-объекты (UniSetObject),
...
@@ -112,11 +109,15 @@ class NCRestorer;
...
@@ -112,11 +109,15 @@ class NCRestorer;
\note Следует иметь ввиду, что для \b ЗАВИСИМОГО датчика функция setValue(..) действует как обычно и
\note Следует иметь ввиду, что для \b ЗАВИСИМОГО датчика функция setValue(..) действует как обычно и
даже если он "заблокирован", значение в него можно сохранять. Оно "появиться" как только сниметься блокировка.
даже если он "заблокирован", значение в него можно сохранять. Оно "появиться" как только сниметься блокировка.
\warning Для оптимизации поиска списка заказчиков для конкретного датчика используется поле any (void*) у USensorInfo!
\section sec_NC_Optimization Оптимизация работы со списком "заказчиков"
Для оптимизации поиска списка заказчиков для конкретного датчика используется поле userdata (void*) у USensorInfo!
Это опасный и "некрасивый" хак, но который позволяет избавиться от одного лишнего поиска по unordered_map<SensorID,ConsumerList>.
Суть в том что к датчику через usedata мы привязываем указатель на список заказчиков. Сделано через userdata,
т.к. сам map "хранится" в IOController и IONotifyController не может поменять тип (в текущей реализации по крайней мере).
В userdata задействованы два места (см. UserDataID) для списка заказчиков и для списка порогов.
*/
*/
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
/*! \class IONotifyController
/*! \class IONotifyController
* \todo Сделать логирование выходов
\section AskSensors Заказ датчиков
\section AskSensors Заказ датчиков
...
@@ -140,6 +141,8 @@ class IONotifyController:
...
@@ -140,6 +141,8 @@ class IONotifyController:
{
{
return
UniSetTypes
::
ObjectType
(
"IONotifyController"
);
return
UniSetTypes
::
ObjectType
(
"IONotifyController"
);
}
}
virtual
void
askSensor
(
const
UniSetTypes
::
ObjectId
sid
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
)
override
;
virtual
void
askSensor
(
const
UniSetTypes
::
ObjectId
sid
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
)
override
;
virtual
void
askThreshold
(
const
UniSetTypes
::
ObjectId
sid
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
virtual
void
askThreshold
(
const
UniSetTypes
::
ObjectId
sid
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
...
@@ -161,12 +164,12 @@ class IONotifyController:
...
@@ -161,12 +164,12 @@ class IONotifyController:
public
UniSetTypes
::
ConsumerInfo
public
UniSetTypes
::
ConsumerInfo
{
{
ConsumerInfoExt
(
const
UniSetTypes
::
ConsumerInfo
&
ci
,
ConsumerInfoExt
(
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniSetObject_i_ptr
ref
=
0
,
in
t
maxAttemtps
=
10
)
:
UniSetObject_i_ptr
ref
=
0
,
size_
t
maxAttemtps
=
10
)
:
UniSetTypes
::
ConsumerInfo
(
ci
),
UniSetTypes
::
ConsumerInfo
(
ci
),
ref
(
ref
),
attempt
(
maxAttemtps
)
{}
ref
(
ref
),
attempt
(
maxAttemtps
)
{}
UniSetObject_i_var
ref
;
UniSetObject_i_var
ref
;
in
t
attempt
;
size_
t
attempt
;
ConsumerInfoExt
(
const
ConsumerInfoExt
&
)
=
default
;
ConsumerInfoExt
(
const
ConsumerInfoExt
&
)
=
default
;
ConsumerInfoExt
&
operator
=
(
const
ConsumerInfoExt
&
)
=
default
;
ConsumerInfoExt
&
operator
=
(
const
ConsumerInfoExt
&
)
=
default
;
...
...
src/Communications/Modbus/ModbusServer.cc
View file @
44303a48
...
@@ -1692,10 +1692,10 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa
...
@@ -1692,10 +1692,10 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa
if
(
dlog
&&
dlog
->
is_info
()
)
if
(
dlog
&&
dlog
->
is_info
()
)
dlog
->
info
()
<<
"(replySetDateTime): "
<<
query
<<
endl
;
dlog
->
info
()
<<
"(replySetDateTime): "
<<
query
<<
endl
;
struct
timeval
set
;
struct
timezone
tz
;
struct
timezone
tz
;
struct
timeval
set
;
if
(
gettimeofday
(
&
set
,
&
tz
)
==
0
)
if
(
gettimeofday
(
&
set
,
&
tz
)
==
0
)
{
{
struct
tm
t
;
struct
tm
t
;
localtime_r
(
&
set
.
tv_sec
,
&
t
);
localtime_r
(
&
set
.
tv_sec
,
&
t
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment