/// <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); }
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; } }
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); } }
/// <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); } } }