byte[] GetProfileGenericData(int selector, object parameters) { //If all data is read. if (selector == 0 || parameters == null) { return(GetData(Buffer)); } object[] arr = (object[])parameters; List <object[]> table = new List <object[]>(); lock (Buffer) { if (selector == 1) //Read by range { GXDataInfo info = new GXDataInfo(); info.Type = DataType.DateTime; DateTime start = ((GXDateTime)GXCommon.GetData(new GXByteBuffer((byte[])arr[1]), info)).Value.LocalDateTime; info.Clear(); info.Type = DataType.DateTime; DateTime end = ((GXDateTime)GXCommon.GetData(new GXByteBuffer((byte[])arr[2]), info)).Value.LocalDateTime; foreach (object[] row in Buffer) { DateTime tm = Convert.ToDateTime(row[0]); if (tm >= start && tm <= end) { table.Add(row); } } } else if (selector == 2)//Read by entry. { int start = Convert.ToInt32(arr[0]); int count = Convert.ToInt32(arr[1]); for (int pos = 0; pos < count; ++pos) { if (pos + start == Buffer.Count) { break; } table.Add(Buffer[start + pos]); } } else { throw new Exception("Invalid selector."); } } return(GetData(table)); }
private static void UpdateTemplateDescription(GXByteBuffer columns, GXByteBuffer data, int index) { DataType ch = (DataType)data.GetUInt8(); int count = GXCommon.GetObjectCount(data); if (index == -1) { columns.SetUInt8(ch); if (ch == DataType.Array) { columns.SetUInt16((UInt16)count); } else { columns.SetUInt8((byte)count); } } GXDataInfo info = new GXDataInfo(); for (int pos = 0; pos < count; ++pos) { //If all data is captured. if (index == -1 || pos == index) { DataType dt = (DataType)data.GetUInt8(data.Position); if (dt == DataType.Array || dt == DataType.Structure) { UpdateTemplateDescription(columns, data, -1); if (ch == DataType.Array) { break; } } else { info.Clear(); columns.SetUInt8((byte)dt); //Get data. GXCommon.GetData(null, data, info); } if (index == pos) { break; } } } }
byte[] GetProfileGenericData(GXDLMSSettings settings, ValueEventArgs e) { List <GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> > columns = null; //If all data is read. if (e.Selector == 0 || e.Parameters == null || e.RowEndIndex != 0) { return(GetData(settings, e, Buffer, columns)); } object[] arr = (object[])e.Parameters; List <object[]> table = new List <object[]>(); lock (Buffer) { if (e.Selector == 1) //Read by range { GXDataInfo info = new GXDataInfo(); info.Type = DataType.DateTime; DateTime start = ((GXDateTime)GXCommon.GetData(settings, new GXByteBuffer((byte[])arr[1]), info)).Value.LocalDateTime; info.Clear(); info.Type = DataType.DateTime; DateTime end = ((GXDateTime)GXCommon.GetData(settings, new GXByteBuffer((byte[])arr[2]), info)).Value.LocalDateTime; if (arr.Length > 3) { columns = GetColumns((Object[])((Object[])arr)[3]); } foreach (object[] row in Buffer) { DateTime tm = Convert.ToDateTime(row[0]); if (tm >= start && tm <= end) { table.Add(row); } } } else if (e.Selector == 2)//Read by entry. { int start = Convert.ToInt32(arr[0]); if (start == 0) { start = 1; } int count = Convert.ToInt32(arr[1]); if (count == 0) { count = Buffer.Count; } if (start + count > Buffer.Count + 1) { count = Buffer.Count; } int colStart = 1; int colCount = 0; if (arr.Length > 2) { colStart = Convert.ToUInt16(arr[2]); } if (arr.Length > 3) { colCount = Convert.ToUInt16(arr[3]); } else if (colStart != 1) { colCount = CaptureObjects.Count; } if (colStart != 1 || colCount != 0) { columns = new List <GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> >(); for (int pos = 0; pos != colCount; ++pos) { columns.Add(CaptureObjects[colStart + pos - 1]); } } //Get rows. // Starting index is 1. for (int pos = 0; pos < count; ++pos) { if (pos + start - 1 == Buffer.Count) { break; } table.Add(Buffer[start + pos - 1]); } } else { throw new Exception("Invalid selector."); } } return(GetData(settings, e, table, columns)); }