Beispiel #1
0
        private bool Ausfuehren_Loeschen()
        {
            switch (_elementTyp)
            {
            case ElementTyp.Gleis:
                Gleis gleis = (Gleis)_element;

                foreach (Signal el in gleis.Signale)
                {
                    _anlagenElemente.SignalElemente.Löschen(el);
                }
                foreach (Entkuppler el in gleis.Entkuppler)
                {
                    _anlagenElemente.EntkupplerElemente.Löschen(el);
                }
                if (gleis.Fss != null)
                {
                    _anlagenElemente.FssElemente.Löschen(gleis.Fss);
                }
                if (gleis.Schalter != null)
                {
                    _anlagenElemente.SchalterElemente.Löschen(gleis.Schalter);
                }

                _anlagenElemente.GleisElemente.Löschen(gleis);
                int index = gleis.StartKn.GetGleisAnschlussNr(gleis);
                gleis.StartKn.Gleise[index] = null;
                if (index < 2)
                {
                    if (gleis.StartKn.Weichen[0] != null)
                    {
                        _anlagenElemente.WeicheElemente.Löschen(gleis.StartKn.Weichen[0]);
                        gleis.StartKn.Weichen[0] = null;
                    }
                }
                else
                {
                    if (gleis.StartKn.Weichen[1] != null)
                    {
                        _anlagenElemente.WeicheElemente.Löschen(gleis.StartKn.Weichen[1]);
                        gleis.StartKn.Weichen[1] = null;
                    }
                }
                int count = 0;
                foreach (Gleis gl in gleis.StartKn.Gleise)
                {
                    if (gl != null)
                    {
                        count++;
                    }
                }
                if (count == 0)
                {
                    _anlagenElemente.KnotenElemente.Löschen(gleis.StartKn);
                }

                index = gleis.EndKn.GetGleisAnschlussNr(gleis);
                gleis.EndKn.Gleise[index] = null;
                if (index < 2)
                {
                    if (gleis.EndKn.Weichen[0] != null)
                    {
                        gleis.EndKn.Weichen[0] = null;
                        _anlagenElemente.WeicheElemente.Löschen(gleis.EndKn.Weichen[0]);
                    }
                }
                else
                {
                    if (gleis.EndKn.Weichen[1] != null)
                    {
                        gleis.EndKn.Weichen[1] = null;
                        _anlagenElemente.WeicheElemente.Löschen(gleis.EndKn.Weichen[1]);
                    }
                }
                count = 0;
                foreach (Gleis gl in gleis.EndKn.Gleise)
                {
                    if (gl != null)
                    {
                        count++;
                    }
                }
                if (count == 0)
                {
                    _anlagenElemente.KnotenElemente.Löschen(gleis.EndKn);
                }
                break;

            case ElementTyp.Signal:
                Signal sig = (Signal)_element;
                _anlagenElemente.SignalElemente.Löschen(sig);
                sig.AnschlussGleis.GleisElementAustragen(sig);
                break;

            case ElementTyp.Entkuppler:
                Entkuppler entkuppler = (Entkuppler)_element;
                _anlagenElemente.EntkupplerElemente.Löschen(entkuppler);
                entkuppler.AnschlussGleis.GleisElementAustragen(entkuppler);
                break;

            case ElementTyp.FSS:
                FSS fss = (FSS)_element;
                _anlagenElemente.FssElemente.Löschen(fss);
                fss.AnschlussGleis.GleisElementAustragen(fss);
                break;

            case ElementTyp.Schalter:
                Schalter schalter = (Schalter)_element;
                _anlagenElemente.SchalterElemente.Löschen(schalter);
                schalter.AnschlussGleis.GleisElementAustragen(schalter);
                break;

            case ElementTyp.InfoElement:
                InfoFenster infoFenster = (InfoFenster)_element;
                _anlagenElemente.InfoElemente.Löschen(infoFenster);
                infoFenster.AnschlussGleis.GleisElementAustragen(infoFenster);
                break;

            case ElementTyp.Knoten:

                break;
            }
            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// Liest ankommende Befehle vom ArduinoController und verarbeitet diese weiters
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="a"></param>
        private void _ardController_BefehlReceived(object sender, BefehlEventArgs a)
        {
            byte[] befehl  = a.Befehl;
            string befehlS = String.Empty;

            foreach (byte b in befehl)
            {
                befehlS += b + " ";
            }
            Debug.Print("Befehl von Arduino: " + befehlS);

            if (befehl.Length == 5)
            {
                Arduino arduino = this._zeichnenElemente.AnlagenZustand.GetArduino(befehl[0]);
                if (arduino != null)
                {
                    switch (befehl[1])
                    {
                    case 10:
                        arduino.Rueckmeldung[0] = (ushort)(befehl[2] + befehl[3] * 256);
                        break;

                    case 11:
                        arduino.Rueckmeldung[1] = (ushort)(befehl[2] + befehl[3] * 256);
                        break;

                    case 19:
                        aktiveFSZielgleisPruefen();
                        OnArduinoRueckmeldungReceived();
                        //OnAnlageNeuZeichnen();//Todo: zeile entfernen oder auskommentieren
                        break;

                    case 40:
                        arduino.Ausgaenge[0] = (ushort)(befehl[2] + befehl[3] * 256);
                        OnArduinoRueckmeldungReceived();
                        break;

                    case 41:
                        arduino.Ausgaenge[1] = (ushort)(befehl[2] + befehl[3] * 256);
                        OnArduinoRueckmeldungReceived();
                        break;

                    case 42:
                        arduino.Ausgaenge[2] = (ushort)(befehl[2] + befehl[3] * 256);
                        OnArduinoRueckmeldungReceived();
                        break;

                    case 49:
                        AlleAusgaengeSenden();
                        break;

                    case 99:
                        InfoFenster sysZeit = this._zeichnenElemente.InfoElemente.Element(99);
                        int         zeit    = befehl[2] + befehl[3] * 256;
                        string      txt     = "Ard-Zeit: ";
                        txt = txt + zeit + "_";                                // Convert.ToString( zeit);
                        try {
                            if (sysZeit != null)
                            {
                                sysZeit.Text = txt;
                            }
                        }
                        catch (Exception e) {
                            Logging.Log.Schreibe(e.Message);
                        }
                        OnArduinoRueckmeldungReceived();
                        break;
                    }

                    if (befehl[1] > 99 && befehl[1] < 122)
                    {
                        int         id          = befehl[1] - 100;
                        Haltestelle haltestelle = this._zeichnenElemente.HaltestellenElemente.Element(id);
                        try {
                            if (haltestelle != null)
                            {
                                haltestelle.InfoBefehl(befehl);
                            }
                        }
                        catch (Exception e) {
                            Logging.Log.Schreibe(e.Message);
                        }
                        OnArduinoRueckmeldungReceived();
                    }
                }
            }
        }