Exemple #1
0
 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);
     }
 }
Exemple #4
0
 /// <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);
     }
 }
Exemple #5
0
 /// <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);
     }
 }
Exemple #6
0
 /// <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);
     }
 }
Exemple #7
0
        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);
 }