예제 #1
0
        public static LED7DisplaysDictionary Load(XmlNode xml)
        {
            __instance          = new LED7DisplaysDictionary();
            __instance._default = (byte)(int.Parse(xml.Attributes["default"].Value) & 0xff);
            __instance._dot     = (byte)(int.Parse(xml.Attributes["dot"].Value) & 0xff);
            XmlNodeList nodes = xml.SelectNodes("dotChars/char");

            foreach (XmlNode node in nodes)
            {
                char c = node.Attributes["chr"].Value[0];
                if (!__instance._charsForDots.Contains(c))
                {
                    __instance._charsForDots.Add(c);
                }
            }
            nodes = xml.SelectNodes("char");
            foreach (XmlNode node in nodes)
            {
                byte v = (byte)(int.Parse(node.Attributes["value"].Value) & 0xff);
                char c = node.Attributes["chr"].Value[0];
                if (!__instance._charDictionary.ContainsKey(c))
                {
                    __instance._charDictionary.Add(c, v);
                }
            }
            return(__instance);
        }
        public static ModulesConfiguration Load()
        {
            if (__instance == null)
            {
                if (!File.Exists(ConfigurationFilePath))
                {
                    throw new FileNotFoundException(ConfigurationFilePath);
                }
                ModulesConfiguration c   = new ModulesConfiguration();
                XmlDocument          xml = new XmlDocument();
                xml.Load(ConfigurationFilePath);

                // zmienna pomocnicza
                Device f = null;


                // wczytanie urządzeń
                List <Device> devices = new List <Device>();
                XmlNodeList   nodes   = xml.SelectNodes("configuration/devices/device");
                foreach (XmlNode node in nodes)
                {
                    Device d = Device.Load(node);
                    f = devices.Find(delegate(Device o)
                    {
                        return(o.Id == d.Id);
                    });
                    if (f == null)
                    {
                        devices.Add(Device.Load(node));
                    }
                    else
                    {
                        throw new Exception("Istnieje już urządzenie o identyfikatorze '" + d.Id + "'.");
                    }
                }

                c.Devices = devices.ToArray();


                // wczytanie konfiguracji wyjść cyfrowych
                List <DigitalOutput> outputs = new List <DigitalOutput>();
                nodes = xml.SelectNodes("configuration/digitalOutputs/output");
                foreach (XmlNode node in nodes)
                {
                    DigitalOutput output = DigitalOutput.Load(node);

                    // znalezienie urządzenia

                    f = devices.Find(delegate(Device o)
                    {
                        return(o.Id == output.DeviceId);
                    });
                    if (f == null)
                    {
                        throw new Exception("Konfiguracja nie zawiera informacji o urządzeniu z identyfikatorem '" + output.DeviceId + "'.");
                    }

                    output.Device = f;

                    outputs.Add(output);
                }
                c.DigitalOutputs = outputs.ToArray();

                // wczytanie konfiguracji zbiorów wyjść cyfrowych
                nodes = xml.SelectNodes("configuration/digitalOutputs/outputSet");
                foreach (XmlNode node in nodes)
                {
                    DigitalOutputSet dos = DigitalOutputSet.Load(c.DigitalOutputs, node);
                    outputs.Add(dos);
                }
                c.DigitalOutputs = outputs.ToArray();


                // wczytanie konfiguracji wejść cyfrowych
                List <DigitalInput> inputs = new List <DigitalInput>();
                nodes = xml.SelectNodes("configuration/digitalInputs/input");
                foreach (XmlNode node in nodes)
                {
                    DigitalInput input = DigitalInput.Load(node);

                    // znalezienie urządzenia

                    f = devices.Find(delegate(Device o)
                    {
                        return(o.Id == input.DeviceId);
                    });
                    if (f == null)
                    {
                        throw new Exception("Konfiguracja nie zawiera informacji o urządzeniu z identyfikatorem '" + input.DeviceId + "'.");
                    }

                    input.Device = f;

                    inputs.Add(input);
                }

                c.DigitalInputs = inputs.ToArray();

                // wczytanie konfiguracji enkoderów
                List <Encoder> encoders = new List <Encoder>();
                nodes = xml.SelectNodes("configuration/encoders/encoder");
                foreach (XmlNode node in nodes)
                {
                    Encoder e = Encoder.Load(c.DigitalInputs, node);
                    encoders.Add(e);
                }
                c.Encoders = encoders.ToArray();

                // wczytanie konfiguracji wyświetlaczy 7-led
                List <LED7DisplayOutput> ledOutputs = new List <LED7DisplayOutput>();
                nodes = xml.SelectNodes("configuration/displays7LED/display");
                foreach (XmlNode node in nodes)
                {
                    LED7DisplayOutput output = LED7DisplayOutput.Load(node);

                    // znalezienie urządzenia

                    f = devices.Find(delegate(Device o)
                    {
                        return(o.Id == output.DeviceId);
                    });
                    if (f == null)
                    {
                        throw new Exception("Konfiguracja nie zawiera informacji o urządzeniu z identyfikatorem '" + output.DeviceId + "'.");
                    }

                    output.Device = f;

                    ledOutputs.Add(output);
                }

                // sprawdzenie czy jakaś nazwa się nie powtarza
                foreach (DigitalOutput digo in outputs)
                {
                    int index = ledOutputs.Count;
                    while (index-- > 0)
                    {
                        if (ledOutputs[index].ID == digo.ID)
                        {
                            ledOutputs.RemoveAt(index);
                        }
                    }
                }

                c.LED7DisplayOutputs = ledOutputs.ToArray();

                // wczytanie konfiguracji zbiorów wyświetlaczy
                nodes = xml.SelectNodes("configuration/displays7LED/displaySet");
                foreach (XmlNode node in nodes)
                {
                    LED7DisplayOutputSet dos = LED7DisplayOutputSet.Load(c.LED7DisplayOutputs, node);
                    ledOutputs.Add(dos);
                }
                c.LED7DisplayOutputs = ledOutputs.ToArray();

                // wczytanie słownika dla wyświetlaczy 7-led
                LED7DisplaysDictionary.Load(xml.SelectSingleNode("configuration/displays7LEDDictionary"));

                CreateOrDeletePeripherals(c);

                __instance = c;
            }
            return(__instance);
        }