Exemple #1
0
        /// <summary>
        /// Returns Meta data of the parameter.
        /// </summary>
        /// <param name="address">Device Address. Use null to use the DefaultDeviceAddress defined on MeComQuerySet.</param>
        /// <param name="parameterId">Device Parameter ID.</param>
        /// <param name="instance">Parameter Instance. (usually 1)</param>
        /// <returns>Returned meta data object.</returns>
        /// <exception cref="ComCommandException">when the command fails. Check the inner exception for details.</exception>
        public ParMetaData GetMetaData(byte?address, UInt16 parameterId, byte instance)
        {
            ParMetaData parMetaData = new ParMetaData();

            try
            {
                MeComPacket txFrame = new MeComPacket('#', address);
                MeComVarConvert.AddString(txFrame.Payload, "?VM");
                MeComVarConvert.AddUint16(txFrame.Payload, parameterId);
                MeComVarConvert.AddUint8(txFrame.Payload, instance);
                MeComPacket rxFrame = meQuerySet.Query(txFrame);

                parMetaData.Type            = (MeParType)MeComVarConvert.ReadUint8(rxFrame.Payload);
                parMetaData.Flags           = (MeParFlags)MeComVarConvert.ReadUint8(rxFrame.Payload);
                parMetaData.NrOfInst        = MeComVarConvert.ReadUint8(rxFrame.Payload);
                parMetaData.MaxNrOfElements = MeComVarConvert.ReadUint32(rxFrame.Payload);

                switch (parMetaData.Type)
                {
                case MeParType.FLOAT32:
                    parMetaData.Min   = MeComVarConvert.ReadFloat32(rxFrame.Payload);
                    parMetaData.Max   = MeComVarConvert.ReadFloat32(rxFrame.Payload);
                    parMetaData.Value = MeComVarConvert.ReadFloat32(rxFrame.Payload);
                    break;

                case MeParType.INT32:
                    parMetaData.Min   = MeComVarConvert.ReadInt32(rxFrame.Payload);
                    parMetaData.Max   = MeComVarConvert.ReadInt32(rxFrame.Payload);
                    parMetaData.Value = MeComVarConvert.ReadInt32(rxFrame.Payload);
                    break;

                case MeParType.DOUBLE64:
                    parMetaData.Min   = MeComVarConvert.ReadDouble64(rxFrame.Payload);
                    parMetaData.Max   = MeComVarConvert.ReadDouble64(rxFrame.Payload);
                    parMetaData.Value = MeComVarConvert.ReadDouble64(rxFrame.Payload);
                    break;

                case MeParType.LATIN1:
                case MeParType.BYTE:
                    parMetaData.Min   = MeComVarConvert.ReadUint8(rxFrame.Payload);
                    parMetaData.Max   = MeComVarConvert.ReadUint8(rxFrame.Payload);
                    parMetaData.Value = null;
                    break;

                default:
                    throw new ArgumentOutOfRangeException("Unknown Type received. Received value: " + parMetaData.Type);
                }
                return(parMetaData);
            }
            catch (Exception Ex)
            {
                throw new ComCommandException(String.Format("Get Meta Data failed: Address: {0}; ID: {1}; Inst: {2}; Detail: {3}", address, parameterId, instance, Ex.Message), Ex);
            }
        }