void IGXDLMSBase.Load(GXXmlReader reader) { Entries.Clear(); if (reader.IsStartElement("Entries", true)) { while (reader.IsStartElement("Item", true)) { GXScheduleEntry it = new GXScheduleEntry(); it.Index = (byte)reader.ReadElementContentAsInt("Index"); it.Enable = reader.ReadElementContentAsInt("Enable") != 0; string ln = reader.ReadElementContentAsString("LogicalName"); if (!string.IsNullOrEmpty(ln)) { it.Script = new GXDLMSScriptTable(ln); } it.ScriptSelector = (byte)reader.ReadElementContentAsInt("ScriptSelector"); it.SwitchTime = reader.ReadElementContentAsTime("SwitchTime"); it.ValidityWindow = (byte)reader.ReadElementContentAsInt("ValidityWindow"); it.ExecWeekdays = (Weekdays)reader.ReadElementContentAsInt("ExecWeekdays"); it.ExecSpecDays = reader.ReadElementContentAsString("ExecSpecDays"); it.BeginDate = reader.ReadElementContentAsDate("BeginDate"); it.EndDate = reader.ReadElementContentAsDate("EndDate"); Entries.Add(it); } reader.ReadEndElement("Entries"); } }
void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e) { if (e.Index == 1) { LogicalName = GXCommon.ToLogicalName(e.Value); } else if (e.Index == 2) { Entries.Clear(); Object[] arr = (Object[])e.Value; if (arr != null) { foreach (var it in arr) { GXScheduleEntry item = new GXScheduleEntry(); Object[] tmp = (Object[])it; item.Index = Convert.ToUInt16(tmp[0]); item.Enable = (bool)tmp[1]; item.LogicalName = GXCommon.ToLogicalName(tmp[2]); item.ScriptSelector = Convert.ToUInt16(tmp[3]); item.SwitchTime = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[4], DataType.DateTime, settings.UseUtc2NormalTime); item.ValidityWindow = Convert.ToUInt16(tmp[5]); item.ExecWeekdays = Convert.ToString(tmp[6]); item.ExecSpecDays = Convert.ToString(tmp[7]); item.BeginDate = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[8], DataType.DateTime, settings.UseUtc2NormalTime); item.EndDate = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[9], DataType.DateTime, settings.UseUtc2NormalTime); Entries.Add(item); } } } else { e.Error = ErrorCode.ReadWriteDenied; } }
/// <summary> /// Add entry to entries list. /// </summary> /// <param name="client">DLMS client.</param> /// <param name="entry">Schedule entry.</param> /// <returns>Action bytes.</returns> public byte[][] Insert(GXDLMSClient client, GXScheduleEntry entry) { GXByteBuffer data = new GXByteBuffer(); AddEntry(client.Settings, entry, data); return(client.Method(this, 2, data.Array(), DataType.Structure)); }
/// <summary> /// Create a new entry. /// </summary> private GXScheduleEntry CreateEntry(GXDLMSSettings settings, List <object> it) { GXScheduleEntry item = new GXScheduleEntry(); item.Index = Convert.ToUInt16(it[0]); item.Enable = (bool)it[1]; string ln = GXCommon.ToLogicalName(it[2]); if (settings != null && ln != "0.0.0.0.0.0") { item.Script = (GXDLMSScriptTable)settings.Objects.FindByLN(ObjectType.ScriptTable, ln); } if (item.Script == null) { item.Script = new GXDLMSScriptTable(ln); } item.ScriptSelector = Convert.ToUInt16(it[3]); item.SwitchTime = (GXTime)GXDLMSClient.ChangeType((byte[])it[4], DataType.Time, settings.UseUtc2NormalTime); item.ValidityWindow = Convert.ToUInt16(it[5]); item.ExecWeekdays = (Weekdays)Convert.ToByte(it[6]); item.ExecSpecDays = Convert.ToString(it[7]); item.BeginDate = (GXDate)GXDLMSClient.ChangeType((byte[])it[8], DataType.Date, settings.UseUtc2NormalTime); item.EndDate = (GXDate)GXDLMSClient.ChangeType((byte[])it[9], DataType.Date, settings.UseUtc2NormalTime); return(item); }
/// <summary> /// Remove entry from entries list. /// </summary> /// <param name="client">DLMS client.</param> /// <param name="entry">Schedule entry.</param> /// <returns>Action bytes.</returns> public byte[][] Delete(GXDLMSClient client, GXScheduleEntry entry) { GXByteBuffer data = new GXByteBuffer(); data.SetUInt8((byte)DataType.Structure); //Add structure size. data.SetUInt8(2); //firstIndex GXCommon.SetData(null, data, DataType.UInt16, entry.Index); //lastIndex GXCommon.SetData(null, data, DataType.UInt16, entry.Index); return(client.Method(this, 3, data.Array(), DataType.Structure)); }
void IGXDLMSBase.SetValue(GXDLMSSettings settings, int index, object value) { if (index == 1) { if (value is string) { LogicalName = value.ToString(); } else { LogicalName = GXDLMSClient.ChangeType((byte[])value, DataType.OctetString).ToString(); } } else if (index == 2) { Entries.Clear(); Object[] arr = (Object[])value; foreach (var it in arr) { GXScheduleEntry item = new GXScheduleEntry(); Object[] tmp = (Object[])it; item.Index = Convert.ToByte(tmp[0]); item.Enable = (bool)tmp[1]; item.LogicalName = GXDLMSClient.ChangeType((byte[])tmp[2], DataType.OctetString).ToString(); item.ScriptSelector = Convert.ToByte(tmp[3]); item.SwitchTime = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[4], DataType.DateTime); item.ValidityWindow = Convert.ToByte(tmp[5]); item.ExecWeekdays = (string)tmp[6]; item.ExecSpecDays = (string)tmp[7]; item.BeginDate = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[8], DataType.DateTime); item.EndDate = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[9], DataType.DateTime); Entries.Add(item); } } else { throw new ArgumentException("SetValue failed. Invalid attribute index."); } }
private void AddEntry(GXDLMSSettings settings, GXScheduleEntry it, GXByteBuffer data) { data.SetUInt8((byte)DataType.Structure); data.SetUInt8(10); //Add index. data.SetUInt8((byte)DataType.UInt16); data.SetUInt16(it.Index); //Add enable. data.SetUInt8((byte)DataType.Boolean); data.SetUInt8((byte)(it.Enable ? 1 : 0)); //Add logical Name. data.SetUInt8((byte)DataType.OctetString); data.SetUInt8(6); if (it.Script == null) { data.Set(new byte[] { 0, 0, 0, 0, 0, 0 }); } else { data.Set(GXCommon.LogicalNameToBytes(it.Script.LogicalName)); } //Add script selector. data.SetUInt8((byte)DataType.UInt16); data.SetUInt16(it.ScriptSelector); //Add switch time. GXCommon.SetData(settings, data, DataType.OctetString, it.SwitchTime); //Add validity window. data.SetUInt8((byte)DataType.UInt16); data.SetUInt16(it.ValidityWindow); //Add exec week days. GXCommon.SetData(settings, data, DataType.BitString, GXBitString.ToBitString((byte)it.ExecWeekdays, 7)); //Add exec spec days. GXCommon.SetData(settings, data, DataType.BitString, it.ExecSpecDays); //Add begin date. GXCommon.SetData(settings, data, DataType.OctetString, it.BeginDate); //Add end date. GXCommon.SetData(settings, data, DataType.OctetString, it.EndDate); }
void IGXDLMSBase.Load(GXXmlReader reader) { Entries.Clear(); if (reader.IsStartElement("Entries", true)) { while (reader.IsStartElement("Item", true)) { GXScheduleEntry it = new GXScheduleEntry(); it.Index = (byte)reader.ReadElementContentAsInt("Index"); it.Enable = reader.ReadElementContentAsInt("Enable") != 0; it.LogicalName = reader.ReadElementContentAsString("LogicalName"); it.ScriptSelector = (byte)reader.ReadElementContentAsInt("ScriptSelector"); it.SwitchTime = (GXDateTime)reader.ReadElementContentAsObject("SwitchTime", new GXDateTime(), null, 0); it.ValidityWindow = (byte)reader.ReadElementContentAsInt("ValidityWindow"); it.ExecWeekdays = reader.ReadElementContentAsString("ExecWeekdays"); it.ExecSpecDays = reader.ReadElementContentAsString("ExecSpecDays"); it.BeginDate = (GXDateTime)reader.ReadElementContentAsObject("BeginDate", new GXDateTime(), null, 0); it.EndDate = (GXDateTime)reader.ReadElementContentAsObject("EndDate", new GXDateTime(), null, 0); Entries.Add(it); } reader.ReadEndElement("Entries"); } }
void IGXDLMSBase.SetValue(int index, object value) { if (index == 1) { if (value is string) { LogicalName = value.ToString(); } else { LogicalName = GXDLMSClient.ChangeType((byte[])value, DataType.OctetString).ToString(); } } else if (index == 2) { Entries.Clear(); Object[] arr = (Object[])value; foreach (var it in arr) { GXScheduleEntry item = new GXScheduleEntry(); Object[] tmp = (Object[])it; item.Index = Convert.ToByte(tmp[0]); item.Enable = (bool) tmp[1]; item.LogicalName = GXDLMSClient.ChangeType((byte[])tmp[2], DataType.OctetString).ToString(); item.ScriptSelector = Convert.ToByte(tmp[3]); item.SwitchTime = (GXDateTime) GXDLMSClient.ChangeType((byte[])tmp[4], DataType.DateTime); item.ValidityWindow = Convert.ToByte(tmp[5]); item.ExecWeekdays = (string) tmp[6]; item.ExecSpecDays = (string)tmp[7]; item.BeginDate = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[8], DataType.DateTime); item.EndDate = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[9], DataType.DateTime); Entries.Add(item); } } else { throw new ArgumentException("SetValue failed. Invalid attribute index."); } }
void IGXDLMSBase.SetValue(GXDLMSSettings settings, ValueEventArgs e) { if (e.Index == 1) { if (e.Value is string) { LogicalName = e.Value.ToString(); } else { LogicalName = GXDLMSClient.ChangeType((byte[])e.Value, DataType.OctetString).ToString(); } } else if (e.Index == 2) { Entries.Clear(); Object[] arr = (Object[])e.Value; foreach (var it in arr) { GXScheduleEntry item = new GXScheduleEntry(); Object[] tmp = (Object[])it; item.Index = Convert.ToByte(tmp[0]); item.Enable = (bool)tmp[1]; item.LogicalName = GXDLMSClient.ChangeType((byte[])tmp[2], DataType.OctetString).ToString(); item.ScriptSelector = Convert.ToByte(tmp[3]); item.SwitchTime = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[4], DataType.DateTime); item.ValidityWindow = Convert.ToByte(tmp[5]); item.ExecWeekdays = (string)tmp[6]; item.ExecSpecDays = (string)tmp[7]; item.BeginDate = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[8], DataType.DateTime); item.EndDate = (GXDateTime)GXDLMSClient.ChangeType((byte[])tmp[9], DataType.DateTime); Entries.Add(item); } } else { e.Error = ErrorCode.ReadWriteDenied; } }
byte[] IGXDLMSBase.Invoke(GXDLMSSettings settings, ValueEventArgs e) { switch (e.Index) { //Enable/disable entry case 1: { List <object> tmp = (List <object>)e.Parameters; //Enable for (int index = (UInt16)tmp[0]; index <= (UInt16)tmp[1]; ++index) { if (index != 0) { foreach (GXScheduleEntry it in Entries) { if (it.Index == index) { it.Enable = true; break; } } } } //Disable for (int index = (UInt16)tmp[2]; index <= (UInt16)tmp[3]; ++index) { if (index != 0) { foreach (GXScheduleEntry it in Entries) { if (it.Index == index) { it.Enable = false; break; } } } } } break; //Insert entry case 2: GXScheduleEntry entry = CreateEntry(settings, (List <object>)e.Parameters); RemoveEntry(entry.Index); Entries.Add(entry); break; //Delete entry case 3: { List <object> tmp = (List <object>)e.Parameters; for (UInt16 index = (UInt16)tmp[0]; index <= (UInt16)tmp[1]; ++index) { RemoveEntry(index); } } break; default: e.Error = ErrorCode.ReadWriteDenied; break; } return(null); }