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 ShowDigitalOutputSets() { dataGridView3.Rows.Clear(); if (Configuration.DigitalOutputs != null) { Array.Sort(Configuration.DigitalOutputs); for (int i = 0; i < Configuration.DigitalOutputs.Length; i++) { DigitalOutput dos = Configuration.DigitalOutputs[i]; if (dos is DigitalOutputSet) { int r = dataGridView3.Rows.Add(dos.ID, dos.Description, ((DigitalOutputSet)dos).OutsIDs()); dataGridView3.Rows[r].Tag = dos; } } } dataGridView3.PerformLayout(); }
void DataGridView2CellValueChanged(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex > -1) { DigitalOutput dio = (DigitalOutput)dataGridView2.Rows[e.RowIndex].Tag; if (e.ColumnIndex == dataGridViewTextBoxColumn3.Index) { dio.ID = (string)dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; RefreshOutputsSets(); return; } if (e.ColumnIndex == dataGridViewTextBoxColumn4.Index) { dio.Description = (string)dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; return; } } }
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(); } }