Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: Programmierstrategie für ein monoschienen Transportsystem

  1. #1
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wir haben hier eine Anlage mit einer
    "Einschienenbahn" von Montech, so dass die
    Produkte von Station zu Station gefahren werden
    können. Eigentlich ganz nett die Sache, nur soll
    ich jetzt die Anlage neu programmieren und mir
    ist die Strategie noch nicht so ganz klar, denn
    auch Parallelstrecken mit Weichen sind möglich,
    um die Kapazität zu erhöhen. Wir haben hier auf der Anlage bis zu 30 Wagen laufen.

    Bisher hatte ich das so gedacht, dass ich eine
    globale Liniensteuerung habe, die für jede
    Station ein Array mit den Wagennummern
    verwaltet, die Platz vor einer Station finden können.
    Zusätzlich wird noch eine Variable angelegt, die
    jeweils auf die nächste Station verweist. Damit
    lässt sich eine verzweigende Weiche (Station)
    gut verwalten, aber eine zusammenführende nicht.
    Ich möchte verhindern, dass im Code der
    Stationen irgendetwas von der Liniensteuerung
    auftaucht, um die Komplexität in Grenzen zu
    halten. Eine Station braucht daher auch nichts mit der Liniensteuerung zu tun zu haben.

    Vielleicht kennt jemand eine bessere Strategie?
    Zitieren Zitieren Programmierstrategie für ein monoschienen Transportsystem  

  2. #2
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Ohne die Anlage zu kennen:
    Ich würde den Wagen einen Zustand zuordnen. Dieser besagt, wo sich der Wagen befindet, entweder in einer Station oder auf einem bestimmten Abschnitt dazwischen. Ein weiterer Zustände könnte einen Wagen als "nicht im System" bezeichnen.


    Ein Fahrauftrag wäre zunächst durch Start und Ziel definiert. Den Teilstrecken würden "Kosten" zugeordnet, z.B. im einfachsten Fall die Länge. Das Programm addiert die Kosten der Teilwege für alle möglichen Wege zum Ziel und nimmt den mit der niedrigsten Kostensumme. Teilwegen, die in mehreren oder vielen Strecken auftauchen, kannst du höhere Kosten zuordnen, so daß sie nach Möglichkeit gemieden werden. Dies sollte zu einer besseren Verteilung der Auslastung führen.

    Welcher Wagen einen solchen Auftrag ausführt, kannst du entscheiden lassen, indem für jeden verfügbaren Wagen die Kosten der Leerfahrt vom Standort zum Start ermittelt werden.

    Falls das Durchfahren des gleichen Streckenabschnitts verlangt, das ein Wagen darauf wartet, daß der vorige den Abschnit verläßt, und du hättest hier auch die Möglichkeit, einen Parallelweg zu fahren, so kannst du zunächst einen Fahrauftrag bis zu dieser Stelle generieren. Wenn der Wagen dort angekommen ist, wird ein weiterer Fahrauftrag generiert, wobei momentan belegten Abschnitten dynamisch höhere Kosten zugewiesen werden.
    Dabei kann es aber dazu kommen, daß ein Weg gewählt wird, bei dem eine Wartesituation an einer jetzt noch freien, bei Ankunft des Wagens aber belegten Teilstrecke entsteht.
    Um dies zu vermeiden, müßtest du für jeden Fahrweg eine Weg-Zeittabelle erstellen.
    Die durch die Fahrt belegten Abschnitte erhalten dann für die Zeit der Durchfahrt erhöhte Kosten und ein weiterer Fahrweg müsste mit diesen zeitabhägigen Kosten geplant werden.

    Du kannst auch Kosten für das Umstellen von Weichen festlegen, falls das lange dauert oder Verschleiß mit sich bringt.

  3. #3
    drfunfrock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard

    Zitat Zitat von Zottel
    Ohne die Anlage zu kennen:
    Ich würde den Wagen einen Zustand zuordnen. Dieser besagt, wo sich der Wagen befindet, entweder in einer Station oder auf einem bestimmten Abschnitt dazwischen. Ein weiterer Zustände könnte einen Wagen als "nicht im System" bezeichnen.
    Ich sehe schon, dass ich ein wenig ausführlicher sein sollte. Die Wagen laufen völlig selbstständig bis zu einer Stop-Marke. Erst nach einem Start-Signal geht es weiter. Jede Stop-Marke gilt als Station. Da die Wagen auch vor Weichen halten, gilt eine Weiche als Station, ebenso wie die Start-Strecke. Jede Station verträgt eine bestimmte Anzahl Wagen, der erste ist jeweils in der Bearbeitung oder wartet auf ein Start-Signal.
    Die Stationen werden einfach der Reihe nach durchlaufen. Gibt es 2 parallele Stationen (Gleiche Funktion), dann wird einfach nach Füllstand entschieden, wo der Wagen hin soll. Deswegen habe ich auch die Arrays vorgesehen, die jeweils Nummern der Wagen in der Station aufnehmen. Das Problem, dass ich habe, ist, dass Weichen entweder 2 Nachfolgestationen oder 2 Vorgänger haben. Ansonsten ist die Steuerung fast trivial. Wenn die Liniensteuerung die Station anweist einen Wagen loszuschicken, dann übergebe ich die Wagennummer dem Array der nächsten Station und lösche es aus dem Stationsarray für die Verwaltung der Wagen.

    Dein Vorschlag würde darauf hinauslaufen, dass man parallele Wege hätte, eine Idee die sich hier nicht realisieren lässt, da die Anlage fertig als Kette aufgebaut wurde und am Ende wieder auf die Startstrecke zurückführt.

    Aber die Idee mit den Zuständen für die Wagen bringt mich auf die Idee, dass man diese Weise einen Anlagenstopp in den Griff bekommt. Und vielleicht sollte ich die möglichen Wege, über verkettete Structs realisieren?

    Vieleicht gibt es zu diesem Thema auch eine Weebseite?

  4. #4
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    zusätzlich wird noch eine Variable angelegt, die
    jeweils auf die nächste Station verweist.
    Wozu ist die nötig?
    Damit lässt sich eine verzweigende Weiche (Station)
    gut verwalten, aber eine zusammenführende nicht.
    Warum?
    . Gibt es 2 parallele Stationen (Gleiche Funktion), dann wird einfach nach Füllstand entschieden, wo der Wagen hin soll. Deswegen habe ich auch die Arrays vorgesehen, die jeweils Nummern der Wagen in der Station aufnehmen. Das Problem, dass ich habe, ist, dass Weichen entweder 2 Nachfolgestationen oder 2 Vorgänger haben.
    Du musst die zusammenführende Weiche steuern, damit sie einen Wagen vom Zugang A oder B aufnehmen kann?
    [/quote]

  5. #5
    drfunfrock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard

    Zitat Zitat von Zottel
    zusätzlich wird noch eine Variable angelegt, die
    jeweils auf die nächste Station verweist.
    Wozu ist die nötig?
    Damit lässt sich eine verzweigende Weiche (Station)
    gut verwalten, aber eine zusammenführende nicht.
    Warum?
    . Gibt es 2 parallele Stationen (Gleiche Funktion), dann wird einfach nach Füllstand entschieden, wo der Wagen hin soll. Deswegen habe ich auch die Arrays vorgesehen, die jeweils Nummern der Wagen in der Station aufnehmen. Das Problem, dass ich habe, ist, dass Weichen entweder 2 Nachfolgestationen oder 2 Vorgänger haben.
    Du musst die zusammenführende Weiche steuern, damit sie einen Wagen vom Zugang A oder B aufnehmen kann?
    [/quote]


    1) Wenn ich eine Variable auf die nächste Station vorsehe, kann ich alle Stationen der Reihe nach in einer FOR-Schleife abarbeiten. Alle Infos über eine Station werden in einer Struct abgelegt. Diese wiederum liegt dann in einem Array für alle Stationen.. Somit habe ich über den Index stets elle Infos über eine Station.

    2) Eine zusammenführende Weiche ist eine, wenn eine Strecke C die Wagen von Strecke A und B aufnimmt.

    Mein Ziel ist es, dass die Anlage erweitert werden kann, ohne die Programmstruktur zu ändern. In der Vergangenheit ist dieses mehrmals geschehen, so das nun ein Chaos herrscht. So will ich verhindern, dass Code von der Liniensteuerung im Code für die Stationen auftaucht. Weiterhin muss ich aus Wartungsgründen parallele Strecken mit gleicher Funktion abschalten können.

    Bald bekommen wir Erweiterungen für leicht variierte Produkte und ich muss damit rechnen, dass wir parallele Strecken bekommen, die nicht funktionsgleich sind. Es gilt zwar weiterhin, dass die Wagen einfach von Anfang bis Ende die Strecke durchfahren, aber auf unterschiedlichen Wegen.

    Eine Datenstruktur für so ein Problem ist nicht leicht zu entwerfen. Ich frage mich, ob ich da den richtigen Weg einschlage.

  6. #6
    Registriert seit
    17.10.2004
    Beiträge
    144
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Du mußt das Problerm so Lösen, dass Du einer zusammenführende Weiche eine Station (Staustrecke) hinter der Weiche zuweist. So hast Du es ja auch bei der verteilenden Weiche mit Station (Staustrecke) vor der Weiche gelößt.

    Wie bei der großen Eisenbahn wird der zuerst kommende Wagen vor der zusammenführenden Weiche auf seinem Zweig (A) von einem Sensor erfasst, und stellt sich die Weiche in seine Richtung. Die Zufahrt über den anderen Zweig (B) wird dabei gesperrt, bis sich ggf. der nächste Wagen auf dem Zweig (B) kollisonsfrei hinter dem Vorläufer einreihen kann.

    Limbo
    Wenn ich Schuhe und Strümpfe ausziehe, kann ich bis 20 zählen.

  7. #7
    drfunfrock ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.08.2004
    Beiträge
    824
    Danke
    45
    Erhielt 73 Danke für 66 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Limbo
    Du mußt das Problerm so Lösen, dass Du einer zusammenführende Weiche eine Station (Staustrecke) hinter der Weiche zuweist. So hast Du es ja auch bei der verteilenden Weiche mit Station (Staustrecke) vor der Weiche gelößt.

    Wie bei der großen Eisenbahn wird der zuerst kommende Wagen vor der zusammenführenden Weiche auf seinem Zweig (A) von einem Sensor erfasst, und stellt sich die Weiche in seine Richtung. Die Zufahrt über den anderen Zweig (B) wird dabei gesperrt, bis sich ggf. der nächste Wagen auf dem Zweig (B) kollisonsfrei hinter dem Vorläufer einreihen kann.

    Limbo
    Danke für den Tip! Ich bin aber auch schon drauf gekommen.

    Doc Funfrock

Ähnliche Themen

  1. Programmierstrategie MS-Visual C++
    Von kiestumpe im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 22.10.2008, 06:50
  2. Programmierstrategie in S5?
    Von knockout im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 08.08.2007, 23:48

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •