void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e) { if (e.Index == 1) { LogicalName = GXCommon.ToLogicalName(e.Value); } else if (e.Index == 2) { if (e.Value != null) { string ln = GXCommon.ToLogicalName(((object[])e.Value)[0]); Target = (GXDLMSScriptTable)settings.Objects.FindByLN(ObjectType.ScriptTable, ln); if (Target == null) { Target = new GXDLMSScriptTable(ln); } ExecutedScriptSelector = Convert.ToUInt16(((object[])e.Value)[1]); } else { Target = null; ExecutedScriptSelector = 0; } } else if (e.Index == 3) { Type = (SingleActionScheduleType)Convert.ToInt32(e.Value); } else if (e.Index == 4) { ExecutionTime = null; if (e.Value != null) { List <GXDateTime> items = new List <GXDateTime>(); foreach (object[] it in (object[])e.Value) { GXDateTime time = (GXDateTime)GXDLMSClient.ChangeType((byte[])it[0], DataType.Time, settings.UseUtc2NormalTime); time.Skip &= ~(DateTimeSkips.Year | DateTimeSkips.Month | DateTimeSkips.Day | DateTimeSkips.DayOfWeek); GXDateTime date = (GXDateTime)GXDLMSClient.ChangeType((byte[])it[1], DataType.Date, settings.UseUtc2NormalTime); date.Skip &= ~(DateTimeSkips.Hour | DateTimeSkips.Minute | DateTimeSkips.Second | DateTimeSkips.Ms); GXDateTime tmp = new DLMS.GXDateTime(date); tmp.Value = tmp.Value.AddHours(time.Value.Hour); tmp.Value = tmp.Value.AddMinutes(time.Value.Minute); tmp.Value = tmp.Value.AddSeconds(time.Value.Second); tmp.Skip = date.Skip | time.Skip; items.Add(tmp); } ExecutionTime = items.ToArray(); } } 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 (e.Value != null) { List <object> arr; if (e.Value is List <object> ) { arr = (List <object>)e.Value; } else { arr = new List <object>((object[])e.Value); } String ln = GXCommon.ToLogicalName(arr[0]); Target = (GXDLMSScriptTable)settings.Objects.FindByLN(ObjectType.ScriptTable, ln); if (Target == null) { Target = new GXDLMSScriptTable(ln); } ExecutedScriptSelector = Convert.ToUInt16(arr[1]); } else { Target = null; ExecutedScriptSelector = 0; } } else if (e.Index == 3) { Type = (SingleActionScheduleType)Convert.ToInt32(e.Value); } else if (e.Index == 4) { ExecutionTime = null; if (e.Value != null) { List <GXDateTime> items = new List <GXDateTime>(); List <object> it; foreach (object tmp2 in (IEnumerable <object>)e.Value) { if (tmp2 is List <object> ) { it = (List <object>)tmp2; } else { it = new List <object>((object[])tmp2); } GXDateTime time; if (it[0] is byte[]) { time = (GXDateTime)GXDLMSClient.ChangeType((byte[])it[0], DataType.Time, settings.UseUtc2NormalTime); } else if (it[0] is GXDateTime) { time = (GXDateTime)it[0]; } else { throw new Exception("Invalid time."); } time.Skip &= ~(DateTimeSkips.Year | DateTimeSkips.Month | DateTimeSkips.Day | DateTimeSkips.DayOfWeek); GXDateTime date; if (it[1] is byte[]) { date = (GXDateTime)GXDLMSClient.ChangeType((byte[])it[1], DataType.Date, settings.UseUtc2NormalTime); } else if (it[1] is GXDateTime) { date = (GXDateTime)it[1]; } else { throw new Exception("Invalid date."); } date.Skip &= ~(DateTimeSkips.Hour | DateTimeSkips.Minute | DateTimeSkips.Second | DateTimeSkips.Ms); GXDateTime tmp = new DLMS.GXDateTime(date); tmp.Value = tmp.Value.AddHours(time.Value.Hour); tmp.Value = tmp.Value.AddMinutes(time.Value.Minute); tmp.Value = tmp.Value.AddSeconds(time.Value.Second); tmp.Skip = date.Skip | time.Skip; items.Add(tmp); } ExecutionTime = items.ToArray(); } } else { e.Error = ErrorCode.ReadWriteDenied; } }