## 6.4.6 FetchTransferResultData Method

The TransferToDevice and TransferFromDevice Methods execute asynchronously after sending a response to the Client. Execution status and execution results are collected during execution and can be retrieved using the FetchTransferResultData Method. The TransferID is used as identifier to retrieve the data.

The Client is assumed to fetch the result data in a timely manner. However, because of the asynchronous execution and the possibility of data loss due to transmission errors to the Client, the Server shall wait some time (some minutes) before deleting data that have not been acknowledged. This should be even beyond Session termination, i.e. Clients that have to re-establish a Session after an error may try to retrieve missing result data.

Result data will be deleted with each new transfer request for the same Device.

FetchTransferResultData is used to request the execution status and a set of result data. If called before the transfer is finished it will return only partial data. The amount of data returned may be further limited if it would be too large. “Too large” in this context means that the Server is not able to return a larger response or that the number of results to return exceeds the maximum number of results that was specified by the Client when calling this Method.

Each result returned to the Client is assigned a sequence number. The Client acknowledges that it received the result by passing the sequence number in the new call to this Method. The Server can delete the acknowledged result and will return the next result set with a new sequence number.

Clients shall not call the Method before the previous one returned. If it returns with an error (e.g. Bad_Timeout), the Client can call the FetchTransferResultData with a sequence number 0. In this case the Server will resend the last result set.

The Server will return Bad_NothingToDo in the Method-specific StatusCode of the Call Service if the transfer is finished and no further result data are available.

The signature of this Method is specified below. Table 49 and Table 50 specify the arguments and AddressSpace representation, respectively.

Signature

FetchTransferResultData(
[in]  Int32                 TransferID,
[in]  Int32                 SequenceNumber,
[in]  Int32                 MaxParameterResultsToReturn,
[in]  Boolean               OmitGoodResults,
[out] FetchResultType       FetchResultData);


Table 49 – FetchTransferResultData Method arguments

Argument Description
TransferID Transfer Identifier returned from TransferToDevice or TransferFromDevice.
SequenceNumber    The sequence number being acknowledged. The Server may delete the result set with this sequence number.“0” is used in the first call after initialising a transfer and also if the previous call of FetchTransferResultData failed.
MaxParameterResultsToReturn    The number of Parameters in TransferResult.ParameterDefs that the Client wants the Server to return in the response. The Server is allowed to further limit the response, but shall not exceed this limit.A value of 0 indicates that the Client is imposing no limitation.
OmitGoodResults If TRUE, the Server will omit data for Parameters which have been correctly transferred. Note that this causes all good results to be released.
FetchResultData    Two subtypes are possible:   * TransferResultError Type is returned if the transfer failed completely* TransferResultData Type is returned if the transfer was performed. Status information is returned for each transferred Parameter.

Table 50 – FetchTransferResultData Method AddressSpace definition

Attribute Value
BrowseName FetchTransferResultData
References NodeClass BrowseName DataType TypeDefinition ModellingRule
HasProperty Variable InputArguments Argument[] PropertyType Mandatory
HasProperty Variable OutputArguments Argument[] PropertyType Mandatory

The FetchResultDataType is an abstract type. It is the base DataType for concrete result types of the FetchTransferResultData. Its elements are defined in Table 51.

Table 51 – FetchResultDataType structure

Attribute Value
BrowseName FetchResultDataType
IsAbstract True
Subtype of Structure defined in OPC 10000-3
References NodeClass BrowseName DataType
HasSubtype DataType TransferResultErrorDataType Defined in Table 52.
HasSubtype DataType TransferResultDataDataType Defined in Table 53.

The TransferResultErrorDataType is a subtype of the FetchResultDataType and represents an error result. It is defined in Table 52.

Table 52 – TransferResultError DataType structure

Name Type Description
TransferResultErrorDataType Structure This structure is returned in case of errors. No result data are returned. Further calls with the same TransferID are not possible.
status             Int32    -1 – Invalid TransferID: The Id is unknown. Possible reason: all results have been fetched or the result may have been deleted.   -2 – Transfer aborted: The transfer operation was aborted; no results exist.   -3 – DeviceError: An error in the device or the communication to the Device occurred. “diagnostics” may contain device- or protocol-specific error information.-4 – UnknownFailure: The transfer failed. “diagnostics” may contain Device- or Protocol-specific error information.
diagnostics             DiagnosticInfo Diagnostic information. This parameter is empty if diagnostics information was not requested in the request header or if no diagnostic information was encountered in processing of the request. The DiagnosticInfo type is defined in OPC 10000-4.

The TransferResultData DataType is a subtype of the FetchResultDataType and includes parameter-results from the transfer operation. It is defined in Table 53.

Table 53 – TransferResultData DataType structure

Name Type Description
TransferResultDataDataType Structure A set of results from the transfer operation.
sequenceNumber Int32 The sequence number of this result set.
endOfResults Boolean    TRUE – all result data have been fetched. Additional FetchTransferResultData calls with the same TransferID will return a FetchTransferError with status=InvalidTransferID.FALSE – further result data shall be expected.
parameterDefs    ParameterResultDataType [] Specific value for each Parameter that has been transferred. If OmitGoodResults is TRUE, parameterDefs will only contain Parameters which have not been transferred correctly.
NodePath QualifiedName[] List of BrowseNames that represent the relative path from the Device Object to the Parameter following hierarchical references. The Client may use these names for TranslateBrowsePathsToNodeIds to retrieve the Parameter NodeId for the online or the offline representation.
statusCode StatusCode OPC UA StatusCode as defined in OPC 10000-4 and in OPC 10000-8.
diagnostics DiagnosticInfo Diagnostic information. This parameter is empty if diagnostics information was not requested in the request header or if no diagnostic information was encountered in processing of the request. The DiagnosticInfo type is defined in OPC 10000-4.