Commit 4fc9d620 authored by claes's avatar claes

*** empty log message ***

parent bf2579a6
/*
* Proview $Id: opc_provider.cpp,v 1.2 2007-03-02 08:52:20 claes Exp $
* Proview $Id: opc_provider.cpp,v 1.3 2007-03-08 07:26:29 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -34,6 +34,7 @@
#include "co_cdh.h"
#include "co_dcli.h"
#include "pwr_opcclasses.h"
#include "opc_utl.h"
#include "opc_soap_H.h"
#include "Service.nsmap"
......@@ -57,107 +58,112 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, ns1__BrowseElement
int first, int last, int load_children)
{
procom_obj o;
char *valp;
strcpy( o.name, element->Name->c_str());
o.oix = next_oix++;
o.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);
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));
}
else {
if ( element->Properties.size() &&
element->Properties[0]->Name == "dataType") {
if ( strcmp( element->Properties[0]->Value, "string") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "boolean") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "float") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "double") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "double") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "decimal") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "int") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "short") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "byte") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "unsignedLong") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "unsignedInt") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "unsignedShort") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "unsignedByte") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "base64Binary") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "dateTime") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "time") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "date") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "duration") == 0) {
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);
}
else if ( strcmp( element->Properties[0]->Value, "QName") == 0) {
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);
......@@ -165,6 +171,11 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, ns1__BrowseElement
}
else {
o.cid = pwr_cClass_Opc_Hier;
o.body_size = sizeof(pwr_sClass_Opc_Hier);
o.body = calloc( 1, 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));
}
}
if ( first)
......@@ -195,11 +206,9 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, ns1__BrowseElement
_ns1__Browse browse;
_ns1__BrowseResponse browse_response;
if ( fth != 0)
browse.ItemPath = new std::string( longname(fth));
browse.ItemName = new std::string( o.name);
std::string s("dataType");
browse.PropertyNames.push_back( s);
browse.ItemName = new std::string( longname(o.oix));
opc_mask_to_propertynames( browse.PropertyNames,
opc_mProperty_DataType | opc_mProperty_Description);
if ( soap_call___ns1__Browse( &soap, opc_endpoint, NULL, &browse, &browse_response) ==
SOAP_OK) {
......@@ -229,20 +238,36 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
vo.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, so.body_size);
memcpy( so.body, &server_state, so.body_size);
so.oix = next_oix++;
so.fthoix = 0;
so.bwsoix = so.oix;
so.fwsoix = so.oix;
m_list[0].fchoix = so.oix;
m_list[0].lchoix = so.oix;
so.flags |= procom_obj_mFlags_Loaded;
m_list.push_back( so);
// Load Rootlist
_ns1__Browse browse;
_ns1__BrowseResponse browse_response;
std::string s("dataType");
browse.PropertyNames.push_back( s);
opc_mask_to_propertynames( browse.PropertyNames,
opc_mProperty_DataType | opc_mProperty_Description);
if ( soap_call___ns1__Browse( &soap, opc_endpoint, NULL, &browse, &browse_response) ==
SOAP_OK) {
pwr_tOix bws = 0;
pwr_tOix bws = so.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],
i == 0, i == (int)browse_response.Elements.size() - 1, 1);
0, i == (int)browse_response.Elements.size() - 1, 1);
bws = next_bws;
}
}
......@@ -254,10 +279,9 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
_ns1__Browse browse;
_ns1__BrowseResponse browse_response;
browse.ItemPath = new std::string( longname(m_list[oix].fthoix));
browse.ItemName = new std::string( m_list[oix].name);
std::string s("dataType");
browse.PropertyNames.push_back( s);
browse.ItemName = new std::string( longname(oix));
opc_mask_to_propertynames( browse.PropertyNames,
opc_mProperty_DataType | opc_mProperty_Description);
if ( soap_call___ns1__Browse( &soap, opc_endpoint, NULL, &browse, &browse_response) ==
SOAP_OK) {
......@@ -458,6 +482,27 @@ bool opc_provider::find( pwr_tOix fthoix, char *name, pwr_tOix *oix)
return false;
}
void opc_provider::get_server_state()
{
_ns1__GetStatus get_status;
_ns1__GetStatusResponse get_status_response;
get_status.ClientRequestHandle = new std::string("Opc Client");
if ( soap_call___ns1__GetStatus( &soap, opc_endpoint, NULL, &get_status, &get_status_response) ==
SOAP_OK) {
if ( get_status_response.Status->VendorInfo)
strcpy( server_state.VendorInfo, get_status_response.Status->VendorInfo->c_str());
if ( get_status_response.Status->ProductVersion)
strcpy( server_state.ProductVersion, get_status_response.Status->ProductVersion->c_str());
server_state.StartTime.tv_sec = get_status_response.Status->StartTime;
server_state.ServerState = get_status_response.GetStatusResult->ServerState;
}
else {
server_state.ServerState = ns1__serverState__commFault;
soap_print_fault( &soap, stderr);
}
}
void usage()
{
......@@ -515,10 +560,13 @@ int main(int argc, char *argv[])
0); // Global
procom.init();
strcpy( provider.server_state.Server, server_url);
// provider.nodeUp();
soap_init( &provider.soap);
provider.get_server_state();
procom.mainLoop();
}
/*
* Proview $Id: opc_provider.h,v 1.2 2007-03-02 08:52:20 claes Exp $
* Proview $Id: opc_provider.h,v 1.3 2007-03-08 07:26:29 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -22,12 +22,15 @@
#include "co_provider.h"
#include "co_procom.h"
#include "pwr_opcclasses.h"
#include "opc_soap_H.h"
class opc_provider : public co_provider {
public:
opc_provider( pvd_eEnv env = pvd_eEnv_Wb) : co_provider(env), root(0), next_oix(1) {}
opc_provider( pvd_eEnv env = pvd_eEnv_Wb) : co_provider(env), root(0), next_oix(1) {
memset( &server_state, 0, sizeof(server_state));
}
virtual void object( co_procom *pcom);
virtual void objectOid( co_procom *pcom, pwr_tOix oix);
virtual void objectName( co_procom *pcom, char *name);
......@@ -61,10 +64,13 @@ public:
void insert_object( pwr_tOix fth, pwr_tOix bws, ns1__BrowseElement *element,
int first, int last, int load_children);
void get_server_state();
vector<procom_obj> m_list;
pwr_tOix root;
pwr_tOix next_oix;
struct soap soap;
pwr_sClass_Opc_ServerState server_state;
};
#endif
/*
* Proview $Id: opc_server.cpp,v 1.2 2007-03-02 08:52:20 claes Exp $
* Proview $Id: opc_server.cpp,v 1.3 2007-03-08 07:26:29 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -17,58 +17,29 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <net/if.h>
#include <net/if_arp.h>
#include "pwr.h"
#include "pwr_version.h"
#include "pwr_baseclasses.h"
#include "pwr_opcclasses.h"
#include "co_cdh.h"
#include "rt_gdh.h"
#include "opc_utl.h"
#include "opc_soap_H.h"
#include "Service.nsmap"
static bool opc_type_to_string( int type, char **str)
{
*str = (char *) malloc(20);
switch ( type) {
case pwr_eType_String:
strcpy( *str, "string");
break;
case pwr_eType_Float32:
strcpy( *str, "float");
break;
case pwr_eType_Float64:
strcpy( *str, "double");
break;
case pwr_eType_Int32:
strcpy( *str, "int");
break;
case pwr_eType_Int16:
strcpy( *str, "short");
break;
case pwr_eType_Int8:
strcpy( *str, "char");
break;
case pwr_eType_UInt32:
strcpy( *str, "unsignedInt");
break;
case pwr_eType_UInt16:
strcpy( *str, "unsignedShort");
break;
case pwr_eType_UInt8:
strcpy( *str, "unsignedChar");
break;
case pwr_eType_Time:
strcpy( *str, "dateTime");
break;
case pwr_eType_DeltaTime:
strcpy( *str, "duration");
break;
default:
free( *str);
*str = 0;
return false;
}
return true;
}
typedef struct {
int address;
int access;
} opc_sClientAccess;
static pwr_tTime opc_start_time;
static pwr_sClass_Opc_ServerConfig *opc_config;
static opc_sClientAccess opc_client_access[20];
static int opc_client_access_cnt = 0;
static int opc_current_access;
int main()
......@@ -80,7 +51,46 @@ int main()
sts = gdh_Init("opc_server");
if ( EVEN(sts)) {
exit(sts);
}
}
#if 0
pwr_tOid config_oid;
// Get OpcServerConfig object
sts = gdh_GetClassList( pwr_cClass_Opc_ServerConfig, &config_oid);
if ( EVEN(sts)) {
// Not configured
exit(0);
}
sts = gdh_ObjidToPointer( config_oid, &opc_config);
if ( EVEN(sts)) {
exit(0);
}
#endif
// Test
pwr_sClass_Opc_ServerConfig sc;
memset( &sc, 0, sizeof(sc));
strcpy( sc.ClientAccess[0].Address, "192.168.62.186");
sc.ClientAccess[0].Access = pwr_eOpc_AccessEnum_ReadWrite;
opc_config = &sc;
// End Test
for ( int i = 0;
i < (int)(sizeof(opc_config->ClientAccess)/sizeof(opc_config->ClientAccess[0]));
i++) {
if ( strcmp( opc_config->ClientAccess[i].Address, "") != 0) {
opc_client_access[opc_client_access_cnt].address =
inet_network( opc_config->ClientAccess[i].Address);
if ( opc_client_access[opc_client_access_cnt].address != -1) {
opc_client_access[opc_client_access_cnt].access = opc_config->ClientAccess[i].Access;
opc_client_access_cnt++;
}
}
}
clock_gettime( CLOCK_REALTIME, &opc_start_time);
soap_init( &soap);
m = soap_bind( &soap, NULL, 18083, 100);
......@@ -130,6 +140,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__GetStatus(struct soap*,
ns1__GetStatusResponse->Status = new ns1__ServerStatus();
ns1__GetStatusResponse->Status->VendorInfo = new std::string("Proview " pwrv_cPwrVersionStr);
ns1__GetStatusResponse->Status->SupportedInterfaceVersions.push_back( ns1__interfaceVersion__XML_USCOREDA_USCOREVersion_USCORE1_USCORE0);
ns1__GetStatusResponse->Status->StartTime = opc_start_time.tv_sec;
ns1__GetStatusResponse->Status->ProductVersion = new std::string( pwrv_cPwrVersionStr);
return 0;
}
......@@ -168,13 +182,342 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__SubscriptionCancel(struct soap*,
return 0;
}
SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap*, _ns1__Browse *ns1__Browse,
bool opcsrv_get_properties( bool is_item, pwr_tCid pcid, pwr_tAttrRef *parp,
pwr_tAttrRef *arp, unsigned int propmask, gdh_sAttrDef *bd,
std::vector<ns1__ItemProperty *>& properties)
{
pwr_tStatus sts;
if ( !is_item) {
if ( propmask & opc_mProperty_Description) {
pwr_tAttrRef aaref;
pwr_tString80 desc;
sts = gdh_ArefANameToAref( arp, "Description", &aaref);
if ( ODD(sts)) {
sts = gdh_GetObjectInfoAttrref( &aaref, desc, sizeof(desc));
if ( ODD(sts)) {
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("description");
ip->Value = (char *) malloc( sizeof(pwr_tString80));
strncpy( ip->Value, desc, sizeof(pwr_tString80));
strcpy( ip->ValueType, "xsd:string");
properties.push_back( ip);
}
}
if ( EVEN(sts)) {
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);
}
}
}
else {
// IsItem
// 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);
}
// DataType
if ( propmask & opc_mProperty_DataType) {
char *type_p;
ns1__ItemProperty *ip = new ns1__ItemProperty();
if ( opc_pwrtype_to_string( bd->attr->Param.Info.Type, &type_p)) {
ip->Name = std::string("dataType");
ip->Value = type_p;
strcpy( ip->ValueType, "xsd:QName");
properties.push_back( ip);
}
else {
// Untranslatable type TODO
}
}
// Quality
if ( propmask & opc_mProperty_Quality) {
char *qual_p;
ns1__ItemProperty *ip = new ns1__ItemProperty();
if ( opc_quality_to_string( ns1__qualityBits__good, &qual_p)) {
ip->Name = std::string("quality");
ip->Value = qual_p;
strcpy( ip->ValueType, "xsd:string");
properties.push_back( ip);
}
}
// Timestamp
if ( propmask & opc_mProperty_Timestamp) {
// TODO ...
}
// Access Rights
if ( propmask & opc_mProperty_AccessRights) {
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("accessRights");
ip->Value = (char *) malloc( 20);
strcpy( ip->ValueType, "xsd:string");
switch ( opc_current_access) {
case pwr_eOpc_AccessEnum_ReadOnly:
strcpy( ip->Value, "readable");
break;
case pwr_eOpc_AccessEnum_ReadWrite:
if ( bd->attr->Param.Info.Flags & PWR_MASK_RTVIRTUAL ||
bd->attr->Param.Info.Flags & PWR_MASK_PRIVATE)
strcpy( ip->Value, "readable");
else
strcpy( ip->Value, "readWriteable");
break;
default:
strcpy( ip->Value, "unknown");
break;
}
properties.push_back( ip);
}
// EngineeringUnits
if ( propmask & opc_mProperty_EngineeringUnits) {
if ( parp) {
switch ( pcid) {
case pwr_cClass_Ai:
case pwr_cClass_Ao:
case pwr_cClass_Av: {
if ( strcmp( bd->attrName, "ActualValue") != 0)
break;
pwr_tAttrRef aaref;
pwr_tString16 unit;
// Get Range from channel
sts = gdh_ArefANameToAref( parp, "Unit", &aaref);
if ( EVEN(sts)) break;
sts = gdh_GetObjectInfoAttrref( &aaref, &unit, sizeof(unit));
if ( EVEN(sts)) break;
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("engineeringUnits");
ip->Value = (char *) malloc( 20);
strcpy( ip->Value, unit);
strcpy( ip->ValueType, "xsd:string");
properties.push_back( ip);
break;
}
default: ;
}
}
}
// EuType
if ( propmask & opc_mProperty_EuType) {
switch( bd->attr->Param.Info.Type) {
case pwr_eType_Float32: {
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("euType");
ip->Value = (char *) malloc( 20);
strcpy( ip->Value, "analog");
strcpy( ip->ValueType, "xsd:string");
properties.push_back( ip);
break;
}
default: {
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("euType");
ip->Value = (char *) malloc( 20);
strcpy( ip->Value, "noEnum");
strcpy( ip->ValueType, "xsd:string");
properties.push_back( ip);
break;
}
}
}
// HighEU
if ( propmask & opc_mProperty_HighEU) {
if ( parp) {
pwr_tAttrRef aaref;
pwr_tFloat32 fval;
switch ( pcid) {
case pwr_cClass_Av:
case pwr_cClass_Ai:
case pwr_cClass_Ao:
sts = gdh_ArefANameToAref( parp, "PresMaxLimit", &aaref);
if ( ODD(sts)) {
sts = gdh_GetObjectInfoAttrref( &aaref, &fval, sizeof(fval));
if ( ODD(sts)) {
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("highEU");
ip->Value = (char *) malloc( 20);
sprintf( ip->Value, "%5.2f", fval);
strcpy( ip->ValueType, "xsd:double");
properties.push_back( ip);
}
}
break;
default: ;
}
}
}
// LowEU
if ( propmask & opc_mProperty_LowEU) {
if ( parp) {
pwr_tAttrRef aaref;
pwr_tFloat32 fval;
switch ( pcid) {
case pwr_cClass_Av:
case pwr_cClass_Ai:
case pwr_cClass_Ao:
sts = gdh_ArefANameToAref( parp, "PresMinLimit", &aaref);
if ( ODD(sts)) {
sts = gdh_GetObjectInfoAttrref( &aaref, &fval, sizeof(fval));
if ( ODD(sts)) {
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("lowEU");
ip->Value = (char *) malloc( 20);
sprintf( ip->Value, "%5.2f", fval);
strcpy( ip->ValueType, "xsd:double");
properties.push_back( ip);
}
}
break;
default: ;
}
}
}
// HighIR
if ( propmask & opc_mProperty_HighIR) {
if ( parp) {
switch ( pcid) {
case pwr_cClass_Ai:
case pwr_cClass_Ii:
case pwr_cClass_Ao:
case pwr_cClass_Io: {
if ( strcmp( bd->attrName, "ActualValue") != 0)
break;
pwr_tAttrRef aaref;
pwr_tAttrRef sigchancon;
pwr_tFloat32 fval;
// Get Range from channel
sts = gdh_ArefANameToAref( parp, "SigChanCon", &aaref);
if ( EVEN(sts)) break;
sts = gdh_GetObjectInfoAttrref( &aaref, &sigchancon, sizeof(sigchancon));
if ( EVEN(sts)) break;
if ( cdh_ObjidIsNull( sigchancon.Objid))
break;
sts = gdh_ArefANameToAref( &sigchancon, "ActValRangeHigh", &aaref);
if ( EVEN(sts)) break;
sts = gdh_GetObjectInfoAttrref( &aaref, &fval, sizeof(fval));
if ( EVEN(sts)) break;
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("highIR");
ip->Value = (char *) malloc( 20);
sprintf( ip->Value, "%5.2f", fval);
strcpy( ip->ValueType, "xsd:double");
properties.push_back( ip);
break;
}
default: ;
}
}
}
// LowIR
if ( propmask & opc_mProperty_LowIR) {
if ( parp) {
switch ( pcid) {
case pwr_cClass_Ai:
case pwr_cClass_Ii:
case pwr_cClass_Ao:
case pwr_cClass_Io: {
if ( strcmp( bd->attrName, "ActualValue") != 0)
break;
pwr_tAttrRef sigchancon;
pwr_tAttrRef aaref;
pwr_tFloat32 fval;
// Get Range from channel
sts = gdh_ArefANameToAref( parp, "SigChanCon", &aaref);
if ( EVEN(sts)) break;
sts = gdh_GetObjectInfoAttrref( &aaref, &sigchancon, sizeof(sigchancon));
if ( EVEN(sts)) break;
if ( cdh_ObjidIsNull( sigchancon.Objid))
break;
sts = gdh_ArefANameToAref( &sigchancon, "ActValRangeLow", &aaref);
if ( EVEN(sts)) break;
sts = gdh_GetObjectInfoAttrref( &aaref, &fval, sizeof(fval));
if ( EVEN(sts)) break;
ns1__ItemProperty *ip = new ns1__ItemProperty();
ip->Name = std::string("lowIR");
ip->Value = (char *) malloc( 20);
sprintf( ip->Value, "%5.2f", fval);
strcpy( ip->ValueType, "xsd:double");
properties.push_back( ip);
break;
}
default: ;
}
}
}
}
return true;
}
int opcsrv_get_access( struct soap *so)
{
int access = pwr_eOpc_AccessEnum_None;
for ( int i = 0; i < opc_client_access_cnt; i++) {
if ( opc_client_access[i].address == (int)so->ip) {
access = opc_client_access[i].access;
break;
}
}
return access;
}
SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap *so, _ns1__Browse *ns1__Browse,
_ns1__BrowseResponse *ns1__BrowseResponse)
{
pwr_tStatus sts;
pwr_tOid oid, child, ch;
pwr_tOName name;
pwr_tCid cid;
unsigned int property_mask;
opc_current_access = opcsrv_get_access( so);
if ( (!ns1__Browse->ItemName || ns1__Browse->ItemName->empty()) &&
(!ns1__Browse->ItemPath || ns1__Browse->ItemPath->empty())) {
......@@ -189,42 +532,52 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap*, _ns1__Browse *ns1__Browse,
ns1__BrowseElement *element = new ns1__BrowseElement();
element->Name = new std::string( name);
element->ItemName = element->Name;
element->IsItem = ( cid == pwr_eClass_PlantHier || cid == pwr_eClass_NodeHier) ? true : false;
element->HasChildren = ODD( gdh_GetChild( oid, &ch)) ? true : false;
ns1__BrowseResponse->Elements.push_back( element);
element->IsItem = false;
if ( cid == pwr_eClass_PlantHier || cid == pwr_eClass_NodeHier)
element->HasChildren = ODD( gdh_GetChild( child, &ch)) ? true : false;
else
element->HasChildren = true;
for ( int i = 0; i < (int)ns1__Browse->PropertyNames.size(); i++) {
ns1__ItemProperty *property = new ns1__ItemProperty();
property->Name = ns1__Browse->PropertyNames[i];
opc_propertynames_to_mask( ns1__Browse->PropertyNames, &property_mask);
if ( property->Name == "\"\":dataType") {
property->Value = (char *) malloc( 6);
strcpy( property->Value, "float");
}
element->Properties.push_back( property);
}
pwr_tAttrRef aref = cdh_ObjidToAref( oid);
opcsrv_get_properties( false, cid, 0, &aref,
property_mask, 0,
element->Properties);
ns1__BrowseResponse->Elements.push_back( element);
}
}
else {
// Return attributes and children
pwr_tOName pname;
pwr_tOName itemname;
gdh_sAttrDef *bd;
int rows;
pwr_sAttrRef paref;
pwr_sAttrRef aref;
if ( ns1__Browse->ItemPath && !ns1__Browse->ItemPath->empty()) {
strncpy( itemname, ns1__Browse->ItemPath->c_str(), sizeof( itemname));
strncpy( pname, ns1__Browse->ItemPath->c_str(), sizeof( pname));
if ( ns1__Browse->ItemName && !ns1__Browse->ItemName->empty()) {
strcat( itemname, "-");
strcat( itemname, ns1__Browse->ItemName->c_str());
strcat( pname, ns1__Browse->ItemName->c_str());
}
}
else
strncpy( itemname, ns1__Browse->ItemName->c_str(), sizeof(itemname));
strncpy( pname, ns1__Browse->ItemName->c_str(), sizeof(pname));
sts = gdh_NameToAttrref( pwr_cNOid, pname, &paref);
if ( EVEN(sts)) {
return 0;
}
sts = gdh_NameToObjid( itemname, &oid);
sts = gdh_GetAttrRefTid( &paref, &cid);
if ( EVEN(sts)) {
return 0;
}
if ( !cdh_tidIsCid( cid)) {
return 0;
}
sts = gdh_GetObjectBodyDef( cid, &bd, &rows, oid);
if ( ODD(sts)) {
......@@ -241,15 +594,13 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap*, _ns1__Browse *ns1__Browse,
if ( bd[i].attr->Param.Info.Flags & PWR_MASK_RTHIDE)
continue;
sts = gdh_ArefANameToAref( &paref, bd[i].attrName, &aref);
if ( EVEN(sts)) return sts;
if ( bd[i].attr->Param.Info.Flags & PWR_MASK_DISABLEATTR) {
pwr_sAttrRef aref = cdh_ObjidToAref( oid);
pwr_sAttrRef aaref;
pwr_tDisableAttr disabled;
sts = gdh_ArefANameToAref( &aref, bd[i].attrName, &aaref);
if ( EVEN(sts)) return sts;
sts = gdh_ArefDisabled( &aaref, &disabled);
sts = gdh_ArefDisabled( &aref, &disabled);
if ( EVEN(sts)) return sts;
if ( disabled)
......@@ -264,51 +615,59 @@ SOAP_FMAC5 int SOAP_FMAC6 __ns1__Browse(struct soap*, _ns1__Browse *ns1__Browse,
ns1__BrowseElement *element = new ns1__BrowseElement();
element->Name = new std::string( bd[i].attrName);
element->ItemName = element->Name;
element->ItemPath = new std::string( itemname);
strcpy( itemname, pname);
strcat( itemname, ".");
strcat( itemname, bd[i].attrName);
element->ItemName = new std::string( itemname);
element->IsItem = true;
element->HasChildren = false;
for ( int i = 0; i < (int)ns1__Browse->PropertyNames.size(); i++) {
ns1__ItemProperty *property = new ns1__ItemProperty();
property->Name = ns1__Browse->PropertyNames[i];
if ( property->Name == "\"\":dataType") {
char *type_p;
if ( ! opc_type_to_string( bd[i].attr->Param.Info.Type, &type_p)) {
// Untranslatable type
element->IsItem = false;
element->HasChildren = false;
continue;
}
property->Value = type_p;
}
element->Properties.push_back( property);
}
opc_propertynames_to_mask( ns1__Browse->PropertyNames, &property_mask);
ns1__BrowseResponse->Elements.push_back( element);
if ( property_mask)
opcsrv_get_properties( element->IsItem, cid, &paref, &aref,
property_mask, &bd[i],
element->Properties);
ns1__BrowseResponse->Elements.push_back( element);
}
}
free( (char *)bd);
}
for ( sts = gdh_GetChild( oid, &child); ODD(sts); sts = gdh_GetNextSibling( child, &child)) {
sts = gdh_ObjidToName( child, name, sizeof(name), cdh_mName_object);
if ( EVEN(sts)) continue;
if ( paref.Flags.b.Object) {
for ( sts = gdh_GetChild( paref.Objid, &child);
ODD(sts);
sts = gdh_GetNextSibling( child, &child)) {
sts = gdh_ObjidToName( child, name, sizeof(name), cdh_mName_object);
if ( EVEN(sts)) continue;
sts = gdh_GetObjectClass( child, &cid);
if ( EVEN(sts)) continue;
sts = gdh_GetObjectClass( child, &cid);
if ( EVEN(sts)) continue;
ns1__BrowseElement *element = new ns1__BrowseElement();
element->Name = new std::string( name);
element->ItemName = element->Name;
element->ItemPath = new std::string( itemname);
element->IsItem = ( cid == pwr_eClass_PlantHier || cid == pwr_eClass_NodeHier) ? true : false;
element->HasChildren = ODD( gdh_GetChild( child, &ch)) ? true : false;
ns1__BrowseResponse->Elements.push_back( element);
ns1__BrowseElement *element = new ns1__BrowseElement();
element->Name = new std::string( name);
strcpy( itemname, pname);
strcat( itemname, "-");
strcat( itemname, name);
element->ItemName = new std::string( itemname);
element->IsItem = false;
if ( cid == pwr_eClass_PlantHier || cid == pwr_eClass_NodeHier)
element->HasChildren = ODD( gdh_GetChild( child, &ch)) ? true : false;
else
element->HasChildren = true;
opc_propertynames_to_mask( ns1__Browse->PropertyNames, &property_mask);
if ( property_mask) {
aref = cdh_ObjidToAref( child);
opcsrv_get_properties( element->IsItem, cid, &paref, &aref,
property_mask, 0,
element->Properties);
}
ns1__BrowseResponse->Elements.push_back( element);
}
}
}
return 0;
......
......@@ -6294,7 +6294,9 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ItemProperty(struct soap *soap, const ch
if (((ns1__ItemProperty *)a)->ResultID)
soap_set_attr(soap, "ResultID", soap_QName2s(soap, ((ns1__ItemProperty *)a)->ResultID->c_str()));
soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__ItemProperty), type);
soap_outliteral(soap, "ns1:Value", &(((ns1__ItemProperty*)a)->Value), NULL);
/* !! Value type added !! */
soap_outliteral(soap, "ns1:Value", &(((ns1__ItemProperty*)a)->Value),
((ns1__ItemProperty*)a)->ValueType);
/* transient soap skipped */
soap_element_end_out(soap, tag);
return SOAP_OK;
......@@ -6407,7 +6409,9 @@ SOAP_FMAC3 ns1__ItemProperty * SOAP_FMAC4 soap_in_ns1__ItemProperty(struct soap
if (soap_flag_Value1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
if (soap_inliteral(soap, "ns1:Value", &(((ns1__ItemProperty*)a)->Value)))
{ soap_flag_Value1--;
continue;
/* !! Extract type !! */
strcpy( ((ns1__ItemValue*)a)->ValueType, soap->type);
continue;
}
/* transient soap skipped */
if (soap->error == SOAP_TAG_MISMATCH)
......@@ -10101,7 +10105,8 @@ SOAP_FMAC3 int SOAP_FMAC4 soap_out_ns1__ItemValue(struct soap *soap, const char
soap_set_attr(soap, "ResultID", soap_QName2s(soap, ((ns1__ItemValue *)a)->ResultID->c_str()));
soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_ns1__ItemValue), type);
soap_out_PointerTostd__string(soap, "ns1:DiagnosticInfo", -1, &(((ns1__ItemValue*)a)->DiagnosticInfo), "");
soap_outliteral(soap, "ns1:Value", &(((ns1__ItemValue*)a)->Value), NULL);
/* !! Value type added !! */
soap_outliteral(soap, "ns1:Value", &(((ns1__ItemValue*)a)->Value), ((ns1__ItemValue*)a)->ValueType);
soap_out_PointerTons1__OPCQuality(soap, "ns1:Quality", -1, &(((ns1__ItemValue*)a)->Quality), "");
/* transient soap skipped */
soap_element_end_out(soap, tag);
......@@ -10237,6 +10242,8 @@ SOAP_FMAC3 ns1__ItemValue * SOAP_FMAC4 soap_in_ns1__ItemValue(struct soap *soap,
if (soap_flag_Value1 && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
if (soap_inliteral(soap, "ns1:Value", &(((ns1__ItemValue*)a)->Value)))
{ soap_flag_Value1--;
/* !! Extract type !! */
strcpy( ((ns1__ItemValue*)a)->ValueType, soap->type);
continue;
}
if (soap_flag_Quality1 && soap->error == SOAP_TAG_MISMATCH)
......
......@@ -218,6 +218,7 @@ class SOAP_CMAC ns1__ItemValue
public:
std::string *DiagnosticInfo; /* optional element of type xsd:string */
char *Value; /* optional element of type xsd:anyType */
char ValueType[80]; /* !! Value type added !! */
class ns1__OPCQuality *Quality; /* optional element of type ns1:OPCQuality */
std::string *ValueTypeQualifier; /* optional attribute */
std::string *ItemPath; /* optional attribute */
......@@ -752,6 +753,7 @@ class SOAP_CMAC ns1__ItemProperty
{
public:
char *Value; /* optional element of type xsd:anyType */
char ValueType[80]; /* !! Added to insert value type !! */
std::string Name; /* required attribute */
std::string *Description; /* optional attribute */
std::string *ItemPath; /* optional attribute */
......
/*
* Proview $Id: opc_utl.cpp,v 1.2 2007-03-05 14:56:51 claes Exp $
* Proview $Id: opc_utl.cpp,v 1.3 2007-03-08 07:26:29 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -22,6 +22,24 @@
#include "opc_utl.h"
#include "opc_soap_Stub.h"
static char opc_PropertyNames[17][20] = {"dataType",
"value",
"quality",
"timestamp",
"accessRights",
"scanRate",
"euType",
"euInfo",
"engineeringUnits",
"description",
"highEU",
"lowEU",
"highIR",
"lowIR",
"closeLabel",
"openLabel",
"timeZone"};
//
// Return the corresponding opc type string for a pwr_eType
//
......@@ -82,38 +100,47 @@ bool opc_pwrtype_to_string( int type, char **str)
void opc_mask_to_propertynames( std::vector<std::string>& pnames, unsigned int mask)
{
if ( mask & opc_mProperty_DataType)
pnames.push_back( std::string("dataName"));
if ( mask & opc_mProperty_Value)
pnames.push_back( std::string("value"));
if ( mask & opc_mProperty_Quality)
pnames.push_back( std::string("quality"));
if ( mask & opc_mProperty_Timestamp)
pnames.push_back( std::string("timestamp"));
if ( mask & opc_mProperty_ScanRate)
pnames.push_back( std::string("scanRate"));
if ( mask & opc_mProperty_EuType)
pnames.push_back( std::string("euType"));
if ( mask & opc_mProperty_EuInfo)
pnames.push_back( std::string("euInfo"));
if ( mask & opc_mProperty_EngineeringUnits)
pnames.push_back( std::string("engineeringUnits"));
if ( mask & opc_mProperty_Description)
pnames.push_back( std::string("description"));
if ( mask & opc_mProperty_HighEU)
pnames.push_back( std::string("highEU"));
if ( mask & opc_mProperty_LowEU)
pnames.push_back( std::string("lowEU"));
if ( mask & opc_mProperty_HighIR)
pnames.push_back( std::string("highIR"));
if ( mask & opc_mProperty_LowIR)
pnames.push_back( std::string("lowIR"));
if ( mask & opc_mProperty_CloseLabel)
pnames.push_back( std::string("closeLabel"));
if ( mask & opc_mProperty_OpenLabel)
pnames.push_back( std::string("openLabel"));
if ( mask & opc_mProperty_TimeZone)
pnames.push_back( std::string("timeZone"));
unsigned int m;
for ( int i = 0; i < opc_cPropertySize; i++) {
m = 1 << i;
if ( mask & m)
pnames.push_back( std::string( opc_PropertyNames[i]));
}
}
bool opc_get_property( std::vector<ns1__ItemProperty *> properties, unsigned int mask,
char **valp)
{
char name[80];
char *s;
int idx = -1;
for ( int i = 0; i < opc_cPropertySize; i++) {
if ( (unsigned int)(1 << i) == mask) {
idx = i;
break;
}
}
if ( idx == -1)
return false;
for ( int i = 0; i < (int)properties.size(); i++) {
strcpy( name, properties[i]->Name.c_str());
if ( (s = strrchr( name, ':')))
s++;
else
s = name;
if ( strcmp( s, opc_PropertyNames[idx]) == 0) {
if ( !properties[0]->Value)
return false;
*valp = properties[i]->Value;
return true;
}
}
return false;
}
bool opc_propertynames_to_mask( std::vector<std::string>& pnames, unsigned int *mask)
......@@ -215,3 +242,62 @@ bool opc_propertynames_to_mask( std::vector<std::string>& pnames, unsigned int *
}
return true;
}
bool opc_quality_to_string( int quality, char **str)
{
*str = (char *) malloc(30);
switch ( quality) {
case ns1__qualityBits__bad:
strcpy( *str, "bad");
break;
case ns1__qualityBits__badConfigurationError:
strcpy( *str, "badConfigurationError");
break;
case ns1__qualityBits__badNotConnected:
strcpy( *str, "badNotConnected");
break;
case ns1__qualityBits__badDeviceFailure:
strcpy( *str, "badDeviceFailure");
break;
case ns1__qualityBits__badSensorFailure:
strcpy( *str, "badSensorFailure");
break;
case ns1__qualityBits__badLastKnownValue:
strcpy( *str, "badLastKnownValue");
break;
case ns1__qualityBits__badCommFailure:
strcpy( *str, "badCommFailure");
break;
case ns1__qualityBits__badOutOfService:
strcpy( *str, "badOutOfService");
break;
case ns1__qualityBits__badWaitingForInitialData:
strcpy( *str, "badWaitingForInitialData");
break;
case ns1__qualityBits__uncertain:
strcpy( *str, "uncertain");
break;
case ns1__qualityBits__uncertainLastUsableValue:
strcpy( *str, "uncertainLastUsableValue");
break;
case ns1__qualityBits__uncertainSensorNotAccurate:
strcpy( *str, "uncertainSensorNotAccurate");
break;
case ns1__qualityBits__uncertainEUExceeded:
strcpy( *str, "uncertainEUExceede");
break;
case ns1__qualityBits__uncertainSubNormal:
strcpy( *str, "uncertainSubNormal");
break;
case ns1__qualityBits__good:
strcpy( *str, "good");
break;
case ns1__qualityBits__goodLocalOverride:
strcpy( *str, "goodLocalOverride");
break;
default:
return false;
}
return true;
}
/*
* Proview $Id: opc_utl.h,v 1.2 2007-03-05 14:56:51 claes Exp $
* Proview $Id: opc_utl.h,v 1.3 2007-03-08 07:26:29 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -20,26 +20,37 @@
#include <vector.h>
#include <string.h>
#include "pwr.h"
#include "opc_soap_Stub.h"
const int opc_cPropertySize = 17;
typedef enum {
opc_mProperty_DataType = 1 << 0,
opc_mProperty_Value = 1 << 1,
opc_mProperty_Quality = 1 << 2,
opc_mProperty_Timestamp = 1 << 3,
opc_mProperty_ScanRate = 1 << 4,
opc_mProperty_EuType = 1 << 5,
opc_mProperty_EuInfo = 1 << 6,
opc_mProperty_EngineeringUnits = 1 << 7,
opc_mProperty_Description = 1 << 8,
opc_mProperty_HighEU = 1 << 9,
opc_mProperty_LowEU = 1 << 10,
opc_mProperty_HighIR = 1 << 11,
opc_mProperty_LowIR = 1 << 12,
opc_mProperty_CloseLabel = 1 << 13,
opc_mProperty_OpenLabel = 1 << 14,
opc_mProperty_TimeZone = 1 << 15
opc_mProperty_AccessRights = 1 << 4,
opc_mProperty_ScanRate = 1 << 5,
opc_mProperty_EuType = 1 << 6,
opc_mProperty_EuInfo = 1 << 7,
opc_mProperty_EngineeringUnits = 1 << 8,
opc_mProperty_Description = 1 << 9,
opc_mProperty_HighEU = 1 << 10,
opc_mProperty_LowEU = 1 << 11,
opc_mProperty_HighIR = 1 << 12,
opc_mProperty_LowIR = 1 << 13,
opc_mProperty_CloseLabel = 1 << 14,
opc_mProperty_OpenLabel = 1 << 15,
opc_mProperty_TimeZone = 1 << 16
} opc_mProperty;
bool opc_pwrtype_to_string( int type, char **str);
bool opc_get_property( std::vector<ns1__ItemProperty *> properties, unsigned int mask,
char **valp);
void opc_mask_to_propertynames( std::vector<std::string>& pnames, unsigned int mask);
bool opc_propertynames_to_mask( std::vector<std::string>& pnames, unsigned int *mask);
bool opc_quality_to_string( int quality, char **str);
Volume Opc $ClassVolume 0.0.250.9
Body SysBody 01-JAN-1970 01:00:00.00
Attr NextOix = "_X1"
Attr NextCix = "_X22"
Attr NextOix = "_X12"
Attr NextCix = "_X24"
Attr NextTix[0] = "_X3"
EndBody
Object Class $ClassHier 1 01-MAR-2007 16:47:50.47
Object Type $TypeHier 2 02-MAR-2007 14:45:01.59
Object Opc_ServerStateEnum $TypeDef 1 05-MAR-2007 13:22:13.08
Body SysBody 02-MAR-2007 14:46:14.99
Attr TypeRef = "pwrs:Type-$Enum"
Attr Elements = 1
EndBody
Object Running $Value 3 02-MAR-2007 14:46:58.69
Body SysBody 02-MAR-2007 14:47:02.58
Attr Text = "Running"
Attr PgmName = "Running"
EndBody
EndObject
Object Failed $Value 4 02-MAR-2007 14:47:15.15
Body SysBody 02-MAR-2007 14:47:20.37
Attr Text = "Failed"
Attr PgmName = "Failed"
Attr Value = 1
EndBody
EndObject
Object NoConfig $Value 5 02-MAR-2007 14:48:09.87
Body SysBody 02-MAR-2007 14:48:29.97
Attr Text = "NoConfig"
Attr PgmName = "NoConfig"
Attr Value = 2
EndBody
EndObject
Object Suspended $Value 8 02-MAR-2007 14:48:24.34
Body SysBody 02-MAR-2007 14:48:34.32
Attr Text = "Suspended"
Attr PgmName = "Suspended"
Attr Value = 3
EndBody
EndObject
Object Test $Value 7 02-MAR-2007 14:48:44.36
Body SysBody 02-MAR-2007 14:48:48.73
Attr Text = "Test"
Attr PgmName = "Test"
Attr Value = 4
EndBody
EndObject
Object CommFault $Value 6 02-MAR-2007 14:48:58.72
Body SysBody 02-MAR-2007 14:49:03.64
Attr Text = "CommFault"
Attr PgmName = "CommFault"
Attr Value = 5
EndBody
EndObject
EndObject
Object Opc_AccessEnum $TypeDef 2 05-MAR-2007 13:22:42.62
Body SysBody 05-MAR-2007 13:20:09.54
Attr TypeRef = "pwrs:Type-$Enum"
Attr Elements = 1
EndBody
Object None $Value 9 05-MAR-2007 13:22:58.87
Body SysBody 05-MAR-2007 13:23:03.93
Attr Text = "None"
Attr PgmName = "None"
EndBody
EndObject
Object ReadOnly $Value 10 05-MAR-2007 13:23:11.59
Body SysBody 05-MAR-2007 13:23:18.24
Attr Text = "ReadOnly"
Attr PgmName = "ReadOnly"
Attr Value = 1
EndBody
EndObject
Object ReadWrite $Value 11 05-MAR-2007 13:23:28.18
Body SysBody 05-MAR-2007 13:23:39.62
Attr Text = "ReadWrite"
Attr PgmName = "ReadWrite"
Attr Value = 2
EndBody
EndObject
EndObject
EndObject
Object Class $ClassHier 1 02-MAR-2007 14:45:04.90
Object Opc_ClientAccess $ClassDef 23 05-MAR-2007 13:28:06.11
Body SysBody 05-MAR-2007 13:27:57.56
Attr Editor = 0
Attr Method = 0
Attr Flags = 16
EndBody
Object RtBody $ObjBodyDef 1 05-MAR-2007 13:28:16.74
Body SysBody 05-MAR-2007 13:28:16.74
Attr StructName = "Opc_ClientAccess"
Attr NextAix = "_X3"
EndBody
Object Address $Attribute 1 05-MAR-2007 13:28:48.14
Body SysBody 05-MAR-2007 13:28:52.79
Attr PgmName = "Address"
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
Object Access $Attribute 2 05-MAR-2007 13:29:22.75
Body SysBody 05-MAR-2007 13:29:47.95
Attr PgmName = "Access"
Attr TypeRef = "Opc:Type-Opc_AccessEnum"
EndBody
EndObject
EndObject
Object Template Opc_ClientAccess 2153742336 01-JAN-1970 01:00:00.00
Body RtBody 05-MAR-2007 13:30:16.97
EndBody
EndObject
EndObject
Object Opc_Hier $ClassDef 1 01-MAR-2007 16:48:24.56
Body SysBody 01-MAR-2007 16:47:58.95
Attr Editor = 0
......@@ -13,7 +118,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 18:05:06.28
Body SysBody 01-MAR-2007 18:05:06.28
Attr StructName = "Opc_Hier"
Attr NextAix = "_X2"
EndBody
Object Description $Attribute 1 05-MAR-2007 13:41:33.76
Body SysBody 05-MAR-2007 13:41:39.19
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
EndObject
Object Template Opc_Hier 2147975168 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -34,8 +146,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:49:33.17
Body SysBody 01-MAR-2007 16:49:33.17
Attr StructName = "Opc_String"
Attr NextAix = "_X2"
Attr NextAix = "_X3"
EndBody
Object Description $Attribute 2 05-MAR-2007 13:45:02.33
Body SysBody 05-MAR-2007 13:45:02.33
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 1 01-MAR-2007 16:49:41.73
Body SysBody 01-MAR-2007 16:49:54.49
Attr PgmName = "Value"
......@@ -57,8 +175,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:28.50
Body SysBody 01-MAR-2007 16:50:28.50
Attr StructName = "Opc_Boolean"
Attr NextAix = "_X3"
Attr NextAix = "_X4"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:09.01
Body SysBody 05-MAR-2007 13:45:09.01
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:28.50
Body SysBody 01-MAR-2007 16:50:51.77
Attr PgmName = "Value"
......@@ -80,14 +204,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:28.36
Body SysBody 01-MAR-2007 16:50:28.36
Attr StructName = "Opc_Float"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:13.76
Body SysBody 05-MAR-2007 13:45:13.76
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:28.36
Body SysBody 01-MAR-2007 16:51:29.73
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$Float32"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:49:08.68
Body SysBody 05-MAR-2007 13:49:27.27
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_Float 2152431616 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -103,14 +258,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:28.21
Body SysBody 01-MAR-2007 16:50:28.21
Attr StructName = "Opc_Double"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:19.21
Body SysBody 05-MAR-2007 13:45:19.21
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:28.21
Body SysBody 01-MAR-2007 16:52:07.62
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$Float64"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:23.71
Body SysBody 05-MAR-2007 13:51:23.71
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_Double 2152169472 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -126,14 +312,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:28.06
Body SysBody 01-MAR-2007 16:50:28.06
Attr StructName = "Opc_Decimal"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:24.10
Body SysBody 05-MAR-2007 13:45:24.10
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:28.06
Body SysBody 01-MAR-2007 16:52:37.40
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$Float32"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:28.14
Body SysBody 05-MAR-2007 13:51:28.14
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_Decimal 2151907328 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -149,14 +366,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:27.91
Body SysBody 01-MAR-2007 16:50:27.91
Attr StructName = "Opc_Long"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:28.22
Body SysBody 05-MAR-2007 13:45:28.22
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:27.91
Body SysBody 01-MAR-2007 16:53:11.79
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$Int32"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:31.83
Body SysBody 05-MAR-2007 13:51:31.83
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_Long 2151645184 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -172,14 +420,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:27.77
Body SysBody 01-MAR-2007 16:50:27.77
Attr StructName = "Opc_Int"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:31.37
Body SysBody 05-MAR-2007 13:45:31.37
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:27.77
Body SysBody 01-MAR-2007 16:53:46.18
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$Int32"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:36.44
Body SysBody 05-MAR-2007 13:51:36.44
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_Int 2151383040 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -195,14 +474,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:27.62
Body SysBody 01-MAR-2007 16:50:27.62
Attr StructName = "Opc_Short"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:34.58
Body SysBody 05-MAR-2007 13:45:34.58
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:27.62
Body SysBody 01-MAR-2007 16:54:54.38
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$Int16"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:40.55
Body SysBody 05-MAR-2007 13:51:40.55
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_Short 2151120896 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -218,14 +528,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:27.44
Body SysBody 01-MAR-2007 16:50:27.44
Attr StructName = "Opc_Byte"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:37.39
Body SysBody 05-MAR-2007 13:45:37.39
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:27.44
Body SysBody 01-MAR-2007 16:55:12.30
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$Int8"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:48.00
Body SysBody 05-MAR-2007 13:51:48.00
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_Byte 2150858752 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -241,14 +582,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:27.27
Body SysBody 01-MAR-2007 16:50:27.27
Attr StructName = "Opc_UnsignedLong"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:40.10
Body SysBody 05-MAR-2007 13:45:40.10
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:27.27
Body SysBody 01-MAR-2007 16:55:57.73
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$UInt32"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:51.24
Body SysBody 05-MAR-2007 13:51:51.24
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_UnsignedLong 2150596608 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -264,14 +636,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:27.07
Body SysBody 01-MAR-2007 16:50:27.07
Attr StructName = "Opc_UnsignedInt"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:42.87
Body SysBody 05-MAR-2007 13:45:42.87
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:27.07
Body SysBody 01-MAR-2007 16:56:25.07
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$UInt32"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:54.37
Body SysBody 05-MAR-2007 13:51:54.37
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_UnsignedInt 2150334464 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -287,14 +690,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:25.68
Body SysBody 01-MAR-2007 16:50:25.68
Attr StructName = "Opc_UnsignedShort"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:51.52
Body SysBody 05-MAR-2007 13:45:51.52
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:25.68
Body SysBody 01-MAR-2007 16:56:51.26
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$UInt16"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:51:59.01
Body SysBody 05-MAR-2007 13:51:59.01
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_UnsignedShort 2150072320 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -310,14 +744,45 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:25.44
Body SysBody 01-MAR-2007 16:50:25.44
Attr StructName = "Opc_UnsignedByte"
Attr NextAix = "_X3"
Attr NextAix = "_X9"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:54.72
Body SysBody 05-MAR-2007 13:45:54.72
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:25.44
Body SysBody 01-MAR-2007 16:57:15.03
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$UInt8"
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"
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"
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"
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"
EndBody
EndObject
Object EngineeringUnits $Attribute 8 05-MAR-2007 13:52:02.66
Body SysBody 05-MAR-2007 13:52:02.66
Attr TypeRef = "pwrs:Type-$String16"
EndBody
EndObject
EndObject
Object Template Opc_UnsignedByte 2149810176 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......@@ -333,8 +798,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 17:01:17.11
Body SysBody 01-MAR-2007 17:01:17.11
Attr StructName = "Opc_Base64Binary"
Attr NextAix = "_X3"
Attr NextAix = "_X4"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:45:57.15
Body SysBody 05-MAR-2007 13:45:57.15
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 17:01:17.11
Body SysBody 01-MAR-2007 17:01:47.78
Attr PgmName = "Value"
......@@ -356,8 +827,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:25.22
Body SysBody 01-MAR-2007 16:50:25.22
Attr StructName = "Opc_DateTime"
Attr NextAix = "_X3"
Attr NextAix = "_X4"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:46:00.31
Body SysBody 05-MAR-2007 13:46:00.31
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:25.22
Body SysBody 01-MAR-2007 16:58:37.27
Attr PgmName = "Value"
......@@ -379,8 +856,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:25.00
Body SysBody 01-MAR-2007 16:50:25.00
Attr StructName = "Opc_Time"
Attr NextAix = "_X3"
Attr NextAix = "_X4"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:46:03.34
Body SysBody 05-MAR-2007 13:46:03.34
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:25.00
Body SysBody 01-MAR-2007 16:59:03.22
Attr PgmName = "Value"
......@@ -402,8 +885,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:24.78
Body SysBody 01-MAR-2007 16:50:24.78
Attr StructName = "Opc_Date"
Attr NextAix = "_X3"
Attr NextAix = "_X4"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:46:06.10
Body SysBody 05-MAR-2007 13:46:06.10
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:24.78
Body SysBody 01-MAR-2007 16:59:19.57
Attr PgmName = "Value"
......@@ -425,8 +914,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:24.50
Body SysBody 01-MAR-2007 16:50:24.50
Attr StructName = "Opc_Duration"
Attr NextAix = "_X3"
Attr NextAix = "_X4"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:46:09.90
Body SysBody 05-MAR-2007 13:46:09.90
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:24.50
Body SysBody 01-MAR-2007 16:59:42.13
Attr PgmName = "Value"
......@@ -448,8 +943,14 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 16:50:22.30
Body SysBody 01-MAR-2007 16:50:22.30
Attr StructName = "Opc_QName"
Attr NextAix = "_X3"
Attr NextAix = "_X4"
EndBody
Object Description $Attribute 3 05-MAR-2007 13:46:12.59
Body SysBody 05-MAR-2007 13:46:12.59
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Value $Attribute 2 01-MAR-2007 16:50:22.30
Body SysBody 01-MAR-2007 17:00:54.92
Attr PgmName = "Value"
......@@ -471,12 +972,26 @@ Volume Opc $ClassVolume 0.0.250.9
Object RtBody $ObjBodyDef 1 01-MAR-2007 17:02:58.07
Body SysBody 01-MAR-2007 17:02:58.07
Attr StructName = "Opc_ServerConfig"
Attr NextAix = "_X2"
Attr NextAix = "_X4"
EndBody
Object Access $Attribute 1 01-MAR-2007 17:03:37.18
Body SysBody 01-MAR-2007 17:03:49.47
Attr PgmName = "Access"
Attr TypeRef = "pwrs:Type-$Mask"
Object Description $Attribute 2 05-MAR-2007 13:33:10.56
Body SysBody 05-MAR-2007 13:33:20.61
Attr PgmName = "Description"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object Port $Attribute 3 05-MAR-2007 13:34:44.55
Body SysBody 05-MAR-2007 13:34:56.97
Attr PgmName = "Port"
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
Object ClientAccess $Attribute 1 05-MAR-2007 13:33:32.49
Body SysBody 05-MAR-2007 13:33:35.01
Attr PgmName = "ClientAccess"
Attr Flags = 131074
Attr Elements = 20
Attr TypeRef = "Opc:Class-Opc_ClientAccess"
EndBody
EndObject
EndObject
......@@ -485,5 +1000,52 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
Object Opc_ServerState $ClassDef 22 02-MAR-2007 14:49:50.99
Body SysBody 02-MAR-2007 14:49:26.55
Attr Editor = 0
Attr Method = 0
Attr Flags = 16
EndBody
Object RtBody $ObjBodyDef 1 02-MAR-2007 14:49:57.91
Body SysBody 02-MAR-2007 14:49:57.91
Attr StructName = "Opc_ServerState"
Attr NextAix = "_X6"
EndBody
Object Server $Attribute 1 02-MAR-2007 14:50:39.12
Body SysBody 02-MAR-2007 14:50:19.42
Attr PgmName = "Server"
Attr TypeRef = "pwrs:Type-$URL"
EndBody
EndObject
Object VendorInfo $Attribute 2 02-MAR-2007 14:51:34.94
Body SysBody 02-MAR-2007 14:51:44.69
Attr PgmName = "VendorInfo"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object ProductVersion $Attribute 3 02-MAR-2007 14:52:12.84
Body SysBody 02-MAR-2007 14:52:16.47
Attr PgmName = "ProductVersion"
Attr TypeRef = "pwrs:Type-$String80"
EndBody
EndObject
Object StartTime $Attribute 4 02-MAR-2007 14:52:55.61
Body SysBody 02-MAR-2007 14:53:02.41
Attr PgmName = "StartTime"
Attr TypeRef = "pwrs:Type-$Time"
EndBody
EndObject
Object ServerState $Attribute 5 02-MAR-2007 14:54:30.98
Body SysBody 02-MAR-2007 14:54:38.95
Attr PgmName = "ServerState"
Attr TypeRef = "Opc:Type-Opc_ServerStateEnum"
EndBody
EndObject
EndObject
Object Template Opc_ServerState 2153480192 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
EndBody
EndObject
EndObject
EndObject
EndVolume
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment