public GXDLMSProfileGenericColumnDlg( GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> target, GXDLMSObjectCollection list, string title) { Target = target; AllObjects = new GXDLMSObjectCollection(); AllObjects.AddRange(list); //Remove not needed objects. foreach (GXDLMSObject it in list.GetObjects(new ObjectType[] { ObjectType.AssociationLogicalName, ObjectType.AssociationShortName, ObjectType.ProfileGeneric })) { AllObjects.Remove(it); } InitializeComponent(); if (title != null) { this.Text = title; } foreach (GXDLMSObject it in AllObjects) { TargetCb.Items.Add(it); } if (Target.Key != null) { TargetCb.SelectedItem = AllObjects.FindByLN(Target.Key.ObjectType, Target.Key.LogicalName); } if (Target.Value != null) { IndexTB.Text = target.Value.AttributeIndex.ToString(); DataIndexTb.Text = target.Value.DataIndex.ToString(); } else { IndexTB.Text = "2"; DataIndexTb.Text = "0"; } }
/// <summary> /// Edit key table item. /// </summary> private void KeyTableEditBtn_Click(object sender, EventArgs e) { try { if (KeyTable.SelectedItems.Count != 0) { GXDLMSG3PlcMacSetup target = Target as GXDLMSG3PlcMacSetup; ListViewItem li = KeyTable.SelectedItems[0]; GXKeyValuePair <byte, byte[]> item = (GXKeyValuePair <byte, byte[]>)li.Tag; GXDLMSKeyTableDlg dlg = new GXDLMSKeyTableDlg(item); if (dlg.ShowDialog(this) == DialogResult.OK) { item.Key = dlg.id; item.Value = dlg.key; li.SubItems[0].Text = item.Key.ToString(); li.SubItems[1].Text = GXDLMSTranslator.ToHex(item.Value); Target.UpdateDirty(5, target.KeyTable); errorProvider1.SetError(KeyTable, Properties.Resources.ValueChangedTxt); } } } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Add new capture object. /// </summary> private void ColumnAddBtn_Click(object sender, EventArgs e) { try { GXDLMSCompactData target = Target as GXDLMSCompactData; GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> it = new GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject>(); GXDLMSProfileGenericColumnDlg dlg = new GXDLMSProfileGenericColumnDlg(it, target.Parent as GXDLMSObjectCollection, "Compact data capture object"); if (dlg.ShowDialog(this) == DialogResult.OK) { it = dlg.GetTarget(); ListViewItem li = CaptureObjectsLv.Items.Add(it.Key.ObjectType.ToString()); li.SubItems.Add(it.Key.LogicalName); li.SubItems.Add(it.Value.AttributeIndex.ToString()); li.Tag = it; target.CaptureObjects.Add(it); errorProvider1.SetError(CaptureObjectsLv, Properties.Resources.ValueChangedTxt); Target.UpdateDirty(3, target.CaptureObjects); } } catch (Exception ex) { DialogResult = DialogResult.None; MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Remove item from key table. /// </summary> private void KeyTableRemoveBtn_Click(object sender, EventArgs e) { try { while (KeyTable.SelectedItems.Count != 0) { GXKeyValuePair <byte, byte[]> item = (GXKeyValuePair <byte, byte[]>)KeyTable.SelectedItems[0].Tag; KeyTable.Items.Remove(KeyTable.SelectedItems[0]); GXDLMSG3PlcMacSetup target = Target as GXDLMSG3PlcMacSetup; target.KeyTable.Remove(item); errorProvider1.SetError(KeyTable, Properties.Resources.ValueChangedTxt); } } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Edit capture object. /// </summary> private void ColumnEditBtn_Click(object sender, EventArgs e) { try { if (CaptureObjectsLv.SelectedItems.Count == 1) { GXDLMSProfileGeneric target = Target as GXDLMSProfileGeneric; ListViewItem li = CaptureObjectsLv.SelectedItems[0]; GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> it = (GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject>)li.Tag; GXDLMSProfileGenericColumnDlg dlg = new GXDLMSProfileGenericColumnDlg(it, target.Parent as GXDLMSObjectCollection, null); if (dlg.ShowDialog(this) == DialogResult.OK) { //If user has change target object. if (it.Key != dlg.GetTarget().Key) { int pos = target.CaptureObjects.IndexOf(it); target.CaptureObjects.RemoveAt(pos); it = dlg.GetTarget(); target.CaptureObjects.Insert(pos, it); } else { it = dlg.GetTarget(); } li.SubItems[0].Text = it.Key.ObjectType.ToString(); li.SubItems[1].Text = it.Key.LogicalName; li.SubItems[2].Text = it.Value.AttributeIndex.ToString(); errorProvider1.SetError(CaptureObjectsLv, Properties.Resources.ValueChangedTxt); li.Tag = it; Target.UpdateDirty(3, target.CaptureObjects); } } } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Add new item to key table. /// </summary> private void KeyTableAddBtn_Click(object sender, EventArgs e) { try { GXKeyValuePair <byte, byte[]> item = new GXKeyValuePair <byte, byte[]>(); GXDLMSKeyTableDlg dlg = new GXDLMSKeyTableDlg(item); if (dlg.ShowDialog(this) == DialogResult.OK) { item.Key = dlg.id; item.Value = dlg.key; ListViewItem li = new ListViewItem(item.Key.ToString()); li.SubItems.Add(GXDLMSTranslator.ToHex(item.Value)); li.Tag = item; KeyTable.Items.Add(li); GXDLMSG3PlcMacSetup target = Target as GXDLMSG3PlcMacSetup; target.KeyTable.Add(item); errorProvider1.SetError(KeyTable, Properties.Resources.ValueChangedTxt); } } catch (Exception ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
internal static void Read(ILogger _logger, System.Net.Http.HttpClient client, GXDLMSReader reader, GXTask task, GXDLMSObject obj) { AddValue v; System.Net.Http.HttpResponseMessage response; if (_logger != null) { _logger.LogInformation("Reading: " + obj.ToString()); } Console.WriteLine("Reading: " + obj.ToString()); object val; if (obj.ObjectType == ObjectType.ProfileGeneric && task.Index == 2 && GetReadTime(task.Object) != DateTime.MinValue && IsSortedByDateTime(task.Object)) { //Add date time object so GXDLMSClient is not thrown an Capture objects not read-exception. GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject> p = new GXKeyValuePair <GXDLMSObject, GXDLMSCaptureObject>(new GXDLMSClock(), new GXDLMSCaptureObject(2, 0)); ((GXDLMSProfileGeneric)obj).CaptureObjects.Add(p); //Read profile generic using range. DateTime now = DateTime.Now; now = now.AddSeconds(-now.Second); now = now.AddMinutes(-now.Minute); now = now.AddHours(1); val = reader.ReadRowsByRange((GXDLMSProfileGeneric)obj, task.Object.Attributes[GetBufferIndex(task.Object)].Read, now); } else { val = reader.Read(obj, task.Index); } if (val is Enum) { //Enum values are saved as interger. val = Convert.ToString(Convert.ToInt32(val)); } else if (val is byte[]) { DataType dt = (DataType)task.Object.Attributes[GetBufferIndex(task.Object)].UIDataType; if (dt == DataType.String) { val = ASCIIEncoding.ASCII.GetString((byte[])val); } else if (dt == DataType.StringUTF8) { val = ASCIIEncoding.UTF8.GetString((byte[])val); } else { val = GXCommon.ToHex((byte[])val); } } else if (val is GXDateTime) { val = ((GXDateTime)val).ToFormatString(); } else if (val is string) { val = (val as string).Replace("\0", ""); } if (obj.ObjectType == ObjectType.ProfileGeneric && task.Index == 2) { //Make own value from each row. if (val != null) { UInt64 attributeId = task.Object.Attributes[GetBufferIndex(task.Object)].Id; List <GXValue> list = new List <GXValue>(); DateTime latest = task.Object.Attributes[GetBufferIndex(task.Object)].Read; DateTime first = latest; int period = -1; foreach (GXStructure row in (GXArray)val) { bool read = false; DateTime dt = DateTime.MinValue; task.Data = GXDLMSTranslator.ValueToXml(row); for (int pos = 0; pos != row.Count; ++pos) { if (row[pos] is byte[]) { row[pos] = GXDLMSClient.ChangeType((byte[])row[pos], DataType.DateTime); if (pos == 0) { dt = ((GXDateTime)row[pos]).Value.LocalDateTime; //If we have already read this row. if (dt <= first) { read = true; break; } if (dt > latest) { latest = dt; } } } //Some meters are returning null as date time to save bytes... if (pos == 0 && row[pos] == null) { if (period == -1) { period = GetCapturePeriod(task.Object); if (period == -1) { throw new Exception("Invalid capture period."); } } row[pos] = latest.AddMinutes(period); } } if (_logger != null) { _logger.LogInformation("Read: " + task.Data); } if (!read) { list.Add(new GXValue() { Read = dt, Value = task.Data, AttributeId = attributeId }); } } if (list.Count != 0) { v = new AddValue() { Items = list.ToArray() }; response = client.PostAsJsonAsync(Startup.ServerAddress + "/api/value/AddValue", v).Result; Helpers.CheckStatus(response); ListDevicesResponse r = response.Content.ReadAsAsync <ListDevicesResponse>().Result; } } } else { if (!(val is string)) { val = Convert.ToString(val); } task.Data = (string)val; if (_logger != null) { _logger.LogInformation("Read: " + (string)val); } int index = GetAttributeIndex(task.Object, task.Index); if (index != -1) { UInt64 attributeId = task.Object.Attributes[index].Id; v = new AddValue() { Items = new GXValue[] { new GXValue() { AttributeId = attributeId, Read = DateTime.Now, Value = (string)val } } }; response = client.PostAsJsonAsync(Startup.ServerAddress + "/api/value/AddValue", v).Result; Helpers.CheckStatus(response); AddValueResponse r = response.Content.ReadAsAsync <AddValueResponse>().Result; } else { if (_logger != null) { _logger.LogInformation("Invalid task index: " + task.Index); } } } }
public GXDLMSKeyTableDlg(GXKeyValuePair <byte, byte[]> item) { InitializeComponent(); IdTb.Text = item.Key.ToString(); KeyTb.Text = GXDLMSTranslator.ToHex(item.Value); }