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
b7f5e43e
Commit
b7f5e43e
authored
Oct 04, 2011
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(unet2): Встроил возможность задавать для каждого Reveiver,
датчик связи и датчик "количество потерянных пакетов".
parent
d6bf50ce
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
83 additions
and
8 deletions
+83
-8
UNetExchange.cc
extensions/UNet2/UNetExchange.cc
+30
-0
UNetExchange.h
extensions/UNet2/UNetExchange.h
+6
-7
UNetReceiver.cc
extensions/UNet2/UNetReceiver.cc
+39
-1
UNetReceiver.h
extensions/UNet2/UNetReceiver.h
+8
-0
No files found.
extensions/UNet2/UNetExchange.cc
View file @
b7f5e43e
...
...
@@ -110,6 +110,34 @@ sender(0)
continue
;
}
string
s_resp_id
(
n_it
.
getProp
(
"respond_id"
));
UniSetTypes
::
ObjectId
resp_id
=
UniSetTypes
::
DefaultObjectId
;
if
(
!
s_resp_id
.
empty
()
)
{
resp_id
=
conf
->
getSensorID
(
s_resp_id
);
if
(
resp_id
==
UniSetTypes
::
DefaultObjectId
)
{
ostringstream
err
;
err
<<
myname
<<
": Unknown RespondID.. Not found id for '"
<<
s_resp_id
<<
"'"
<<
endl
;
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(init): "
<<
err
.
str
()
<<
endl
;
throw
SystemError
(
err
.
str
());
}
}
string
s_lp_id
(
n_it
.
getProp
(
"lostpackets_id"
));
UniSetTypes
::
ObjectId
lp_id
=
UniSetTypes
::
DefaultObjectId
;
if
(
!
s_lp_id
.
empty
()
)
{
lp_id
=
conf
->
getSensorID
(
s_lp_id
);
if
(
lp_id
==
UniSetTypes
::
DefaultObjectId
)
{
ostringstream
err
;
err
<<
myname
<<
": Unknown LostPacketsID.. Not found id for '"
<<
s_lp_id
<<
"'"
<<
endl
;
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(init): "
<<
err
.
str
()
<<
endl
;
throw
SystemError
(
err
.
str
());
}
}
UNetReceiver
*
r
=
new
UNetReceiver
(
h
,
p
,
shm
);
r
->
setReceiveTimeout
(
recvTimeout
);
...
...
@@ -118,6 +146,8 @@ sender(0)
r
->
setUpdatePause
(
updatepause
);
r
->
setMaxDifferens
(
maxDiff
);
r
->
setMaxProcessingCount
(
maxProcessingCount
);
r
->
setRespondID
(
resp_id
);
r
->
setLostPacketsID
(
lp_id
);
recvlist
.
push_back
(
r
);
}
...
...
extensions/UNet2/UNetExchange.h
View file @
b7f5e43e
...
...
@@ -20,20 +20,19 @@
\par Обмен построен на основе протокола UDP.
Основная идея заключается в том, что каждый узел на порту равном своему ID
посылает в сеть UDP-пакеты содержащие данные считанные из локальной SM. Формат данных - это набор
пар "id - value". Другие узлы принимают их. Помимо этого
процесс,
данный процесс запускает
пар "id - value". Другие узлы принимают их. Помимо этого данный процесс запускает
по потоку приёма для каждого другого узла и ловит пакеты от них, сохраняя данные в SM.
\par При своём старте процесс считывает из секции <nodes> список узлов с которыми необходимо вести обмен.
Открывает по потоку приёма на каждый узел и поток передачи для своих данных. А так же параметры
своего узла.
\par При своём старте процесс считывает из секции <nodes> список узлов с которыми необходимо вести обмен, параметры своего узла.
Открывает по потоку приёма на каждый узел и поток передачи для своих данных.
\par Пример конфигурирования
По умолчанию при считывании используются свойства \a ip и \a id - в качестве порта.
Но можно переопределять эти параметры, при помощи указания \a unet_port и/или \a unet_ip.
Помимо этого можно задать broadcast-адрес по умолчанию \a unet_ip для всех узлов в
свойствах секции <nodes unet_ip="xxx.255">
Помимо этого можно задать broadcast-адрес по умолчанию \a unet_
broadcast_
ip для всех узлов в
свойствах секции <nodes unet_
broadcast_
ip="xxx.255">
\code
<nodes port="2809" unet_ip="192.168.56.255">
<nodes port="2809" unet_
broadcast_
ip="192.168.56.255">
<item ip="127.0.0.1" name="LocalhostNode" textname="Локальный узел" unet_ignore="1" unet_port="3000" unet_ip="192.168.56.1">
<iocards>
...
...
...
extensions/UNet2/UNetReceiver.cc
View file @
b7f5e43e
...
...
@@ -24,6 +24,8 @@ udp(0),
recvTimeout
(
5000
),
lostTimeout
(
5000
),
lostPackets
(
0
),
sidRespond
(
UniSetTypes
::
DefaultObjectId
),
sidLostPackets
(
UniSetTypes
::
DefaultObjectId
),
activated
(
false
),
r_thr
(
0
),
u_thr
(
0
),
...
...
@@ -113,6 +115,18 @@ void UNetReceiver::setMaxDifferens( unsigned long set )
maxDifferens
=
set
;
}
// -----------------------------------------------------------------------------
void
UNetReceiver
::
setRespondID
(
UniSetTypes
::
ObjectId
id
)
{
sidRespond
=
id
;
shm
->
initDIterator
(
ditRespond
);
}
// -----------------------------------------------------------------------------
void
UNetReceiver
::
setLostPacketsID
(
UniSetTypes
::
ObjectId
id
)
{
sidLostPackets
=
id
;
shm
->
initAIterator
(
aitLostPackets
);
}
// -----------------------------------------------------------------------------
void
UNetReceiver
::
start
()
{
if
(
!
activated
)
...
...
@@ -140,7 +154,31 @@ void UNetReceiver::update()
{
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(update): catch ..."
<<
std
::
endl
;
}
if
(
sidRespond
!=
DefaultObjectId
)
{
try
{
shm
->
localSaveState
(
ditRespond
,
sidRespond
,
isRecvOK
(),
shm
->
ID
());
}
catch
(
Exception
&
ex
)
{
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(step): (respond) "
<<
ex
<<
std
::
endl
;
}
}
if
(
sidLostPackets
!=
DefaultObjectId
)
{
try
{
shm
->
localSaveValue
(
aitLostPackets
,
sidLostPackets
,
getLostPacketsNum
(),
shm
->
ID
());
}
catch
(
Exception
&
ex
)
{
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(step): (lostPackets) "
<<
ex
<<
std
::
endl
;
}
}
msleep
(
updatepause
);
}
}
...
...
extensions/UNet2/UNetReceiver.h
View file @
b7f5e43e
...
...
@@ -67,6 +67,9 @@ class UNetReceiver
void
setLostTimeout
(
timeout_t
msec
);
void
setMaxDifferens
(
unsigned
long
set
);
void
setRespondID
(
UniSetTypes
::
ObjectId
id
);
void
setLostPacketsID
(
UniSetTypes
::
ObjectId
id
);
void
setMaxProcessingCount
(
int
set
);
inline
ost
::
IPV4Address
getAddress
(){
return
addr
;
}
...
...
@@ -100,6 +103,11 @@ class UNetReceiver
PassiveTimer
ptLostTimeout
;
unsigned
long
lostPackets
;
/*!< счётчик потерянных пакетов */
UniSetTypes
::
ObjectId
sidRespond
;
IOController
::
DIOStateList
::
iterator
ditRespond
;
UniSetTypes
::
ObjectId
sidLostPackets
;
IOController
::
AIOStateList
::
iterator
aitLostPackets
;
bool
activated
;
ThreadCreator
<
UNetReceiver
>*
r_thr
;
// receive thread
...
...
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