public List <GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> > Refresh(GXDLMSProfileGeneric item, GXDLMSCommunicator comm) { if (item.LogicalName.CompareTo("0.0.99.1.2.255") == 0) // LoadProfile1EndOfRecordingData { List <GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> > items = new List <GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> >(); //Read profile generic columns. object value = comm.GetProfileGenericColumns(item.Name); byte[] data = comm.Read("0.0.99.128.1.255", ObjectType.ProfileGeneric, 2); byte[] allData = comm.ReadDataBlock(data, "Get profile generic columns...", 1); object[] values = (object[])comm.m_Cosem.GetValue(allData); Array info = values[0] as Array; GXDLMSObject obj = new GXDLMSData(); obj.Description = "DateTime"; obj.SetUIDataType(1, DataType.DateTime); items.Add(new GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject>(obj, new GXDLMSCaptureObject(1, 0))); obj = new GXDLMSData(); obj.Description = "Status"; items.Add(new GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject>(obj, new GXDLMSCaptureObject(2, 0))); //Two last items contains Start and end date. int cnt = 4; for (int pos = 0; pos < info.Length - 2; pos += 2) { obj = new GXDLMSData(); obj.LogicalName = GXHelpers.ConvertFromDLMS(info.GetValue(pos), DataType.OctetString, DataType.OctetString, false).ToString(); object scalerUnit = info.GetValue(pos + 1); obj.Description = ""; items.Add(new GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject>(obj, new GXDLMSCaptureObject(++cnt, 0))); } LastDateTime = ((GXDateTime)GXDLMS.Common.GXHelpers.ConvertFromDLMS(info.GetValue(info.Length - 1), DataType.OctetString, DataType.DateTime, true)).Value; return(items); } return(null); }
public void OnValueChanged(int attributeID, object value) { GXDLMSAutoAnswer target = Target as GXDLMSAutoAnswer; if (attributeID == 3) { ListeningWindowLV.Items.Clear(); if (target.ListeningWindow != null) { foreach (var it in target.ListeningWindow) { ListViewItem li = ListeningWindowLV.Items.Add(it.Key.ToString()); li.SubItems.Add(GXHelpers.ConvertDLMS2String(it.Value.ToString())); } } } else if (attributeID == 5) { if (target.NumberOfCalls == 0) { NumberOfCallsTB.Value = "No limit."; } else { NumberOfCallsTB.Value = target.NumberOfCalls.ToString(); } } else if (attributeID == 6) { if (target.NumberOfRingsInListeningWindow == 0) { this.RingCountInWindowTB.Text = "No connect."; } else { this.RingCountInWindowTB.Text = target.NumberOfRingsInListeningWindow.ToString(); } if (target.NumberOfRingsOutListeningWindow == 0) { this.RingCountOutOfWindowTB.Text = "No connect."; } else { this.RingCountOutOfWindowTB.Text = target.NumberOfRingsOutListeningWindow.ToString(); } } }
public GXGraphItemForm(GXGraphItemCollection items, List <GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> > columns, GXDLMSDevice device) { InitializeComponent(); GraphItemEditor_SizeChanged(null, null); GraphItemList.OwnerDraw = true; Items = items; int pos = 0; List <string> colors = GetColors(); GXManufacturer man = device.Manufacturers.FindByIdentification(device.Manufacturer); foreach (var it in columns) { GXDLMSObject obj = it.Key; int index = it.Value.AttributeIndex; if (!GXHelpers.IsNumeric(obj.GetDataType(index)) || (index > 0 && ((index & 0x8) != 0 || (index & 0x10) != 0))) { continue; } GXGraphItem item = items.Find(obj.LogicalName, index); if (item == null) { item = new GXGraphItem(); item.LogicalName = obj.LogicalName; item.Color = Color.FromName(colors[pos++]); item.AttributeIndex = index; items.Add(item); } string desc = obj.Description; GXObisCode code = man.ObisCodes.FindByLN(obj.ObjectType, obj.LogicalName, null); if (code != null) { desc = code.Description; } ListViewItem tmp = GraphItemList.Items.Add(obj.LogicalName + " " + desc); tmp.Tag = item; } }
void OnUpdateTarget(GXDLMSObject value) { m_Target = (GXDLMSProfileGeneric)value; m_MyPane.GraphPane.CurveList.Clear(); GXDLMSObject obj; int index = 0; if (m_Target != null) { m_MyPane.GraphPane.Title.Text = m_Target.Description; DataTable table = ProfileGenericView.DataSource as DataTable; ProfileGenericView.DataSource = null; ProfileGenericView.Columns.Clear(); DataTable dt = new DataTable(); foreach (var it in m_Target.CaptureObjects) { DataColumn dc = dt.Columns.Add(index.ToString()); dc.Caption = it.Key.Description; int pos = ProfileGenericView.Columns.Add(index.ToString(), it.Key.Description); ProfileGenericView.Columns[pos].DataPropertyName = index.ToString(); ++index; } foreach (object[] it in m_Target.Buffer) { dt.LoadDataRow(it, true); } ProfileGenericView.DataSource = dt; if (m_Target.CaptureObjects.Count != 0 && m_Target.CaptureObjects[0].Value.AttributeIndex != 0) { //We can show graph only tables that are date based. if (m_Target.CaptureObjects[0].Key.GetUIDataType(m_Target.CaptureObjects[0].Value.AttributeIndex) == DataType.DateTime) { for (int col = 0; col < m_Target.CaptureObjects.Count; ++col) { //Do not shown Status' or Events index = m_Target.CaptureObjects[col].Value.AttributeIndex; if (index > 0 && ((index & 0x8) != 0 || (m_Target.CaptureObjects[col].Value.AttributeIndex & 0x10) != 0)) { continue; } obj = m_Target.CaptureObjects[col].Key; GXGraphItem item = GraphItems.Find(obj.LogicalName, index); if (item != null && item.Enabled && GXHelpers.IsNumeric(obj.GetUIDataType(index))) { ZedGraph.DataSourcePointList dspl = new ZedGraph.DataSourcePointList(); dspl.DataSource = m_Target.Buffer; dspl.XDataMember = m_Target.CaptureObjects[0].Key.Description; dspl.YDataMember = obj.Description; ZedGraph.LineItem myCurve = m_MyPane.GraphPane.AddCurve(obj.Description, dspl, item.Color); } } m_MyPane.GraphPane.XAxis.Title.Text = m_Target.CaptureObjects[0].Key.LogicalName; // Tell ZedGraph to refigure the axes since the data have changed m_MyPane.AxisChange(); } } } else { ProfileGenericView.DataSource = null; } //Set initial values... ReadFromRB.Enabled = ReadLastRB.Enabled = ReadEntryBtn.Enabled = m_Target.CaptureObjects.Count != 0; ReadFromRB.Checked = ReadLastRB.Checked = ReadEntryBtn.Checked = false; StartEntry.Value = 0; EndEntry.Value = 1; ReadLastTB.Value = 0; StartPick.Value = ToPick.Value = DateTime.Now; if (!ReadFromRB.Enabled) { return; } index = m_Target.CaptureObjects[0].Value.AttributeIndex; obj = m_Target.CaptureObjects[0].Key; if (index != 0 && obj.GetUIDataType(index) != DataType.DateTime) { ReadFromRB.Enabled = ReadLastRB.Enabled = false; m_Target.AccessSelector = AccessRange.Entry; m_Target.From = 0; m_Target.To = 1; } else { ReadFromRB.Enabled = ReadLastRB.Enabled = true; } if (m_Target.AccessSelector == AccessRange.Entry) { StartEntry.Value = Convert.ToInt32(m_Target.From); EndEntry.Value = Convert.ToInt32(m_Target.To); ReadEntryBtn.Checked = true; } else if (m_Target.AccessSelector == AccessRange.Last) { TimeSpan diff = (DateTime)m_Target.To - (DateTime)m_Target.From; ReadLastTB.Value = diff.Days - 1; ReadLastRB.Checked = true; } else { if ((DateTime)m_Target.From == DateTime.MinValue) { StartPick.Checked = false; } else { StartPick.Value = (DateTime)m_Target.From; } if ((DateTime)m_Target.To == DateTime.MaxValue) { ToPick.Checked = false; } else { ToPick.Value = (DateTime)m_Target.To; } ReadFromRB.Checked = true; } }
void OnUpdateValue(object value) { string str; if (value != null && value.GetType().IsArray) { str = Convert.ToString(GXDLMS.Common.GXHelpers.ConvertFromDLMS(value, DataType.None, DataType.None, true)); } else { str = GXHelpers.ConvertDLMS2String(value); } if (Type == GXValueFieldType.TextBox) { textBox1.TextChanged -= new EventHandler(textBox1_TextChanged); this.textBox1.Text = str; textBox1.TextChanged += new EventHandler(textBox1_TextChanged); } else if (Type == GXValueFieldType.CompoBox) { if (comboBox1.Items.Count != 0) { if (value != null) { foreach (GXObisValueItem it in Items) { if (it.Value.Equals(Convert.ChangeType(value, it.Value.GetType()))) { int pos = comboBox1.Items.IndexOf(it.UIValue); if (pos != -1) { comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged); comboBox1.SelectedIndex = pos; comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged); return; } } } } else { comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged); comboBox1.SelectedIndex = -1; comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged); return; } } this.comboBox1.Text = str; } else if (Type == GXValueFieldType.ListBox) { this.listBox1.Items.Clear(); if (value is Array) { foreach (Array it in (Array)value) { List <byte> arr = new List <byte>(); foreach (object item in it) { if (item is Array) { foreach (byte b in (Array)item) { arr.Add(b); } } else { arr.Add((byte)item); } } this.listBox1.Items.Add(ASCIIEncoding.ASCII.GetString((byte[])arr.ToArray())); } } } else if (Type != GXValueFieldType.TextBox) { throw new InvalidExpressionException(); } }
/// <summary> /// After UpdateObjects call objects can be read using Objects property. /// </summary> public void UpdateObjects() { try { GXDLMSObjectCollection objs = Comm.GetObjects(); objs.Tag = this; int pos = 0; foreach (GXDLMSObject it in objs) { //Profile Generic objects are added later. if (it.ObjectType == ObjectType.ProfileGeneric) { continue; } if (it.GetType() == typeof(GXDLMSObject)) { continue; } ++pos; NotifyProgress(this, "Creating object " + it.LogicalName, pos, objs.Count); m_Objects.Add(it); } GXLogWriter.WriteLog("--- Created " + m_Objects.Count.ToString() + " objects. ---"); int objPos = 0; //Read registers units and scalers. int cnt = Objects.Count; GXLogWriter.WriteLog("--- Reading scalers and units. ---"); for (pos = 0; pos != cnt; ++pos) { GXDLMSObject it = Objects[pos]; it.UpdateDefaultValueItems(); this.OnProgress(this, "Reading scalers and units.", pos + 1, cnt); if (it is GXDLMSRegister) { object data = it.ShortName; if (it.ShortName == 0) { data = it.LogicalName; } //Read scaler first. DataType type = DataType.None; try { data = Comm.ReadValue(data, it.ObjectType, 3, ref type); object tmp = GXHelpers.ConvertFromDLMS(data, DataType.None, DataType.None, false); //Actaris ACE 6000 is returning wrong value here. if (tmp is object[]) { object[] scalerUnit = (object[])tmp; ((GXDLMSRegister)it).Scaler = Math.Pow(10, Convert.ToInt32(scalerUnit.GetValue(0))); ((GXDLMSRegister)it).Unit = (Unit)Convert.ToInt32(scalerUnit.GetValue(1)); } } catch (Exception ex) { GXLogWriter.WriteLog(ex.Message); UpdateError(it, 3, ex); if (ex is GXDLMSException) { continue; } throw ex; } } if (it is GXDLMSDemandRegister) { object name = it.ShortName; object data; if (it.ShortName == 0) { name = it.LogicalName; } //Read scaler first. DataType type = DataType.None; byte attributeOrder = 4; try { data = Comm.ReadValue(name, it.ObjectType, attributeOrder, ref type); Array scalerUnit = (Array)GXHelpers.ConvertFromDLMS(data, DataType.None, DataType.None, false); ((GXDLMSDemandRegister)it).Scaler = Math.Pow(10, Convert.ToInt32(scalerUnit.GetValue(0))); ((GXDLMSDemandRegister)it).Unit = (Unit)Convert.ToInt32(scalerUnit.GetValue(1)); //Read Period data = Comm.ReadValue(name, it.ObjectType, 8, ref type); ((GXDLMSDemandRegister)it).Period = Convert.ToUInt64(data); //Read number of periods data = Comm.ReadValue(name, it.ObjectType, 9, ref type); ((GXDLMSDemandRegister)it).NumberOfPeriods = Convert.ToUInt32(data); } catch (Exception ex) { GXLogWriter.WriteLog(ex.Message); UpdateError(it, 3, ex); if (ex is GXDLMSException) { continue; } throw ex; } } } GXLogWriter.WriteLog("--- Reading scalers and units end. ---"); /* TODO: * if (!m.UseLogicalNameReferencing) * { * GXLogWriter.WriteLog("--- Reading Access rights. ---"); * try * { * foreach (GXDLMSAssociationShortName sn in dev.Objects.GetObjects(ObjectType.AssociationShortName)) * { * dev.Comm.Read(sn, 3); * } * } * catch (Exception ex) * { * GXLogWriter.WriteLog(ex.Message); * } * GXLogWriter.WriteLog("--- Reading Access rights end. ---"); * } * */ this.OnProgress(this, "Reading scalers and units.", cnt, cnt); foreach (Gurux.DLMS.Objects.GXDLMSProfileGeneric it in objs.GetObjects(ObjectType.ProfileGeneric)) { ++pos; NotifyProgress(this, "Creating object " + it.LogicalName, pos, objs.Count); //Read Profile Generic Columns. try { NotifyProgress(this, "Get profile generic columns", ++objPos, objs.Count); UpdateColumns(it, Manufacturers.FindByIdentification(Manufacturer)); if (it.CaptureObjects == null || it.CaptureObjects.Count == 0) { continue; } } catch { GXLogWriter.WriteLog(string.Format("Failed to read Profile Generic {0} columns.", it.LogicalName)); continue; } m_Objects.Add(it); } } finally { NotifyProgress(this, "", 0, 0); } }