Beispiel #1
0
 public object ReadElementContentAsObject(string name, object defaultValue)
 {
     GetNext();
     if (string.Compare(name, reader.Name, true) == 0)
     {
         object   ret;
         DataType tp = (DataType)Enum.Parse(typeof(DataType), reader.GetAttribute(0));
         if (tp == DataType.Array)
         {
             reader.Read();
             GetNext();
             ret = ReadArray();
             ReadEndElement(name);
             return(ret);
         }
         else
         {
             string str = reader.ReadElementContentAsString();
             if (tp == DataType.OctetString)
             {
                 ret = GXDLMSTranslator.HexToBytes(str);
             }
             else if (tp == DataType.DateTime)
             {
                 ret = new GXDateTime(str, CultureInfo.InvariantCulture);
             }
             else if (tp == DataType.Date)
             {
                 ret = new GXDate(str, CultureInfo.InvariantCulture);
             }
             else if (tp == DataType.Time)
             {
                 ret = new GXTime(str, CultureInfo.InvariantCulture);
             }
             else
             {
                 ret = Convert.ChangeType(str, GXDLMSConverter.GetDataType(tp));
             }
         }
         while (!(reader.NodeType == XmlNodeType.Element || reader.NodeType == XmlNodeType.EndElement))
         {
             reader.Read();
         }
         return(ret);
     }
     return(defaultValue);
 }
 private void OkBtn_Click(object sender, EventArgs e)
 {
     try
     {
         GXDateTime tmp;
         if (StartTime is GXDate)
         {
             tmp = new GXDate(StartTimeTb.Text);
         }
         else if (StartTime is GXTime)
         {
             tmp = new GXTime(StartTimeTb.Text);
         }
         else
         {
             tmp = new GXDateTime(StartTimeTb.Text);
         }
         StartTime.Value = tmp.Value;
         StartTime.Skip  = tmp.Skip;
         if (EndTime != null)
         {
             if (EndTime is GXDate)
             {
                 tmp = new GXDate(EndTimeTb.Text);
             }
             else if (EndTime is GXTime)
             {
                 tmp = new GXTime(EndTimeTb.Text);
             }
             else
             {
                 tmp = new GXDateTime(EndTimeTb.Text);
             }
             EndTime.Value = tmp.Value;
             EndTime.Skip  = tmp.Skip;
         }
     }
     catch (Exception ex)
     {
         DialogResult = DialogResult.None;
         MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Beispiel #3
0
        /// <summary>
        /// Return data using start and end indexes.
        /// </summary>
        /// <param name="p">ProfileGeneric</param>
        /// <param name="index">Row index.</param>
        /// <param name="count">Row count.</param>
        void GetProfileGenericDataByEntry(GXDLMSProfileGeneric p, UInt32 index, UInt32 count)
        {
            //Clear old data. It's already serialized.
            p.Buffer.Clear();
            string name = GetProfileGenericName(p);

            if (count != 0)
            {
                lock (p)
                {
                    if (!File.Exists(name))
                    {
                        return;
                    }

                    using (var fs = File.OpenRead(name))
                    {
                        using (var reader = new StreamReader(fs))
                        {
                            while (!reader.EndOfStream)
                            {
                                string line = reader.ReadLine();
                                if (line.Length != 0)
                                {
                                    //Skip row
                                    if (index > 0)
                                    {
                                        --index;
                                    }
                                    else
                                    {
                                        string[] values = line.Split(';');
                                        object[] list   = new object[values.Length];
                                        for (int pos = 0; pos != values.Length; ++pos)
                                        {
                                            DataType t = p.CaptureObjects[pos].Key.GetUIDataType(p.CaptureObjects[pos].Value.AttributeIndex);
                                            if (t == DataType.DateTime)
                                            {
                                                list[pos] = new GXDateTime(values[pos]);
                                            }
                                            else if (t == DataType.Date)
                                            {
                                                list[pos] = new GXDate(values[pos]);
                                            }
                                            else if (t == DataType.Time)
                                            {
                                                list[pos] = new GXTime(values[pos]);
                                            }
                                            else
                                            {
                                                list[pos] = values[pos];
                                            }
                                        }
                                        p.Buffer.Add(list);
                                    }
                                    if (p.Buffer.Count == count)
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #4
0
 ///<summary>
 ///Get date from DLMS data.
 ///</summary>
 ///<param name="buff">
 ///Received DLMS data.
 ///</param>
 ///<param name="info">
 ///Data info.
 ///</param>
 ///<returns>
 ///Parsed date.
 ///</returns>
 private static object GetDate(GXByteBuffer buff, GXDataInfo info)
 {
     object value;
     if (buff.Size - buff.Position < 5)
     {
         // If there is not enough data available.
         info.Complete = false;
         return null;
     }
     if (info.xml != null)
     {
         info.xml.AppendLine(info.xml.GetDataType(info.Type), "Value", GXCommon.ToHex(buff.Data, false, buff.Position, 5));
     }
     // Get year.
     int year = buff.GetUInt16();
     // Get month
     int month = buff.GetUInt8();
     // Get day
     int day = buff.GetUInt8();
     GXDate dt = new GXDate(year, month, day);
     // Skip week day
     if (buff.GetUInt8() == 0xFF)
     {
         dt.Skip |= DateTimeSkips.DayOfWeek;
     }
     value = dt;
     return value;
 }