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
55e4d73a
Commit
55e4d73a
authored
May 01, 2011
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(unet2): Исправил ошибки в обработке заказа датчиков.
parent
7b0a07d5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
30 additions
and
36 deletions
+30
-36
UNetExchange.cc
extensions/UNet2/UNetExchange.cc
+11
-19
UNetExchange.h
extensions/UNet2/UNetExchange.h
+0
-1
UNetReceiver.cc
extensions/UNet2/UNetReceiver.cc
+4
-2
UNetSender.cc
extensions/UNet2/UNetSender.cc
+9
-11
IONotifyController.cc
src/Processes/IONotifyController.cc
+6
-3
No files found.
extensions/UNet2/UNetExchange.cc
View file @
55e4d73a
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
using
namespace
std
;
using
namespace
std
;
using
namespace
UniSetTypes
;
using
namespace
UniSetTypes
;
using
namespace
UniSetExtensions
;
using
namespace
UniSetExtensions
;
// -----------------------------------------------------------------------------
UNetExchange
::
UNetExchange
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmId
,
SharedMemory
*
ic
)
:
UNetExchange
::
UNetExchange
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmId
,
SharedMemory
*
ic
)
:
UniSetObject_LT
(
objId
),
UniSetObject_LT
(
objId
),
shm
(
0
),
shm
(
0
),
...
@@ -17,7 +18,6 @@ sender(0)
...
@@ -17,7 +18,6 @@ sender(0)
if
(
objId
==
DefaultObjectId
)
if
(
objId
==
DefaultObjectId
)
throw
UniSetTypes
::
SystemError
(
"(UNetExchange): objId=-1?!! Use --unet-name"
);
throw
UniSetTypes
::
SystemError
(
"(UNetExchange): objId=-1?!! Use --unet-name"
);
// xmlNode* cnode = conf->getNode(myname);
cnode
=
conf
->
getNode
(
myname
);
cnode
=
conf
->
getNode
(
myname
);
if
(
cnode
==
NULL
)
if
(
cnode
==
NULL
)
throw
UniSetTypes
::
SystemError
(
"(UNetExchange): Not found conf-node for "
+
myname
);
throw
UniSetTypes
::
SystemError
(
"(UNetExchange): Not found conf-node for "
+
myname
);
...
@@ -143,10 +143,6 @@ sender(0)
...
@@ -143,10 +143,6 @@ sender(0)
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(init): test_id="
<<
test_id
<<
endl
;
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(init): test_id="
<<
test_id
<<
endl
;
activateTimeout
=
conf
->
getArgPInt
(
"--activate-timeout"
,
20000
);
activateTimeout
=
conf
->
getArgPInt
(
"--activate-timeout"
,
20000
);
timeout_t
msec
=
conf
->
getArgPInt
(
"--unet-timeout"
,
it
.
getProp
(
"timeout"
),
3000
);
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(init): udp-timeout="
<<
msec
<<
" msec"
<<
endl
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
UNetExchange
::~
UNetExchange
()
UNetExchange
::~
UNetExchange
()
...
@@ -176,12 +172,6 @@ void UNetExchange::startReceivers()
...
@@ -176,12 +172,6 @@ void UNetExchange::startReceivers()
(
*
it
)
->
start
();
(
*
it
)
->
start
();
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
UNetExchange
::
initSender
(
const
std
::
string
s_host
,
const
ost
::
tpport_t
port
,
UniXML_iterator
&
it
)
{
if
(
no_sender
)
return
;
}
// -----------------------------------------------------------------------------
void
UNetExchange
::
waitSMReady
()
void
UNetExchange
::
waitSMReady
()
{
{
// waiting for SM is ready...
// waiting for SM is ready...
...
@@ -229,7 +219,7 @@ void UNetExchange::step()
...
@@ -229,7 +219,7 @@ void UNetExchange::step()
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
UNetExchange
::
processingMessage
(
UniSetTypes
::
VoidMessage
*
msg
)
void
UNetExchange
::
processingMessage
(
UniSetTypes
::
VoidMessage
*
msg
)
{
{
try
try
{
{
...
@@ -272,7 +262,7 @@ void UNetExchange::processingMessage(UniSetTypes::VoidMessage *msg)
...
@@ -272,7 +262,7 @@ void UNetExchange::processingMessage(UniSetTypes::VoidMessage *msg)
}
}
catch
(...)
catch
(...)
{
{
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(processingMessage): catch ...
\n
"
;
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(processingMessage): catch ...
"
<<
std
::
endl
;
}
}
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
...
@@ -301,29 +291,31 @@ void UNetExchange::sysCommand( UniSetTypes::SystemMessage *sm )
...
@@ -301,29 +291,31 @@ void UNetExchange::sysCommand( UniSetTypes::SystemMessage *sm )
{
{
UniSetTypes
::
uniset_mutex_lock
l
(
mutex_start
,
10000
);
UniSetTypes
::
uniset_mutex_lock
l
(
mutex_start
,
10000
);
if
(
shm
->
isLocalwork
()
)
askSensors
(
UniversalIO
::
UIONotify
);
askSensors
(
UniversalIO
::
UIONotify
);
}
}
askTimer
(
tmStep
,
steptime
);
askTimer
(
tmStep
,
steptime
);
startReceivers
();
startReceivers
();
if
(
sender
)
if
(
sender
)
sender
->
start
();
sender
->
start
();
}
}
break
;
case
SystemMessage
:
:
FoldUp
:
case
SystemMessage
:
:
FoldUp
:
case
SystemMessage
:
:
Finish
:
case
SystemMessage
:
:
Finish
:
if
(
shm
->
isLocalwork
()
)
askSensors
(
UniversalIO
::
UIODontNotify
);
askSensors
(
UniversalIO
::
UIODontNotify
);
break
;
break
;
case
SystemMessage
:
:
WatchDog
:
case
SystemMessage
:
:
WatchDog
:
{
{
// ОПТИМИЗАЦИЯ (защита от двойного перезаказа при старте)
// ОПТИМИЗАЦИЯ (защита от двойного перезаказа при старте)
// Если идёт
локальная работа
// Если идёт
автономная работа, то нужно заказывать датчики
//
(т.е. UNetExchange запущен в одном процессе с SharedMemory2)
//
если запущены в одном процессе с SharedMemory2,
// то обрабатывать WatchDog не надо, т.к. мы и так ждём готовности SM
// то обрабатывать WatchDog не надо, т.к. мы и так ждём готовности SM
// при заказе датчиков, а если SM вылетит, то вместе с этим процессом(UNetExchange)
// при заказе датчиков, а если SM вылетит, то вместе с этим процессом(UNetExchange)
if
(
shm
->
isLocalwork
()
)
if
(
shm
->
isLocalwork
()
)
break
;
askSensors
(
UniversalIO
::
UIONotify
);
askSensors
(
UniversalIO
::
UIONotify
);
}
}
break
;
break
;
...
@@ -375,7 +367,7 @@ void UNetExchange::askSensors( UniversalIO::UIOCommand cmd )
...
@@ -375,7 +367,7 @@ void UNetExchange::askSensors( UniversalIO::UIOCommand cmd )
void
UNetExchange
::
sensorInfo
(
UniSetTypes
::
SensorMessage
*
sm
)
void
UNetExchange
::
sensorInfo
(
UniSetTypes
::
SensorMessage
*
sm
)
{
{
if
(
sender
)
if
(
sender
)
sender
->
updateSensor
(
sm
->
id
,
sm
->
value
);
sender
->
updateSensor
(
sm
->
id
,
sm
->
value
);
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
bool
UNetExchange
::
activateObject
()
bool
UNetExchange
::
activateObject
()
...
@@ -396,7 +388,7 @@ bool UNetExchange::activateObject()
...
@@ -396,7 +388,7 @@ bool UNetExchange::activateObject()
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
void
UNetExchange
::
sigterm
(
int
signo
)
void
UNetExchange
::
sigterm
(
int
signo
)
{
{
cerr
<<
myname
<<
": ********* SIGTERM("
<<
signo
<<
") ********"
<<
endl
;
dlog
[
Debug
::
INFO
]
<<
myname
<<
": ********* SIGTERM("
<<
signo
<<
") ********"
<<
endl
;
activated
=
false
;
activated
=
false
;
for
(
ReceiverList
::
iterator
it
=
recvlist
.
begin
();
it
!=
recvlist
.
end
();
++
it
)
for
(
ReceiverList
::
iterator
it
=
recvlist
.
begin
();
it
!=
recvlist
.
end
();
++
it
)
{
{
...
...
extensions/UNet2/UNetExchange.h
View file @
55e4d73a
...
@@ -84,7 +84,6 @@ class UNetExchange:
...
@@ -84,7 +84,6 @@ class UNetExchange:
void
initIterators
();
void
initIterators
();
void
startReceivers
();
void
startReceivers
();
void
initSender
(
const
std
::
string
host
,
const
ost
::
tpport_t
port
,
UniXML_iterator
&
it
);
enum
Timer
enum
Timer
{
{
...
...
extensions/UNet2/UNetReceiver.cc
View file @
55e4d73a
...
@@ -209,8 +209,8 @@ void UNetReceiver::real_update()
...
@@ -209,8 +209,8 @@ void UNetReceiver::real_update()
shm
->
initDIterator
(
ii
.
dit
);
shm
->
initDIterator
(
ii
.
dit
);
}
}
if
(
d
.
id
==
121
)
//
if( d.id == 121 )
cerr
<<
"****** save id="
<<
d
.
id
<<
" val="
<<
d
.
val
<<
endl
;
//
cerr << "****** save id=" << d.id << " val=" << d.val << endl;
if
(
ii
.
iotype
==
UniversalIO
::
DigitalInput
)
if
(
ii
.
iotype
==
UniversalIO
::
DigitalInput
)
shm
->
localSaveState
(
ii
.
dit
,
d
.
id
,
d
.
val
,
shm
->
ID
());
shm
->
localSaveState
(
ii
.
dit
,
d
.
id
,
d
.
val
,
shm
->
ID
());
else
if
(
ii
.
iotype
==
UniversalIO
::
AnalogInput
)
else
if
(
ii
.
iotype
==
UniversalIO
::
AnalogInput
)
...
@@ -315,6 +315,7 @@ bool UNetReceiver::recv()
...
@@ -315,6 +315,7 @@ bool UNetReceiver::recv()
rnum
=
pack
.
msg
.
header
.
num
;
rnum
=
pack
.
msg
.
header
.
num
;
#if 0
cerr << myname << "(receive): recv DATA OK. ret=" << ret << " sizeof=" << sz
cerr << myname << "(receive): recv DATA OK. ret=" << ret << " sizeof=" << sz
<< " header: " << pack.msg.header
<< " header: " << pack.msg.header
<< " waitClean=" << waitClean
<< " waitClean=" << waitClean
...
@@ -324,6 +325,7 @@ bool UNetReceiver::recv()
...
@@ -324,6 +325,7 @@ bool UNetReceiver::recv()
UniSetUDP::UDPData& d = pack.msg.dat[i];
UniSetUDP::UDPData& d = pack.msg.dat[i];
cerr << "****** save id=" << d.id << " val=" << d.val << endl;
cerr << "****** save id=" << d.id << " val=" << d.val << endl;
}
}
#endif
{
// lock qpack
{
// lock qpack
uniset_mutex_lock
l
(
packMutex
,
500
);
uniset_mutex_lock
l
(
packMutex
,
500
);
...
...
extensions/UNet2/UNetSender.cc
View file @
55e4d73a
...
@@ -97,6 +97,7 @@ void UNetSender::updateFromSM()
...
@@ -97,6 +97,7 @@ void UNetSender::updateFromSM()
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
UNetSender
::
updateSensor
(
UniSetTypes
::
ObjectId
id
,
long
value
)
void
UNetSender
::
updateSensor
(
UniSetTypes
::
ObjectId
id
,
long
value
)
{
{
// cerr << myname << ": UPDATE SENSOR id=" << id << " value=" << value << endl;
DMap
::
iterator
it
=
dlist
.
begin
();
DMap
::
iterator
it
=
dlist
.
begin
();
for
(
;
it
!=
dlist
.
end
();
++
it
)
for
(
;
it
!=
dlist
.
end
();
++
it
)
{
{
...
@@ -110,7 +111,7 @@ void UNetSender::updateSensor( UniSetTypes::ObjectId id, long value )
...
@@ -110,7 +111,7 @@ void UNetSender::updateSensor( UniSetTypes::ObjectId id, long value )
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
UNetSender
::
updateItem
(
DMap
::
iterator
&
it
,
long
value
)
void
UNetSender
::
updateItem
(
DMap
::
iterator
&
it
,
long
value
)
{
{
if
(
it
!
=
dlist
.
end
()
)
if
(
it
=
=
dlist
.
end
()
)
return
;
return
;
UniSetTypes
::
uniset_mutex_lock
l
(
pack_mutex
,
100
);
UniSetTypes
::
uniset_mutex_lock
l
(
pack_mutex
,
100
);
...
@@ -139,25 +140,28 @@ void UNetSender::send()
...
@@ -139,25 +140,28 @@ void UNetSender::send()
{
{
try
try
{
{
if
(
!
shm
->
isLocalwork
()
)
updateFromSM
();
real_send
();
real_send
();
}
}
catch
(
ost
::
SockException
&
e
)
catch
(
ost
::
SockException
&
e
)
{
{
cerr
<<
myname
<<
"(send): "
<<
e
.
getString
()
<<
endl
;
dlog
[
Debug
::
WARN
]
<<
myname
<<
"(send): "
<<
e
.
getString
()
<<
endl
;
}
}
catch
(
UniSetTypes
::
Exception
&
ex
)
catch
(
UniSetTypes
::
Exception
&
ex
)
{
{
cerr
<<
myname
<<
"(send): "
<<
ex
<<
std
::
endl
;
dlog
[
Debug
::
WARN
]
<<
myname
<<
"(send): "
<<
ex
<<
std
::
endl
;
}
}
catch
(...)
catch
(...)
{
{
cerr
<<
myname
<<
"(send): catch ..."
<<
std
::
endl
;
dlog
[
Debug
::
WARN
]
<<
myname
<<
"(send): catch ..."
<<
std
::
endl
;
}
}
msleep
(
sendpause
);
msleep
(
sendpause
);
}
}
cerr
<<
"************* execute FINISH **********"
<<
endl
;
dlog
[
Debug
::
INFO
]
<<
"************* execute FINISH **********"
<<
endl
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
UNetSender
::
real_send
()
void
UNetSender
::
real_send
()
...
@@ -276,12 +280,6 @@ bool UNetSender::initItem( UniXML_iterator& it )
...
@@ -276,12 +280,6 @@ bool UNetSender::initItem( UniXML_iterator& it )
return
false
;
return
false
;
}
}
if
(
shm
)
{
shm
->
initDIterator
(
p
.
dit
);
shm
->
initAIterator
(
p
.
ait
);
}
if
(
maxItem
>=
dlist
.
size
()
)
if
(
maxItem
>=
dlist
.
size
()
)
dlist
.
resize
(
maxItem
+
10
);
dlist
.
resize
(
maxItem
+
10
);
...
...
src/Processes/IONotifyController.cc
View file @
55e4d73a
...
@@ -199,7 +199,8 @@ void IONotifyController::askState( const IOController_i::SensorInfo& si,
...
@@ -199,7 +199,8 @@ void IONotifyController::askState( const IOController_i::SensorInfo& si,
// контроль заказа типа датчика(дискретного) здесь производится
// контроль заказа типа датчика(дискретного) здесь производится
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
{
unideb
[
Debug
::
INFO
]
<<
"поступил заказ от "
unideb
[
Debug
::
INFO
]
<<
"(askState): поступил "
<<
(
cmd
==
UIODontNotify
?
"отказ"
:
"заказ"
)
<<
" от "
<<
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
)
<<
" на дискретный датчик "
<<
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
)
<<
" на дискретный датчик "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
}
}
...
@@ -284,7 +285,8 @@ void IONotifyController::askValue(const IOController_i::SensorInfo& si,
...
@@ -284,7 +285,8 @@ void IONotifyController::askValue(const IOController_i::SensorInfo& si,
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
{
unideb
[
Debug
::
INFO
]
<<
"поступил заказ от "
<<
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
)
unideb
[
Debug
::
INFO
]
<<
"(askValue): поступил "
<<
(
cmd
==
UIODontNotify
?
"отказ"
:
"заказ"
)
<<
" от "
<<
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
)
<<
" на аналоговый датчик "
<<
" на аналоговый датчик "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
}
}
...
@@ -1082,7 +1084,8 @@ void IONotifyController::askOutput(const IOController_i::SensorInfo& si,
...
@@ -1082,7 +1084,8 @@ void IONotifyController::askOutput(const IOController_i::SensorInfo& si,
string
name
=
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
);
string
name
=
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
{
unideb
[
Debug
::
INFO
]
<<
"(askOutput): поступил заказ от ("
<<
ci
.
id
<<
") "
unideb
[
Debug
::
INFO
]
<<
"(askOutput): поступил "
<<
(
cmd
==
UIODontNotify
?
"отказ"
:
"заказ"
)
<<
" от ("
<<
ci
.
id
<<
") "
<<
name
<<
" на выход "
<<
name
<<
" на выход "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
}
}
...
...
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