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
d9f71645
Commit
d9f71645
authored
May 07, 2017
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(Restorer): небольшая оптимизация
(SM): небольшая корректировка тестов
parent
3be517fb
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
38 additions
and
28 deletions
+38
-28
TODO
TODO
+4
-3
SharedMemory.h
extensions/SharedMemory/SharedMemory.h
+1
-1
TestObject.cc
extensions/SharedMemory/tests/TestObject.cc
+5
-5
TestObject.h
extensions/SharedMemory/tests/TestObject.h
+3
-3
test_sm.cc
extensions/SharedMemory/tests/test_sm.cc
+7
-3
testobject.src.xml
extensions/SharedMemory/tests/testobject.src.xml
+1
-1
IONotifyController.h
include/IONotifyController.h
+1
-1
NCRestorer.h
include/NCRestorer.h
+4
-0
EventLoopServer.cc
src/Processes/EventLoopServer.cc
+0
-1
IONotifyController.cc
src/Processes/IONotifyController.cc
+10
-10
uniset2.includes
uniset2.includes
+2
-0
No files found.
TODO
View file @
d9f71645
...
...
@@ -52,7 +52,9 @@ HTTP API:
- smonit запись значений в файл (csv?,sqlite?,gnuplot)
- python: gui sensor monitor
- IOBase: возможность задавать свою формулу преобразования входного сигнала (помимо калибровки)..
IOBase:
- возможность задавать свою формулу преобразования входного сигнала (помимо калибровки)..
- реализовать фильтр Калмана
- переписать систему инициализации и работы между UniSetActivator,UniSetManager и UniSetObject-ами (уменьшить количество функций (связность))
...
...
@@ -67,8 +69,7 @@ HTTP API:
ModbusSlave: подумать насчёт оптимизации по скорости (вместо поиска по RegMap, сделать массив на 65535 регистров или map-ов по номеру функции,
всего 65kB памяти).
libev
=======
libev:
- переписать UNetUDP (на подумать)
- UniSetActivator (обработка сигналов и возможно вынести сюда DefaultEventLoop) (на подумать)
...
...
extensions/SharedMemory/SharedMemory.h
View file @
d9f71645
...
...
@@ -497,7 +497,7 @@ namespace uniset
int
activateTimeout
;
virtual
void
logging
(
uniset
::
SensorMessage
&
sm
)
override
;
virtual
void
dumpOrdersList
(
const
uniset
::
ObjectId
sid
,
const
IONotifyController
::
ConsumerListInfo
&
lst
)
override
{}
;
virtual
void
dumpOrdersList
(
const
uniset
::
ObjectId
sid
,
const
IONotifyController
::
ConsumerListInfo
&
lst
)
override
{}
virtual
void
dumpThresholdList
(
const
uniset
::
ObjectId
sid
,
const
IONotifyController
::
ThresholdExtList
&
lst
)
override
{}
bool
dblogging
=
{
false
};
...
...
extensions/SharedMemory/tests/TestObject.cc
View file @
d9f71645
...
...
@@ -41,7 +41,7 @@ void TestObject::sensorInfo( const SensorMessage* sm )
if
(
sm
->
id
==
monotonic_s
)
{
if
(
(
sm
->
value
-
lastValue
)
<
0
)
mon
i
tonicFailed
=
true
;
mon
o
tonicFailed
=
true
;
if
(
(
sm
->
value
-
lastValue
)
>
1
)
{
...
...
@@ -49,7 +49,7 @@ void TestObject::sensorInfo( const SensorMessage* sm )
<<
" lost: "
<<
(
sm
->
value
-
lastValue
)
<<
endl
;
lostMessages
=
true
;
lostMessages
+=
(
sm
->
value
-
lastValue
-
1
)
;
}
lastValue
=
sm
->
value
;
...
...
@@ -73,17 +73,17 @@ void TestObject::askMonotonic()
// -----------------------------------------------------------------------------
void
TestObject
::
startMonitonicTest
()
{
mon
i
tonicFailed
=
false
;
mon
o
tonicFailed
=
false
;
lostMessages
=
false
;
lastValue
=
in_monotonic_s
;
}
// -----------------------------------------------------------------------------
bool
TestObject
::
isMonotonicTestOK
()
const
{
return
!
mon
i
tonicFailed
;
return
!
mon
o
tonicFailed
;
}
// -----------------------------------------------------------------------------
bool
TestObject
::
is
LostMessages
()
const
long
TestObject
::
get
LostMessages
()
const
{
return
lostMessages
;
}
...
...
extensions/SharedMemory/tests/TestObject.h
View file @
d9f71645
...
...
@@ -31,7 +31,7 @@ class TestObject:
void
askMonotonic
();
void
startMonitonicTest
();
bool
isMonotonicTestOK
()
const
;
bool
is
LostMessages
()
const
;
long
get
LostMessages
()
const
;
long
getLastValue
()
const
;
bool
isEmptyQueue
();
bool
isFullQueue
();
...
...
@@ -46,8 +46,8 @@ class TestObject:
private
:
bool
evntIsOK
=
{
false
};
bool
mon
i
tonicFailed
=
{
false
};
bool
lostMessages
=
{
false
};
bool
mon
o
tonicFailed
=
{
false
};
long
lostMessages
=
{
false
};
long
lastValue
=
{
0
};
};
// -----------------------------------------------------------------------------
...
...
extensions/SharedMemory/tests/test_sm.cc
View file @
d9f71645
...
...
@@ -262,6 +262,8 @@ TEST_CASE("[SM]: monitonic sensor message", "[sm][monitonic]")
{
InitTest
();
REQUIRE
(
obj
->
exist
()
);
// Проверка корректной последовательности прихода SensorMessage.
// Тест заключается в том, что параллельно вызывается setValue()
// и askSensors() и сообщения должны приходить в правильном порядке.
...
...
@@ -287,13 +289,11 @@ TEST_CASE("[SM]: monitonic sensor message", "[sm][monitonic]")
obj
->
startMonitonicTest
();
// std::thread t(write_worker);
auto
ret
=
std
::
async
(
std
::
launch
::
async
,
write_worker
);
for
(
long
n
=
0
;
n
<=
max
;
n
++
)
obj
->
askMonotonic
();
// t.join();
REQUIRE
(
ret
.
get
()
);
DelayTimer
dt
(
2000
,
0
);
...
...
@@ -301,8 +301,12 @@ TEST_CASE("[SM]: monitonic sensor message", "[sm][monitonic]")
msleep
(
500
);
REQUIRE
(
obj
->
isMonotonicTestOK
()
);
REQUIRE
_FALSE
(
obj
->
isLostMessages
()
);
REQUIRE
(
obj
->
getLostMessages
()
==
0
);
REQUIRE_FALSE
(
obj
->
isFullQueue
()
);
REQUIRE
(
obj
->
getLastValue
()
==
max
);
// print statistic
// uniset::SimpleInfo_var si = obj->getInfo(0);
// cerr << std::string(si->info) << endl;
}
// -----------------------------------------------------------------------------
extensions/SharedMemory/tests/testobject.src.xml
View file @
d9f71645
...
...
@@ -3,7 +3,7 @@
<settings>
<set
name=
"class-name"
val=
"TestObject"
/>
<set
name=
"msg-count"
val=
"30"
/>
<set
name=
"sleep-msec"
val=
"
10
0"
/>
<set
name=
"sleep-msec"
val=
"
5
0"
/>
</settings>
<variables>
</variables>
...
...
include/IONotifyController.h
View file @
d9f71645
...
...
@@ -117,7 +117,7 @@ namespace uniset
Суть в том что к датчику через usedata мы привязываем указатель на список заказчиков. Сделано через userdata,
т.к. сам map "хранится" в IOController и IONotifyController не может поменять тип (в текущей реализации по крайней мере).
В userdata задействованы два места (см. UserDataID) для списка заказчиков и для списка порогов.
ри этом, чтобы гарантировать корректность работы, cписки заказчиков по тому или иному датчику,
П
ри этом, чтобы гарантировать корректность работы, cписки заказчиков по тому или иному датчику,
создаются (см. функцию ask()), но никогда не удаляются, даже если остаются пустыми.
Это сделано, чтобы сохранённые указатели в userdata, оставались всегда валидными
(т.к. используются из разных потоков).
...
...
include/NCRestorer.h
View file @
d9f71645
...
...
@@ -77,6 +77,9 @@ namespace uniset
virtual
void
dump
(
const
IONotifyController
*
ic
,
std
::
shared_ptr
<
SInfo
>&
inf
,
const
IONotifyController
::
ConsumerListInfo
&
lst
)
=
0
;
virtual
void
dumpThreshold
(
const
IONotifyController
*
ic
,
std
::
shared_ptr
<
SInfo
>&
inf
,
const
IONotifyController
::
ThresholdExtList
&
lst
)
=
0
;
// проверка поддерживаются ли функции dumpXXX (т.е. обновление списков)
virtual
bool
readOnly
()
const
=
0
;
protected
:
// добавление списка заказчиков
...
...
@@ -162,6 +165,7 @@ namespace uniset
virtual
void
dump
(
const
IONotifyController
*
ic
,
std
::
shared_ptr
<
NCRestorer
::
SInfo
>&
inf
,
const
IONotifyController
::
ConsumerListInfo
&
lst
)
override
;
virtual
void
dumpThreshold
(
const
IONotifyController
*
ic
,
std
::
shared_ptr
<
NCRestorer
::
SInfo
>&
inf
,
const
IONotifyController
::
ThresholdExtList
&
lst
)
override
;
virtual
bool
readOnly
()
const
{
return
true
;
}
protected
:
...
...
src/Processes/EventLoopServer.cc
View file @
d9f71645
...
...
@@ -84,7 +84,6 @@ namespace uniset
}
}
cancelled
=
true
;
isrunning
=
false
;
}
// -------------------------------------------------------------------------
...
...
src/Processes/IONotifyController.cc
View file @
d9f71645
...
...
@@ -802,7 +802,7 @@ void IONotifyController::readDump()
{
try
{
if
(
restorer
!=
NULL
)
if
(
restorer
)
restorer
->
read
(
this
);
}
catch
(
const
std
::
exception
&
ex
)
...
...
@@ -824,7 +824,7 @@ void IONotifyController::initItem( std::shared_ptr<USensorInfo>& usi, IOControll
void
IONotifyController
::
dumpOrdersList
(
const
uniset
::
ObjectId
sid
,
const
IONotifyController
::
ConsumerListInfo
&
lst
)
{
if
(
restorer
==
NULL
)
if
(
!
restorer
||
restorer
->
readOnly
()
)
return
;
try
...
...
@@ -844,7 +844,7 @@ void IONotifyController::dumpOrdersList( const uniset::ObjectId sid,
void
IONotifyController
::
dumpThresholdList
(
const
uniset
::
ObjectId
sid
,
const
IONotifyController
::
ThresholdExtList
&
lst
)
{
if
(
restorer
==
NULL
)
if
(
!
restorer
||
restorer
->
readOnly
()
)
return
;
try
...
...
@@ -1030,12 +1030,13 @@ bool IONotifyController::removeThreshold( ThresholdExtList& lst, ThresholdInfoEx
{
if
(
removeConsumer
(
it
->
clst
,
ci
)
)
{
/* Даже если список заказчиков по данному датчику стал пуст.
Не удаляем датчик из списка, чтобы не поломать итераторы
которые могут использоваться в этот момент в других потоках */
// uniset_rwmutex_wrlock lock(it->clst.mut);
// if( it->clst.clst.empty() )
// lst.erase(it);
/* Даже если список заказчиков по данному датчику стал пуст.
* Не удаляем датчик из списка, чтобы не поломать итераторы
* которые могут использоваться в этот момент в других потоках
*/
// uniset_rwmutex_wrlock lock(it->clst.mut);
// if( it->clst.clst.empty() )
// lst.erase(it);
return
true
;
}
}
...
...
@@ -1066,7 +1067,6 @@ void IONotifyController::checkThreshold( std::shared_ptr<IOController::USensorIn
return
;
// обрабатываем текущее состояние датчика обязательно "залочив" значение..
uniset_rwmutex_rlock
vlock
(
usi
->
val_lock
);
SensorMessage
sm
(
std
::
move
(
usi
->
makeSensorMessage
(
false
)));
...
...
uniset2.includes
View file @
d9f71645
...
...
@@ -20,6 +20,8 @@ include/libxml2/libxml
include/modbus
python/lib/pyUniSet
src/Log
src/Processes
src/Communications
Utilities/codegen
Utilities/codegen/tests
Utilities/MBTester
...
...
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