void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e) { switch (e.Index) { case 1: LogicalName = GXCommon.ToLogicalName(e.Value); break; case 2: DataType dt = GetDataType(2); if (!e.User && e.Value != null && (dt == DataType.None || dt == DataType.DateTime || dt == DataType.String)) { DataType dt2 = GXCommon.GetDLMSDataType(e.Value.GetType()); if (dt != dt2) { SetDataType(2, dt2); } } dt = GetUIDataType(2); if (dt == DataType.DateTime && (e.Value is UInt32 || e.Value is UInt64 || e.Value is Int32 || e.Value is Int64)) { Value = GXDateTime.FromUnixTime(Convert.ToUInt32(e.Value)); } else { Value = e.Value; } break; default: e.Error = ErrorCode.ReadWriteDenied; break; } }
/// <inheritdoc cref="IGXDLMSBase.GetDataType"/> public override DataType GetDataType(int index) { if (index == 1) { return(DataType.OctetString); } if (index == 2) { DataType dt = base.GetDataType(index); if (dt == DataType.None && Value != null) { dt = GXCommon.GetDLMSDataType(Value.GetType()); } return(dt); } if (index == 3) { return(DataType.Array); } if (index == 4 && this is GXDLMSExtendedRegister) { return(base.GetDataType(index)); } throw new ArgumentException("GetDataType failed. Invalid attribute index."); }
/// <inheritdoc cref="IGXDLMSBase.GetDataType"/> public override DataType GetDataType(int index) { switch (index) { case 1: return(DataType.OctetString); case 2: { DataType dt = base.GetDataType(index); if (dt == DataType.None && Value != null) { dt = GXCommon.GetDLMSDataType(Value.GetType()); //If user has set initial value. if (dt == DataType.String) { dt = DataType.None; } } return(dt); } default: throw new ArgumentException("GetDataType failed. Invalid attribute index."); } }
/// <inheritdoc cref="IGXDLMSBase.GetDataType"/> public override DataType GetDataType(int index) { DataType dt; switch (index) { case 1: dt = DataType.OctetString; break; case 2: dt = base.GetDataType(index); if (dt == DataType.None && CurrentAverageValue != null) { dt = GXCommon.GetDLMSDataType(CurrentAverageValue.GetType()); } break; case 3: dt = base.GetDataType(index); if (dt == DataType.None && LastAverageValue != null) { dt = GXCommon.GetDLMSDataType(LastAverageValue.GetType()); } break; case 4: dt = DataType.Array; break; case 5: dt = base.GetDataType(index); if (dt == DataType.None && Status != null) { dt = GXCommon.GetDLMSDataType(Status.GetType()); } break; case 6: dt = DataType.OctetString; break; case 7: dt = DataType.OctetString; break; case 8: dt = DataType.UInt32; break; case 9: dt = DataType.UInt16; break; default: throw new ArgumentException("GetDataType failed. Invalid attribute index."); } return(dt); }
/// <summary> /// Get DLMS data type. /// </summary> /// <param name="value">Object</param> /// <returns>DLMS data type.</returns> static public DataType GetDLMSDataType(object value) { if (value == null) { return(DataType.None); } return(GXCommon.GetDLMSDataType(value.GetType())); }
void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e) { if (e.Index == 1) { LogicalName = GXCommon.ToLogicalName(e.Value); } else if (e.Index == 2) { if (Scaler != 1 && e.Value != null && !e.User) { SetDataType(2, GXCommon.GetDLMSDataType(e.Value.GetType())); try { if (settings != null && settings.IsServer) { Value = e.Value; } else { Value = Convert.ToDouble(e.Value) * Scaler; } } catch (Exception) { //Sometimes scaler is set for wrong Object type. Value = e.Value; } } else { Value = e.Value; } } else if (e.Index == 3) { if (e.Value == null) { Scaler = 1; Unit = Unit.None; } else { object[] arr = (object[])e.Value; if (arr.Length != 2) { throw new Exception("setValue failed. Invalid scaler unit value."); } scaler = Convert.ToInt32(arr[0]); Unit = (Unit)(Convert.ToInt32(arr[1]) & 0xFF); } } else { e.Error = ErrorCode.ReadWriteDenied; } }
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); }
void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e) { switch (e.Index) { case 1: LogicalName = GXCommon.ToLogicalName(e.Value); break; case 2: if (!e.User && e.Value != null && GetDataType(2) == DataType.None) { SetDataType(2, GXCommon.GetDLMSDataType(e.Value.GetType())); } Value = e.Value; break; default: e.Error = ErrorCode.ReadWriteDenied; break; } }
/// <summary> /// Get DLMS data type. /// </summary> /// <param name="type">Data type.</param> /// <returns>DLMS data type.</returns> static public DataType GetDLMSDataType(Type type) { return(GXCommon.GetDLMSDataType(type)); }
void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e) { if (e.Index == 1) { LogicalName = GXCommon.ToLogicalName(e.Value); } else if (e.Index == 2) { if (Scaler != 1 && e.Value != null && !e.User) { SetDataType(2, GXCommon.GetDLMSDataType(e.Value.GetType())); try { if (settings.IsServer) { Value = e.Value; } else { Value = Convert.ToDouble(e.Value) * Scaler; } } catch (Exception) { //Sometimes scaler is set for wrong Object type. Value = e.Value; } } else { Value = e.Value; } } else if (e.Index == 3) { if (e.Value == null) { Scaler = 1; Unit = Unit.None; } else { List <object> arr; if (e.Value is List <object> ) { arr = (List <object>)e.Value; } else { arr = new List <object>((object[])e.Value); } if (arr.Count != 2) { throw new Exception("setValue failed. Invalid scaler unit value."); } scaler = Convert.ToInt32(arr[0]); Unit = (Unit)Convert.ToInt32(arr[1]); } } else if (e.Index == 4) { Status = e.Value; } else if (e.Index == 5) { if (e.Value is byte[]) { e.Value = GXDLMSClient.ChangeType((byte[])e.Value, DataType.DateTime, settings == null ? false : settings.UseUtc2NormalTime); } else if (e.Value is string) { e.Value = new GXDateTime((string)e.Value); } //Actaris meters might return null. if (e.Value == null) { CaptureTime = new GXDateTime(); } else { CaptureTime = ((GXDateTime)e.Value).Value.LocalDateTime; } } else { e.Error = ErrorCode.ReadWriteDenied; } }
void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e) { if (e.Index == 1) { LogicalName = GXCommon.ToLogicalName(e.Value); } else if (e.Index == 2) { if (Scaler != 1 && e.Value != null && !e.User) { try { if (settings.IsServer) { CurrentAverageValue = e.Value; } else { CurrentAverageValue = Convert.ToDouble(e.Value) * Scaler; } } catch (Exception) { //Sometimes scaler is set for wrong Object type. CurrentAverageValue = e.Value; } } else { CurrentAverageValue = e.Value; } } else if (e.Index == 3) { if (Scaler != 1 && e.Value != null && !e.User) { try { SetDataType(e.Index, GXCommon.GetDLMSDataType(e.Value.GetType())); if (settings.IsServer) { LastAverageValue = e.Value; } else { LastAverageValue = Convert.ToDouble(e.Value) * Scaler; } } catch (Exception) { //Sometimes scaler is set for wrong Object type. LastAverageValue = e.Value; } } else { LastAverageValue = e.Value; } } else if (e.Index == 4) { if (e.Value == null) { Scaler = 1; Unit = Unit.None; } else { object[] arr = (object[])e.Value; if (arr.Length != 2) { throw new Exception("setValue failed. Invalid scaler unit value."); } scaler = Convert.ToInt32(arr[0]); Unit = (Unit)Convert.ToInt32(arr[1]); } } else if (e.Index == 5) { Status = Convert.ToInt32(e.Value); } else if (e.Index == 6) { if (e.Value == null) { CaptureTime = new GXDateTime(DateTime.MinValue); } else { if (e.Value is byte[]) { e.Value = GXDLMSClient.ChangeType((byte[])e.Value, DataType.DateTime, settings.UseUtc2NormalTime); } else if (e.Value is string) { e.Value = new GXDateTime((string)e.Value); } CaptureTime = (GXDateTime)e.Value; } } else if (e.Index == 7) { if (e.Value == null) { StartTimeCurrent = new GXDateTime(DateTime.MinValue); } else { if (e.Value is byte[]) { e.Value = GXDLMSClient.ChangeType((byte[])e.Value, DataType.DateTime, settings.UseUtc2NormalTime); } else if (e.Value is string) { e.Value = new GXDateTime((string)e.Value); } StartTimeCurrent = (GXDateTime)e.Value; } } else if (e.Index == 8) { Period = Convert.ToUInt32(e.Value); } else if (e.Index == 9) { NumberOfPeriods = Convert.ToUInt16(e.Value); } else { e.Error = ErrorCode.ReadWriteDenied; } }
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); }