Пример #1
0
        public static DigitalOutputSet Load(DigitalOutput [] digitalOutputs, XmlNode xml)
        {
            DigitalOutputSet result = new DigitalOutputSet();

            result.ID          = xml.Attributes["id"].Value;
            result.Description = xml.Attributes["description"].Value;
            List <DigitalOutput> outputs = new List <DigitalOutput>();
            XmlNodeList          nodes   = xml.SelectNodes("output");

            if (nodes != null)
            {
                foreach (XmlNode node in nodes)
                {
                    string        id  = node.Attributes["id"].Value;
                    DigitalOutput dio = Array.Find <DigitalOutput>(digitalOutputs, delegate(DigitalOutput o)
                    {
                        return(o.ID == id);
                    });
                    if (dio == null)
                    {
                        throw new Exception("Brak zdefiniowanego wyjścia '" + id + "'.");
                    }
                    outputs.Add(dio);
                }
            }
            result.DigitalOutputs = outputs.ToArray();
            return(result);
        }
 private void RefreshOutputsSets()
 {
     for (int i = 0; i < dataGridView3.Rows.Count; i++)
     {
         DigitalOutputSet dos = (DigitalOutputSet)dataGridView3.Rows[i].Tag;
         dataGridView3.Rows[i].Cells[_digitalOutputSetInfo.Index].Value = dos.OutsIDs();
     }
 }
 void EditOutputSetToolStripMenuItem1Click(object sender, EventArgs e)
 {
     if (dataGridView3.CurrentRow != null)
     {
         DigitalOutputSet dose           = (DigitalOutputSet)dataGridView3.CurrentRow.Tag;
         AddEditDigitalOutputSetDialog d = new AddEditDigitalOutputSetDialog(Configuration, dose);
         if (d.ShowDialog(this) == DialogResult.OK)
         {
             ShowDigitalOutputSets();
         }
     }
 }
 void RemoveOutputSetToolStripMenuItemClick(object sender, EventArgs e)
 {
     if (dataGridView3.CurrentRow != null)
     {
         DigitalOutputSet dos = (DigitalOutputSet)dataGridView3.CurrentRow.Tag;
         if (MessageBox.Show(this, "Czy napewno chcesz usunąć grupę wyjść cyfrowych '" + dos.ID + "' ?", "Pytanie", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
         {
             List <DigitalOutput> doses = new List <DigitalOutput>(Configuration.DigitalOutputs);
             doses.Remove(dos);
             Configuration.DigitalOutputs = doses.ToArray();
             dataGridView3.Rows.Remove(dataGridView3.CurrentRow);
             dataGridView3.Refresh();
         }
     }
 }
        void DataGridView3CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                DigitalOutputSet dos = (DigitalOutputSet)dataGridView3.Rows[e.RowIndex].Tag;
                if (e.ColumnIndex == dataGridViewTextBoxColumn7.Index)
                {
                    dos.ID = (string)dataGridView3.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                    return;
                }

                if (e.ColumnIndex == dataGridViewTextBoxColumn8.Index)
                {
                    dos.Description = (string)dataGridView3.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                    return;
                }
            }
        }
        public AddEditDigitalOutputSetDialog(ModulesConfiguration configuration, DigitalOutputSet digitalOutputSet)
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();

            _configuration   = configuration;
            DigitalOutputSet = digitalOutputSet;

            foreach (DigitalOutput dos in _configuration.DigitalOutputs)
            {
                if (!(dos is DigitalOutputSet))
                {
                    checkedListBox1.Items.Add(new Output()
                    {
                        DO = dos
                    });
                }
            }

            if (DigitalOutputSet == null)
            {
                Text = "Dodaj nową grupę wyjść cyfrowych";
            }
            else
            {
                textBox2.Text = DigitalOutputSet.ID;
                textBox1.Text = DigitalOutputSet.Description;

                foreach (DigitalOutput dos in DigitalOutputSet.DigitalOutputs)
                {
                    for (int i = 0; i < checkedListBox1.Items.Count; i++)
                    {
                        if (dos == ((Output)checkedListBox1.Items[i]).DO)
                        {
                            checkedListBox1.SetItemChecked(i, true);
                            break;
                        }
                    }
                }
            }
        }
        void Button1Click(object sender, EventArgs e)
        {
            string id = textBox2.Text;

            if (id == null || id.Trim().Length == 0)
            {
                MessageBox.Show(this, "Podany identyfikator jest niepoprawny.", "Uwaga", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                textBox2.Focus();
                return;
            }

            string description = textBox1.Text;

            if (checkedListBox1.CheckedItems.Count == 0)
            {
                MessageBox.Show(this, "Nie wybrano wyjść cyfrowych.", "Uwaga", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            List <DigitalOutput> outputs = new List <DigitalOutput>();

            for (int i = 0; i < checkedListBox1.CheckedItems.Count; i++)
            {
                Output ooo = (Output)checkedListBox1.CheckedItems[i];
                outputs.Add(ooo.DO);
            }

            if (DigitalOutputSet == null)
            {
                DigitalOutputSet = new DigitalOutputSet();
            }

            DigitalOutputSet.ID             = id;
            DigitalOutputSet.Description    = description;
            DigitalOutputSet.DigitalOutputs = outputs.ToArray();
            DialogResult = DialogResult.OK;
            Close();
        }
        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);
        }
        public static void CreateOrDeletePeripherals(ModulesConfiguration configuration)
        {
            if (configuration.Devices != null)
            {
                List <DigitalInput>      inputs   = new List <DigitalInput>();
                List <DigitalOutput>     outputs  = new List <DigitalOutput>();
                List <LED7DisplayOutput> displays = new List <LED7DisplayOutput>();
                List <Encoder>           encoders = new List <Encoder>();
                foreach (Device d in configuration.Devices)
                {
                    // znalezienie wszystkich wejść tego urządzenia
                    List <DigitalInput> dis = new List <DigitalInput>();
                    if (configuration.DigitalInputs != null)
                    {
                        foreach (DigitalInput di in configuration.DigitalInputs)
                        {
                            if (di.DeviceId == d.Id && di.Index >= 0 && di.Index < d.Type.DigitalInputs)
                            {
                                DigitalInput ddd = dis.Find(delegate(DigitalInput o)
                                {
                                    return(o.Index == di.Index);
                                });
                                if (ddd == null)
                                {
                                    dis.Add(di);
                                }
                            }
                        }
                    }
                    // dodanie brakujących
                    for (int i = 0; i < d.Type.DigitalInputs; i++)
                    {
                        if (dis.Find(delegate(DigitalInput o)
                        {
                            return(o.Index == i);
                        }) == null)
                        {
                            dis.Add(new DigitalInput()
                            {
                                DeviceId       = d.Id,
                                Device         = d,
                                Index          = i,
                                ID             = string.Format("{0}:input_{1}", d.Id, i.ToString("000")),
                                Description    = "Cyfrowe wejście",
                                Repeat         = false,
                                RepeatAfter    = 200,
                                RepeatInterval = 200,
                            });
                        }
                    }

                    inputs.AddRange(dis);

                    // sprawdzenie czy istnieją wszystkie wejścia dla enkoderów
                    if (configuration.Encoders != null)
                    {
                        List <DigitalInput> reserved = new List <DigitalInput>();
                        foreach (Encoder e in configuration.Encoders)
                        {
                            DigitalInput linput = inputs.Find(delegate(DigitalInput o)
                            {
                                return(o.ID == e.LeftInput.ID);
                            });
                            if (linput == null)
                            {
                                throw new Exception("Brak wejścia '" + e.LeftInput.ToString() + "' do obsługi enkodera.");
                            }

                            if (reserved.Contains(linput))
                            {
                                continue;
                            }

                            DigitalInput rinput = inputs.Find(delegate(DigitalInput o)
                            {
                                return(o.ID == e.RightInput.ID);
                            });
                            if (rinput == null)
                            {
                                throw new Exception("Brak wejścia '" + e.RightInput.ToString() + "' do obsługi enkodera.");
                            }

                            if (reserved.Contains(rinput))
                            {
                                continue;
                            }

                            reserved.Add(linput);
                            reserved.Add(rinput);
                            e.LeftInput  = linput;
                            e.RightInput = rinput;
                            encoders.Add(e);
                        }
                    }

                    // znalezienie wszystkich wyjść cyfrowych tego urządzenia
                    List <DigitalOutput> dos = new List <DigitalOutput>();
                    if (configuration.DigitalOutputs != null)
                    {
                        foreach (DigitalOutput di in configuration.DigitalOutputs)
                        {
                            if (di.DeviceId == d.Id && di.Index >= 0 && di.Index < d.Type.DigitalOutputs)
                            {
                                DigitalOutput ddd = dos.Find(delegate(DigitalOutput o)
                                {
                                    return(o.Index == di.Index);
                                });
                                if (ddd == null)
                                {
                                    dos.Add(di);
                                }
                            }
                        }
                    }
                    // dodanie brakujących
                    for (int i = 0; i < d.Type.DigitalOutputs; i++)
                    {
                        if (dos.Find(delegate(DigitalOutput o)
                        {
                            return(o.Index == i);
                        }) == null)
                        {
                            dos.Add(new DigitalOutput()
                            {
                                DeviceId    = d.Id,
                                Device      = d,
                                Index       = i,
                                ID          = string.Format("{0}:output_{1}", d.Id, i.ToString("000")),
                                Description = "Cyfrowe wyjście",
                            });
                        }
                    }

                    // sprawdzenie zbiorów wyjść
                    if (configuration.DigitalOutputs != null)
                    {
                        List <DigitalOutputSet> dosets = new List <DigitalOutputSet>();
                        foreach (DigitalOutput di in configuration.DigitalOutputs)
                        {
                            if (di is DigitalOutputSet)
                            {
                                DigitalOutputSet dose = (DigitalOutputSet)di;
                                if (dose.DigitalOutputs != null && dose.DigitalOutputs.Length > 0)
                                {
                                    List <DigitalOutput> doses = new List <DigitalOutput>(dose.DigitalOutputs);
                                    int index = doses.Count;
                                    while (index-- > 0)
                                    {
                                        // znalezienie wyjścia o danym id
                                        if (dos.Find(delegate(DigitalOutput digo)
                                        {
                                            return(digo.ID == doses[index].ID);
                                        }) == null)
                                        {
                                            doses.RemoveAt(index);
                                        }
                                    }

                                    if (doses.Count > 0)
                                    {
                                        dose.DigitalOutputs = doses.ToArray();
                                        dosets.Add(dose);
                                    }
                                }
                            }
                        }
                        dos.AddRange(dosets.ToArray());
                    }

                    outputs.AddRange(dos);

                    // znalezienie wszystkich wyświetlaczy 7led
                    List <LED7DisplayOutput> led7 = new List <LED7DisplayOutput>();
                    if (configuration.LED7DisplayOutputs != null)
                    {
                        foreach (LED7DisplayOutput di in configuration.LED7DisplayOutputs)
                        {
                            if (di.DeviceId == d.Id && di.Index >= 0 && di.Index < d.Type.Displays7LED)
                            {
                                LED7DisplayOutput ddd = led7.Find(delegate(LED7DisplayOutput o)
                                {
                                    return(o.Index == di.Index);
                                });
                                if (ddd == null)
                                {
                                    di.Device = d;
                                    led7.Add(di);
                                }
                            }
                        }
                    }
                    // dodanie brakujących
                    for (int i = 0; i < d.Type.Displays7LED; i++)
                    {
                        if (led7.Find(delegate(LED7DisplayOutput o)
                        {
                            return(o.Index == i);
                        }) == null)
                        {
                            led7.Add(new LED7DisplayOutput()
                            {
                                DeviceId    = d.Id,
                                Device      = d,
                                Index       = i,
                                ID          = string.Format("{0}:7ledDisplay_{1}", d.Id, i.ToString("000")),
                                Description = "Wyświetlacz 7-LED",
                            });
                        }
                    }

                    // sprawdzenie zbiorów wyjść
                    if (configuration.LED7DisplayOutputs != null)
                    {
                        List <LED7DisplayOutputSet> dosets = new List <LED7DisplayOutputSet>();
                        foreach (LED7DisplayOutput di in configuration.LED7DisplayOutputs)
                        {
                            if (di is LED7DisplayOutputSet)
                            {
                                LED7DisplayOutputSet dose = (LED7DisplayOutputSet)di;
                                if (dose.Displays != null && dose.Displays.Length > 0)
                                {
                                    List <Display> doses = new List <Display>(dose.Displays);
                                    int            index = doses.Count;
                                    while (index-- > 0)
                                    {
                                        // znalezienie wyjścia o danym id
                                        if (led7.Find(delegate(LED7DisplayOutput digo)
                                        {
                                            return(digo.ID == doses[index].LED7Display.ID);
                                        }) == null)
                                        {
                                            doses.RemoveAt(index);
                                        }
                                    }

                                    if (doses.Count > 0)
                                    {
                                        dose.Displays = doses.ToArray();
                                        dosets.Add(dose);
                                    }
                                }
                            }
                        }
                        led7.AddRange(dosets.ToArray());
                    }

                    displays.AddRange(led7);
                }

                configuration.DigitalInputs      = inputs.ToArray();
                configuration.Encoders           = encoders.ToArray();
                configuration.DigitalOutputs     = outputs.ToArray();
                configuration.LED7DisplayOutputs = displays.ToArray();
            }
        }
        void Button5Click(object sender, EventArgs e)
        {
            Device d = Selected;

            if (d != null)
            {
                if (MessageBox.Show(this, "Czy napewno chcesz usunąć urządzenie '" + d.Id + " - " + d.Description + "' i wszystkie jego peryferia ?", "Pytanie", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    // usunięcie urządzenia
                    List <Device> ds = new List <Device>(Configuration.Devices);
                    ds.Remove(d);
                    Configuration.Devices = ds.ToArray();

                    // usunięcie wejść
                    List <DigitalInput> dis = new List <DigitalInput>(Configuration.DigitalInputs);
                    int index = dis.Count;
                    while (index-- > 0)
                    {
                        if (dis[index].Device == d)
                        {
                            dis.RemoveAt(index);
                        }
                    }
                    Configuration.DigitalInputs = dis.ToArray();

                    // usunięcie enkoderów
                    List <Encoder> encoders = new List <Encoder>(Configuration.Encoders);
                    index = encoders.Count;
                    while (index-- > 0)
                    {
                        DigitalInput di = dis.Find(delegate(DigitalInput o)
                        {
                            return(o == encoders[index].LeftInput);
                        });
                        if (di == null)
                        {
                            encoders.RemoveAt(index);
                            continue;
                        }
                        di = dis.Find(delegate(DigitalInput o)
                        {
                            return(o == encoders[index].RightInput);
                        });
                        if (di == null)
                        {
                            encoders.RemoveAt(index);
                            continue;
                        }
                    }
                    Configuration.Encoders = encoders.ToArray();

                    // usunięcie wyjść cyfrowych
                    List <DigitalOutput> dos = new List <DigitalOutput>(Configuration.DigitalOutputs);
                    index = dos.Count;
                    while (index-- > 0)
                    {
                        if (!(dos[index] is DigitalOutputSet))
                        {
                            if (dos[index].Device == d)
                            {
                                dos.RemoveAt(index);
                            }
                        }
                    }
                    index = dos.Count;
                    while (index-- > 0)
                    {
                        if (dos[index] is DigitalOutputSet)
                        {
                            DigitalOutputSet     dose  = (DigitalOutputSet)dos[index];
                            List <DigitalOutput> doses = new List <DigitalOutput>(dose.DigitalOutputs);
                            int index2 = doses.Count;
                            while (index2-- > 0)
                            {
                                if (doses[index2].Device == d)
                                {
                                    doses.RemoveAt(index2);
                                }
                            }
                            if (doses.Count > 0)
                            {
                                dose.DigitalOutputs = doses.ToArray();
                            }
                            else
                            {
                                dos.RemoveAt(index);
                            }
                        }
                    }
                    Configuration.DigitalOutputs = dos.ToArray();

                    // usunięcie wyświetlaczy
                    List <LED7DisplayOutput> disps = new List <LED7DisplayOutput>(Configuration.LED7DisplayOutputs);
                    index = disps.Count;
                    while (index-- > 0)
                    {
                        if (!(disps[index] is LED7DisplayOutputSet))
                        {
                            if (disps[index].Device == d)
                            {
                                disps.RemoveAt(index);
                            }
                        }
                    }
                    index = disps.Count;
                    while (index-- > 0)
                    {
                        if (disps[index] is LED7DisplayOutputSet)
                        {
                            LED7DisplayOutputSet dose  = (LED7DisplayOutputSet)disps[index];
                            List <Display>       doses = new List <Display>(dose.Displays);
                            int index2 = doses.Count;
                            while (index2-- > 0)
                            {
                                if (doses[index2].LED7Display.Device == d)
                                {
                                    doses.RemoveAt(index2);
                                }
                            }
                            if (doses.Count > 0)
                            {
                                dose.Displays = doses.ToArray();
                            }
                            else
                            {
                                disps.RemoveAt(index);
                            }
                        }
                    }
                    Configuration.LED7DisplayOutputs = disps.ToArray();

                    RefreshConfiguration();
                }
            }
        }