public void UpdateStateRequestsInterruptWhenButtonPressed() { var inputRegister = new InputRegister(); var memory = new Memory(); inputRegister.UpdateState(InputRegister.Keys.Down, memory); Assert.Equal(0x10, memory.ReadByte(0xFF0F) & 0x1F); Assert.Equal(InputRegister.Keys.Down, inputRegister.CurrentState); }
public void UpdateStateDoesNotRequestsInterruptWhenButtonReleased() { var inputRegister = new InputRegister(); var memory = new Memory(); inputRegister.CurrentState = InputRegister.Keys.A | InputRegister.Keys.Start; inputRegister.UpdateState(InputRegister.Keys.None, memory); Assert.Equal(0x0, memory.ReadByte(0xFF0F) & 0x1F); Assert.Equal(InputRegister.Keys.None, inputRegister.CurrentState); }
/// <summary> /// Add a listener for a key press /// </summary> /// <param name="a_KeyCode">Key to listen for</param> /// <param name="a_KeyState">Key state to listen for</param> /// <param name="a_Callback">Callback to fire</param> public void AddKeyListener(KeyCode a_KeyCode, eKeyState a_KeyState, Action <KeyCode, eKeyState> a_Callback) { if (KeyListenerList != null) { InputRegister reg = null; reg = KeyListenerList.Find(r => r.Keycode == a_KeyCode); if (reg == null) { KeyListenerList.Add(new InputRegister(a_KeyCode, a_KeyState, a_Callback)); } } }
public void AddDragListener(Rect a_Rect, Action <float, Vector3, Vector3> a_Callback) { if (DragListenerList != null) { Rect dragRect = a_Rect; InputRegister reg = null; reg = DragListenerList.Find(r => r.DragRect == dragRect); if (reg == null) { DragListenerList.Add(new InputRegister(dragRect, a_Callback)); } } }
/// <summary> /// Add a listener for any touch event within a certain section of the screen. /// Only registers the first touch /// </summary> /// <param name="a_Rect">Rectangle to check touch within</param> /// <param name="a_Callback">Callback to fire</param> public void AddTouchListener(Rect a_Rect, Action <Rect, Vector2, int> a_Callback) { if (TouchListenerList != null) { Rect touchRect = a_Rect; InputRegister reg = null; reg = TouchListenerList.Find(r => r.TouchRect == touchRect); if (reg == null) { TouchListenerList.Add(new InputRegister(touchRect, a_Callback)); } } }
/// <summary> /// Add a listener for any touch event on the whole screen. Only registers the first touch /// </summary> /// <param name="a_Callback">Callback to fire</param> public void AddFullScreenTouchListener(Action <Rect, Vector2, int> a_Callback) { if (TouchListenerList != null) { Rect touchRect = new Rect(0f, 0f, Screen.width, Screen.height); InputRegister reg = null; reg = TouchListenerList.Find(r => r.TouchRect == touchRect); if (reg == null) { TouchListenerList.Add(new InputRegister(touchRect, a_Callback)); } } }
/// <summary> /// Remove the listener for a key /// </summary> /// <param name="a_KeyCode">Key to no longer listen for</param> public void RemoveKeyListener(KeyCode a_KeyCode) { if (KeyListenerList != null) { InputRegister reg = null; reg = KeyListenerList.Find(r => r.Keycode == a_KeyCode); if (reg != null) { reg = null; } KeyListenerList.RemoveAll(r => r.Keycode == a_KeyCode); } }
public void AddFullScreenDragListener(Action <float, Vector3, Vector3> a_Callback) { if (DragListenerList != null) { Rect dragRect = new Rect(0f, 0f, Screen.width, Screen.height); InputRegister reg = null; reg = DragListenerList.Find(r => r.DragRect == dragRect); if (reg == null) { DragListenerList.Add(new InputRegister(dragRect, a_Callback)); } } }
/// <summary> /// Add a listener for any touch event within a certain section of the screen at a certain touch phase. /// Only registers the first touch /// </summary> /// <param name="a_Rect">Rectangle to check touch within</param> /// <param name="a_TouchPhase">Touch Phase to monitor</param> /// <param name="a_Callback">Callback to fire</param> public void AddTouchListener(Rect a_Rect, TouchPhase a_TouchPhase, Action <Rect, Vector2, int> a_Callback) { if (TouchListenerList != null) { Rect touchRect = a_Rect; TouchPhase touchPhase = a_TouchPhase; InputRegister reg = null; reg = TouchListenerList.Find(r => r.TouchRect == touchRect && r.TouchPhase == (int)touchPhase); if (reg == null) { TouchListenerList.Add(new InputRegister(touchRect, touchPhase, a_Callback)); } } }
/// <summary> /// Remove the listener for the full screen Touch region /// </summary> public void RemoveFullScreenTouchListener() { if (TouchListenerList != null) { Rect touchRect = new Rect(0f, 0f, Screen.width, Screen.height); InputRegister reg = null; reg = TouchListenerList.Find(r => r.TouchRect == touchRect); if (reg != null) { reg = null; } TouchListenerList.RemoveAll(r => r.TouchRect == touchRect); } }
/// <summary> /// Remove the listener for a Touch region /// </summary> /// <param name="a_KeyCode">Touch region to no longer listen for</param> public void RemoveTouchListener(Rect a_TouchRegion) { if (TouchListenerList != null) { Rect touchRect = a_TouchRegion; InputRegister reg = null; reg = TouchListenerList.Find(r => r.TouchRect == touchRect); if (reg != null) { reg = null; } TouchListenerList.RemoveAll(r => r.TouchRect == touchRect); } }
public void RemoveDragListener(Rect a_DragRegion) { if (DragListenerList != null) { Rect dragRect = a_DragRegion; InputRegister reg = null; reg = DragListenerList.Find(r => r.DragRect == dragRect); if (reg != null) { reg = null; } DragListenerList.RemoveAll(r => r.DragRect == dragRect); } }
public void RemoveFullScreenDragListener() { if (DragListenerList != null) { Rect dragRect = new Rect(0f, 0f, Screen.width, Screen.height); InputRegister reg = null; reg = DragListenerList.Find(r => r.DragRect == dragRect); if (reg != null) { reg = null; } DragListenerList.RemoveAll(r => r.DragRect == dragRect); } }
/// <summary> /// Remove the listener for a Touch region and a Touch Phase /// </summary> /// <param name="a_TouchRegion">Touch region to no longer listen for</param> /// <param name="a_TouchPhase">Touch Phase of the registered region</param> public void RemoveTouchListener(Rect a_TouchRegion, TouchPhase a_TouchPhase) { if (TouchListenerList != null) { Rect touchRect = a_TouchRegion; TouchPhase touchPhase = a_TouchPhase; InputRegister reg = null; reg = TouchListenerList.Find(r => r.TouchRect == touchRect && r.TouchPhase == (int)touchPhase); if (reg != null) { reg = null; } TouchListenerList.RemoveAll(r => r.TouchRect == touchRect && r.TouchPhase == (int)touchPhase); } }
public ActionResult Register(InputRegister input) { if (IsGetRequest) { return(View()); } var result = new BaseOutput(); var repo = GetRepo <User>(); if (!(IsUserNameMatch(input.UserName) || IsPhoneMatch(input.Mobile))) { SetResponse(s => s.NameNotValid, input, result); } else if (string.IsNullOrEmpty(input.Pwd)) { SetResponse(s => s.PwdEmpty, input, result); } else if (repo.GetFiltered(f => f.UserName == input.UserName).Any()) { SetResponse(s => s.NameExist, input, result); } else { if (string.IsNullOrEmpty(input.Email) || IsEmailMatch(input.Email)) { var model = DynamicMap <User>(input); model.Pwd = SHAEncrypt.SHA1(input.Pwd); model.CreatedAt = DateTime.Now; model.ModifiedAt = DateTime.Now; repo.Add(model); SetResponse(s => s.Success, input, result); } else { SetResponse(s => s.EmailFormatNotMatch, input, result); } } return(JsonNet(result)); }
//--------------------------------------------------------------------------- private void AddInputRegister() { UInt16 address; Device device; InputRegister register; device = (Device)_BindingSourceDevicesList.Current; for (address = 0; address <= UInt16.MaxValue; address++) { if (!device.InputRegisters.Contains(address)) { register = new InputRegister(address, 0, String.Empty); device.InputRegisters.Add(register); _BindingSourceDevicesList.ResetCurrentItem(); if (device.InputRegisters.Count > 0) { _ToolStripMenuItemRemoveInputRegister.Enabled = true; } if (device.InputRegisters.Count == UInt16.MaxValue) { _ToolStripMenuItemAddInputRegister.Enabled = false; } return; } } throw new InvalidOperationException( "Не удалось добавить новый input register в устройство, все адреса заняты"); }
public override void CreateWindow () { //Console.WriteLine(string.Format("Create Display Window ({0}x{1})", Width, Height)); if (window != null) { throw new Exception ("Window Already Created."); } window = new OpenTKGameWindow (Width, Height); //Console.WriteLine("Create Display Window - Instance Created"); window.Title = Title; window.Keyboard.KeyDown += new EventHandler<OpenTK.Input.KeyboardKeyEventArgs> (OnKeyDownHandler); window.Keyboard.KeyUp += new EventHandler<OpenTK.Input.KeyboardKeyEventArgs> (OnKeyUpHandler); //window.Closing += new EventHandler<System.ComponentModel.>(OnClosingHandler); window.Closed += new EventHandler<EventArgs> (OnClosedHandler); window.Resize += new EventHandler<EventArgs> (OnResizeHandler); window.Mouse.Move += new EventHandler<OpenTK.Input.MouseMoveEventArgs> (OnMouseMoveHandler); window.Mouse.ButtonDown += new EventHandler<OpenTK.Input.MouseButtonEventArgs> (OnMouseButtonDownHandler); window.Mouse.ButtonUp += new EventHandler<OpenTK.Input.MouseButtonEventArgs> (OnMouseButtonUpHandler); //Console.WriteLine("Create Display Window - Events Registered"); inputRegister = new InputRegister (); }
/// <summary> /// Создаёт контроллер сети Modbus из файла конфигурации сети /// </summary> /// <param name="pathToXmlFile">Путь + название файла конфигурации сети *.xml</param> /// <param name="pathToXsdFile">Путь + название файла файла схемы для файла конфигурации *.xsd</param> /// <returns>Если возникла ошибка возвращается null, если процесс создания /// успешно завершён возвращается контроллер сети</returns> public static NetworkController Create(String pathToXmlFile, String pathToXsdFile) { XmlReaderSettings xmlrdsettings; XmlReader reader; NetworkController network; Device device; Coil coil; DiscreteInput dinput; HoldingRegister hregister; InputRegister iregister; File file; Record record; List<Device> devices; String networkName; networkName = String.Empty; devices = new List<Device>(); xmlrdsettings = new XmlReaderSettings(); xmlrdsettings.IgnoreComments = true; xmlrdsettings.IgnoreWhitespace = true; xmlrdsettings.Schemas.Add("", pathToXsdFile); xmlrdsettings.ValidationType = ValidationType.Schema; //xmlrdsettings.ValidationEventHandler += // new ValidationEventHandler(EventHandler_vr_ValidationEventHandler); reader = XmlReader.Create(pathToXmlFile, xmlrdsettings); try { while(reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (!reader.IsEmptyElement) { switch (reader.Name) { case "Network": { if (reader.HasAttributes) { // Получаем наименование сети networkName = reader.GetAttribute("Name"); //network.NetworkName = reader.GetAttribute("Name"); } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент Network не имеет свойства Name", reader.Settings.LineNumberOffset.ToString())); } break; } case "Device": { if (reader.HasAttributes) { device = new Device(Byte.Parse(reader.GetAttribute("Address"))); device.Description = reader.GetAttribute("Description"); device.Status = (Status)Enum.Parse(typeof(Status), reader.GetAttribute("Status")); //network.Devices.Add(device); devices.Add(device); } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент Device не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "Coil": { if (reader.HasAttributes) { Boolean value; UInt16 address = UInt16.Parse(reader.GetAttribute("Address")); reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); value = Boolean.Parse(reader.Value); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Coil не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Coil содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } reader.Read(); // EndElement Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Description") { reader.Read(); coil = new Coil(address, value, reader.Value); //network.Devices[network.Devices.Count - 1].Coils.Add(coil); devices[devices.Count - 1].Coils.Add(coil); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Coil не содержит элемент Description", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Coil содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент Coil не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "DiscreteInput": { if (reader.HasAttributes) { Boolean value; UInt16 address = UInt16.Parse(reader.GetAttribute("Address")); reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); value = Boolean.Parse(reader.Value); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент DiscreteInput не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент DiscreteInput содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } reader.Read(); // EndElement Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Description") { reader.Read(); dinput = new DiscreteInput(address, value, reader.Value); //network.Devices[network.Devices.Count - 1].DiscretesInputs.Add(dinput); devices[devices.Count - 1].DiscretesInputs.Add(dinput); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент DiscreteInput не содержит элемент Description", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент DiscreteInput содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент DiscreteInput не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "HoldingRegister": { if (reader.HasAttributes) { UInt16 value; UInt16 address = UInt16.Parse(reader.GetAttribute("Address")); reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); value = UInt16.Parse(reader.Value); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент HoldingRegister не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент HoldingRegister содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } reader.Read(); // EndElement Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Description") { reader.Read(); hregister = new HoldingRegister(address, value, reader.Value); //network.Devices[network.Devices.Count - 1].HoldingRegisters.Add(hregister); devices[devices.Count - 1].HoldingRegisters.Add(hregister); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент HoldingRegister не содержит элемент Description", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент HoldingRegister содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент HoldingRegister не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "InputRegister": { if (reader.HasAttributes) { UInt16 value; UInt16 address = UInt16.Parse(reader.GetAttribute("Address")); reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); value = UInt16.Parse(reader.Value); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент InputRegister не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент InputRegister содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } reader.Read(); // EndElement Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Description") { reader.Read(); iregister = new InputRegister(address, value, reader.Value); //network.Devices[network.Devices.Count - 1].InputRegisters.Add(iregister); devices[devices.Count - 1].InputRegisters.Add(iregister); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент InputRegister не содержит элемент Description", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент InputRegister содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент InputRegister не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "File": { file = new File(UInt16.Parse(reader.GetAttribute("Number")), reader.GetAttribute("Description")); //network.Devices[network.Devices.Count - 1].Files.Add(file); devices[devices.Count - 1].Files.Add(file); break; } case "Record": { UInt16 number = UInt16.Parse(reader.GetAttribute("Number")); String description = reader.GetAttribute("Description"); // Вычитываем следующий элемент. Это долно быть Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); record = new Record(number, UInt16.Parse(reader.Value), description); //device = network.Devices[network.Devices.Count - 1]; //device.Files[device.Files.Count - 1].Records.Add(record); device = devices[devices.Count - 1]; device.Files[device.Files.Count - 1].Records.Add(record); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Record не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Record содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } break; } } } } // End of if (reader.NodeType == XmlNodeType.Element) } // End of while(reader.Read()) } //catch (XmlException ex) //{ // if (reader != null) // { // reader.Close(); // } // throw; //} catch //(Exception ex) { if (reader != null) { reader.Close(); } throw; } finally { if (reader != null) { reader.Close(); } } // Создаём сеть из полученных данных network = new NetworkController(networkName, null); foreach (Device item in devices) { network.Devices.Add(item); } return network; }
/// <summary> /// Создаёт контроллер сети Modbus из файла конфигурации сети /// </summary> /// <param name="pathToXmlFile">Путь + название файла конфигурации сети *.xml</param> /// <param name="pathToXsdFile">Путь + название файла файла схемы для файла конфигурации *.xsd</param> /// <returns>Если возникла ошибка возвращается null, если процесс создания /// успешно завершён возвращается контроллер сети</returns> public static NetworkController Create(String pathToXmlFile, String pathToXsdFile) { XmlReaderSettings xmlrdsettings; XmlReader reader; NetworkController network; Device device; Coil coil; DiscreteInput dinput; HoldingRegister hregister; InputRegister iregister; File file; Record record; List <Device> devices; String networkName; networkName = String.Empty; devices = new List <Device>(); xmlrdsettings = new XmlReaderSettings(); xmlrdsettings.IgnoreComments = true; xmlrdsettings.IgnoreWhitespace = true; xmlrdsettings.Schemas.Add("", pathToXsdFile); xmlrdsettings.ValidationType = ValidationType.Schema; //xmlrdsettings.ValidationEventHandler += // new ValidationEventHandler(EventHandler_vr_ValidationEventHandler); reader = XmlReader.Create(pathToXmlFile, xmlrdsettings); try { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (!reader.IsEmptyElement) { switch (reader.Name) { case "Network": { if (reader.HasAttributes) { // Получаем наименование сети networkName = reader.GetAttribute("Name"); //network.NetworkName = reader.GetAttribute("Name"); } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент Network не имеет свойства Name", reader.Settings.LineNumberOffset.ToString())); } break; } case "Device": { if (reader.HasAttributes) { device = new Device(Byte.Parse(reader.GetAttribute("Address"))); device.Description = reader.GetAttribute("Description"); device.Status = (Status)Enum.Parse(typeof(Status), reader.GetAttribute("Status")); //network.Devices.Add(device); devices.Add(device); } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент Device не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "Coil": { if (reader.HasAttributes) { Boolean value; UInt16 address = UInt16.Parse(reader.GetAttribute("Address")); reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); value = Boolean.Parse(reader.Value); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Coil не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Coil содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } reader.Read(); // EndElement Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Description") { reader.Read(); coil = new Coil(address, value, reader.Value); //network.Devices[network.Devices.Count - 1].Coils.Add(coil); devices[devices.Count - 1].Coils.Add(coil); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Coil не содержит элемент Description", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Coil содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент Coil не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "DiscreteInput": { if (reader.HasAttributes) { Boolean value; UInt16 address = UInt16.Parse(reader.GetAttribute("Address")); reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); value = Boolean.Parse(reader.Value); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент DiscreteInput не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент DiscreteInput содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } reader.Read(); // EndElement Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Description") { reader.Read(); dinput = new DiscreteInput(address, value, reader.Value); //network.Devices[network.Devices.Count - 1].DiscretesInputs.Add(dinput); devices[devices.Count - 1].DiscretesInputs.Add(dinput); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент DiscreteInput не содержит элемент Description", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент DiscreteInput содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент DiscreteInput не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "HoldingRegister": { if (reader.HasAttributes) { UInt16 value; UInt16 address = UInt16.Parse(reader.GetAttribute("Address")); reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); value = UInt16.Parse(reader.Value); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент HoldingRegister не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент HoldingRegister содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } reader.Read(); // EndElement Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Description") { reader.Read(); hregister = new HoldingRegister(address, value, reader.Value); //network.Devices[network.Devices.Count - 1].HoldingRegisters.Add(hregister); devices[devices.Count - 1].HoldingRegisters.Add(hregister); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент HoldingRegister не содержит элемент Description", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент HoldingRegister содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент HoldingRegister не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "InputRegister": { if (reader.HasAttributes) { UInt16 value; UInt16 address = UInt16.Parse(reader.GetAttribute("Address")); reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); value = UInt16.Parse(reader.Value); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент InputRegister не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент InputRegister содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } reader.Read(); // EndElement Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Description") { reader.Read(); iregister = new InputRegister(address, value, reader.Value); //network.Devices[network.Devices.Count - 1].InputRegisters.Add(iregister); devices[devices.Count - 1].InputRegisters.Add(iregister); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент InputRegister не содержит элемент Description", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент InputRegister содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}.Элемент InputRegister не имеет свойств", reader.Settings.LineNumberOffset.ToString())); } break; } case "File": { file = new File(UInt16.Parse(reader.GetAttribute("Number")), reader.GetAttribute("Description")); //network.Devices[network.Devices.Count - 1].Files.Add(file); devices[devices.Count - 1].Files.Add(file); break; } case "Record": { UInt16 number = UInt16.Parse(reader.GetAttribute("Number")); String description = reader.GetAttribute("Description"); // Вычитываем следующий элемент. Это долно быть Value reader.Read(); if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Value") { reader.Read(); record = new Record(number, UInt16.Parse(reader.Value), description); //device = network.Devices[network.Devices.Count - 1]; //device.Files[device.Files.Count - 1].Records.Add(record); device = devices[devices.Count - 1]; device.Files[device.Files.Count - 1].Records.Add(record); } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Record не содержит элемент Value", reader.Settings.LineNumberOffset.ToString())); } } else { throw new Exception(String.Format( "Ошибка в строке {0}. Элемент Record содержит элемент недопустимого типа", reader.Settings.LineNumberOffset.ToString())); } break; } } } } // End of if (reader.NodeType == XmlNodeType.Element) } // End of while(reader.Read()) } //catch (XmlException ex) //{ // if (reader != null) // { // reader.Close(); // } // throw; //} catch //(Exception ex) { if (reader != null) { reader.Close(); } throw; } finally { if (reader != null) { reader.Close(); } } // Создаём сеть из полученных данных network = new NetworkController(networkName, null); foreach (Device item in devices) { network.Devices.Add(item); } return(network); }