/// <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); } }