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
5a57e992
Commit
5a57e992
authored
Dec 26, 2020
by
Pavel Vainerman
Committed by
Pavel Vainerman
Jan 07, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[freeze-value]: fix "unfreeze", added some docs
parent
b012c7c3
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
74 additions
and
18 deletions
+74
-18
admin.cc
Utilities/Admin/admin.cc
+1
-0
freezeValue.md
docs/DocPages/freezeValue.md
+50
-0
test_restapi_uniset.cc
extensions/tests/test_restapi_uniset.cc
+12
-10
test_ui.cc
extensions/tests/test_ui.cc
+4
-1
IOController.h
include/IOController.h
+6
-3
IOController.cc
src/Processes/IOController.cc
+1
-4
No files found.
Utilities/Admin/admin.cc
View file @
5a57e992
...
...
@@ -850,6 +850,7 @@ int freezeValue( const string& args, bool set, UInterface& ui )
if
(
verb
)
{
cout
<<
" set: "
<<
set
<<
endl
;
cout
<<
" value: "
<<
it
.
val
<<
endl
;
cout
<<
" name: ("
<<
it
.
si
.
id
<<
") "
<<
it
.
fname
<<
endl
;
cout
<<
" iotype: "
<<
t
<<
endl
;
...
...
docs/DocPages/freezeValue.md
0 → 100644
View file @
5a57e992
# Заморозка (фиксация) значения датчика в SM
В библиотеке поддерживается механизм, позволяющий замораживать значение датчика и оно не будет меняться,
пока не будет обратно"разморожено". При этом функция
`setValue()`
будет продолжать работать и будет менять
значение датчика в памяти SM. Но пока датчик не будет разморожен эти изменения не будут видны.
После разморозки датчика, будет выставлено текущее значение.
Для управления "заморозкой" существует две возможности
### Заморозка значения при помощи утилиты uniset2-admin
Для того, чтобы заморозить какое-то значение достаточно вызвать команду
```
uniset2-admin --confile xxx --freezeValue SID@node=value 1
```
Где:
-
`SID`
- это имя или идентификатор датчика
-
`node`
- узел на котором датчик находится (необязательный параметр)
-
`value`
- значение которое будет установлено у датчика (при "разморозке" значение не важно)
-
`1`
- заморозить
Можно замораживать или размораживать сразу несколько датчиков.
-
Заморозить датчики
```
uniset2-admin --confile xxx --freezeValue sens1=10,sens2=100,sens3=42 1
```
-
Разморозить датчики
```
uniset2-admin --confile xxx --freezeValue sens1,sens2,sens3 0
```
### Заморозка значения при помощи UInterface (в коде)
Для "заморозки/разморозки" значений в коде в UInterface предусмотрена функция
```
void freezeValue( const IOController_i::SensorInfo& si, bool set, long value, uniset::ObjectId supplier );
```
Пример заморозки:
```
...
IOController_i::SensorInfo si;
si.id = 100; // sensorID
si.node = conf->getLocalNode();
ui->freezeValue(si, true, 100);
```
extensions/tests/test_restapi_uniset.cc
View file @
5a57e992
...
...
@@ -20,18 +20,18 @@ static const std::string aidName = "AI_AS";
// -----------------------------------------------------------------------------
static
void
init_test
()
{
shm
=
smiInstance
();
REQUIRE
(
shm
!=
nullptr
);
shm
=
smiInstance
();
REQUIRE
(
shm
!=
nullptr
);
auto
conf
=
uniset_conf
();
auto
conf
=
uniset_conf
();
REQUIRE
(
conf
!=
nullptr
);
REQUIRE
(
conf
!=
nullptr
);
testOID
=
conf
->
getObjectID
(
"TestProc"
);
CHECK
(
testOID
!=
DefaultObjectId
);
testOID
=
conf
->
getObjectID
(
"TestProc"
);
CHECK
(
testOID
!=
DefaultObjectId
);
aid
=
conf
->
getSensorID
(
aidName
);
CHECK
(
aid
!=
DefaultObjectId
);
aid
=
conf
->
getSensorID
(
aidName
);
CHECK
(
aid
!=
DefaultObjectId
);
}
// -----------------------------------------------------------------------------
TEST_CASE
(
"[REST API: conf]"
,
"[restapi][conf]"
)
...
...
@@ -255,6 +255,8 @@ TEST_CASE("[REST API: /consumers]", "[restapi][consumers]")
{
init_test
();
REQUIRE_NOTHROW
(
shm
->
askSensor
(
aid
,
UniversalIO
::
UIONotify
,
testOID
)
);
// QUERY: /consumers
// Ожидаемый формат ответа:
// {"object":{"id":5003,"isActive":true,"lostMessages":0,"maxSizeOfMessageQueue":1000,"msgCount":0,"name":"SharedMemory","objectType":"IONotifyController"},
...
...
@@ -285,8 +287,8 @@ TEST_CASE("[REST API: /consumers]", "[restapi][consumers]")
auto
sens
=
jret
->
get
(
"sensor"
).
extract
<
Poco
::
JSON
::
Object
::
Ptr
>
();
REQUIRE
(
sens
);
REQUIRE
(
sens
->
get
(
"id"
).
convert
<
ObjectId
>
()
==
10
);
REQUIRE
(
sens
->
get
(
"name"
).
convert
<
std
::
string
>
()
==
"AI_AS"
);
REQUIRE
(
sens
->
get
(
"id"
).
convert
<
ObjectId
>
()
==
aid
);
REQUIRE
(
sens
->
get
(
"name"
).
convert
<
std
::
string
>
()
==
aidName
);
auto
cons
=
jret
->
get
(
"consumers"
).
extract
<
Poco
::
JSON
::
Array
::
Ptr
>
();
REQUIRE
(
cons
);
...
...
extensions/tests/test_ui.cc
View file @
5a57e992
...
...
@@ -253,6 +253,9 @@ TEST_CASE("UInterface::freezeValue", "[UInterface][freezeValue]")
si
.
id
=
aid
;
si
.
node
=
conf
->
getLocalNode
();
REQUIRE_NOTHROW
(
ui
->
setValue
(
aid
,
200
)
);
REQUIRE
(
ui
->
getValue
(
aid
)
==
200
);
REQUIRE_NOTHROW
(
ui
->
freezeValue
(
si
,
true
,
10
,
testOID
)
);
REQUIRE
(
ui
->
getValue
(
aid
)
==
10
);
...
...
@@ -264,7 +267,7 @@ TEST_CASE("UInterface::freezeValue", "[UInterface][freezeValue]")
REQUIRE_NOTHROW
(
ui
->
freezeValue
(
si
,
true
,
-
1
,
testOID
)
);
REQUIRE
(
ui
->
getValue
(
aid
)
==
-
1
);
REQUIRE_NOTHROW
(
ui
->
freezeValue
(
si
,
false
,
-
1
,
testOID
)
);
REQUIRE_NOTHROW
(
ui
->
freezeValue
(
si
,
false
,
0
,
testOID
)
);
REQUIRE
(
ui
->
getValue
(
aid
)
==
100
);
REQUIRE_NOTHROW
(
ui
->
setValue
(
aid
,
200
)
);
...
...
include/IOController.h
View file @
5a57e992
...
...
@@ -179,9 +179,6 @@ namespace uniset
virtual
void
localSetUndefinedState
(
IOStateList
::
iterator
&
it
,
bool
undefined
,
const
uniset
::
ObjectId
sid
);
// -- работа через указатель ---
virtual
long
localSetValue
(
std
::
shared_ptr
<
USensorInfo
>&
usi
,
CORBA
::
Long
value
,
uniset
::
ObjectId
sup_id
);
long
localGetValue
(
std
::
shared_ptr
<
USensorInfo
>&
usi
)
;
virtual
void
localFreezeValueIt
(
IOController
::
IOStateList
::
iterator
&
li
,
uniset
::
ObjectId
sid
,
CORBA
::
Boolean
set
,
...
...
@@ -193,6 +190,11 @@ namespace uniset
CORBA
::
Long
value
,
uniset
::
ObjectId
sup_id
);
// -- работа через указатель ---
virtual
long
localSetValue
(
std
::
shared_ptr
<
USensorInfo
>&
usi
,
CORBA
::
Long
value
,
uniset
::
ObjectId
sup_id
);
long
localGetValue
(
std
::
shared_ptr
<
USensorInfo
>&
usi
)
;
#ifndef DISABLE_REST_API
// http API
virtual
Poco
::
JSON
::
Object
::
Ptr
request_get
(
const
std
::
string
&
req
,
const
Poco
::
URI
::
QueryParameters
&
p
);
...
...
@@ -347,6 +349,7 @@ namespace uniset
size_t
nchanges
=
{
0
};
// количество изменений датчика
long
undef_value
=
{
not_specified_value
};
// значение для "неопределённого состояния датчика"
long
frozen_value
=
{
0
};
// функция обработки информации об изменении состояния датчика, от которого зависит данный
void
checkDepend
(
std
::
shared_ptr
<
USensorInfo
>&
d_usi
,
IOController
*
);
...
...
src/Processes/IOController.cc
View file @
5a57e992
...
...
@@ -317,10 +317,7 @@ void IOController::localFreezeValue( std::shared_ptr<USensorInfo>& usi,
// выставляем флаг заморозки
uniset_rwmutex_wrlock
lock
(
usi
->
val_lock
);
usi
->
frozen
=
set
;
usi
->
frozen_value
=
value
;
// берём текущее значение, чтобы его не затереть
// при вызове setValue()
usi
->
frozen_value
=
set
?
value
:
usi
->
value
;
value
=
usi
->
real_value
;
}
...
...
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