Issue 4752: Management of events appearing in a scan cycle
Issue 4754: Loss of data due to failover
Issue 4755: Duplicate use of ERROR_SUCCESS
Issue 4756: Separate Data Access and A&E servers
Issue 4757: Quality codes
Issue 4758: Support for chinese tokens needed
Issue 4759: The ItemError struct cant report detailed errors
Issue 4760: Abstract interface spoil interoperability
Issue 4761: Spelling error READ_AND_WRITABLE
Issue 4762: Struct sizes on Risc machines
Issue 4763: The member Node.description is lacking
Issue 4764: Type interface does not use the Node pattern
Issue 4765: Misleading parameter name in find_by_schema()
Issue 4766: Server internal errors
Issue 4767: Group entry management is inefficient
Issue 4768: validate_entries() return unnessesary information
Issue 4769: Group::Manager::clone_to_public return Manager
Issue 4770: Server knowledge of leaf Nodes
Issue 4771: Replace ULongLong with CORBA unsigned long long
Issue 4772: The views are reported as a sequence of strings
Issue 4773: Relation to 61970 need revision
Issue 4774: Description of the property_values member
Issue 4775: No usecase for Alarms & Events
Issue 4776: Event history
Issue 4777: Enabled/disabled conditions
Issue 4778: Blob data type
Issue 4779: Improved mapping between OPC and DAIS
Issue 4780: OnEvent shalle be OneEvent -- rename it
Issue 4781: Ambigous identification of items
Issue 5254: ConditionEvent.cookie is a bad name
Issue 5255: Improve documentation on views and flat data access
Issue 5256: Support HDAIS in DAIS
Issue 5257: Improved data type compatibility DAIS OPC
Issue 5258: Add support for no data source
Issue 5259: Add filter to Node::Home
Issue 5260: Server authority check
Issue 5261: Filter specification language
Issue 5262: Describe mapping to OPC
Issue 5263: OPC DA version 3
Issue 5264: Imrove description of condition_logic in A&E
Issue 5265: The difference between alarms and events is unclear
Issue 4752: Management of events appearing in a scan cycle (dais-ftf)
Click here for this issue's archive.
Source: ABB Power Technologies, Power Automation & Substat (Mr. Lars-Ola Osterlund, lars-ola.g.osterlund(at)se.abb.com)
Nature: Uncategorized Issue
Severity:
Summary:
A descrete value may change multiple times within a scan cycle before it is reported to clients. Clients may want to get all the changes but still at a low scan cycle to optimize performance
A server shall keep a history of changes and per group report all changes not reported since the last report for that group. A quality of service measure is included in the DAIS::ServerState to tell if a server support this functionality. The quality of service shall also indicate the maximum number of changes that can be kept in the history per item. An ItemError indicating more changes than supported by the history is added.
A descrete value may change multiple times within a scan cycle before it is reported to clients. Clients may want to get all the changes but still at a low scan cycle to optimize performance
A server shall keep a history of changes and per group report all changes not reported since the last report for that group. A quality of service measure is included in the DAIS::ServerState to tell if a server support this functionality. The quality of service shall also indicate the maximum number of changes that can be kept in the history per item. An ItemError indicating more changes than supported by the history is added
const Error ERROR_SUCCESS = 0; is already in use by Microsoft. Name has to be replaced
Suggestion; const Error ERROR_DAISOK = 0 Implemented in DAISCommon.idl
How to implement only a Data Access server without A&E?
Separate the DAIS server object into a Data Access and A&E server objects
Currently there is no space for user specific quality codes.The mapping between OPC and IEC61850 quality codes shall be made explicit in the DAIS spec.
Add a new 32 bit member UserQuality in DAIS::Quality.Refer to appendix for the mapping.Remove the DAIS::ExtendedQuality.Put the EXQ_SOURCE and EXQ_TEST from the appendix in the unused OPCQuality byte.Implemented in DAISCommon.idl. 1) Add a new 32 bit member UserQuality in DAIS::Quality. 2) DAIS to IEC61850 quality code mapping. Remove the DAIS::ExtendedQuality. Put the EXQ_SOURCE and EXQ_TEST from the appendix in the unused OPCQuality byte. This mapping below is based on the IEC61850-7-3 draft version 57/519/CDV from 2001-03-16. DAIS quality DAIS detailed quality IEC 61850 quality IEC 61850 detail-quality OPC_QUALITY_GOOD <none> validity(Enum) = good <none> OPC_QUALITY_GOOD OPC_QUALITY_LOCAL_OVERRIDE (use EXQ_SOURCE instead) <refer to source> EXQ_SOURCE_PROCESS source(Enum) = process EXQ_SOURCE_PRIMARY_SUBSTITUTED (manually) source(Enum) = substituted EXQ_SOURCE_INHERITED_SUBSTITUTED (manually or by application) source(Enum) = substituted EXQ_SOURCE_CORRECTED (by application, e.g. SE) source(Enum) = substituted EXQ_SOURCE_DEFAULTED source(Enum) = defaulted OPC_QUALITY_BAD OPC_QUALITY_CONFIG_ERROR validity(Enum) = invalid failure OPC_QUALITY_BAD OPC_QUALITY_NOT_CONNECTED validity(Enum) = invalid failure OPC_QUALITY_BAD OPC_QUALITY_DEVICE_FAILURE validity(Enum) = invalid failure OPC_QUALITY_BAD OPC_QUALITY_SENSOR_FAILURE validity(Enum) = invalid overflow OPC_QUALITY_BAD OPC_QUALITY_LAST_KNOWN validity(Enum) = invalid oldData OPC_QUALITY_BAD OPC_QUALITY_COMM_FAILURE validity(Enum) = invalid failure OPC_QUALITY_BAD OPC_QUALITY_OUT_OF_SERVICE validity(Enum) = invalid oldData OPC_QUALITY_UNCERTAIN OPC_QUALITY_LAST_USABLE validity(Enum) = questionable oldData OPC_QUALITY_UNCERTAIN OPC_QUALITY_SENSOR_CAL validity(Enum) = questionable badReference OPC_QUALITY_UNCERTAIN OPC_QUALITY_EGU_EXCEEDED validity(Enum) = questionable outOfRange OPC_QUALITY_UNCERTAIN OPC_QUALITY_SUB_NORMAL validity(Enum) = questionable inconsistent OPC_QUALITY_UNCERTAIN DAIS_QUALITY_OCILLATORY validity(Enum) = questionable ocillatory EXQ_TEST test(Boolean) EXQ_OPERATOR_BLOCKED operatorBlocked(Boolean) (oldData shall be set when true) The following table describes the quality in more detail. DAIS quality DAIS detailed quality Description OPC_QUALITY_GOOD <none> Value is good. OPC_QUALITY_GOOD OPC_QUALITY_LOCAL_OVERRIDE A problem with OPC is a locally and bad value can not be reported. Such a bad value might appear if a local operator manully enter, e.g. a switch position, that not correspond to the actual value. Use EXQ_SOURCE_ to report manual entries. EXQ_SOURCE_PROCESS The value shall be provided by an input function from the process I/O or being calculated from some application function. EXQ_SOURCE_PRIMARY_SUBSTITUTED The value has been manually substiuted. EXQ_SOURCE_INHERITED_SUBSTITUTED The value has inherited the manually substituion from the source where it was picked up. One use case is when the value originate in a local control system and is collected by a central control system. If substituted in the local control system it will be indicated EXQ_SOURCE_PRIMARY_SUBSTITUTED locally and EXQ_SOURCE_INHERITED_SUBSTITUTED centrally. The value may be manually updated also in the central system and will then be indicated EXQ_SOURCE_PRIMARY_SUBSTITUTED centrally. Another use case is a calculated value where one of the input values is EXQ_SOURCE_PRIMARY_SUBSTITUTED. This shall result in the clalculated result value to be EXQ_SOURCE_INHERITED_SUBSTITUTED. EXQ_SOURCE_CORRECTED An alternate and more acurate value has been calculated by some application, e.g. a State Estimator. If this value has been used to correct the original value it shall be indicated EXQ_SOURCE_CORRECTED. EXQ_SOURCE_DEFAULTED If a default value is used it shall be indicated by EXQ_SOURCE_DEFAULTED OPC_QUALITY_BAD <none> The value is bad but no specific reason is known OPC_QUALITY_BAD OPC_QUALITY_CONFIG_ERROR There is some server specific problem with the configuration. For example the item is question has been deleted from the configuration. OPC_QUALITY_BAD OPC_QUALITY_NOT_CONNECTED The input is required to be logically connected to something but is not. This quality may reflect that no value is available at this time, for reasons like the value may have not been provided by the data source. OPC_QUALITY_BAD OPC_QUALITY_DEVICE_FAILURE A device failure has been detected OPC_QUALITY_BAD OPC_QUALITY_SENSOR_FAILURE A sensor overflow failure had been detected (the 'Limits' field can provide additional diagnostic information in some situations.). OPC_QUALITY_BAD OPC_QUALITY_LAST_KNOWN The updating has stopped but there is an old value available. The time stamp gives the age. OPC_QUALITY_BAD OPC_QUALITY_COMM_FAILURE Communications have failed. There is no last known value available. OPC_QUALITY_BAD OPC_QUALITY_OUT_OF_SERVICE The block is off scan or otherwise locked This quality is also used when the active state of the item or the group containing the item is InActive. OPC_QUALITY_UNCERTAIN OPC_QUALITY_LAST_USABLE The value is old. The time stamp gives the age. OPC_QUALITY_UNCERTAIN OPC_QUALITY_SENSOR_CAL Either the value has 'pegged' at one of the sensor limits (in which case the limit field should be set to 1 or 2) or the sensor is otherwise known to be out of calibration via some form of internal diagnostics (in which case the limit field should be 0). OPC_QUALITY_UNCERTAIN OPC_QUALITY_EGU_EXCEEDED The returned value is outside the limits defined for this parameter. Note that in this case (per the Fieldbus Specification) the 'Limits' field indicates which limit has been exceeded but does NOT necessarily imply that the value cannot move farther out of range. OPC_QUALITY_UNCERTAIN OPC_QUALITY_SUB_NORMAL The value is derived from multiple sources and has less than the required number of Good sources. OPC_QUALITY_UNCERTAIN DAIS_QUALITY_OCILLATORY To prevent some overload for event driven communication channels it is sensible to detect and suppress oscillating (fast changing) binary inputs. If a signal changes in a defined time (tosc) twice in the same direction (from 0 to 1 or from 1 to 0) then oscillation shall be detected and the detail quality identifier "oscillatory" shall be set. If a configured numbers of transient changes is detected, they shall be passed by. In this time the validity status "questionable" shall be set. If after this defined numbers of changes the signal is still in the oscillating state the value shall be set either to the opposite state of the previous stable value or to a defined default value. In this case the validity status "questionable" shall be reset and "invalid" shall be set as long as the signal is oscillating. If it is configured such that no transient changes should be passed by then the validity status "invalid" shall be set immediately in addition to the detail quality identifier "oscillatory" (used for status information only). EXQ_TEST Test shall be an additional identifier that may be used to classify a value being a test value and not to be used for operational purpose. The processing of the test quality in the client is a local issue. The indicator is completely independent from the other quality descriptors. The propagation through different hierarchical levels follows the concepts of source. EXQ_OPERATOR_BLOCKED This identifier shall be set if further update of the value has been blocked by an operator. The value shall be the information that was acquired before blocking. If this identifier is set then the identifier oldData of detail-qual shall be set too. EXQ_TIMESTAMP_ACCURACY_MASK This is the accuracy for the time stamp and can have the following valuesEXQ_TS_ACC_10_MSEC better than 10 millisecEXQ_TS_ACC_100_MSEC, better than 100 msecEXQ_TS_ACC_SECOND, in the range of secondsEXQ_TS_ACC_BAD_TIME, bad time stamp
Replace the SimpleValue string data type with wstring datatype.
Implemented in several files
Extend the ItemError struct with a reason string in the same way as for exceptions.
Implemented in DAISCommon.idl
Some ORBs (e.g. TAU) does not support the keword "abstract".
Remove Abstract from interface definitions, e.g. Inspection in DAISServer.idlSession in DAISSession.idlHome in DAISNode.idl
Change to READ_AND_WRITEABLE
Implemented in DAISCommon.idl
If struct members of different sizes are mixed memory usage on Risc machines will increase due to alignment padding. Put all members of the same type together in the structs. Suggested orderingsIO::ItemStateSimpleValue, ItemID, DateTime, Quality, ClientHandleGroupEntry::DescriptionItemID, ClientHandle, SimpleValueType, active, pathname, access_path
Put all members of the same type together in the structs. Suggested orderings IO::ItemState SimpleValue, ItemID, DateTime, Quality, ClientHandle GroupEntry::Description ItemID, ClientHandle, SimpleValueType, active, pathname, access_path
Add it in DAISNode.idl
The type herarchy is currently implemented as a reference to childs by the Type::Description.aggregated_types member. In all other browse interfaces it is implemented as a single parent reference and the method find_by_parent().
Replace Type::Description.aggregated_types with Type::Description.parent and add a find_by_parent() method. The pathname is not appropriate and no pathnames are supported -> do not inherit Node.
The schema ResourceID is called node. Rename to schema
It is suggested to have a new error code for reporting of internal server errorsconst Error ERROR_INTERNAL_SERVER = 8;
Add a new error code for reporting of internal server errors. const Error ERROR_INTERNAL_SERVER = 8
For large groups the memory consumption and LAN traffic is unnessesarily high because the current structs convey lots of unused data.
The basically corresponds to making the API more OPC like, refer to number 28
The validate_entries() return all OK entries. A client is interested mainly in the erronous ones and changes to the blob. Add an in parameter telling if the client only want the changed or updated items reported, i.e. the validate_entries() return an empty sequence for the OK entries.
The public group is not allowed to be manipulated and hence shall not be returned. Group::Manager::clone_to_public shall return a Group::PublicGroupDescription. Implemented in DAISGroup.idl
Group::Manager::clone_to_public() shall return a Group::PublicGroupDescription.
A server knows when leaf nodes has been reached. A possible performance optimisation is to add information on this in the Node::Description struct. Add a short leaf_node member telling the number of childs.
Replace ULongLong with CORBA unsigned long long
Make sure to use the latest version of DAFIdentifiers and DAFDescriptions
in Server::find_views(). This does not follow the pattern to use a struct to report information on objects. Replace the string with a sequence of structs with a name and a ResourceID?
The complexity of adding a view browse interface does not give gains outweighing the increased complexity.
Change section 2.5 in the specification and describe the mapping in IEC 61970-403 and -404.
The mapping will be described in the IEC documents rather than in the DAIS specification. No changes to the DAIS specification.
The SourceCondition::Description.property_values and IO::SimpleEvent.property_values documentation must be improved. It is unclear what instance the properties relate to. Describe that the properties relate to the Reason. Do this be making the Reason a Type, i.e. let Reason inherit Type and remove the association between Property and Reason.
Add description of usecase in the specification
It is not clear from the specification how the history of events is managed, e.g. how the server store events and make them available for future access.
The method refresh_with_history() is renamed to async_read_history() following the pattern from Data Access and the end_time in parameter is replaced by number of events to give the client control over number of returned events.
The methods act on all Conditions not a single. Rename Source::Home::enable_condition to Source::Home::enable_conditions
Rename Source::Home::enable_condition to Source::Home::enable_conditions
For the HDAIS RFP a requirement to have support for blob data has emerged. Add a blob data type and include it in the SimpleValue. The blob shall have the members- type specifier (.avi, .jpg, .gif, .wav etc.)- sequence<octet>
Add a blob data type and include it in the SimpleValue. The blob shall have the members - type specifier (.avi, .jpg, .gif, .wav etc.) - data This change shall be implemented in the DAF specification within the scope of the DAIS FTF. The data type for the Blob data shall be a CORBA any. The type specifier member shall be according to the MIME standard. Descriptive text shall be added to the DAF spec.
The following improvemnts are suggested- the COM iterator requires new methods- introduce server handles to enable simple bridging to OPC, improve perfromace and memory consumption in server.- introduce the OPC blob to enable simple bridging to OPC, improve perfromace and memory consumption in server. Add methods reset() and clone() to the Iterator.Replace ItemID with OPCHandle in all methods but create and validate entries.Add the blob.For more details se discussion below.
Add methods reset() and clone() to Iterators. Replace ItemID with OPCHandle in all methods but create and validate entries. Re-introduce the ServerItemHandle replacing the ItemID in read and write calls. The new error code ERROR_INVALID_HANDLE is already defined by Microsoft and a new name must be created for this error code, i.e. ERROR_INVALID_DAIS_HANDLE.
OnEvent shalle be OneEvent -- rename it
Items are identified by ItemID and pathname in the GroupEntry::Description. It is not clear wich the client shall use and indicate wich of them that are valid to the server. Replace the two members by a union so that only one of them can be specified
ConditionEvent.cookie is a bad nameas it does not say anything about the meaning. Rename to ConditionEvent.event_id
A DAIS server may support multiple hierarchical organizations. Each hierarchy will then have it's own path names that are valid only within that view.Currently Item::find_by_type() and Node::find_by_type support retreival of flattened out items. Make this clearer in the spec. Add documentation describing how a flat namespace is implemented.
Descriptions added in 3.1.7.2 and 4.2.4.2 at find methods
The ServerItemIdentification union will be used also by HDAIS.The Quality for HDAIS is an unsigned long. Move the ServerItemIdentification union from DAISGroupEntry.idl to DAISCommon.idlTo make a transparent DAIS/HDAIS to OPC bridge the simplest solution is to extend the DAIS quality from a short to a long.
ServerItemIdentification union moved from DAISGroupEntry.idl to DAISCommon.idlOPCQuality changed to an unsigned long in DAISCommon.idl. Move the ServerItemIdentification union from DAISGroupEntry.idl to DAISCommon.idl To make a transparent DAIS/HDAIS to OPC bridge the simplest solution is to extend the DAIS quality from a short to a long.
Improved data type compatibility DAIS OPCOPC support the data type VARIANT. A VARIANT can hold arrays simple data types as well as anys. OPC implementations use arrays of simple types but (probably) not anys. Support sequences of simple values in a SimpleValue. This change shall be implemented in the DAF specification.Descriptive text shall be added to the DAF spec.
SimpleValue extended with sequences of all simple types in the DAF update draft utilities/02-04-01. Support sequences of simple values in a SimpleValue. This change shall be implemented in the DAF specification. Descriptive text shall be added to the DAF spec.
Add support for no data sourceData points that have no data source may exist. Add a new source defiontion to tell this. const OPCQuality EXQ_SOURCE_NONE = 0x0000;
Updated in DAISCommon.idl
Add filter to Node::HomeOPC support to do filtering on branch nodes for Data Acccess (DA). This is useful for finding nodes with pathnames matching the filter criteria pattern. Add the filter_criteria string to find_by_type and find_by_parent
Changed in DAISNode.idlA new section 3.1.11 is added to describe the filter
Server authority checkA DAIS server need to check the user authority when a read, write or acknowledge operation is made. A server shall use middleware and/or operating system services to get information about the user. Add a discussion of this to the DAIS spec and the relation to the OPC security spec
A server shall use middleware and/or operating system services to get information about the user. Add a discussion of this to the DAIS spec and the relation to the OPC security spec.
Filter specification languageThe language for specifying filters is missing. Add a filter specification language.
Refer to the new section 3.1.11
Mapping to OPCThere is a need to describe how DAIS maps to OPC. Describe how the mapping from DAIS to OPC is made.
Descriptions added in 3.1.9.1 3.1.10.1 4.2.4.1 5.1 5.2.4.1 5.2.5.1 5.2.6.1 5.2.7.1 5.2.8.1 5.2.9.1 5.2.10.1
OPC DA version 3There is a new version 3 of OPC DA. Investigate how this effect the DAIS DA can be updated to accomodate OPC DA 3.0. Provide an investigation on this one
This issue shall be re-opened as a DAIS RTF once OPC DA 3 is stable. The OPC DA 3 specifies a simple IO interface without groups. This interface is included in DAIS.
Imrove description of condition_logic in A&E. Investigate if the currently suggested grammar can be replaced by the use of a subset from the XPath specification
New section 5.2.7.3 added and reference to added in 5.2.7.2. Investigate if the currently suggested grammar can be replaced by the use of a subset from the XPath specification. Add a description how to use XPath to the condition_logic and change the FilterSpec to take XPath expression. The constant const Filter FILTER_BY_SOURCE_WITH_XPATH = 0x0020; is added to tell a client if this capability is supported by a server. Filtering on Types is added to the AlarmsAndEvents::Subscription::FilterSpec to support the capability to treat source types in DAIS. The constant const Filter FILTER_BY_SOURCE_TYPE = 0x0040; is added to tell a client if this capability is supported by a server. The AlarmsAndEnvets::Subscription::FilteringIdent has the same meaning as ServerItemIdentification. Replace AlarmsAndEnvets::Subscription::FilteringIdent with ServerItemIdentification.
The difference between alarms and events is unclear. Improve description of alarms and events section 5.
Section 5 intro and 5.1 updated