Exemplo n.º 1
0
        /// <summary>
        /// Parse discover reply.
        /// </summary>
        /// <param name="value"></param>
        /// <returns>Array of system titles and alarm descriptor error code</returns>
        public List <GXDLMSPlcMeterInfo> ParseDiscover(GXByteBuffer value, UInt16 sa, UInt16 da)
        {
            List <GXDLMSPlcMeterInfo> list = new List <GXDLMSPlcMeterInfo>();
            byte count = value.GetUInt8();

            for (int pos = 0; pos != count; ++pos)
            {
                GXDLMSPlcMeterInfo info = new GXDLMSPlcMeterInfo();
                info.SourceAddress      = sa;
                info.DestinationAddress = da;
                //Get System title.
                if (settings.InterfaceType == Enums.InterfaceType.PlcHdlc)
                {
                    info.SystemTitle = new byte[8];
                }
                else
                {
                    info.SystemTitle = new byte[6];
                }
                value.Get(info.SystemTitle);
                // Alarm descriptor of the reporting system.
                // Alarm-Descriptor presence flag
                if (value.GetUInt8() != 0)
                {
                    //Alarm-Descriptor
                    info.AlarmDescriptor = value.GetUInt8();
                }
                list.Add(info);
            }
            return(list);
        }
Exemplo n.º 2
0
 private void MetersView_SelectedIndexChanged(object sender, EventArgs e)
 {
     if (media != null && !media.IsOpen && MetersView.SelectedItems.Count == 1)
     {
         ListViewItem       li = MetersView.SelectedItems[0];
         GXDLMSPlcMeterInfo mi = (GXDLMSPlcMeterInfo)li.Tag;
         RegisterMnu2.Enabled    = RegisterMnu.Enabled = mi.SourceAddress == (UInt16)PlcSourceAddress.New;
         CreateDeviceMnu.Enabled = !RegisterMnu2.Enabled;
     }
     else
     {
         RegisterMnu2.Enabled = RegisterMnu.Enabled = CreateDeviceMnu.Enabled = false;
     }
 }
Exemplo n.º 3
0
 private void CreateDeviceMnu_Click(object sender, EventArgs e)
 {
     try
     {
         if (MetersView.SelectedItems.Count == 1)
         {
             ListViewItem       li  = MetersView.SelectedItems[0];
             GXDLMSPlcMeterInfo mi  = (GXDLMSPlcMeterInfo)li.Tag;
             GXDLMSDevice       dev = new GXDLMSDevice();
             //Set empty name or new device is created.
             dev.Name = "";
             if (media is GXNet)
             {
                 dev.Media = new GXNet();
             }
             else if (media is GXSerial)
             {
                 dev.Media = new GXSerial();
             }
             dev.Media.Settings = media.Settings;
             if (!string.IsNullOrEmpty(Settings.Default.SelectedManufacturer))
             {
                 foreach (var it in _parent.Manufacturers)
                 {
                     if (it.Name == Settings.Default.SelectedManufacturer)
                     {
                         dev.Manufacturer = it.Identification;
                         dev.UseLogicalNameReferencing = it.UseLogicalNameReferencing;
                         break;
                     }
                 }
             }
             if (string.IsNullOrEmpty(dev.Manufacturer))
             {
                 //Select Gurux as default manufacturer.
                 dev.Manufacturer = "grx";
                 dev.UseLogicalNameReferencing = true;
             }
             dev.Conformance           = (int)GXDLMSClient.GetInitialConformance(dev.UseLogicalNameReferencing);
             dev.MacDestinationAddress = mi.SourceAddress;
             dev.MACSourceAddress      = mi.DestinationAddress;
             dev.InterfaceType         = (InterfaceType)Settings.Default.PlcInterface;
             _parent.AddDevice(dev);
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(_parent, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Exemplo n.º 4
0
 /// <summary>
 /// Register selected meters.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void RegisterMnu_Click(object sender, EventArgs e)
 {
     try
     {
         if (MetersView.SelectedItems.Count == 1)
         {
             ListViewItem       li  = MetersView.SelectedItems[0];
             GXDLMSPlcMeterInfo mi  = (GXDLMSPlcMeterInfo)li.Tag;
             GXPlcRegisterDlg   dlg = new GXPlcRegisterDlg(GXDLMSTranslator.HexToBytes(Settings.Default.PlcSerialSettingsActiveInitiator), mi.SystemTitle);
             if (dlg.ShowDialog(this) == DialogResult.OK)
             {
                 GXDLMSDevice dev = new GXDLMSDevice(media);
                 dev.Comm.client.InterfaceType = (InterfaceType)Settings.Default.PlcInterface;
                 media.Open();
                 GXReplyData reply = new GXReplyData();
                 dev.Comm.client.Plc.MacSourceAddress = dlg.MacAddress;
                 Settings.Default.PlcSerialSettingsActiveInitiator = GXDLMSTranslator.ToHex(dlg.ActiveInitiatorSystemTitle);
                 byte[] data = dev.Comm.client.Plc.RegisterRequest(dlg.ActiveInitiatorSystemTitle, dlg.NewSystemTitle);
                 dev.Comm.ReadDLMSPacket(data, reply);
                 data = dev.Comm.client.Plc.DiscoverRequest();
                 dev.Comm.ReadDLMSPacket(data, reply);
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
     finally
     {
         try
         {
             media.Close();
         }
         catch (Exception ex)
         {
             MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
         }
     }
 }