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
c751a705
Commit
c751a705
authored
Sep 03, 2016
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(UNet): оптимизировал работу (заменил vector на unordered_map)
для режима работы по sensorInfo, т.е. когда идёт работа без указателя на SM.
parent
609a3abf
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
51 deletions
+29
-51
start_fg.sh
extensions/SharedMemoryPlus/start_fg.sh
+3
-0
UNetSender.cc
extensions/UNetUDP/UNetSender.cc
+23
-48
UNetSender.h
extensions/UNetUDP/UNetSender.h
+3
-3
No files found.
extensions/SharedMemoryPlus/start_fg.sh
View file @
c751a705
...
...
@@ -45,6 +45,9 @@ ${START} -f ./uniset2-smemory-plus --smemory-id SharedMemory --confile test.xml
$MBMS
\
$MBS
\
--ulog-add-levels
system
\
--add-unet
\
--unet-name
UNetExchange
--unet-run-logserver
\
--unet-filter-field
rs
--unet-filter-value
2
--unet-maxdifferense
40
--unet-sendpause
1000
$*
# --add-rtu \
# --rs-dev /dev/cbsideA1 \
...
...
extensions/UNetUDP/UNetSender.cc
View file @
c751a705
...
...
@@ -39,7 +39,7 @@ UNetSender::UNetSender(const std::string& _host, const int _port, const std::sha
sendpause
(
150
),
packsendpause
(
5
),
activated
(
false
),
dlist
(
100
),
items
(
100
),
maxItem
(
0
),
packetnum
(
1
),
lastcrc
(
0
),
...
...
@@ -83,8 +83,7 @@ UNetSender::UNetSender(const std::string& _host, const int _port, const std::sha
if
(
shm
->
isLocalwork
()
)
{
readConfiguration
();
dlist
.
resize
(
maxItem
);
unetinfo
<<
myname
<<
"(init): dlist size = "
<<
dlist
.
size
()
<<
endl
;
unetinfo
<<
myname
<<
"(init): dlist size = "
<<
items
.
size
()
<<
endl
;
}
else
{
...
...
@@ -96,8 +95,7 @@ UNetSender::UNetSender(const std::string& _host, const int _port, const std::sha
{
unetwarn
<<
myname
<<
"(init): Failed to convert the pointer 'IONotifyController' -> 'SharedMemory'"
<<
endl
;
readConfiguration
();
dlist
.
resize
(
maxItem
);
unetinfo
<<
myname
<<
"(init): dlist size = "
<<
dlist
.
size
()
<<
endl
;
unetinfo
<<
myname
<<
"(init): dlist size = "
<<
items
.
size
()
<<
endl
;
}
}
}
...
...
@@ -146,12 +144,11 @@ bool UNetSender::createConnection( bool throwEx )
// -----------------------------------------------------------------------------
void
UNetSender
::
updateFromSM
()
{
auto
it
=
dlist
.
begin
();
for
(
;
it
!=
dlist
.
end
();
++
it
)
for
(
auto
&&
it
:
items
)
{
long
value
=
shm
->
localGetValue
(
it
->
ioit
,
it
->
id
);
updateItem
(
it
,
value
);
UItem
&
i
=
it
.
second
;
long
value
=
shm
->
localGetValue
(
i
.
ioit
,
i
.
id
);
updateItem
(
i
,
value
);
}
}
// -----------------------------------------------------------------------------
...
...
@@ -160,38 +157,20 @@ void UNetSender::updateSensor( UniSetTypes::ObjectId id, long value )
if
(
!
shm
->
isLocalwork
()
)
return
;
// cerr << myname << ": UPDATE SENSOR id=" << id << " value=" << value << endl;
auto
it
=
dlist
.
begin
();
for
(
;
it
!=
dlist
.
end
();
++
it
)
{
if
(
it
->
id
==
id
)
{
updateItem
(
it
,
value
);
break
;
}
}
auto
it
=
items
.
find
(
id
);
if
(
it
!=
items
.
end
()
)
updateItem
(
it
->
second
,
value
);
}
// -----------------------------------------------------------------------------
void
UNetSender
::
updateItem
(
DMap
::
iterator
&
it
,
long
value
)
void
UNetSender
::
updateItem
(
UItem
&
it
,
long
value
)
{
if
(
it
==
dlist
.
end
()
)
return
;
if
(
it
->
iotype
==
UniversalIO
::
DI
||
it
->
iotype
==
UniversalIO
::
DO
)
{
UniSetTypes
::
uniset_rwmutex_wrlock
l
(
pack_mutex
);
auto
&
pk
=
mypacks
[
it
->
pack_sendfactor
];
UniSetUDP
::
UDPMessage
&
mypack
(
pk
[
it
->
pack_num
]);
mypack
.
setDData
(
it
->
pack_ind
,
value
);
}
else
if
(
it
->
iotype
==
UniversalIO
::
AI
||
it
->
iotype
==
UniversalIO
::
AO
)
{
UniSetTypes
::
uniset_rwmutex_wrlock
l
(
pack_mutex
);
auto
&
pk
=
mypacks
[
it
->
pack_sendfactor
];
UniSetUDP
::
UDPMessage
&
mypack
(
pk
[
it
->
pack_num
]);
mypack
.
setAData
(
it
->
pack_ind
,
value
);
}
auto
&
pk
=
mypacks
[
it
.
pack_sendfactor
];
UniSetUDP
::
UDPMessage
&
mypack
(
pk
[
it
.
pack_num
]);
if
(
it
.
iotype
==
UniversalIO
::
DI
||
it
.
iotype
==
UniversalIO
::
DO
)
mypack
.
setDData
(
it
.
pack_ind
,
value
);
else
if
(
it
.
iotype
==
UniversalIO
::
AI
||
it
.
iotype
==
UniversalIO
::
AO
)
mypack
.
setAData
(
it
.
pack_ind
,
value
);
}
// -----------------------------------------------------------------------------
void
UNetSender
::
setCheckConnectionPause
(
int
msec
)
...
...
@@ -202,8 +181,7 @@ void UNetSender::setCheckConnectionPause( int msec )
// -----------------------------------------------------------------------------
void
UNetSender
::
send
()
{
dlist
.
resize
(
maxItem
);
unetinfo
<<
myname
<<
"(send): dlist size = "
<<
dlist
.
size
()
<<
endl
;
unetinfo
<<
myname
<<
"(send): dlist size = "
<<
items
.
size
()
<<
endl
;
ncycle
=
0
;
ptCheckConnection
.
reset
();
...
...
@@ -493,10 +471,7 @@ bool UNetSender::initItem( UniXML::iterator& it )
mypacks
[
priority
]
=
pk
;
if
(
maxItem
>=
dlist
.
size
()
)
dlist
.
resize
(
maxItem
+
10
);
dlist
[
maxItem
]
=
p
;
items
[
p
.
id
]
=
p
;
maxItem
++
;
unetinfo
<<
myname
<<
"(initItem): add "
<<
p
<<
endl
;
...
...
@@ -511,14 +486,14 @@ std::ostream& operator<<( std::ostream& os, UNetSender::UItem& p )
// -----------------------------------------------------------------------------
void
UNetSender
::
initIterators
()
{
for
(
auto
&&
it
:
dlist
)
shm
->
initIterator
(
it
.
ioit
);
for
(
auto
&&
it
:
items
)
shm
->
initIterator
(
it
.
second
.
ioit
);
}
// -----------------------------------------------------------------------------
void
UNetSender
::
askSensors
(
UniversalIO
::
UIOCommand
cmd
)
{
for
(
auto
&&
it
:
dlist
)
shm
->
askSensor
(
it
.
id
,
cmd
);
for
(
auto
&&
it
:
items
)
shm
->
askSensor
(
it
.
second
.
id
,
cmd
);
}
// -----------------------------------------------------------------------------
size_t
UNetSender
::
getDataPackCount
()
const
...
...
extensions/UNetUDP/UNetSender.h
View file @
c751a705
...
...
@@ -91,7 +91,7 @@ class UNetSender
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
UItem
&
p
);
};
typedef
std
::
vector
<
UItem
>
D
Map
;
typedef
std
::
unordered_map
<
UniSetTypes
::
ObjectId
,
UItem
>
UItem
Map
;
size_t
getDataPackCount
()
const
;
...
...
@@ -108,7 +108,7 @@ class UNetSender
void
updateSensor
(
UniSetTypes
::
ObjectId
id
,
long
value
);
/*! Обновить значение по итератору */
void
updateItem
(
DMap
::
iterator
&
it
,
long
value
);
void
updateItem
(
UItem
&
it
,
long
value
);
inline
void
setSendPause
(
int
msec
)
{
...
...
@@ -191,7 +191,7 @@ class UNetSender
Packs
mypacks
;
std
::
unordered_map
<
sendfactor_t
,
size_t
>
packs_anum
;
std
::
unordered_map
<
sendfactor_t
,
size_t
>
packs_dnum
;
DMap
dlist
;
UItemMap
items
;
size_t
maxItem
=
{
0
};
size_t
packetnum
=
{
1
};
/*!< номер очередного посылаемого пакета */
uint16_t
lastcrc
=
{
0
};
...
...
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