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");
     }
 }
Exemple #2
0
 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);
 }
Exemple #8
0
 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);
        }