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