Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
proview
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Esteban Blanc
proview
Commits
42811546
Commit
42811546
authored
Mar 13, 2007
by
claes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
parent
46c028fe
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
756 additions
and
250 deletions
+756
-250
opc/exe/opc_provider/src/opc_provider.cpp
opc/exe/opc_provider/src/opc_provider.cpp
+317
-142
opc/exe/opc_provider/src/opc_provider.h
opc/exe/opc_provider/src/opc_provider.h
+21
-3
opc/exe/opc_server/src/opc_server.cpp
opc/exe/opc_server/src/opc_server.cpp
+272
-14
opc/lib/opc/src/opc_utl.cpp
opc/lib/opc/src/opc_utl.cpp
+3
-3
opc/wbl/mcomp/src/opc.wb_load
opc/wbl/mcomp/src/opc.wb_load
+143
-88
No files found.
opc/exe/opc_provider/src/opc_provider.cpp
View file @
42811546
/*
* Proview $Id: opc_provider.cpp,v 1.
3 2007-03-08 07:26:29
claes Exp $
* Proview $Id: opc_provider.cpp,v 1.
4 2007-03-13 12:02:07
claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
...
...
@@ -39,6 +39,7 @@
#include "Service.nsmap"
#define START_OIX 1000
#define procom_obj_mFlags_Analog (1 << 31)
static
pwr_tVid
opc_vid
;
static
char
opc_vname
[
32
];
...
...
@@ -47,177 +48,284 @@ static char opc_endpoint[256];
// Wb only
void
opc_provider
::
object
(
co_procom
*
pcom
)
{
if
(
m_list
.
size
()
<=
1
||
m_list
[
0
].
fchoix
==
0
)
{
if
(
m_list
.
size
()
<=
1
||
m_list
[
0
].
po
.
fchoix
==
0
)
{
pcom
->
provideObject
(
LDH__NOSUCHOBJ
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
""
,
""
);
return
;
}
objectOid
(
pcom
,
m_list
[
0
].
fchoix
);
objectOid
(
pcom
,
m_list
[
0
].
po
.
fchoix
);
}
void
opc_provider
::
insert_object
(
pwr_tOix
fth
,
pwr_tOix
bws
,
ns1__BrowseElement
*
element
,
int
first
,
int
last
,
int
load_children
)
int
first
,
int
last
,
int
load_children
,
std
::
string
*
path
)
{
procom
_obj
o
;
opcprv
_obj
o
;
char
*
valp
;
strcpy
(
o
.
name
,
element
->
Name
->
c_str
());
o
.
oix
=
next_oix
++
;
o
.
fthoix
=
fth
;
strcpy
(
o
.
po
.
name
,
name_to_objectname
(
(
char
*
)
element
->
Name
->
c_str
()));
if
(
element
->
ItemPath
)
path
=
element
->
ItemPath
;
if
(
path
)
{
strcpy
(
o
.
item_name
,
path
->
c_str
());
strcat
(
o
.
item_name
,
element
->
ItemName
->
c_str
());
}
else
strcpy
(
o
.
item_name
,
element
->
ItemName
->
c_str
());
o
.
po
.
oix
=
next_oix
++
;
o
.
po
.
fthoix
=
fth
;
if
(
!
element
->
IsItem
)
{
o
.
cid
=
pwr_cClass_Opc_Hier
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Hier
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Hier
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Hier
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
if
(
opc_get_property
(
element
->
Properties
,
opc_mProperty_Description
,
&
valp
))
strncpy
(
((
pwr_sClass_Opc_Hier
*
)
o
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Hier
*
)
o
.
body
)
->
Description
));
strncpy
(
((
pwr_sClass_Opc_Hier
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Hier
*
)
o
.
po
.
body
)
->
Description
));
}
else
{
if
(
opc_get_property
(
element
->
Properties
,
opc_mProperty_DataType
,
&
valp
))
{
if
(
strcmp
(
valp
,
"string"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_String
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_String
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_String
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_String
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"boolean"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Boolean
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Boolean
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Boolean
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Boolean
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"float"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Float
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Float
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Float
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Float
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"double"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Double
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Double
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Double
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Double
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"double"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Double
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Double
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Double
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Double
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"decimal"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Decimal
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Decimal
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Decimal
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Decimal
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"int"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Int
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Int
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Int
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Int
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"short"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Short
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Short
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Short
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Short
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"byte"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Byte
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Byte
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Byte
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Byte
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"unsignedLong"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_UnsignedLong
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_UnsignedLong
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_UnsignedLong
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_UnsignedLong
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"unsignedInt"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_UnsignedInt
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_UnsignedInt
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_UnsignedInt
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_UnsignedInt
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"unsignedShort"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_UnsignedShort
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_UnsignedShort
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_UnsignedShort
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_UnsignedShort
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"unsignedByte"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_UnsignedByte
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_UnsignedByte
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_UnsignedByte
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_UnsignedByte
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"base64Binary"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Base64Binary
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Base64Binary
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Base64Binary
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Base64Binary
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"dateTime"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_DateTime
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_DateTime
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_DateTime
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_DateTime
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"time"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Time
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Time
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Time
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Time
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"date"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Date
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Date
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Date
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Date
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"duration"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_Duration
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Duration
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Duration
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Duration
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
}
else
if
(
strcmp
(
valp
,
"QName"
)
==
0
)
{
o
.
cid
=
pwr_cClass_Opc_QName
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_QName
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_QName
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_QName
);
o
.
po
.
body
=
calloc
(
1
,
o
.
po
.
body_size
);
}
if
(
opc_get_property
(
element
->
Properties
,
opc_mProperty_Description
,
&
valp
))
{
switch
(
o
.
po
.
cid
)
{
case
pwr_cClass_Opc_Float
:
strncpy
(
((
pwr_sClass_Opc_Float
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Float
*
)
o
.
po
.
body
)
->
Description
));
break
;
case
pwr_cClass_Opc_Double
:
strncpy
(
((
pwr_sClass_Opc_Float
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Double
*
)
o
.
po
.
body
)
->
Description
));
break
;
case
pwr_cClass_Opc_Int
:
strncpy
(
((
pwr_sClass_Opc_Int
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Int
*
)
o
.
po
.
body
)
->
Description
));
break
;
case
pwr_cClass_Opc_Short
:
strncpy
(
((
pwr_sClass_Opc_Short
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Short
*
)
o
.
po
.
body
)
->
Description
));
break
;
case
pwr_cClass_Opc_Byte
:
strncpy
(
((
pwr_sClass_Opc_Byte
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Byte
*
)
o
.
po
.
body
)
->
Description
));
break
;
case
pwr_cClass_Opc_UnsignedInt
:
strncpy
(
((
pwr_sClass_Opc_UnsignedInt
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_UnsignedInt
*
)
o
.
po
.
body
)
->
Description
));
break
;
case
pwr_cClass_Opc_UnsignedShort
:
strncpy
(
((
pwr_sClass_Opc_UnsignedShort
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_UnsignedShort
*
)
o
.
po
.
body
)
->
Description
));
break
;
case
pwr_cClass_Opc_UnsignedByte
:
strncpy
(
((
pwr_sClass_Opc_UnsignedByte
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_UnsignedByte
*
)
o
.
po
.
body
)
->
Description
));
break
;
}
}
}
else
{
o
.
cid
=
pwr_cClass_Opc_Hier
;
o
.
body_size
=
sizeof
(
pwr_sClass_Opc_Hier
);
o
.
body
=
calloc
(
1
,
o
.
body_size
);
o
.
po
.
cid
=
pwr_cClass_Opc_Hier
;
o
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_Hier
);
o
.
po
.
body
=
calloc
(
1
,
o
.
p
o
.
body_size
);
if
(
opc_get_property
(
element
->
Properties
,
opc_mProperty_Description
,
&
valp
))
strncpy
(
((
pwr_sClass_Opc_Hier
*
)
o
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Hier
*
)
o
.
body
)
->
Description
));
strncpy
(
((
pwr_sClass_Opc_Hier
*
)
o
.
po
.
body
)
->
Description
,
valp
,
sizeof
(((
pwr_sClass_Opc_Hier
*
)
o
.
po
.
body
)
->
Description
));
}
}
if
(
first
)
m_list
[
fth
].
fchoix
=
o
.
oix
;
m_list
[
fth
].
po
.
fchoix
=
o
.
p
o
.
oix
;
else
{
o
.
bwsoix
=
bws
;
m_list
[
bws
].
fwsoix
=
o
.
oix
;
o
.
po
.
bwsoix
=
bws
;
m_list
[
bws
].
po
.
fwsoix
=
o
.
p
o
.
oix
;
}
if
(
last
)
{
m_list
[
fth
].
lchoix
=
o
.
oix
;
m_list
[
fth
].
po
.
lchoix
=
o
.
p
o
.
oix
;
if
(
!
first
)
{
o
.
fwsoix
=
m_list
[
fth
]
.
fchoix
;
m_list
[
o
.
fwsoix
].
bwsoix
=
o
.
oix
;
o
.
po
.
fwsoix
=
m_list
[
fth
].
po
.
fchoix
;
m_list
[
o
.
po
.
fwsoix
].
po
.
bwsoix
=
o
.
p
o
.
oix
;
}
else
{
// Single child
o
.
fwsoix
=
o
.
oix
;
o
.
bwsoix
=
o
.
oix
;
o
.
po
.
fwsoix
=
o
.
p
o
.
oix
;
o
.
po
.
bwsoix
=
o
.
p
o
.
oix
;
}
}
if
(
element
->
HasChildren
&&
load_children
)
o
.
flags
|=
procom_obj_mFlags_Loaded
;
o
.
po
.
flags
|=
procom_obj_mFlags_Loaded
;
else
if
(
!
element
->
HasChildren
)
o
.
flags
|=
procom_obj_mFlags_Loaded
;
o
.
po
.
flags
|=
procom_obj_mFlags_Loaded
;
m_list
.
push_back
(
o
);
if
(
opc_get_property
(
element
->
Properties
,
opc_mProperty_EuType
,
&
valp
))
{
if
(
strcmp
(
valp
,
"analog"
)
==
0
)
m_list
[
o
.
po
.
oix
].
po
.
flags
|=
procom_obj_mFlags_Analog
;
}
if
(
m_list
[
o
.
po
.
oix
].
po
.
flags
&
procom_obj_mFlags_Analog
)
{
// Get analog properties
_ns1__GetProperties
get_properties
;
_ns1__GetPropertiesResponse
properties_response
;
ns1__ItemIdentifier
id
;
pwr_tFloat32
high_eu
=
0
;
pwr_tFloat32
low_eu
=
0
;
pwr_tString16
engineering_units
=
""
;
id
.
ItemName
=
new
std
::
string
(
o
.
item_name
);
get_properties
.
ItemIDs
.
push_back
(
&
id
);
opc_mask_to_propertynames
(
get_properties
.
PropertyNames
,
opc_mProperty_HighEU
|
opc_mProperty_LowEU
|
opc_mProperty_EngineeringUnits
);
if
(
soap_call___ns1__GetProperties
(
&
soap
,
opc_endpoint
,
NULL
,
&
get_properties
,
&
properties_response
)
==
SOAP_OK
)
{
if
(
properties_response
.
PropertyLists
.
size
()
>
0
&&
properties_response
.
PropertyLists
[
0
]
->
Properties
.
size
()
>
0
)
{
if
(
opc_get_property
(
properties_response
.
PropertyLists
[
0
]
->
Properties
,
opc_mProperty_HighEU
,
&
valp
))
{
sscanf
(
valp
,
"%f"
,
&
high_eu
);
}
if
(
opc_get_property
(
properties_response
.
PropertyLists
[
0
]
->
Properties
,
opc_mProperty_LowEU
,
&
valp
))
{
sscanf
(
valp
,
"%f"
,
&
low_eu
);
}
if
(
opc_get_property
(
properties_response
.
PropertyLists
[
0
]
->
Properties
,
opc_mProperty_EngineeringUnits
,
&
valp
))
{
strncpy
(
engineering_units
,
valp
,
sizeof
(
engineering_units
));
}
void
*
body
=
m_list
[
o
.
po
.
oix
].
po
.
body
;
switch
(
o
.
po
.
cid
)
{
case
pwr_cClass_Opc_Float
:
((
pwr_sClass_Opc_Float
*
)
body
)
->
HighEU
=
high_eu
;
((
pwr_sClass_Opc_Float
*
)
body
)
->
LowEU
=
low_eu
;
strcpy
(
((
pwr_sClass_Opc_Float
*
)
body
)
->
EngineeringUnits
,
engineering_units
);
break
;
case
pwr_cClass_Opc_Double
:
((
pwr_sClass_Opc_Float
*
)
body
)
->
HighEU
=
high_eu
;
((
pwr_sClass_Opc_Float
*
)
body
)
->
LowEU
=
low_eu
;
strcpy
(
((
pwr_sClass_Opc_Float
*
)
body
)
->
EngineeringUnits
,
engineering_units
);
break
;
default:
;
}
}
}
}
if
(
load_children
)
{
_ns1__Browse
browse
;
_ns1__BrowseResponse
browse_response
;
browse
.
ItemName
=
new
std
::
string
(
longname
(
o
.
oix
)
);
browse
.
ItemName
=
new
std
::
string
(
o
.
item_name
);
opc_mask_to_propertynames
(
browse
.
PropertyNames
,
opc_mProperty_DataType
|
opc_mProperty_Description
);
opc_mProperty_DataType
|
opc_mProperty_Description
|
opc_mProperty_EuType
);
if
(
soap_call___ns1__Browse
(
&
soap
,
opc_endpoint
,
NULL
,
&
browse
,
&
browse_response
)
==
SOAP_OK
)
{
pwr_tOix
next_bws
;
pwr_tOix
bws
=
0
;
for
(
int
i
=
0
;
i
<
(
int
)
browse_response
.
Elements
.
size
();
i
++
)
{
next_bws
=
next_oix
;
insert_object
(
o
.
oix
,
bws
,
browse_response
.
Elements
[
i
],
i
==
0
,
i
==
(
int
)
browse_response
.
Elements
.
size
()
-
1
,
0
);
insert_object
(
o
.
po
.
oix
,
bws
,
browse_response
.
Elements
[
i
],
i
==
0
,
i
==
(
int
)
browse_response
.
Elements
.
size
()
-
1
,
0
,
0
);
bws
=
next_bws
;
}
}
...
...
@@ -228,30 +336,30 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
{
if
(
m_list
.
size
()
==
0
)
{
// Insert volume object
procom
_obj
vo
;
vo
.
cid
=
pwr_eClass_ExternVolume
;
strcpy
(
vo
.
name
,
opc_vname
);
vo
.
body_size
=
sizeof
(
pwr_sExternVolume
);
vo
.
body
=
calloc
(
1
,
v
o
.
body_size
);
vo
.
oix
=
0
;
vo
.
flags
|=
procom_obj_mFlags_Loaded
;
opcprv
_obj
vo
;
vo
.
po
.
cid
=
pwr_eClass_ExternVolume
;
strcpy
(
vo
.
po
.
name
,
opc_vname
);
vo
.
po
.
body_size
=
sizeof
(
pwr_sExternVolume
);
vo
.
po
.
body
=
calloc
(
1
,
vo
.
p
o
.
body_size
);
vo
.
po
.
oix
=
0
;
vo
.
po
.
flags
|=
procom_obj_mFlags_Loaded
;
m_list
.
push_back
(
vo
);
// Insert ServerState object
procom
_obj
so
;
so
.
cid
=
pwr_cClass_Opc_ServerState
;
strcpy
(
so
.
name
,
"OpcServerState"
);
so
.
body_size
=
sizeof
(
pwr_sClass_Opc_ServerState
);
so
.
body
=
calloc
(
1
,
s
o
.
body_size
);
memcpy
(
so
.
body
,
&
server_state
,
s
o
.
body_size
);
so
.
oix
=
next_oix
++
;
so
.
fthoix
=
0
;
so
.
bwsoix
=
s
o
.
oix
;
so
.
fwsoix
=
s
o
.
oix
;
m_list
[
0
].
fchoix
=
s
o
.
oix
;
m_list
[
0
].
lchoix
=
s
o
.
oix
;
so
.
flags
|=
procom_obj_mFlags_Loaded
;
opcprv
_obj
so
;
so
.
po
.
cid
=
pwr_cClass_Opc_ServerState
;
strcpy
(
so
.
po
.
name
,
"OpcServerState"
);
so
.
po
.
body_size
=
sizeof
(
pwr_sClass_Opc_ServerState
);
so
.
po
.
body
=
calloc
(
1
,
so
.
p
o
.
body_size
);
memcpy
(
so
.
po
.
body
,
&
server_state
,
so
.
p
o
.
body_size
);
so
.
po
.
oix
=
next_oix
++
;
so
.
po
.
fthoix
=
0
;
so
.
po
.
bwsoix
=
so
.
p
o
.
oix
;
so
.
po
.
fwsoix
=
so
.
p
o
.
oix
;
m_list
[
0
].
po
.
fchoix
=
so
.
p
o
.
oix
;
m_list
[
0
].
po
.
lchoix
=
so
.
p
o
.
oix
;
so
.
po
.
flags
|=
procom_obj_mFlags_Loaded
;
m_list
.
push_back
(
so
);
// Load Rootlist
...
...
@@ -259,15 +367,16 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
_ns1__BrowseResponse
browse_response
;
opc_mask_to_propertynames
(
browse
.
PropertyNames
,
opc_mProperty_DataType
|
opc_mProperty_Description
);
opc_mProperty_DataType
|
opc_mProperty_Description
|
opc_mProperty_EuType
);
if
(
soap_call___ns1__Browse
(
&
soap
,
opc_endpoint
,
NULL
,
&
browse
,
&
browse_response
)
==
SOAP_OK
)
{
pwr_tOix
bws
=
so
.
oix
;
pwr_tOix
bws
=
so
.
po
.
oix
;
pwr_tOix
next_bws
;
for
(
int
i
=
0
;
i
<
(
int
)
browse_response
.
Elements
.
size
();
i
++
)
{
next_bws
=
next_oix
;
insert_object
(
oix
,
bws
,
browse_response
.
Elements
[
i
],
0
,
i
==
(
int
)
browse_response
.
Elements
.
size
()
-
1
,
1
);
0
,
i
==
(
int
)
browse_response
.
Elements
.
size
()
-
1
,
1
,
0
);
bws
=
next_bws
;
}
}
...
...
@@ -275,13 +384,14 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
soap_print_fault
(
&
soap
,
stderr
);
}
else
if
(
oix
<
m_list
.
size
())
{
if
(
!
(
m_list
[
oix
].
flags
&
procom_obj_mFlags_Loaded
))
{
if
(
!
(
m_list
[
oix
].
po
.
flags
&
procom_obj_mFlags_Loaded
))
{
_ns1__Browse
browse
;
_ns1__BrowseResponse
browse_response
;
browse
.
ItemName
=
new
std
::
string
(
longname
(
oix
)
);
browse
.
ItemName
=
new
std
::
string
(
m_list
[
oix
].
item_name
);
opc_mask_to_propertynames
(
browse
.
PropertyNames
,
opc_mProperty_DataType
|
opc_mProperty_Description
);
opc_mProperty_DataType
|
opc_mProperty_Description
|
opc_mProperty_EuType
);
if
(
soap_call___ns1__Browse
(
&
soap
,
opc_endpoint
,
NULL
,
&
browse
,
&
browse_response
)
==
SOAP_OK
)
{
...
...
@@ -290,11 +400,11 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
for
(
int
i
=
0
;
i
<
(
int
)
browse_response
.
Elements
.
size
();
i
++
)
{
next_bws
=
next_oix
;
insert_object
(
oix
,
bws
,
browse_response
.
Elements
[
i
],
i
==
0
,
i
==
(
int
)
browse_response
.
Elements
.
size
()
-
1
,
0
);
i
==
0
,
i
==
(
int
)
browse_response
.
Elements
.
size
()
-
1
,
0
,
0
);
bws
=
next_bws
;
}
}
m_list
[
oix
].
flags
|=
procom_obj_mFlags_Loaded
;
m_list
[
oix
].
po
.
flags
|=
procom_obj_mFlags_Loaded
;
}
}
...
...
@@ -306,14 +416,14 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
#if 0
for ( int i = 0; i < (int)m_list.size(); i++) {
printf( "oix %2d bws %2d fws %2d fth %2d fch %2d lch %2d flags %lu %s\n",
m_list[i].
oix, m_list[i].bwsoix, m_list[i].fwsoix, m_list[i]
.fthoix,
m_list[i].
fchoix, m_list[i].lchoix, m_list[i].flags, m_list[i]
.name);
m_list[i].
po.oix, m_list[i].po.bwsoix, m_list[i].po.fwsoix, m_list[i].po
.fthoix,
m_list[i].
po.fchoix, m_list[i].po.lchoix, m_list[i].po.flags, m_list[i].po
.name);
}
#endif
vector
<
procom_obj
>
olist
;
for
(
int
i
=
0
;
i
<
(
int
)
m_list
.
size
();
i
++
)
{
if
(
m_list
[
i
].
flags
&
procom_obj_mFlags_Loaded
)
olist
.
push_back
(
m_list
[
i
]);
if
(
m_list
[
i
].
po
.
flags
&
procom_obj_mFlags_Loaded
)
olist
.
push_back
(
m_list
[
i
]
.
po
);
}
printf
(
"*********************************************
\n
"
);
for
(
int
i
=
0
;
i
<
(
int
)
olist
.
size
();
i
++
)
{
...
...
@@ -328,8 +438,8 @@ void opc_provider::objectName( co_procom *pcom, char *name)
{
for
(
int
i
=
0
;
i
<
(
int
)
m_list
.
size
();
i
++
)
{
if
(
!
m_list
[
i
].
flags
&
procom_obj_mFlags_Deleted
)
{
if
(
cdh_NoCaseStrcmp
(
name
,
longname
(
m_list
[
i
].
oix
))
==
0
)
{
if
(
!
m_list
[
i
].
po
.
flags
&
procom_obj_mFlags_Deleted
)
{
if
(
cdh_NoCaseStrcmp
(
name
,
longname
(
m_list
[
i
].
po
.
oix
))
==
0
)
{
objectOid
(
pcom
,
i
);
return
;
}
...
...
@@ -388,12 +498,12 @@ void opc_provider::writeAttribute( co_procom *pcom, pwr_tOix oix, unsigned int o
return
;
}
if
(
offset
+
size
>
m_list
[
oix
].
body_size
)
{
if
(
offset
+
size
>
m_list
[
oix
].
po
.
body_size
)
{
pcom
->
provideStatus
(
LDH__NOSUCHATTR
);
return
;
}
memcpy
(
(
void
*
)((
unsigned
long
)
m_list
[
oix
].
body
+
(
unsigned
long
)
offset
),
buffer
,
size
);
memcpy
(
(
void
*
)((
unsigned
long
)
m_list
[
oix
].
po
.
body
+
(
unsigned
long
)
offset
),
buffer
,
size
);
pcom
->
provideStatus
(
1
);
}
...
...
@@ -406,12 +516,56 @@ void opc_provider::readAttribute( co_procom *pcom, pwr_tOix oix, unsigned int of
return
;
}
if
(
offset
+
size
>
m_list
[
oix
].
body_size
)
{
if
(
offset
+
size
>
m_list
[
oix
].
po
.
body_size
)
{
pcom
->
provideStatus
(
GDH__NOSUCHOBJ
);
return
;
}
void
*
p
=
(
void
*
)((
unsigned
long
)
m_list
[
oix
].
body
+
(
unsigned
long
)
offset
);
switch
(
m_list
[
oix
].
po
.
cid
)
{
case
pwr_cClass_Opc_Float
:
if
(
offset
==
(
unsigned
int
)
((
char
*
)
&
((
pwr_sClass_Opc_Float
*
)
m_list
[
oix
].
po
.
body
)
->
Value
-
(
char
*
)
m_list
[
oix
].
po
.
body
))
{
_ns1__Read
read
;
_ns1__ReadResponse
read_response
;
ns1__ReadRequestItem
*
item
=
new
ns1__ReadRequestItem
();
item
->
ItemName
=
new
std
::
string
(
m_list
[
oix
].
item_name
);
read
.
ItemList
=
new
ns1__ReadRequestItemList
;
read
.
ItemList
->
Items
.
push_back
(
item
);
if
(
soap_call___ns1__Read
(
&
soap
,
opc_endpoint
,
NULL
,
&
read
,
&
read_response
)
==
SOAP_OK
)
{
if
(
read_response
.
RItemList
&&
read_response
.
RItemList
->
Items
.
size
()
>
0
)
{
printf
(
"Read Value:
\"
%s
\"\n
"
,
read_response
.
RItemList
->
Items
[
0
]
->
Value
);
}
}
}
break
;
case
pwr_cClass_Opc_String
:
if
(
offset
==
(
unsigned
int
)
((
char
*
)
((
pwr_sClass_Opc_String
*
)
m_list
[
oix
].
po
.
body
)
->
Value
-
(
char
*
)
m_list
[
oix
].
po
.
body
))
{
_ns1__Read
read
;
_ns1__ReadResponse
read_response
;
ns1__ReadRequestItem
*
item
=
new
ns1__ReadRequestItem
();
item
->
ItemName
=
new
std
::
string
(
m_list
[
oix
].
item_name
);
read
.
ItemList
=
new
ns1__ReadRequestItemList
;
read
.
ItemList
->
Items
.
push_back
(
item
);
if
(
soap_call___ns1__Read
(
&
soap
,
opc_endpoint
,
NULL
,
&
read
,
&
read_response
)
==
SOAP_OK
)
{
if
(
read_response
.
RItemList
&&
read_response
.
RItemList
->
Items
.
size
()
>
0
)
{
strncpy
(
((
pwr_sClass_Opc_String
*
)
m_list
[
oix
].
po
.
body
)
->
Value
,
read_response
.
RItemList
->
Items
[
0
]
->
Value
,
sizeof
(((
pwr_sClass_Opc_String
*
)
m_list
[
oix
].
po
.
body
)
->
Value
));
printf
(
"Read Value:
\"
%s
\"\n
"
,
read_response
.
RItemList
->
Items
[
0
]
->
Value
);
}
}
}
break
;
}
void
*
p
=
(
void
*
)((
unsigned
long
)
m_list
[
oix
].
po
.
body
+
(
unsigned
long
)
offset
);
pcom
->
provideAttr
(
GDH__SUCCESS
,
oix
,
size
,
p
);
}
...
...
@@ -420,7 +574,7 @@ void opc_provider::subAssociateBuffer( co_procom *pcom, void **buff, int oix, in
int
size
,
pwr_tSubid
sid
)
{
if
(
oix
<
(
int
)
m_list
.
size
())
*
buff
=
(
char
*
)
m_list
[
oix
].
body
+
offset
;
*
buff
=
(
char
*
)
m_list
[
oix
].
po
.
body
+
offset
;
else
*
buff
=
0
;
}
...
...
@@ -447,34 +601,34 @@ void opc_provider::abort( co_procom *pcom)
void
opc_provider
::
delete_tree
(
pwr_tOix
oix
)
{
m_list
[
oix
].
flags
=
procom_obj_mFlags_Deleted
;
m_list
[
oix
].
po
.
flags
=
procom_obj_mFlags_Deleted
;
for
(
pwr_tOix
ix
=
m_list
[
oix
].
fchoix
;
for
(
pwr_tOix
ix
=
m_list
[
oix
].
po
.
fchoix
;
ix
;
ix
=
m_list
[
ix
].
fwsoix
)
ix
=
m_list
[
ix
].
po
.
fwsoix
)
delete_tree
(
ix
);
}
char
*
opc_provider
::
longname
(
pwr_tOix
oix
)
{
if
(
m_list
[
oix
].
fthoix
==
0
)
strcpy
(
m_list
[
oix
].
lname
,
m_list
[
oix
]
.
name
);
if
(
m_list
[
oix
].
po
.
fthoix
==
0
)
strcpy
(
m_list
[
oix
].
po
.
lname
,
m_list
[
oix
].
po
.
name
);
else
{
strcpy
(
m_list
[
oix
].
lname
,
longname
(
m_list
[
oix
]
.
fthoix
));
strcat
(
m_list
[
oix
].
lname
,
"-"
);
strcat
(
m_list
[
oix
].
lname
,
m_list
[
oix
]
.
name
);
strcpy
(
m_list
[
oix
].
po
.
lname
,
longname
(
m_list
[
oix
].
po
.
fthoix
));
strcat
(
m_list
[
oix
].
po
.
lname
,
"-"
);
strcat
(
m_list
[
oix
].
po
.
lname
,
m_list
[
oix
].
po
.
name
);
}
return
m_list
[
oix
].
lname
;
return
m_list
[
oix
].
po
.
lname
;
}
bool
opc_provider
::
find
(
pwr_tOix
fthoix
,
char
*
name
,
pwr_tOix
*
oix
)
{
for
(
int
i
=
0
;
i
<
(
int
)
m_list
.
size
();
i
++
)
{
if
(
!
m_list
[
i
].
flags
&
procom_obj_mFlags_Deleted
)
{
if
(
m_list
[
i
].
fthoix
==
fthoix
&&
cdh_NoCaseStrcmp
(
name
,
m_list
[
i
].
name
)
==
0
)
{
*
oix
=
m_list
[
i
].
oix
;
if
(
!
m_list
[
i
].
po
.
flags
&
procom_obj_mFlags_Deleted
)
{
if
(
m_list
[
i
].
po
.
fthoix
==
fthoix
&&
cdh_NoCaseStrcmp
(
name
,
m_list
[
i
].
po
.
name
)
==
0
)
{
*
oix
=
m_list
[
i
].
po
.
oix
;
return
true
;
}
}
...
...
@@ -503,6 +657,27 @@ void opc_provider::get_server_state()
}
}
//
// Create a valid object name from an item name
//
char
*
opc_provider
::
name_to_objectname
(
char
*
name
)
{
static
char
n
[
32
];
char
*
s
,
*
t
;
for
(
s
=
name
,
t
=
n
;
*
s
;
s
++
)
{
if
(
t
-
n
>=
(
int
)
sizeof
(
n
)
-
1
)
break
;
if
(
*
s
==
'['
||
*
s
==
']'
||
*
s
==
'-'
||
*
s
==
'/'
||
*
s
==
'.'
)
*
t
=
'$'
;
else
*
t
=
*
s
;
t
++
;
}
*
t
=
0
;
return
n
;
}
void
usage
()
{
...
...
opc/exe/opc_provider/src/opc_provider.h
View file @
42811546
/*
* Proview $Id: opc_provider.h,v 1.
3 2007-03-08 07:26:29
claes Exp $
* Proview $Id: opc_provider.h,v 1.
4 2007-03-13 12:02:07
claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
...
...
@@ -25,6 +25,23 @@
#include "pwr_opcclasses.h"
#include "opc_soap_H.h"
class
opcprv_obj
{
public:
procom_obj
po
;
char
item_name
[
512
];
opcprv_obj
()
{
strcpy
(
item_name
,
""
);}
opcprv_obj
(
const
opcprv_obj
&
x
)
:
po
(
x
.
po
)
{
strcpy
(
item_name
,
x
.
item_name
);
}
opcprv_obj
&
operator
=
(
const
opcprv_obj
&
x
)
{
po
=
x
.
po
;
strcpy
(
item_name
,
x
.
item_name
);
return
*
this
;
}
};
class
opc_provider
:
public
co_provider
{
public:
...
...
@@ -62,11 +79,12 @@ public:
virtual
bool
find
(
pwr_tOix
fthoix
,
char
*
name
,
pwr_tOix
*
oix
);
void
insert_object
(
pwr_tOix
fth
,
pwr_tOix
bws
,
ns1__BrowseElement
*
element
,
int
first
,
int
last
,
int
load_children
);
int
first
,
int
last
,
int
load_children
,
std
::
string
*
path
);
void
get_server_state
();
char
*
opc_provider
::
name_to_objectname
(
char
*
name
);
vector
<
procom
_obj
>
m_list
;
vector
<
opcprv
_obj
>
m_list
;
pwr_tOix
root
;
pwr_tOix
next_oix
;
struct
soap
soap
;
...
...
opc/exe/opc_server/src/opc_server.cpp
View file @
42811546
/*
* Proview $Id: opc_server.cpp,v 1.
3 2007-03-08 07:26:29
claes Exp $
* Proview $Id: opc_server.cpp,v 1.
4 2007-03-13 12:02:07
claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
...
...
@@ -219,11 +219,47 @@ bool opcsrv_get_properties( bool is_item, pwr_tCid pcid, pwr_tAttrRef *parp,
// Description
if
(
propmask
&
opc_mProperty_Description
)
{
ns1__ItemProperty
*
ip
=
new
ns1__ItemProperty
();
ip
->
Name
=
std
::
string
(
"description"
);
ip
->
Value
=
(
char
*
)
calloc
(
1
,
1
);
strcpy
(
ip
->
ValueType
,
"xsd:string"
);
properties
.
push_back
(
ip
);
switch
(
pcid
)
{
case
pwr_cClass_Di
:
case
pwr_cClass_Do
:
case
pwr_cClass_Dv
:
case
pwr_cClass_Ai
:
case
pwr_cClass_Ao
:
case
pwr_cClass_Av
:
case
pwr_cClass_Ii
:
case
pwr_cClass_Io
:
case
pwr_cClass_Iv
:
{
if
(
strcmp
(
bd
->
attrName
,
"ActualValue"
)
!=
0
)
break
;
pwr_tAttrRef
aaref
;
pwr_tString80
desc
;
// Description from signal object
sts
=
gdh_ArefANameToAref
(
parp
,
"Description"
,
&
aaref
);
if
(
EVEN
(
sts
))
break
;
sts
=
gdh_GetObjectInfoAttrref
(
&
aaref
,
desc
,
sizeof
(
desc
));
if
(
EVEN
(
sts
))
break
;
ns1__ItemProperty
*
ip
=
new
ns1__ItemProperty
();
ip
->
Name
=
std
::
string
(
"description"
);
ip
->
Value
=
(
char
*
)
calloc
(
1
,
sizeof
(
desc
));
strncpy
(
ip
->
Value
,
desc
,
sizeof
(
desc
));
strcpy
(
ip
->
ValueType
,
"xsd:string"
);
properties
.
push_back
(
ip
);
break
;
}
default:
{
ns1__ItemProperty
*
ip
=
new
ns1__ItemProperty
();
ip
->
Name
=
std
::
string
(
"description"
);
ip
->
Value
=
(
char
*
)
calloc
(
1
,
1
);
strcpy
(
ip
->
ValueType
,
"xsd:string"
);
properties
.
push_back
(
ip
);
}
}
}
// DataType
...
...
@@ -538,7 +574,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
else
element
->
HasChildren
=
true
;
opc_propertynames_to_mask
(
ns1__Browse
->
PropertyNames
,
&
property_mask
);
if
(
ns1__Browse
->
ReturnAllProperties
)
property_mask
=
~
0
;
else
opc_propertynames_to_mask
(
ns1__Browse
->
PropertyNames
,
&
property_mask
);
pwr_tAttrRef
aref
=
cdh_ObjidToAref
(
oid
);
opcsrv_get_properties
(
false
,
cid
,
0
,
&
aref
,
...
...
@@ -552,6 +591,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
// Return attributes and children
pwr_tOName
pname
;
pwr_tOName
itemname
;
pwr_tObjName
aname
;
gdh_sAttrDef
*
bd
;
int
rows
;
pwr_sAttrRef
paref
;
...
...
@@ -575,11 +615,98 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
if
(
EVEN
(
sts
))
{
return
0
;
}
if
(
paref
.
Flags
.
b
.
Array
)
{
// Return all elements
pwr_tTypeId
a_type
;
unsigned
int
a_size
,
a_offs
,
a_dim
;
pwr_tAttrRef
oaref
;
char
*
s
;
char
*
attrname
;
sts
=
gdh_AttrArefToObjectAref
(
&
paref
,
&
oaref
);
if
(
EVEN
(
sts
))
{
return
0
;
}
sts
=
gdh_GetAttrRefTid
(
&
oaref
,
&
cid
);
if
(
EVEN
(
sts
))
{
// E_INVALIDITEMNAME
return
0
;
}
if
(
!
(
attrname
=
strrchr
(
pname
,
'.'
)))
{
// E_INVALIDITEMNAME
return
0
;
}
attrname
++
;
// Get body definition
sts
=
gdh_GetObjectBodyDef
(
cid
,
&
bd
,
&
rows
,
pwr_cNOid
);
if
(
EVEN
(
sts
))
{
// E_INVALIDITEMNAME
return
0
;
}
int
bd_idx
=
-
1
;
for
(
int
i
=
0
;
i
<
rows
;
i
++
)
{
if
(
cdh_NoCaseStrcmp
(
attrname
,
bd
[
i
].
attrName
)
==
0
)
{
bd_idx
=
i
;
break
;
}
}
if
(
bd_idx
==
-
1
)
{
// E_INVALIDITEMNAME
free
(
(
char
*
)
bd
);
return
0
;
}
sts
=
gdh_GetAttributeCharAttrref
(
&
paref
,
&
a_type
,
&
a_size
,
&
a_offs
,
&
a_dim
);
if
(
EVEN
(
sts
))
return
0
;
for
(
int
i
=
0
;
i
<
(
int
)
a_dim
;
i
++
)
{
ns1__BrowseElement
*
element
=
new
ns1__BrowseElement
();
sprintf
(
itemname
,
"%s[%d]"
,
pname
,
i
);
s
=
strrchr
(
itemname
,
'.'
);
if
(
s
)
strcpy
(
aname
,
s
+
1
);
else
return
0
;
element
->
Name
=
new
std
::
string
(
aname
);
element
->
ItemName
=
new
std
::
string
(
itemname
);
element
->
IsItem
=
true
;
element
->
HasChildren
=
false
;
if
(
ns1__Browse
->
ReturnAllProperties
)
property_mask
=
~
0
;
else
opc_propertynames_to_mask
(
ns1__Browse
->
PropertyNames
,
&
property_mask
);
if
(
property_mask
)
{
sts
=
gdh_NameToAttrref
(
pwr_cNOid
,
itemname
,
&
aref
);
if
(
EVEN
(
sts
))
{
// E_INVALIDITEMNAME
return
0
;
}
opcsrv_get_properties
(
true
,
cid
,
&
paref
,
&
aref
,
property_mask
,
&
bd
[
bd_idx
],
element
->
Properties
);
}
ns1__BrowseResponse
->
Elements
.
push_back
(
element
);
}
free
(
(
char
*
)
bd
);
return
0
;
}
if
(
!
cdh_tidIsCid
(
cid
))
{
return
0
;
}
sts
=
gdh_GetObjectBodyDef
(
cid
,
&
bd
,
&
rows
,
o
id
);
sts
=
gdh_GetObjectBodyDef
(
cid
,
&
bd
,
&
rows
,
pwr_cNO
id
);
if
(
ODD
(
sts
))
{
for
(
int
i
=
0
;
i
<
rows
;
i
++
)
{
...
...
@@ -607,14 +734,36 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
continue
;
}
if
(
bd
[
i
].
attr
->
Param
.
Info
.
Flags
&
PWR_MASK_ARRAY
)
{
}
else
if
(
bd
[
i
].
attr
->
Param
.
Info
.
Flags
&
PWR_MASK_CLASS
)
{
if
(
bd
[
i
].
attr
->
Param
.
Info
.
Flags
&
PWR_MASK_ARRAY
||
bd
[
i
].
attr
->
Param
.
Info
.
Flags
&
PWR_MASK_CLASS
)
{
ns1__BrowseElement
*
element
=
new
ns1__BrowseElement
();
cdh_SuppressSuper
(
aname
,
bd
[
i
].
attrName
);
element
->
Name
=
new
std
::
string
(
aname
);
strcpy
(
itemname
,
pname
);
strcat
(
itemname
,
"."
);
strcat
(
itemname
,
bd
[
i
].
attrName
);
element
->
ItemName
=
new
std
::
string
(
itemname
);
element
->
IsItem
=
false
;
element
->
HasChildren
=
true
;
if
(
ns1__Browse
->
ReturnAllProperties
)
property_mask
=
~
0
;
else
opc_propertynames_to_mask
(
ns1__Browse
->
PropertyNames
,
&
property_mask
);
if
(
property_mask
)
opcsrv_get_properties
(
element
->
IsItem
,
cid
,
&
paref
,
&
aref
,
property_mask
,
&
bd
[
i
],
element
->
Properties
);
ns1__BrowseResponse
->
Elements
.
push_back
(
element
);
}
else
{
ns1__BrowseElement
*
element
=
new
ns1__BrowseElement
();
element
->
Name
=
new
std
::
string
(
bd
[
i
].
attrName
);
cdh_SuppressSuper
(
aname
,
bd
[
i
].
attrName
);
element
->
Name
=
new
std
::
string
(
aname
);
strcpy
(
itemname
,
pname
);
strcat
(
itemname
,
"."
);
strcat
(
itemname
,
bd
[
i
].
attrName
);
...
...
@@ -622,7 +771,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
element
->
IsItem
=
true
;
element
->
HasChildren
=
false
;
opc_propertynames_to_mask
(
ns1__Browse
->
PropertyNames
,
&
property_mask
);
if
(
ns1__Browse
->
ReturnAllProperties
)
property_mask
=
~
0
;
else
opc_propertynames_to_mask
(
ns1__Browse
->
PropertyNames
,
&
property_mask
);
if
(
property_mask
)
opcsrv_get_properties
(
element
->
IsItem
,
cid
,
&
paref
,
&
aref
,
...
...
@@ -658,7 +810,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Brow
else
element
->
HasChildren
=
true
;
opc_propertynames_to_mask
(
ns1__Browse
->
PropertyNames
,
&
property_mask
);
if
(
ns1__Browse
->
ReturnAllProperties
)
property_mask
=
~
0
;
else
opc_propertynames_to_mask
(
ns1__Browse
->
PropertyNames
,
&
property_mask
);
if
(
property_mask
)
{
aref
=
cdh_ObjidToAref
(
child
);
...
...
@@ -677,6 +832,109 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__GetProperties(struct soap*,
_ns1__GetProperties
*
ns1__GetProperties
,
_ns1__GetPropertiesResponse
*
ns1__GetPropertiesResponse
)
{
unsigned
int
property_mask
;
pwr_tCid
cid
;
pwr_tAName
iname
;
char
*
aname
;
pwr_tStatus
sts
;
pwr_tAttrRef
aref
;
pwr_tAttrRef
paref
;
gdh_sAttrDef
*
bd
;
int
rows
;
if
(
ns1__GetProperties
->
ReturnAllProperties
)
property_mask
=
~
0
;
else
opc_propertynames_to_mask
(
ns1__GetProperties
->
PropertyNames
,
&
property_mask
);
for
(
int
i
=
0
;
i
<
(
int
)
ns1__GetProperties
->
ItemIDs
.
size
();
i
++
)
{
ns1__PropertyReplyList
*
plist
=
new
ns1__PropertyReplyList
();
std
::
string
*
path
;
if
(
ns1__GetProperties
->
ItemIDs
[
i
]
->
ItemPath
)
path
=
ns1__GetProperties
->
ItemIDs
[
i
]
->
ItemPath
;
else
path
=
ns1__GetProperties
->
ItemPath
;
plist
->
ItemPath
=
path
;
plist
->
ItemName
=
new
std
::
string
(
*
ns1__GetProperties
->
ItemIDs
[
i
]
->
ItemName
);
if
(
path
)
{
strcpy
(
iname
,
path
->
c_str
());
strcat
(
iname
,
plist
->
ItemName
->
c_str
());
}
else
strcpy
(
iname
,
plist
->
ItemName
->
c_str
());
sts
=
gdh_NameToAttrref
(
pwr_cNOid
,
iname
,
&
aref
);
if
(
EVEN
(
sts
))
{
// E_INVALIDITEMNAME
return
0
;
}
if
(
aref
.
Flags
.
b
.
Object
||
aref
.
Flags
.
b
.
ObjectAttr
)
{
// This is an object
sts
=
gdh_GetAttrRefTid
(
&
aref
,
&
cid
);
if
(
EVEN
(
sts
))
{
// E_INVALIDITEMNAME
return
0
;
}
if
(
!
cdh_tidIsCid
(
cid
))
{
// E_INVALIDITEMNAME
return
0
;
}
opcsrv_get_properties
(
false
,
cid
,
0
,
&
aref
,
property_mask
,
0
,
plist
->
Properties
);
}
else
{
// Get the object attrref and class for this attribute
if
(
!
(
aname
=
strrchr
(
iname
,
'.'
)))
{
// E_INVALIDITEMNAME
return
0
;
}
aname
++
;
sts
=
gdh_AttrArefToObjectAref
(
&
aref
,
&
paref
);
if
(
EVEN
(
sts
))
{
return
0
;
}
sts
=
gdh_GetAttrRefTid
(
&
paref
,
&
cid
);
if
(
EVEN
(
sts
))
{
// E_INVALIDITEMNAME
return
0
;
}
// Get body definition
sts
=
gdh_GetObjectBodyDef
(
cid
,
&
bd
,
&
rows
,
pwr_cNOid
);
if
(
EVEN
(
sts
))
{
// E_INVALIDITEMNAME
return
0
;
}
int
bd_idx
=
-
1
;
for
(
int
i
=
0
;
i
<
rows
;
i
++
)
{
if
(
cdh_NoCaseStrcmp
(
aname
,
bd
[
i
].
attrName
)
==
0
)
{
bd_idx
=
i
;
break
;
}
}
if
(
bd_idx
==
-
1
)
{
// E_INVALIDITEMNAME
free
(
(
char
*
)
bd
);
return
0
;
}
opcsrv_get_properties
(
true
,
cid
,
&
paref
,
&
aref
,
property_mask
,
&
bd
[
bd_idx
],
plist
->
Properties
);
free
(
(
char
*
)
bd
);
}
ns1__GetPropertiesResponse
->
PropertyLists
.
push_back
(
plist
);
}
return
0
;
}
opc/lib/opc/src/opc_utl.cpp
View file @
42811546
/*
* Proview $Id: opc_utl.cpp,v 1.
5 2007-03-12 07:52:02
claes Exp $
* Proview $Id: opc_utl.cpp,v 1.
6 2007-03-13 12:02:07
claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
...
...
@@ -726,7 +726,7 @@ bool opc_pwrtype_to_string( int type, char **str)
strcpy
(
*
str
,
"short"
);
break
;
case
pwr_eType_Int8
:
strcpy
(
*
str
,
"
char
"
);
strcpy
(
*
str
,
"
byte
"
);
break
;
case
pwr_eType_UInt32
:
strcpy
(
*
str
,
"unsignedInt"
);
...
...
@@ -735,7 +735,7 @@ bool opc_pwrtype_to_string( int type, char **str)
strcpy
(
*
str
,
"unsignedShort"
);
break
;
case
pwr_eType_UInt8
:
strcpy
(
*
str
,
"unsigned
Char
"
);
strcpy
(
*
str
,
"unsigned
Byte
"
);
break
;
case
pwr_eType_Time
:
strcpy
(
*
str
,
"dateTime"
);
...
...
opc/wbl/mcomp/src/opc.wb_load
View file @
42811546
...
...
@@ -219,27 +219,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:47:07.23
Body SysBody 05-MAR-2007 13:47:24.75
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:17:40.34
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:47:49.35
Body SysBody 05-MAR-2007 13:47:45.28
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:17:45.95
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:48:07.66
Body SysBody 05-MAR-2007 13:48:12.29
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:14.24
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:48:24.95
Body SysBody 05-MAR-2007 13:48:28.48
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:17.51
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:49:08.68
Body SysBody 05-MAR-2007 13:49:27.27
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -273,27 +278,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:23.71
Body SysBody 05-MAR-2007 13:51:23.71
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:25.69
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:23.71
Body SysBody 05-MAR-2007 13:51:23.71
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:29.79
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:23.71
Body SysBody 05-MAR-2007 13:51:23.71
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:33.17
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:23.71
Body SysBody 05-MAR-2007 13:51:23.71
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:36.44
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:23.71
Body SysBody 05-MAR-2007 13:51:23.71
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -327,27 +337,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:28.14
Body SysBody 05-MAR-2007 13:51:28.14
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:54.87
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:28.14
Body SysBody 05-MAR-2007 13:51:28.14
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:58.75
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:28.14
Body SysBody 05-MAR-2007 13:51:28.14
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:46.39
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:28.14
Body SysBody 05-MAR-2007 13:51:28.14
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:49.66
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:28.14
Body SysBody 05-MAR-2007 13:51:28.14
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -381,27 +396,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:31.83
Body SysBody 05-MAR-2007 13:51:31.83
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:42.10
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:31.83
Body SysBody 05-MAR-2007 13:51:31.83
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:46.62
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:31.83
Body SysBody 05-MAR-2007 13:51:31.83
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:20:57.93
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:31.83
Body SysBody 05-MAR-2007 13:51:31.83
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:01.44
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:31.83
Body SysBody 05-MAR-2007 13:51:31.83
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -435,27 +455,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:36.44
Body SysBody 05-MAR-2007 13:51:36.44
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:26.59
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:36.44
Body SysBody 05-MAR-2007 13:51:36.44
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:33.16
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:36.44
Body SysBody 05-MAR-2007 13:51:36.44
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:09.76
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:36.44
Body SysBody 05-MAR-2007 13:51:36.44
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:12.90
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:36.44
Body SysBody 05-MAR-2007 13:51:36.44
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -489,27 +514,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:40.55
Body SysBody 05-MAR-2007 13:51:40.55
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:18:55.71
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:40.55
Body SysBody 05-MAR-2007 13:51:40.55
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:04.24
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:40.55
Body SysBody 05-MAR-2007 13:51:40.55
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:21.73
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:40.55
Body SysBody 05-MAR-2007 13:51:40.55
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:24.70
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:40.55
Body SysBody 05-MAR-2007 13:51:40.55
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -543,27 +573,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:48.00
Body SysBody 05-MAR-2007 13:51:48.00
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:12.51
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:48.00
Body SysBody 05-MAR-2007 13:51:48.00
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:19:16.80
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:48.00
Body SysBody 05-MAR-2007 13:51:48.00
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:32.38
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:48.00
Body SysBody 05-MAR-2007 13:51:48.00
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:35.55
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:48.00
Body SysBody 05-MAR-2007 13:51:48.00
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -597,27 +632,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:51.24
Body SysBody 05-MAR-2007 13:51:51.24
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:43.83
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:51.24
Body SysBody 05-MAR-2007 13:51:51.24
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:47.05
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:51.24
Body SysBody 05-MAR-2007 13:51:51.24
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:50.25
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:51.24
Body SysBody 05-MAR-2007 13:51:51.24
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:21:53.28
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:51.24
Body SysBody 05-MAR-2007 13:51:51.24
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -651,27 +691,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:54.37
Body SysBody 05-MAR-2007 13:51:54.37
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:00.44
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:54.37
Body SysBody 05-MAR-2007 13:51:54.37
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:03.35
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:54.37
Body SysBody 05-MAR-2007 13:51:54.37
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:06.30
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:54.37
Body SysBody 05-MAR-2007 13:51:54.37
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:09.05
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:54.37
Body SysBody 05-MAR-2007 13:51:54.37
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -705,27 +750,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:51:59.01
Body SysBody 05-MAR-2007 13:51:59.01
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:16.81
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:51:59.01
Body SysBody 05-MAR-2007 13:51:59.01
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:19.92
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:51:59.01
Body SysBody 05-MAR-2007 13:51:59.01
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:23.09
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:51:59.01
Body SysBody 05-MAR-2007 13:51:59.01
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:25.89
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:59.01
Body SysBody 05-MAR-2007 13:51:59.01
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
@@ -759,27 +809,32 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
Object HighEU $Attribute 4 05-MAR-2007 13:52:02.66
Body SysBody 05-MAR-2007 13:52:02.66
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:35.13
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowEU $Attribute 5 05-MAR-2007 13:52:02.66
Body SysBody 05-MAR-2007 13:52:02.66
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:38.33
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object HighIR $Attribute 6 05-MAR-2007 13:52:02.66
Body SysBody 05-MAR-2007 13:52:02.66
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:41.38
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object LowIR $Attribute 7 05-MAR-2007 13:52:02.66
Body SysBody 05-MAR-2007 13:52:02.66
Attr TypeRef = "pwrs:Type-$Float64"
Body SysBody 08-MAR-2007 18:22:44.29
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:52:02.66
Body SysBody 05-MAR-2007 13:52:02.66
Attr PgmName = "EngineeringUnits"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
...
...
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