object IGXDLMSBase.GetValue(GXDLMSSettings settings, ValueEventArgs e) { if (e.Index == 1) { return(GXCommon.LogicalNameToBytes(LogicalName)); } if (e.Index == 2) { //If client set new value. if (!settings.IsServer && Scaler != 1 && Value != null) { DataType dt = base.GetDataType(2); if (dt == DataType.None && Value != null) { dt = GXCommon.GetDLMSDataType(Value.GetType()); //If user has set initial value. if (dt == DataType.String) { dt = DataType.None; } } object tmp; tmp = Convert.ToDouble(Value) / Scaler; if (dt != DataType.None) { tmp = Convert.ChangeType(tmp, GXCommon.GetDataType(dt)); } return(tmp); } return(Value); } if (e.Index == 3) { GXByteBuffer data = new GXByteBuffer(); data.SetUInt8((byte)DataType.Structure); data.SetUInt8(2); GXCommon.SetData(settings, data, DataType.Int8, scaler); GXCommon.SetData(settings, data, DataType.Enum, Unit); return(data.Array()); } if (e.Index == 4) { return(Status); } if (e.Index == 5) { return(CaptureTime); } e.Error = ErrorCode.ReadWriteDenied; return(null); }
/// <summary> /// Change value using DLMS data type. /// </summary> /// <param name="value">Value to convert.</param> /// <param name="type">DLMS data type.</param> /// <param name="isHex">Is value given as hex.</param> /// <returns>Converted value.</returns> public static object ChangeFromDLMSType(object value, DataType type, bool isHex) { Type t = GXCommon.GetDataType(type); if (isHex && value is string) { var dict = new Dictionary <Type, Func <string, object> > { { typeof(byte), s => byte.Parse(s, NumberStyles.AllowHexSpecifier) }, { typeof(sbyte), s => sbyte.Parse(s, NumberStyles.AllowHexSpecifier) }, { typeof(short), s => short.Parse(s, NumberStyles.AllowHexSpecifier) }, { typeof(ushort), s => ushort.Parse(s, NumberStyles.AllowHexSpecifier) }, { typeof(int), s => int.Parse(s, NumberStyles.AllowHexSpecifier) }, { typeof(uint), s => uint.Parse(s, NumberStyles.AllowHexSpecifier) }, { typeof(long), s => long.Parse(s, NumberStyles.AllowHexSpecifier) }, { typeof(ulong), s => ulong.Parse(s, NumberStyles.AllowHexSpecifier) }, }; if (dict.ContainsKey(t)) { return(dict[t]((string)value)); } } return(Convert.ChangeType(value, t)); }
object IGXDLMSBase.GetValue(GXDLMSSettings settings, ValueEventArgs e) { if (e.Index == 1) { return(GXCommon.LogicalNameToBytes(LogicalName)); } if (e.Index == 2) { //If client set new value. if (!settings.IsServer && Scaler != 1 && CurrentAverageValue != null) { Type type = null; if (CurrentAverageValue != null) { type = CurrentAverageValue.GetType(); } object tmp; tmp = Convert.ToDouble(CurrentAverageValue) / Scaler; if (type != null) { tmp = Convert.ChangeType(tmp, type); } return(tmp); } return(CurrentAverageValue); } if (e.Index == 3) { //If client set new value. if (!settings.IsServer && Scaler != 1 && LastAverageValue != null) { DataType dt = base.GetDataType(3); if (dt == DataType.None && LastAverageValue != null) { dt = GXCommon.GetDLMSDataType(LastAverageValue.GetType()); } object tmp; tmp = Convert.ToDouble(LastAverageValue) / Scaler; if (dt != DataType.None) { tmp = Convert.ChangeType(tmp, GXCommon.GetDataType(dt)); } return(tmp); } return(LastAverageValue); } if (e.Index == 4) { GXByteBuffer data = new GXByteBuffer(); data.SetUInt8((byte)DataType.Structure); data.SetUInt8(2); GXCommon.SetData(settings, data, DataType.Int8, scaler); GXCommon.SetData(settings, data, DataType.Enum, Unit); return(data.Array()); } if (e.Index == 5) { return(Status); } if (e.Index == 6) { return(CaptureTime); } if (e.Index == 7) { return(StartTimeCurrent); } if (e.Index == 8) { return(Period); } if (e.Index == 9) { return(NumberOfPeriods); } e.Error = ErrorCode.ReadWriteDenied; return(null); }