A base class for classes that implement an OPC COM specification.
Inheritance: ComProxy
        /// <summary>
        /// Gets the local data value.
        /// </summary>
        /// <param name="remoteValue">The remote value.</param>
        /// <returns>The local data value.</returns>
        public DaValue GetLocalDataValue(DataValue remoteValue)
        {
            DaValue localValue = new DaValue();

            localValue.Error = ComDaProxy.MapReadStatusToErrorCode(remoteValue.StatusCode);

            if (localValue.Error >= 0)
            {
                localValue.HdaQuality = ComUtils.GetHdaQualityCode(remoteValue.StatusCode);
                localValue.Timestamp  = remoteValue.SourceTimestamp;
                localValue.Error      = ResultIds.S_OK;

                if (localValue.Timestamp == DateTime.MinValue)
                {
                    localValue.Timestamp = remoteValue.ServerTimestamp;
                }

                try
                {
                    localValue.Value = GetLocalValue(remoteValue.WrappedValue);
                }
                catch
                {
                    localValue.Error = ResultIds.E_BADTYPE;
                }
            }

            return(localValue);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Reads the attribute values from the server.
        /// </summary>
        /// <param name="valuesToWrite">The values to write.</param>
        /// <returns>The results.</returns>
        public int[] Write(WriteValueCollection valuesToWrite)
        {
            TraceState("Write", valuesToWrite.Count);

            // check for valid session.
            Session session = m_session;

            if (session == null)
            {
                throw ComUtils.CreateComException(ResultIds.E_FAIL);
            }

            int masterError = ResultIds.E_FAIL;

            int[] errors = new int[valuesToWrite.Count];

            if (session != null)
            {
                try
                {
                    // write the values.
                    StatusCodeCollection     results         = null;
                    DiagnosticInfoCollection diagnosticInfos = null;

                    session.Write(
                        null,
                        valuesToWrite,
                        out results,
                        out diagnosticInfos);

                    ClientBase.ValidateResponse(results, valuesToWrite);
                    ClientBase.ValidateDiagnosticInfos(diagnosticInfos, valuesToWrite);

                    // convert the response.
                    for (int ii = 0; ii < results.Count; ii++)
                    {
                        errors[ii] = ComDaProxy.MapWriteStatusToErrorCode(valuesToWrite[ii].Value, results[ii]);
                    }

                    // return the results.
                    return(errors);
                }
                catch (Exception e)
                {
                    masterError = ComUtils.GetErrorCode(e, ResultIds.E_FAIL);
                }
            }

            // report any unexpected errors.
            for (int ii = 0; ii < errors.Length; ii++)
            {
                errors[ii] = masterError;
            }

            return(errors);
        }