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
08e088e0
Commit
08e088e0
authored
Dec 15, 2013
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Первый этап переделок в связи с переходом на getValue/setValue
parent
8e80c2fd
Hide whitespace changes
Inline
Side-by-side
Showing
58 changed files
with
748 additions
and
3339 deletions
+748
-3339
IOController_i.idl
IDL/Processes/IOController_i.idl
+1
-3
admin.cc
Utilities/Admin/admin.cc
+76
-182
main.cc
Utilities/SImitator/main.cc
+3
-9
libuniset.spec
conf/libuniset.spec
+1
-1
IOControl.cc
extensions/IOControl/IOControl.cc
+25
-25
IOControl.h
extensions/IOControl/IOControl.h
+2
-2
LProcessor.cc
extensions/LogicProcessor/LProcessor.cc
+2
-2
LProcessor.h
extensions/LogicProcessor/LProcessor.h
+2
-2
PassiveLProcessor.cc
extensions/LogicProcessor/PassiveLProcessor.cc
+4
-4
PassiveLProcessor.h
extensions/LogicProcessor/PassiveLProcessor.h
+1
-1
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+26
-26
MBExchange.h
extensions/ModbusMaster/MBExchange.h
+3
-3
RTUStorage.cc
extensions/ModbusMaster/RTUStorage.cc
+17
-17
RTUStorage.h
extensions/ModbusMaster/RTUStorage.h
+5
-5
rtustate.cc
extensions/ModbusMaster/rtustate.cc
+2
-2
MBSlave.cc
extensions/ModbusSlave/MBSlave.cc
+16
-16
MBSlave.h
extensions/ModbusSlave/MBSlave.h
+2
-2
SMDBServer.h
extensions/SMDBServer/SMDBServer.h
+1
-1
SharedMemory.cc
extensions/SharedMemory/SharedMemory.cc
+26
-8
SharedMemory.h
extensions/SharedMemory/SharedMemory.h
+3
-3
UNetExchange.h
extensions/UNetUDP/UNetExchange.h
+2
-2
UNetReceiver.cc
extensions/UNetUDP/UNetReceiver.cc
+8
-8
UNetReceiver.h
extensions/UNetUDP/UNetReceiver.h
+3
-3
UNetSender.cc
extensions/UNetUDP/UNetSender.cc
+6
-6
UNetSender.h
extensions/UNetUDP/UNetSender.h
+2
-2
UniExchange.cc
extensions/UniNetwork/UniExchange.cc
+8
-8
UniExchange.h
extensions/UniNetwork/UniExchange.h
+2
-2
IOBase.h
extensions/include/IOBase.h
+4
-4
SMInterface.h
extensions/include/SMInterface.h
+10
-10
IOBase.cc
extensions/lib/IOBase.cc
+25
-25
SMInterface.cc
extensions/lib/SMInterface.cc
+13
-13
UObject_SK.cc
extensions/lib/UObject_SK.cc
+1
-1
Configuration.h
include/Configuration.h
+2
-2
IOController.h
include/IOController.h
+46
-159
IONotifyController.h
include/IONotifyController.h
+10
-38
MessageType.h
include/MessageType.h
+3
-8
NCRestorer.h
include/NCRestorer.h
+12
-36
SViewer.h
include/SViewer.h
+2
-3
StorageInterface.h
include/StorageInterface.h
+2
-2
UniSetTypes.h
include/UniSetTypes.h
+3
-21
UniversalInterface.h
include/UniversalInterface.h
+6
-62
UConnector.cc
python/lib/pyUniSet/UConnector.cc
+32
-32
UInterface.cc
python/lib/pyUniSet/UInterface.cc
+24
-24
UModbus.cc
python/lib/pyUniSet/UModbus.cc
+2
-2
UniversalInterface.cc
src/Interfaces/UniversalInterface.cc
+22
-1007
UniSetObject.cc
src/ObjectRepository/UniSetObject.cc
+0
-12
UniSetTypes.cc
src/ObjectRepository/UniSetTypes.cc
+5
-4
IOController.cc
src/Processes/IOController.cc
+148
-814
IONotifyController.cc
src/Processes/IONotifyController.cc
+49
-461
Configuration.cc
src/Various/Configuration.cc
+2
-2
MessageType.cc
src/Various/MessageType.cc
+2
-31
NCRestorer.cc
src/Various/NCRestorer.cc
+23
-71
NCRestorer_XML.cc
src/Various/NCRestorer_XML.cc
+21
-60
SMonitor.cc
src/Various/SMonitor.cc
+2
-13
STLStorage.cc
src/Various/STLStorage.cc
+1
-1
SViewer.cc
src/Various/SViewer.cc
+9
-57
conftest.cc
tests/conftest.cc
+16
-17
ui.cc
tests/ui.cc
+2
-2
No files found.
IDL/Processes/IOController_i.idl
View file @
08e088e0
...
...
@@ -57,7 +57,6 @@ interface IOController_i : ObjectsManager_i
{
}
;
/*
!
Информация
о
датчике
*/
struct
SensorInfo
{
...
...
@@ -118,8 +117,7 @@ interface IOController_i : ObjectsManager_i
typedef
sequence
<
SensorIOInfo
>
SensorInfoSeq
;
SensorInfoSeq
getSensorsMap
()
;
SensorIOInfo
getSInfo
(
in
SensorInfo
si
)
raises
(
NameNotFound
)
;
SensorIOInfo
getSensorIOInfo
(
in
SensorInfo
si
)
raises
(
NameNotFound
)
;
//
--
Функции
работы
со
списком
датчиков
--
...
...
Utilities/Admin/admin.cc
View file @
08e088e0
...
...
@@ -37,7 +37,6 @@ static struct option longopts[] = {
{
"create"
,
no_argument
,
0
,
'b'
},
{
"exist"
,
no_argument
,
0
,
'e'
},
{
"omap"
,
no_argument
,
0
,
'o'
},
{
"msgmap"
,
no_argument
,
0
,
'm'
},
{
"start"
,
no_argument
,
0
,
's'
},
{
"finish"
,
no_argument
,
0
,
'f'
},
{
"foldUp"
,
no_argument
,
0
,
'u'
},
...
...
@@ -49,7 +48,6 @@ static struct option longopts[] = {
{
"getRawValue"
,
required_argument
,
0
,
'w'
},
{
"getCalibrate"
,
required_argument
,
0
,
'y'
},
{
"oinfo"
,
required_argument
,
0
,
'p'
},
{
"verbose"
,
no_argument
,
0
,
'v'
},
{
NULL
,
0
,
0
,
0
}
};
...
...
@@ -60,7 +58,6 @@ static bool commandToAll( const string& section, ObjectRepository *rep, Command
static
void
createSections
(
UniSetTypes
::
Configuration
*
c
);
// --------------------------------------------------------------------------
int
omap
();
int
msgmap
();
int
configure
(
const
string
&
args
,
UniversalInterface
&
ui
);
int
logRotate
(
const
string
&
args
,
UniversalInterface
&
ui
);
int
setValue
(
const
string
&
args
,
UniversalInterface
&
ui
,
Configuration
*
conf
=
UniSetTypes
::
conf
);
...
...
@@ -96,7 +93,6 @@ static void usage()
print_help
(
24
,
"-b|--create "
,
"Создание репозитория
\n
"
);
print_help
(
24
,
"-e|--exist "
,
"Вызов функции exist() показывающей какие объекты зарегистрированы и доступны.
\n
"
);
print_help
(
24
,
"-o|--omap "
,
"Вывод на экран списка объектов с идентификаторами.
\n
"
);
print_help
(
24
,
"-m|--msgmap "
,
"Вывод на экран списка сообщений с идентификаторами.
\n
"
);
print_help
(
24
,
"-s|--start "
,
"Посылка SystemMessage::StartUp всем объектам (процессам)
\n
"
);
print_help
(
24
,
"-u|--foldUp "
,
"Посылка SystemMessage::FoldUp всем объектам (процессам)
\n
"
);
print_help
(
24
,
"-f|--finish "
,
"Посылка SystemMessage::Finish всем объектам (процессам)
\n
"
);
...
...
@@ -111,18 +107,17 @@ static void usage()
cout
<<
endl
;
print_help
(
36
,
"-w|--getRawValue id1@node1=val,id2@node2=val2,id3=val3,.. "
,
"Получить 'сырое' значение.
\n
"
);
print_help
(
36
,
"-y|--getCalibrate id1@node1=val,id2@node2=val2,id3=val3,.. "
,
"Получить параметры калибровки.
\n
"
);
print_help
(
36
,
"-v|--verbose"
,
"Подробный вывод логов.
\n
"
);
cout
<<
endl
;
}
// --------------------------------------------------------------------------------------
/*!
\todo Сделать по умолчанию режим silent и ключ --verbose.
\todo Оптимизировать commandToAll, т.к. сейчас НА КАЖДОМ ШАГЕ цикла
создаётся сообщение и происходит преобразование в TransportMessage.
TransportMessage можно создать один раз до цикла.
*/
// --------------------------------------------------------------------------------------
static
bool
verb
=
false
;
int
main
(
int
argc
,
char
**
argv
)
{
try
...
...
@@ -130,18 +125,14 @@ int main(int argc, char** argv)
int
optindex
=
0
;
char
opt
=
0
;
while
(
(
opt
=
getopt_long
(
argc
,
argv
,
"
vhc:beomsfur:l:i:x:g:w:y:p:"
,
longopts
,
&
optindex
))
!=
-
1
)
while
(
(
opt
=
getopt_long
(
argc
,
argv
,
"
hc:beosfur:l:i:x:g:w:y:p:"
,
longopts
,
&
optindex
))
!=
-
1
)
{
switch
(
opt
)
//разбираем параметры
switch
(
opt
)
//разбираем параметры
{
case
'h'
:
//--help
usage
();
return
0
;
case
'v'
:
verb
=
true
;
break
;
case
'c'
:
//--confile
conffile
=
optarg
;
break
;
...
...
@@ -151,7 +142,7 @@ int main(int argc, char** argv)
uniset_init
(
argc
,
argv
,
conffile
);
return
omap
();
}
break
;
break
;
case
'b'
:
//--create
{
...
...
@@ -159,14 +150,7 @@ int main(int argc, char** argv)
createSections
(
conf
);
}
return
0
;
case
'm'
:
//--msgmap
{
uniset_init
(
argc
,
argv
,
conffile
);
return
msgmap
();
}
break
;
case
'x'
:
//--setValue
{
uniset_init
(
argc
,
argv
,
conffile
);
...
...
@@ -209,12 +193,11 @@ int main(int argc, char** argv)
UniversalInterface
ui
(
conf
);
Command
cmd
=
Exist
;
verb
=
true
;
ObjectRepository
*
rep
=
new
ObjectRepository
(
conf
);
commandToAll
(
conf
->
getServicesSection
(),
rep
,
(
Command
)
cmd
);
commandToAll
(
conf
->
getControllersSection
(),
rep
,
(
Command
)
cmd
);
commandToAll
(
conf
->
getObjectsSection
(),
rep
,
(
Command
)
cmd
);
delete
rep
;
delete
rep
;
// cout<<"(exist): done"<<endl;
}
return
0
;
...
...
@@ -224,13 +207,13 @@ int main(int argc, char** argv)
// cout<<"(main):received option --start"<<endl;
uniset_init
(
argc
,
argv
,
conffile
);
UniversalInterface
ui
(
conf
);
Command
cmd
=
StartUp
;
ObjectRepository
*
rep
=
new
ObjectRepository
(
conf
);
commandToAll
(
conf
->
getServicesSection
(),
rep
,
(
Command
)
cmd
);
commandToAll
(
conf
->
getControllersSection
(),
rep
,
(
Command
)
cmd
);
commandToAll
(
conf
->
getObjectsSection
(),
rep
,
(
Command
)
cmd
);
delete
rep
;
delete
rep
;
}
return
0
;
...
...
@@ -247,13 +230,13 @@ int main(int argc, char** argv)
// cout<<"(main):received option --finish"<<endl;
uniset_init
(
argc
,
argv
,
conffile
);
UniversalInterface
ui
(
conf
);
Command
cmd
=
Finish
;
Command
cmd
=
Finish
;
ObjectRepository
*
rep
=
new
ObjectRepository
(
conf
);
commandToAll
(
conf
->
getServicesSection
(),
rep
,
(
Command
)
cmd
);
commandToAll
(
conf
->
getControllersSection
(),
rep
,
(
Command
)
cmd
);
commandToAll
(
conf
->
getObjectsSection
(),
rep
,
(
Command
)
cmd
);
delete
rep
;
delete
rep
;
cout
<<
"(finish): done"
<<
endl
;
}
return
0
;
...
...
@@ -265,7 +248,7 @@ int main(int argc, char** argv)
return
logRotate
(
optarg
,
ui
);
}
break
;
case
'y'
:
//--getCalibrate
{
// cout<<"(main):received option --getCalibrate='"<<optarg<<"'"<<endl;
...
...
@@ -281,12 +264,12 @@ int main(int argc, char** argv)
uniset_init
(
argc
,
argv
,
conffile
);
UniversalInterface
ui
(
conf
);
Command
cmd
=
FoldUp
;
Command
cmd
=
FoldUp
;
ObjectRepository
*
rep
=
new
ObjectRepository
(
conf
);
commandToAll
(
conf
->
getServicesSection
(),
rep
,
(
Command
)
cmd
);
commandToAll
(
conf
->
getControllersSection
(),
rep
,
(
Command
)
cmd
);
commandToAll
(
conf
->
getObjectsSection
(),
rep
,
(
Command
)
cmd
);
delete
rep
;
delete
rep
;
// cout<<"(foldUp): done"<<endl;
}
return
0
;
...
...
@@ -297,40 +280,33 @@ int main(int argc, char** argv)
short_usage
();
return
1
;
}
}
}
}
return
0
;
}
catch
(
Exception
&
ex
)
{
if
(
verb
)
cout
<<
"admin(main): "
<<
ex
<<
endl
;
cout
<<
"admin(main): "
<<
ex
<<
endl
;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
if
(
verb
)
cerr
<<
"поймали CORBA::SystemException:"
<<
ex
.
NP_minorString
()
<<
endl
;
cerr
<<
"поймали CORBA::SystemException:"
<<
ex
.
NP_minorString
()
<<
endl
;
}
catch
(
CORBA
::
Exception
&
)
{
if
(
verb
)
cerr
<<
"поймали CORBA::Exception."
<<
endl
;
cerr
<<
"поймали CORBA::Exception."
<<
endl
;
}
catch
(
omniORB
::
fatalException
&
fe
)
{
if
(
verb
)
{
cerr
<<
"поймали omniORB::fatalException:"
<<
endl
;
cerr
<<
" file: "
<<
fe
.
file
()
<<
endl
;
cerr
<<
" line: "
<<
fe
.
line
()
<<
endl
;
cerr
<<
" mesg: "
<<
fe
.
errmsg
()
<<
endl
;
}
cerr
<<
"поймали omniORB::fatalException:"
<<
endl
;
cerr
<<
" file: "
<<
fe
.
file
()
<<
endl
;
cerr
<<
" line: "
<<
fe
.
line
()
<<
endl
;
cerr
<<
" mesg: "
<<
fe
.
errmsg
()
<<
endl
;
}
catch
(...)
{
if
(
verb
)
cerr
<<
"неизвестное исключение"
<<
endl
;
cerr
<<
"неизвестное исключение"
<<
endl
;
}
return
1
;
...
...
@@ -339,17 +315,15 @@ int main(int argc, char** argv)
// ==============================================================================================
static
bool
commandToAll
(
const
string
&
section
,
ObjectRepository
*
rep
,
Command
cmd
)
{
if
(
verb
)
cout
<<
"
\n
||=======******** "
<<
section
<<
" ********=========||
\n
"
<<
endl
;
cout
<<
"
\n
||=======******** "
<<
section
<<
" ********=========||
\n
"
<<
endl
;
try
{
ListObjectName
ls
;
rep
->
list
(
section
.
c_str
(),
&
ls
);
if
(
ls
.
empty
()
)
if
(
ls
.
empty
()
)
{
if
(
verb
)
cout
<<
"пусто!!!!!!"
<<
endl
;
cout
<<
"пусто!!!!!!"
<<
endl
;
return
false
;
}
...
...
@@ -377,8 +351,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if
(
CORBA
::
is_nil
(
obj
))
break
;
SystemMessage
msg
(
SystemMessage
::
StartUp
);
obj
->
push
(
Message
::
transport
(
msg
)
);
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- start OK"
<<
endl
;
cout
<<
setw
(
55
)
<<
ob
<<
" <--- start OK"
<<
endl
;
}
break
;
...
...
@@ -387,8 +360,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if
(
CORBA
::
is_nil
(
obj
))
break
;
SystemMessage
msg
(
SystemMessage
::
FoldUp
);
obj
->
push
(
Message
::
transport
(
msg
)
);
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- foldUp OK"
<<
endl
;
cout
<<
setw
(
55
)
<<
ob
<<
" <--- foldUp OK"
<<
endl
;
}
break
;
...
...
@@ -397,19 +369,15 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
if
(
CORBA
::
is_nil
(
obj
))
break
;
SystemMessage
msg
(
SystemMessage
::
Finish
);
obj
->
push
(
Message
::
transport
(
msg
)
);
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- finish OK"
<<
endl
;
cout
<<
setw
(
55
)
<<
ob
<<
" <--- finish OK"
<<
endl
;
}
break
;
case
Exist
:
{
if
(
obj
->
exist
())
{
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- exist ok
\n
"
;
}
else
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- exist ok
\n
"
;
else
cout
<<
setw
(
55
)
<<
ob
<<
" <--- exist NOT OK
\n
"
;
}
break
;
...
...
@@ -418,8 +386,7 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
{
SystemMessage
sm
(
SystemMessage
::
ReConfiguration
);
obj
->
push
(
sm
.
transport_msg
());
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- configure ok
\n
"
;
cout
<<
setw
(
55
)
<<
ob
<<
" <--- configure ok
\n
"
;
}
break
;
...
...
@@ -427,28 +394,24 @@ static bool commandToAll(const string& section, ObjectRepository *rep, Command c
{
SystemMessage
msg
(
SystemMessage
::
LogRotate
);
obj
->
push
(
Message
::
transport
(
msg
)
);
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- logrotate ok
\n
"
;
cout
<<
setw
(
55
)
<<
ob
<<
" <--- logrotate ok
\n
"
;
break
;
}
default:
{
if
(
verb
)
cout
<<
"неизвестная команда -"
<<
cmd
<<
endl
;
cout
<<
"неизвестная команда -"
<<
cmd
<<
endl
;
return
false
;
}
}
}
catch
(
Exception
&
ex
)
{
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- "
<<
ex
<<
endl
;
cout
<<
setw
(
55
)
<<
ob
<<
" <--- "
<<
ex
<<
endl
;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
if
(
verb
)
cout
<<
setw
(
55
)
<<
ob
<<
" <--- недоступен!!(CORBA::SystemException): "
<<
ex
.
NP_minorString
()
<<
endl
;
cout
<<
setw
(
55
)
<<
ob
<<
" <--- недоступен!!(CORBA::SystemException): "
<<
ex
.
NP_minorString
()
<<
endl
;
}
}
}
...
...
@@ -470,8 +433,7 @@ static void createSections( UniSetTypes::Configuration* rconf )
repf
.
createRootSection
(
rconf
->
getObjectsSection
());
repf
.
createRootSection
(
rconf
->
getControllersSection
());
repf
.
createRootSection
(
rconf
->
getServicesSection
());
if
(
verb
)
cout
<<
"(create): created"
<<
endl
;
cout
<<
"(create): created"
<<
endl
;
}
// ==============================================================================================
...
...
@@ -486,30 +448,9 @@ int omap()
}
catch
(
Exception
&
ex
)
{
if
(
verb
)
unideb
[
Debug
::
CRIT
]
<<
" configuration init FAILED!!!
\n
"
;
return
1
;
}
return
0
;
}
// --------------------------------------------------------------------------------------
int
msgmap
()
{
try
{
cout
.
setf
(
ios
::
left
,
ios
::
adjustfield
);
cout
<<
"========================== MessagesMap =================================
\n
"
;
conf
->
mi
->
printMessagesMap
(
cout
);
cout
<<
"==========================================================================
\n
"
;
}
catch
(
Exception
&
ex
)
{
if
(
verb
)
unideb
[
Debug
::
CRIT
]
<<
" configuration init FAILED!!! "
<<
ex
<<
endl
;;
unideb
[
Debug
::
CRIT
]
<<
" configuration init FAILED!!!
\n
"
;
return
1
;
}
return
0
;
}
...
...
@@ -520,53 +461,38 @@ int setValue( const string& args, UniversalInterface &ui, Configuration* conf )
typedef
std
::
list
<
UniSetTypes
::
ParamSInfo
>
SList
;
SList
sl
=
UniSetTypes
::
getSInfoList
(
args
,
conf
);
if
(
verb
)
cout
<<
"====== setValue ======"
<<
endl
;
cout
<<
"====== setValue ======"
<<
endl
;
for
(
SList
::
iterator
it
=
sl
.
begin
();
it
!=
sl
.
end
();
it
++
)
{
try
{
UniversalIO
::
IOTypes
t
=
conf
->
getIOType
(
it
->
si
.
id
);
if
(
verb
)
{
cout
<<
" value: "
<<
it
->
val
<<
endl
;
cout
<<
" name: ("
<<
it
->
si
.
id
<<
") "
<<
it
->
fname
<<
endl
;
cout
<<
" iotype: "
<<
t
<<
endl
;
cout
<<
" text: "
<<
conf
->
oind
->
getTextName
(
it
->
si
.
id
)
<<
"
\n\n
"
;
}
UniversalIO
::
IOType
t
=
conf
->
getIOType
(
it
->
si
.
id
);
cout
<<
" value: "
<<
it
->
val
<<
endl
;
cout
<<
" name: ("
<<
it
->
si
.
id
<<
") "
<<
it
->
fname
<<
endl
;
cout
<<
" iotype: "
<<
t
<<
endl
;
cout
<<
" text: "
<<
conf
->
oind
->
getTextName
(
it
->
si
.
id
)
<<
"
\n\n
"
;
if
(
it
->
si
.
node
==
DefaultObjectId
)
it
->
si
.
node
=
conf
->
getLocalNode
();
switch
(
t
)
{
case
UniversalIO
:
:
DigitalInput
:
ui
.
saveState
(
it
->
si
.
id
,(
it
->
val
?
true
:
false
),
t
,
it
->
si
.
node
);
break
;
case
UniversalIO
:
:
DigitalOutput
:
ui
.
setState
(
it
->
si
.
id
,(
it
->
val
?
true
:
false
),
it
->
si
.
node
);
break
;
case
UniversalIO
:
:
AnalogInput
:
ui
.
saveValue
(
it
->
si
.
id
,
it
->
val
,
t
,
it
->
si
.
node
);
break
;
case
UniversalIO
:
:
AnalogOutput
:
case
UniversalIO
:
:
DI
:
case
UniversalIO
:
:
DO
:
case
UniversalIO
:
:
AI
:
case
UniversalIO
:
:
AO
:
ui
.
setValue
(
it
->
si
.
id
,
it
->
val
,
it
->
si
.
node
);
break
;
default:
if
(
verb
)
cerr
<<
"FAILED: Unknown 'iotype' for "
<<
it
->
fname
<<
endl
;
cerr
<<
"FAILED: Unknown 'iotype' for "
<<
it
->
fname
<<
endl
;
err
=
1
;
break
;
}
}
catch
(
Exception
&
ex
)
{
if
(
verb
)
cerr
<<
"(setValue): "
<<
ex
<<
endl
;;
cerr
<<
"(setValue): "
<<
ex
<<
endl
;;
err
=
1
;
}
}
...
...
@@ -581,53 +507,37 @@ int getValue( const string& args, UniversalInterface &ui, Configuration* conf )
typedef
std
::
list
<
UniSetTypes
::
ParamSInfo
>
SList
;
SList
sl
=
UniSetTypes
::
getSInfoList
(
args
,
UniSetTypes
::
conf
);
if
(
verb
)
cout
<<
"====== getValue ======"
<<
endl
;
cout
<<
"====== getValue ======"
<<
endl
;
for
(
SList
::
iterator
it
=
sl
.
begin
();
it
!=
sl
.
end
();
it
++
)
{
try
{
UniversalIO
::
IOTypes
t
=
conf
->
getIOType
(
it
->
si
.
id
);
if
(
verb
)
{
cout
<<
" name: ("
<<
it
->
si
.
id
<<
") "
<<
it
->
fname
<<
endl
;
cout
<<
" iotype: "
<<
t
<<
endl
;
cout
<<
" text: "
<<
conf
->
oind
->
getTextName
(
it
->
si
.
id
)
<<
"
\n\n
"
;
}
UniversalIO
::
IOType
t
=
conf
->
getIOType
(
it
->
si
.
id
);
cout
<<
" name: ("
<<
it
->
si
.
id
<<
") "
<<
it
->
fname
<<
endl
;
cout
<<
" iotype: "
<<
t
<<
endl
;
cout
<<
" text: "
<<
conf
->
oind
->
getTextName
(
it
->
si
.
id
)
<<
"
\n\n
"
;
if
(
it
->
si
.
node
==
DefaultObjectId
)
it
->
si
.
node
=
conf
->
getLocalNode
();
switch
(
t
)
{
case
UniversalIO
:
:
DigitalOutput
:
case
UniversalIO
:
:
DigitalInput
:
if
(
verb
)
cout
<<
" state: "
<<
ui
.
getState
(
it
->
si
.
id
,
it
->
si
.
node
)
<<
endl
;
else
cout
<<
ui
.
getState
(
it
->
si
.
id
,
it
->
si
.
node
);
break
;
case
UniversalIO
:
:
AnalogOutput
:
case
UniversalIO
:
:
AnalogInput
:
if
(
verb
)
cout
<<
" value: "
<<
ui
.
getValue
(
it
->
si
.
id
,
it
->
si
.
node
)
<<
endl
;
else
cout
<<
ui
.
getValue
(
it
->
si
.
id
,
it
->
si
.
node
);
case
UniversalIO
:
:
DO
:
case
UniversalIO
:
:
DI
:
case
UniversalIO
:
:
AO
:
case
UniversalIO
:
:
AI
:
cout
<<
" value: "
<<
ui
.
getValue
(
it
->
si
.
id
,
it
->
si
.
node
)
<<
endl
;
break
;
default:
if
(
verb
)
cerr
<<
"FAILED: Unknown 'iotype' for "
<<
it
->
fname
<<
endl
;
cerr
<<
"FAILED: Unknown 'iotype' for "
<<
it
->
fname
<<
endl
;
err
=
1
;
break
;
}
}
catch
(
Exception
&
ex
)
{
if
(
verb
)
cerr
<<
"(getValue): "
<<
ex
<<
endl
;
cerr
<<
"(getValue): "
<<
ex
<<
endl
;
err
=
1
;
}
}
...
...
@@ -640,8 +550,7 @@ int getCalibrate( const std::string& args, UniversalInterface &ui )
int
err
=
0
;
typedef
std
::
list
<
UniSetTypes
::
ParamSInfo
>
SList
;
SList
sl
=
UniSetTypes
::
getSInfoList
(
args
,
UniSetTypes
::
conf
);
if
(
verb
)
cout
<<
"====== getCalibrate ======"
<<
endl
;
cout
<<
"====== getCalibrate ======"
<<
endl
;
for
(
SList
::
iterator
it
=
sl
.
begin
();
it
!=
sl
.
end
();
it
++
)
{
if
(
it
->
si
.
node
==
DefaultObjectId
)
...
...
@@ -671,30 +580,21 @@ int getRawValue( const std::string& args, UniversalInterface &ui )
int
err
=
0
;
typedef
std
::
list
<
UniSetTypes
::
ParamSInfo
>
SList
;
SList
sl
=
UniSetTypes
::
getSInfoList
(
args
,
UniSetTypes
::
conf
);
if
(
verb
)
cout
<<
"====== getRawValue ======"
<<
endl
;
cout
<<
"====== getRawValue ======"
<<
endl
;
for
(
SList
::
iterator
it
=
sl
.
begin
();
it
!=
sl
.
end
();
it
++
)
{
if
(
it
->
si
.
node
==
DefaultObjectId
)
it
->
si
.
node
=
conf
->
getLocalNode
();
if
(
verb
)
{
cout
<<
" name: ("
<<
it
->
si
.
id
<<
") "
<<
it
->
fname
<<
endl
;
cout
<<
" text: "
<<
conf
->
oind
->
getTextName
(
it
->
si
.
id
)
<<
"
\n\n
"
;
}
cout
<<
" name: ("
<<
it
->
si
.
id
<<
") "
<<
it
->
fname
<<
endl
;
cout
<<
" text: "
<<
conf
->
oind
->
getTextName
(
it
->
si
.
id
)
<<
"
\n\n
"
;
try
{
if
(
verb
)
cout
<<
" value: "
<<
ui
.
getRawValue
(
it
->
si
)
<<
endl
;
else
cout
<<
" value: "
<<
ui
.
getRawValue
(
it
->
si
);
cout
<<
" value: "
<<
ui
.
getRawValue
(
it
->
si
)
<<
endl
;
}
catch
(
Exception
&
ex
)
{
if
(
verb
)
cerr
<<
"(getRawValue): "
<<
ex
<<
endl
;;
cerr
<<
"(getRawValue): "
<<
ex
<<
endl
;;
err
=
1
;
}
}
...
...
@@ -718,16 +618,14 @@ int logRotate( const string& arg, UniversalInterface &ui )
UniSetTypes
::
ObjectId
id
=
conf
->
oind
->
getIdByName
(
arg
);
if
(
id
==
DefaultObjectId
)
{
if
(
verb
)
cout
<<
"(logrotate): name='"
<<
arg
<<
"' не найдено!!!
\n
"
;
cout
<<
"(logrotate): name='"
<<
arg
<<
"' не найдено!!!
\n
"
;
return
1
;
}
SystemMessage
sm
(
SystemMessage
::
LogRotate
);
TransportMessage
tm
(
sm
.
transport_msg
());
ui
.
send
(
id
,
tm
);
if
(
verb
)
cout
<<
"
\n
Send 'LogRotate' to "
<<
arg
<<
" OK.
\n
"
;
cout
<<
"
\n
Send 'LogRotate' to "
<<
arg
<<
" OK.
\n
"
;
}
return
0
;
}
...
...
@@ -749,15 +647,13 @@ int configure( const string& arg, UniversalInterface &ui )
UniSetTypes
::
ObjectId
id
=
conf
->
oind
->
getIdByName
(
arg
);
if
(
id
==
DefaultObjectId
)
{
if
(
verb
)
cout
<<
"(configure): name='"
<<
arg
<<
"' не найдено!!!
\n
"
;
cout
<<
"(configure): name='"
<<
arg
<<
"' не найдено!!!
\n
"
;
return
1
;
}
SystemMessage
sm
(
SystemMessage
::
ReConfiguration
);
TransportMessage
tm
(
sm
.
transport_msg
());
ui
.
send
(
id
,
tm
);
if
(
verb
)
cout
<<
"
\n
Send 'ReConfigure' to "
<<
arg
<<
" OK.
\n
"
;
cout
<<
"
\n
Send 'ReConfigure' to "
<<
arg
<<
" OK.
\n
"
;
}
return
0
;
}
...
...
@@ -768,8 +664,7 @@ int oinfo( const string& arg, UniversalInterface &ui )
UniSetTypes
::
ObjectId
oid
(
uni_atoi
(
arg
));
if
(
oid
==
0
)
{
if
(
verb
)
cout
<<
"(oinfo): Не задан OID!"
<<
endl
;
cout
<<
"(oinfo): Не задан OID!"
<<
endl
;
return
1
;
}
...
...
@@ -777,8 +672,7 @@ int oinfo( const string& arg, UniversalInterface &ui )
UniSetObject_i_var
obj
=
UniSetObject_i
::
_narrow
(
o
);
if
(
CORBA
::
is_nil
(
obj
))
{
if
(
verb
)
cout
<<
"(oinfo): объект "
<<
oid
<<
" недоступен"
<<
endl
;
cout
<<
"(oinfo): объект "
<<
oid
<<
" недоступен"
<<
endl
;
}
else
{
...
...
Utilities/SImitator/main.cc
View file @
08e088e0
...
...
@@ -20,7 +20,7 @@ void help_print()
struct
ExtInfo
:
public
UniSetTypes
::
ParamSInfo
{
UniversalIO
::
IOType
s
iotype
;
UniversalIO
::
IOType
iotype
;
};
// -----------------------------------------------------------------------------
int
main
(
int
argc
,
char
**
argv
)
...
...
@@ -57,8 +57,8 @@ int main( int argc, char **argv )
std
::
list
<
ExtInfo
>
l
;
for
(
std
::
list
<
UniSetTypes
::
ParamSInfo
>::
iterator
it
=
lst
.
begin
();
it
!=
lst
.
end
();
++
it
)
{
UniversalIO
::
IOType
s
t
=
conf
->
getIOType
(
it
->
si
.
id
);
if
(
t
!=
UniversalIO
::
A
nalogInput
&&
t
!=
UniversalIO
::
AnalogOutput
)
UniversalIO
::
IOType
t
=
conf
->
getIOType
(
it
->
si
.
id
);
if
(
t
!=
UniversalIO
::
A
I
&&
t
!=
UniversalIO
::
AO
)
{
cerr
<<
endl
<<
"Неверный типа датчика '"
<<
t
<<
"' для id='"
<<
it
->
fname
<<
"'. Тип должен быть AI или AO."
<<
endl
<<
endl
;
return
1
;
...
...
@@ -122,9 +122,6 @@ int main( int argc, char **argv )
{
try
{
if
(
it
->
iotype
==
UniversalIO
::
AnalogInput
)
ui
.
saveValue
(
it
->
si
,
j
,
UniversalIO
::
AnalogInput
,
DefaultObjectId
);
else
ui
.
setValue
(
it
->
si
,
j
,
DefaultObjectId
);
}
catch
(
Exception
&
ex
)
...
...
@@ -150,9 +147,6 @@ int main( int argc, char **argv )
{
try
{
if
(
it
->
iotype
==
UniversalIO
::
AnalogInput
)
ui
.
saveValue
(
it
->
si
,
i
,
UniversalIO
::
AnalogInput
,
DefaultObjectId
);
else
ui
.
setValue
(
it
->
si
,
i
,
DefaultObjectId
);
}
catch
(
Exception
&
ex
)
...
...
conf/libuniset.spec
View file @
08e088e0
...
...
@@ -346,7 +346,7 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
- remove deprecated services: InfoServer,TimeService,SystemGuard
- remove deprecated intefaces: MessageInterface
- remove deprecated messages: AlarmMessage, InfoMessage, DBMessage
- remove 'state' from SensorMessage
* Tue Dec 10 2013 Pavel Vainerman <pv@altlinux.ru> 1.7-alt3
- add RRDServer
...
...
extensions/IOControl/IOControl.cc
View file @
08e088e0
...
...
@@ -470,13 +470,13 @@ void IOControl::ioread( IOInfo* it )
return
;
if
(
testmode
==
tmOnlyInputs
&&
it
->
stype
!=
UniversalIO
::
A
nalogInput
&&
it
->
stype
!=
UniversalIO
::
D
igitalInput
)
it
->
stype
!=
UniversalIO
::
A
I
&&
it
->
stype
!=
UniversalIO
::
D
I
)
return
;
if
(
testmode
==
tmOnlyOutputs
&&
it
->
stype
!=
UniversalIO
::
A
nalogOutput
&&
it
->
stype
!=
UniversalIO
::
D
igitalOutput
)
it
->
stype
!=
UniversalIO
::
A
O
&&
it
->
stype
!=
UniversalIO
::
D
O
)
return
;
}
...
...
@@ -505,7 +505,7 @@ void IOControl::ioread( IOInfo* it )
try
{
if
(
it
->
stype
==
UniversalIO
::
A
nalogInput
)
if
(
it
->
stype
==
UniversalIO
::
A
I
)
{
int
val
=
card
->
getAnalogChannel
(
it
->
subdev
,
it
->
channel
,
it
->
range
,
it
->
aref
);
...
...
@@ -521,7 +521,7 @@ void IOControl::ioread( IOInfo* it )
IOBase
::
processingAsAI
(
ib
,
val
,
shm
,
force
);
}
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalInput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
I
)
{
bool
set
=
card
->
getDigitalChannel
(
it
->
subdev
,
it
->
channel
);
/*
...
...
@@ -548,7 +548,7 @@ void IOControl::ioread( IOInfo* it )
if
(
it
->
si
.
id
==
testLamp_S
)
isTestLamp
=
set
;
}
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
O
)
{
if
(
!
it
->
lamp
)
{
...
...
@@ -640,7 +640,7 @@ void IOControl::ioread( IOInfo* it )
}
}
}
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
O
)
{
bool
set
=
IOBase
::
processingAsDO
(
ib
,
shm
,
force_out
);
if
(
!
it
->
lamp
||
(
it
->
lamp
&&
!
isTestLamp
)
)
...
...
@@ -768,7 +768,7 @@ bool IOControl::initIOItem( UniXML_iterator& it )
inf
.
aref
=
0
;
inf
.
range
=
0
;
if
(
inf
.
stype
==
UniversalIO
::
A
nalogInput
||
inf
.
stype
==
UniversalIO
::
AnalogOutput
)
if
(
inf
.
stype
==
UniversalIO
::
A
I
||
inf
.
stype
==
UniversalIO
::
AO
)
{
inf
.
range
=
it
.
getIntProp
(
"range"
);
if
(
inf
.
range
<
0
||
inf
.
range
>
3
)
...
...
@@ -851,12 +851,12 @@ void IOControl::sigterm( int signo )
if
(
it
->
subdev
==
DefaultSubdev
||
it
->
safety
==
NoSafety
)
continue
;
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
||
it
->
lamp
)
if
(
it
->
stype
==
UniversalIO
::
D
O
||
it
->
lamp
)
{
bool
set
=
it
->
invert
?
!
((
bool
)
it
->
safety
)
:
(
bool
)
it
->
safety
;
card
->
setDigitalChannel
(
it
->
subdev
,
it
->
channel
,
set
);
}
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
O
)
{
card
->
setAnalogChannel
(
it
->
subdev
,
it
->
channel
,
it
->
safety
,
it
->
range
,
it
->
aref
);
}
...
...
@@ -892,9 +892,9 @@ void IOControl::initOutputs()
{
if
(
it
->
lamp
)
card
->
setDigitalChannel
(
it
->
subdev
,
it
->
channel
,(
bool
)
it
->
defval
);
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
O
)
card
->
setDigitalChannel
(
it
->
subdev
,
it
->
channel
,(
bool
)
it
->
defval
);
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
O
)
card
->
setAnalogChannel
(
it
->
subdev
,
it
->
channel
,
it
->
defval
,
it
->
range
,
it
->
aref
);
}
catch
(
Exception
&
ex
)
...
...
@@ -925,16 +925,16 @@ void IOControl::initIOCard()
// или "лампочки" (т.к. они фиктивные аналоговые датчики)
if
(
it
->
lamp
)
card
->
configureChannel
(
it
->
subdev
,
it
->
channel
,
ComediInterface
::
DO
);
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalInput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
I
)
card
->
configureChannel
(
it
->
subdev
,
it
->
channel
,
ComediInterface
::
DI
);
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
O
)
card
->
configureChannel
(
it
->
subdev
,
it
->
channel
,
ComediInterface
::
DO
);
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogInput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
I
)
{
card
->
configureChannel
(
it
->
subdev
,
it
->
channel
,
ComediInterface
::
AI
);
it
->
df
.
init
(
card
->
getAnalogChannel
(
it
->
subdev
,
it
->
channel
,
it
->
range
,
it
->
aref
)
);
}
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
O
)
card
->
configureChannel
(
it
->
subdev
,
it
->
channel
,
ComediInterface
::
AO
);
}
...
...
@@ -1041,12 +1041,12 @@ void IOControl::check_testmode()
if
(
it
->
subdev
==
DefaultSubdev
||
it
->
safety
==
NoSafety
)
continue
;
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
||
it
->
lamp
)
if
(
it
->
stype
==
UniversalIO
::
D
O
||
it
->
lamp
)
{
bool
set
=
it
->
invert
?
!
((
bool
)
it
->
safety
)
:
(
bool
)
it
->
safety
;
card
->
setDigitalChannel
(
it
->
subdev
,
it
->
channel
,
set
);
}
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
O
)
{
card
->
setAnalogChannel
(
it
->
subdev
,
it
->
channel
,
it
->
safety
,
it
->
range
,
it
->
aref
);
}
...
...
@@ -1095,7 +1095,7 @@ void IOControl::check_testlamp()
if
(
!
it
->
lamp
||
it
->
no_testlamp
)
continue
;
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
if
(
it
->
stype
==
UniversalIO
::
A
O
)
{
if
(
isTestLamp
)
{
...
...
@@ -1116,7 +1116,7 @@ void IOControl::check_testlamp()
delBlink
(
&
(
*
it
),
lstBlink3
);
}
}
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
O
)
{
if
(
isTestLamp
)
addBlink
(
&
(
*
it
),
lstBlink
);
...
...
@@ -1371,8 +1371,8 @@ void IOControl::askSensors( UniversalIO::UIOCommand cmd )
if
(
card
==
NULL
||
it
->
subdev
==
DefaultSubdev
||
it
->
channel
==
DefaultChannel
)
continue
;
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
||
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
it
->
stype
==
UniversalIO
::
A
O
||
it
->
stype
==
UniversalIO
::
D
O
)
{
try
{
...
...
@@ -1420,7 +1420,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm )
<<
endl
;
}
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
if
(
it
->
stype
==
UniversalIO
::
A
O
)
{
long
prev_val
=
0
;
long
cur_val
=
0
;
...
...
@@ -1513,7 +1513,7 @@ void IOControl::sensorInfo( UniSetTypes::SensorMessage* sm )
}
}
}
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
O
)
{
if
(
unideb
.
debugging
(
Debug
::
LEVEL1
)
)
{
...
...
extensions/IOControl/IOControl.h
View file @
08e088e0
...
...
@@ -359,7 +359,7 @@ class IOControl:
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
IOController
::
A
IOStateList
::
iterator
aitHeartBeat
;
IOController
::
IOStateList
::
iterator
aitHeartBeat
;
bool
force
;
/*!< флаг, означающий, что надо сохранять в SM, даже если значение не менялось */
bool
force_out
;
/*!< флаг, включающий принудительное чтения выходов */
...
...
@@ -376,7 +376,7 @@ class IOControl:
UniSetTypes
::
ObjectId
testMode_as
;
IOController
::
A
IOStateList
::
iterator
aitTestMode
;
IOController
::
IOStateList
::
iterator
aitTestMode
;
long
testmode
;
long
prev_testmode
;
...
...
extensions/LogicProcessor/LProcessor.cc
View file @
08e088e0
...
...
@@ -145,11 +145,11 @@ void LProcessor::setOuts()
{
switch
(
it
->
iotype
)
{
case
UniversalIO
:
:
D
igitalInput
:
case
UniversalIO
:
:
D
I
:
ui
.
saveState
(
it
->
sid
,
it
->
lnk
->
from
->
getOut
(),
it
->
iotype
);
break
;
case
UniversalIO
:
:
D
igitalOutput
:
case
UniversalIO
:
:
D
O
:
ui
.
setState
(
it
->
sid
,
it
->
lnk
->
from
->
getOut
());
break
;
...
...
extensions/LogicProcessor/LProcessor.h
View file @
08e088e0
...
...
@@ -112,7 +112,7 @@ class LProcessor
struct
EXTInfo
{
UniSetTypes
::
ObjectId
sid
;
UniversalIO
::
IOType
s
iotype
;
UniversalIO
::
IOType
iotype
;
bool
state
;
const
Schema
::
EXTLink
*
lnk
;
};
...
...
@@ -120,7 +120,7 @@ class LProcessor
struct
EXTOutInfo
{
UniSetTypes
::
ObjectId
sid
;
UniversalIO
::
IOType
s
iotype
;
UniversalIO
::
IOType
iotype
;
const
Schema
::
EXTOut
*
lnk
;
};
...
...
extensions/LogicProcessor/PassiveLProcessor.cc
View file @
08e088e0
...
...
@@ -155,11 +155,11 @@ void PassiveLProcessor::setOuts()
{
switch
(
it
->
iotype
)
{
case
UniversalIO
:
:
D
igitalInput
:
case
UniversalIO
:
:
D
I
:
shm
->
saveLocalState
(
it
->
sid
,
it
->
lnk
->
from
->
getOut
(),
it
->
iotype
);
break
;
case
UniversalIO
:
:
D
igitalOutput
:
case
UniversalIO
:
:
D
O
:
shm
->
setState
(
it
->
sid
,
it
->
lnk
->
from
->
getOut
());
break
;
...
...
@@ -187,11 +187,11 @@ void PassiveLProcessor::sigterm( int signo )
{
switch
(
it
->
iotype
)
{
case
UniversalIO
:
:
D
igitalInput
:
case
UniversalIO
:
:
D
I
:
shm
->
saveLocalState
(
it
->
sid
,
false
,
it
->
iotype
);
break
;
case
UniversalIO
:
:
D
igitalOutput
:
case
UniversalIO
:
:
D
O
:
shm
->
setState
(
it
->
sid
,
false
);
break
;
...
...
extensions/LogicProcessor/PassiveLProcessor.h
View file @
08e088e0
...
...
@@ -51,7 +51,7 @@ class PassiveLProcessor:
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
IOController
::
A
IOStateList
::
iterator
aitHeartBeat
;
IOController
::
IOStateList
::
iterator
aitHeartBeat
;
UniSetTypes
::
uniset_mutex
mutex_start
;
};
// ---------------------------------------------------------------------------
...
...
extensions/ModbusMaster/MBExchange.cc
View file @
08e088e0
...
...
@@ -669,8 +669,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
if
(
p
->
rnum
<=
1
)
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
IOBase
::
processingAsDI
(
p
,
data
[
0
],
shm
,
force
);
}
...
...
@@ -687,8 +687,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
}
else
if
(
p
->
vType
==
VTypes
::
vtSigned
)
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
IOBase
::
processingAsDI
(
p
,
data
[
0
],
shm
,
force
);
}
...
...
@@ -699,8 +699,8 @@ bool MBExchange::initSMValue( ModbusRTU::ModbusData* data, int count, RSProperty
}
else
if
(
p
->
vType
==
VTypes
::
vtUnsigned
)
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
IOBase
::
processingAsDI
(
p
,
data
[
0
],
shm
,
force
);
}
...
...
@@ -1140,8 +1140,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
if
(
r
->
mb_initOK
)
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
r
->
mbval
=
IOBase
::
processingAsDO
(
p
,
shm
,
force_out
);
}
...
...
@@ -1153,8 +1153,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
}
else
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
IOBase
::
processingAsDI
(
p
,
r
->
mbval
,
shm
,
force
);
}
...
...
@@ -1175,8 +1175,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
if
(
r
->
mb_initOK
)
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
r
->
mbval
=
(
signed
short
)
IOBase
::
processingAsDO
(
p
,
shm
,
force_out
);
}
...
...
@@ -1188,8 +1188,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
}
else
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
IOBase
::
processingAsDI
(
p
,
r
->
mbval
,
shm
,
force
);
}
...
...
@@ -1206,8 +1206,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
{
if
(
r
->
mb_initOK
)
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
r
->
mbval
=
(
unsigned
short
)
IOBase
::
processingAsDO
(
p
,
shm
,
force_out
);
}
...
...
@@ -1219,8 +1219,8 @@ void MBExchange::updateRSProperty( RSProperty* p, bool write_only )
}
else
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
IOBase
::
processingAsDI
(
p
,
r
->
mbval
,
shm
,
force
);
}
...
...
@@ -1683,12 +1683,12 @@ void MBExchange::updateRTU188( RegMap::iterator& rit )
{
try
{
if
(
it
->
stype
==
UniversalIO
::
D
igitalInput
)
if
(
it
->
stype
==
UniversalIO
::
D
I
)
{
bool
set
=
r
->
dev
->
rtu
->
getState
(
r
->
rtuJack
,
r
->
rtuChan
,
it
->
stype
);
IOBase
::
processingAsDI
(
&
(
*
it
),
set
,
shm
,
force
);
}
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogInput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
I
)
{
long
val
=
r
->
dev
->
rtu
->
getInt
(
r
->
rtuJack
,
r
->
rtuChan
,
it
->
stype
);
IOBase
::
processingAsAI
(
&
(
*
it
),
val
,
shm
,
force
);
...
...
@@ -1870,8 +1870,8 @@ bool MBExchange::initRSProperty( RSProperty& p, UniXML_iterator& it )
}
if
(
p
.
nbit
>
0
&&
(
p
.
stype
==
UniversalIO
::
A
nalogInput
||
p
.
stype
==
UniversalIO
::
A
nalogOutput
)
)
(
p
.
stype
==
UniversalIO
::
A
I
||
p
.
stype
==
UniversalIO
::
A
O
)
)
{
dlog
[
Debug
::
WARN
]
<<
"(initRSProperty): (ignore) uncorrect param`s nbit>1 ("
<<
p
.
nbit
<<
")"
<<
" but iotype="
<<
p
.
stype
<<
" for "
<<
it
.
getProp
(
"name"
)
<<
endl
;
...
...
@@ -1935,7 +1935,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
if
(
!
initRTU188item
(
it
,
r
)
)
return
false
;
UniversalIO
::
IOType
s
t
=
UniSetTypes
::
getIOType
(
it
.
getProp
(
"iotype"
));
UniversalIO
::
IOType
t
=
UniSetTypes
::
getIOType
(
it
.
getProp
(
"iotype"
));
r
->
mbreg
=
RTUStorage
::
getRegister
(
r
->
rtuJack
,
r
->
rtuChan
,
t
);
r
->
mbfunc
=
RTUStorage
::
getFunction
(
r
->
rtuJack
,
r
->
rtuChan
,
t
);
...
...
@@ -2324,7 +2324,7 @@ std::ostream& operator<<( std::ostream& os, const MBExchange::RSProperty& p )
<<
" safety="
<<
p
.
safety
<<
" invert="
<<
p
.
invert
;
if
(
p
.
stype
==
UniversalIO
::
A
nalogInput
||
p
.
stype
==
UniversalIO
::
AnalogOutput
)
if
(
p
.
stype
==
UniversalIO
::
A
I
||
p
.
stype
==
UniversalIO
::
AO
)
{
os
<<
p
.
cal
<<
" cdiagram="
<<
(
p
.
cdiagram
?
"yes"
:
"no"
);
...
...
@@ -2389,8 +2389,8 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
return
false
;
}
UniversalIO
::
IOType
s
m_iotype
=
conf
->
getIOType
(
d
->
second
->
mode_id
);
if
(
m_iotype
!=
UniversalIO
::
A
nalogInput
)
UniversalIO
::
IOType
m_iotype
=
conf
->
getIOType
(
d
->
second
->
mode_id
);
if
(
m_iotype
!=
UniversalIO
::
A
I
)
{
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(initDeviceInfo): modeSensor='"
<<
mod
<<
"' must be 'AI'"
<<
endl
;
return
false
;
...
...
extensions/ModbusMaster/MBExchange.h
View file @
08e088e0
...
...
@@ -170,7 +170,7 @@ class MBExchange:
bool
resp_init
;
bool
ask_every_reg
;
UniSetTypes
::
ObjectId
mode_id
;
IOController
::
A
IOStateList
::
iterator
mode_ait
;
IOController
::
IOStateList
::
iterator
mode_ait
;
long
mode
;
// режим работы с устройством (см. ExchangeMode)
// return TRUE if state changed
...
...
@@ -292,11 +292,11 @@ class MBExchange:
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
IOController
::
A
IOStateList
::
iterator
aitHeartBeat
;
IOController
::
IOStateList
::
iterator
aitHeartBeat
;
UniSetTypes
::
ObjectId
test_id
;
UniSetTypes
::
ObjectId
sidExchangeMode
;
/*!< иденидентификатор для датчика режима работы */
IOController
::
A
IOStateList
::
iterator
aitExchangeMode
;
IOController
::
IOStateList
::
iterator
aitExchangeMode
;
long
exchangeMode
;
/*!< режим работы см. ExchangeMode */
UniSetTypes
::
uniset_rwmutex
actMutex
;
...
...
extensions/ModbusMaster/RTUStorage.cc
View file @
08e088e0
...
...
@@ -165,14 +165,14 @@ void RTUStorage::poll( ModbusRTUMaster* mb )
}
}
// -----------------------------------------------------------------------------
long
RTUStorage
::
getInt
(
RTUJack
jack
,
unsigned
short
int
chan
,
UniversalIO
::
IOType
s
t
)
long
RTUStorage
::
getInt
(
RTUJack
jack
,
unsigned
short
int
chan
,
UniversalIO
::
IOType
t
)
{
return
lroundf
(
getFloat
(
jack
,
chan
,
t
)
);
}
// -----------------------------------------------------------------------------
float
RTUStorage
::
getFloat
(
RTUJack
jack
,
unsigned
short
int
chan
,
UniversalIO
::
IOType
s
t
)
float
RTUStorage
::
getFloat
(
RTUJack
jack
,
unsigned
short
int
chan
,
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
A
nalogInput
)
if
(
t
==
UniversalIO
::
A
I
)
{
switch
(
jack
)
{
...
...
@@ -194,7 +194,7 @@ float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO::
return
0
;
}
if
(
t
==
UniversalIO
::
A
nalogOutput
)
if
(
t
==
UniversalIO
::
A
O
)
{
switch
(
jack
)
{
...
...
@@ -219,9 +219,9 @@ float RTUStorage::getFloat( RTUJack jack, unsigned short int chan, UniversalIO::
return
0
;
}
// -----------------------------------------------------------------------------
bool
RTUStorage
::
getState
(
RTUJack
jack
,
unsigned
short
int
chan
,
UniversalIO
::
IOType
s
t
)
bool
RTUStorage
::
getState
(
RTUJack
jack
,
unsigned
short
int
chan
,
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
D
igitalInput
)
if
(
t
==
UniversalIO
::
D
I
)
{
switch
(
jack
)
{
...
...
@@ -243,7 +243,7 @@ bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::I
return
false
;
}
if
(
t
==
UniversalIO
::
D
igitalOutput
)
if
(
t
==
UniversalIO
::
D
O
)
{
switch
(
jack
)
{
...
...
@@ -264,9 +264,9 @@ bool RTUStorage::getState( RTUJack jack, unsigned short int chan, UniversalIO::I
return
false
;
}
// -----------------------------------------------------------------------------
ModbusRTU
::
ModbusData
RTUStorage
::
getRegister
(
RTUJack
jack
,
unsigned
short
chan
,
UniversalIO
::
IOType
s
t
)
ModbusRTU
::
ModbusData
RTUStorage
::
getRegister
(
RTUJack
jack
,
unsigned
short
chan
,
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
A
nalogInput
)
if
(
t
==
UniversalIO
::
A
I
)
{
switch
(
jack
)
{
...
...
@@ -288,7 +288,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return
-
1
;
}
if
(
t
==
UniversalIO
::
A
nalogOutput
)
if
(
t
==
UniversalIO
::
A
O
)
{
switch
(
jack
)
{
...
...
@@ -310,7 +310,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return
-
1
;
}
if
(
t
==
UniversalIO
::
D
igitalInput
)
if
(
t
==
UniversalIO
::
D
I
)
{
switch
(
jack
)
{
...
...
@@ -332,7 +332,7 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return
-
1
;
}
if
(
t
==
UniversalIO
::
D
igitalOutput
)
if
(
t
==
UniversalIO
::
D
O
)
{
switch
(
jack
)
{
...
...
@@ -353,9 +353,9 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return
-
1
;
}
// -----------------------------------------------------------------------------
ModbusRTU
::
SlaveFunctionCode
RTUStorage
::
getFunction
(
RTUJack
jack
,
unsigned
short
chan
,
UniversalIO
::
IOType
s
t
)
ModbusRTU
::
SlaveFunctionCode
RTUStorage
::
getFunction
(
RTUJack
jack
,
unsigned
short
chan
,
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
A
nalogInput
)
if
(
t
==
UniversalIO
::
A
I
)
{
switch
(
jack
)
{
...
...
@@ -373,7 +373,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return
ModbusRTU
::
fnUnknown
;
}
if
(
t
==
UniversalIO
::
A
nalogOutput
)
if
(
t
==
UniversalIO
::
A
O
)
{
switch
(
jack
)
{
...
...
@@ -393,7 +393,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return
ModbusRTU
::
fnUnknown
;
}
if
(
t
==
UniversalIO
::
D
igitalInput
)
if
(
t
==
UniversalIO
::
D
I
)
{
switch
(
jack
)
{
...
...
@@ -411,7 +411,7 @@ ModbusRTU::SlaveFunctionCode RTUStorage::getFunction( RTUJack jack, unsigned sho
return
ModbusRTU
::
fnUnknown
;
}
if
(
t
==
UniversalIO
::
D
igitalOutput
)
if
(
t
==
UniversalIO
::
D
O
)
{
switch
(
jack
)
{
...
...
extensions/ModbusMaster/RTUStorage.h
View file @
08e088e0
...
...
@@ -41,13 +41,13 @@ class RTUStorage
static
RTUJack
s2j
(
const
std
::
string
&
jack
);
static
std
::
string
j2s
(
RTUJack
j
);
long
getInt
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
s
t
);
float
getFloat
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
s
t
);
bool
getState
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
s
t
);
long
getInt
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
t
);
float
getFloat
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
t
);
bool
getState
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
t
);
static
ModbusRTU
::
ModbusData
getRegister
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
s
t
);
static
ModbusRTU
::
ModbusData
getRegister
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
t
);
static
ModbusRTU
::
SlaveFunctionCode
getFunction
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
s
t
);
static
ModbusRTU
::
SlaveFunctionCode
getFunction
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOType
t
);
// ДОДЕЛАТЬ: setState, setValue
void
print
();
...
...
extensions/ModbusMaster/rtustate.cc
View file @
08e088e0
...
...
@@ -105,9 +105,9 @@ int main( int argc, char **argv )
cout
<<
rtu
<<
endl
;
for
(
int
i
=
0
;
i
<
24
;
i
++
)
cout
<<
"UNIO1 AI"
<<
i
<<
": "
<<
rtu
.
getFloat
(
RTUStorage
::
nJ1
,
i
,
UniversalIO
::
A
nalogInput
)
<<
endl
;
cout
<<
"UNIO1 AI"
<<
i
<<
": "
<<
rtu
.
getFloat
(
RTUStorage
::
nJ1
,
i
,
UniversalIO
::
A
I
)
<<
endl
;
for
(
int
i
=
0
;
i
<
24
;
i
++
)
cout
<<
"UNIO1 DI"
<<
i
<<
": "
<<
rtu
.
getState
(
RTUStorage
::
nJ1
,
i
,
UniversalIO
::
D
igitalInput
)
<<
endl
;
cout
<<
"UNIO1 DI"
<<
i
<<
": "
<<
rtu
.
getState
(
RTUStorage
::
nJ1
,
i
,
UniversalIO
::
D
I
)
<<
endl
;
return
0
;
}
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
08e088e0
...
...
@@ -683,7 +683,7 @@ void MBSlave::askSensors( UniversalIO::UIOCommand cmd )
{
IOProperty
*
p
(
&
it
->
second
);
// if( p->stype != UniversalIO::D
igitalOutput && p->stype != UniversalIO::AnalogOutput
)
// if( p->stype != UniversalIO::D
O && p->stype != UniversalIO::AO
)
// continue;
// if( p->safety == NoSafetyState )
...
...
@@ -708,14 +708,14 @@ void MBSlave::sensorInfo( UniSetTypes::SensorMessage* sm )
if
(
it
->
second
.
si
.
id
==
sm
->
id
)
{
IOProperty
*
p
(
&
it
->
second
);
if
(
p
->
stype
==
UniversalIO
::
D
igitalOutput
||
p
->
stype
==
UniversalIO
::
D
igitalInput
)
if
(
p
->
stype
==
UniversalIO
::
D
O
||
p
->
stype
==
UniversalIO
::
D
I
)
{
uniset_rwmutex_wrlock
lock
(
p
->
val_lock
);
p
->
value
=
sm
->
state
?
1
:
0
;
}
else
if
(
p
->
stype
==
UniversalIO
::
A
nalogOutput
||
p
->
stype
==
UniversalIO
::
A
nalogInput
)
else
if
(
p
->
stype
==
UniversalIO
::
A
O
||
p
->
stype
==
UniversalIO
::
A
I
)
{
uniset_rwmutex_wrlock
lock
(
p
->
val_lock
);
p
->
value
=
sm
->
value
;
...
...
@@ -963,7 +963,7 @@ std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p )
<<
" safety="
<<
p
.
safety
<<
" invert="
<<
p
.
invert
;
if
(
p
.
stype
==
UniversalIO
::
A
nalogInput
||
p
.
stype
==
UniversalIO
::
AnalogOutput
)
if
(
p
.
stype
==
UniversalIO
::
A
I
||
p
.
stype
==
UniversalIO
::
AO
)
{
os
<<
p
.
cal
<<
" cdiagram="
<<
(
p
.
cdiagram
?
"yes"
:
"no"
);
...
...
@@ -1090,8 +1090,8 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
if
(
p
->
vtype
==
VTypes
::
vtUnknown
)
{
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
IOBase
::
processingAsDI
(
p
,
mbval
,
shm
,
force
);
}
...
...
@@ -1147,14 +1147,14 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
*/
/*
if( p->stype == UniversalIO::D
igitalInput
||
p->stype == UniversalIO::D
igitalOutput
)
if( p->stype == UniversalIO::D
I
||
p->stype == UniversalIO::D
O
)
{
bool set = val ? true : false;
IOBase::processingAsDI(p,set,shm,force);
}
else if( p->stype == UniversalIO::A
nalogInput
||
p->stype == UniversalIO::A
nalogOutput
)
else if( p->stype == UniversalIO::A
I
||
p->stype == UniversalIO::A
O
)
{
IOBase::processingAsAI( p, val, shm, force );
}
...
...
@@ -1274,13 +1274,13 @@ ModbusRTU::mbErrCode MBSlave::real_read_it( IOMap::iterator& it, ModbusRTU::Modb
if
(
p
->
amode
==
MBSlave
::
amWO
)
return
ModbusRTU
::
erBadDataAddress
;
if
(
p
->
stype
==
UniversalIO
::
D
igitalInput
||
p
->
stype
==
UniversalIO
::
D
igitalOutput
)
if
(
p
->
stype
==
UniversalIO
::
D
I
||
p
->
stype
==
UniversalIO
::
D
O
)
{
val
=
IOBase
::
processingAsDO
(
p
,
shm
,
force
)
?
1
:
0
;
}
else
if
(
p
->
stype
==
UniversalIO
::
A
nalogInput
||
p
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
p
->
stype
==
UniversalIO
::
A
I
||
p
->
stype
==
UniversalIO
::
A
O
)
{
if
(
p
->
vtype
==
VTypes
::
vtUnknown
)
{
...
...
extensions/ModbusSlave/MBSlave.h
View file @
08e088e0
...
...
@@ -174,10 +174,10 @@ class MBSlave:
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
IOController
::
A
IOStateList
::
iterator
aitHeartBeat
;
IOController
::
IOStateList
::
iterator
aitHeartBeat
;
UniSetTypes
::
ObjectId
test_id
;
IOController
::
A
IOStateList
::
iterator
aitAskCount
;
IOController
::
IOStateList
::
iterator
aitAskCount
;
UniSetTypes
::
ObjectId
askcount_id
;
IOController
::
DIOStateList
::
iterator
ditRespond
;
...
...
extensions/SMDBServer/SMDBServer.h
View file @
08e088e0
...
...
@@ -38,7 +38,7 @@ class SMDBServer:
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
IOController
::
A
IOStateList
::
iterator
aitHeartBeat
;
IOController
::
IOStateList
::
iterator
aitHeartBeat
;
UniSetTypes
::
ObjectId
test_id
;
std
::
string
db_locale
;
...
...
extensions/SharedMemory/SharedMemory.cc
View file @
08e088e0
...
...
@@ -41,7 +41,7 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
activated
(
false
),
workready
(
false
),
dblogging
(
false
),
iotypePulsar
(
UniversalIO
::
D
igitalInput
),
iotypePulsar
(
UniversalIO
::
D
I
),
msecPulsar
(
0
)
{
mutex_start
.
setName
(
myname
+
"_mutex_start"
);
...
...
@@ -128,7 +128,7 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
{
iotypePulsar
=
UniSetTypes
::
getIOType
(
t
);
if
(
iotypePulsar
==
UniversalIO
::
UnknownIOType
||
iotypePulsar
==
UniversalIO
::
A
nalogInput
||
iotypePulsar
==
UniversalIO
::
AnalogOutput
)
iotypePulsar
==
UniversalIO
::
A
I
||
iotypePulsar
==
UniversalIO
::
AO
)
{
ostringstream
err
;
err
<<
myname
<<
": Invalid iotype '"
<<
t
<<
"' for pulsar. Must be 'DI' or 'DO'"
;
...
...
@@ -239,9 +239,9 @@ void SharedMemory::timerInfo( TimerMessage *tm )
{
bool
st
=
localGetState
(
ditPulsar
,
siPulsar
);
st
^=
true
;
if
(
iotypePulsar
==
UniversalIO
::
D
igitalInput
)
if
(
iotypePulsar
==
UniversalIO
::
D
I
)
localSaveState
(
ditPulsar
,
siPulsar
,
st
,
getId
());
else
if
(
iotypePulsar
==
UniversalIO
::
D
igitalOutput
)
else
if
(
iotypePulsar
==
UniversalIO
::
D
O
)
localSetState
(
ditPulsar
,
siPulsar
,
st
,
getId
());
}
}
...
...
@@ -336,7 +336,7 @@ bool SharedMemory::activateObject()
// инициализируем указатели
for
(
HeartBeatList
::
iterator
it
=
hlist
.
begin
();
it
!=
hlist
.
end
();
++
it
)
{
it
->
ait
=
my
a
ioEnd
();
it
->
ait
=
myioEnd
();
it
->
dit
=
mydioEnd
();
}
...
...
@@ -348,7 +348,7 @@ bool SharedMemory::activateObject()
// cerr << "history for id=" << it->id << " count=" << it->hlst.size() << endl;
for
(
HistoryList
::
iterator
hit
=
it
->
hlst
.
begin
();
hit
!=
it
->
hlst
.
end
();
++
hit
)
{
hit
->
ait
=
my
a
ioEnd
();
hit
->
ait
=
myioEnd
();
hit
->
dit
=
mydioEnd
();
}
}
...
...
@@ -750,7 +750,7 @@ void SharedMemory::saveHistory()
{
for
(
HistoryList
::
iterator
hit
=
it
->
hlst
.
begin
();
hit
!=
it
->
hlst
.
end
();
++
hit
)
{
if
(
hit
->
ait
!=
my
a
ioEnd
()
)
if
(
hit
->
ait
!=
myioEnd
()
)
hit
->
add
(
localGetValue
(
hit
->
ait
,
hit
->
ait
->
second
.
si
),
it
->
size
);
else
if
(
hit
->
dit
!=
mydioEnd
()
)
hit
->
add
(
localGetState
(
hit
->
dit
,
hit
->
dit
->
second
.
si
),
it
->
size
);
...
...
@@ -794,7 +794,25 @@ void SharedMemory::updateHistory( UniSetTypes::SensorMessage* sm )
for
(
History
::
iterator
it
=
hist
.
begin
();
it
!=
hist
.
end
();
++
it
)
{
if
(
sm
->
id
==
it
->
fuse_id
)
History
::
iterator
it
(
(
*
it1
)
);
if
(
sm
->
sensor_type
==
UniversalIO
::
DI
||
sm
->
sensor_type
==
UniversalIO
::
DO
)
{
bool
st
=
it
->
fuse_invert
?
!
sm
->
state
:
sm
->
state
;
if
(
st
)
{
if
(
dlog
.
debugging
(
Debug
::
INFO
)
)
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(updateHistory): HISTORY EVENT for "
<<
(
*
it
)
<<
endl
;
it
->
fuse_sec
=
sm
->
sm_tv_sec
;
it
->
fuse_usec
=
sm
->
sm_tv_usec
;
m_historySignal
.
emit
(
&
(
*
it
)
);
}
}
else
if
(
sm
->
sensor_type
==
UniversalIO
::
AI
||
sm
->
sensor_type
==
UniversalIO
::
AO
)
>>>>>>>
Первый
этап
переделок
в
связи
с
переходом
на
getValue
/
setValue
{
if
(
sm
->
sensor_type
==
UniversalIO
::
DigitalInput
||
sm
->
sensor_type
==
UniversalIO
::
DigitalOutput
)
...
...
extensions/SharedMemory/SharedMemory.h
View file @
08e088e0
...
...
@@ -283,7 +283,7 @@ class SharedMemory:
UniSetTypes
::
ObjectId
id
;
HBuffer
buf
;
A
IOStateList
::
iterator
ait
;
IOStateList
::
iterator
ait
;
DIOStateList
::
iterator
dit
;
void
add
(
long
val
,
size_t
size
)
...
...
@@ -375,7 +375,7 @@ class SharedMemory:
UniSetTypes
::
ObjectId
a_sid
;
// аналоговый счётчик
UniSetTypes
::
ObjectId
d_sid
;
// дискретный датчик состояния процесса
A
IOStateList
::
iterator
ait
;
IOStateList
::
iterator
ait
;
DIOStateList
::
iterator
dit
;
int
reboot_msec
;
/*!< Время в течение которого, процесс обязан подтвердить своё существование,
...
...
@@ -432,7 +432,7 @@ class SharedMemory:
DIOStateList
::
iterator
ditPulsar
;
IOController_i
::
SensorInfo
siPulsar
;
UniversalIO
::
IOType
s
iotypePulsar
;
UniversalIO
::
IOType
iotypePulsar
;
int
msecPulsar
;
UniSetTypes
::
uniset_mutex
act_mutex
;
...
...
extensions/UNetUDP/UNetExchange.h
View file @
08e088e0
...
...
@@ -130,7 +130,7 @@ class UNetExchange:
PassiveTimer
ptHeartBeat
;
UniSetTypes
::
ObjectId
sidHeartBeat
;
int
maxHeartBeat
;
IOController
::
A
IOStateList
::
iterator
aitHeartBeat
;
IOController
::
IOStateList
::
iterator
aitHeartBeat
;
UniSetTypes
::
ObjectId
test_id
;
int
steptime
;
/*!< периодичность вызова step, [мсек] */
...
...
@@ -178,7 +178,7 @@ class UNetExchange:
IOController
::
DIOStateList
::
iterator
ditRespond
;
bool
respondInvert
;
UniSetTypes
::
ObjectId
sidLostPackets
;
IOController
::
A
IOStateList
::
iterator
aitLostPackets
;
IOController
::
IOStateList
::
iterator
aitLostPackets
;
};
typedef
std
::
list
<
ReceiverInfo
>
ReceiverList
;
...
...
extensions/UNetUDP/UNetReceiver.cc
View file @
08e088e0
...
...
@@ -299,13 +299,13 @@ void UNetReceiver::real_update()
continue
;
}
if
(
ii
.
iotype
==
UniversalIO
::
D
igitalInput
)
if
(
ii
.
iotype
==
UniversalIO
::
D
I
)
shm
->
localSaveState
(
ii
.
dit
,
id
,
val
,
shm
->
ID
());
else
if
(
ii
.
iotype
==
UniversalIO
::
A
nalogInput
)
else
if
(
ii
.
iotype
==
UniversalIO
::
A
I
)
shm
->
localSaveValue
(
ii
.
ait
,
id
,
val
,
shm
->
ID
());
else
if
(
ii
.
iotype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
ii
.
iotype
==
UniversalIO
::
A
O
)
shm
->
localSetValue
(
ii
.
ait
,
id
,
val
,
shm
->
ID
());
else
if
(
ii
.
iotype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
ii
.
iotype
==
UniversalIO
::
D
O
)
shm
->
localSetState
(
ii
.
dit
,
id
,
val
,
shm
->
ID
());
else
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(update): Unknown iotype for sid="
<<
id
<<
endl
;
...
...
@@ -342,13 +342,13 @@ void UNetReceiver::real_update()
continue
;
}
if
(
ii
.
iotype
==
UniversalIO
::
D
igitalInput
)
if
(
ii
.
iotype
==
UniversalIO
::
D
I
)
shm
->
localSaveState
(
ii
.
dit
,
d
.
id
,
d
.
val
,
shm
->
ID
());
else
if
(
ii
.
iotype
==
UniversalIO
::
A
nalogInput
)
else
if
(
ii
.
iotype
==
UniversalIO
::
A
I
)
shm
->
localSaveValue
(
ii
.
ait
,
d
.
id
,
d
.
val
,
shm
->
ID
());
else
if
(
ii
.
iotype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
ii
.
iotype
==
UniversalIO
::
A
O
)
shm
->
localSetValue
(
ii
.
ait
,
d
.
id
,
d
.
val
,
shm
->
ID
());
else
if
(
ii
.
iotype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
ii
.
iotype
==
UniversalIO
::
D
O
)
shm
->
localSetState
(
ii
.
dit
,
d
.
id
,
d
.
val
,
shm
->
ID
());
else
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(update): Unknown iotype for sid="
<<
d
.
id
<<
endl
;
...
...
extensions/UNetUDP/UNetReceiver.h
View file @
08e088e0
...
...
@@ -128,7 +128,7 @@ class UNetReceiver
IOController
::
DIOStateList
::
iterator
ditRespond
;
bool
respondInvert
;
UniSetTypes
::
ObjectId
sidLostPackets
;
IOController
::
A
IOStateList
::
iterator
aitLostPackets
;
IOController
::
IOStateList
::
iterator
aitLostPackets
;
bool
activated
;
...
...
@@ -171,9 +171,9 @@ class UNetReceiver
struct
ItemInfo
{
long
id
;
IOController
::
A
IOStateList
::
iterator
ait
;
IOController
::
IOStateList
::
iterator
ait
;
IOController
::
DIOStateList
::
iterator
dit
;
UniversalIO
::
IOType
s
iotype
;
UniversalIO
::
IOType
iotype
;
ItemInfo
()
:
id
(
UniSetTypes
::
DefaultObjectId
),
...
...
extensions/UNetUDP/UNetSender.cc
View file @
08e088e0
...
...
@@ -90,9 +90,9 @@ void UNetSender::updateFromSM()
{
long
value
=
0
;
if
(
it
->
iotype
==
UniversalIO
::
D
igitalInput
||
it
->
iotype
==
UniversalIO
::
DigitalOutput
)
if
(
it
->
iotype
==
UniversalIO
::
D
I
||
it
->
iotype
==
UniversalIO
::
DO
)
value
=
shm
->
localGetState
(
it
->
dit
,
it
->
id
)
?
1
:
0
;
else
if
(
it
->
iotype
==
UniversalIO
::
A
nalogInput
||
it
->
iotype
==
UniversalIO
::
AnalogOutput
)
else
if
(
it
->
iotype
==
UniversalIO
::
A
I
||
it
->
iotype
==
UniversalIO
::
AO
)
value
=
shm
->
localGetValue
(
it
->
ait
,
it
->
id
);
else
{
...
...
@@ -126,12 +126,12 @@ void UNetSender::updateItem( DMap::iterator& it, long value )
if
(
it
==
dlist
.
end
()
)
return
;
if
(
it
->
iotype
==
UniversalIO
::
D
igitalInput
||
it
->
iotype
==
UniversalIO
::
DigitalOutput
)
if
(
it
->
iotype
==
UniversalIO
::
D
I
||
it
->
iotype
==
UniversalIO
::
DO
)
{
UniSetTypes
::
uniset_rwmutex_wrlock
l
(
pack_mutex
);
mypack
.
setDData
(
it
->
pack_ind
,
value
);
}
else
if
(
it
->
iotype
==
UniversalIO
::
A
nalogInput
||
it
->
iotype
==
UniversalIO
::
AnalogOutput
)
else
if
(
it
->
iotype
==
UniversalIO
::
A
I
||
it
->
iotype
==
UniversalIO
::
AO
)
{
UniSetTypes
::
uniset_rwmutex_wrlock
l
(
pack_mutex
);
mypack
.
setAData
(
it
->
pack_ind
,
value
);
...
...
@@ -286,7 +286,7 @@ bool UNetSender::initItem( UniXML_iterator& it )
p
.
id
=
sid
;
if
(
p
.
iotype
==
UniversalIO
::
D
igitalInput
||
p
.
iotype
==
UniversalIO
::
DigitalOutput
)
if
(
p
.
iotype
==
UniversalIO
::
D
I
||
p
.
iotype
==
UniversalIO
::
DO
)
{
p
.
pack_ind
=
mypack
.
addDData
(
sid
,
0
);
if
(
p
.
pack_ind
>=
UniSetUDP
::
MaxDCount
)
...
...
@@ -299,7 +299,7 @@ bool UNetSender::initItem( UniXML_iterator& it )
return
false
;
}
}
else
if
(
p
.
iotype
==
UniversalIO
::
A
nalogInput
||
p
.
iotype
==
UniversalIO
::
AnalogOutput
)
else
if
(
p
.
iotype
==
UniversalIO
::
A
I
||
p
.
iotype
==
UniversalIO
::
AO
)
{
p
.
pack_ind
=
mypack
.
addAData
(
sid
,
0
);
if
(
p
.
pack_ind
>=
UniSetUDP
::
MaxACount
)
...
...
extensions/UNetUDP/UNetSender.h
View file @
08e088e0
...
...
@@ -31,9 +31,9 @@ class UNetSender
id
(
UniSetTypes
::
DefaultObjectId
),
pack_ind
(
-
1
){}
UniversalIO
::
IOType
s
iotype
;
UniversalIO
::
IOType
iotype
;
UniSetTypes
::
ObjectId
id
;
IOController
::
A
IOStateList
::
iterator
ait
;
IOController
::
IOStateList
::
iterator
ait
;
IOController
::
DIOStateList
::
iterator
dit
;
int
pack_ind
;
...
...
extensions/UniNetwork/UniExchange.cc
View file @
08e088e0
...
...
@@ -224,13 +224,13 @@ void UniExchange::NetNodeInfo::update( IOController_i::ShortMapSeq_var& map, SMI
try
{
if
(
m
->
type
==
UniversalIO
::
D
igitalInput
)
if
(
m
->
type
==
UniversalIO
::
D
I
)
shm
->
localSaveState
(
s
->
dit
,
m
->
id
,
(
m
->
value
?
true
:
false
),
shm
->
ID
()
);
else
if
(
m
->
type
==
UniversalIO
::
D
igitalOutput
)
else
if
(
m
->
type
==
UniversalIO
::
D
O
)
shm
->
localSetState
(
s
->
dit
,
m
->
id
,
(
m
->
value
?
true
:
false
),
shm
->
ID
()
);
else
if
(
map
[
i
].
type
==
UniversalIO
::
A
nalogInput
)
else
if
(
map
[
i
].
type
==
UniversalIO
::
A
I
)
shm
->
localSaveValue
(
s
->
ait
,
m
->
id
,
m
->
value
,
shm
->
ID
()
);
else
if
(
map
[
i
].
type
==
UniversalIO
::
A
nalogOutput
)
else
if
(
map
[
i
].
type
==
UniversalIO
::
A
O
)
shm
->
localSetValue
(
s
->
ait
,
m
->
id
,
m
->
value
,
shm
->
ID
()
);
}
catch
(
Exception
&
ex
)
...
...
@@ -275,13 +275,13 @@ void UniExchange::updateLocalData()
try
{
uniset_rwmutex_wrlock
lock
(
it
->
val_lock
);
if
(
it
->
type
==
UniversalIO
::
D
igitalInput
||
it
->
type
==
UniversalIO
::
D
igitalOutput
)
if
(
it
->
type
==
UniversalIO
::
D
I
||
it
->
type
==
UniversalIO
::
D
O
)
{
it
->
val
=
shm
->
localGetState
(
it
->
dit
,
it
->
id
);
}
else
if
(
it
->
type
==
UniversalIO
::
A
nalogInput
||
it
->
type
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
type
==
UniversalIO
::
A
I
||
it
->
type
==
UniversalIO
::
A
O
)
{
it
->
val
=
shm
->
localGetValue
(
it
->
ait
,
it
->
id
);
}
...
...
extensions/UniNetwork/UniExchange.h
View file @
08e088e0
...
...
@@ -74,10 +74,10 @@ class UniExchange:
{}
IOController
::
DIOStateList
::
iterator
dit
;
IOController
::
A
IOStateList
::
iterator
ait
;
IOController
::
IOStateList
::
iterator
ait
;
long
val
;
long
id
;
UniversalIO
::
IOType
s
type
;
UniversalIO
::
IOType
type
;
UniSetTypes
::
uniset_rwmutex
val_lock
;
};
...
...
extensions/include/IOBase.h
View file @
08e088e0
...
...
@@ -53,7 +53,7 @@ static const int NoSafety = -1;
bool
check_depend
(
SMInterface
*
shm
);
/*!< проверка разрешения(зависимости) от другого датчика */
IOController_i
::
SensorInfo
si
;
UniversalIO
::
IOType
s
stype
;
/*!< тип канала (DI,DO,AI,AO) */
UniversalIO
::
IOType
stype
;
/*!< тип канала (DI,DO,AI,AO) */
IOController_i
::
CalibrateInfo
cal
;
/*!< калибровочные параметры */
Calibration
*
cdiagram
;
/*!< специальная калибровочная диаграмма */
...
...
@@ -89,11 +89,11 @@ static const int NoSafety = -1;
// Зависимость (d - depend)
UniSetTypes
::
ObjectId
d_id
;
/*!< идентификатор датчика, от которого зависит данный */
IOController
::
A
IOStateList
::
iterator
d_ait
;
/*! итератор на датчик от которого зависит данный */
IOController
::
IOStateList
::
iterator
d_ait
;
/*! итератор на датчик от которого зависит данный */
IOController
::
DIOStateList
::
iterator
d_dit
;
/*! итератор на датчик от которого зависит данный */
long
d_value
;
/*!< разрешающее работу значение датчика от которого зависит данный */
long
d_off_value
;
/*!< блокирующее значение */
UniversalIO
::
IOType
s
d_iotype
;
UniversalIO
::
IOType
d_iotype
;
// Порог
UniSetTypes
::
ObjectId
t_ai
;
/*!< если данный датчик дискретный,
...
...
@@ -103,7 +103,7 @@ static const int NoSafety = -1;
IONotifyController_i
::
ThresholdInfo
ti
;
IOController
::
AIOStateList
::
iterator
t_ait
;
/*! итератор на датчик по которому формируется порог */
IOController
::
A
IOStateList
::
iterator
ait
;
IOController
::
IOStateList
::
iterator
ait
;
IOController
::
DIOStateList
::
iterator
dit
;
UniSetTypes
::
uniset_rwmutex
val_lock
;
/*!< блокировка на время "работы" со значением */
...
...
extensions/include/SMInterface.h
View file @
08e088e0
...
...
@@ -16,11 +16,11 @@ class SMInterface
void
setState
(
UniSetTypes
::
ObjectId
,
bool
state
);
void
setValue
(
UniSetTypes
::
ObjectId
,
long
value
);
bool
saveState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniversalIO
::
IOType
s
type
,
UniSetTypes
::
ObjectId
supplier
);
bool
saveValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniversalIO
::
IOType
s
type
,
UniSetTypes
::
ObjectId
supplier
);
bool
saveState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniversalIO
::
IOType
type
,
UniSetTypes
::
ObjectId
supplier
);
bool
saveValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniversalIO
::
IOType
type
,
UniSetTypes
::
ObjectId
supplier
);
bool
saveLocalState
(
UniSetTypes
::
ObjectId
id
,
bool
state
,
UniversalIO
::
IOType
s
type
=
UniversalIO
::
DigitalInput
);
bool
saveLocalValue
(
UniSetTypes
::
ObjectId
id
,
long
value
,
UniversalIO
::
IOType
s
type
=
UniversalIO
::
AnalogInput
);
bool
saveLocalState
(
UniSetTypes
::
ObjectId
id
,
bool
state
,
UniversalIO
::
IOType
type
=
UniversalIO
::
DI
);
bool
saveLocalValue
(
UniSetTypes
::
ObjectId
id
,
long
value
,
UniversalIO
::
IOType
type
=
UniversalIO
::
AI
);
void
setUndefinedState
(
IOController_i
::
SensorInfo
&
si
,
bool
undefined
,
UniSetTypes
::
ObjectId
supplier
);
...
...
@@ -34,7 +34,7 @@ class SMInterface
IOController_i
::
ASensorInfoSeq
*
getAnalogSensorsMap
();
IONotifyController_i
::
ThresholdsListSeq
*
getThresholdsList
();
void
localSaveValue
(
IOController
::
AIOStateList
::
iterator
&
it
,
void
localSaveValue
(
IOController
::
IOStateList
::
iterator
&
it
,
UniSetTypes
::
ObjectId
sid
,
CORBA
::
Long
newvalue
,
UniSetTypes
::
ObjectId
sup_id
);
...
...
@@ -46,26 +46,26 @@ class SMInterface
UniSetTypes
::
ObjectId
sid
,
CORBA
::
Boolean
newstate
,
UniSetTypes
::
ObjectId
sup_id
);
void
localSetValue
(
IOController
::
AIOStateList
::
iterator
&
it
,
void
localSetValue
(
IOController
::
IOStateList
::
iterator
&
it
,
UniSetTypes
::
ObjectId
sid
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
);
bool
localGetState
(
IOController
::
DIOStateList
::
iterator
&
it
,
UniSetTypes
::
ObjectId
sid
);
long
localGetValue
(
IOController
::
AIOStateList
::
iterator
&
it
,
long
localGetValue
(
IOController
::
IOStateList
::
iterator
&
it
,
UniSetTypes
::
ObjectId
sid
);
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
// для дискретных датчиков необходимости для подобной функции нет.
// см. логику выставления в функции localSaveState
*/
void
localSetUndefinedState
(
IOController
::
AIOStateList
::
iterator
&
it
,
void
localSetUndefinedState
(
IOController
::
IOStateList
::
iterator
&
it
,
bool
undefined
,
UniSetTypes
::
ObjectId
sid
);
// специальные функции
IOController
::
DIOStateList
::
iterator
dioEnd
();
IOController
::
AIOStateList
::
iterator
a
ioEnd
();
void
initAIterator
(
IOController
::
A
IOStateList
::
iterator
&
it
);
IOController
::
IOStateList
::
iterator
ioEnd
();
void
initAIterator
(
IOController
::
IOStateList
::
iterator
&
it
);
void
initDIterator
(
IOController
::
DIOStateList
::
iterator
&
it
);
bool
exist
();
...
...
extensions/lib/IOBase.cc
View file @
08e088e0
...
...
@@ -97,7 +97,7 @@ bool IOBase::check_depend( SMInterface* shm )
if
(
d_id
==
DefaultObjectId
)
return
true
;
if
(
d_iotype
==
UniversalIO
::
D
igitalInput
||
d_iotype
==
UniversalIO
::
DigitalOutput
)
if
(
d_iotype
==
UniversalIO
::
D
I
||
d_iotype
==
UniversalIO
::
DO
)
{
if
(
shm
->
localGetState
(
d_dit
,
d_id
)
==
(
bool
)
d_value
)
return
true
;
...
...
@@ -105,7 +105,7 @@ bool IOBase::check_depend( SMInterface* shm )
return
false
;
}
if
(
d_iotype
==
UniversalIO
::
A
nalogInput
||
d_iotype
==
UniversalIO
::
AnalogOutput
)
if
(
d_iotype
==
UniversalIO
::
A
I
||
d_iotype
==
UniversalIO
::
AO
)
{
if
(
shm
->
localGetValue
(
d_ait
,
d_id
)
==
d_value
)
return
true
;
...
...
@@ -176,13 +176,13 @@ void IOBase::processingAsAI( IOBase* it, long val, SMInterface* shm, bool force
if
(
force
||
it
->
value
!=
val
)
{
if
(
it
->
stype
==
UniversalIO
::
A
nalogInput
)
if
(
it
->
stype
==
UniversalIO
::
A
I
)
shm
->
localSaveValue
(
it
->
ait
,
it
->
si
.
id
,
val
,
shm
->
ID
()
);
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
O
)
shm
->
localSetValue
(
it
->
ait
,
it
->
si
.
id
,
val
,
shm
->
ID
()
);
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
O
)
shm
->
localSetState
(
it
->
dit
,
it
->
si
.
id
,(
bool
)
val
,
shm
->
ID
()
);
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalInput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
I
)
shm
->
localSaveState
(
it
->
dit
,
it
->
si
.
id
,(
bool
)
val
,
shm
->
ID
()
);
it
->
value
=
val
;
...
...
@@ -234,13 +234,13 @@ void IOBase::processingFasAI( IOBase* it, float fval, SMInterface* shm, bool for
if
(
force
||
it
->
value
!=
val
)
{
if
(
it
->
stype
==
UniversalIO
::
A
nalogInput
)
if
(
it
->
stype
==
UniversalIO
::
A
I
)
shm
->
localSaveValue
(
it
->
ait
,
it
->
si
.
id
,
val
,
shm
->
ID
()
);
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
O
)
shm
->
localSetValue
(
it
->
ait
,
it
->
si
.
id
,
val
,
shm
->
ID
()
);
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
O
)
shm
->
localSetState
(
it
->
dit
,
it
->
si
.
id
,(
bool
)
val
,
shm
->
ID
()
);
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalInput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
I
)
shm
->
localSaveState
(
it
->
dit
,
it
->
si
.
id
,(
bool
)
val
,
shm
->
ID
()
);
it
->
value
=
val
;
...
...
@@ -265,13 +265,13 @@ void IOBase::processingAsDI( IOBase* it, bool set, SMInterface* shm, bool force
uniset_rwmutex_wrlock
lock
(
it
->
val_lock
);
if
(
force
||
(
bool
)
it
->
value
!=
set
)
{
if
(
it
->
stype
==
UniversalIO
::
D
igitalInput
)
if
(
it
->
stype
==
UniversalIO
::
D
I
)
shm
->
localSaveState
(
it
->
dit
,
it
->
si
.
id
,
set
,
shm
->
ID
());
else
if
(
it
->
stype
==
UniversalIO
::
D
igitalOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
D
O
)
shm
->
localSetState
(
it
->
dit
,
it
->
si
.
id
,
set
,
shm
->
ID
());
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogInput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
I
)
shm
->
localSaveValue
(
it
->
ait
,
it
->
si
.
id
,(
set
?
1
:
0
),
shm
->
ID
()
);
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
O
)
shm
->
localSetValue
(
it
->
ait
,
it
->
si
.
id
,(
set
?
1
:
0
),
shm
->
ID
()
);
it
->
value
=
set
?
1
:
0
;
...
...
@@ -290,16 +290,16 @@ long IOBase::processingAsAO( IOBase* it, SMInterface* shm, bool force )
if
(
force
)
{
if
(
it
->
stype
==
UniversalIO
::
D
igitalInput
||
it
->
stype
==
UniversalIO
::
DigitalOutput
)
if
(
it
->
stype
==
UniversalIO
::
D
I
||
it
->
stype
==
UniversalIO
::
DO
)
val
=
shm
->
localGetState
(
it
->
dit
,
it
->
si
.
id
)
?
1
:
0
;
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogInput
||
it
->
stype
==
UniversalIO
::
AnalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
I
||
it
->
stype
==
UniversalIO
::
AO
)
val
=
shm
->
localGetValue
(
it
->
ait
,
it
->
si
.
id
);
it
->
value
=
val
;
}
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
||
it
->
stype
==
UniversalIO
::
A
nalogInput
)
if
(
it
->
stype
==
UniversalIO
::
A
O
||
it
->
stype
==
UniversalIO
::
A
I
)
{
if
(
it
->
cdiagram
)
// задана специальная калибровочная диаграмма
{
...
...
@@ -343,9 +343,9 @@ bool IOBase::processingAsDO( IOBase* it, SMInterface* shm, bool force )
if
(
force
)
{
if
(
it
->
stype
==
UniversalIO
::
D
igitalInput
||
it
->
stype
==
UniversalIO
::
DigitalOutput
)
if
(
it
->
stype
==
UniversalIO
::
D
I
||
it
->
stype
==
UniversalIO
::
DO
)
set
=
shm
->
localGetState
(
it
->
dit
,
it
->
si
.
id
);
else
if
(
it
->
stype
==
UniversalIO
::
A
nalogInput
||
it
->
stype
==
UniversalIO
::
AnalogOutput
)
else
if
(
it
->
stype
==
UniversalIO
::
A
I
||
it
->
stype
==
UniversalIO
::
AO
)
set
=
shm
->
localGetValue
(
it
->
ait
,
it
->
si
.
id
)
?
true
:
false
;
}
...
...
@@ -368,8 +368,8 @@ float IOBase::processingFasAO( IOBase* it, SMInterface* shm, bool force )
it
->
value
=
val
;
}
if
(
it
->
stype
==
UniversalIO
::
A
nalogOutput
||
it
->
stype
==
UniversalIO
::
A
nalogInput
)
if
(
it
->
stype
==
UniversalIO
::
A
O
||
it
->
stype
==
UniversalIO
::
A
I
)
{
if
(
it
->
cdiagram
)
// задана специальная калибровочная диаграмма
{
...
...
@@ -522,7 +522,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
b
->
d_iotype
=
conf
->
getIOType
(
b
->
d_id
);
}
if
(
b
->
stype
==
UniversalIO
::
A
nalogInput
||
b
->
stype
==
UniversalIO
::
AnalogOutput
)
if
(
b
->
stype
==
UniversalIO
::
A
I
||
b
->
stype
==
UniversalIO
::
AO
)
{
b
->
cal
.
minRaw
=
it
.
getIntProp
(
"rmin"
);
b
->
cal
.
maxRaw
=
it
.
getIntProp
(
"rmax"
);
...
...
@@ -572,7 +572,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
if
(
!
it
.
getProp
(
"iir_coeff_new"
).
empty
()
)
f_iir_coeff_new
=
atof
(
it
.
getProp
(
"iir_coeff_new"
).
c_str
());
if
(
b
->
stype
==
UniversalIO
::
A
nalogInput
)
if
(
b
->
stype
==
UniversalIO
::
A
I
)
b
->
df
.
setSettings
(
f_size
,
f_T
,
f_lsparam
,
f_iir
,
f_iir_coeff_prev
,
f_iir_coeff_new
);
...
...
@@ -582,7 +582,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
if
(
!
caldiagram
.
empty
()
)
b
->
cdiagram
=
UniSetExtensions
::
buildCalibrationDiagram
(
caldiagram
);
}
else
if
(
b
->
stype
==
UniversalIO
::
D
igitalInput
||
b
->
stype
==
UniversalIO
::
DigitalOutput
)
else
if
(
b
->
stype
==
UniversalIO
::
D
I
||
b
->
stype
==
UniversalIO
::
DO
)
{
string
tai
(
it
.
getProp
(
"threshold_aid"
));
if
(
!
tai
.
empty
()
)
...
...
extensions/lib/SMInterface.cc
View file @
08e088e0
...
...
@@ -140,7 +140,7 @@ void SMInterface::setValue ( UniSetTypes::ObjectId id, long value )
}
// --------------------------------------------------------------------------
bool
SMInterface
::
saveState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniversalIO
::
IOType
s
type
,
UniSetTypes
::
ObjectId
sup_id
)
UniversalIO
::
IOType
type
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
ic
)
{
...
...
@@ -157,7 +157,7 @@ bool SMInterface::saveState ( IOController_i::SensorInfo& si, bool state,
}
// --------------------------------------------------------------------------
bool
SMInterface
::
saveValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniversalIO
::
IOType
s
type
,
UniSetTypes
::
ObjectId
sup_id
)
UniversalIO
::
IOType
type
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
ic
)
{
...
...
@@ -210,7 +210,7 @@ bool SMInterface::getState ( UniSetTypes::ObjectId id )
}
// --------------------------------------------------------------------------
bool
SMInterface
::
saveLocalState
(
UniSetTypes
::
ObjectId
id
,
bool
state
,
UniversalIO
::
IOType
s
type
)
UniversalIO
::
IOType
type
)
{
IOController_i
::
SensorInfo
si
;
si
.
id
=
id
;
...
...
@@ -219,7 +219,7 @@ bool SMInterface::saveLocalState( UniSetTypes::ObjectId id, bool state,
}
// --------------------------------------------------------------------------
bool
SMInterface
::
saveLocalValue
(
UniSetTypes
::
ObjectId
id
,
long
value
,
UniversalIO
::
IOType
s
type
)
UniversalIO
::
IOType
type
)
{
IOController_i
::
SensorInfo
si
;
si
.
id
=
id
;
...
...
@@ -325,13 +325,13 @@ IOController::DIOStateList::iterator SMInterface::dioEnd()
return
ic
->
dioEnd
();
}
// --------------------------------------------------------------------------
IOController
::
AIOStateList
::
iterator
SMInterface
::
a
ioEnd
()
IOController
::
IOStateList
::
iterator
SMInterface
::
ioEnd
()
{
CHECK_IC_PTR
(
a
ioEnd
)
return
ic
->
a
ioEnd
();
CHECK_IC_PTR
(
ioEnd
)
return
ic
->
ioEnd
();
}
// --------------------------------------------------------------------------
void
SMInterface
::
localSaveValue
(
IOController
::
IOController
::
AIOStateList
::
iterator
&
it
,
void
SMInterface
::
localSaveValue
(
IOController
::
IOController
::
IOStateList
::
iterator
&
it
,
UniSetTypes
::
ObjectId
sid
,
CORBA
::
Long
nval
,
UniSetTypes
::
ObjectId
sup_id
)
{
...
...
@@ -376,7 +376,7 @@ void SMInterface::localSetState( IOController::DIOStateList::iterator& it,
ic
->
localSetState
(
it
,
si
,
newstate
,
sup_id
);
}
// --------------------------------------------------------------------------
void
SMInterface
::
localSetValue
(
IOController
::
AIOStateList
::
iterator
&
it
,
void
SMInterface
::
localSetValue
(
IOController
::
IOStateList
::
iterator
&
it
,
UniSetTypes
::
ObjectId
sid
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
{
...
...
@@ -402,7 +402,7 @@ bool SMInterface::localGetState( IOController::DIOStateList::iterator& it, UniSe
return
ic
->
localGetState
(
it
,
si
);
}
// --------------------------------------------------------------------------
long
SMInterface
::
localGetValue
(
IOController
::
A
IOStateList
::
iterator
&
it
,
UniSetTypes
::
ObjectId
sid
)
long
SMInterface
::
localGetValue
(
IOController
::
IOStateList
::
iterator
&
it
,
UniSetTypes
::
ObjectId
sid
)
{
if
(
!
ic
)
return
getValue
(
sid
);
...
...
@@ -414,7 +414,7 @@ long SMInterface::localGetValue( IOController::AIOStateList::iterator& it, UniSe
return
ic
->
localGetValue
(
it
,
si
);
}
// --------------------------------------------------------------------------
void
SMInterface
::
localSetUndefinedState
(
IOController
::
AIOStateList
::
iterator
&
it
,
void
SMInterface
::
localSetUndefinedState
(
IOController
::
IOStateList
::
iterator
&
it
,
bool
undefined
,
UniSetTypes
::
ObjectId
sid
)
{
...
...
@@ -434,10 +434,10 @@ void SMInterface::localSetUndefinedState( IOController::AIOStateList::iterator&
ic
->
localSetUndefinedState
(
it
,
undefined
,
si
);
}
// --------------------------------------------------------------------------
void
SMInterface
::
initAIterator
(
IOController
::
A
IOStateList
::
iterator
&
it
)
void
SMInterface
::
initAIterator
(
IOController
::
IOStateList
::
iterator
&
it
)
{
if
(
ic
)
it
=
ic
->
a
ioEnd
();
it
=
ic
->
ioEnd
();
// else
// cerr << "(SMInterface::initAIterator): ic=NULL" << endl;
}
...
...
extensions/lib/UObject_SK.cc
View file @
08e088e0
...
...
@@ -399,7 +399,7 @@ void UObject_SK::callback()
// "сердцебиение"
if
(
idHeartBeat
!=
DefaultObjectId
&&
ptHeartBeat
.
checkTime
()
)
{
ui
.
saveValue
(
idHeartBeat
,
maxHeartBeat
,
UniversalIO
::
A
nalogInput
);
ui
.
saveValue
(
idHeartBeat
,
maxHeartBeat
,
UniversalIO
::
A
I
);
ptHeartBeat
.
reset
();
}
...
...
include/Configuration.h
View file @
08e088e0
...
...
@@ -105,8 +105,8 @@ namespace UniSetTypes
xmlNode
*
getXMLServicesSection
();
xmlNode
*
getXMLNodesSection
();
xmlNode
*
getXMLObjectNode
(
UniSetTypes
::
ObjectId
);
UniversalIO
::
IOType
s
getIOType
(
UniSetTypes
::
ObjectId
);
UniversalIO
::
IOType
s
getIOType
(
const
std
::
string
name
);
UniversalIO
::
IOType
getIOType
(
UniSetTypes
::
ObjectId
);
UniversalIO
::
IOType
getIOType
(
const
std
::
string
name
);
// net
inline
unsigned
int
getCountOfNet
()
const
{
return
countOfNet
;
}
...
...
include/IOController.h
View file @
08e088e0
...
...
@@ -47,59 +47,31 @@ class IOController:
virtual
UniSetTypes
::
ObjectType
getType
(){
return
UniSetTypes
::
getObjectType
(
"IOController"
);
}
virtual
CORBA
::
Boolean
getState
(
const
IOController_i
::
SensorInfo
&
si
);
virtual
CORBA
::
Long
getValue
(
const
IOController_i
::
SensorInfo
&
si
);
// -------------------- !!!!!!!!! ---------------------------------
// Реализуются конкретным i/o контроллером
// Не забывайте писать реализацию этих функций
virtual
void
setState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
virtual
void
setValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
virtual
void
fastSetState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
virtual
void
fastSetValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
// ----------------------------------------------------------------
/*! \warning Не сделано проверки, зарегистрирован ли такой датчик */
virtual
void
saveState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniversalIO
::
IOTypes
type
=
UniversalIO
::
DigitalInput
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
virtual
void
fastSaveState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniversalIO
::
IOTypes
type
=
UniversalIO
::
DigitalInput
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
/*! \warning Не сделано проверки, зарегистрирован ли такой датчик */
virtual
void
saveValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniversalIO
::
IOTypes
type
=
UniversalIO
::
AnalogInput
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
virtual
void
fastSaveValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniversalIO
::
IOTypes
type
=
UniversalIO
::
AnalogInput
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
virtual
void
setUndefinedState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
undefined
,
UniSetTypes
::
ObjectId
sup_id
=
UniSetTypes
::
DefaultObjectId
);
virtual
IOController_i
::
A
SensorInfoSeq
*
getSensorSeq
(
const
UniSetTypes
::
IDSeq
&
lst
);
virtual
IOController_i
::
SensorInfoSeq
*
getSensorSeq
(
const
UniSetTypes
::
IDSeq
&
lst
);
virtual
UniSetTypes
::
IDSeq
*
setOutputSeq
(
const
IOController_i
::
OutSeq
&
lst
,
UniSetTypes
::
ObjectId
sup_id
);
// ----------------------------------------------------------------
virtual
UniversalIO
::
IOTypes
getIOType
(
const
IOController_i
::
SensorInfo
&
si
);
virtual
IOController_i
::
ASensorInfoSeq
*
getAnalogSensorsMap
();
virtual
IOController_i
::
DSensorInfoSeq
*
getDigitalSensorsMap
();
virtual
IOController_i
::
DigitalIOInfo
getDInfo
(
const
IOController_i
::
SensorInfo
&
si
);
virtual
IOController_i
::
AnalogIOInfo
getAInfo
(
const
IOController_i
::
SensorInfo
&
si
);
virtual
UniversalIO
::
IOType
getIOType
(
const
IOController_i
::
SensorInfo
&
si
);
virtual
IOController_i
::
SensorInfoSeq
*
getSensorsMap
();
virtual
IOController_i
::
SensorIOInfo
getSensorIOInfo
(
const
IOController_i
::
SensorInfo
&
si
);
virtual
CORBA
::
Long
getRawValue
(
const
IOController_i
::
SensorInfo
&
si
);
virtual
void
calibrate
(
const
IOController_i
::
SensorInfo
&
si
,
...
...
@@ -118,7 +90,7 @@ class IOController:
};
UniSetTypes
::
Message
::
Priority
getPriority
(
const
IOController_i
::
SensorInfo
&
si
,
UniversalIO
::
IOType
s
type
);
UniversalIO
::
IOType
type
);
virtual
IOController_i
::
ShortIOInfo
getChangedTime
(
const
IOController_i
::
SensorInfo
&
si
);
...
...
@@ -141,46 +113,20 @@ class IOController:
void
setDependsSlot
(
DependsSlot
sl
);
void
setBlockDependsSlot
(
DependsSlot
sl
);
// структуры для внутреннего хранения информации по датчикам
struct
UniDigitalIOInfo
:
public
IOController_i
::
DigitalIOInfo
struct
USensorIOInfo
:
public
IOController_i
::
SensorIOInfo
{
U
niDigitalIOInfo
()
:
any
(
0
),
dlst_lock
(
false
),
block_state
(
false
),
db_ignore
(
false
)
U
SensorIOInfo
()
:
any
(
0
),
dlst_lock
(
false
),
block_value
(
0
),
db_ignore
(
false
)
{
undefined
=
false
;
blocked
=
false
;
}
virtual
~
UniDigitalIOInfo
(){}
UniDigitalIOInfo
(
IOController_i
::
DigitalIOInfo
&
r
);
UniDigitalIOInfo
(
const
IOController_i
::
DigitalIOInfo
&
r
);
UniDigitalIOInfo
(
IOController_i
::
DigitalIOInfo
*
r
);
UniDigitalIOInfo
&
operator
=
(
IOController_i
::
DigitalIOInfo
&
r
);
UniDigitalIOInfo
&
operator
=
(
IOController_i
::
DigitalIOInfo
*
r
);
const
UniDigitalIOInfo
&
operator
=
(
const
IOController_i
::
DigitalIOInfo
&
r
);
void
*
any
;
/*!< расширение для возможности хранения своей информации */
DependsList
dlst
;
/*!< список io зависящих от данного */
bool
dlst_lock
;
/*!< флаг блокирующий работу со списком */
bool
block_state
;
bool
db_ignore
;
/*!< не писать изменения в БД */
virtual
~
USensorIOInfo
(){}
UniSetTypes
::
uniset_rwmutex
val_lock
;
/*!< флаг блокирующий работу со значением */
};
USensorIOInfo
(
IOController_i
::
SensorIOInfo
&
r
);
USensorIOInfo
(
IOController_i
::
SensorIOInfo
*
r
);
USensorIOInfo
(
const
IOController_i
::
SensorIOInfo
&
r
);
struct
UniAnalogIOInfo
:
public
IOController_i
::
AnalogIOInfo
{
UniAnalogIOInfo
()
:
any
(
0
),
dlst_lock
(
false
),
block_value
(
0
),
db_ignore
(
false
)
{
undefined
=
false
;
blocked
=
false
;
}
virtual
~
UniAnalogIOInfo
(){}
UniAnalogIOInfo
(
IOController_i
::
AnalogIOInfo
&
r
);
UniAnalogIOInfo
(
IOController_i
::
AnalogIOInfo
*
r
);
UniAnalogIOInfo
(
const
IOController_i
::
AnalogIOInfo
&
r
);
UniAnalogIOInfo
&
operator
=
(
IOController_i
::
AnalogIOInfo
&
r
);
const
UniAnalogIOInfo
&
operator
=
(
const
IOController_i
::
AnalogIOInfo
&
r
);
UniAnalogIOInfo
&
operator
=
(
IOController_i
::
AnalogIOInfo
*
r
);
USensorIOInfo
&
operator
=
(
IOController_i
::
SensorIOInfo
&
r
);
const
USensorIOInfo
&
operator
=
(
const
IOController_i
::
SensorIOInfo
&
r
);
USensorIOInfo
&
operator
=
(
IOController_i
::
SensorIOInfo
*
r
);
void
*
any
;
/*!< расширение для возможности хранения своей информации */
DependsList
dlst
;
/*!< список io зависящих от данного (для выставления поля undefined) */
...
...
@@ -193,56 +139,38 @@ class IOController:
// Функции работы со списками датчиков (без изменения 'const')
typedef
std
::
map
<
UniSetTypes
::
KeyType
,
UniDigitalIOInfo
>
DIOStateList
;
typedef
std
::
map
<
UniSetTypes
::
KeyType
,
UniAnalogIOInfo
>
AIOStateList
;
typedef
std
::
map
<
UniSetTypes
::
KeyType
,
USensorIOInfo
>
IOStateList
;
inline
DIOStateList
::
iterator
dioBegin
(){
return
dioList
.
begin
();
}
inline
DIOStateList
::
iterator
dioEnd
(){
return
dioList
.
end
();
}
inline
DIOStateList
::
iterator
dfind
(
UniSetTypes
::
KeyType
k
){
return
dioList
.
find
(
k
);
}
inline
int
dioCount
(){
return
dioList
.
size
();
}
inline
AIOStateList
::
iterator
aioBegin
(){
return
aioList
.
begin
();
}
inline
AIOStateList
::
iterator
aioEnd
(){
return
aioList
.
end
();
}
inline
AIOStateList
::
iterator
afind
(
UniSetTypes
::
KeyType
k
){
return
aioList
.
find
(
k
);
}
inline
int
aioCount
(){
return
aioList
.
size
();
}
inline
IOStateList
::
iterator
ioBegin
(){
return
ioList
.
begin
();
}
inline
IOStateList
::
iterator
ioEnd
(){
return
ioList
.
end
();
}
inline
IOStateList
::
iterator
find
(
UniSetTypes
::
KeyType
k
){
return
ioList
.
find
(
k
);
}
inline
int
ioCount
(){
return
ioList
.
size
();
}
struct
DependsInfo
{
DependsInfo
(
bool
init
=
false
);
DependsInfo
(
IOController_i
::
SensorInfo
&
si
,
DIOStateList
::
iterator
&
dit
,
AIOStateList
::
iterator
&
ait
);
DependsInfo
(
IOController_i
::
SensorInfo
&
si
,
IOStateList
::
iterator
&
it
);
IOController_i
::
SensorInfo
si
;
DIOStateList
::
iterator
dit
;
AIOStateList
::
iterator
ait
;
IOStateList
::
iterator
it
;
bool
block_invert
;
/*!< инвертирование логики для блокирования */
bool
init
;
};
// доступ к элементам через итератор
virtual
void
localSaveValue
(
AIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
newvalue
,
UniSetTypes
::
ObjectId
sup_id
);
virtual
void
localSaveState
(
DIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
newstate
,
UniSetTypes
::
ObjectId
sup_id
);
virtual
void
localSetState
(
DIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
newstate
,
UniSetTypes
::
ObjectId
sup_id
);
virtual
void
localSetValue
(
AIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
virtual
void
localSetValue
(
IOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
);
virtual
bool
localGetState
(
DIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
);
virtual
long
localGetValue
(
AIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
);
virtual
long
localGetValue
(
IOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
);
/*! функция выставления признака неопределённого состояния для аналоговых датчиков
// для дискретных датчиков необходимости для подобной функции нет.
// см. логику выставления в функции localSaveState
*/
virtual
void
localSetUndefinedState
(
A
IOStateList
::
iterator
&
it
,
bool
undefined
,
virtual
void
localSetUndefinedState
(
IOStateList
::
iterator
&
it
,
bool
undefined
,
const
IOController_i
::
SensorInfo
&
si
);
protected
:
// переопределяем для добавления вызова регистрации датчиков
virtual
bool
disactivateObject
();
...
...
@@ -253,47 +181,23 @@ class IOController:
/*! удаление из репозитория датчиков за информацию о которых отвечает данный IOController */
virtual
void
sensorsUnregistration
();
/*! регистрация дискретного датчика
force=true - не проверять на дублирование (оптимизация)
*/
void
dsRegistration
(
const
UniDigitalIOInfo
&
,
bool
force
=
false
);
/*! регистрация аналогового датчика
/*! регистрация датчика
force=true - не проверять на дублирование (оптимизация)
*/
void
asRegistration
(
const
UniAnalog
IOInfo
&
,
bool
force
=
false
);
void
ioRegistration
(
const
USensor
IOInfo
&
,
bool
force
=
false
);
/*! разрегистрация датчика */
void
sUnRegistration
(
const
IOController_i
::
SensorInfo
&
si
);
void
ioUnRegistration
(
const
IOController_i
::
SensorInfo
&
si
);
UniSetTypes
::
Message
::
Priority
getMessagePriority
(
UniSetTypes
::
KeyType
k
,
UniversalIO
::
IOType
s
type
);
UniSetTypes
::
Message
::
Priority
getMessagePriority
(
UniSetTypes
::
KeyType
k
,
UniversalIO
::
IOType
type
);
// ------------------------------
inline
IOController_i
::
DigitalIOInfo
DigitalIOInfo
(
bool
s
,
UniversalIO
::
IOTypes
t
,
const
IOController_i
::
SensorInfo
&
si
,
UniSetTypes
::
Message
::
Priority
p
=
UniSetTypes
::
Message
::
Medium
,
bool
defval
=
false
)
{
IOController_i
::
DigitalIOInfo
di
;
di
.
si
=
si
;
di
.
state
=
s
;
di
.
real_state
=
s
;
di
.
type
=
t
;
di
.
priority
=
p
;
di
.
default_val
=
defval
;
di
.
blocked
=
false
;
return
di
;
};
inline
IOController_i
::
AnalogIOInfo
AnalogIOInfo
(
long
v
,
UniversalIO
::
IOTypes
t
,
const
IOController_i
::
SensorInfo
&
si
,
inline
IOController_i
::
SensorIOInfo
SensorIOInfo
(
long
v
,
UniversalIO
::
IOType
t
,
const
IOController_i
::
SensorInfo
&
si
,
UniSetTypes
::
Message
::
Priority
p
=
UniSetTypes
::
Message
::
Medium
,
long
defval
=
0
,
IOController_i
::
CalibrateInfo
*
ci
=
0
)
{
IOController_i
::
Analog
IOInfo
ai
;
IOController_i
::
Sensor
IOInfo
ai
;
ai
.
si
=
si
;
ai
.
type
=
t
;
ai
.
value
=
v
;
...
...
@@ -315,31 +219,23 @@ class IOController:
return
ai
;
};
//! сохранение информации об изменении состояния датчика
virtual
void
logging
(
UniSetTypes
::
SensorMessage
&
sm
);
//! сохранение состояния всех датчиков в БД
virtual
void
dumpToDB
();
IOController
();
// доступ к списку c изменением только для своих
DIOStateList
::
iterator
mydioBegin
();
DIOStateList
::
iterator
mydioEnd
();
AIOStateList
::
iterator
myaioBegin
();
AIOStateList
::
iterator
myaioEnd
();
AIOStateList
::
iterator
myafind
(
UniSetTypes
::
KeyType
k
);
DIOStateList
::
iterator
mydfind
(
UniSetTypes
::
KeyType
k
);
IOStateList
::
iterator
myioBegin
();
IOStateList
::
iterator
myioEnd
();
IOStateList
::
iterator
myiofind
(
UniSetTypes
::
KeyType
k
);
// --------------------------
// ФИЛЬТРОВАНИЕ
//
typedef
sigc
::
slot
<
bool
,
const
UniAnalogIOInfo
&
,
CORBA
::
Long
,
UniSetTypes
::
ObjectId
>
AFilterSlot
;
typedef
sigc
::
slot
<
bool
,
const
UniDigitalIOInfo
&
,
CORBA
::
Boolean
,
UniSetTypes
::
ObjectId
>
DFilterSlot
;
typedef
std
::
list
<
AFilterSlot
>
AFilterSlotList
;
typedef
std
::
list
<
DFilterSlot
>
DFilterSlotList
;
typedef
sigc
::
slot
<
bool
,
const
USensorIOInfo
&
,
CORBA
::
Long
,
UniSetTypes
::
ObjectId
>
IOFilterSlot
;
typedef
std
::
list
<
IOFilterSlot
>
IOFilterSlotList
;
/*
Фильтрующая функция должна возвращать:
...
...
@@ -347,21 +243,16 @@ class IOController:
FALSE - если значение не подходит (отбрасывается)
Пример использования:
add
A
Filter( sigc::mem_fun(my,&MyClass::my_filter) );
add
IO
Filter( sigc::mem_fun(my,&MyClass::my_filter) );
*/
AFilterSlotList
::
iterator
addAFilter
(
AFilterSlot
sl
,
bool
push_front
=
false
);
DFilterSlotList
::
iterator
addDFilter
(
DFilterSlot
sl
,
bool
push_front
=
false
);
void
eraseAFilter
(
AFilterSlotList
::
iterator
&
it
);
void
eraseDFilter
(
DFilterSlotList
::
iterator
&
it
);
IOFilterSlotList
::
iterator
addIOFilter
(
IOFilterSlot
sl
,
bool
push_front
=
false
);
void
eraseIOFilter
(
IOFilterSlotList
::
iterator
&
it
);
// функии проверки текущего значения
bool
checkDFilters
(
const
UniDigitalIOInfo
&
ai
,
CORBA
::
Boolean
newstate
,
UniSetTypes
::
ObjectId
sup_id
);
bool
checkAFilters
(
const
UniAnalogIOInfo
&
ai
,
CORBA
::
Long
&
newvalue
,
UniSetTypes
::
ObjectId
sup_id
);
bool
checkIOFilters
(
const
USensorIOInfo
&
ai
,
CORBA
::
Long
&
newvalue
,
UniSetTypes
::
ObjectId
sup_id
);
inline
bool
afiltersEmpty
(){
return
afilters
.
empty
();
}
inline
bool
dfiltersEmpty
(){
return
dfilters
.
empty
();
}
inline
int
afiltersSize
(){
return
afilters
.
size
();
}
inline
int
dfiltersSize
(){
return
dfilters
.
size
();
}
inline
bool
iofiltersEmpty
(){
return
iofilters
.
empty
();
}
inline
int
iodiltersSize
(){
return
iofilters
.
size
();
}
// ---------------------------
// note: функция вызывается рекурсивно!!!
...
...
@@ -371,16 +262,12 @@ class IOController:
private
:
friend
class
AskDumper
;
DIOStateList
dioList
;
/*!< список с текущим состоянием дискретных входов/выходов */
AIOStateList
aioList
;
/*!< список с текущим состоянием аналоговых входов/выходов */
UniSetTypes
::
uniset_rwmutex
dioMutex
;
/*!< замок для блокирования совместного доступа к dioList */
UniSetTypes
::
uniset_rwmutex
aioMutex
;
/*!< замок для блокирования совместного доступа к aioList */
IOStateList
ioList
;
/*!< список с текущим состоянием аналоговых входов/выходов */
UniSetTypes
::
uniset_rwmutex
ioMutex
;
/*!< замок для блокирования совместного доступа к ioList */
bool
isPingDBServer
;
// флаг связи с DBServer-ом
AFilterSlotList
afilters
;
/*!< список фильтров для аналоговых значений */
DFilterSlotList
dfilters
;
/*!< список фильтров для дискретных значений */
IOFilterSlotList
iofilters
;
/*!< список фильтров для аналоговых значений */
DependsSlot
dslot
;
/*!< undefined depends slot */
DependsSlot
bslot
;
/*!< block depends slot */
...
...
include/IONotifyController.h
View file @
08e088e0
...
...
@@ -119,16 +119,12 @@ class IONotifyController:
virtual
UniSetTypes
::
ObjectType
getType
(){
return
UniSetTypes
::
getObjectType
(
"IONotifyController"
);
}
virtual
void
askSensor
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
);
virtual
void
askState
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
);
virtual
void
askValue
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
);
virtual
void
askThreshold
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniSetTypes
::
ThresholdId
tid
,
CORBA
::
Long
lowLimit
,
CORBA
::
Long
hiLimit
,
CORBA
::
Long
sensibility
,
UniversalIO
::
UIOCommand
cmd
);
virtual
void
askOutput
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
);
virtual
UniSetTypes
::
IDSeq
*
askSensorsSeq
(
const
UniSetTypes
::
IDSeq
&
lst
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
);
...
...
@@ -183,7 +179,7 @@ class IONotifyController:
/*! итератор в списке датчиков
(для оптимально-быстрого доступа)
*/
IOController
::
D
IOStateList
::
iterator
itSID
;
IOController
::
IOStateList
::
iterator
itSID
;
/*! инверсная логика */
bool
inverse
;
...
...
@@ -207,31 +203,19 @@ class IONotifyController:
{
ThresholdsListInfo
(){}
ThresholdsListInfo
(
IOController_i
::
SensorInfo
&
si
,
ThresholdExtList
&
list
,
UniversalIO
::
IOType
s
t
=
UniversalIO
::
AnalogInput
)
:
UniversalIO
::
IOType
t
=
UniversalIO
::
AI
)
:
si
(
si
),
type
(
t
),
list
(
list
){}
IOController_i
::
SensorInfo
si
;
A
IOStateList
::
iterator
ait
;
UniversalIO
::
IOType
s
type
;
IOStateList
::
iterator
ait
;
UniversalIO
::
IOType
type
;
ThresholdExtList
list
;
};
/*! массив пар датчик->список порогов */
typedef
std
::
map
<
UniSetTypes
::
KeyType
,
ThresholdsListInfo
>
AskThresholdMap
;
virtual
void
localSaveValue
(
IOController
::
AIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
newvalue
,
UniSetTypes
::
ObjectId
sup_id
);
virtual
void
localSaveState
(
IOController
::
DIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
newstate
,
UniSetTypes
::
ObjectId
sup_id
);
virtual
void
localSetState
(
IOController
::
DIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
newstate
,
UniSetTypes
::
ObjectId
sup_id
);
virtual
void
localSetValue
(
IOController
::
AIOStateList
::
iterator
&
it
,
virtual
void
localSetValue
(
IOController
::
IOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
);
...
...
@@ -240,15 +224,14 @@ class IONotifyController:
virtual
bool
activateObject
();
// ФИЛЬТРЫ
bool
myAFilter
(
const
UniAnalogIOInfo
&
ai
,
CORBA
::
Long
newvalue
,
UniSetTypes
::
ObjectId
sup_id
);
bool
myDFilter
(
const
UniDigitalIOInfo
&
ai
,
CORBA
::
Boolean
newstate
,
UniSetTypes
::
ObjectId
sup_id
);
bool
myIOFilter
(
const
USensorIOInfo
&
ai
,
CORBA
::
Long
newvalue
,
UniSetTypes
::
ObjectId
sup_id
);
//! посылка информации об изменении состояния датчика
virtual
void
send
(
ConsumerList
&
lst
,
UniSetTypes
::
SensorMessage
&
sm
);
//! проверка срабатывания пороговых датчиков
virtual
void
checkThreshold
(
AIOStateList
::
iterator
&
li
,
virtual
void
checkThreshold
(
IOStateList
::
iterator
&
li
,
const
IOController_i
::
SensorInfo
&
si
,
bool
send
=
true
);
//! поиск информации о пороговом датчике
...
...
@@ -298,24 +281,13 @@ class IONotifyController:
bool
removeThreshold
(
ThresholdExtList
&
lst
,
ThresholdInfoExt
&
ti
,
const
UniSetTypes
::
ConsumerInfo
&
ci
);
AskMap
askDIOList
;
/*!< список потребителей по дискретным датчикам */
AskMap
askAIOList
;
/*!< список потребителей по аналоговым датчикам */
AskMap
askIOList
;
/*!< список потребителей по аналоговым датчикам */
AskThresholdMap
askTMap
;
/*!< список порогов по аналоговым датчикам */
// Выходы
AskMap
askDOList
;
/*!< список потребителей по дискретным выходам */
AskMap
askAOList
;
/*!< список потребителей по аналоговым выходам */
/*! замок для блокирования совместного доступа к cписку потребителей дискретных датчиков */
UniSetTypes
::
uniset_rwmutex
askDMutex
;
/*! замок для блокирования совместного доступа к cписку потребителей аналоговых датчиков */
UniSetTypes
::
uniset_rwmutex
askAMutex
;
/*! замок для блокирования совместного доступа к cписку потребителей датчиков */
UniSetTypes
::
uniset_rwmutex
askIOMutex
;
/*! замок для блокирования совместного доступа к cписку потребителей пороговых датчиков */
UniSetTypes
::
uniset_rwmutex
trshMutex
;
/*! замок для блокирования совместного доступа к cписку потребителей аналоговых выходов */
UniSetTypes
::
uniset_rwmutex
askAOMutex
;
/*! замок для блокирования совместного доступа к cписку потребителей дискретных выходов */
UniSetTypes
::
uniset_rwmutex
askDOMutex
;
int
maxAttemtps
;
/*! timeout for consumer */
};
...
...
include/MessageType.h
View file @
08e088e0
...
...
@@ -104,7 +104,6 @@ namespace UniSetTypes
public
:
ObjectId
id
;
bool
state
;
long
value
;
bool
undefined
;
...
...
@@ -112,7 +111,7 @@ namespace UniSetTypes
long
sm_tv_sec
;
long
sm_tv_usec
;
UniversalIO
::
IOType
s
sensor_type
;
UniversalIO
::
IOType
sensor_type
;
IOController_i
::
CalibrateInfo
ci
;
// для пороговых датчиков
...
...
@@ -120,13 +119,9 @@ namespace UniSetTypes
UniSetTypes
::
ThresholdId
tid
;
SensorMessage
();
SensorMessage
(
ObjectId
id
,
bool
state
,
Priority
priority
=
Message
::
Medium
,
UniversalIO
::
IOTypes
st
=
UniversalIO
::
DigitalInput
,
ObjectId
consumer
=
UniSetTypes
::
DefaultObjectId
);
SensorMessage
(
ObjectId
id
,
long
value
,
const
IOController_i
::
CalibrateInfo
&
ci
,
SensorMessage
(
ObjectId
id
,
long
value
,
const
IOController_i
::
CalibrateInfo
&
ci
=
IOController_i
::
CalibrateInfo
(),
Priority
priority
=
Message
::
Medium
,
UniversalIO
::
IOType
s
st
=
UniversalIO
::
AnalogInput
,
UniversalIO
::
IOType
st
=
UniversalIO
::
AI
,
ObjectId
consumer
=
UniSetTypes
::
DefaultObjectId
);
SensorMessage
(
const
VoidMessage
*
msg
);
...
...
include/NCRestorer.h
View file @
08e088e0
...
...
@@ -43,9 +43,9 @@ class NCRestorer
virtual
~
NCRestorer
();
struct
SInfo
:
public
IOController
::
U
niAnalog
IOInfo
public
IOController
::
U
Sensor
IOInfo
{
SInfo
(
IOController_i
::
SensorInfo
&
si
,
UniversalIO
::
IOType
s
&
t
,
SInfo
(
IOController_i
::
SensorInfo
&
si
,
UniversalIO
::
IOType
&
t
,
UniSetTypes
::
Message
::
Message
::
Priority
&
p
,
long
&
def
)
{
this
->
si
=
si
;
...
...
@@ -56,15 +56,12 @@ class NCRestorer
SInfo
()
{
this
->
type
=
UniversalIO
::
D
igitalInput
;
this
->
type
=
UniversalIO
::
D
I
;
this
->
priority
=
UniSetTypes
::
Message
::
Medium
;
this
->
default_val
=
0
;
}
SInfo
&
operator
=
(
IOController_i
::
DigitalIOInfo
&
inf
);
SInfo
&
operator
=
(
IOController_i
::
AnalogIOInfo
&
inf
);
operator
IOController
::
UniDigitalIOInfo
();
SInfo
&
operator
=
(
IOController_i
::
SensorIOInfo
&
inf
);
};
virtual
void
read
(
IONotifyController
*
ic
,
const
std
::
string
fn
=
""
)
=
0
;
...
...
@@ -79,46 +76,25 @@ class NCRestorer
// добавление списка порогов и заказчиков
static
void
addthresholdlist
(
IONotifyController
*
ic
,
SInfo
&
inf
,
IONotifyController
::
ThresholdExtList
&
lst
,
bool
force
=
false
);
/*! регистрация дискретного датчика*/
static
inline
void
dsRegistration
(
IONotifyController
*
ic
,
IOController
::
UniDigitalIOInfo
&
inf
,
bool
force
=
false
)
{
ic
->
dsRegistration
(
inf
,
force
);
}
/*! регистрация аналогового датчика*/
static
inline
void
asRegistration
(
IONotifyController
*
ic
,
IOController
::
UniAnalogIOInfo
&
inf
,
bool
force
=
false
)
{
ic
->
asRegistration
(
inf
,
force
);
}
static
inline
IOController
::
AIOStateList
::
iterator
aioFind
(
IONotifyController
*
ic
,
UniSetTypes
::
KeyType
k
)
static
inline
void
ioRegistration
(
IONotifyController
*
ic
,
IOController
::
USensorIOInfo
&
inf
,
bool
force
=
false
)
{
return
ic
->
myafind
(
k
);
ic
->
ioRegistration
(
inf
,
force
);
}
static
inline
IOController
::
DIOStateList
::
iterator
dioFind
(
IONotifyController
*
ic
,
UniSetTypes
::
KeyType
k
)
static
inline
IOController
::
IOStateList
::
iterator
ioFind
(
IONotifyController
*
ic
,
UniSetTypes
::
KeyType
k
)
{
return
ic
->
my
d
find
(
k
);
return
ic
->
my
io
find
(
k
);
}
static
inline
IOController
::
DIOStateList
::
iterator
d
ioEnd
(
IONotifyController
*
ic
)
static
inline
IOController
::
IOStateList
::
iterator
ioEnd
(
IONotifyController
*
ic
)
{
return
ic
->
my
d
ioEnd
();
return
ic
->
myioEnd
();
}
static
inline
IOController
::
AIOStateList
::
iterator
aioEnd
(
IONotifyController
*
ic
)
static
inline
IOController
::
IOStateList
::
iterator
ioBegin
(
IONotifyController
*
ic
)
{
return
ic
->
my
aioEnd
();
return
ic
->
my
ioBegin
();
}
static
inline
IOController
::
DIOStateList
::
iterator
dioBegin
(
IONotifyController
*
ic
)
{
return
ic
->
mydioBegin
();
}
static
inline
IOController
::
AIOStateList
::
iterator
aioBegin
(
IONotifyController
*
ic
)
{
return
ic
->
myaioBegin
();
}
};
// ------------------------------------------------------------------------------------------
/*!
...
...
include/SViewer.h
View file @
08e088e0
...
...
@@ -48,9 +48,8 @@ class SViewer
void
readSection
(
const
std
::
string
sec
,
const
std
::
string
secRoot
);
void
getInfo
(
UniSetTypes
::
ObjectId
id
);
virtual
void
updateDSensors
(
IOController_i
::
DSensorInfoSeq_var
&
dmap
,
UniSetTypes
::
ObjectId
oid
);
virtual
void
updateASensors
(
IOController_i
::
ASensorInfoSeq_var
&
amap
,
UniSetTypes
::
ObjectId
oid
);
virtual
void
updateThresholds
(
IONotifyController_i
::
ThresholdsListSeq_var
&
tlst
,
UniSetTypes
::
ObjectId
oid
);
virtual
void
updateSensors
(
IOController_i
::
SensorInfoSeq_var
&
amap
,
UniSetTypes
::
ObjectId
oid
);
virtual
void
updateThresholds
(
IONotifyController_i
::
ThresholdsListSeq_var
&
tlst
,
UniSetTypes
::
ObjectId
oid
);
const
std
::
string
csec
;
void
printInfo
(
UniSetTypes
::
ObjectId
id
,
const
std
::
string
&
sname
,
long
value
,
const
std
::
string
&
owner
,
...
...
include/StorageInterface.h
View file @
08e088e0
...
...
@@ -45,7 +45,7 @@ class StorageInterface
virtual
long
getValue
(
const
IOController_i
::
SensorInfo
&
si
)
=
0
;
virtual
void
saveState
(
const
IOController_i
::
DigitalIOInfo
&
di
,
bool
st
)
=
0
;
virtual
void
saveValue
(
const
IOController_i
::
Analog
IOInfo
&
ai
,
long
val
)
=
0
;
virtual
void
saveValue
(
const
IOController_i
::
Sensor
IOInfo
&
ai
,
long
val
)
=
0
;
protected
:
...
...
@@ -70,7 +70,7 @@ class STLStorage:
virtual
long
getValue
(
const
IOController_i
::
SensorInfo
&
si
);
virtual
void
saveState
(
const
IOController_i
::
DigitalIOInfo
&
di
,
bool
st
);
virtual
void
saveValue
(
const
IOController_i
::
Analog
IOInfo
&
ai
,
long
val
);
virtual
void
saveValue
(
const
IOController_i
::
Sensor
IOInfo
&
ai
,
long
val
);
protected
:
private
:
...
...
include/UniSetTypes.h
View file @
08e088e0
...
...
@@ -57,8 +57,8 @@ namespace UniSetTypes
/*! Функция делает ObjectType из const char * (переводит const-строку в обычную, что плохо, но мы обещаем не писать в неё :) ) */
inline
static
UniSetTypes
::
ObjectType
getObjectType
(
const
char
*
name
)
{
const
void
*
t
=
name
;
return
(
UniSetTypes
::
ObjectType
)
t
;
}
UniversalIO
::
IOType
s
getIOType
(
const
std
::
string
s
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
UniversalIO
::
IOType
s
t
);
UniversalIO
::
IOType
getIOType
(
const
std
::
string
s
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
UniversalIO
::
IOType
t
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
IOController_i
::
CalibrateInfo
c
);
...
...
@@ -102,27 +102,9 @@ namespace UniSetTypes
};
const
ObjectId
DefaultObjectId
=
-
1
;
/*!< Идентификатор объекта по умолчанию */
// typedef long MessageCode;
const
MessageCode
DefaultMessageCode
=
0
;
/*!< код пустого сообщения */
const
ThresholdId
DefaultThresholdId
=
-
1
;
/*!< идентификатор порогов по умолчанию */
const
ThresholdId
DefaultTimerId
=
-
1
;
/*!< идентификатор таймера по умолчанию */
/*! Информация о сообщении */
struct
MessageInfo
{
UniSetTypes
::
MessageCode
code
;
/*!< идентификатор */
std
::
string
text
;
/*!< текст */
std
::
string
idname
;
/*!< текстовое название идентификатора */
inline
bool
operator
<
(
const
MessageInfo
&
m
)
const
{
return
(
code
<
m
.
code
);
}
};
/*! Информация об имени объекта */
struct
ObjectInfo
{
...
...
@@ -245,7 +227,6 @@ namespace UniSetTypes
long
setoutregion
(
long
raw
,
long
rawMin
,
long
rawMax
);
bool
file_exist
(
const
std
::
string
filename
);
IDList
explode
(
const
std
::
string
str
,
char
sep
=
','
);
...
...
@@ -268,6 +249,7 @@ namespace UniSetTypes
// Проверка xml-узла на соответсвие <...f_prop="f_val">,
// если не задано f_val, то проверяется, что просто f_prop!=""
bool
check_filter
(
UniXML_iterator
&
it
,
const
std
::
string
f_prop
,
const
std
::
string
f_val
=
""
);
// -----------------------------------------------------------------------------
}
...
...
include/UniversalInterface.h
View file @
08e088e0
...
...
@@ -78,7 +78,7 @@ class UniversalInterface
// Группа должна принадлежать одному процессу!
//! Получение состояния для списка указанных датчиков
IOController_i
::
A
SensorInfoSeq_var
getSensorSeq
(
UniSetTypes
::
IDList
&
lst
);
IOController_i
::
SensorInfoSeq_var
getSensorSeq
(
UniSetTypes
::
IDList
&
lst
);
// Изменения состояния списка входов/выходов
// Возвращает список не найденных идентификаторов
...
...
@@ -90,40 +90,15 @@ class UniversalInterface
// ------------------------------------------------------
//! Получение состояния дискретного датчика
bool
getState
(
UniSetTypes
::
ObjectId
id
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
bool
getState
(
UniSetTypes
::
ObjectId
id
);
//! Получение состояния аналогового датчика
//! Получение состояния датчика
long
getValue
(
UniSetTypes
::
ObjectId
id
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
long
getValue
(
UniSetTypes
::
ObjectId
id
);
//! Вывод для дискретного датчика
void
setState
(
UniSetTypes
::
ObjectId
id
,
bool
state
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
void
setState
(
UniSetTypes
::
ObjectId
id
,
bool
state
);
void
setState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniSetTypes
::
ObjectId
supplier
);
//! Вывод для аналогового датчика
//! Выставление состояния датчика
void
setValue
(
UniSetTypes
::
ObjectId
id
,
long
value
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
void
setValue
(
UniSetTypes
::
ObjectId
id
,
long
value
);
void
setValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniSetTypes
::
ObjectId
supplier
);
//! Запись состояния дискретного датчика на удаленный контроллер
bool
saveState
(
UniSetTypes
::
ObjectId
id
,
bool
state
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
bool
saveState
(
UniSetTypes
::
ObjectId
id
,
bool
state
,
UniversalIO
::
IOTypes
type
);
bool
saveState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
supplier
);
//! Запись состояния аналогового датчика на удаленный контроллер
bool
saveValue
(
UniSetTypes
::
ObjectId
id
,
long
value
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
bool
saveValue
(
UniSetTypes
::
ObjectId
id
,
long
value
,
UniversalIO
::
IOTypes
type
);
bool
saveValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
supplier
);
// функции не вырабатывающие исключений...
void
fastSaveValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
supplier
);
void
fastSaveState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
supplier
);
void
fastSetState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniSetTypes
::
ObjectId
supplier
);
void
fastSetValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniSetTypes
::
ObjectId
supplier
);
// установка неопределённого состояния
...
...
@@ -141,18 +116,6 @@ class UniversalInterface
//! Заказ информации об изменении дискретного датчика
void
askRemoteState
(
UniSetTypes
::
ObjectId
id
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
node
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
)
throw
(
IO_THROW_EXCEPTIONS
);
void
askState
(
UniSetTypes
::
ObjectId
id
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
);
//! Заказ информации об изменении аналогового датчика
void
askRemoteValue
(
UniSetTypes
::
ObjectId
id
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
node
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
)
throw
(
IO_THROW_EXCEPTIONS
);
void
askValue
(
UniSetTypes
::
ObjectId
id
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
);
void
askThreshold
(
UniSetTypes
::
ObjectId
sensorId
,
UniSetTypes
::
ThresholdId
tid
,
UniversalIO
::
UIOCommand
cmd
,
CORBA
::
Long
lowLimit
=
0
,
CORBA
::
Long
hiLimit
=
0
,
CORBA
::
Long
sensibility
=
0
,
...
...
@@ -170,33 +133,14 @@ class UniversalInterface
void
askRemoteSensor
(
UniSetTypes
::
ObjectId
id
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
node
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
)
throw
(
IO_THROW_EXCEPTIONS
);
UniversalIO
::
IOType
getIOType
(
UniSetTypes
::
ObjectId
id
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
UniversalIO
::
IOType
getIOType
(
UniSetTypes
::
ObjectId
id
);
void
askOutput
(
UniSetTypes
::
ObjectId
id
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
);
void
askRemoteOutput
(
UniSetTypes
::
ObjectId
id
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
node
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
)
throw
(
IO_THROW_EXCEPTIONS
);
//! Заказ таймера
void
askTimer
(
UniSetTypes
::
TimerId
timerid
,
CORBA
::
Long
timeMS
,
CORBA
::
Short
ticks
=-
1
,
UniSetTypes
::
Message
::
Priority
piority
=
UniSetTypes
::
Message
::
High
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
)
throw
(
IO_THROW_EXCEPTIONS
);
//! Заказ сообщения
void
askMessage
(
UniSetTypes
::
MessageCode
mid
,
UniversalIO
::
UIOCommand
cmd
,
bool
ack
=
true
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
)
throw
(
IO_THROW_EXCEPTIONS
);
void
askMessageRange
(
UniSetTypes
::
MessageCode
from
,
UniSetTypes
::
MessageCode
to
,
UniversalIO
::
UIOCommand
cmd
,
bool
ack
=
true
,
UniSetTypes
::
ObjectId
backid
=
UniSetTypes
::
DefaultObjectId
)
throw
(
IO_THROW_EXCEPTIONS
);
UniversalIO
::
IOTypes
getIOType
(
UniSetTypes
::
ObjectId
id
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
UniversalIO
::
IOTypes
getIOType
(
UniSetTypes
::
ObjectId
id
);
UniSetTypes
::
ObjectType
getType
(
UniSetTypes
::
ObjectId
id
,
UniSetTypes
::
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
);
UniSetTypes
::
ObjectType
getType
(
UniSetTypes
::
ObjectId
id
);
// read from xml (only for xml!)
UniversalIO
::
IOType
s
getConfIOType
(
UniSetTypes
::
ObjectId
id
);
UniversalIO
::
IOType
getConfIOType
(
UniSetTypes
::
ObjectId
id
);
IOController_i
::
ShortIOInfo
getChangedTime
(
UniSetTypes
::
ObjectId
id
,
UniSetTypes
::
ObjectId
node
);
IOController_i
::
ShortMapSeq
*
getSensors
(
UniSetTypes
::
ObjectId
id
,
...
...
python/lib/pyUniSet/UConnector.cc
View file @
08e088e0
#include "UConnector.h"
#include "ORepHelpers.h"
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
using
namespace
std
;
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
UConnector
::
UConnector
(
UTypes
::
Params
*
p
,
const
char
*
xfile
)
throw
(
UException
)
:
conf
(
0
),
ui
(
0
),
...
...
@@ -42,7 +42,7 @@ xmlfile(xfile)
throw
UException
();
}
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
UConnector
::~
UConnector
()
{
delete
ui
;
...
...
@@ -54,34 +54,34 @@ const char* UConnector::getConfFileName()
// return xmlfile;
if
(
conf
)
return
conf
->
getConfFileName
().
c_str
();
return
""
;
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
long
UConnector
::
getValue
(
long
id
,
long
node
)
throw
(
UException
)
{
if
(
!
conf
||
!
ui
)
throw
USysError
();
if
(
node
==
UTypes
::
DefaultID
)
node
=
conf
->
getLocalNode
();
UniversalIO
::
IOType
s
t
=
conf
->
getIOType
(
id
);
UniversalIO
::
IOType
t
=
conf
->
getIOType
(
id
);
try
{
switch
(
t
)
{
case
UniversalIO
:
:
D
igitalInput
:
case
UniversalIO
:
:
D
igitalOutput
:
case
UniversalIO
:
:
D
I
:
case
UniversalIO
:
:
D
O
:
return
(
ui
->
getState
(
id
,
node
)
?
1
:
0
);
break
;
case
UniversalIO
:
:
A
nalogInput
:
case
UniversalIO
:
:
A
nalogOutput
:
case
UniversalIO
:
:
A
I
:
case
UniversalIO
:
:
A
O
:
return
ui
->
getValue
(
id
,
node
);
break
;
default
:
{
ostringstream
e
;
...
...
@@ -102,7 +102,7 @@ long UConnector::getValue( long id, long node )throw(UException)
{
throw
UException
(
"(getValue): catch..."
);
}
throw
UException
(
"(getValue): unknown error"
);
}
//---------------------------------------------------------------------------
...
...
@@ -110,32 +110,32 @@ void UConnector::setValue( long id, long val, long node )throw(UException)
{
if
(
!
conf
||
!
ui
)
throw
USysError
();
if
(
node
==
UTypes
::
DefaultID
)
node
=
conf
->
getLocalNode
();
UniversalIO
::
IOType
s
t
=
conf
->
getIOType
(
id
);
UniversalIO
::
IOType
t
=
conf
->
getIOType
(
id
);
try
{
switch
(
t
)
{
case
UniversalIO
:
:
D
igitalInput
:
case
UniversalIO
:
:
D
I
:
ui
->
saveState
(
id
,
val
,
t
,
node
);
break
;
case
UniversalIO
:
:
D
igitalOutput
:
case
UniversalIO
:
:
D
O
:
ui
->
setState
(
id
,
val
,
node
);
break
;
case
UniversalIO
:
:
A
nalogInput
:
case
UniversalIO
:
:
A
I
:
ui
->
saveValue
(
id
,
val
,
t
,
node
);
break
;
case
UniversalIO
:
:
A
nalogOutput
:
case
UniversalIO
:
:
A
O
:
ui
->
setValue
(
id
,
val
,
node
);
break
;
default
:
{
ostringstream
e
;
...
...
@@ -162,7 +162,7 @@ long UConnector::getSensorID( const char* name )
{
if
(
conf
)
return
conf
->
getSensorID
(
name
);
return
UTypes
::
DefaultID
;
}
//---------------------------------------------------------------------------
...
...
@@ -170,7 +170,7 @@ long UConnector::getNodeID( const char* name )
{
if
(
conf
)
return
conf
->
getNodeID
(
name
);
return
UTypes
::
DefaultID
;
}
//---------------------------------------------------------------------------
...
...
@@ -178,7 +178,7 @@ const char* UConnector::getName( long id )
{
if
(
conf
)
return
conf
->
oind
->
getMapName
(
id
).
c_str
();
return
""
;
}
//---------------------------------------------------------------------------
...
...
@@ -186,7 +186,7 @@ const char* UConnector::getShortName( long id )
{
if
(
conf
)
return
ORepHelpers
::
getShortName
(
conf
->
oind
->
getMapName
(
id
)).
c_str
();
return
""
;
}
//---------------------------------------------------------------------------
...
...
@@ -194,7 +194,7 @@ const char* UConnector::getTextName( long id )
{
if
(
conf
)
return
conf
->
oind
->
getTextName
(
id
).
c_str
();
return
""
;
}
//---------------------------------------------------------------------------
python/lib/pyUniSet/UInterface.cc
View file @
08e088e0
...
...
@@ -38,22 +38,22 @@ long UInterface::getValue( long id )throw(UException)
{
if
(
!
UniSetTypes
::
conf
||
!
ui
)
throw
USysError
();
UniversalIO
::
IOType
s
t
=
UniSetTypes
::
conf
->
getIOType
(
id
);
UniversalIO
::
IOType
t
=
UniSetTypes
::
conf
->
getIOType
(
id
);
try
{
switch
(
t
)
{
case
UniversalIO
:
:
D
igitalInput
:
case
UniversalIO
:
:
D
igitalOutput
:
case
UniversalIO
:
:
D
I
:
case
UniversalIO
:
:
D
O
:
return
(
ui
->
getState
(
id
)
?
1
:
0
);
break
;
case
UniversalIO
:
:
A
nalogInput
:
case
UniversalIO
:
:
A
nalogOutput
:
case
UniversalIO
:
:
A
I
:
case
UniversalIO
:
:
A
O
:
return
ui
->
getValue
(
id
);
break
;
default
:
{
ostringstream
e
;
...
...
@@ -74,7 +74,7 @@ long UInterface::getValue( long id )throw(UException)
{
throw
UException
(
"(getValue): catch..."
);
}
throw
UException
(
"(getValue): unknown error"
);
}
//---------------------------------------------------------------------------
...
...
@@ -82,28 +82,28 @@ void UInterface::setValue( long id, long val )throw(UException)
{
if
(
!
UniSetTypes
::
conf
||
!
ui
)
throw
USysError
();
UniversalIO
::
IOType
s
t
=
UniSetTypes
::
conf
->
getIOType
(
id
);
UniversalIO
::
IOType
t
=
UniSetTypes
::
conf
->
getIOType
(
id
);
try
{
switch
(
t
)
{
case
UniversalIO
:
:
D
igitalInput
:
case
UniversalIO
:
:
D
I
:
ui
->
saveState
(
id
,
val
,
t
);
break
;
case
UniversalIO
:
:
D
igitalOutput
:
case
UniversalIO
:
:
D
O
:
ui
->
setState
(
id
,
val
);
break
;
case
UniversalIO
:
:
A
nalogInput
:
case
UniversalIO
:
:
A
I
:
ui
->
saveValue
(
id
,
val
,
t
);
break
;
case
UniversalIO
:
:
A
nalogOutput
:
case
UniversalIO
:
:
A
O
:
ui
->
setValue
(
id
,
val
);
break
;
default
:
{
ostringstream
e
;
...
...
@@ -130,7 +130,7 @@ long UInterface::getSensorID( const char* name )
{
if
(
UniSetTypes
::
conf
)
return
UniSetTypes
::
conf
->
getSensorID
(
name
);
return
-
1
;
}
//---------------------------------------------------------------------------
...
...
@@ -138,7 +138,7 @@ const char* UInterface::getName( long id )
{
if
(
UniSetTypes
::
conf
)
return
UniSetTypes
::
conf
->
oind
->
getMapName
(
id
).
c_str
();
return
""
;
}
//---------------------------------------------------------------------------
...
...
@@ -146,7 +146,7 @@ const char* UInterface::getShortName( long id )
{
if
(
UniSetTypes
::
conf
)
return
ORepHelpers
::
getShortName
(
UniSetTypes
::
conf
->
oind
->
getMapName
(
id
)).
c_str
();
return
""
;
}
//---------------------------------------------------------------------------
...
...
@@ -154,7 +154,7 @@ const char* UInterface::getTextName( long id )
{
if
(
UniSetTypes
::
conf
)
return
UniSetTypes
::
conf
->
oind
->
getTextName
(
id
).
c_str
();
return
""
;
}
//---------------------------------------------------------------------------
...
...
@@ -162,7 +162,7 @@ const char* UInterface::getConfFileName()
{
if
(
UniSetTypes
::
conf
)
return
UniSetTypes
::
conf
->
getConfFileName
().
c_str
();
return
""
;
}
...
...
python/lib/pyUniSet/UModbus.cc
View file @
08e088e0
...
...
@@ -226,8 +226,8 @@ long UModbus::data2value( VTypes::VType vtype, ModbusRTU::ModbusData* data )
if( p->rnum <= 1 )
{
if( p->stype == UniversalIO::D
igitalInput
||
p->stype == UniversalIO::D
igitalOutput
)
if( p->stype == UniversalIO::D
I
||
p->stype == UniversalIO::D
O
)
{
IOBase::processingAsDI( p, data[0], shm, force );
}
...
...
src/Interfaces/UniversalInterface.cc
View file @
08e088e0
...
...
@@ -109,110 +109,13 @@ void UniversalInterface::initBackId( UniSetTypes::ObjectId backid )
myid
=
backid
;
}
// ------------------------------------------------------------------------------------------------------------
/*
* \param id - идентификатор датчика
*═\return текущее состояние датчика
* \exception IOBadParam - генерируется если указано неправильное имя датчика или секции
* \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ
*/
bool
UniversalInterface
::
getState
(
ObjectId
name
,
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
name
==
DefaultObjectId
)
throw
ORepFailed
(
"UI(getState): error: getState for id=UniSetTypes::DefaultObjectId ?!"
);
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
name
,
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
name
,
node
);
IOController_i_var
iom
=
IOController_i
::
_narrow
(
oref
);
IOController_i
::
SensorInfo_var
si
;
si
->
id
=
name
;
si
->
node
=
node
;
return
iom
->
getState
(
si
);
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
NameNotFound
(
"UI(getState): "
+
string
(
ex
.
err
));
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(getState): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(getState): ORepFailed "
,
name
,
node
));
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(getState): method no implemented"
,
name
,
node
));
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(getState): object not exist"
,
name
,
node
));
}
catch
(
CORBA
::
COMM_FAILURE
&
ex
)
{
// ошибка системы коммуникации
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(getState): CORBA::SystemException" << endl;
}
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(getState): TimeOut "
,
name
,
node
));
}
bool
UniversalInterface
::
getState
(
ObjectId
name
)
{
return
getState
(
name
,
uconf
->
getLocalNode
()
);
}
// ---------------------------------------------------------------------
/*!
* \param name - полное имя аналогового датчика
* \sa UniversalInterface::getValue( ObjectId id )
*/
/*
long UniversalInterface::getValue(const string name, const string node="NameService")throw(TimeOut,IOBadParam)
{
return getValue(oind->getIdByName(name.c_str()));
}
*/
/*!
* \param id - идентификатор датчика
*═\return текущее значение датчика
* \exception IOBadParam - генерируется если указано неправильное имя датчика или секции
* \exception IOTimeOut - генерируется если в течение времени timeout небыл получен ответ
*/
long
UniversalInterface
::
getValue
(
ObjectId
name
,
ObjectId
node
)
long
UniversalInterface
::
getValue
(
ObjectId
name
,
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
name
==
DefaultObjectId
)
...
...
@@ -294,188 +197,6 @@ long UniversalInterface::getValue( ObjectId name )
// ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
* \param state - состояние в которое его необходимо перевести
*═\return текущее значение датчика
* \exception IOBadParam - генерируется если указано неправильное имя вывода или секции
*/
void
UniversalInterface
::
setState
(
ObjectId
name
,
bool
state
,
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
name
==
DefaultObjectId
)
throw
ORepFailed
(
"UI(setState): error id=UniSetTypes::DefaultObjectId"
);
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
name
,
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
name
,
node
);
IOController_i_var
iom
=
IOController_i
::
_narrow
(
oref
);
IOController_i
::
SensorInfo_var
si
;
si
->
id
=
name
;
si
->
node
=
node
;
iom
->
setState
(
si
,
state
,
myid
);
return
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
NameNotFound
(
set_err
(
"UI(setState):"
+
string
(
ex
.
err
),
name
,
node
)
);
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(setState): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
name
,
node
);
// не смогли получить ссылку на объект
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(setState): ORepFailed"
,
name
,
node
));
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(setState): method no implement"
,
name
,
node
));
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(setState): object not exist"
,
name
,
node
));
}
catch
(
CORBA
::
COMM_FAILURE
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(setState): CORBA::COMM_FAILURE " << endl;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(setState): CORBA::SystemException" << endl;
}
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(setState): TimeOut"
,
name
,
node
));
}
void
UniversalInterface
::
setState
(
ObjectId
name
,
bool
state
)
{
setState
(
name
,
state
,
uconf
->
getLocalNode
());
}
void
UniversalInterface
::
setState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniSetTypes
::
ObjectId
supplier
)
{
ObjectId
old
=
myid
;
try
{
myid
=
supplier
;
setState
(
si
.
id
,
state
,
si
.
node
);
}
catch
(...)
{
myid
=
old
;
throw
;
}
myid
=
old
;
}
// ------------------------------------------------------------------------------------------------------------
// функция не вырабатывает исключений!
void
UniversalInterface
::
fastSetState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
si
.
id
==
DefaultObjectId
)
{
unideb
[
Debug
::
WARN
]
<<
"UI(fastSetState): ID=UniSetTypes::DefaultObjectId"
<<
endl
;
return
;
}
if
(
sup_id
==
DefaultObjectId
)
sup_id
=
myid
;
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
si
.
id
,
si
.
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
si
.
id
,
si
.
node
);
IOController_i_var
iom
=
IOController_i
::
_narrow
(
oref
);
iom
->
fastSetState
(
si
,
state
,
sup_id
);
return
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSetState):"
+
string
(
ex
.
err
),
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(fastSetState): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
// не смогли получить ссылку на объект
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSetState): resolve failed"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSetState): method no implement"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSetState): object not exist"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
COMM_FAILURE
){}
catch
(
CORBA
::
SystemException
&
ex
){}
catch
(...){}
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSetState): Timeout"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
// ------------------------------------------------------------------------------------------------------------
void
UniversalInterface
::
setUndefinedState
(
IOController_i
::
SensorInfo
&
si
,
bool
undefined
,
UniSetTypes
::
ObjectId
sup_id
)
{
...
...
@@ -740,35 +461,22 @@ void UniversalInterface::fastSetValue( IOController_i::SensorInfo& si, long valu
// ------------------------------------------------------------------------------------------------------------
/*!
* \param name - имя дискретного датчика
* \param fromName - имя объекта(заказчика) кому присылать сообщение об изменении
* \sa UniversalInterface::askState( ObjectId id, ObjectId backid, UniversalIO::UIOCommand cmd)
*/
/*
void UniversalInterface::askState(const string name, const string fromName, UniversalIO::UIOCommand cmd)
throw(TimeOut,IOBadParam)
{
askState( oind->getIdByName(name.c_str()), oind->getIdByName(fromName.c_str()), cmd);
}
*/
/*!
* \param sensor - идентификатор датчика
* \param node - идентификатор узла на котором заказывается датчик
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика)
*/
void
UniversalInterface
::
askRemoteS
tate
(
ObjectId
name
,
UniversalIO
::
UIOCommand
cmd
,
ObjectId
node
,
void
UniversalInterface
::
askRemoteS
ensor
(
ObjectId
name
,
UniversalIO
::
UIOCommand
cmd
,
ObjectId
node
,
UniSetTypes
::
ObjectId
backid
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
backid
==
UniSetTypes
::
DefaultObjectId
)
backid
=
myid
;
if
(
backid
==
UniSetTypes
::
DefaultObjectId
)
throw
UniSetTypes
::
IOBadParam
(
"UI(askRemoteS
tate): U
nknown back ID"
);
throw
UniSetTypes
::
IOBadParam
(
"UI(askRemoteS
ensor): u
nknown back ID"
);
if
(
name
==
DefaultObjectId
)
throw
ORepFailed
(
"UI(askRemoteS
tate
): id=UniSetTypes::DefaultObjectId"
);
throw
ORepFailed
(
"UI(askRemoteS
ensor
): id=UniSetTypes::DefaultObjectId"
);
try
{
...
...
@@ -794,7 +502,7 @@ void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand
ConsumerInfo_var
ci
;
ci
->
id
=
backid
;
ci
->
node
=
uconf
->
getLocalNode
();
inc
->
askS
tate
(
si
,
ci
,
cmd
);
inc
->
askS
ensor
(
si
,
ci
,
cmd
);
return
;
}
catch
(
CORBA
::
TRANSIENT
){}
...
...
@@ -808,371 +516,55 @@ void UniversalInterface::askRemoteState( ObjectId name, UniversalIO::UIOCommand
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
NameNotFound
(
"UI(askS
tate
): "
+
string
(
ex
.
err
)
);
throw
UniSetTypes
::
NameNotFound
(
"UI(askS
ensor
): "
+
string
(
ex
.
err
)
);
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(askS
tate
): "
+
string
(
ex
.
err
));
throw
UniSetTypes
::
IOBadParam
(
"UI(askS
ensor
): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
name
,
node
);
// не смогли получить ссылку на объект
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askS
tate
): resolve failed "
,
name
,
node
));
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askS
ensor
): resolve failed "
,
name
,
node
));
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askS
tate
): method no implement"
,
name
,
node
));
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askS
ensor
): method no implement"
,
name
,
node
));
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askS
tate
): object not exist"
,
name
,
node
));
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askS
ensor
): object not exist"
,
name
,
node
));
}
catch
(
CORBA
::
COMM_FAILURE
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askS
tate
): ошибка системы коммуникации" << endl;
// unideb[Debug::WARN] << "UI(askS
ensor
): ошибка системы коммуникации" << endl;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askS
tate
): CORBA::SystemException" << endl;
// unideb[Debug::WARN] << "UI(askS
ensor
): CORBA::SystemException" << endl;
}
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(askS
tate
): Timeout"
,
name
,
node
));
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(askS
ensor
): Timeout"
,
name
,
node
));
}
void
UniversalInterface
::
askS
tate
(
ObjectId
name
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
backid
)
void
UniversalInterface
::
askS
ensor
(
ObjectId
name
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
backid
)
{
askRemoteS
tate
(
name
,
cmd
,
uconf
->
getLocalNode
(),
backid
);
askRemoteS
ensor
(
name
,
cmd
,
uconf
->
getLocalNode
(),
backid
);
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param sensor - идентификатор датчика
* \param node - идентификатор узла на котором заказывается датчик
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика)
* \param name - идентификатор объекта
* \param node - идентификатор узла
*/
void
UniversalInterface
::
askRemoteSensor
(
ObjectId
name
,
UniversalIO
::
UIOCommand
cmd
,
ObjectId
node
,
UniSetTypes
::
ObjectId
backid
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
backid
==
UniSetTypes
::
DefaultObjectId
)
backid
=
myid
;
if
(
backid
==
UniSetTypes
::
DefaultObjectId
)
throw
UniSetTypes
::
IOBadParam
(
"UI(askRemoteSensor): unknown back ID"
);
if
(
name
==
DefaultObjectId
)
throw
ORepFailed
(
"UI(askRemoteSensor): id=UniSetTypes::DefaultObjectId"
);
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
name
,
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
name
,
node
);
IONotifyController_i_var
inc
=
IONotifyController_i
::
_narrow
(
oref
);
IOController_i
::
SensorInfo_var
si
;
si
->
id
=
name
;
si
->
node
=
node
;
ConsumerInfo_var
ci
;
ci
->
id
=
backid
;
ci
->
node
=
uconf
->
getLocalNode
();
inc
->
askSensor
(
si
,
ci
,
cmd
);
return
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
NameNotFound
(
"UI(askSensor): "
+
string
(
ex
.
err
)
);
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(askSensor): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
name
,
node
);
// не смогли получить ссылку на объект
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askSensor): resolve failed "
,
name
,
node
));
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askSensor): method no implement"
,
name
,
node
));
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askSensor): object not exist"
,
name
,
node
));
}
catch
(
CORBA
::
COMM_FAILURE
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askSensor): ошибка системы коммуникации" << endl;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askSensor): CORBA::SystemException" << endl;
}
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(askSensor): Timeout"
,
name
,
node
));
}
void
UniversalInterface
::
askSensor
(
ObjectId
name
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
backid
)
{
askRemoteSensor
(
name
,
cmd
,
uconf
->
getLocalNode
(),
backid
);
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param name - имя аналогового датчика
* \param fromName - имя объекта(заказчика) кому присылать сообщение об изменении
* \sa UniversalInterface::askValue( ObjectId id, ObjectId backid, UniversalIO::UIOCommand cmd)
*/
/*
void UniversalInterface::askValue(const string name, const string fromName, UniversalIO::UIOCommand cmd)
throw(TimeOut,IOBadParam)
{
askValue(oind->getIdByName(name.c_str()),oind->getIdByName(fromName.c_str()), cmd);
}
*/
/*!
* \param id - идентификатор датчика
* \param backid - идентификатор заказчика, кому присылать сообщение об изменении
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика)
* \exception IOBadParam - генерируется если указано неправильное имя вывода или секции
* \exception TimeOut - генерируется если нет связи объектом отвечающим за инф-ию об этом датчике
*/
void
UniversalInterface
::
askRemoteValue
(
ObjectId
sensid
,
UniversalIO
::
UIOCommand
cmd
,
ObjectId
node
,
UniSetTypes
::
ObjectId
backid
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
backid
==
UniSetTypes
::
DefaultObjectId
)
backid
=
myid
;
if
(
backid
==
UniSetTypes
::
DefaultObjectId
)
throw
UniSetTypes
::
IOBadParam
(
"UI(askRemoteValue): unknown back ID"
);
if
(
sensid
==
DefaultObjectId
)
throw
ORepFailed
(
"UI(askRemoteValue): id=UniSetTypes::DefaultObjectId"
);
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
sensid
,
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
sensid
,
node
);
IONotifyController_i_var
inc
=
IONotifyController_i
::
_narrow
(
oref
);
IOController_i
::
SensorInfo_var
si
;
si
->
id
=
sensid
;
si
->
node
=
node
;
ConsumerInfo_var
ci
;
ci
->
id
=
backid
;
ci
->
node
=
uconf
->
getLocalNode
();
inc
->
askValue
(
si
,
ci
,
cmd
);
return
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
NameNotFound
(
"UI(askValue): "
+
string
(
ex
.
err
));
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(askValue): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askValue): resolve failed "
,
sensid
,
node
));
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askValue): method no implement"
,
sensid
,
node
));
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askValue): object not exist"
,
sensid
,
node
));
}
catch
(
CORBA
::
COMM_FAILURE
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askValue): ошибка системы коммуникации" << endl;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askValue): CORBA::SystemException" << endl;
}
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(askValue): Timeout"
,
sensid
,
node
));
}
void
UniversalInterface
::
askValue
(
ObjectId
name
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
backid
)
{
askRemoteValue
(
name
,
cmd
,
uconf
->
getLocalNode
(),
backid
);
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
* \param backid - идентификатор заказчика, кому присылать сообщение об изменении
* \param cmd - команда см. \ref UniversalIO::UIOCommand
* \param backid - обратный адрес (идентификатор заказчика)
* \exception IOBadParam - генерируется если указано неправильное имя вывода или секции
* \exception TimeOut - генерируется если нет связи объектом отвечающим за инф-ию об этом датчике
*/
void
UniversalInterface
::
askRemoteOutput
(
ObjectId
sensid
,
UniversalIO
::
UIOCommand
cmd
,
ObjectId
node
,
UniSetTypes
::
ObjectId
backid
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
backid
==
UniSetTypes
::
DefaultObjectId
)
backid
=
myid
;
if
(
backid
==
UniSetTypes
::
DefaultObjectId
)
throw
UniSetTypes
::
IOBadParam
(
"UI(askRemoteOutput): unknown back ID"
);
if
(
sensid
==
DefaultObjectId
)
throw
ORepFailed
(
"UI(askRemoteOutput): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId"
);
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
sensid
,
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
sensid
,
node
);
IONotifyController_i_var
inc
=
IONotifyController_i
::
_narrow
(
oref
);
IOController_i
::
SensorInfo_var
si
;
si
->
id
=
sensid
;
si
->
node
=
node
;
ConsumerInfo_var
ci
;
ci
->
id
=
backid
;
ci
->
node
=
uconf
->
getLocalNode
();
inc
->
askOutput
(
si
,
ci
,
cmd
);
return
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
NameNotFound
(
"UI(askOutput): "
+
string
(
ex
.
err
));
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(askOutput): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askOutput): resolve failed "
,
sensid
,
node
));
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askOutput): method no implement"
,
sensid
,
node
));
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(askOutput): object not exist"
,
sensid
,
node
));
}
catch
(
CORBA
::
COMM_FAILURE
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askOutput): ошибка системы коммуникации" << endl;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(askOutput): CORBA::SystemException" << endl;
}
rcache
.
erase
(
sensid
,
node
);
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(askOutput): Timeout"
,
sensid
,
node
));
}
// ------------------------------------------------------------------------------------------------------------
void
UniversalInterface
::
askOutput
(
ObjectId
name
,
UniversalIO
::
UIOCommand
cmd
,
UniSetTypes
::
ObjectId
backid
)
{
askRemoteOutput
(
name
,
cmd
,
uconf
->
getLocalNode
(),
backid
);
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param name - идентификатор объекта
* \param node - идентификатор узла
*/
IOTypes
UniversalInterface
::
getIOType
(
ObjectId
name
,
ObjectId
node
)
IOType
UniversalInterface
::
getIOType
(
ObjectId
name
,
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
name
==
DefaultObjectId
)
...
...
@@ -1248,7 +640,7 @@ IOTypes UniversalInterface::getIOType(ObjectId name, ObjectId node)
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(getIOType): Timeout"
,
name
,
node
));
}
IOType
s
UniversalInterface
::
getIOType
(
ObjectId
name
)
IOType
UniversalInterface
::
getIOType
(
ObjectId
name
)
{
return
getIOType
(
name
,
uconf
->
getLocalNode
()
);
}
...
...
@@ -1626,383 +1018,6 @@ void UniversalInterface::send( ObjectId name, TransportMessage& msg )
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
* \param node - идентификатор узла
* \param type - тип датчика
* \param value - значение которое необходимо установить
*/
bool
UniversalInterface
::
saveValue
(
ObjectId
name
,
long
value
,
IOTypes
type
,
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
name
==
DefaultObjectId
)
throw
ORepFailed
(
"UI(saveValue): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId"
);
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
name
,
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
name
,
node
);
IOController_i_var
iom
=
IOController_i
::
_narrow
(
oref
);
IOController_i
::
SensorInfo_var
si
;
si
->
id
=
name
;
si
->
node
=
node
;
iom
->
saveValue
(
si
,
value
,
type
,
myid
);
return
true
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
NameNotFound
(
"UI(saveValue): "
+
string
(
ex
.
err
));
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(saveValue): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(saveValue): resolve failed "
,
name
,
node
));
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(saveValue): method no implement"
,
name
,
node
));
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(saveValue): object not exist"
,
name
,
node
));
}
catch
(
CORBA
::
COMM_FAILURE
&
ex
)
{
// ошибка системы коммуникации
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveValue): CORBA::SystemException" << endl;
}
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(saveValue): Timeout"
,
name
,
node
));
}
bool
UniversalInterface
::
saveValue
(
ObjectId
name
,
long
value
,
IOTypes
type
)
{
return
saveValue
(
name
,
value
,
type
,
uconf
->
getLocalNode
()
);
}
// ------------------------------------------------------------------------------------------------------------
bool
UniversalInterface
::
saveValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
supplier
)
{
ObjectId
old
=
myid
;
bool
res
(
false
);
try
{
myid
=
supplier
;
res
=
saveValue
(
si
.
id
,
value
,
type
,
si
.
node
);
}
catch
(...)
{
myid
=
old
;
throw
;
}
myid
=
old
;
return
res
;
}
// ------------------------------------------------------------------------------------------------------------
void
UniversalInterface
::
fastSaveValue
(
IOController_i
::
SensorInfo
&
si
,
long
value
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
supplier
)
{
if
(
si
.
id
==
DefaultObjectId
)
{
unideb
[
Debug
::
WARN
]
<<
"UI(fastSaveValue): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId"
<<
endl
;
return
;
}
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
si
.
id
,
si
.
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
si
.
id
,
si
.
node
);
IOController_i_var
iom
=
IOController_i
::
_narrow
(
oref
);
iom
->
fastSaveValue
(
si
,
value
,
type
,
supplier
);
return
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
"UI(saveValue): "
<<
ex
.
err
<<
endl
;
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(saveValue): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSaveValue): resolve failed "
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSaveValue): method no implement"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSaveValue): object not exist"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
COMM_FAILURE
&
ex
)
{
// ошибка системы коммуникации
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveValue): CORBA::SystemException" << endl;
}
catch
(...){}
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(saveValue): Timeout"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
// ------------------------------------------------------------------------------------------------------------
/*!
* \param id - идентификатор датчика
* \param state - состояние в которое его необходимо перевести
* \param type - тип датчика
* \param node - идентификатор узла
*/
bool
UniversalInterface
::
saveState
(
ObjectId
name
,
bool
state
,
IOTypes
type
,
ObjectId
node
)
throw
(
IO_THROW_EXCEPTIONS
)
{
if
(
name
==
DefaultObjectId
)
throw
ORepFailed
(
"UI(saveState): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId"
);
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
name
,
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
name
,
node
);
IOController_i_var
iom
=
IOController_i
::
_narrow
(
oref
);
IOController_i
::
SensorInfo_var
si
;
si
->
id
=
name
;
si
->
node
=
node
;
iom
->
saveState
(
si
,
state
,
type
,
myid
);
return
true
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
NameNotFound
(
"UI(saveState): "
+
string
(
ex
.
err
));
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(saveState): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(saveState): resolve failed "
,
name
,
node
));
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(saveState): method no implement"
,
name
,
node
));
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
IOBadParam
(
set_err
(
"UI(saveState): object not exist"
,
name
,
node
));
}
catch
(
CORBA
::
COMM_FAILURE
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveState): CORBA::COMM_FAILURE " << endl;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveState): CORBA::SystemException" << endl;
}
rcache
.
erase
(
name
,
node
);
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(saveState): Timeout"
,
name
,
node
));
}
bool
UniversalInterface
::
saveState
(
ObjectId
name
,
bool
state
,
IOTypes
type
)
{
return
saveState
(
name
,
state
,
type
,
uconf
->
getLocalNode
()
);
}
// ------------------------------------------------------------------------------------------------------------
bool
UniversalInterface
::
saveState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
supplier
)
{
ObjectId
old
=
myid
;
bool
res
(
false
);
try
{
myid
=
supplier
;
res
=
saveState
(
si
.
id
,
state
,
type
,
si
.
node
);
}
catch
(...)
{
myid
=
old
;
throw
;
}
myid
=
old
;
return
res
;
}
// ------------------------------------------------------------------------------------------------------------
void
UniversalInterface
::
fastSaveState
(
IOController_i
::
SensorInfo
&
si
,
bool
state
,
UniversalIO
::
IOTypes
type
,
UniSetTypes
::
ObjectId
supplier
)
{
if
(
si
.
id
==
DefaultObjectId
)
{
unideb
[
Debug
::
WARN
]
<<
"UI(fastSaveState): попытка обратиться к объекту с id=UniSetTypes::DefaultObjectId"
<<
endl
;
return
;
}
try
{
CORBA
::
Object_var
oref
;
try
{
oref
=
rcache
.
resolve
(
si
.
id
,
si
.
node
);
}
catch
(
NameNotFound
){}
for
(
unsigned
int
i
=
0
;
i
<
uconf
->
getRepeatCount
();
i
++
)
{
try
{
if
(
CORBA
::
is_nil
(
oref
)
)
oref
=
resolve
(
si
.
id
,
si
.
node
);
IOController_i_var
iom
=
IOController_i
::
_narrow
(
oref
);
iom
->
fastSaveState
(
si
,
state
,
type
,
supplier
);
return
;
}
catch
(
CORBA
::
TRANSIENT
){}
catch
(
CORBA
::
OBJECT_NOT_EXIST
){}
catch
(
CORBA
::
SystemException
&
ex
){}
msleep
(
uconf
->
getRepeatTimeout
());
oref
=
CORBA
::
Object
::
_nil
();
}
}
catch
(
UniSetTypes
::
TimeOut
){}
catch
(
IOController_i
::
NameNotFound
&
ex
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
"UI(fastSaveState): "
<<
ex
.
err
<<
endl
;
}
catch
(
IOController_i
::
IOBadParam
&
ex
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
throw
UniSetTypes
::
IOBadParam
(
"UI(fastSaveState): "
+
string
(
ex
.
err
));
}
catch
(
ORepFailed
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSaveState): resolve failed "
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
NO_IMPLEMENT
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSaveState): method no implement"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
OBJECT_NOT_EXIST
)
{
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSaveState): object not exist"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
catch
(
CORBA
::
COMM_FAILURE
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveState): CORBA::COMM_FAILURE " << endl;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
// ошибка системы коммуникации
// unideb[Debug::WARN] << "UI(saveState): CORBA::SystemException" << endl;
}
catch
(...){}
rcache
.
erase
(
si
.
id
,
si
.
node
);
unideb
[
Debug
::
WARN
]
<<
set_err
(
"UI(fastSaveState): Timeout"
,
si
.
id
,
si
.
node
)
<<
endl
;
}
// ------------------------------------------------------------------------------------------------------------
IOController_i
::
ShortIOInfo
UniversalInterface
::
getChangedTime
(
UniSetTypes
::
ObjectId
id
,
UniSetTypes
::
ObjectId
node
)
{
if
(
id
==
DefaultObjectId
)
...
...
@@ -2545,10 +1560,10 @@ IOController_i::CalibrateInfo UniversalInterface::getCalibrateInfo( const IOCont
throw
UniSetTypes
::
TimeOut
(
set_err
(
"UI(getCalibrateInfo): Timeout"
,
si
.
id
,
si
.
node
));
}
// --------------------------------------------------------------------------------------------
IOController_i
::
A
SensorInfoSeq_var
UniversalInterface
::
getSensorSeq
(
UniSetTypes
::
IDList
&
lst
)
IOController_i
::
SensorInfoSeq_var
UniversalInterface
::
getSensorSeq
(
UniSetTypes
::
IDList
&
lst
)
{
if
(
lst
.
size
()
==
0
)
return
IOController_i
::
A
SensorInfoSeq_var
();
return
IOController_i
::
SensorInfoSeq_var
();
ObjectId
sid
=
lst
.
getFirst
();
...
...
@@ -2897,7 +1912,7 @@ bool UniversalInterface::waitWorking( UniSetTypes::ObjectId id, int msec, int pm
}
// -----------------------------------------------------------------------------
UniversalIO
::
IOType
s
UniversalInterface
::
getConfIOType
(
UniSetTypes
::
ObjectId
id
)
UniversalIO
::
IOType
UniversalInterface
::
getConfIOType
(
UniSetTypes
::
ObjectId
id
)
{
if
(
!
conf
)
return
UniversalIO
::
UnknownIOType
;
...
...
src/ObjectRepository/UniSetObject.cc
View file @
08e088e0
...
...
@@ -241,9 +241,6 @@ struct MsgInfo
MsgInfo
()
:
type
(
Message
::
Unused
),
id
(
DefaultObjectId
),
acode
(
DefaultMessageCode
),
ccode
(
DefaultMessageCode
),
ch
(
0
),
node
(
DefaultObjectId
)
{
// struct timezone tz;
...
...
@@ -254,9 +251,6 @@ struct MsgInfo
int
type
;
ObjectId
id
;
// от кого
MessageCode
acode
;
// код сообщения
MessageCode
ccode
;
// код причины
int
ch
;
// характер
struct
timeval
tm
;
// время
ObjectId
node
;
// откуда
...
...
@@ -271,12 +265,6 @@ struct MsgInfo
if
(
node
!=
mi
.
node
)
return
node
<
mi
.
node
;
if
(
acode
!=
mi
.
acode
)
return
acode
<
mi
.
acode
;
if
(
ch
!=
mi
.
ch
)
return
ch
<
mi
.
ch
;
if
(
tm
.
tv_sec
!=
mi
.
tm
.
tv_sec
)
return
tm
.
tv_sec
<
mi
.
tm
.
tv_sec
;
...
...
src/ObjectRepository/UniSetTypes.cc
View file @
08e088e0
...
...
@@ -313,16 +313,16 @@ using namespace UniSetTypes;
// ------------------------------------------------------------------------------------------
std
::
ostream
&
UniSetTypes
::
operator
<<
(
std
::
ostream
&
os
,
const
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
A
nalogInput
)
if
(
t
==
UniversalIO
::
A
I
)
return
os
<<
"AI"
;
if
(
t
==
UniversalIO
::
D
igitalInput
)
if
(
t
==
UniversalIO
::
D
I
)
return
os
<<
"DI"
;
if
(
t
==
UniversalIO
::
A
nalogOutput
)
if
(
t
==
UniversalIO
::
A
O
)
return
os
<<
"AO"
;
if
(
t
==
UniversalIO
::
D
igitalOutput
)
if
(
t
==
UniversalIO
::
D
O
)
return
os
<<
"DO"
;
return
os
<<
"UnknownIOType"
;
...
...
@@ -351,3 +351,4 @@ using namespace UniSetTypes;
return
true
;
}
// ------------------------------------------------------------------------------------------
src/Processes/IOController.cc
View file @
08e088e0
...
...
@@ -33,25 +33,23 @@ using namespace UniversalIO;
using
namespace
std
;
// ------------------------------------------------------------------------------------------
IOController
::
IOController
()
:
dioMutex
(
"d
ioMutex"
),
aioMutex
(
"aioMutex"
)
ioMutex
(
"
ioMutex"
),
isPingDBServer
(
true
)
{
}
// ------------------------------------------------------------------------------------------
IOController
::
IOController
(
const
string
name
,
const
string
section
)
:
IOController
::
IOController
(
const
string
name
,
const
string
section
)
:
ObjectsManager
(
name
,
section
),
dioMutex
(
name
+
"_dioMutex"
),
aioMutex
(
name
+
"_aioMutex"
),
ioMutex
(
name
+
"_ioMutex"
),
isPingDBServer
(
true
)
{
}
IOController
::
IOController
(
ObjectId
id
)
:
IOController
::
IOController
(
ObjectId
id
)
:
ObjectsManager
(
id
),
dioMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_dioMutex"
),
aioMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_aioMutex"
),
ioMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_ioMutex"
),
isPingDBServer
(
true
)
{
}
...
...
@@ -77,28 +75,13 @@ bool IOController::disactivateObject()
// ------------------------------------------------------------------------------------------
void
IOController
::
sensorsUnregistration
()
{
// Разрегистрируем дискретные датчики
for
(
DIOStateList
::
iterator
li
=
dioList
.
begin
();
li
!=
dioList
.
end
();
++
li
)
{
try
{
sUnRegistration
(
li
->
second
.
si
);
}
catch
(
Exception
&
ex
)
{
unideb
[
Debug
::
CRIT
]
<<
myname
<<
"(sensorsUnregistration): "
<<
ex
<<
endl
;
}
catch
(...){}
}
// Разрегистрируем аналоговые датчики
for
(
AIOStateList
::
iterator
li
=
a
ioList
.
begin
();
li
!=
a
ioList
.
end
();
++
li
)
for
(
IOStateList
::
iterator
li
=
ioList
.
begin
();
li
!=
ioList
.
end
();
++
li
)
{
try
{
s
UnRegistration
(
li
->
second
.
si
);
io
UnRegistration
(
li
->
second
.
si
);
}
catch
(
Exception
&
ex
)
{
...
...
@@ -109,67 +92,19 @@ void IOController::sensorsUnregistration()
}
// ------------------------------------------------------------------------------------------
CORBA
::
Boolean
IOController
::
getState
(
const
IOController_i
::
SensorInfo
&
si
)
{
DIOStateList
::
iterator
li
(
dioList
.
end
());
try
{
return
localGetState
(
li
,
si
);
}
// getValue if not found...
catch
(
IOController_i
::
NameNotFound
)
{
AIOStateList
::
iterator
a
(
aioList
.
end
());
return
(
localGetValue
(
a
,
si
)
?
true
:
false
);
}
}
// ------------------------------------------------------------------------------------------
CORBA
::
Long
IOController
::
getValue
(
const
IOController_i
::
SensorInfo
&
si
)
{
AIOStateList
::
iterator
li
(
aioList
.
end
());
try
{
return
localGetValue
(
li
,
si
);
}
// getState if not found...
catch
(
IOController_i
::
NameNotFound
)
{
DIOStateList
::
iterator
d
(
dioList
.
end
());
return
(
localGetState
(
d
,
si
)
?
1
:
0
);
}
IOStateList
::
iterator
li
(
ioList
.
end
());
return
localGetValue
(
li
,
si
);
}
// ------------------------------------------------------------------------------------------
bool
IOController
::
localGetState
(
IOController
::
DIOStateList
::
iterator
&
li
,
const
IOController_i
::
SensorInfo
&
si
)
{
if
(
li
==
dioList
.
end
()
)
li
=
dioList
.
find
(
UniSetTypes
::
key
(
si
.
id
,
si
.
node
)
);
if
(
li
!=
dioList
.
end
()
)
{
if
(
li
->
second
.
undefined
)
throw
IOController_i
::
Undefined
();
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
return
li
->
second
.
state
;
}
// -------------
ostringstream
err
;
err
<<
myname
<<
"(localGetState): Not found digital sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
") "
<<
conf
->
oind
->
getNameById
(
si
.
id
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
// ---------------------------------------------------------------------------
long
IOController
::
localGetValue
(
IOController
::
AIOStateList
::
iterator
&
li
,
long
IOController
::
localGetValue
(
IOController
::
IOStateList
::
iterator
&
li
,
const
IOController_i
::
SensorInfo
&
si
)
{
if
(
li
==
a
ioList
.
end
()
)
li
=
a
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
li
==
ioList
.
end
()
)
li
=
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
li
!=
a
ioList
.
end
()
)
if
(
li
!=
ioList
.
end
()
)
{
if
(
li
->
second
.
undefined
)
throw
IOController_i
::
Undefined
();
...
...
@@ -180,53 +115,35 @@ long IOController::localGetValue( IOController::AIOStateList::iterator& li,
// -------------
ostringstream
err
;
err
<<
myname
<<
"(localGetValue): Not found analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
") "
err
<<
myname
<<
"(localGetValue): Not found analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
") "
<<
conf
->
oind
->
getNameById
(
si
.
id
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
// ------------------------------------------------------------------------------------------
void
IOController
::
fastSaveState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
IOTypes
type
,
UniSetTypes
::
ObjectId
sup_id
)
{
try
{
DIOStateList
::
iterator
li
(
dioList
.
end
());
localSaveState
(
li
,
si
,
state
,
sup_id
);
}
catch
(...){}
}
// ------------------------------------------------------------------------------------------
void
IOController
::
saveState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
IOTypes
type
,
UniSetTypes
::
ObjectId
sup_id
)
{
IOController
::
DIOStateList
::
iterator
li
(
dioList
.
end
());
localSaveState
(
li
,
si
,
state
,
sup_id
);
}
// ------------------------------------------------------------------------------------------
void
IOController
::
setUndefinedState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
undefined
,
UniSetTypes
::
ObjectId
sup_id
)
{
IOController
::
AIOStateList
::
iterator
li
(
a
ioList
.
end
());
IOController
::
IOStateList
::
iterator
li
(
ioList
.
end
());
localSetUndefinedState
(
li
,
undefined
,
si
);
}
// -----------------------------------------------------------------------------
void
IOController
::
localSetUndefinedState
(
AIOStateList
::
iterator
&
li
,
void
IOController
::
localSetUndefinedState
(
IOStateList
::
iterator
&
li
,
bool
undefined
,
const
IOController_i
::
SensorInfo
&
si
)
{
// сохранение текущего состояния
if
(
li
==
a
ioList
.
end
()
)
li
=
a
ioList
.
find
(
key
(
si
.
id
,
si
.
node
));
if
(
li
==
ioList
.
end
()
)
li
=
ioList
.
find
(
key
(
si
.
id
,
si
.
node
));
if
(
li
==
a
ioList
.
end
()
)
if
(
li
==
ioList
.
end
()
)
{
ostringstream
err
;
err
<<
myname
<<
"(localSetUndefined): Unknown sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
"name: "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
"node: "
<<
conf
->
oind
->
getMapName
(
si
.
node
);
<<
"node: "
<<
conf
->
oind
->
getMapName
(
si
.
node
);
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
...
...
@@ -237,114 +154,24 @@ void IOController::localSetUndefinedState( AIOStateList::iterator& li,
}
// unlock
}
// ------------------------------------------------------------------------------------------
void
IOController
::
localSaveState
(
IOController
::
DIOStateList
::
iterator
&
li
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
sup_id
==
UniSetTypes
::
DefaultObjectId
)
sup_id
=
getId
();
// сохранение текущего состояния
if
(
li
==
dioList
.
end
()
)
li
=
dioList
.
find
(
key
(
si
.
id
,
si
.
node
));
if
(
li
==
dioList
.
end
()
)
{
ostringstream
err
;
err
<<
myname
<<
"(localSaveState): Unknown sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
"name: "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
"node: "
<<
conf
->
oind
->
getMapName
(
si
.
node
);
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
if
(
li
->
second
.
type
!=
UniversalIO
::
DigitalInput
)
// && li->second.type != UniversalIO::DigitalOutput )
{
ostringstream
err
;
err
<<
myname
<<
"(localSaveState): Bad sensor iotype="
<<
li
->
second
.
type
<<
". Sensor must be 'DI'. ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
" name: "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" node: "
<<
conf
->
oind
->
getMapName
(
si
.
node
);
throw
IOController_i
::
IOBadParam
(
err
.
str
().
c_str
());
}
// { // lock
// uniset_rwmutex_lock wrlock(li->second.val_lock,checkLockValuePause);
bool
changed
=
false
;
bool
blk_set
=
false
;
bool
blocked
=
(
li
->
second
.
blocked
||
li
->
second
.
undefined
);
if
(
checkDFilters
(
&
li
->
second
,
state
,
sup_id
)
||
blocked
)
{
{
// lock
uniset_rwmutex_wrlock
lock
(
li
->
second
.
val_lock
);
if
(
!
blocked
)
li
->
second
.
real_state
=
li
->
second
.
state
;
if
(
li
->
second
.
real_state
!=
state
)
changed
=
true
;
if
(
blocked
)
{
li
->
second
.
real_state
=
state
;
li
->
second
.
state
=
li
->
second
.
block_state
;
}
else
{
li
->
second
.
state
=
state
;
li
->
second
.
real_state
=
state
;
}
blk_set
=
li
->
second
.
state
;
}
// unlock
// запоминаем время изменения
struct
timeval
tm
;
struct
timezone
tz
;
tm
.
tv_sec
=
0
;
tm
.
tv_usec
=
0
;
gettimeofday
(
&
tm
,
&
tz
);
li
->
second
.
tv_sec
=
tm
.
tv_sec
;
li
->
second
.
tv_usec
=
tm
.
tv_usec
;
}
// } // unlock
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
myname
<<
": save digital sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
" = "
<<
state
<<
" blocked="
<<
blocked
<<
" --> state="
<<
li
->
second
.
state
<<
" real_state="
<<
li
->
second
.
real_state
<<
" changed="
<<
changed
<<
endl
;
}
// обновляем список зависимых
if
(
changed
)
updateBlockDepends
(
li
->
second
.
dlst
,
blk_set
,
li
->
second
.
dlst_lock
);
}
// ------------------------------------------------------------------------------------------
void
IOController
::
fastSaveValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
IOTypes
type
,
UniSetTypes
::
ObjectId
sup_id
)
void
IOController
::
fastSetValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
{
try
{
IOController
::
AIOStateList
::
iterator
li
(
a
ioList
.
end
());
localS
aveValue
(
li
,
si
,
value
,
sup_id
);
IOController
::
IOStateList
::
iterator
li
(
ioList
.
end
());
localS
etValue
(
li
,
si
,
value
,
sup_id
);
}
catch
(...){}
}
// ------------------------------------------------------------------------------------------
void
IOController
::
s
aveValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
IOTypes
type
,
UniSetTypes
::
ObjectId
sup_id
)
void
IOController
::
s
etValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
{
IOController
::
AIOStateList
::
iterator
li
(
a
ioList
.
end
());
localS
aveValue
(
li
,
si
,
value
,
sup_id
);
IOController
::
IOStateList
::
iterator
li
(
ioList
.
end
());
localS
etValue
(
li
,
si
,
value
,
sup_id
);
}
// ------------------------------------------------------------------------------------------
void
IOController
::
localS
aveValue
(
IOController
::
A
IOStateList
::
iterator
&
li
,
void
IOController
::
localS
etValue
(
IOController
::
IOStateList
::
iterator
&
li
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
{
...
...
@@ -352,29 +179,19 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
sup_id
=
getId
();
// сохранение текущего состояния
//
AIOStateList::iterator li( a
ioList.end() );
if
(
li
==
a
ioList
.
end
()
)
li
=
a
ioList
.
find
(
key
(
si
.
id
,
si
.
node
));
//
IOStateList::iterator li(
ioList.end() );
if
(
li
==
ioList
.
end
()
)
li
=
ioList
.
find
(
key
(
si
.
id
,
si
.
node
));
if
(
li
==
a
ioList
.
end
()
)
if
(
li
==
ioList
.
end
()
)
{
ostringstream
err
;
err
<<
myname
<<
"(localSaveValue): Unknown sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
"name: "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
"node: "
<<
conf
->
oind
->
getMapName
(
si
.
node
);
<<
"node: "
<<
conf
->
oind
->
getMapName
(
si
.
node
);
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
if
(
li
->
second
.
type
!=
UniversalIO
::
AnalogInput
)
// && li->second.type != UniversalIO::AnalogOutput )
{
ostringstream
err
;
err
<<
myname
<<
"(localSaveValue): Bad sensor iotype="
<<
li
->
second
.
type
<<
". Sensor must be 'AI'. ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
" name: "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" node: "
<<
conf
->
oind
->
getMapName
(
si
.
node
);
throw
IOController_i
::
IOBadParam
(
err
.
str
().
c_str
());
}
{
// lock
uniset_rwmutex_wrlock
lock
(
li
->
second
.
val_lock
);
...
...
@@ -383,11 +200,11 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
bool
blocked
=
(
li
->
second
.
blocked
||
li
->
second
.
undefined
);
if
(
check
A
Filters
(
&
li
->
second
,
value
,
sup_id
)
||
blocked
)
if
(
check
IO
Filters
(
&
li
->
second
,
value
,
sup_id
)
||
blocked
)
{
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
myname
<<
": save
analog
sensor value ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
unideb
[
Debug
::
INFO
]
<<
myname
<<
": save sensor value ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
" name: "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" node: "
<<
conf
->
oind
->
getMapName
(
si
.
node
)
<<
" value="
<<
value
<<
endl
;
...
...
@@ -418,17 +235,12 @@ void IOController::localSaveValue( IOController::AIOStateList::iterator& li,
}
// unlock
}
// ------------------------------------------------------------------------------------------
IOType
s
IOController
::
getIOType
(
const
IOController_i
::
SensorInfo
&
si
)
IOType
IOController
::
getIOType
(
const
IOController_i
::
SensorInfo
&
si
)
{
UniSetTypes
::
KeyType
k
=
key
(
si
.
id
,
si
.
node
);
// Проверяем в списке дискретных
DIOStateList
::
iterator
li
=
dioList
.
find
(
k
);
if
(
li
!=
dioList
.
end
()
)
return
li
->
second
.
type
;
// Проверяем в списке аналоговых
AIOStateList
::
iterator
ali
=
aioList
.
find
(
k
);
if
(
ali
!=
aioList
.
end
()
)
IOStateList
::
iterator
ali
=
ioList
.
find
(
k
);
if
(
ali
!=
ioList
.
end
()
)
return
ali
->
second
.
type
;
ostringstream
err
;
...
...
@@ -437,139 +249,15 @@ IOTypes IOController::getIOType( const IOController_i::SensorInfo& si )
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
// ---------------------------------------------------------------------------
void
IOController
::
setState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
sup_id
==
UniSetTypes
::
DefaultObjectId
)
sup_id
=
getId
();
IOController
::
DIOStateList
::
iterator
li
(
dioList
.
end
());
localSetState
(
li
,
si
,
state
,
sup_id
);
}
void
IOController
::
fastSetState
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
sup_id
==
UniSetTypes
::
DefaultObjectId
)
sup_id
=
getId
();
try
{
IOController
::
DIOStateList
::
iterator
li
(
dioList
.
end
());
localSetState
(
li
,
si
,
state
,
sup_id
);
}
catch
(...){}
}
// ---------------------------------------------------------------------------
void
IOController
::
setValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
sup_id
==
UniSetTypes
::
DefaultObjectId
)
sup_id
=
getId
();
try
{
IOController
::
AIOStateList
::
iterator
li
(
aioList
.
end
());
localSetValue
(
li
,
si
,
value
,
sup_id
);
}
// getValue if not found...
catch
(
IOController_i
::
NameNotFound
)
{
IOController
::
DIOStateList
::
iterator
li
(
dioList
.
end
());
localSetState
(
li
,
si
,
(
value
?
true
:
false
),
sup_id
);
}
}
void
IOController
::
fastSetValue
(
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
sup_id
==
UniSetTypes
::
DefaultObjectId
)
sup_id
=
getId
();
try
{
IOController
::
AIOStateList
::
iterator
li
(
aioList
.
end
());
localSetValue
(
li
,
si
,
value
,
sup_id
);
}
catch
(...){};
}
// ---------------------------------------------------------------------------
void
IOController
::
localSetState
(
IOController
::
DIOStateList
::
iterator
&
li
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
li
==
dioList
.
end
()
)
li
=
dioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
li
!=
dioList
.
end
()
&&
li
->
second
.
type
==
UniversalIO
::
DigitalOutput
)
{
bool
blocked
=
false
;
bool
changed
=
false
;
bool
blk_set
=
false
;
{
// lock
uniset_rwmutex_wrlock
lock
(
li
->
second
.
val_lock
);
blocked
=
(
li
->
second
.
blocked
||
li
->
second
.
undefined
);
if
(
!
blocked
)
li
->
second
.
real_state
=
li
->
second
.
state
;
if
(
li
->
second
.
real_state
!=
state
)
changed
=
true
;
if
(
blocked
)
{
li
->
second
.
real_state
=
state
;
li
->
second
.
state
=
false
;
}
else
{
li
->
second
.
state
=
state
;
li
->
second
.
real_state
=
state
;
}
blk_set
=
li
->
second
.
state
;
}
// unlock
struct
timeval
tm
;
struct
timezone
tz
;
tm
.
tv_sec
=
0
;
tm
.
tv_usec
=
0
;
gettimeofday
(
&
tm
,
&
tz
);
li
->
second
.
tv_sec
=
tm
.
tv_sec
;
li
->
second
.
tv_usec
=
tm
.
tv_usec
;
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
myname
<<
": save state for DO ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
" = "
<<
state
<<
" blocked="
<<
li
->
second
.
blocked
<<
" --> state="
<<
li
->
second
.
state
<<
" changed="
<<
changed
<<
" blocked="
<<
blocked
<<
endl
;
}
if
(
changed
)
updateBlockDepends
(
li
->
second
.
dlst
,
blk_set
,
li
->
second
.
dlst_lock
);
return
;
}
// -------------
ostringstream
err
;
err
<<
myname
<<
"(localSetState): Unknown sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
);
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
// ---------------------------------------------------------------------------
void
IOController
::
localSetValue
(
IOController
::
AIOStateList
::
iterator
&
li
,
#if 0
void IOController::localSetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si, CORBA::Long value,
UniSetTypes::ObjectId sup_id )
{
if
(
li
==
a
ioList
.
end
()
)
li
=
a
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if( li == ioList.end() )
li = ioList.find( key(si.id, si.node) );
if
(
li
!=
aioList
.
end
()
&&
li
->
second
.
type
==
UniversalIO
::
AnalogOutput
)
if( li!=
ioList.end() && li->second.type == UniversalIO::AO
)
{
{ // lock
uniset_rwmutex_wrlock lock(li->second.val_lock);
...
...
@@ -592,7 +280,7 @@ void IOController::localSetValue( IOController::AIOStateList::iterator& li,
li->second.tv_usec = tm.tv_usec;
if( unideb.debugging(Debug::INFO) )
{
unideb
[
Debug
::
INFO
]
<<
myname
<<
"(localSetValue): save
analog
value for ("
unideb[Debug::INFO] << myname << "(localSetValue): save value for ("
<< si.id << ":" << si.node << ")"
<< conf->oind->getNameById(si.id, si.node) << " = " << value
<< " blocked=" << li->second.blocked
...
...
@@ -607,104 +295,27 @@ void IOController::localSetValue( IOController::AIOStateList::iterator& li,
err << myname << "(localSetValue): Unknown sensor (" << si.id << ":" << si.node << ")" << conf->oind->getNameById(si.id);
unideb[Debug::INFO] << err.str() << endl;
throw IOController_i::NameNotFound(err.str().c_str());
}
// ---------------------------------------------------------------------------
void
IOController
::
dsRegistration
(
const
UniDigitalIOInfo
&
dinf
,
bool
force
)
{
// проверка задан ли контроллеру идентификатор
if
(
getId
()
==
DefaultObjectId
)
{
ostringstream
err
;
err
<<
"(IOCOntroller::dsRegistration): КОНТРОЛЛЕРУ НЕ ЗАДАН ObjectId. Регистрация невозможна."
;
unideb
[
Debug
::
WARN
]
<<
err
.
str
()
<<
endl
;
throw
ResolveNameError
(
err
.
str
().
c_str
());
}
UniSetTypes
::
KeyType
k
=
key
(
dinf
.
si
.
id
,
dinf
.
si
.
node
);
{
// lock
uniset_rwmutex_wrlock
lock
(
dioMutex
);
if
(
!
force
)
{
DIOStateList
::
iterator
li
=
dioList
.
find
(
k
);
if
(
li
!=
dioList
.
end
()
)
{
ostringstream
err
;
err
<<
"Попытка повторной регистрации датчика("
<<
k
<<
"). имя: "
<<
conf
->
oind
->
getNameById
(
dinf
.
si
.
id
)
<<
" узел: "
<<
conf
->
oind
->
getMapName
(
dinf
.
si
.
node
);
throw
ObjectNameAlready
(
err
.
str
().
c_str
());
}
}
DIOStateList
::
mapped_type
di
(
dinf
);
// запоминаем начальное время
struct
timeval
tm
;
struct
timezone
tz
;
tm
.
tv_sec
=
0
;
tm
.
tv_usec
=
0
;
gettimeofday
(
&
tm
,
&
tz
);
di
.
tv_sec
=
tm
.
tv_sec
;
di
.
tv_usec
=
tm
.
tv_usec
;
di
.
state
=
di
.
default_val
;
// более оптимальный способ (при условии вставки первый раз)
dioList
.
insert
(
DIOStateList
::
value_type
(
k
,
di
));
}
try
{
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
try
{
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
myname
<<
"(dsRegistration): регистрирую "
<<
conf
->
oind
->
getNameById
(
dinf
.
si
.
id
,
dinf
.
si
.
node
)
<<
endl
;
}
ui
.
registered
(
dinf
.
si
.
id
,
dinf
.
si
.
node
,
getRef
(),
true
);
return
;
}
catch
(
ObjectNameAlready
&
ex
)
{
if
(
unideb
.
debugging
(
Debug
::
WARN
)
)
{
unideb
[
Debug
::
WARN
]
<<
myname
<<
"(dsRegistration): ЗАМЕНЯЮ СУЩЕСТВУЮЩИЙ ОБЪЕКТ (ObjectNameAlready)"
<<
endl
;
}
ui
.
unregister
(
dinf
.
si
.
id
,
dinf
.
si
.
node
);
}
}
}
catch
(
Exception
&
ex
)
{
unideb
[
Debug
::
CRIT
]
<<
myname
<<
"(dsRegistration): "
<<
ex
<<
endl
;
}
catch
(...)
{
unideb
[
Debug
::
CRIT
]
<<
myname
<<
"(dsRegistration): catch ..."
<<
endl
;
}
}
#endif
// ---------------------------------------------------------------------------
void
IOController
::
asRegistration
(
const
UniAnalog
IOInfo
&
ainf
,
bool
force
)
void
IOController
::
ioRegistration
(
const
USensor
IOInfo
&
ainf
,
bool
force
)
{
// проверка задан ли контроллеру идентификатор
if
(
getId
()
==
DefaultObjectId
)
{
ostringstream
err
;
err
<<
"(IOCOntroller::
ds
Registration): КОНТРОЛЛЕРУ НЕ ЗАДАН ObjectId. Регистрация невозможна."
;
err
<<
"(IOCOntroller::
io
Registration): КОНТРОЛЛЕРУ НЕ ЗАДАН ObjectId. Регистрация невозможна."
;
unideb
[
Debug
::
WARN
]
<<
err
.
str
()
<<
endl
;
throw
ResolveNameError
(
err
.
str
().
c_str
());
}
UniSetTypes
::
KeyType
k
=
key
(
ainf
.
si
.
id
,
ainf
.
si
.
node
);
{
// lock
uniset_rwmutex_wrlock
lock
(
a
ioMutex
);
uniset_rwmutex_wrlock
lock
(
ioMutex
);
if
(
!
force
)
{
AIOStateList
::
iterator
li
=
a
ioList
.
find
(
k
);
if
(
li
!=
a
ioList
.
end
()
)
IOStateList
::
iterator
li
=
ioList
.
find
(
k
);
if
(
li
!=
ioList
.
end
()
)
{
ostringstream
err
;
err
<<
"Попытка повторной регистрации датчика("
<<
k
<<
"). имя: "
...
...
@@ -714,7 +325,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
}
}
A
IOStateList
::
mapped_type
ai
(
ainf
);
IOStateList
::
mapped_type
ai
(
ainf
);
// запоминаем начальное время
struct
timeval
tm
;
struct
timezone
tz
;
...
...
@@ -726,7 +337,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
ai
.
value
=
ai
.
default_val
;
// более оптимальный способ(при условии вставки первый раз)
aioList
.
insert
(
A
IOStateList
::
value_type
(
k
,
ai
));
ioList
.
insert
(
IOStateList
::
value_type
(
k
,
ai
));
}
try
...
...
@@ -738,7 +349,7 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
myname
<<
"(
asRegistration): регистрирую "
<<
"(
ioRegistration): регистрирую "
<<
conf
->
oind
->
getNameById
(
ainf
.
si
.
id
,
ainf
.
si
.
node
)
<<
endl
;
}
ui
.
registered
(
ainf
.
si
.
id
,
ainf
.
si
.
node
,
getRef
(),
true
);
...
...
@@ -755,22 +366,23 @@ void IOController::asRegistration( const UniAnalogIOInfo& ainf, bool force )
}
}
}
catch
(
Exception
&
ex
)
catch
(
Exception
&
ex
)
{
unideb
[
Debug
::
CRIT
]
<<
myname
<<
"(asRegistration): "
<<
ex
<<
endl
;
if
(
unideb
.
debugging
(
Debug
::
CRIT
)
)
unideb
[
Debug
::
CRIT
]
<<
myname
<<
"(ioRegistration): "
<<
ex
<<
endl
;
}
catch
(...)
{
unideb
[
Debug
::
CRIT
]
<<
myname
<<
"(asRegistration): catch ..."
<<
endl
;
if
(
unideb
.
debugging
(
Debug
::
CRIT
)
)
unideb
[
Debug
::
CRIT
]
<<
myname
<<
"(ioRegistration): catch ..."
<<
endl
;
}
}
// ---------------------------------------------------------------------------
void
IOController
::
s
UnRegistration
(
const
IOController_i
::
SensorInfo
&
si
)
void
IOController
::
io
UnRegistration
(
const
IOController_i
::
SensorInfo
&
si
)
{
ui
.
unregister
(
si
.
id
,
si
.
node
);
}
// ---------------------------------------------------------------------------
void
IOController
::
logging
(
UniSetTypes
::
SensorMessage
&
sm
)
{
uniset_rwmutex_wrlock
l
(
loggingMutex
);
...
...
@@ -805,31 +417,9 @@ void IOController::dumpToDB()
if
(
conf
->
getDBServer
()
==
UniSetTypes
::
DefaultObjectId
)
return
;
// Проходим по списку дискретных
{
// lock
// uniset_mutex_lock lock(dioMutex, 100);
for
(
DIOStateList
::
iterator
li
=
dioList
.
begin
();
li
!=
dioList
.
end
();
++
li
)
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
SensorMessage
sm
;
sm
.
id
=
li
->
second
.
si
.
id
;
sm
.
node
=
li
->
second
.
si
.
node
;
sm
.
sensor_type
=
li
->
second
.
type
;
sm
.
state
=
li
->
second
.
state
;
sm
.
value
=
sm
.
state
?
1
:
0
;
sm
.
undefined
=
li
->
second
.
undefined
;
sm
.
priority
=
(
Message
::
Priority
)
li
->
second
.
priority
;
sm
.
sm_tv_sec
=
li
->
second
.
tv_sec
;
sm
.
sm_tv_usec
=
li
->
second
.
tv_usec
;
if
(
!
li
->
second
.
db_ignore
)
logging
(
sm
);
}
}
// unlock
// Проходим по списку аналоговых
{
// lock
// uniset_mutex_lock lock(aioMutex, 100);
for
(
AIOStateList
::
iterator
li
=
aioList
.
begin
();
li
!=
aioList
.
end
();
++
li
)
// uniset_mutex_lock lock(ioMutex, 100);
for
(
IOStateList
::
iterator
li
=
ioList
.
begin
();
li
!=
ioList
.
end
();
++
li
)
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
SensorMessage
sm
;
...
...
@@ -837,7 +427,6 @@ void IOController::dumpToDB()
sm
.
node
=
li
->
second
.
si
.
node
;
sm
.
sensor_type
=
li
->
second
.
type
;
sm
.
value
=
li
->
second
.
value
;
sm
.
state
=
sm
.
value
!=
0
?
true
:
false
;
sm
.
undefined
=
li
->
second
.
undefined
;
sm
.
priority
=
(
Message
::
Priority
)
li
->
second
.
priority
;
sm
.
sm_tv_sec
=
li
->
second
.
tv_sec
;
...
...
@@ -849,17 +438,17 @@ void IOController::dumpToDB()
}
// unlock
}
// --------------------------------------------------------------------------------------------------------------
IOController_i
::
ASensorInfoSeq
*
IOController
::
getAnalog
SensorsMap
()
IOController_i
::
SensorInfoSeq
*
IOController
::
get
SensorsMap
()
{
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом
IOController_i
::
ASensorInfoSeq
*
res
=
new
IOController_i
::
ASensorInfoSeq
();
res
->
length
(
a
ioList
.
size
());
IOController_i
::
SensorInfoSeq
*
res
=
new
IOController_i
::
SensorInfoSeq
();
res
->
length
(
ioList
.
size
());
// { // lock
// uniset_mutex_lock lock(
aioMutex, 500);
// uniset_mutex_lock lock(
ioMutex, 500);
int
i
=
0
;
for
(
AIOStateList
::
iterator
it
=
aioList
.
begin
();
it
!=
a
ioList
.
end
();
++
it
)
for
(
IOStateList
::
iterator
it
=
ioList
.
begin
();
it
!=
ioList
.
end
();
++
it
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
]
=
it
->
second
;
...
...
@@ -870,74 +459,25 @@ IOController_i::ASensorInfoSeq* IOController::getAnalogSensorsMap()
return
res
;
}
// --------------------------------------------------------------------------------------------------------------
IOController_i
::
DSensorInfoSeq
*
IOController
::
getDigitalSensorsMap
(
)
UniSetTypes
::
Message
::
Priority
IOController
::
getMessagePriority
(
UniSetTypes
::
KeyType
k
,
UniversalIO
::
IOType
type
)
{
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом
IOController_i
::
DSensorInfoSeq
*
res
=
new
IOController_i
::
DSensorInfoSeq
();
res
->
length
(
dioList
.
size
());
IOStateList
::
iterator
it
=
ioList
.
find
(
k
);
if
(
it
!=
ioList
.
end
()
)
return
(
UniSetTypes
::
Message
::
Priority
)
it
->
second
.
priority
;
// { // lock
// uniset_mutex_lock lock(dioMutex, 500);
int
i
=
0
;
for
(
DIOStateList
::
iterator
it
=
dioList
.
begin
();
it
!=
dioList
.
end
();
++
it
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
].
si
=
it
->
second
.
si
;
(
*
res
)[
i
].
type
=
it
->
second
.
type
;
(
*
res
)[
i
].
state
=
it
->
second
.
state
;
(
*
res
)[
i
].
real_state
=
it
->
second
.
real_state
;
(
*
res
)[
i
].
priority
=
it
->
second
.
priority
;
(
*
res
)[
i
].
tv_sec
=
it
->
second
.
tv_sec
;
(
*
res
)[
i
].
tv_usec
=
it
->
second
.
tv_usec
;
(
*
res
)[
i
].
undefined
=
it
->
second
.
undefined
;
(
*
res
)[
i
].
blocked
=
it
->
second
.
blocked
;
(
*
res
)[
i
].
default_val
=
it
->
second
.
default_val
;
i
++
;
}
// }
return
res
;
}
// --------------------------------------------------------------------------------------------------------------
UniSetTypes
::
Message
::
Priority
IOController
::
getMessagePriority
(
UniSetTypes
::
KeyType
k
,
UniversalIO
::
IOTypes
type
)
{
switch
(
type
)
{
case
UniversalIO
:
:
DigitalInput
:
case
UniversalIO
:
:
DigitalOutput
:
{
DIOStateList
::
iterator
it
=
dioList
.
find
(
k
);
if
(
it
!=
dioList
.
end
()
)
return
(
UniSetTypes
::
Message
::
Priority
)
it
->
second
.
priority
;
}
break
;
case
UniversalIO
:
:
AnalogInput
:
case
UniversalIO
:
:
AnalogOutput
:
{
AIOStateList
::
iterator
it
=
aioList
.
find
(
k
);
if
(
it
!=
aioList
.
end
()
)
return
(
UniSetTypes
::
Message
::
Priority
)
it
->
second
.
priority
;
}
break
;
default
:
break
;
}
return
UniSetTypes
::
Message
::
Medium
;
// ??
}
// --------------------------------------------------------------------------------------------------------------
UniSetTypes
::
Message
::
Priority
IOController
::
getPriority
(
const
IOController_i
::
SensorInfo
&
si
,
UniversalIO
::
IOType
s
type
)
UniversalIO
::
IOType
type
)
{
return
getMessagePriority
(
key
(
si
.
id
,
si
.
node
),
type
);
}
// --------------------------------------------------------------------------------------------------------------
IOController_i
::
DigitalIOInfo
IOController
::
getDInfo
(
const
IOController_i
::
SensorInfo
&
si
)
IOController_i
::
SensorIOInfo
IOController
::
getSensorIOInfo
(
const
IOController_i
::
SensorInfo
&
si
)
{
DIOStateList
::
iterator
it
=
d
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
!=
d
ioList
.
end
()
)
IOStateList
::
iterator
it
=
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
!=
ioList
.
end
()
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
return
it
->
second
;
...
...
@@ -945,43 +485,23 @@ IOController_i::DigitalIOInfo IOController::getDInfo(const IOController_i::Senso
// -------------
ostringstream
err
;
err
<<
myname
<<
"(getDInfo): Unknown digital sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
// --------------------------------------------------------------------------------------------------------------
IOController_i
::
AnalogIOInfo
IOController
::
getAInfo
(
const
IOController_i
::
SensorInfo
&
si
)
{
AIOStateList
::
iterator
it
=
aioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
!=
aioList
.
end
()
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
return
it
->
second
;
}
err
<<
myname
<<
"(getAInfo): Unknown sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
);
// -------------
ostringstream
err
;
err
<<
myname
<<
"(getAInfo): Unknown analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
// --------------------------------------------------------------------------------------------------------------
CORBA
::
Long
IOController
::
getRawValue
(
const
IOController_i
::
SensorInfo
&
si
)
{
AIOStateList
::
iterator
it
=
a
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
==
a
ioList
.
end
()
)
IOStateList
::
iterator
it
=
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
==
ioList
.
end
()
)
{
ostringstream
err
;
err
<<
myname
<<
"(getRawValue): Unknown analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
);
err
<<
myname
<<
"(getRawValue): Unknown analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
);
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
...
...
@@ -990,11 +510,11 @@ CORBA::Long IOController::getRawValue(const IOController_i::SensorInfo& si)
if
(
ci
.
maxCal
!=
0
&&
ci
.
maxCal
!=
ci
.
minCal
)
{
if
(
it
->
second
.
type
==
UniversalIO
::
A
nalogInput
)
if
(
it
->
second
.
type
==
UniversalIO
::
A
I
)
return
UniSetTypes
::
lcalibrate
(
it
->
second
.
value
,
ci
.
minRaw
,
ci
.
maxRaw
,
ci
.
minCal
,
ci
.
maxCal
,
true
);
// п╨п╟п╩п╦п╠я─я┐п╣п╪ п╡ п╬п╠я─п╟я┌п╫я┐я▌ я│я┌п╬я─п╬п╫я┐ (п╫п╟ п╡я▀я┘п╬п╢)
if
(
it
->
second
.
type
==
UniversalIO
::
A
nalogOutput
)
if
(
it
->
second
.
type
==
UniversalIO
::
A
O
)
return
UniSetTypes
::
lcalibrate
(
it
->
second
.
value
,
ci
.
minCal
,
ci
.
maxCal
,
ci
.
minRaw
,
ci
.
maxRaw
,
true
);
}
...
...
@@ -1005,11 +525,11 @@ void IOController::calibrate(const IOController_i::SensorInfo& si,
const
IOController_i
::
CalibrateInfo
&
ci
,
UniSetTypes
::
ObjectId
adminId
)
{
AIOStateList
::
iterator
it
=
a
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
==
a
ioList
.
end
()
)
IOStateList
::
iterator
it
=
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
==
ioList
.
end
()
)
{
ostringstream
err
;
err
<<
myname
<<
"(calibrate): Unknown analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
err
<<
myname
<<
"(calibrate): Unknown analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
);
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
...
...
@@ -1022,87 +542,45 @@ void IOController::calibrate(const IOController_i::SensorInfo& si,
// --------------------------------------------------------------------------------------------------------------
IOController_i
::
CalibrateInfo
IOController
::
getCalibrateInfo
(
const
IOController_i
::
SensorInfo
&
si
)
{
AIOStateList
::
iterator
it
=
a
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
==
a
ioList
.
end
()
)
IOStateList
::
iterator
it
=
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
==
ioList
.
end
()
)
{
ostringstream
err
;
err
<<
myname
<<
"(calibrate): Unknown analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
err
<<
myname
<<
"(calibrate): Unknown analog sensor ("
<<
si
.
id
<<
":"
<<
si
.
node
<<
")"
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
);
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
return
it
->
second
.
ci
;
}
// --------------------------------------------------------------------------------------------------------------
IOController
::
UniDigitalIOInfo
&
IOController
::
UniDigitalIOInfo
::
operator
=
(
IOController_i
::
DigitalIOInfo
&
r
)
{
(
*
this
)
=
r
;
// any=0;
return
*
this
;
}
IOController
::
UniDigitalIOInfo
&
IOController
::
UniDigitalIOInfo
::
operator
=
(
IOController_i
::
DigitalIOInfo
*
r
)
{
(
*
this
)
=
(
*
r
);
// any=0;
return
*
this
;
}
const
IOController
::
UniDigitalIOInfo
&
IOController
::
UniDigitalIOInfo
::
operator
=
(
const
IOController_i
::
DigitalIOInfo
&
r
)
{
(
*
this
)
=
r
;
// any=0;
return
*
this
;
}
IOController
::
UniDigitalIOInfo
::
UniDigitalIOInfo
(
IOController_i
::
DigitalIOInfo
&
di
)
:
IOController_i
::
DigitalIOInfo
(
di
),
any
(
0
),
dlst_lock
(
false
)
{}
IOController
::
UniDigitalIOInfo
::
UniDigitalIOInfo
(
IOController_i
::
DigitalIOInfo
*
di
)
:
IOController_i
::
DigitalIOInfo
(
*
di
),
IOController
::
USensorIOInfo
::
USensorIOInfo
(
IOController_i
::
SensorIOInfo
&
ai
)
:
IOController_i
::
SensorIOInfo
(
ai
),
any
(
0
),
dlst_lock
(
false
)
{}
IOController
::
U
niDigitalIOInfo
::
UniDigitalIOInfo
(
const
IOController_i
::
DigitalIOInfo
&
d
i
)
:
IOController_i
::
DigitalIOInfo
(
d
i
),
IOController
::
U
SensorIOInfo
::
USensorIOInfo
(
const
IOController_i
::
SensorIOInfo
&
a
i
)
:
IOController_i
::
SensorIOInfo
(
a
i
),
any
(
0
),
dlst_lock
(
false
)
{}
IOController
::
U
niAnalogIOInfo
::
UniAnalogIOInfo
(
IOController_i
::
AnalogIOInfo
&
ai
)
:
IOController_i
::
AnalogIOInfo
(
ai
),
IOController
::
U
SensorIOInfo
::
USensorIOInfo
(
IOController_i
::
SensorIOInfo
*
ai
)
:
IOController_i
::
SensorIOInfo
(
*
ai
),
any
(
0
),
dlst_lock
(
false
)
{}
IOController
::
UniAnalogIOInfo
::
UniAnalogIOInfo
(
const
IOController_i
::
AnalogIOInfo
&
ai
)
:
IOController_i
::
AnalogIOInfo
(
ai
),
any
(
0
),
dlst_lock
(
false
)
{}
IOController
::
UniAnalogIOInfo
::
UniAnalogIOInfo
(
IOController_i
::
AnalogIOInfo
*
ai
)
:
IOController_i
::
AnalogIOInfo
(
*
ai
),
any
(
0
),
dlst_lock
(
false
)
{}
IOController
::
UniAnalogIOInfo
&
IOController
::
UniAnalogIOInfo
::
operator
=
(
IOController_i
::
AnalogIOInfo
&
r
)
IOController
::
USensorIOInfo
&
IOController
::
USensorIOInfo
::
operator
=
(
IOController_i
::
SensorIOInfo
&
r
)
{
(
*
this
)
=
r
;
// any=0;
return
*
this
;
}
IOController
::
U
niAnalogIOInfo
&
IOController
::
U
niAnalogIOInfo
::
operator
=
(
IOController_i
::
Analog
IOInfo
*
r
)
IOController
::
U
SensorIOInfo
&
IOController
::
U
SensorIOInfo
::
operator
=
(
IOController_i
::
Sensor
IOInfo
*
r
)
{
(
*
this
)
=
(
*
r
);
// any=0;
...
...
@@ -1110,8 +588,8 @@ IOController::UniAnalogIOInfo&
return
*
this
;
}
const
IOController
::
U
niAnalogIOInfo
&
IOController
::
U
niAnalogIOInfo
::
operator
=
(
const
IOController_i
::
Analog
IOInfo
&
r
)
const
IOController
::
U
SensorIOInfo
&
IOController
::
U
SensorIOInfo
::
operator
=
(
const
IOController_i
::
Sensor
IOInfo
&
r
)
{
(
*
this
)
=
r
;
// any=0;
...
...
@@ -1119,21 +597,10 @@ const IOController::UniAnalogIOInfo&
}
// ----------------------------------------------------------------------------------------
bool
IOController
::
check
DFilters
(
const
UniDigitalIOInfo
&
di
,
CORBA
::
Boolean
newstate
,
bool
IOController
::
check
IOFilters
(
const
USensorIOInfo
&
ai
,
CORBA
::
Long
&
newvalue
,
UniSetTypes
::
ObjectId
sup_id
)
{
for
(
DFilterSlotList
::
iterator
it
=
dfilters
.
begin
();
it
!=
dfilters
.
end
();
++
it
)
{
if
(
it
->
operator
()(
di
,
newstate
,
sup_id
)
==
false
)
return
false
;
}
return
true
;
}
// ----------------------------------------------------------------------------------------
bool
IOController
::
checkAFilters
(
const
UniAnalogIOInfo
&
ai
,
CORBA
::
Long
&
newvalue
,
UniSetTypes
::
ObjectId
sup_id
)
{
for
(
AFilterSlotList
::
iterator
it
=
afilters
.
begin
();
it
!=
afilters
.
end
();
++
it
)
for
(
IOFilterSlotList
::
iterator
it
=
iofilters
.
begin
();
it
!=
iofilters
.
end
();
++
it
)
{
if
(
(
*
it
)(
ai
,
newvalue
,
sup_id
)
==
false
)
return
false
;
...
...
@@ -1142,88 +609,37 @@ bool IOController::checkAFilters( const UniAnalogIOInfo& ai, CORBA::Long& newval
}
// ----------------------------------------------------------------------------------------
IOController
::
AFilterSlotList
::
iterator
IOController
::
addAFilter
(
AFilterSlot
sl
,
bool
push_front
)
{
if
(
push_front
==
false
)
{
afilters
.
push_back
(
sl
);
AFilterSlotList
::
iterator
it
(
afilters
.
end
());
return
--
it
;
}
afilters
.
push_front
(
sl
);
return
afilters
.
begin
();
}
// ----------------------------------------------------------------------------------------
IOController
::
DFilterSlotList
::
iterator
IOController
::
addDFilter
(
DFilterSlot
sl
,
bool
push_front
)
IOController
::
IOFilterSlotList
::
iterator
IOController
::
addIOFilter
(
IOFilterSlot
sl
,
bool
push_front
)
{
if
(
push_front
==
false
)
{
d
filters
.
push_back
(
sl
);
DFilterSlotList
::
iterator
it
(
d
filters
.
end
());
io
filters
.
push_back
(
sl
);
IOFilterSlotList
::
iterator
it
(
io
filters
.
end
());
return
--
it
;
}
dfilters
.
push_front
(
sl
);
return
dfilters
.
begin
();
}
// ----------------------------------------------------------------------------------------
void
IOController
::
eraseAFilter
(
IOController
::
AFilterSlotList
::
iterator
&
it
)
{
afilters
.
erase
(
it
);
iofilters
.
push_front
(
sl
);
return
iofilters
.
begin
();
}
// ----------------------------------------------------------------------------------------
void
IOController
::
erase
DFilter
(
IOController
::
D
FilterSlotList
::
iterator
&
it
)
void
IOController
::
erase
IOFilter
(
IOController
::
IO
FilterSlotList
::
iterator
&
it
)
{
d
filters
.
erase
(
it
);
io
filters
.
erase
(
it
);
}
// ----------------------------------------------------------------------------------------
IOController
::
DIOStateList
::
iterator
IOController
::
mydioBegin
()
{
// { // lock
// uniset_mutex_lock lock(dioMutex, 200);
return
dioList
.
begin
();
// }
}
IOController
::
DIOStateList
::
iterator
IOController
::
mydioEnd
()
{
// { // lock
// uniset_mutex_lock lock(dioMutex, 200);
return
dioList
.
end
();
// }
}
IOController
::
AIOStateList
::
iterator
IOController
::
myaioBegin
()
{
// { // lock
// uniset_mutex_lock lock(aioMutex, 200);
return
aioList
.
begin
();
// }
}
IOController
::
AIOStateList
::
iterator
IOController
::
myaioEnd
()
IOController
::
IOStateList
::
iterator
IOController
::
myioBegin
()
{
// { // lock
// uniset_mutex_lock lock(aioMutex, 200);
return
aioList
.
end
();
// }
return
ioList
.
begin
();
}
IOController
::
AIOStateList
::
iterator
IOController
::
myafind
(
UniSetTypes
::
KeyType
k
)
IOController
::
IOStateList
::
iterator
IOController
::
myioEnd
(
)
{
// { // lock
// uniset_mutex_lock lock(aioMutex, 200);
return
aioList
.
find
(
k
);
// }
return
ioList
.
end
();
}
IOController
::
DIOStateList
::
iterator
IOController
::
myd
find
(
UniSetTypes
::
KeyType
k
)
IOController
::
IOStateList
::
iterator
IOController
::
myio
find
(
UniSetTypes
::
KeyType
k
)
{
// { // lock
// uniset_mutex_lock lock(dioMutex, 200);
return
dioList
.
find
(
k
);
// }
return
ioList
.
find
(
k
);
}
// -----------------------------------------------------------------------------
IOController
::
DependsInfo
::
DependsInfo
(
bool
init
)
:
...
...
@@ -1232,11 +648,9 @@ IOController::DependsInfo::DependsInfo( bool init ):
{
}
// -----------------------------------------------------------------------------
IOController
::
DependsInfo
::
DependsInfo
(
IOController_i
::
SensorInfo
&
si
,
DIOStateList
::
iterator
&
dit
,
AIOStateList
::
iterator
&
ait
)
:
IOController
::
DependsInfo
::
DependsInfo
(
IOController_i
::
SensorInfo
&
si
,
IOStateList
::
iterator
&
it
)
:
si
(
si
),
dit
(
dit
),
ait
(
ait
),
it
(
it
),
block_invert
(
false
),
init
(
true
)
{
...
...
@@ -1251,22 +665,13 @@ void IOController::updateDepends( IOController::DependsList& lst, bool undefined
lst_lock
=
true
;
for
(
DependsList
::
iterator
it
=
lst
.
begin
();
it
!=
lst
.
end
();
++
it
)
{
if
(
it
->
dit
!=
myd
ioEnd
()
)
if
(
it
->
it
!=
my
ioEnd
()
)
{
if
(
it
->
d
it
->
second
.
undefined
!=
undefined
)
if
(
it
->
it
->
second
.
undefined
!=
undefined
)
{
it
->
d
it
->
second
.
undefined
=
undefined
;
it
->
it
->
second
.
undefined
=
undefined
;
dslot
(
it
,
undefined
);
updateDepends
(
it
->
dit
->
second
.
dlst
,
undefined
,
it
->
dit
->
second
.
dlst_lock
);
}
}
else
if
(
it
->
ait
!=
myaioEnd
()
)
{
if
(
it
->
ait
->
second
.
undefined
!=
undefined
)
{
it
->
ait
->
second
.
undefined
=
undefined
;
dslot
(
it
,
undefined
);
updateDepends
(
it
->
ait
->
second
.
dlst
,
undefined
,
it
->
ait
->
second
.
dlst_lock
);
updateDepends
(
it
->
it
->
second
.
dlst
,
undefined
,
it
->
it
->
second
.
dlst_lock
);
}
}
}
...
...
@@ -1285,23 +690,13 @@ void IOController::updateBlockDepends( IOController::DependsList& lst, bool blk_
{
bool
set_blk
=
it
->
block_invert
?
blk_state
:
!
blk_state
;
if
(
it
->
dit
!=
myd
ioEnd
()
)
if
(
it
->
it
!=
my
ioEnd
()
)
{
if
(
it
->
d
it
->
second
.
blocked
!=
set_blk
)
if
(
it
->
it
->
second
.
blocked
!=
set_blk
)
{
bool
set
=
set_blk
?
it
->
dit
->
second
.
state
:
it
->
dit
->
second
.
real_state
;
it
->
dit
->
second
.
blocked
=
set_blk
;
localSaveState
(
it
->
dit
,
it
->
si
,
set
,
getId
()
);
bslot
(
it
,
set_blk
);
}
}
else
if
(
it
->
ait
!=
myaioEnd
()
)
{
if
(
it
->
ait
->
second
.
blocked
!=
set_blk
)
{
long
val
=
set_blk
?
it
->
ait
->
second
.
value
:
it
->
ait
->
second
.
real_value
;
it
->
ait
->
second
.
blocked
=
set_blk
;
localSaveValue
(
it
->
ait
,
it
->
si
,
val
,
getId
()
);
long
val
=
set_blk
?
it
->
it
->
second
.
value
:
it
->
it
->
second
.
real_value
;
it
->
it
->
second
.
blocked
=
set_blk
;
localSetValue
(
it
->
it
,
it
->
si
,
val
,
getId
()
);
bslot
(
it
,
set_blk
);
}
}
...
...
@@ -1320,43 +715,21 @@ void IOController::setBlockDependsSlot( DependsSlot sl )
bslot
=
sl
;
}
// -----------------------------------------------------------------------------
IOController_i
::
A
SensorInfoSeq
*
IOController
::
getSensorSeq
(
const
IDSeq
&
lst
)
IOController_i
::
SensorInfoSeq
*
IOController
::
getSensorSeq
(
const
IDSeq
&
lst
)
{
int
size
=
lst
.
length
();
IOController_i
::
ASensorInfoSeq
*
res
=
new
IOController_i
::
ASensorInfoSeq
();
IOController_i
::
SensorInfoSeq
*
res
=
new
IOController_i
::
SensorInfoSeq
();
res
->
length
(
size
);
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
{
DIOStateList
::
iterator
it
=
dioList
.
find
(
UniSetTypes
::
key
(
lst
[
i
],
conf
->
getLocalNode
())
);
if
(
it
!=
dioList
.
end
()
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
].
si
=
it
->
second
.
si
;
(
*
res
)[
i
].
type
=
it
->
second
.
type
;
(
*
res
)[
i
].
real_value
=
it
->
second
.
real_state
?
1
:
0
;
(
*
res
)[
i
].
value
=
it
->
second
.
state
?
1
:
0
;
(
*
res
)[
i
].
undefined
=
it
->
second
.
undefined
;
(
*
res
)[
i
].
blocked
=
it
->
second
.
blocked
;
(
*
res
)[
i
].
priority
=
it
->
second
.
priority
;
// (*res)[i].ci = it->second.ci;
(
*
res
)[
i
].
tv_sec
=
it
->
second
.
tv_sec
;
(
*
res
)[
i
].
tv_usec
=
it
->
second
.
tv_usec
;
(
*
res
)[
i
].
default_val
=
it
->
second
.
default_val
;
continue
;
}
}
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
IOStateList
::
iterator
it
=
ioList
.
find
(
UniSetTypes
::
key
(
lst
[
i
],
conf
->
getLocalNode
())
);
if
(
it
!=
ioList
.
end
()
)
{
AIOStateList
::
iterator
it
=
aioList
.
find
(
UniSetTypes
::
key
(
lst
[
i
],
conf
->
getLocalNode
())
);
if
(
it
!=
aioList
.
end
()
)
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
]
=
it
->
second
;
continue
;
}
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
(
*
res
)[
i
]
=
it
->
second
;
continue
;
}
// элемент не найден...
...
...
@@ -1377,26 +750,10 @@ IDSeq* IOController::setOutputSeq(const IOController_i::OutSeq& lst, ObjectId su
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
{
DIOStateList
::
iterator
it
=
dioList
.
find
(
UniSetTypes
::
key
(
lst
[
i
].
si
.
id
,
lst
[
i
].
si
.
node
)
);
if
(
it
!=
dioList
.
end
()
)
{
if
(
it
->
second
.
type
==
UniversalIO
::
DigitalInput
)
localSaveState
(
it
,
lst
[
i
].
si
,(
bool
)
lst
[
i
].
value
,
sup_id
);
else
// if( it.second.iotype == UniversalIO::DigitalOutput )
localSetState
(
it
,
lst
[
i
].
si
,(
bool
)
lst
[
i
].
value
,
sup_id
);
continue
;
}
}
{
AIOStateList
::
iterator
it
=
aioList
.
find
(
UniSetTypes
::
key
(
lst
[
i
].
si
.
id
,
lst
[
i
].
si
.
node
)
);
if
(
it
!=
aioList
.
end
()
)
IOStateList
::
iterator
it
=
ioList
.
find
(
UniSetTypes
::
key
(
lst
[
i
].
si
.
id
,
lst
[
i
].
si
.
node
)
);
if
(
it
!=
ioList
.
end
()
)
{
if
(
it
->
second
.
type
==
UniversalIO
::
AnalogInput
)
localSaveValue
(
it
,
lst
[
i
].
si
,
lst
[
i
].
value
,
sup_id
);
else
// if( it.second.iotype == UniversalIO::AnalogOutput )
localSetValue
(
it
,
lst
[
i
].
si
,
lst
[
i
].
value
,
sup_id
);
localSetValue
(
it
,
lst
[
i
].
si
,
lst
[
i
].
value
,
sup_id
);
continue
;
}
}
...
...
@@ -1410,19 +767,8 @@ IDSeq* IOController::setOutputSeq(const IOController_i::OutSeq& lst, ObjectId su
// -----------------------------------------------------------------------------
IOController_i
::
ShortIOInfo
IOController
::
getChangedTime
(
const
IOController_i
::
SensorInfo
&
si
)
{
DIOStateList
::
iterator
dit
=
dioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
dit
!=
dioList
.
end
()
)
{
IOController_i
::
ShortIOInfo
i
;
uniset_rwmutex_rlock
lock
(
dit
->
second
.
val_lock
);
i
.
value
=
dit
->
second
.
state
?
1
:
0
;
i
.
tv_sec
=
dit
->
second
.
tv_sec
;
i
.
tv_usec
=
dit
->
second
.
tv_usec
;
return
i
;
}
AIOStateList
::
iterator
ait
=
aioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
ait
!=
aioList
.
end
()
)
IOStateList
::
iterator
ait
=
ioList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
ait
!=
ioList
.
end
()
)
{
IOController_i
::
ShortIOInfo
i
;
uniset_rwmutex_rlock
lock
(
ait
->
second
.
val_lock
);
...
...
@@ -1434,7 +780,7 @@ IOController_i::ShortIOInfo IOController::getChangedTime( const IOController_i::
// -------------
ostringstream
err
;
err
<<
myname
<<
"(getChangedTime):
дискретный вход(выход) с именем "
err
<<
myname
<<
"(getChangedTime):
вход(выход) с именем "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" не найден"
;
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
...
...
@@ -1445,10 +791,10 @@ IOController_i::ShortMapSeq* IOController::getSensors()
// ЗА ОСВОБОЖДЕНИЕ ПАМЯТИ ОТВЕЧАЕТ КЛИЕНТ!!!!!!
// поэтому ему лучше пользоваться при получении _var-классом
IOController_i
::
ShortMapSeq
*
res
=
new
IOController_i
::
ShortMapSeq
();
res
->
length
(
aioList
.
size
()
+
d
ioList
.
size
()
);
res
->
length
(
ioList
.
size
()
);
int
i
=
0
;
for
(
AIOStateList
::
iterator
it
=
aioList
.
begin
();
it
!=
a
ioList
.
end
();
++
it
)
for
(
IOStateList
::
iterator
it
=
ioList
.
begin
();
it
!=
ioList
.
end
();
++
it
)
{
IOController_i
::
ShortMap
m
;
{
...
...
@@ -1459,19 +805,7 @@ IOController_i::ShortMapSeq* IOController::getSensors()
}
(
*
res
)[
i
++
]
=
m
;
}
for
(
DIOStateList
::
iterator
it
=
dioList
.
begin
();
it
!=
dioList
.
end
();
++
it
)
{
IOController_i
::
ShortMap
m
;
{
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
m
.
id
=
it
->
second
.
si
.
id
;
m
.
value
=
it
->
second
.
state
?
1
:
0
;
m
.
type
=
it
->
second
.
type
;
}
(
*
res
)[
i
++
]
=
m
;
}
return
res
;
}
// -----------------------------------------------------------------------------
src/Processes/IONotifyController.cc
View file @
08e088e0
...
...
@@ -40,8 +40,7 @@ using namespace std;
// ------------------------------------------------------------------------------------------
IONotifyController
::
IONotifyController
()
:
restorer
(
NULL
),
askDMutex
(
"askDMutex"
),
askAMutex
(
"askAMutex"
),
askIOMutex
(
"askIOMutex"
),
trshMutex
(
"trshMutex"
),
maxAttemtps
(
conf
->
getPIntField
(
"ConsumerMaxAttempts"
,
5
))
{
...
...
@@ -51,28 +50,24 @@ maxAttemtps(conf->getPIntField("ConsumerMaxAttempts", 5))
IONotifyController
::
IONotifyController
(
const
string
name
,
const
string
section
,
NCRestorer
*
d
)
:
IOController
(
name
,
section
),
restorer
(
d
),
askDMutex
(
name
+
"askDMutex"
),
askAMutex
(
name
+
"askAMutex"
),
askIOMutex
(
name
+
"askIOMutex"
),
trshMutex
(
name
+
"trshMutex"
),
maxAttemtps
(
conf
->
getPIntField
(
"ConsumerMaxAttempts"
,
5
))
{
// добавляем фильтры
addAFilter
(
sigc
::
mem_fun
(
this
,
&
IONotifyController
::
myAFilter
)
);
addDFilter
(
sigc
::
mem_fun
(
this
,
&
IONotifyController
::
myDFilter
)
);
addIOFilter
(
sigc
::
mem_fun
(
this
,
&
IONotifyController
::
myIOFilter
)
);
setDependsSlot
(
sigc
::
mem_fun
(
this
,
&
IONotifyController
::
onChangeUndefined
)
);
}
IONotifyController
::
IONotifyController
(
ObjectId
id
,
NCRestorer
*
d
)
:
IOController
(
id
),
restorer
(
d
),
askDMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_askDMutex"
),
askAMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_askAMutex"
),
askIOMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_askIOMutex"
),
trshMutex
(
string
(
conf
->
oind
->
getMapName
(
id
))
+
"_trshMutex"
),
maxAttemtps
(
conf
->
getPIntField
(
"ConsumerMaxAttempts"
,
5
))
{
// добавляем фильтры
addAFilter
(
sigc
::
mem_fun
(
this
,
&
IONotifyController
::
myAFilter
)
);
addDFilter
(
sigc
::
mem_fun
(
this
,
&
IONotifyController
::
myDFilter
)
);
addIOFilter
(
sigc
::
mem_fun
(
this
,
&
IONotifyController
::
myIOFilter
)
);
setDependsSlot
(
sigc
::
mem_fun
(
this
,
&
IONotifyController
::
onChangeUndefined
)
);
}
...
...
@@ -146,168 +141,31 @@ bool IONotifyController::removeConsumer(ConsumerList& lst, const ConsumerInfo& c
return
false
;
}
// ------------------------------------------------------------------------------------------
/*!
* \param si - информация о датчике
* \param ci - информация о заказчике
* \param cmd - команда см. UniversalIO::UIOCommand
*/
void
IONotifyController
::
askSensor
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
)
{
IOTypes
type
=
IOController
::
getIOType
(
si
);
switch
(
type
)
{
case
UniversalIO
:
:
DigitalInput
:
askState
(
si
,
ci
,
cmd
);
break
;;
case
UniversalIO
:
:
AnalogInput
:
askValue
(
si
,
ci
,
cmd
);
break
;
case
UniversalIO
:
:
AnalogOutput
:
case
UniversalIO
:
:
DigitalOutput
:
askOutput
(
si
,
ci
,
cmd
);
break
;
default
:
{
ostringstream
err
;
err
<<
myname
<<
"(askSensor): Неизвестен тип для "
<<
conf
->
oind
->
getNameById
(
si
.
id
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
break
;
}
}
// ------------------------------------------------------------------------------------------
/*!
* \param si - информация о датчике
* \param ci - информация о заказчике
* \param cmd - команда см. UniversalIO::UIOCommand
*/
void
IONotifyController
::
askState
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
)
{
// провреки на несуществующий датчик проводить не надо т.к. заказчик принципиально
// не может обратится к этому контроллеру по ссылке на другой датчик
// (ведь ссылка на датчик это ссылка на контроллер который за него отвечает)
// контроль заказа типа датчика(дискретного) здесь производится
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
"(askState): поступил "
<<
(
cmd
==
UIODontNotify
?
"отказ"
:
"заказ"
)
<<
" от "
<<
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
)
<<
" на дискретный датчик "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
}
// если такого дискретного датчика нет, здесь сработает исключение...
DIOStateList
::
iterator
li
=
mydioEnd
();
localGetState
(
li
,
si
);
// lock ???
if
(
li
==
mydioEnd
()
)
{
ostringstream
err
;
err
<<
myname
<<
"(askState): датчик имя: "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" не найден"
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
if
(
li
->
second
.
type
!=
UniversalIO
::
DigitalInput
)
{
ostringstream
err
;
err
<<
myname
<<
"(askState): ВХОДНОЙ ДИСКРЕТНЫЙ ДАТЧИК с именем "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" не найден"
;
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
{
//lock
uniset_rwmutex_wrlock
lock
(
askDMutex
);
// а раз есть заносим(исключаем) заказчика
ask
(
askDIOList
,
si
,
ci
,
cmd
);
}
// unlock
// посылка первый раз состояния
if
(
cmd
==
UniversalIO
::
UIONotify
||
(
cmd
==
UIONotifyFirstNotNull
&&
li
->
second
.
state
)
)
{
SensorMessage
smsg
;
smsg
.
id
=
si
.
id
;
smsg
.
node
=
si
.
node
;
smsg
.
consumer
=
ci
.
id
;
smsg
.
sensor_type
=
li
->
second
.
type
;
smsg
.
priority
=
(
Message
::
Priority
)
li
->
second
.
priority
;
smsg
.
supplier
=
getId
();
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
smsg
.
state
=
li
->
second
.
state
;
smsg
.
value
=
li
->
second
.
state
?
1
:
0
;
smsg
.
undefined
=
li
->
second
.
undefined
;
smsg
.
sm_tv_sec
=
li
->
second
.
tv_sec
;
smsg
.
sm_tv_usec
=
li
->
second
.
tv_usec
;
}
TransportMessage
tm
(
smsg
.
transport_msg
());
try
{
ui
.
send
(
ci
.
id
,
tm
,
ci
.
node
);
}
catch
(
Exception
&
ex
)
{
unideb
[
Debug
::
WARN
]
<<
myname
<<
"(askState): "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
" "
<<
ex
<<
endl
;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
unideb
[
Debug
::
WARN
]
<<
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
)
<<
" недоступен!!(CORBA::SystemException): "
<<
ex
.
NP_minorString
()
<<
endl
;
}
catch
(...){}
}
}
// ------------------------------------------------------------------------------------------
/*!
* \param si - информация о датчике
* \param ci - информация о заказчике
* \param cmd - команда см. UniversalIO::UIOCommand
*/
void
IONotifyController
::
ask
Value
(
const
IOController_i
::
SensorInfo
&
si
,
void
IONotifyController
::
ask
Sensor
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
)
{
// провреки на несуществующий датчик проводить не надо т.к. заказчик ппинципиально
// не может обратится к этому контроллеру по ссылке на другой датчик
// (ведь ссылка на датчик это ссылка на контроллер который за него отвечает)
// контроль заказа именно АНАЛОГОВО датчика производится
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
"(ask
Value
): поступил "
<<
(
cmd
==
UIODontNotify
?
"отказ"
:
"заказ"
)
<<
" от "
unideb
[
Debug
::
INFO
]
<<
"(ask
Sensor
): поступил "
<<
(
cmd
==
UIODontNotify
?
"отказ"
:
"заказ"
)
<<
" от "
<<
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
)
<<
" на аналоговый датчик "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
}
// если такого аналогового датчика нет, здесь сработает исключение...
AIOStateList
::
iterator
li
=
mya
ioEnd
();
IOStateList
::
iterator
li
=
my
ioEnd
();
localGetValue
(
li
,
si
);
if
(
li
->
second
.
type
!=
UniversalIO
::
AnalogInput
)
{
ostringstream
err
;
err
<<
myname
<<
"(askState): ВХОДНОЙ АНАЛОГОВЫЙ ДАТЧИК с именем "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" не найден"
;
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
{
// lock
uniset_rwmutex_wrlock
lock
(
ask
A
Mutex
);
uniset_rwmutex_wrlock
lock
(
ask
IO
Mutex
);
// а раз есть заносим(исключаем) заказчика
ask
(
ask
AIOList
,
si
,
ci
,
cmd
);
ask
(
ask
IOList
,
si
,
ci
,
cmd
);
}
// unlock
// посылка первый раз состояния
...
...
@@ -326,20 +184,19 @@ void IONotifyController::askValue(const IOController_i::SensorInfo& si,
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
smsg
.
value
=
li
->
second
.
value
;
smsg
.
state
=
li
->
second
.
value
?
true
:
false
;
smsg
.
undefined
=
li
->
second
.
undefined
;
smsg
.
sm_tv_sec
=
li
->
second
.
tv_sec
;
smsg
.
sm_tv_usec
=
li
->
second
.
tv_usec
;
}
TransportMessage
tm
(
smsg
.
transport_msg
());
TransportMessage
tm
(
smsg
.
transport_msg
());
try
{
ui
.
send
(
ci
.
id
,
tm
,
ci
.
node
);
}
catch
(
Exception
&
ex
)
{
unideb
[
Debug
::
WARN
]
<<
myname
<<
"(askValue
): "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
" catch "
<<
ex
<<
endl
;
unideb
[
Debug
::
WARN
]
<<
myname
<<
"(askSensor
): "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
" catch "
<<
ex
<<
endl
;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
...
...
@@ -439,13 +296,7 @@ void IONotifyController::ask(AskMap& askLst, const IOController_i::SensorInfo& s
}
}
// ------------------------------------------------------------------------------------------
bool
IONotifyController
::
myDFilter
(
const
UniDigitalIOInfo
&
di
,
CORBA
::
Boolean
newstate
,
UniSetTypes
::
ObjectId
sup_id
)
{
return
(
di
.
state
==
newstate
)
?
false
:
true
;
}
// ------------------------------------------------------------------------------------------
bool
IONotifyController
::
myAFilter
(
const
UniAnalogIOInfo
&
ai
,
bool
IONotifyController
::
myIOFilter
(
const
USensorIOInfo
&
ai
,
CORBA
::
Long
newvalue
,
UniSetTypes
::
ObjectId
sup_id
)
{
if
(
ai
.
value
==
newvalue
)
...
...
@@ -460,71 +311,16 @@ bool IONotifyController::myAFilter(const UniAnalogIOInfo& ai,
return
true
;
}
// ------------------------------------------------------------------------------------------
void
IONotifyController
::
localSaveState
(
IOController
::
DIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniSetTypes
::
ObjectId
sup_id
)
{
// Если датчик не найден здесь сработает исключение NameNotFound
bool
prevState
=
IOController
::
localGetState
(
it
,
si
);
IOController
::
localSaveState
(
it
,
si
,
state
,
sup_id
);
// сравниваем именно с li->second.state
// т.к. фактическое сохранённое значение может быть изменено
// фильтрами или блокировками..
SensorMessage
sm
(
si
.
id
,
state
);
{
// lock
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
if
(
prevState
==
it
->
second
.
state
)
return
;
// Уведомления рассылаем только в случае смены состояния...
sm
.
id
=
si
.
id
;
sm
.
node
=
si
.
node
;
sm
.
state
=
it
->
second
.
state
;
sm
.
value
=
it
->
second
.
state
?
1
:
0
;
sm
.
undefined
=
it
->
second
.
undefined
;
sm
.
priority
=
(
Message
::
Priority
)
it
->
second
.
priority
;
sm
.
supplier
=
sup_id
;
sm
.
sensor_type
=
it
->
second
.
type
;
sm
.
sm_tv_sec
=
it
->
second
.
tv_sec
;
sm
.
sm_tv_usec
=
it
->
second
.
tv_usec
;
}
// unlock
try
{
uniset_rwmutex_rlock
l
(
sig_mutex
);
changeSignal
.
emit
(
&
sm
);
}
catch
(...){}
try
{
if
(
!
it
->
second
.
db_ignore
)
loggingInfo
(
sm
);
}
catch
(...){}
AskMap
::
iterator
it1
=
askDIOList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it1
!=
askDIOList
.
end
()
)
{
// lock
//uniset_mutex_lock lock(askDMutex, 1000);
uniset_rwmutex_rlock
lock
(
askDMutex
);
send
(
it1
->
second
,
sm
);
}
// unlock
}
// ------------------------------------------------------------------------------------------
void
IONotifyController
::
localSaveValue
(
IOController
::
AIOStateList
::
iterator
&
li
,
void
IONotifyController
::
localSetValue
(
IOController
::
IOStateList
::
iterator
&
li
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Long
value
,
UniSetTypes
::
ObjectId
sup_id
)
{
// Если датчик не найден сдесь сработает исключение
long
prevValue
=
IOController
::
localGetValue
(
li
,
si
);
if
(
li
==
my
a
ioEnd
()
)
// ???
if
(
li
==
myioEnd
()
)
// ???
{
ostringstream
err
;
err
<<
myname
<<
"(localS
aveValue): аналоговый вход(выход) с именем "
err
<<
myname
<<
"(localS
etValue): аналоговый вход(выход) с именем "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" не найден"
;
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
...
...
@@ -532,7 +328,7 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
IOController
::
localS
ave
Value
(
li
,
si
,
value
,
sup_id
);
IOController
::
localS
et
Value
(
li
,
si
,
value
,
sup_id
);
// сравниваем именно с li->second.value
// т.к. фактическое сохранённое значение может быть изменено
...
...
@@ -547,7 +343,6 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
// Рассылаем уведомления только в слуае изменения значения
sm
.
id
=
si
.
id
;
sm
.
node
=
si
.
node
;
sm
.
state
=
li
->
second
.
value
!=
0
?
true
:
false
;
sm
.
value
=
li
->
second
.
value
;
sm
.
undefined
=
li
->
second
.
undefined
;
sm
.
priority
=
(
Message
::
Priority
)
li
->
second
.
priority
;
...
...
@@ -573,10 +368,10 @@ void IONotifyController::localSaveValue( IOController::AIOStateList::iterator& l
}
catch
(...){}
AskMap
::
iterator
it
=
ask
A
IOList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
!=
ask
A
IOList
.
end
()
)
AskMap
::
iterator
it
=
askIOList
.
find
(
key
(
si
.
id
,
si
.
node
)
);
if
(
it
!=
askIOList
.
end
()
)
{
// lock
uniset_rwmutex_rlock
lock
(
ask
A
Mutex
);
uniset_rwmutex_rlock
lock
(
ask
IO
Mutex
);
send
(
it
->
second
,
sm
);
}
...
...
@@ -677,29 +472,8 @@ void IONotifyController::dumpOrdersList(const IOController_i::SensorInfo& si,
try
{
NCRestorer
::
SInfo
inf
;
UniversalIO
::
IOTypes
t
(
getIOType
(
si
));
switch
(
t
)
{
case
UniversalIO
:
:
DigitalInput
:
case
UniversalIO
:
:
DigitalOutput
:
{
IOController_i
::
DigitalIOInfo
dinf
(
getDInfo
(
si
));
inf
=
dinf
;
}
break
;
case
UniversalIO
:
:
AnalogOutput
:
case
UniversalIO
:
:
AnalogInput
:
{
IOController_i
::
AnalogIOInfo
ainf
(
getAInfo
(
si
));
inf
=
ainf
;
}
break
;
default
:
return
;
}
IOController_i
::
SensorIOInfo
ainf
(
getSensorIOInfo
(
si
)
);
inf
=
ainf
;
restorer
->
dump
(
this
,
inf
,
lst
);
}
catch
(
Exception
&
ex
)
...
...
@@ -717,28 +491,8 @@ void IONotifyController::dumpThresholdList(const IOController_i::SensorInfo& si,
try
{
NCRestorer
::
SInfo
inf
;
UniversalIO
::
IOTypes
t
(
getIOType
(
si
));
switch
(
t
)
{
case
UniversalIO
:
:
DigitalInput
:
case
UniversalIO
:
:
DigitalOutput
:
{
IOController_i
::
DigitalIOInfo
dinf
(
getDInfo
(
si
));
inf
=
dinf
;
}
break
;
case
UniversalIO
:
:
AnalogOutput
:
case
UniversalIO
:
:
AnalogInput
:
{
IOController_i
::
AnalogIOInfo
ainf
(
getAInfo
(
si
));
inf
=
ainf
;
}
break
;
default
:
return
;
}
IOController_i
::
SensorIOInfo
ainf
(
getSensorIOInfo
(
si
));
inf
=
ainf
;
restorer
->
dumpThreshold
(
this
,
inf
,
lst
);
}
catch
(
Exception
&
ex
)
...
...
@@ -757,7 +511,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
throw
IONotifyController_i
::
BadRange
();
// если такого дискретного датчика нет сдесь сработает исключение...
AIOStateList
::
iterator
li
=
mya
ioEnd
();
IOStateList
::
iterator
li
=
my
ioEnd
();
CORBA
::
Long
val
=
localGetValue
(
li
,
si
);
{
// lock
...
...
@@ -767,7 +521,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
UniSetTypes
::
KeyType
skey
(
key
(
si
.
id
,
si
.
node
)
);
AskThresholdMap
::
iterator
it
=
askTMap
.
find
(
skey
);
ThresholdInfoExt
ti
(
tid
,
lowLimit
,
hiLimit
,
sb
);
ti
.
itSID
=
my
d
ioEnd
();
ti
.
itSID
=
myioEnd
();
switch
(
cmd
)
{
...
...
@@ -781,7 +535,7 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
tli
.
si
=
si
;
tli
.
list
=
lst
;
tli
.
type
=
li
->
second
.
type
;
tli
.
ait
=
my
a
ioEnd
();
tli
.
ait
=
myioEnd
();
addThreshold
(
lst
,
ti
,
ci
);
askTMap
.
insert
(
AskThresholdMap
::
value_type
(
skey
,
tli
));
try
...
...
@@ -826,7 +580,6 @@ void IONotifyController::askThreshold(const IOController_i::SensorInfo& si, cons
sm
.
id
=
si
.
id
;
sm
.
node
=
si
.
node
;
sm
.
value
=
val
;
sm
.
state
=
val
!=
0
?
true
:
false
;
sm
.
undefined
=
li
->
second
.
undefined
;
sm
.
sensor_type
=
li
->
second
.
type
;
sm
.
priority
=
(
Message
::
Priority
)
li
->
second
.
priority
;
...
...
@@ -946,7 +699,7 @@ bool IONotifyController::removeThreshold(ThresholdExtList& lst, ThresholdInfoExt
return
false
;
}
// --------------------------------------------------------------------------------------------------------------
void
IONotifyController
::
checkThreshold
(
AIOStateList
::
iterator
&
li
,
void
IONotifyController
::
checkThreshold
(
IOStateList
::
iterator
&
li
,
const
IOController_i
::
SensorInfo
&
si
,
bool
send_msg
)
{
...
...
@@ -962,10 +715,10 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if
(
lst
->
second
.
list
.
empty
()
)
return
;
if
(
li
==
my
a
ioEnd
()
)
li
=
my
a
find
(
key
(
si
.
id
,
si
.
node
));
if
(
li
==
myioEnd
()
)
li
=
my
io
find
(
key
(
si
.
id
,
si
.
node
));
if
(
li
==
my
a
ioEnd
()
)
if
(
li
==
myioEnd
()
)
return
;
// ???
SensorMessage
sm
;
...
...
@@ -977,7 +730,6 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
{
uniset_rwmutex_rlock
lock
(
li
->
second
.
val_lock
);
sm
.
value
=
li
->
second
.
value
;
sm
.
state
=
li
->
second
.
value
!=
0
?
true
:
false
;
sm
.
undefined
=
li
->
second
.
undefined
;
sm
.
sm_tv_sec
=
li
->
second
.
tv_sec
;
sm
.
sm_tv_usec
=
li
->
second
.
tv_usec
;
...
...
@@ -1018,7 +770,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if
(
it
->
inverse
)
state
^=
1
;
localS
aveState
(
it
->
itSID
,
SensorInfo
(
it
->
sid
),
state
,
getId
());
localS
etValue
(
it
->
itSID
,
SensorInfo
(
it
->
sid
),(
state
?
1
:
0
)
,
getId
());
}
catch
(
UniSetTypes
::
Exception
&
ex
)
{
...
...
@@ -1028,7 +780,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
}
if
(
send_msg
)
send
(
it
->
clst
,
sm
);
send
(
it
->
clst
,
sm
);
}
// Проверка верхнего предела
// значение должно быть больше hiLimit+чуствительность
...
...
@@ -1056,7 +808,7 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
if
(
it
->
inverse
)
state
^=
1
;
localS
aveState
(
it
->
itSID
,
SensorInfo
(
it
->
sid
),
state
,
getId
());
localS
etValue
(
it
->
itSID
,
SensorInfo
(
it
->
sid
),(
state
?
1
:
0
)
,
getId
());
}
catch
(
UniSetTypes
::
Exception
&
ex
)
{
...
...
@@ -1075,161 +827,8 @@ void IONotifyController::checkThreshold( AIOStateList::iterator& li,
}
// --------------------------------------------------------------------------------------------------------------
void
IONotifyController
::
askOutput
(
const
IOController_i
::
SensorInfo
&
si
,
const
UniSetTypes
::
ConsumerInfo
&
ci
,
UniversalIO
::
UIOCommand
cmd
)
{
// провреки на несуществующий выход проводить не надо т.к. заказчик принципиально
// не может обратится к этому контроллеру по ссылке на другой датчик
// (ведь ссылка на датчик это ссылка на контроллер который за него отвечает)
// контроль заказа типа выхода здесь производится
string
name
=
conf
->
oind
->
getNameById
(
ci
.
id
,
ci
.
node
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
"(askOutput): поступил "
<<
(
cmd
==
UIODontNotify
?
"отказ"
:
"заказ"
)
<<
" от ("
<<
ci
.
id
<<
") "
<<
name
<<
" на выход "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
}
// если такого выхода нет, то здесь сработает исключение...
IOTypes
type
=
IOController
::
getIOType
(
si
);
switch
(
type
)
{
case
UniversalIO
:
:
DigitalOutput
:
{
//lock
uniset_rwmutex_wrlock
lock
(
askDOMutex
);
// а раз есть заносим(исключаем) заказчика
ask
(
askDOList
,
si
,
ci
,
cmd
);
}
// unlock
break
;
case
UniversalIO
:
:
AnalogOutput
:
{
//lock
uniset_rwmutex_wrlock
lock
(
askAOMutex
);
// а раз есть заносим(исключаем) заказчика
ask
(
askAOList
,
si
,
ci
,
cmd
);
}
// unlock
break
;
default
:
{
ostringstream
err
;
err
<<
myname
<<
"(askOutput): 'выход' с именем "
<<
conf
->
oind
->
getNameById
(
si
.
id
)
<<
" не найден"
;
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
unideb
[
Debug
::
INFO
]
<<
err
.
str
()
<<
endl
;
throw
IOController_i
::
NameNotFound
(
err
.
str
().
c_str
());
}
break
;
}
// посылка первый раз состояния
if
(
cmd
==
UniversalIO
::
UIONotify
)
{
try
{
SensorMessage
smsg
;
smsg
.
id
=
si
.
id
;
smsg
.
node
=
si
.
node
;
try
{
if
(
type
==
UniversalIO
::
AnalogOutput
)
{
smsg
.
value
=
IOController
::
getValue
(
si
);
smsg
.
state
=
smsg
.
value
!=
0
?
true
:
false
;
}
else
{
smsg
.
state
=
IOController
::
getState
(
si
);
smsg
.
value
=
smsg
.
state
?
1
:
0
;
}
smsg
.
undefined
=
false
;
}
catch
(
IOController_i
::
Undefined
)
{
smsg
.
undefined
=
true
;
}
smsg
.
consumer
=
ci
.
id
;
smsg
.
sensor_type
=
type
;
smsg
.
supplier
=
getId
();
TransportMessage
tm
(
smsg
.
transport_msg
());
ui
.
send
(
ci
.
id
,
tm
,
ci
.
node
);
}
catch
(
Exception
&
ex
)
{
unideb
[
Debug
::
WARN
]
<<
myname
<<
"(askOutput): "
<<
name
<<
" "
<<
ex
<<
endl
;
}
catch
(
CORBA
::
SystemException
&
ex
)
{
unideb
[
Debug
::
WARN
]
<<
myname
<<
"(askOutput): "
<<
name
<<
" недоступен!!(CORBA::SystemException)"
<<
ex
.
NP_minorString
()
<<
endl
;
}
catch
(...){}
}
}
// --------------------------------------------------------------------------------------------------------------
void
IONotifyController
::
localSetState
(
IOController
::
DIOStateList
::
iterator
&
it
,
const
IOController_i
::
SensorInfo
&
si
,
CORBA
::
Boolean
state
,
UniSetTypes
::
ObjectId
sup_id
)
{
// Если датчик не найден сдесь сработает исключение NameNotFound
bool
prevState
=
IOController
::
localGetState
(
it
,
si
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
myname
<<
"(IONotifyController::setState): state="
<<
state
<<
" для выхода "
<<
conf
->
oind
->
getNameById
(
si
.
id
,
si
.
node
)
<<
endl
;
}
// сохраняем состояние
IOController
::
localSetState
(
it
,
si
,
state
,
sup_id
);
// Рассылаем уведомления только если значение изменилось...
SensorMessage
sm
(
si
.
id
,
state
);
{
// lock
uniset_rwmutex_rlock
lock
(
it
->
second
.
val_lock
);
if
(
prevState
==
it
->
second
.
state
)
return
;
sm
.
id
=
si
.
id
;
sm
.
node
=
si
.
node
;
sm
.
state
=
it
->
second
.
state
;
sm
.
value
=
sm
.
state
?
1
:
0
;
sm
.
undefined
=
it
->
second
.
undefined
;
sm
.
priority
=
(
Message
::
Priority
)
it
->
second
.
priority
;
sm
.
sm_tv_sec
=
it
->
second
.
tv_sec
;
sm
.
sm_tv_usec
=
it
->
second
.
tv_usec
;
sm
.
sensor_type
=
it
->
second
.
type
;
sm
.
supplier
=
sup_id
;
}
// unlock
try
{
uniset_rwmutex_rlock
l
(
sig_mutex
);
changeSignal
.
emit
(
&
sm
);
}
catch
(...){}
try
{
if
(
!
it
->
second
.
db_ignore
)
loggingInfo
(
sm
);
}
catch
(...){}
AskMap
::
iterator
ait
=
askDOList
.
find
(
UniSetTypes
::
key
(
si
.
id
,
si
.
node
)
);
if
(
ait
!=
askDOList
.
end
()
)
{
// lock
uniset_rwmutex_rlock
lock
(
askDMutex
);
send
(
ait
->
second
,
sm
);
}
// unlock
}
// --------------------------------------------------------------------------------------------------------------
void
IONotifyController
::
localSetValue
(
IOController
::
AIOStateList
::
iterator
&
li
,
#if 0
void IONotifyController::localSetValue( IOController::IOStateList::iterator& li,
const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id )
{
...
...
@@ -1281,7 +880,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li
AskMap::iterator dit = askAOList.find( UniSetTypes::key(si.id,si.node) );
if( dit!=askAOList.end() )
{ // lock
uniset_rwmutex_rlock
lock
(
ask
A
Mutex
);
uniset_rwmutex_rlock lock(ask
IO
Mutex);
send(dit->second, sm);
}
...
...
@@ -1292,7 +891,7 @@ void IONotifyController::localSetValue( IOController::AIOStateList::iterator& li
// }
// catch(...){}
}
#endif
// --------------------------------------------------------------------------------------------------------------
IONotifyController
::
ThresholdExtList
::
iterator
IONotifyController
::
findThreshold
(
UniSetTypes
::
KeyType
key
,
UniSetTypes
::
ThresholdId
tid
)
...
...
@@ -1386,39 +985,28 @@ void IONotifyController::onChangeUndefined( DependsList::iterator it, bool undef
sm
.
node
=
it
->
si
.
node
;
sm
.
undefined
=
undefined
;
if
(
it
->
dit
!=
mydioEnd
()
)
{
sm
.
state
=
it
->
dit
->
second
.
state
;
sm
.
value
=
sm
.
state
?
1
:
0
;
sm
.
sm_tv_sec
=
it
->
dit
->
second
.
tv_sec
;
sm
.
sm_tv_usec
=
it
->
dit
->
second
.
tv_usec
;
sm
.
priority
=
(
Message
::
Priority
)
it
->
dit
->
second
.
priority
;
sm
.
sensor_type
=
it
->
dit
->
second
.
type
;
sm
.
supplier
=
DefaultObjectId
;
}
else
if
(
it
->
ait
!=
myaioEnd
()
)
if
(
it
->
it
!=
myioEnd
()
)
{
sm
.
value
=
it
->
ait
->
second
.
value
;
sm
.
state
=
sm
.
value
!=
0
?
true
:
false
;
sm
.
sm_tv_sec
=
it
->
ait
->
second
.
tv_sec
;
sm
.
sm_tv_usec
=
it
->
ait
->
second
.
tv_usec
;
sm
.
priority
=
(
Message
::
Priority
)
it
->
ait
->
second
.
priority
;
sm
.
sensor_type
=
it
->
ait
->
second
.
type
;
sm
.
ci
=
it
->
ait
->
second
.
ci
;
sm
.
value
=
it
->
it
->
second
.
value
;
sm
.
sm_tv_sec
=
it
->
it
->
second
.
tv_sec
;
sm
.
sm_tv_usec
=
it
->
it
->
second
.
tv_usec
;
sm
.
priority
=
(
Message
::
Priority
)
it
->
it
->
second
.
priority
;
sm
.
sensor_type
=
it
->
it
->
second
.
type
;
sm
.
ci
=
it
->
it
->
second
.
ci
;
sm
.
supplier
=
DefaultObjectId
;
}
try
{
if
(
!
it
->
a
it
->
second
.
db_ignore
)
if
(
!
it
->
it
->
second
.
db_ignore
)
loggingInfo
(
sm
);
}
catch
(...){}
AskMap
::
iterator
it1
=
ask
D
IOList
.
find
(
key
(
it
->
si
.
id
,
it
->
si
.
node
)
);
if
(
it1
!=
ask
D
IOList
.
end
()
)
AskMap
::
iterator
it1
=
askIOList
.
find
(
key
(
it
->
si
.
id
,
it
->
si
.
node
)
);
if
(
it1
!=
askIOList
.
end
()
)
{
// lock
uniset_rwmutex_rlock
lock
(
ask
D
Mutex
);
uniset_rwmutex_rlock
lock
(
ask
IO
Mutex
);
send
(
it1
->
second
,
sm
);
}
// unlock
}
...
...
src/Various/Configuration.cc
View file @
08e088e0
...
...
@@ -970,7 +970,7 @@ xmlNode* Configuration::getXMLObjectNode( UniSetTypes::ObjectId id )
return
0
;
}
// -------------------------------------------------------------------------
UniversalIO
::
IOType
s
Configuration
::
getIOType
(
UniSetTypes
::
ObjectId
id
)
UniversalIO
::
IOType
Configuration
::
getIOType
(
UniSetTypes
::
ObjectId
id
)
{
const
ObjectInfo
*
i
=
oind
->
getObjectInfo
(
id
);
if
(
i
&&
(
xmlNode
*
)(
i
->
data
)
)
...
...
@@ -982,7 +982,7 @@ UniversalIO::IOTypes Configuration::getIOType( UniSetTypes::ObjectId id )
return
UniversalIO
::
UnknownIOType
;
}
// -------------------------------------------------------------------------
UniversalIO
::
IOType
s
Configuration
::
getIOType
(
const
std
::
string
name
)
UniversalIO
::
IOType
Configuration
::
getIOType
(
const
std
::
string
name
)
{
// Если указано "короткое" имя
// то просто сперва ищём ID, а потом по нему
...
...
src/Various/MessageType.cc
View file @
08e088e0
...
...
@@ -71,10 +71,9 @@ VoidMessage::VoidMessage()
//--------------------------------------------------------------------------------------------
SensorMessage
::
SensorMessage
()
:
id
(
DefaultObjectId
),
state
(
false
),
value
(
0
),
undefined
(
false
),
sensor_type
(
UniversalIO
::
D
igitalInput
),
sensor_type
(
UniversalIO
::
D
I
),
threshold
(
false
),
tid
(
UniSetTypes
::
DefaultThresholdId
)
{
...
...
@@ -90,37 +89,10 @@ tid(UniSetTypes::DefaultThresholdId)
ci
.
precision
=
0
;
}
SensorMessage
::
SensorMessage
(
ObjectId
id
,
bool
state
,
Priority
priority
,
UniversalIO
::
IOTypes
st
,
ObjectId
consumer
)
:
id
(
id
),
state
(
state
),
value
(
0
),
undefined
(
false
),
sensor_type
(
st
),
threshold
(
false
),
tid
(
UniSetTypes
::
DefaultThresholdId
)
{
value
=
state
?
1
:
0
;
type
=
Message
::
SensorInfo
;
this
->
priority
=
priority
;
this
->
consumer
=
consumer
;
sm_tv_sec
=
tm
.
tv_sec
;
sm_tv_usec
=
tm
.
tv_usec
;
ci
.
minRaw
=
0
;
ci
.
maxRaw
=
0
;
ci
.
minCal
=
0
;
ci
.
maxCal
=
0
;
ci
.
sensibility
=
0
;
ci
.
precision
=
0
;
}
SensorMessage
::
SensorMessage
(
ObjectId
id
,
long
value
,
const
IOController_i
::
CalibrateInfo
&
ci
,
Priority
priority
,
UniversalIO
::
IOType
s
st
,
ObjectId
consumer
)
:
UniversalIO
::
IOType
st
,
ObjectId
consumer
)
:
id
(
id
),
state
(
false
),
value
(
value
),
undefined
(
false
),
sensor_type
(
st
),
...
...
@@ -128,7 +100,6 @@ ci(ci),
threshold
(
false
),
tid
(
UniSetTypes
::
DefaultThresholdId
)
{
state
=
value
!=
0
;
type
=
Message
::
SensorInfo
;
this
->
priority
=
priority
;
this
->
consumer
=
consumer
;
...
...
src/Various/NCRestorer.cc
View file @
08e088e0
...
...
@@ -57,14 +57,11 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
// Регистрируем (если не найден)
switch
(
inf
.
type
)
{
case
UniversalIO
:
:
DigitalInput
:
case
UniversalIO
:
:
DigitalOutput
:
ic
->
dsRegistration
(
inf
);
break
;
case
UniversalIO
:
:
AnalogInput
:
case
UniversalIO
:
:
AnalogOutput
:
ic
->
asRegistration
(
inf
);
case
UniversalIO
:
:
DI
:
case
UniversalIO
:
:
DO
:
case
UniversalIO
:
:
AI
:
case
UniversalIO
:
:
AO
:
ic
->
ioRegistration
(
inf
);
break
;
default
:
...
...
@@ -79,20 +76,11 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
switch
(
inf
.
type
)
{
case
UniversalIO
:
:
DigitalInput
:
ic
->
askDIOList
[
k
]
=
lst
;
break
;
case
UniversalIO
:
:
AnalogInput
:
ic
->
askAIOList
[
k
]
=
lst
;
break
;
case
UniversalIO
:
:
DigitalOutput
:
ic
->
askDOList
[
k
]
=
lst
;
break
;
case
UniversalIO
:
:
AnalogOutput
:
ic
->
askAOList
[
k
]
=
lst
;
case
UniversalIO
:
:
DI
:
case
UniversalIO
:
:
AI
:
case
UniversalIO
:
:
DO
:
case
UniversalIO
:
:
AO
:
ic
->
askIOList
[
k
]
=
lst
;
break
;
default
:
...
...
@@ -117,14 +105,11 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
// Регистрируем (если не найден)
switch
(
inf
.
type
)
{
case
UniversalIO
:
:
DigitalInput
:
case
UniversalIO
:
:
DigitalOutput
:
ic
->
dsRegistration
(
inf
);
break
;
case
UniversalIO
:
:
AnalogInput
:
case
UniversalIO
:
:
AnalogOutput
:
ic
->
asRegistration
(
inf
);
case
UniversalIO
:
:
DI
:
case
UniversalIO
:
:
DO
:
case
UniversalIO
:
:
AI
:
case
UniversalIO
:
:
AO
:
ic
->
ioRegistration
(
inf
);
break
;
default
:
...
...
@@ -135,26 +120,26 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
// default init iterators
for
(
IONotifyController
::
ThresholdExtList
::
iterator
it
=
lst
.
begin
();
it
!=
lst
.
end
();
++
it
)
it
->
itSID
=
ic
->
my
d
ioEnd
();
it
->
itSID
=
ic
->
myioEnd
();
UniSetTypes
::
KeyType
k
(
key
(
inf
.
si
.
id
,
inf
.
si
.
node
)
);
ic
->
askTMap
[
k
].
si
=
inf
.
si
;
ic
->
askTMap
[
k
].
type
=
inf
.
type
;
ic
->
askTMap
[
k
].
list
=
lst
;
ic
->
askTMap
[
k
].
ait
=
ic
->
my
a
ioEnd
();
ic
->
askTMap
[
k
].
ait
=
ic
->
myioEnd
();
try
{
switch
(
inf
.
type
)
{
case
UniversalIO
:
:
DigitalInput
:
case
UniversalIO
:
:
DigitalOutput
:
case
UniversalIO
:
:
AnalogOutput
:
case
UniversalIO
:
:
DI
:
case
UniversalIO
:
:
DO
:
break
;
case
UniversalIO
:
:
AnalogInput
:
case
UniversalIO
:
:
AO
:
case
UniversalIO
:
:
AI
:
{
IOController
::
AIOStateList
::
iterator
it
(
ic
->
mya
ioEnd
());
IOController
::
IOStateList
::
iterator
it
(
ic
->
my
ioEnd
());
ic
->
checkThreshold
(
it
,
inf
.
si
,
false
);
}
break
;
...
...
@@ -178,25 +163,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
}
}
// ------------------------------------------------------------------------------------------
NCRestorer
::
SInfo
&
NCRestorer
::
SInfo
::
operator
=
(
IOController_i
::
DigitalIOInfo
&
inf
)
{
this
->
si
=
inf
.
si
;
this
->
type
=
inf
.
type
;
this
->
priority
=
inf
.
priority
;
this
->
default_val
=
inf
.
default_val
;
this
->
real_value
=
inf
.
real_state
?
1
:
0
;
this
->
ci
.
minRaw
=
0
;
this
->
ci
.
maxRaw
=
0
;
this
->
ci
.
minCal
=
0
;
this
->
ci
.
maxCal
=
0
;
this
->
ci
.
sensibility
=
0
;
this
->
db_ignore
=
false
;
this
->
undefined
=
false
;
this
->
any
=
0
;
return
*
this
;
}
// ------------------------------------------------------------------------------------------
NCRestorer
::
SInfo
&
NCRestorer
::
SInfo
::
operator
=
(
IOController_i
::
AnalogIOInfo
&
inf
)
NCRestorer
::
SInfo
&
NCRestorer
::
SInfo
::
operator
=
(
IOController_i
::
SensorIOInfo
&
inf
)
{
this
->
si
=
inf
.
si
;
this
->
type
=
inf
.
type
;
...
...
@@ -210,18 +177,3 @@ NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::AnalogIOInfo& in
return
*
this
;
}
// ------------------------------------------------------------------------------------------
NCRestorer
::
SInfo
::
operator
IOController
::
UniDigitalIOInfo
()
{
IOController
::
UniDigitalIOInfo
ret
;
ret
.
state
=
this
->
value
?
true
:
false
;
ret
.
si
=
this
->
si
;
ret
.
type
=
this
->
type
;
ret
.
priority
=
this
->
priority
;
ret
.
default_val
=
this
->
default_val
?
true
:
false
;
ret
.
any
=
this
->
any
;
ret
.
undefined
=
this
->
undefined
;
ret
.
db_ignore
=
this
->
db_ignore
;
return
ret
;
}
// ------------------------------------------------------------------------------------------
src/Various/NCRestorer_XML.cc
View file @
08e088e0
...
...
@@ -132,28 +132,14 @@ void NCRestorer_XML::read_list( UniXML& xml, xmlNode* node, IONotifyController*
switch
(
inf
.
type
)
{
case
UniversalIO
:
:
DigitalOutput
:
case
UniversalIO
:
:
DigitalInput
:
{
try
{
IOController
::
UniDigitalIOInfo
dinf
(
inf
);
dinf
.
real_state
=
dinf
.
state
;
dsRegistration
(
ic
,
dinf
,
true
);
}
catch
(
Exception
&
ex
)
{
unideb
[
Debug
::
WARN
]
<<
"(read_list): "
<<
ex
<<
endl
;
}
}
break
;
case
UniversalIO
:
:
AnalogOutput
:
case
UniversalIO
:
:
AnalogInput
:
case
UniversalIO
:
:
DO
:
case
UniversalIO
:
:
DI
:
case
UniversalIO
:
:
AO
:
case
UniversalIO
:
:
AI
:
{
try
{
as
Registration
(
ic
,
inf
,
true
);
io
Registration
(
ic
,
inf
,
true
);
}
catch
(
Exception
&
ex
)
{
...
...
@@ -294,7 +280,7 @@ bool NCRestorer_XML::getSensorInfo( UniXML& xml, xmlNode* it, SInfo& inf )
}
// калибровка
if
(
inf
.
type
==
UniversalIO
::
A
nalogInput
||
inf
.
type
==
UniversalIO
::
AnalogOutput
)
if
(
inf
.
type
==
UniversalIO
::
A
I
||
inf
.
type
==
UniversalIO
::
AO
)
{
inf
.
ci
.
minRaw
=
xml
.
getIntProp
(
it
,
"rmin"
);
inf
.
ci
.
maxRaw
=
xml
.
getIntProp
(
it
,
"rmax"
);
...
...
@@ -456,9 +442,9 @@ bool NCRestorer_XML::getThresholdInfo( UniXML& xml,xmlNode* node,
}
else
{
UniversalIO
::
IOType
s
iotype
=
conf
->
getIOType
(
ti
.
sid
);
UniversalIO
::
IOType
iotype
=
conf
->
getIOType
(
ti
.
sid
);
// Пока что IONotifyController поддерживает работу только с 'DI'.
if
(
iotype
!=
UniversalIO
::
D
igitalInput
)
if
(
iotype
!=
UniversalIO
::
D
I
)
{
unideb
[
Debug
::
CRIT
]
<<
"(NCRestorer_XML:getThresholdInfo): "
<<
" Bad iotype("
<<
iotype
<<
") for "
<<
sid_name
<<
". iotype must be 'DI'!"
<<
endl
;
...
...
@@ -580,9 +566,8 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
continue
;
UniSetTypes
::
KeyType
k
=
UniSetTypes
::
key
(
mydepinfo
.
si
.
id
,
mydepinfo
.
si
.
node
);
mydepinfo
.
dit
=
dioFind
(
ic
,
k
);
mydepinfo
.
ait
=
aioFind
(
ic
,
k
);
if
(
mydepinfo
.
dit
==
dioEnd
(
ic
)
&&
mydepinfo
.
ait
==
aioEnd
(
ic
)
)
mydepinfo
.
it
=
ioFind
(
ic
,
k
);
if
(
mydepinfo
.
it
==
ioEnd
(
ic
)
)
{
unideb
[
Debug
::
CRIT
]
<<
"(NCRestorer_XML:build_depends): Датчик "
<<
xml
.
getProp
(
node
,
"name"
)
...
...
@@ -602,9 +587,8 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
if
(
getDependsInfo
(
xml
,
dit
,
blk
)
)
{
k
=
UniSetTypes
::
key
(
blk
.
si
.
id
,
blk
.
si
.
node
);
blk
.
dit
=
dioFind
(
ic
,
k
);
blk
.
ait
=
aioFind
(
ic
,
k
);
if
(
blk
.
dit
==
dioEnd
(
ic
)
&&
blk
.
ait
==
aioEnd
(
ic
)
)
blk
.
it
=
ioFind
(
ic
,
k
);
if
(
blk
.
it
==
ioEnd
(
ic
)
)
{
unideb
[
Debug
::
CRIT
]
<<
ic
->
getName
()
<<
"(NCRestorer_XML:build_depends): "
<<
" Не найдена зависимость на "
<<
xml
.
getProp
(
dit
,
"name"
)
...
...
@@ -616,33 +600,22 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
long
block_val
=
dit
.
getIntProp
(
"block_value"
);
long
defval
=
0
;
if
(
blk
.
dit
!=
dioEnd
(
ic
)
)
defval
=
blk
.
dit
->
second
.
default_val
;
else
if
(
blk
.
ait
!=
aioEnd
(
ic
)
)
defval
=
blk
.
ait
->
second
.
default_val
;
if
(
blk
.
it
!=
ioEnd
(
ic
)
)
defval
=
blk
.
it
->
second
.
default_val
;
// Проверка начальных условий для высталения блокировки
bool
blk_set
=
defval
?
false
:
true
;
if
(
mydepinfo
.
block_invert
)
blk_set
^=
true
;
if
(
mydepinfo
.
dit
!=
dioEnd
(
ic
)
)
{
mydepinfo
.
dit
->
second
.
blocked
=
blk_set
;
mydepinfo
.
dit
->
second
.
block_state
=
(
bool
)
block_val
;
mydepinfo
.
dit
->
second
.
state
=
defval
;
mydepinfo
.
dit
->
second
.
real_state
=
defval
;
if
(
blk_set
)
mydepinfo
.
dit
->
second
.
state
=
(
bool
)
block_val
;
}
else
if
(
mydepinfo
.
ait
!=
aioEnd
(
ic
)
)
if
(
mydepinfo
.
it
!=
ioEnd
(
ic
)
)
{
mydepinfo
.
a
it
->
second
.
blocked
=
blk_set
;
mydepinfo
.
a
it
->
second
.
block_value
=
block_val
;
mydepinfo
.
it
->
second
.
blocked
=
blk_set
;
mydepinfo
.
it
->
second
.
block_value
=
block_val
;
if
(
blk_set
)
{
mydepinfo
.
ait
->
second
.
real_value
=
mydepinfo
.
a
it
->
second
.
value
;
mydepinfo
.
a
it
->
second
.
value
=
block_val
;
mydepinfo
.
it
->
second
.
real_value
=
mydepinfo
.
it
->
second
.
value
;
mydepinfo
.
it
->
second
.
value
=
block_val
;
}
}
...
...
@@ -650,21 +623,9 @@ void NCRestorer_XML::build_depends( UniXML& xml, xmlNode* node, IONotifyControll
// (без проверки на дублирование
// т.к. не может быть два одинаковых ID
// в конф. файле...
if
(
blk
.
dit
!=
dioEnd
(
ic
)
)
{
blk
.
dit
->
second
.
dlst
.
push_back
(
mydepinfo
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
ic
->
getName
()
<<
"(NCRestorer_XML:build_depends):"
<<
" add "
<<
xml
.
getProp
(
it
,
"name"
)
<<
" to list of depends for "
<<
xml
.
getProp
(
dit
,
"name"
)
<<
" blk_set="
<<
blk_set
<<
endl
;
}
}
else
if
(
blk
.
ait
!=
aioEnd
(
ic
)
)
if
(
blk
.
it
!=
ioEnd
(
ic
)
)
{
blk
.
a
it
->
second
.
dlst
.
push_back
(
mydepinfo
);
blk
.
it
->
second
.
dlst
.
push_back
(
mydepinfo
);
if
(
unideb
.
debugging
(
Debug
::
INFO
)
)
{
unideb
[
Debug
::
INFO
]
<<
ic
->
getName
()
<<
"(NCRestorer_XML:build_depends):"
...
...
src/Various/SMonitor.cc
View file @
08e088e0
...
...
@@ -130,12 +130,7 @@ void SMonitor::sensorInfo( SensorMessage *si )
cout
<<
"("
<<
setw
(
6
)
<<
si
->
id
<<
"): "
<<
setw
(
8
)
<<
UniversalInterface
::
timeToString
(
si
->
sm_tv_sec
,
":"
)
<<
"("
<<
setw
(
6
)
<<
si
->
sm_tv_usec
<<
"): "
;
cout
<<
setw
(
45
)
<<
conf
->
oind
->
getMapName
(
si
->
id
);
if
(
si
->
sensor_type
==
UniversalIO
::
DigitalInput
||
si
->
sensor_type
==
UniversalIO
::
DigitalOutput
)
cout
<<
"
\t
state="
<<
si
->
state
<<
endl
;
else
if
(
si
->
sensor_type
==
UniversalIO
::
AnalogInput
||
si
->
sensor_type
==
UniversalIO
::
AnalogOutput
)
cout
<<
"
\t
value="
<<
si
->
value
<<
"
\t
fvalue="
<<
(
(
float
)
si
->
value
/
pow
(
10.0
,
si
->
ci
.
precision
)
)
<<
endl
;
cout
<<
"
\t
value="
<<
si
->
value
<<
"
\t
fvalue="
<<
(
(
float
)
si
->
value
/
pow
(
10.0
,
si
->
ci
.
precision
)
)
<<
endl
;
if
(
!
script
.
empty
()
)
{
...
...
@@ -147,13 +142,7 @@ void SMonitor::sensorInfo( SensorMessage *si )
else
cmd
<<
conf
->
getBinDir
()
<<
script
;
cmd
<<
" "
<<
si
->
id
<<
" "
;
if
(
si
->
sensor_type
==
UniversalIO
::
DigitalInput
||
si
->
sensor_type
==
UniversalIO
::
DigitalOutput
)
cmd
<<
si
->
state
;
else
if
(
si
->
sensor_type
==
UniversalIO
::
AnalogInput
||
si
->
sensor_type
==
UniversalIO
::
AnalogOutput
)
cmd
<<
si
->
value
;
cmd
<<
" "
<<
si
->
sm_tv_sec
<<
" "
<<
si
->
sm_tv_usec
;
cmd
<<
" "
<<
si
->
id
<<
" "
<<
si
->
value
<<
" "
<<
si
->
sm_tv_sec
<<
" "
<<
si
->
sm_tv_usec
;
(
void
)
system
(
cmd
.
str
().
c_str
());
// if( WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
...
...
src/Various/STLStorage.cc
View file @
08e088e0
...
...
@@ -63,7 +63,7 @@ void STLStorage::saveState(const IOController_i::DigitalIOInfo& di,bool st)
}
// --------------------------------------------------------------------------
void
STLStorage
::
saveValue
(
const
IOController_i
::
Analog
IOInfo
&
ai
,
long
val
)
void
STLStorage
::
saveValue
(
const
IOController_i
::
Sensor
IOInfo
&
ai
,
long
val
)
{
}
...
...
src/Various/SViewer.cc
View file @
08e088e0
...
...
@@ -182,16 +182,11 @@ void SViewer::getInfo( ObjectId id )
return
;
}
IOController_i
::
DSensorInfoSeq_var
dmap
=
ioc
->
getDigitalSensorsMap
();
IOController_i
::
ASensorInfoSeq_var
amap
=
ioc
->
getAnalogSensorsMap
();
IOController_i
::
SensorInfoSeq_var
amap
=
ioc
->
getSensorsMap
();
IONotifyController_i
::
ThresholdsListSeq_var
tlst
=
ioc
->
getThresholdsList
();
try
{
updateDSensors
(
dmap
,
id
);
}
catch
(...){};
try
{
updateASensors
(
amap
,
id
);
{
updateSensors
(
amap
,
id
);
}
catch
(...){}
try
...
...
@@ -213,59 +208,16 @@ void SViewer::getInfo( ObjectId id )
}
// ---------------------------------------------------------------------------
void
SViewer
::
updateDSensors
(
IOController_i
::
DSensorInfoSeq_var
&
dmap
,
UniSetTypes
::
ObjectId
oid
)
{
string
owner
=
ORepHelpers
::
getShortName
(
conf
->
oind
->
getMapName
(
oid
));
cout
<<
"
\n
======================================================
\n
"
<<
owner
;
cout
<<
"
\t
Дискретные датчики"
;
cout
<<
"
\n
------------------------------------------------------"
<<
endl
;
int
size
=
dmap
->
length
();
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
if
(
dmap
[
i
].
type
==
UniversalIO
::
DigitalInput
)
{
// UniSetTypes::KeyType k = key(dmap[i].si.id, dmap[i].si.node);
string
name
(
conf
->
oind
->
getNameById
(
dmap
[
i
].
si
.
id
,
dmap
[
i
].
si
.
node
));
if
(
isShort
)
name
=
ORepHelpers
::
getShortName
(
name
);
string
txtname
(
conf
->
oind
->
getTextName
(
dmap
[
i
].
si
.
id
)
);
printInfo
(
dmap
[
i
].
si
.
id
,
name
,
dmap
[
i
].
state
,
owner
,
txtname
,
"DI"
);
}
}
cout
<<
"------------------------------------------------------
\n
"
;
cout
<<
"
\n
======================================================
\n
"
<<
owner
;
cout
<<
"
\t
Дискретные выходы"
;
cout
<<
"
\n
------------------------------------------------------"
<<
endl
;
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
if
(
dmap
[
i
].
type
==
UniversalIO
::
DigitalOutput
)
{
// UniSetTypes::KeyType k = key(dmap[i].si.id, dmap[i].si.node);
string
name
(
conf
->
oind
->
getNameById
(
dmap
[
i
].
si
.
id
,
dmap
[
i
].
si
.
node
));
if
(
isShort
)
name
=
ORepHelpers
::
getShortName
(
name
);
string
txtname
(
conf
->
oind
->
getTextName
(
dmap
[
i
].
si
.
id
)
);
printInfo
(
dmap
[
i
].
si
.
id
,
name
,
dmap
[
i
].
state
,
owner
,
txtname
,
"DO"
);
}
}
cout
<<
"------------------------------------------------------
\n
"
;
}
// ---------------------------------------------------------------------------
void
SViewer
::
updateASensors
(
IOController_i
::
ASensorInfoSeq_var
&
amap
,
UniSetTypes
::
ObjectId
oid
)
void
SViewer
::
updateSensors
(
IOController_i
::
SensorInfoSeq_var
&
amap
,
UniSetTypes
::
ObjectId
oid
)
{
string
owner
=
ORepHelpers
::
getShortName
(
conf
->
oind
->
getMapName
(
oid
));
cout
<<
"
\n
======================================================
\n
"
<<
owner
;
cout
<<
"
\t
Аналоговые д
атчики"
;
cout
<<
"
\t
Д
атчики"
;
cout
<<
"
\n
------------------------------------------------------"
<<
endl
;
int
size
=
amap
->
length
();
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
if
(
amap
[
i
].
type
==
UniversalIO
::
A
nalogInput
)
if
(
amap
[
i
].
type
==
UniversalIO
::
A
I
||
amap
[
i
].
type
==
UniversalIO
::
DI
)
{
// UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node);
string
name
(
conf
->
oind
->
getNameById
(
amap
[
i
].
si
.
id
,
amap
[
i
].
si
.
node
));
...
...
@@ -278,11 +230,11 @@ void SViewer::updateASensors(IOController_i::ASensorInfoSeq_var& amap, UniSetTyp
cout
<<
"------------------------------------------------------
\n
"
;
cout
<<
"
\n
======================================================
\n
"
<<
owner
;
cout
<<
"
\t
Аналоговые в
ыходы"
;
cout
<<
"
\t
В
ыходы"
;
cout
<<
"
\n
------------------------------------------------------"
<<
endl
;
for
(
int
i
=
0
;
i
<
size
;
i
++
)
{
if
(
amap
[
i
].
type
==
UniversalIO
::
A
nalogOutput
)
if
(
amap
[
i
].
type
==
UniversalIO
::
A
O
||
amap
[
i
].
type
==
UniversalIO
::
DO
)
{
// UniSetTypes::KeyType k = key(amap[i].si.id, amap[i].si.node);
string
name
(
conf
->
oind
->
getNameById
(
amap
[
i
].
si
.
id
,
amap
[
i
].
si
.
node
));
...
...
@@ -309,11 +261,11 @@ void SViewer::updateThresholds( IONotifyController_i::ThresholdsListSeq_var& tls
cout
<<
"("
<<
setw
(
5
)
<<
tlst
[
i
].
si
.
id
<<
") | "
;
switch
(
tlst
[
i
].
type
)
{
case
UniversalIO
:
:
A
nalogInput
:
case
UniversalIO
:
:
A
I
:
cout
<<
"AI"
;
break
;
case
UniversalIO
:
:
A
nalogOutput
:
case
UniversalIO
:
:
A
O
:
cout
<<
"AO"
;
break
;
...
...
tests/conftest.cc
View file @
08e088e0
...
...
@@ -14,7 +14,7 @@ int main(int argc, const char **argv)
cout
<<
"--confile - Configuration file. Default: test.xml"
<<
endl
;
return
0
;
}
cout
<<
"**** uni_atoi('')="
<<
uni_atoi
(
""
)
<<
endl
;
try
...
...
@@ -32,38 +32,37 @@ int main(int argc, const char **argv)
string
mn
(
conf
->
oind
->
getMapName
(
1
));
cout
<<
"**** check getMapName: "
<<
(
mn
.
empty
()
?
"FAILED"
:
"OK"
)
<<
endl
;
UniversalIO
::
IOType
s
t1
=
conf
->
getIOType
(
1
);
UniversalIO
::
IOType
t1
=
conf
->
getIOType
(
1
);
cout
<<
"**** getIOType for "
<<
mn
<<
endl
;
cout
<<
"**** check getIOType(id): ("
<<
t1
<<
") "
<<
(
t1
==
UniversalIO
::
UnknownIOType
?
"FAILED"
:
"OK"
)
<<
endl
;
UniversalIO
::
IOType
s
t2
=
conf
->
getIOType
(
mn
);
UniversalIO
::
IOType
t2
=
conf
->
getIOType
(
mn
);
cout
<<
"**** check getIOType(name): ("
<<
t2
<<
") "
<<
(
t2
==
UniversalIO
::
UnknownIOType
?
"FAILED"
:
"OK"
)
<<
endl
;
UniversalIO
::
IOTypes
t3
=
conf
->
getIOType
(
"Input1_S"
);
cout
<<
"**** check getIOType(name): for short name 'Input1_S': ("
<<
t3
<<
") "
<<
(
t3
==
UniversalIO
::
UnknownIOType
?
"FAILED"
:
"OK"
)
<<
endl
;
UniversalIO
::
IOType
t3
=
conf
->
getIOType
(
"Input1_S"
);
cout
<<
"**** check getIOType(name): for short name 'Input1_S': ("
<<
t3
<<
") "
<<
(
t3
==
UniversalIO
::
UnknownIOType
?
"FAILED"
:
"OK"
)
<<
endl
;
int
i1
=
uni_atoi
(
"-100"
);
cout
<<
"**** check uni_atoi: '-100' "
<<
(
(
i1
!=
-
100
)
?
"FAILED"
:
"OK"
)
<<
endl
;
int
i2
=
uni_atoi
(
"20"
);
cout
<<
"**** check uni_atoi: '20' "
<<
(
(
i2
!=
20
)
?
"FAILED"
:
"OK"
)
<<
endl
;
xmlNode
*
cnode
=
conf
->
getNode
(
"testnode"
);
if
(
cnode
==
NULL
)
{
cerr
<<
"<testnode name='testnode'> not found"
<<
endl
;
return
1
;
if
(
cnode
==
NULL
)
{
cerr
<<
"<testnode name='testnode'> not found"
<<
endl
;
return
1
;
}
cout
<<
"**** check conf->getNode function [OK] "
<<
endl
;
UniXML_iterator
it
(
cnode
);
UniXML_iterator
it
(
cnode
);
int
prop2
=
conf
->
getArgInt
(
"--prop-id2"
,
it
.
getProp
(
"id2"
));
cerr
<<
"**** check conf->getArgInt(arg1,...): "
<<
(
(
prop2
==
0
)
?
"[FAILED]"
:
"OK"
)
<<
endl
;
int
prop3
=
conf
->
getArgInt
(
"--prop-dummy"
,
it
.
getProp
(
"id2"
));
cerr
<<
"**** check conf->getArgInt(...,arg2): "
<<
(
(
prop3
!=
-
100
)
?
"[FAILED]"
:
"OK"
)
<<
endl
;
int
prop1
=
conf
->
getArgPInt
(
"--prop-id2"
,
it
.
getProp
(
"id2"
),
0
);
cerr
<<
"**** check conf->getArgPInt(...): "
<<
(
(
prop1
==
0
)
?
"[FAILED]"
:
"OK"
)
<<
endl
;
...
...
@@ -72,10 +71,10 @@ int main(int argc, const char **argv)
int
prop5
=
conf
->
getArgPInt
(
"--prop-dummy"
,
it
.
getProp
(
"dummy"
),
0
);
cerr
<<
"**** check conf->getArgPInt(...,...,defval): "
<<
(
(
prop5
!=
0
)
?
"[FAILED]"
:
"OK"
)
<<
endl
;
return
0
;
}
catch
(
SystemError
&
err
)
...
...
tests/ui.cc
View file @
08e088e0
...
...
@@ -22,9 +22,9 @@ int main( int argc, const char **argv )
}
cout
<<
"** check getConfIOType function **"
<<
endl
;
UniversalIO
::
IOType
s
t
=
ui
.
getConfIOType
(
id1
);
UniversalIO
::
IOType
t
=
ui
.
getConfIOType
(
id1
);
cout
<<
"sensor ID="
<<
id1
<<
" iotype="
<<
t
<<
endl
;
if
(
t
!=
UniversalIO
::
D
igitalInput
)
if
(
t
!=
UniversalIO
::
D
I
)
{
cout
<<
"** FAILED! check getSensorID function **"
<<
endl
;
return
1
;
...
...
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