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