Commit b3c63919 authored by claes's avatar claes

*** empty log message ***

parent 61abe767
/*
* Proview $Id: opc_provider.cpp,v 1.8 2007-03-23 08:19:45 claes Exp $
* Proview $Id: opc_provider.cpp,v 1.9 2007-03-27 08:37:50 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -50,40 +50,59 @@ static char opc_endpoint[256];
// Wb only
void opc_provider::object( co_procom *pcom)
{
if ( m_list.size() <= 1 || m_list[0].po.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].po.fchoix);
objectOid( pcom, m_list[0]->po.fchoix);
}
void opc_provider::fault()
{
int code;
const char *c, **d;
d = soap_faultcode( &soap);
if (!*d)
soap_set_fault( &soap);
c = *d;
if ( !opc_string_to_resultcode( (char *)c, &code))
code = pwr_eOpc_ResultCodeEnum_Unknown;
server_state->LastError = code;
server_state->ErrorRequestCnt = server_state->RequestCnt;
if ( 1)
soap_print_fault( &soap, stderr);
}
void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, s0__BrowseElement *element,
int first, int last, int load_children, std::string *path)
{
opcprv_obj o;
opcprv_obj *o = new opcprv_obj();
xsd__anyType *valp;
int opctype;
strcpy( o.po.name, name_to_objectname( (char *) element->Name->c_str()));
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());
strcpy( o->item_name, path->c_str());
strcat( o->item_name, element->ItemName->c_str());
}
else
strcpy( o.item_name, element->ItemName->c_str());
strcpy( o->item_name, element->ItemName->c_str());
o.po.oix = next_oix++;
o.po.fthoix = fth;
o->po.oix = next_oix++;
o->po.fthoix = fth;
if ( !element->IsItem) {
o.po.cid = pwr_cClass_Opc_Hier;
o.po.body_size = sizeof(pwr_sClass_Opc_Hier);
o.po.body = calloc( 1, o.po.body_size);
o->po.cid = pwr_cClass_Opc_Hier;
o->po.body_size = sizeof(pwr_sClass_Opc_Hier);
o->po.body = calloc( 1, o->po.body_size);
if ( opc_get_property( element->Properties, opc_mProperty_Description, &valp))
strncpy( ((pwr_sClass_Opc_Hier *)o.po.body)->Description,
strncpy( ((pwr_sClass_Opc_Hier *)o->po.body)->Description,
((xsd__string *)valp)->__item.c_str(),
sizeof(((pwr_sClass_Opc_Hier *)o.po.body)->Description));
sizeof(((pwr_sClass_Opc_Hier *)o->po.body)->Description));
}
else {
if ( opc_get_property( element->Properties, opc_mProperty_DataType, &valp)) {
......@@ -92,235 +111,235 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, s0__BrowseElement
switch ( opctype) {
case opc_eDataType_string:
o.po.cid = pwr_cClass_Opc_String;
o.po.body_size = sizeof(pwr_sClass_Opc_String);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_String;
o.size = sizeof( pwr_tString80);
o->po.cid = pwr_cClass_Opc_String;
o->po.body_size = sizeof(pwr_sClass_Opc_String);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_String;
o->size = sizeof( pwr_tString80);
break;
case opc_eDataType_boolean:
o.po.cid = pwr_cClass_Opc_Boolean;
o.po.body_size = sizeof(pwr_sClass_Opc_Boolean);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Boolean;
o.size = sizeof( pwr_tBoolean);
o->po.cid = pwr_cClass_Opc_Boolean;
o->po.body_size = sizeof(pwr_sClass_Opc_Boolean);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Boolean;
o->size = sizeof( pwr_tBoolean);
break;
case opc_eDataType_float:
o.po.cid = pwr_cClass_Opc_Float;
o.po.body_size = sizeof(pwr_sClass_Opc_Float);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Float32;
o.size = sizeof( pwr_tFloat32);
((pwr_sClass_Opc_Float *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_Float;
o->po.body_size = sizeof(pwr_sClass_Opc_Float);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Float32;
o->size = sizeof( pwr_tFloat32);
((pwr_sClass_Opc_Float *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_double:
o.po.cid = pwr_cClass_Opc_Double;
o.po.body_size = sizeof(pwr_sClass_Opc_Double);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Float64;
o.size = sizeof( pwr_tFloat64);
((pwr_sClass_Opc_Double *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_Double;
o->po.body_size = sizeof(pwr_sClass_Opc_Double);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Float64;
o->size = sizeof( pwr_tFloat64);
((pwr_sClass_Opc_Double *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_decimal:
o.po.cid = pwr_cClass_Opc_Decimal;
o.po.body_size = sizeof(pwr_sClass_Opc_Decimal);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Float32;
o.size = sizeof( pwr_tFloat32);
((pwr_sClass_Opc_Decimal *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_Decimal;
o->po.body_size = sizeof(pwr_sClass_Opc_Decimal);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Float32;
o->size = sizeof( pwr_tFloat32);
((pwr_sClass_Opc_Decimal *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_long:
o.po.cid = pwr_cClass_Opc_Long;
o.po.body_size = sizeof(pwr_sClass_Opc_Long);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Int32;
o.size = sizeof( pwr_tInt32);
((pwr_sClass_Opc_Long *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_Long;
o->po.body_size = sizeof(pwr_sClass_Opc_Long);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Int32;
o->size = sizeof( pwr_tInt32);
((pwr_sClass_Opc_Long *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_int:
o.po.cid = pwr_cClass_Opc_Int;
o.po.body_size = sizeof(pwr_sClass_Opc_Int);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Int32;
o.size = sizeof( pwr_tInt32);
((pwr_sClass_Opc_Int *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_Int;
o->po.body_size = sizeof(pwr_sClass_Opc_Int);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Int32;
o->size = sizeof( pwr_tInt32);
((pwr_sClass_Opc_Int *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_short:
o.po.cid = pwr_cClass_Opc_Short;
o.po.body_size = sizeof(pwr_sClass_Opc_Short);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Int16;
o.size = sizeof( pwr_tInt16);
((pwr_sClass_Opc_Short *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_Short;
o->po.body_size = sizeof(pwr_sClass_Opc_Short);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Int16;
o->size = sizeof( pwr_tInt16);
((pwr_sClass_Opc_Short *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_byte:
o.po.cid = pwr_cClass_Opc_Byte;
o.po.body_size = sizeof(pwr_sClass_Opc_Byte);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Int8;
o.size = sizeof( pwr_tInt8);
((pwr_sClass_Opc_Byte *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_Byte;
o->po.body_size = sizeof(pwr_sClass_Opc_Byte);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Int8;
o->size = sizeof( pwr_tInt8);
((pwr_sClass_Opc_Byte *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_unsignedLong:
o.po.cid = pwr_cClass_Opc_UnsignedLong;
o.po.body_size = sizeof(pwr_sClass_Opc_UnsignedLong);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_UInt32;
o.size = sizeof( pwr_tUInt32);
((pwr_sClass_Opc_UnsignedLong *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_UnsignedLong;
o->po.body_size = sizeof(pwr_sClass_Opc_UnsignedLong);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_UInt32;
o->size = sizeof( pwr_tUInt32);
((pwr_sClass_Opc_UnsignedLong *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_unsignedInt:
o.po.cid = pwr_cClass_Opc_UnsignedInt;
o.po.body_size = sizeof(pwr_sClass_Opc_UnsignedInt);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_UInt32;
o.size = sizeof( pwr_tUInt32);
((pwr_sClass_Opc_UnsignedInt *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_UnsignedInt;
o->po.body_size = sizeof(pwr_sClass_Opc_UnsignedInt);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_UInt32;
o->size = sizeof( pwr_tUInt32);
((pwr_sClass_Opc_UnsignedInt *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_unsignedShort:
o.po.cid = pwr_cClass_Opc_UnsignedShort;
o.po.body_size = sizeof(pwr_sClass_Opc_UnsignedShort);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_UInt16;
o.size = sizeof( pwr_tUInt16);
((pwr_sClass_Opc_UnsignedShort *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_UnsignedShort;
o->po.body_size = sizeof(pwr_sClass_Opc_UnsignedShort);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_UInt16;
o->size = sizeof( pwr_tUInt16);
((pwr_sClass_Opc_UnsignedShort *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_unsignedByte:
o.po.cid = pwr_cClass_Opc_UnsignedByte;
o.po.body_size = sizeof(pwr_sClass_Opc_UnsignedByte);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_UInt8;
o.size = sizeof( pwr_tUInt8);
((pwr_sClass_Opc_UnsignedByte *)o.po.body)->HighEU = 100;
o->po.cid = pwr_cClass_Opc_UnsignedByte;
o->po.body_size = sizeof(pwr_sClass_Opc_UnsignedByte);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_UInt8;
o->size = sizeof( pwr_tUInt8);
((pwr_sClass_Opc_UnsignedByte *)o->po.body)->HighEU = 100;
break;
case opc_eDataType_base64Binary:
o.po.cid = pwr_cClass_Opc_Base64Binary;
o.po.body_size = sizeof(pwr_sClass_Opc_Base64Binary);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_UInt32;
o.size = 2 * sizeof( pwr_tUInt32);
o->po.cid = pwr_cClass_Opc_Base64Binary;
o->po.body_size = sizeof(pwr_sClass_Opc_Base64Binary);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_UInt32;
o->size = 2 * sizeof( pwr_tUInt32);
break;
case opc_eDataType_dateTime:
o.po.cid = pwr_cClass_Opc_DateTime;
o.po.body_size = sizeof(pwr_sClass_Opc_DateTime);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Time;
o.size = sizeof( pwr_tTime);
o->po.cid = pwr_cClass_Opc_DateTime;
o->po.body_size = sizeof(pwr_sClass_Opc_DateTime);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Time;
o->size = sizeof( pwr_tTime);
break;
case opc_eDataType_time:
o.po.cid = pwr_cClass_Opc_Time;
o.po.body_size = sizeof(pwr_sClass_Opc_Time);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Time;
o.size = sizeof( pwr_tTime);
o->po.cid = pwr_cClass_Opc_Time;
o->po.body_size = sizeof(pwr_sClass_Opc_Time);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Time;
o->size = sizeof( pwr_tTime);
break;
case opc_eDataType_date:
o.po.cid = pwr_cClass_Opc_Date;
o.po.body_size = sizeof(pwr_sClass_Opc_Date);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_Time;
o.size = sizeof( pwr_tTime);
o->po.cid = pwr_cClass_Opc_Date;
o->po.body_size = sizeof(pwr_sClass_Opc_Date);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_Time;
o->size = sizeof( pwr_tTime);
break;
case opc_eDataType_duration:
o.po.cid = pwr_cClass_Opc_Duration;
o.po.body_size = sizeof(pwr_sClass_Opc_Duration);
o.po.body = calloc( 1, o.po.body_size);
o.type = pwr_eType_DeltaTime;
o.size = sizeof( pwr_tDeltaTime);
o->po.cid = pwr_cClass_Opc_Duration;
o->po.body_size = sizeof(pwr_sClass_Opc_Duration);
o->po.body = calloc( 1, o->po.body_size);
o->type = pwr_eType_DeltaTime;
o->size = sizeof( pwr_tDeltaTime);
break;
case opc_eDataType_QName:
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);
o.type = pwr_eType_String;
o.size = sizeof( pwr_tString80);
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);
o->type = pwr_eType_String;
o->size = sizeof( pwr_tString80);
default:
o.po.cid = pwr_cClass_Opc_Hier;
o.po.body_size = sizeof(pwr_sClass_Opc_Hier);
o.po.body = calloc( 1, o.po.body_size);
o->po.cid = pwr_cClass_Opc_Hier;
o->po.body_size = sizeof(pwr_sClass_Opc_Hier);
o->po.body = calloc( 1, o->po.body_size);
}
if ( opc_get_property( element->Properties, opc_mProperty_Description, &valp)) {
pwr_tString80 desc;
strncpy( desc, ((xsd__string *)valp)->__item.c_str(), sizeof(desc));
switch ( o.po.cid) {
switch ( o->po.cid) {
case pwr_cClass_Opc_Float:
strncpy( ((pwr_sClass_Opc_Float *)o.po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Float *)o.po.body)->Description));
strncpy( ((pwr_sClass_Opc_Float *)o->po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Float *)o->po.body)->Description));
break;
case pwr_cClass_Opc_Double:
strncpy( ((pwr_sClass_Opc_Float *)o.po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Double *)o.po.body)->Description));
strncpy( ((pwr_sClass_Opc_Float *)o->po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Double *)o->po.body)->Description));
break;
case pwr_cClass_Opc_Int:
strncpy( ((pwr_sClass_Opc_Int *)o.po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Int *)o.po.body)->Description));
strncpy( ((pwr_sClass_Opc_Int *)o->po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Int *)o->po.body)->Description));
break;
case pwr_cClass_Opc_Short:
strncpy( ((pwr_sClass_Opc_Short *)o.po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Short *)o.po.body)->Description));
strncpy( ((pwr_sClass_Opc_Short *)o->po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Short *)o->po.body)->Description));
break;
case pwr_cClass_Opc_Byte:
strncpy( ((pwr_sClass_Opc_Byte *)o.po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Byte *)o.po.body)->Description));
strncpy( ((pwr_sClass_Opc_Byte *)o->po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_Byte *)o->po.body)->Description));
break;
case pwr_cClass_Opc_UnsignedInt:
strncpy( ((pwr_sClass_Opc_UnsignedInt *)o.po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_UnsignedInt *)o.po.body)->Description));
strncpy( ((pwr_sClass_Opc_UnsignedInt *)o->po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_UnsignedInt *)o->po.body)->Description));
break;
case pwr_cClass_Opc_UnsignedShort:
strncpy( ((pwr_sClass_Opc_UnsignedShort *)o.po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_UnsignedShort *)o.po.body)->Description));
strncpy( ((pwr_sClass_Opc_UnsignedShort *)o->po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_UnsignedShort *)o->po.body)->Description));
break;
case pwr_cClass_Opc_UnsignedByte:
strncpy( ((pwr_sClass_Opc_UnsignedByte *)o.po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_UnsignedByte *)o.po.body)->Description));
strncpy( ((pwr_sClass_Opc_UnsignedByte *)o->po.body)->Description, desc,
sizeof(((pwr_sClass_Opc_UnsignedByte *)o->po.body)->Description));
break;
}
}
}
else {
o.po.cid = pwr_cClass_Opc_Hier;
o.po.body_size = sizeof(pwr_sClass_Opc_Hier);
o.po.body = calloc( 1, o.po.body_size);
o->po.cid = pwr_cClass_Opc_Hier;
o->po.body_size = sizeof(pwr_sClass_Opc_Hier);
o->po.body = calloc( 1, o->po.body_size);
if ( opc_get_property( element->Properties, opc_mProperty_Description, &valp)) {
strncpy( ((pwr_sClass_Opc_Hier *)o.po.body)->Description,
strncpy( ((pwr_sClass_Opc_Hier *)o->po.body)->Description,
((xsd__string *)valp)->__item.c_str(),
sizeof(((pwr_sClass_Opc_Hier *)o.po.body)->Description));
sizeof(((pwr_sClass_Opc_Hier *)o->po.body)->Description));
}
}
}
if ( first)
m_list[fth].po.fchoix = o.po.oix;
m_list[fth]->po.fchoix = o->po.oix;
else {
o.po.bwsoix = bws;
m_list[bws].po.fwsoix = o.po.oix;
o->po.bwsoix = bws;
m_list[bws]->po.fwsoix = o->po.oix;
}
if ( last) {
m_list[fth].po.lchoix = o.po.oix;
m_list[fth]->po.lchoix = o->po.oix;
if ( !first) {
o.po.fwsoix = m_list[fth].po.fchoix;
m_list[o.po.fwsoix].po.bwsoix = o.po.oix;
o->po.fwsoix = m_list[fth]->po.fchoix;
m_list[o->po.fwsoix]->po.bwsoix = o->po.oix;
}
else {
// Single child
o.po.fwsoix = o.po.oix;
o.po.bwsoix = o.po.oix;
o->po.fwsoix = o->po.oix;
o->po.bwsoix = o->po.oix;
}
}
if ( element->HasChildren && load_children)
o.po.flags |= procom_obj_mFlags_Loaded;
o->po.flags |= procom_obj_mFlags_Loaded;
else if ( !element->HasChildren)
o.po.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 ( ((xsd__string *)valp)->__item == "analog")
m_list[o.po.oix].po.flags |= procom_obj_mFlags_Analog;
m_list[o->po.oix]->po.flags |= procom_obj_mFlags_Analog;
}
if ( 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
_s0__GetProperties get_properties;
_s0__GetPropertiesResponse properties_response;
......@@ -329,7 +348,9 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, s0__BrowseElement
pwr_tFloat32 low_eu = 0;
pwr_tString16 engineering_units = "";
id.ItemName = new std::string( o.item_name);
get_properties.ReturnPropertyValues = (bool *) malloc( sizeof(bool));
*get_properties.ReturnPropertyValues = true;
id.ItemName = new std::string( o->item_name);
get_properties.ItemIDs.push_back( &id);
......@@ -339,6 +360,7 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, s0__BrowseElement
if ( soap_call___s0__GetProperties( &soap, opc_endpoint, NULL, &get_properties,
&properties_response) == SOAP_OK) {
server_state->RequestCnt++;
if ( properties_response.PropertyLists.size() > 0 &&
properties_response.PropertyLists[0]->Properties.size() > 0) {
......@@ -356,17 +378,62 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, s0__BrowseElement
sizeof(engineering_units));
}
void *body = m_list[o.po.oix].po.body;
switch ( o.po.cid) {
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);
((pwr_sClass_Opc_Double *)body)->HighEU = high_eu;
((pwr_sClass_Opc_Double *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_Double *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_Decimal:
((pwr_sClass_Opc_Decimal *)body)->HighEU = high_eu;
((pwr_sClass_Opc_Decimal *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_Decimal *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_Long:
((pwr_sClass_Opc_Long *)body)->HighEU = high_eu;
((pwr_sClass_Opc_Long *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_Long *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_Int:
((pwr_sClass_Opc_Int *)body)->HighEU = high_eu;
((pwr_sClass_Opc_Int *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_Int *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_Short:
((pwr_sClass_Opc_Short *)body)->HighEU = high_eu;
((pwr_sClass_Opc_Short *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_Short *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_Byte:
((pwr_sClass_Opc_Byte *)body)->HighEU = high_eu;
((pwr_sClass_Opc_Byte *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_Byte *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_UnsignedLong:
((pwr_sClass_Opc_UnsignedLong *)body)->HighEU = high_eu;
((pwr_sClass_Opc_UnsignedLong *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_UnsignedLong *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_UnsignedInt:
((pwr_sClass_Opc_UnsignedInt *)body)->HighEU = high_eu;
((pwr_sClass_Opc_UnsignedInt *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_UnsignedInt *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_UnsignedShort:
((pwr_sClass_Opc_UnsignedShort *)body)->HighEU = high_eu;
((pwr_sClass_Opc_UnsignedShort *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_UnsignedShort *)body)->EngineeringUnits, engineering_units);
break;
case pwr_cClass_Opc_UnsignedByte:
((pwr_sClass_Opc_UnsignedByte *)body)->HighEU = high_eu;
((pwr_sClass_Opc_UnsignedByte *)body)->LowEU = low_eu;
strcpy( ((pwr_sClass_Opc_UnsignedByte *)body)->EngineeringUnits, engineering_units);
break;
default: ;
}
......@@ -374,7 +441,8 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, s0__BrowseElement
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
}
......@@ -383,7 +451,7 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, s0__BrowseElement
_s0__Browse browse;
_s0__BrowseResponse browse_response;
browse.ItemName = new std::string( o.item_name);
browse.ItemName = new std::string( o->item_name);
opc_mask_to_propertynames( browse.PropertyNames,
opc_mProperty_DataType | opc_mProperty_Description |
opc_mProperty_EuType);
......@@ -393,50 +461,55 @@ void opc_provider::insert_object( pwr_tOix fth, pwr_tOix bws, s0__BrowseElement
pwr_tOix next_bws;
pwr_tOix bws = 0;
server_state->RequestCnt++;
for ( int i = 0; i < (int)browse_response.Elements.size(); i++) {
next_bws = next_oix;
insert_object( o.po.oix, bws, browse_response.Elements[i],
insert_object( o->po.oix, bws, browse_response.Elements[i],
i == 0, i == (int)browse_response.Elements.size() - 1, 0, 0);
bws = next_bws;
}
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
}
}
void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
void opc_provider::init()
{
if ( m_list.size() == 0) {
// Insert volume object
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.po.body_size);
vo.po.oix = 0;
vo.po.flags |= procom_obj_mFlags_Loaded;
opcprv_obj *vo = new opcprv_obj();
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->po.body_size);
vo->po.oix = 0;
vo->po.flags |= procom_obj_mFlags_Loaded;
m_list.push_back( vo);
// Insert ServerState object
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.po.body_size);
memcpy( so.po.body, &server_state, so.po.body_size);
so.po.oix = next_oix++;
so.po.fthoix = 0;
so.po.bwsoix = so.po.oix;
so.po.fwsoix = so.po.oix;
m_list[0].po.fchoix = so.po.oix;
m_list[0].po.lchoix = so.po.oix;
so.po.flags |= procom_obj_mFlags_Loaded;
opcprv_obj *so = new opcprv_obj();
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->po.body_size);
so->po.oix = next_oix++;
so->po.fthoix = 0;
so->po.bwsoix = so->po.oix;
so->po.fwsoix = so->po.oix;
m_list[0]->po.fchoix = so->po.oix;
m_list[0]->po.lchoix = so->po.oix;
so->po.flags |= procom_obj_mFlags_Loaded;
m_list.push_back( so);
server_state = (pwr_sClass_Opc_ServerState *)m_list[1]->po.body;
}
void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
{
if ( m_list.size() == 2) {
// Load Rootlist
_s0__Browse browse;
_s0__BrowseResponse browse_response;
......@@ -446,7 +519,8 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
opc_mProperty_EuType);
if ( soap_call___s0__Browse( &soap, opc_endpoint, NULL, &browse, &browse_response) ==
SOAP_OK) {
pwr_tOix bws = so.po.oix;
server_state->RequestCnt++;
pwr_tOix bws = m_list[1]->po.oix;
pwr_tOix next_bws;
for ( int i = 0; i < (int)browse_response.Elements.size(); i++) {
next_bws = next_oix;
......@@ -457,15 +531,16 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
}
else if ( oix < m_list.size()) {
if ( !(m_list[oix].po.flags & procom_obj_mFlags_Loaded)) {
if ( !(m_list[oix]->po.flags & procom_obj_mFlags_Loaded)) {
_s0__Browse browse;
_s0__BrowseResponse browse_response;
browse.ItemName = new std::string( m_list[oix].item_name);
browse.ItemName = new std::string( m_list[oix]->item_name);
opc_mask_to_propertynames( browse.PropertyNames,
opc_mProperty_DataType | opc_mProperty_Description |
opc_mProperty_EuType);
......@@ -475,6 +550,7 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
pwr_tOix next_bws;
pwr_tOix bws = 0;
server_state->RequestCnt++;
if ( browse_response.Errors.size() > 0) {
errlog( browse.ItemName, browse_response.Errors);
}
......@@ -484,11 +560,12 @@ void opc_provider::objectOid( co_procom *pcom, pwr_tOix oix)
i == 0, i == (int)browse_response.Elements.size() - 1, 0, 0);
bws = next_bws;
}
m_list[oix].po.flags |= procom_obj_mFlags_Loaded;
m_list[oix]->po.flags |= procom_obj_mFlags_Loaded;
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
}
}
......@@ -501,14 +578,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].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);
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].po.flags & procom_obj_mFlags_Loaded)
olist.push_back( m_list[i].po);
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++) {
......@@ -536,8 +613,8 @@ void opc_provider::objectName( co_procom *pcom, char *name, pwr_tOix poix)
strcpy( oname, name);
for ( int i = 0; i < (int) m_list.size(); i++) {
if ( !m_list[i].po.flags & procom_obj_mFlags_Deleted) {
if ( cdh_NoCaseStrcmp( oname, longname(m_list[i].po.oix)) == 0) {
if ( !m_list[i]->po.flags & procom_obj_mFlags_Deleted) {
if ( cdh_NoCaseStrcmp( oname, longname(m_list[i]->po.oix)) == 0) {
objectOid( pcom, i);
return;
}
......@@ -596,14 +673,14 @@ void opc_provider::writeAttribute( co_procom *pcom, pwr_tOix oix, unsigned int o
return;
}
if ( offset + size > m_list[oix].po.body_size) {
if ( offset + size > m_list[oix]->po.body_size) {
pcom->provideStatus( LDH__NOSUCHATTR);
return;
}
memcpy( (void *)((unsigned long)m_list[oix].po.body + (unsigned long)offset), buffer, size);
memcpy( (void *)((unsigned long)m_list[oix]->po.body + (unsigned long)offset), buffer, size);
switch ( m_list[oix].po.cid) {
switch ( m_list[oix]->po.cid) {
case pwr_cClass_Opc_String:
case pwr_cClass_Opc_Boolean:
case pwr_cClass_Opc_Float:
......@@ -625,18 +702,18 @@ void opc_provider::writeAttribute( co_procom *pcom, pwr_tOix oix, unsigned int o
case pwr_cClass_Opc_QName: {
// Value has the same offset for all opctype classes
if ( offset == (unsigned int) ((char *) &((pwr_sClass_Opc_String *)m_list[oix].po.body)->Value -
(char *)m_list[oix].po.body)) {
if ( offset == (unsigned int) ((char *) &((pwr_sClass_Opc_String *)m_list[oix]->po.body)->Value -
(char *)m_list[oix]->po.body)) {
_s0__Write write;
_s0__WriteResponse write_response;
char opc_buffer[2000];
int opc_type;
s0__ItemValue *item = new s0__ItemValue();
item->ItemName = new std::string( m_list[oix].item_name);
opc_pwrtype_to_opctype( m_list[oix].type, &opc_type);
item->ItemName = new std::string( m_list[oix]->item_name);
opc_pwrtype_to_opctype( m_list[oix]->type, &opc_type);
opc_convert_pwrtype_to_opctype( buffer, opc_buffer, sizeof(opc_buffer), opc_type,
m_list[oix].type);
m_list[oix]->type);
item->Value = opc_opctype_to_value( opc_buffer, sizeof(opc_buffer), opc_type);
write.ItemList = new s0__WriteRequestItemList;
write.ItemList->Items.push_back( item);
......@@ -644,10 +721,12 @@ void opc_provider::writeAttribute( co_procom *pcom, pwr_tOix oix, unsigned int o
if ( soap_call___s0__Write( &soap, opc_endpoint, NULL, &write, &write_response) ==
SOAP_OK) {
// Check item errors
server_state->RequestCnt++;
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
}
break;
......@@ -667,12 +746,12 @@ void opc_provider::readAttribute( co_procom *pcom, pwr_tOix oix, unsigned int of
return;
}
if ( offset + size > m_list[oix].po.body_size) {
if ( offset + size > m_list[oix]->po.body_size) {
pcom->provideStatus( GDH__NOSUCHOBJ);
return;
}
switch ( m_list[oix].po.cid) {
switch ( m_list[oix]->po.cid) {
case pwr_cClass_Opc_String:
case pwr_cClass_Opc_Boolean:
case pwr_cClass_Opc_Float:
......@@ -691,33 +770,35 @@ void opc_provider::readAttribute( co_procom *pcom, pwr_tOix oix, unsigned int of
case pwr_cClass_Opc_Duration:
case pwr_cClass_Opc_QName:
// Value has the same offset for all opctype classes
if ( offset == (unsigned int) ((char *) &((pwr_sClass_Opc_String *)m_list[oix].po.body)->Value -
(char *)m_list[oix].po.body)) {
if ( offset == (unsigned int) ((char *) &((pwr_sClass_Opc_String *)m_list[oix]->po.body)->Value -
(char *)m_list[oix]->po.body)) {
_s0__Read read;
_s0__ReadResponse read_response;
s0__ReadRequestItem *item = new s0__ReadRequestItem();
item->ItemName = new std::string( m_list[oix].item_name);
item->ItemName = new std::string( m_list[oix]->item_name);
read.ItemList = new s0__ReadRequestItemList;
read.ItemList->Items.push_back( item);
if ( soap_call___s0__Read( &soap, opc_endpoint, NULL, &read, &read_response) ==
SOAP_OK) {
server_state->RequestCnt++;
if ( read_response.RItemList && read_response.RItemList->Items.size() > 0) {
opc_convert_opctype_to_pwrtype( &((pwr_sClass_Opc_String *)m_list[oix].po.body)->Value,
m_list[oix].size, read_response.RItemList->Items[0]->Value,
(pwr_eType) m_list[oix].type);
opc_convert_opctype_to_pwrtype( &((pwr_sClass_Opc_String *)m_list[oix]->po.body)->Value,
m_list[oix]->size, read_response.RItemList->Items[0]->Value,
(pwr_eType) m_list[oix]->type);
}
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
}
break;
}
void *p = (void *)((unsigned long)m_list[oix].po.body + (unsigned long)offset);
void *p = (void *)((unsigned long)m_list[oix]->po.body + (unsigned long)offset);
pcom->provideAttr( GDH__SUCCESS, oix, size, p);
}
......@@ -730,9 +811,9 @@ void opc_provider::subAssociateBuffer( co_procom *pcom, void **buff, int oix, in
return;
}
*buff = (char *)m_list[oix].po.body + offset;
*buff = (char *)m_list[oix]->po.body + offset;
switch ( m_list[oix].po.cid) {
switch ( m_list[oix]->po.cid) {
case pwr_cClass_Opc_String:
case pwr_cClass_Opc_Boolean:
case pwr_cClass_Opc_Float:
......@@ -752,7 +833,7 @@ void opc_provider::subAssociateBuffer( co_procom *pcom, void **buff, int oix, in
case pwr_cClass_Opc_Date:
case pwr_cClass_Opc_Duration:
case pwr_cClass_Opc_QName:
if ( *buff == ((pwr_sClass_Opc_String *)m_list[oix].po.body)->Value) {
if ( *buff == ((pwr_sClass_Opc_String *)m_list[oix]->po.body)->Value) {
// Add opc subscription
_s0__Subscribe subscribe;
_s0__SubscribeResponse subscribe_response;
......@@ -764,7 +845,7 @@ void opc_provider::subAssociateBuffer( co_procom *pcom, void **buff, int oix, in
subscribe.ItemList = new s0__SubscribeRequestItemList();
s0__SubscribeRequestItem *ritem = new s0__SubscribeRequestItem();
ritem->ItemName = new std::string( m_list[oix].item_name);
ritem->ItemName = new std::string( m_list[oix]->item_name);
sprintf( handle, "%d", oix);
ritem->ClientItemHandle = new std::string( handle);
ritem->RequestedSamplingRate = (int *) malloc( sizeof(int));
......@@ -776,6 +857,7 @@ void opc_provider::subAssociateBuffer( co_procom *pcom, void **buff, int oix, in
SOAP_OK) {
opcprv_sub sub;
server_state->RequestCnt++;
sub.handle = *subscribe_response.ServerSubHandle;
sub.oix = oix;
m_sublist[sid.rix] = sub;
......@@ -788,7 +870,8 @@ void opc_provider::subAssociateBuffer( co_procom *pcom, void **buff, int oix, in
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
}
break;
......@@ -809,10 +892,12 @@ void opc_provider::subDisassociateBuffer( co_procom *pcom, pwr_tSubid sid)
if ( soap_call___s0__SubscriptionCancel( &soap, opc_endpoint, NULL, &subcancel, &subcancel_response) ==
SOAP_OK) {
server_state->RequestCnt++;
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
m_sublist.erase( it);
......@@ -835,6 +920,7 @@ void opc_provider::cyclic( co_procom *pcom)
if ( size) {
if ( soap_call___s0__SubscriptionPolledRefresh( &soap, opc_endpoint, NULL, &subpoll, &subpoll_response) ==
SOAP_OK) {
server_state->RequestCnt++;
if ( (int) subpoll_response.RItemList.size() != size) {
return;
}
......@@ -842,14 +928,14 @@ void opc_provider::cyclic( co_procom *pcom)
int idx = 0;
for ( sublist_iterator it = m_sublist.begin(); it != m_sublist.end(); it++) {
if ( subpoll_response.RItemList[idx]->Items.size()) {
opc_convert_opctype_to_pwrtype( (void *) ((pwr_sClass_Opc_String *)m_list[it->second.oix].po.body)->Value,
m_list[it->second.oix].size,
opc_convert_opctype_to_pwrtype( (void *) ((pwr_sClass_Opc_String *)m_list[it->second.oix]->po.body)->Value,
m_list[it->second.oix]->size,
subpoll_response.RItemList[idx]->Items[0]->Value,
(pwr_eType) m_list[it->second.oix].type);
(pwr_eType) m_list[it->second.oix]->type);
#if 0
switch ( m_list[it->second.oix].po.cid) {
switch ( m_list[it->second.oix]->po.cid) {
case pwr_cClass_Opc_String:
strcpy( ((pwr_sClass_Opc_String *)m_list[it->second.oix].po.body)->Value,
strcpy( ((pwr_sClass_Opc_String *)m_list[it->second.oix]->po.body)->Value,
((xsd__string *)subpoll_response.RItemList[idx]->Items[0]->Value)->__item.c_str());
break;
default: ;
......@@ -862,7 +948,8 @@ void opc_provider::cyclic( co_procom *pcom)
}
else {
// Error returned from soap
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
fault();
}
}
}
......@@ -890,34 +977,34 @@ void opc_provider::abort( co_procom *pcom)
void opc_provider::delete_tree( pwr_tOix oix)
{
m_list[oix].po.flags = procom_obj_mFlags_Deleted;
m_list[oix]->po.flags = procom_obj_mFlags_Deleted;
for ( pwr_tOix ix = m_list[oix].po.fchoix;
for ( pwr_tOix ix = m_list[oix]->po.fchoix;
ix;
ix = m_list[ix].po.fwsoix)
ix = m_list[ix]->po.fwsoix)
delete_tree( ix);
}
char *opc_provider::longname( pwr_tOix oix)
{
if ( m_list[oix].po.fthoix == 0)
strcpy( m_list[oix].po.lname, m_list[oix].po.name);
if ( m_list[oix]->po.fthoix == 0)
strcpy( m_list[oix]->po.lname, m_list[oix]->po.name);
else {
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);
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].po.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].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;
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;
}
}
......@@ -933,16 +1020,19 @@ void opc_provider::get_server_state()
if ( soap_call___s0__GetStatus( &soap, opc_endpoint, NULL, &get_status, &get_status_response) ==
SOAP_OK) {
server_state->RequestCnt++;
if ( get_status_response.Status->VendorInfo)
strcpy( server_state.VendorInfo, get_status_response.Status->VendorInfo->c_str());
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());
// TODO server_state.StartTime.tv_sec = get_status_response.Status->StartTime;
server_state.ServerState = get_status_response.GetStatusResult->ServerState;
strcpy( server_state->ProductVersion, get_status_response.Status->ProductVersion->c_str());
opc_convert_opctype_to_pwrtype( &server_state->StartTime, sizeof(server_state->StartTime),
&get_status_response.Status->StartTime, pwr_eType_Time);
server_state->ServerState = get_status_response.GetStatusResult->ServerState;
}
else {
server_state.ServerState = s0__serverState__commFault;
soap_print_fault( &soap, stderr);
server_state->RequestCnt++;
server_state->ServerState = s0__serverState__commFault;
fault();
}
}
......@@ -1031,11 +1121,12 @@ int main(int argc, char *argv[])
0); // Global
procom.init();
strcpy( provider.server_state.Server, server_url);
// provider.nodeUp();
soap_init( &provider.soap);
provider.init();
strcpy( provider.server_state->Server, server_url);
provider.get_server_state();
procom.mainLoop();
......
/*
* Proview $Id: opc_provider.h,v 1.8 2007-03-23 08:19:45 claes Exp $
* Proview $Id: opc_provider.h,v 1.9 2007-03-27 08:37:50 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -56,9 +56,14 @@ class opcprv_sub {
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),
server_state(0) {
memset( &server_state, 0, sizeof(server_state));
}
~opc_provider() {
for ( int i = 0; i < (int) m_list.size(); i++)
delete m_list[i];
}
virtual void object( co_procom *pcom);
virtual void objectOid( co_procom *pcom, pwr_tOix oix);
virtual void objectName( co_procom *pcom, char *name, pwr_tOix poix);
......@@ -97,13 +102,15 @@ public:
void get_server_state();
char *opc_provider::name_to_objectname( char *name);
void errlog( std::string* item, std::vector<s0__OPCError *>& errvect);
void init();
void fault();
vector<opcprv_obj> m_list;
vector<opcprv_obj *> m_list;
map<pwr_tUInt32, opcprv_sub> m_sublist;
pwr_tOix root;
pwr_tOix next_oix;
struct soap soap;
pwr_sClass_Opc_ServerState server_state;
pwr_sClass_Opc_ServerState *server_state;
};
#endif
/*
* Proview $Id: opc_server.cpp,v 1.12 2007-03-23 08:19:45 claes Exp $
* Proview $Id: opc_server.cpp,v 1.13 2007-03-27 08:37:50 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -56,20 +56,24 @@ typedef map< int, opcsrv_client>::iterator client_iterator;
class opc_server {
public:
opc_server() : m_client_access_cnt(0), m_grant_all(true) {}
map< int, opcsrv_client> m_client;
pwr_tTime m_start_time;
pwr_sClass_Opc_ServerConfig *m_config;
opc_sClientAccess m_client_access[20];
int m_client_access_cnt;
int m_current_access;
bool m_grant_all;
opcsrv_client *find_client( int sid);
opcsrv_client *new_client( int sid);
int fault( struct soap *soap, int code);
int get_access( struct soap *so);
};
static opc_server *opcsrv;
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;
static int
opcsrv_set_error(struct soap *soap, const char *faultcode, const char *faultsubcode, const char *faultstring, const char *faultdetail, int soaperror)
......@@ -126,6 +130,7 @@ int main()
struct soap soap;
int m,s; // Master and slave sockets
pwr_tStatus sts;
pwr_tOid config_oid;
sts = gdh_Init("opc_server");
if ( EVEN(sts)) {
......@@ -134,45 +139,33 @@ int main()
opcsrv = new opc_server();
#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);
exit(sts);
}
sts = gdh_ObjidToPointer( config_oid, &opc_config);
sts = gdh_ObjidToPointer( config_oid, (void **)&opcsrv->m_config);
if ( EVEN(sts)) {
exit(0);
exit(sts);
}
#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 < (int)(sizeof(opcsrv->m_config->ClientAccess)/sizeof(opcsrv->m_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++;
if ( strcmp( opcsrv->m_config->ClientAccess[i].Address, "") != 0) {
opcsrv->m_client_access[opcsrv->m_client_access_cnt].address =
inet_network( opcsrv->m_config->ClientAccess[i].Address);
if ( opcsrv->m_client_access[opcsrv->m_client_access_cnt].address != -1) {
opcsrv->m_client_access[opcsrv->m_client_access_cnt].access = opcsrv->m_config->ClientAccess[i].Access;
opcsrv->m_client_access_cnt++;
}
}
}
clock_gettime( CLOCK_REALTIME, &opc_start_time);
clock_gettime( CLOCK_REALTIME, &opcsrv->m_start_time);
soap_init( &soap);
m = soap_bind( &soap, NULL, 18083, 100);
......@@ -200,17 +193,26 @@ int main()
}
soap_done( &soap); // Close master socket and detach environment
return 0;
return SOAP_OK;
}
SOAP_FMAC5 int SOAP_FMAC6 __s0__GetStatus(struct soap*,
SOAP_FMAC5 int SOAP_FMAC6 __s0__GetStatus(struct soap *soap,
_s0__GetStatus *s0__GetStatus,
_s0__GetStatusResponse *s0__GetStatusResponse)
{
pwr_tTime current_time;
// Check access for connection
opcsrv->m_current_access = opcsrv->get_access( soap);
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_None:
return opcsrv->fault( soap, opc_eResultCode_E_ACCESS_DENIED);
default: ;
}
clock_gettime( CLOCK_REALTIME, &current_time);
s0__GetStatusResponse->GetStatusResult = new s0__ReplyBase();
......@@ -223,13 +225,13 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__GetStatus(struct soap*,
s0__GetStatusResponse->Status = new s0__ServerStatus();
s0__GetStatusResponse->Status->VendorInfo = new std::string("Proview Open Source Process Control");
s0__GetStatusResponse->Status->SupportedInterfaceVersions.push_back( s0__interfaceVersion__XML_USCOREDA_USCOREVersion_USCORE1_USCORE0);
s0__GetStatusResponse->Status->StartTime.__item = opc_datetime( &opc_start_time);
s0__GetStatusResponse->Status->StartTime.__item = opc_datetime( &opcsrv->m_start_time);
s0__GetStatusResponse->Status->ProductVersion = new std::string( pwrv_cPwrVersionStr);
return 0;
return SOAP_OK;
}
SOAP_FMAC5 int SOAP_FMAC6 __s0__Read(struct soap*,
SOAP_FMAC5 int SOAP_FMAC6 __s0__Read(struct soap *soap,
_s0__Read *s0__Read,
_s0__ReadResponse *s0__ReadResponse)
{
......@@ -246,6 +248,17 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Read(struct soap*,
char buf[1024];
unsigned int options = 0;
// Check access for connection
opcsrv->m_current_access = opcsrv->get_access( soap);
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_ReadOnly:
case pwr_eOpc_AccessEnum_ReadWrite:
break;
default:
return opcsrv->fault( soap, opc_eResultCode_E_ACCESS_DENIED);
}
s0__ReadResponse->ReadResult = new s0__ReplyBase();
s0__ReadResponse->ReadResult->RcvTime.__item = opc_datetime(0);
s0__ReadResponse->ReadResult->ReplyTime.__item = opc_datetime(0);
......@@ -254,10 +267,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Read(struct soap*,
s0__ReadResponse->ReadResult->ServerState = s0__serverState__running;
if (!s0__Read->ItemList)
return 0;
return SOAP_OK;
if (s0__Read->ItemList->Items.empty())
return 0;
return SOAP_OK;
memset(path, 0, sizeof(path));
......@@ -342,7 +355,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Read(struct soap*,
continue;
}
}
return 0;
return SOAP_OK;
}
SOAP_FMAC5 int SOAP_FMAC6 __s0__Write(struct soap* soap,
......@@ -361,6 +374,16 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Write(struct soap* soap,
char buf[1024];
unsigned int options = 0;
// Check access for connection
opcsrv->m_current_access = opcsrv->get_access( soap);
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_ReadWrite:
break;
default:
return opcsrv->fault( soap, opc_eResultCode_E_ACCESS_DENIED);
}
s0__WriteResponse->WriteResult = new s0__ReplyBase();
s0__WriteResponse->WriteResult->RcvTime.__item = opc_datetime(0);
s0__WriteResponse->WriteResult->ReplyTime.__item = opc_datetime(0);
......@@ -369,10 +392,10 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Write(struct soap* soap,
s0__WriteResponse->WriteResult->ServerState = s0__serverState__running;
if (!s0__Write->ItemList)
return 0;
return SOAP_OK;
if (s0__Write->ItemList->Items.empty())
return 0;
return SOAP_OK;
strcpy(path, "");
......@@ -434,7 +457,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Write(struct soap* soap,
s0__WriteResponse->RItemList->Items.push_back(iv);
}
}
return 0;
return SOAP_OK;
}
SOAP_FMAC5 int SOAP_FMAC6 __s0__Subscribe(struct soap* soap,
......@@ -446,6 +469,17 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Subscribe(struct soap* soap,
pwr_tUInt32 a_size, a_offs, a_elem;
pwr_tAName aname;
// Check access for connection
opcsrv->m_current_access = opcsrv->get_access( soap);
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_ReadOnly:
case pwr_eOpc_AccessEnum_ReadWrite:
break;
default:
return opcsrv->fault( soap, opc_eResultCode_E_ACCESS_DENIED);
}
opcsrv_client *client = opcsrv->find_client( soap->ip);
if ( !client)
client = opcsrv->new_client( soap->ip);
......@@ -485,13 +519,22 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Subscribe(struct soap* soap,
client->m_sublist[*s0__SubscribeResponse->ServerSubHandle].push_back( sub);
}
}
return 0;
return SOAP_OK;
}
SOAP_FMAC5 int SOAP_FMAC6 __s0__SubscriptionPolledRefresh(struct soap* soap,
_s0__SubscriptionPolledRefresh *s0__SubscriptionPolledRefresh,
_s0__SubscriptionPolledRefreshResponse *s0__SubscriptionPolledRefreshResponse)
{
// Check access for the connection
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_ReadOnly:
case pwr_eOpc_AccessEnum_ReadWrite:
break;
default:
return opcsrv->fault( soap, opc_eResultCode_E_ACCESS_DENIED);
}
pwr_tTime current_time;
opcsrv_client *client = opcsrv->find_client( soap->ip);
if ( !client) {
......@@ -538,13 +581,22 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__SubscriptionPolledRefresh(struct soap* soap,
}
}
return 0;
return SOAP_OK;
}
SOAP_FMAC5 int SOAP_FMAC6 __s0__SubscriptionCancel(struct soap* soap,
_s0__SubscriptionCancel *s0__SubscriptionCancel,
_s0__SubscriptionCancelResponse *s0__SubscriptionCancelResponse)
{
// Check access for the connection
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_ReadOnly:
case pwr_eOpc_AccessEnum_ReadWrite:
break;
default:
return opcsrv->fault( soap, opc_eResultCode_E_ACCESS_DENIED);
}
opcsrv_client *client = opcsrv->find_client( soap->ip);
if ( !client) {
// TODO
......@@ -564,7 +616,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__SubscriptionCancel(struct soap* soap,
}
s0__SubscriptionCancelResponse->ClientRequestHandle =
s0__SubscriptionCancel->ClientRequestHandle;
return 0;
return SOAP_OK;
}
bool opcsrv_get_properties( bool is_item, pwr_tCid pcid, pwr_tAttrRef *parp,
......@@ -684,7 +736,7 @@ bool opcsrv_get_properties( bool is_item, pwr_tCid pcid, pwr_tAttrRef *parp,
ip->Name = std::string("accessRights");
ip->Value = new xsd__string();
switch ( opc_current_access) {
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_ReadOnly:
((xsd__string *)ip->Value)->__item = std::string("readable");
break;
......@@ -904,16 +956,19 @@ bool opcsrv_get_properties( bool is_item, pwr_tCid pcid, pwr_tAttrRef *parp,
return true;
}
int opcsrv_get_access( struct soap *so)
int opc_server::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;
if ( m_grant_all)
access = pwr_eOpc_AccessEnum_ReadWrite;
else {
for ( int i = 0; i < m_client_access_cnt; i++) {
if ( m_client_access[i].address == (int)so->ip) {
access = m_client_access[i].access;
break;
}
}
}
return access;
}
......@@ -927,7 +982,17 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Browse(struct soap *soap, _s0__Browse *s0__Brows
unsigned int property_mask;
pwr_tTime current_time;
opc_current_access = opcsrv_get_access( soap);
// Check access for connection
opcsrv->m_current_access = opcsrv->get_access( soap);
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_ReadOnly:
case pwr_eOpc_AccessEnum_ReadWrite:
break;
default:
return opcsrv->fault( soap, opc_eResultCode_E_ACCESS_DENIED);
}
clock_gettime( CLOCK_REALTIME, &current_time);
s0__BrowseResponse->BrowseResult = new s0__ReplyBase();
......@@ -1207,7 +1272,7 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__Browse(struct soap *soap, _s0__Browse *s0__Brows
return SOAP_OK;
}
SOAP_FMAC5 int SOAP_FMAC6 __s0__GetProperties(struct soap*,
SOAP_FMAC5 int SOAP_FMAC6 __s0__GetProperties(struct soap *soap,
_s0__GetProperties *s0__GetProperties,
_s0__GetPropertiesResponse *s0__GetPropertiesResponse)
{
......@@ -1221,7 +1286,18 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__GetProperties(struct soap*,
gdh_sAttrDef *bd;
int rows;
if ( s0__GetProperties->ReturnAllProperties)
// Check access for connection
opcsrv->m_current_access = opcsrv->get_access( soap);
switch ( opcsrv->m_current_access) {
case pwr_eOpc_AccessEnum_ReadOnly:
case pwr_eOpc_AccessEnum_ReadWrite:
break;
default:
return opcsrv->fault( soap, opc_eResultCode_E_ACCESS_DENIED);
}
if ( s0__GetProperties->ReturnAllProperties && *s0__GetProperties->ReturnAllProperties)
property_mask = ~0;
else
opc_propertynames_to_mask( s0__GetProperties->PropertyNames, &property_mask);
......@@ -1247,20 +1323,26 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__GetProperties(struct soap*,
sts = gdh_NameToAttrref( pwr_cNOid, iname, &aref);
if ( EVEN(sts)) {
// E_INVALIDITEMNAME
return 0;
opcsrv_returnerror( s0__GetPropertiesResponse->Errors, &plist->ResultID,
opc_eResultCode_E_UNKNOWNITEMNAME, 0);
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
continue;
}
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;
opcsrv_returnerror( s0__GetPropertiesResponse->Errors, &plist->ResultID,
opc_eResultCode_E_FAIL, 0);
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
continue;
}
if ( !cdh_tidIsCid( cid)) {
// E_INVALIDITEMNAME
return 0;
opcsrv_returnerror( s0__GetPropertiesResponse->Errors, &plist->ResultID,
opc_eResultCode_E_FAIL, 0);
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
continue;
}
opcsrv_get_properties( false, cid, 0, &aref,
......@@ -1270,27 +1352,36 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__GetProperties(struct soap*,
else {
// Get the object attrref and class for this attribute
if ( !( aname = strrchr( iname, '.'))) {
// E_INVALIDITEMNAME
return 0;
opcsrv_returnerror( s0__GetPropertiesResponse->Errors, &plist->ResultID,
opc_eResultCode_E_INVALIDITEMNAME, 0);
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
continue;
}
aname++;
sts = gdh_AttrArefToObjectAref( &aref, &paref);
if ( EVEN(sts)) {
return 0;
opcsrv_returnerror( s0__GetPropertiesResponse->Errors, &plist->ResultID,
opc_eResultCode_E_FAIL, 0);
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
continue;
}
sts = gdh_GetAttrRefTid( &paref, &cid);
if ( EVEN(sts)) {
// E_INVALIDITEMNAME
return 0;
opcsrv_returnerror( s0__GetPropertiesResponse->Errors, &plist->ResultID,
opc_eResultCode_E_FAIL, 0);
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
continue;
}
// Get body definition
sts = gdh_GetObjectBodyDef( cid, &bd, &rows, pwr_cNOid);
if ( EVEN(sts)) {
// E_INVALIDITEMNAME
return 0;
opcsrv_returnerror( s0__GetPropertiesResponse->Errors, &plist->ResultID,
opc_eResultCode_E_FAIL, 0);
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
continue;
}
int bd_idx = -1;
for ( int i = 0; i < rows; i++) {
......@@ -1300,9 +1391,11 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__GetProperties(struct soap*,
}
}
if ( bd_idx == -1) {
// E_INVALIDITEMNAME
free( (char *)bd);
return 0;
opcsrv_returnerror( s0__GetPropertiesResponse->Errors, &plist->ResultID,
opc_eResultCode_E_FAIL, 0);
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
continue;
}
opcsrv_get_properties( true, cid, &paref, &aref,
......@@ -1314,6 +1407,6 @@ SOAP_FMAC5 int SOAP_FMAC6 __s0__GetProperties(struct soap*,
s0__GetPropertiesResponse->PropertyLists.push_back( plist);
}
return 0;
return SOAP_OK;
}
......@@ -98,6 +98,12 @@ class xsd__dateTime : public xsd__anyType
std::string __item;
};
/// Class wrapper for built-in type "xs:duration" derived from xsd__anyType
class xsd__duration : public xsd__anyType
{ public:
std::string __item;
};
/// Primitive built-in type "xs:decimal"
typedef std::string xsd__decimal;
......
/*
* Proview $Id: opc_utl.h,v 1.13 2007-03-23 08:19:45 claes Exp $
* Proview $Id: opc_utl.h,v 1.14 2007-03-27 08:37:50 claes Exp $
* Copyright (C) 2005 SSAB Oxelsund AB.
*
* This program is free software; you can redistribute it and/or
......@@ -79,6 +79,7 @@ typedef enum {
} opc_eDataType;
typedef enum {
opc_eResultCode_S_,
opc_eResultCode_S_CLAMP,
opc_eResultCode_S_DATAQUEUEOVERFLOW,
opc_eResultCode_S_UNSUPPORTEDRATE,
......
Volume Opc $ClassVolume 0.0.250.9
Body SysBody 01-JAN-1970 01:00:00.00
Attr NextOix = "_X12"
Attr NextOix = "_X37"
Attr NextCix = "_X24"
Attr NextTix[0] = "_X3"
Attr NextTix[0] = "_X4"
EndBody
Object Type $TypeHier 2 02-MAR-2007 14:45:01.59
Object Opc_ServerStateEnum $TypeDef 1 05-MAR-2007 13:22:13.08
......@@ -53,7 +53,7 @@ Volume Opc $ClassVolume 0.0.250.9
EndObject
EndObject
Object Opc_AccessEnum $TypeDef 2 05-MAR-2007 13:22:42.62
Body SysBody 05-MAR-2007 13:20:09.54
Body SysBody 26-MAR-2007 08:57:21.02
Attr TypeRef = "pwrs:Type-$Enum"
Attr Elements = 1
EndBody
......@@ -78,8 +78,196 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
Object Opc_ResultCodeEnum $TypeDef 3 26-MAR-2007 08:57:08.63
Body SysBody 26-MAR-2007 08:57:24.17
Attr TypeRef = "pwrs:Type-$Enum"
Attr Elements = 1
EndBody
Object None $Value 36 26-MAR-2007 09:17:34.19
Body SysBody 26-MAR-2007 09:17:36.98
Attr Text = "None"
Attr PgmName = "None"
EndBody
EndObject
Object Clamp $Value 13 26-MAR-2007 08:58:04.21
Body SysBody 26-MAR-2007 09:15:37.54
Attr Text = "Clamp"
Attr PgmName = "Clamp"
Attr Value = 1
EndBody
EndObject
Object DataQueueOverflow $Value 14 26-MAR-2007 09:01:33.58
Body SysBody 26-MAR-2007 09:15:39.88
Attr Text = "DataQueueOverflow"
Attr PgmName = "DataQueueOverflow"
Attr Value = 2
EndBody
EndObject
Object UnsupportedRate $Value 15 26-MAR-2007 09:01:52.23
Body SysBody 26-MAR-2007 09:15:42.03
Attr Text = "UnsupportedRate"
Attr PgmName = "UnsupportedRate"
Attr Value = 3
EndBody
EndObject
Object Access_Denied $Value 16 26-MAR-2007 09:02:08.42
Body SysBody 26-MAR-2007 09:15:44.17
Attr Text = "Access_Denied"
Attr PgmName = "Access_Denied"
Attr Value = 4
EndBody
EndObject
Object Busy $Value 17 26-MAR-2007 09:02:17.37
Body SysBody 26-MAR-2007 09:15:46.48
Attr Text = "Busy"
Attr PgmName = "Busy"
Attr Value = 5
EndBody
EndObject
Object Fail $Value 18 26-MAR-2007 09:02:23.96
Body SysBody 26-MAR-2007 09:15:48.65
Attr Text = "Fail"
Attr PgmName = "Fail"
Attr Value = 6
EndBody
EndObject
Object InvalidContinuationPoint $Value 19 26-MAR-2007 09:02:40.66
Body SysBody 26-MAR-2007 09:15:50.84
Attr Text = "InvalidContinuationPoint"
Attr PgmName = "InvalidContinuationPoint"
Attr Value = 7
EndBody
EndObject
Object InvalidFilter $Value 20 26-MAR-2007 09:02:54.73
Body SysBody 26-MAR-2007 09:15:52.95
Attr Text = "InvalidFilter"
Attr PgmName = "InvalidFilter"
Attr Value = 8
EndBody
EndObject
Object InvalidHoldTime $Value 21 26-MAR-2007 09:03:04.96
Body SysBody 26-MAR-2007 09:15:55.03
Attr Text = "InvalidHoldTime"
Attr PgmName = "InvalidHoldTime"
Attr Value = 9
EndBody
EndObject
Object InvalidItemName $Value 22 26-MAR-2007 09:03:21.32
Body SysBody 26-MAR-2007 09:16:01.04
Attr Text = "InvalidItemName"
Attr PgmName = "InvalidItemName"
Attr Value = 10
EndBody
EndObject
Object InvalidItemPath $Value 23 26-MAR-2007 09:03:34.59
Body SysBody 26-MAR-2007 09:16:06.28
Attr Text = "InvalidItemPath"
Attr PgmName = "InvalidItemPath"
Attr Value = 11
EndBody
EndObject
Object InvalidPid $Value 24 26-MAR-2007 09:03:50.66
Body SysBody 26-MAR-2007 09:16:08.92
Attr Text = "InvalidPid"
Attr PgmName = "InvalidPid"
Attr Value = 12
EndBody
EndObject
Object NoSubscription $Value 25 26-MAR-2007 09:04:05.90
Body SysBody 26-MAR-2007 09:16:11.44
Attr Text = "NoSubscription"
Attr PgmName = "NoSubscription"
Attr Value = 13
EndBody
EndObject
Object NotSupported $Value 26 26-MAR-2007 09:04:17.85
Body SysBody 26-MAR-2007 09:16:13.87
Attr Text = "NotSupported"
Attr PgmName = "NotSupported"
Attr Value = 14
EndBody
EndObject
Object OutOfMemory $Value 27 26-MAR-2007 09:04:28.71
Body SysBody 26-MAR-2007 09:16:31.91
Attr Text = "OutOfMemory"
Attr PgmName = "OutOfMemory"
Attr Value = 15
EndBody
EndObject
Object Range $Value 28 26-MAR-2007 09:04:40.01
Body SysBody 26-MAR-2007 09:16:34.24
Attr Text = "Range"
Attr PgmName = "Range"
Attr Value = 16
EndBody
EndObject
Object ReadOnly $Value 29 26-MAR-2007 09:04:47.72
Body SysBody 26-MAR-2007 09:16:36.47
Attr Text = "ReadOnly"
Attr PgmName = "ReadOnly"
Attr Value = 17
EndBody
EndObject
Object ServerState $Value 30 26-MAR-2007 09:04:56.81
Body SysBody 26-MAR-2007 09:16:40.76
Attr Text = "ServerState"
Attr PgmName = "ServerState"
Attr Value = 18
EndBody
EndObject
Object TimedOut $Value 31 26-MAR-2007 09:05:04.79
Body SysBody 26-MAR-2007 09:16:44.64
Attr Text = "TimedOut"
Attr PgmName = "TimedOut"
Attr Value = 19
EndBody
EndObject
Object UnknownItemName $Value 32 26-MAR-2007 09:05:38.19
Body SysBody 26-MAR-2007 09:16:48.03
Attr Text = "UnknownItemName"
Attr PgmName = "UnknownItemName"
Attr Value = 20
EndBody
EndObject
Object UnknownItemPath $Value 33 26-MAR-2007 09:05:43.74
Body SysBody 26-MAR-2007 09:16:51.16
Attr Text = "UnknownItemPath"
Attr PgmName = "UnknownItemPath"
Attr Value = 21
EndBody
EndObject
Object WriteOnly $Value 34 26-MAR-2007 09:05:52.22
Body SysBody 26-MAR-2007 09:16:54.15
Attr Text = "WriteOnly"
Attr PgmName = "WriteOnly"
Attr Value = 22
EndBody
EndObject
Object BadType $Value 35 26-MAR-2007 09:06:04.01
Body SysBody 26-MAR-2007 09:16:57.36
Attr Text = "BadType"
Attr PgmName = "BadType"
Attr Value = 23
EndBody
EndObject
Object Unknown $Value 37 26-MAR-2007 12:52:30.99
Body SysBody 26-MAR-2007 12:52:38.68
Attr Text = "Unknown"
Attr PgmName = "Unknown"
Attr Value = 10000
EndBody
EndObject
EndObject
EndObject
Object Class $ClassHier 1 02-MAR-2007 14:45:04.90
!/**
! @Version 1.0
! @Summary Opc client access.
! Part of the Opc_ServerConfig object that defines the authorization for an
! OPC client to access a Proview OPC Server.
! The client is identified by the ip-address, and can have the access None,
! ReadOnly or ReadWrite.
!*/
Object Opc_ClientAccess $ClassDef 23 05-MAR-2007 13:28:06.11
Body SysBody 05-MAR-2007 13:27:57.56
Attr Editor = 0
......@@ -91,12 +279,18 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_ClientAccess"
Attr NextAix = "_X3"
EndBody
!/**
! Ip-address of OPC client
!*/
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
!/**
! Access for OPC client, None, ReadOnly or ReadWrite.
!*/
Object Access $Attribute 2 05-MAR-2007 13:29:22.75
Body SysBody 05-MAR-2007 13:29:47.95
Attr PgmName = "Access"
......@@ -109,6 +303,12 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Summary OPC Hierarchy object.
! Object to browse an element element in the opc hierarchy that is not an
! item, i.e. doesn't contain a value.
!*/
Object Opc_Hier $ClassDef 1 01-MAR-2007 16:48:24.56
Body SysBody 01-MAR-2007 16:47:58.95
Attr Editor = 0
......@@ -120,6 +320,9 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Hier"
Attr NextAix = "_X2"
EndBody
!/**
! Descripion property.
!*/
Object Description $Attribute 1 05-MAR-2007 13:41:33.76
Body SysBody 05-MAR-2007 13:41:39.19
Attr PgmName = "Description"
......@@ -148,12 +351,18 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_String"
Attr NextAix = "_X3"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tString80.
!*/
Object Value $Attribute 1 01-MAR-2007 16:49:41.73
Body SysBody 01-MAR-2007 16:49:54.49
Attr PgmName = "Value"
......@@ -166,6 +375,11 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'boolean'.
!*/
Object Opc_Boolean $ClassDef 19 01-MAR-2007 16:50:41.94
Body SysBody 01-MAR-2007 16:50:28.50
Attr Editor = 0
......@@ -177,12 +391,18 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Boolean"
Attr NextAix = "_X4"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tBoolean.
!*/
Object Value $Attribute 2 01-MAR-2007 16:50:28.50
Body SysBody 01-MAR-2007 16:50:51.77
Attr PgmName = "Value"
......@@ -195,6 +415,17 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'float'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!
! @b Object Graph
! @image orm_opc_float_og.gif
!*/
Object Opc_Float $ClassDef 18 01-MAR-2007 16:51:15.25
Body SysBody 01-MAR-2007 16:50:28.36
Attr Editor = 0
......@@ -206,48 +437,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Float"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tFloat32.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:47:07.23
Body SysBody 08-MAR-2007 18:17:40.34
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:47:49.35
Body SysBody 08-MAR-2007 18:17:45.95
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:48:07.66
Body SysBody 08-MAR-2007 18:20:14.24
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:48:24.95
Body SysBody 08-MAR-2007 18:20:17.51
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 10:43:36.02
Body SysBody 22-MAR-2007 10:43:57.46
Attr PgmName = "EnableSlider"
......@@ -260,6 +525,14 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'double'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_Double $ClassDef 17 01-MAR-2007 16:51:56.40
Body SysBody 01-MAR-2007 16:50:28.21
Attr Editor = 0
......@@ -271,48 +544,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Double"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tFloat64.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:23.71
Body SysBody 08-MAR-2007 18:20:25.69
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:23.71
Body SysBody 08-MAR-2007 18:20:29.79
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:23.71
Body SysBody 08-MAR-2007 18:20:33.17
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:23.71
Body SysBody 08-MAR-2007 18:20:36.44
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:50:58.89
Body SysBody 22-MAR-2007 15:50:58.89
Attr PgmName = "EnableSlider"
......@@ -325,6 +632,14 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'decimal'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_Decimal $ClassDef 16 01-MAR-2007 16:52:29.00
Body SysBody 01-MAR-2007 16:50:28.06
Attr Editor = 0
......@@ -336,48 +651,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Decimal"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tFloat32.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:28.14
Body SysBody 08-MAR-2007 18:19:54.87
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:28.14
Body SysBody 08-MAR-2007 18:19:58.75
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:28.14
Body SysBody 08-MAR-2007 18:20:46.39
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:28.14
Body SysBody 08-MAR-2007 18:20:49.66
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:51:05.91
Body SysBody 22-MAR-2007 15:51:05.91
Attr PgmName = "EnableSlider"
......@@ -390,6 +739,14 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'long'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_Long $ClassDef 15 01-MAR-2007 16:52:57.57
Body SysBody 01-MAR-2007 16:50:27.91
Attr Editor = 0
......@@ -401,48 +758,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Long"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tInt32.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:31.83
Body SysBody 08-MAR-2007 18:19:42.10
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:31.83
Body SysBody 08-MAR-2007 18:19:46.62
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:31.83
Body SysBody 08-MAR-2007 18:20:57.93
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:31.83
Body SysBody 08-MAR-2007 18:21:01.44
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:51:11.98
Body SysBody 22-MAR-2007 15:51:11.98
Attr PgmName = "EnableSlider"
......@@ -455,6 +846,17 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'int'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!
! @b Object Graph
! @image orm_opc_int_og.gif
!*/
Object Opc_Int $ClassDef 14 01-MAR-2007 16:53:30.28
Body SysBody 01-MAR-2007 16:50:27.77
Attr Editor = 0
......@@ -466,48 +868,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Int"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tInt32.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:36.44
Body SysBody 08-MAR-2007 18:19:26.59
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:36.44
Body SysBody 08-MAR-2007 18:19:33.16
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:36.44
Body SysBody 08-MAR-2007 18:21:09.76
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:36.44
Body SysBody 08-MAR-2007 18:21:12.90
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 10:44:19.69
Body SysBody 22-MAR-2007 10:44:19.69
Attr PgmName = "EnableSlider"
......@@ -520,6 +956,17 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'short'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
! @b Object Graph
!
! @image orm_opc_short_og.gif
!*/
Object Opc_Short $ClassDef 13 01-MAR-2007 16:54:41.65
Body SysBody 01-MAR-2007 16:50:27.62
Attr Editor = 0
......@@ -531,48 +978,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Short"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tInt16.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:40.55
Body SysBody 08-MAR-2007 18:18:55.71
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:40.55
Body SysBody 08-MAR-2007 18:19:04.24
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:40.55
Body SysBody 08-MAR-2007 18:21:21.73
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:40.55
Body SysBody 08-MAR-2007 18:21:24.70
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:51:21.30
Body SysBody 22-MAR-2007 15:51:21.30
Attr PgmName = "EnableSlider"
......@@ -585,6 +1066,17 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'byte'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!
! @b Object Graph
! @image orm_opc_byte_og.gif
!*/
Object Opc_Byte $ClassDef 12 01-MAR-2007 16:55:02.92
Body SysBody 01-MAR-2007 16:50:27.44
Attr Editor = 0
......@@ -596,48 +1088,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Byte"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tInt8.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:48.00
Body SysBody 08-MAR-2007 18:19:12.51
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:48.00
Body SysBody 08-MAR-2007 18:19:16.80
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:48.00
Body SysBody 08-MAR-2007 18:21:32.38
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:48.00
Body SysBody 08-MAR-2007 18:21:35.55
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:51:27.70
Body SysBody 22-MAR-2007 15:51:27.70
Attr PgmName = "EnableSlider"
......@@ -650,6 +1176,17 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'unsignedLong'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!
! @b Object Graph
! @image orm_opc_unsignedlong_og.gif
!*/
Object Opc_UnsignedLong $ClassDef 11 01-MAR-2007 16:55:43.95
Body SysBody 01-MAR-2007 16:50:27.27
Attr Editor = 0
......@@ -661,48 +1198,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_UnsignedLong"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tUInt32.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:51.24
Body SysBody 08-MAR-2007 18:21:43.83
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:51.24
Body SysBody 08-MAR-2007 18:21:47.05
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:51.24
Body SysBody 08-MAR-2007 18:21:50.25
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:51.24
Body SysBody 08-MAR-2007 18:21:53.28
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:51:33.78
Body SysBody 22-MAR-2007 15:51:33.78
Attr PgmName = "EnableSlider"
......@@ -715,6 +1286,17 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'unsignedInt'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!
! @b Object Graph
! @image orm_opc_float_og.gif
!*/
Object Opc_UnsignedInt $ClassDef 10 01-MAR-2007 16:56:14.97
Body SysBody 01-MAR-2007 16:50:27.07
Attr Editor = 0
......@@ -726,48 +1308,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_UnsignedInt"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tUInt32.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:54.37
Body SysBody 08-MAR-2007 18:22:00.44
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:54.37
Body SysBody 08-MAR-2007 18:22:03.35
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:54.37
Body SysBody 08-MAR-2007 18:22:06.30
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:54.37
Body SysBody 08-MAR-2007 18:22:09.05
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:51:40.47
Body SysBody 22-MAR-2007 15:51:40.47
Attr PgmName = "EnableSlider"
......@@ -780,6 +1396,17 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'unsignedShort'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!
! @b Object Graph
! @image orm_opc_unsignedshort_og.gif
!*/
Object Opc_UnsignedShort $ClassDef 9 01-MAR-2007 16:56:40.00
Body SysBody 01-MAR-2007 16:50:25.68
Attr Editor = 0
......@@ -791,48 +1418,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_UnsignedShort"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tUInt16.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:51:59.01
Body SysBody 08-MAR-2007 18:22:16.81
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:51:59.01
Body SysBody 08-MAR-2007 18:22:19.92
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:51:59.01
Body SysBody 08-MAR-2007 18:22:23.09
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:51:59.01
Body SysBody 08-MAR-2007 18:22:25.89
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:51:47.00
Body SysBody 22-MAR-2007 15:51:47.00
Attr PgmName = "EnableSlider"
......@@ -845,6 +1506,17 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'unsignedByte'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!
! @b Object Graph
! @image orm_opc_unsignedbyte_og.gif
!*/
Object Opc_UnsignedByte $ClassDef 8 01-MAR-2007 16:57:06.57
Body SysBody 01-MAR-2007 16:50:25.44
Attr Editor = 0
......@@ -856,48 +1528,82 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_UnsignedByte"
Attr NextAix = "_X10"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tUInt8.
!*/
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
!/**
! Property highEU.
! Represents the highest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object HighEU $Attribute 4 05-MAR-2007 13:52:02.66
Body SysBody 08-MAR-2007 18:22:35.13
Attr PgmName = "HighEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowEU.
! Represents the lowest value likely to be obtained in normal
! operation and is intended for such use as automatically scaling
! a bargraph display.
!*/
Object LowEU $Attribute 5 05-MAR-2007 13:52:02.66
Body SysBody 08-MAR-2007 18:22:38.33
Attr PgmName = "LowEU"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property highIR.
! Represents the highest value that can be returned by the
! instrument.
!*/
Object HighIR $Attribute 6 05-MAR-2007 13:52:02.66
Body SysBody 08-MAR-2007 18:22:41.38
Attr PgmName = "HighIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property lowIR.
! Represents the lowest value that can be returned by the
! instrument.
!*/
Object LowIR $Attribute 7 05-MAR-2007 13:52:02.66
Body SysBody 08-MAR-2007 18:22:44.29
Attr PgmName = "LowIR"
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! Property engineeringUnits.
!*/
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
!/**
! Enable slider in object graph.
!*/
Object EnableSlider $Attribute 9 22-MAR-2007 15:51:52.93
Body SysBody 22-MAR-2007 15:51:52.93
Attr PgmName = "EnableSlider"
......@@ -910,6 +1616,14 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'base64Binary'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_Base64Binary $ClassDef 20 01-MAR-2007 17:01:30.50
Body SysBody 01-MAR-2007 17:01:17.11
Attr Editor = 0
......@@ -921,16 +1635,24 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_Base64Binary"
Attr NextAix = "_X4"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as an array of pwr_tInt16.
!*/
Object Value $Attribute 2 01-MAR-2007 17:01:17.11
Body SysBody 01-MAR-2007 17:01:47.78
Attr PgmName = "Value"
Attr TypeRef = "pwrs:Type-$UInt32"
Attr Flags = 2
Attr Elements = 4
Attr TypeRef = "pwrs:Type-$UInt16"
EndBody
EndObject
EndObject
......@@ -939,6 +1661,14 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'dateTime'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_DateTime $ClassDef 7 01-MAR-2007 16:58:17.76
Body SysBody 01-MAR-2007 16:50:25.22
Attr Editor = 0
......@@ -950,12 +1680,18 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_DateTime"
Attr NextAix = "_X4"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tTime.
!*/
Object Value $Attribute 2 01-MAR-2007 16:50:25.22
Body SysBody 01-MAR-2007 16:58:37.27
Attr PgmName = "Value"
......@@ -968,6 +1704,15 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'time'.
! Not yet implemented.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_Time $ClassDef 6 01-MAR-2007 16:58:53.13
Body SysBody 01-MAR-2007 16:50:25.00
Attr Editor = 0
......@@ -997,6 +1742,15 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'date'.
! Not yet implemented.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_Date $ClassDef 5 01-MAR-2007 16:59:12.70
Body SysBody 01-MAR-2007 16:50:24.78
Attr Editor = 0
......@@ -1026,6 +1780,15 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'duration'.
! Not yet implemented.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_Duration $ClassDef 4 01-MAR-2007 16:59:30.41
Body SysBody 01-MAR-2007 16:50:24.50
Attr Editor = 0
......@@ -1055,6 +1818,14 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Group IO_Opc
! Object to browse an OPC item of OPC type 'QName'.
!
! The object reside in an ExternalVolume browsing an OPC server and is
! created dynamically by the OPC client process.
!*/
Object Opc_QName $ClassDef 3 01-MAR-2007 17:00:42.44
Body SysBody 01-MAR-2007 16:50:22.30
Attr Editor = 0
......@@ -1066,12 +1837,18 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_QName"
Attr NextAix = "_X4"
EndBody
!/**
! Description property.
!*/
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
!/**
! Item value, presented as a pwr_tString256.
!*/
Object Value $Attribute 2 01-MAR-2007 16:50:22.30
Body SysBody 01-MAR-2007 17:00:54.92
Attr PgmName = "Value"
......@@ -1084,6 +1861,21 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Summary OPC Server Configuration Object.
! OPC Server Configuration object.
! The object should be placed under the $Node object to configure
! process station as an OPC XML-DA server.
!
! A Web Service will appear with the URI "http://'nodename':'port'"
! where 'nodname' is the name of the process station, and 'port' the
! portnumber specified in the Port attribute.
! An OPC XML-DA client can request information from this URI, but has
! to be granted access first. Clients that have access to the server are
! specified in the ClientAccess list, with ip-address and accesscode
! for each client.
!*/
Object Opc_ServerConfig $ClassDef 21 01-MAR-2007 17:02:45.29
Body SysBody 01-MAR-2007 17:02:25.32
Attr Editor = 0
......@@ -1095,18 +1887,29 @@ Volume Opc $ClassVolume 0.0.250.9
Attr StructName = "Opc_ServerConfig"
Attr NextAix = "_X4"
EndBody
!/**
! Optional description.
!*/
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
!/**
! Port for Web Service.
!*/
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
!/**
! List with authorized clients.
! Clients are identified by ip-address and given the
! specified access (None, ReadOnly or ReadWrite).
!*/
Object ClientAccess $Attribute 1 05-MAR-2007 13:33:32.49
Body SysBody 05-MAR-2007 13:33:35.01
Attr PgmName = "ClientAccess"
......@@ -1121,6 +1924,13 @@ Volume Opc $ClassVolume 0.0.250.9
EndBody
EndObject
EndObject
!/**
! @Version 1.0
! @Summary OPC Server State object.
! The OPC Server State object displays information of a OPC
! connection in an OP client. The object as first object in the
! Extern volume for the OPC connection.
!*/
Object Opc_ServerState $ClassDef 22 02-MAR-2007 14:49:50.99
Body SysBody 02-MAR-2007 14:49:26.55
Attr Editor = 0
......@@ -1130,38 +1940,71 @@ Volume Opc $ClassVolume 0.0.250.9
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"
Attr NextAix = "_X9"
EndBody
!/**
! OPC server Web Service URI.
!*/
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
!/**
! OPC server vendor info.
!*/
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
!/**
! OPC server product version.
!*/
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
!/**
! Start time for OPC server.
!*/
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
!/**
! OPC server state.
!*/
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
Object RequestCnt $Attribute 6 26-MAR-2007 09:10:55.79
Body SysBody 26-MAR-2007 09:11:10.62
Attr PgmName = "RequestCnt"
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
Object ErrorRequestCnt $Attribute 7 26-MAR-2007 09:11:57.44
Body SysBody 26-MAR-2007 09:12:01.61
Attr PgmName = "ErrorRequestCnt"
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
Object LastError $Attribute 8 26-MAR-2007 09:12:35.90
Body SysBody 26-MAR-2007 09:13:07.43
Attr PgmName = "LastError"
Attr TypeRef = "Opc:Type-Opc_ResultCodeEnum"
EndBody
EndObject
EndObject
Object Template Opc_ServerState 2153480192 01-JAN-1970 01:00:00.00
Body RtBody 01-JAN-1970 01:00:00.00
......
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