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); } }
/// <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; } } } } } } } }
///<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; }