Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 2
0
        //---------------------------------------------------------------------------
        private void AddDiscreteInput()
        {
            UInt16 address;
            Device device;
            DiscreteInput input;

            device = (Device)_BindingSourceDevicesList.Current;

            for (address = 0; address <= UInt16.MaxValue; address++)
            {
                if (!device.DiscretesInputs.Contains(address))
                {
                    input = new DiscreteInput(address, false, String.Empty);
                    device.DiscretesInputs.Add(input);
                    _BindingSourceDevicesList.ResetCurrentItem();

                    if (device.DiscretesInputs.Count > 0)
                    {
                        _ToolStripMenuItemRemoveDiscreteInput.Enabled = true;
                    }
                    if (device.DiscretesInputs.Count == UInt16.MaxValue)
                    {
                        _ToolStripMenuItemAddDiscreteInput.Enabled = false;
                    }
                    return;
                }
            }
            throw new InvalidOperationException(
                "Не удалось добавить новый discrete input в устройство, все адреса заняты");
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Sets a discrete input of a device.
 /// </summary>
 /// <param name="deviceId">The device id.</param>
 /// <param name="discreteInput">The discrete input to set.</param>
 public void SetDiscreteInput(byte deviceId, DiscreteInput discreteInput)
 {
     SetDiscreteInput(deviceId, discreteInput.Address, discreteInput.Value);
 }
Ejemplo n.º 5
0
        public void Update(DiscreteInput input)
        {
            switch (input)
            {
            case DiscreteInput.ToggleFollowMode:
                FollowMode = !FollowMode;
                _message.ShowMessage($"Follow mode is {(FollowMode ? "ON" : "OFF")}");
                FollowModeChanged?.Invoke(this, EventArgs.Empty);
                break;

            case DiscreteInput.ToggleRotateMode:
                RotateMode = !RotateMode;
                _message.ShowMessage($"Rotate mode is {(RotateMode ? "ON" : "OFF")}");
                RotateModeChanged?.Invoke(this, EventArgs.Empty);
                break;

            case DiscreteInput.ToggleLineAntiAliasing:
                DrawAntiAliased = !DrawAntiAliased;
                _message.ShowMessage($"Draw antialiased lines is {(DrawAntiAliased ? "ON" : "OFF")}");
                DrawAntiAliasedModeChanged?.Invoke(this, EventArgs.Empty);
                break;

            case DiscreteInput.ToggleShowRenderTime:
                ShowRenderTime = !ShowRenderTime;
                ShowRenderTimeChanged?.Invoke(this, EventArgs.Empty);
                break;

            case DiscreteInput.SwitchRenderer:
                Renderer = Renderer.Next();
                RendererChanged?.Invoke(this, EventArgs.Empty);
                break;

            case DiscreteInput.ToggleOverheadMap:
                if (Renderer == RendererType.FirstPerson)
                {
                    Renderer = RendererType.Overhead;
                    RendererChanged?.Invoke(this, EventArgs.Empty);
                }
                else if (Renderer == RendererType.Overhead)
                {
                    Renderer = RendererType.FirstPerson;
                    RendererChanged?.Invoke(this, EventArgs.Empty);
                }
                break;

            case DiscreteInput.DecreaseRenderFidelity:
            {
                var oldScale = RenderScale;
                RenderScale = RenderScale.DecreaseFidelity();
                if (oldScale != RenderScale)
                {
                    RenderScaleChanged?.Invoke(this, EventArgs.Empty);
                }
            }
            break;

            case DiscreteInput.IncreaseRenderFidelity:
            {
                var oldScale = RenderScale;
                RenderScale = RenderScale.IncreaseFidelity();
                if (oldScale != RenderScale)
                {
                    RenderScaleChanged?.Invoke(this, EventArgs.Empty);
                }
            }
            break;

            default:
                break;
            }
        }