Abarbeitung von Rufen

Blanky04

Level-1
Beiträge
22
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey, bräuchte mal eure hilfe.

Ich programmiere einen Aufzug und soweit funktioniert alles, nun möchte ich eine Rufabarbeitung einbauen, d.h. das er die Außenrufe speichert und nach einander abarbeitet..
ich arbeite mit einer S7 224 und microwin

wenn er in der aufwärts bewegung is, zB von EG -> 2.OG und während der Fahrt jemand im 1.OG drückt, soll er auch im 1.OG anhalten.

Meine Eingangssignale sind:
Etage0 E0.0
Etage1 E0.1
Etage2 E0.3

Die Variable SollPosition, ist die, welche mir aktuell sagt, wohin er Fahren soll.

hättet ihr eine programmierhilfe, oder eine einfache idee?

Danke euch
 
Zuletzt bearbeitet:
Hmm, mal wieder eine Schulaufgabe, die weniger das Programmieren schult sondern vielmehr ein Verständnis für einen Ablauf lehrt.

Wie funktioniert also ein Aufzug für drei Etagen?

Da gibt es drinnen drei Knöpfe. Wenn man einen davon drückt, so geht ein dazugehöriges Lämpchen an. Befindet sich der Aufzug in dem jeweiligen Stock, so geht das Lämpchen auch wieder aus. Und es gibt draussen drei Knöpfe (manchmal sind es vier). Die machen eigentlich das gleiche, wie die Knöpfe drinnen.

Befindet sich der Aufzug im EG, so wird er, sowie irgendein Knopf verschieden von EG gedrückt wurde, aufwärts fahren. Sind sowohl erster wie auch zweiter Stock angefordert, so wird er im ersten Stock zunächst halten. Umgekehrt geht es von oben stehts abwärts.

Nun kommt der Sonderfall: der Aufzug hält mittendrin. Damit er sinnvoll funktioniert, muss er seine Fahrt mit der letzten Fahrtrichtung fortsetzen. Sonst pendelt er möglicherweise nur zwischen EG und erstem Stock, weil dort ständig jemand rauf und runter will, der zweite Stock wird nimmer bedient (man soll es nicht glauben - so einen dummen Aufzug habe ich selbst erlebt). Nun kommt der vierte Knopf ins Spiel: derjenige, der im ersten Stock zusteigen will, signalisiert, ob er auf- oder abwärts fahren will (das ist für manchen Zeitgenossen auch nicht unbedingt leicht beherrschbar).

Aber keine Regel ohne Ausnahme:
Damit er sinnvoll funktioniert, muss er seine Fahrt mit der letzten Fahrtrichtung fortsetzen.
gilt natürlich nur, wenn jemand den Aufzug in dieser Fahrtrichtung auch benötigt.

So, nun ist es an der Zeit, mal das bestehende Programm zu sichten. Sicherlich wird am Grundentwurf schon was zu ändern sein ;)
 
Zuletzt bearbeitet:
jetzt musste ich zwar ein wenig suchen, aber nun hab ich ja etwas gefunden, was Dein Problem treffender beschreibt:
soll eine aufzugssteuerung werden, habe diese in codesys prog und da passt alles und nun muss ich sie auf die s7 machen...
OK, *tieflufthol*, also in CoDeSys könntest Du es. Was ist nun das Problem, dies in S7-200 zu formulieren? An Klammern kann es ja jetzt nicht mehr liegen ...
 
An Klammern kann es ja jetzt nicht mehr liegen ...

ähh, doch!

...und jetzt hab ich auf den link geklickt ... und ja, stimmt, an den klammern kann es nicht liegen... is wie mit dem fehlenden öl

backToTopic: wie wäre es, wenn du anhand deiner iDestination und der xDirectionOfTravelingdie aktuell auflaufende anforderung anguckst und dann entscheidest, ob's aufm wech is...

IF iDestination > iNewCall AND xDestinationOfTraveling THEN
//halten wir bei iNewCall
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das wäre eigentlich eine klassische Anwendung eines FIFO's.

Alle Aufrufe der Reihe nach von hinten in den Fifo schreiben (wenn sich der entsprechende Ruf noch nicht im Fifo befindet), der Reihe nach von die Einträge aus dem Fifo entfernen und die verbleibenden Elemente nach vorne schieben.

Hinweis: Ein einfaches Array mit 3 Elementen verwenden.

Wenn du das professionell lösen willst, schreibst du dir 3 Funktionen die das Array bedienen:
Code:
//Neue Etage (Ruf) einfügen:
fcAddElement(nEtage: int): void

//Ist die Etage bereits im Puffer?
fcIsElement(nEtage: int): bool

//Nächste Etage auslesen
fcGetNextElement(): int

Dann könnte dein Programm wie folgt ausschauen:
Code:
//--> Array mit -1 Initialisieren, damit du Etage 0..2 verwenden kannst!

//Wenn Taste gedrückt:
//---------------------
IF "Etage0" THEN
    
    //Etage bereits im Puffer?
    IF NOT fcIsElement(nEtage = 0) THEN

        //Etage Einfügen
        fcAddElement(nEtage = 0);
    END_IF;

ELSIF "Etage1" THEN
    
....
END_IF;


//Nächstes Element aus Puffer holen:
//----------------------------------
nNextEtage := fcGetNextElement();

wenn er in der aufwärts bewegung is, zB von EG -> 2.OG und während der Fahrt jemand im 1.OG drückt, soll er auch im 1.OG anhalten.
--> Wenn du als ersten das Programm nach meinem Vorschlag realisiert hast, kannst du dein Programm problemlos um diese Funktion erweitern.
 
Zuletzt bearbeitet:
Also wir haben einen Lastenaufzug über 3 Stockwerke von 1943 mit Orginalsteuerung (Luftschütze auf Steinplatte) im Haus.
Da gibt es keine SPS, keine AWL, kein SCL und kein Fifo und er läuft trotzdem.
Ist hier etwa geheimes Wissen (ähnlich der Reichsflugscheibe) verloren gegangen? :ROFLMAO:

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also wir haben einen Lastenaufzug über 3 Stockwerke von 1943 mit Orginalsteuerung (Luftschütze auf Steinplatte) im Haus.
Da gibt es keine SPS, keine AWL, kein SCL und kein Fifo und er läuft trotzdem.
Ist hier etwa geheimes Wissen (ähnlich der Reichsflugscheibe) verloren gegangen? :ROFLMAO:

Gruß
Dieter

sind diese Steinplatte von der abgerissenen Treppe? :ROFLMAO:
 
Also wir haben einen Lastenaufzug über 3 Stockwerke von 1943 mit Orginalsteuerung (Luftschütze auf Steinplatte) im Haus.
Da gibt es keine SPS, keine AWL, kein SCL und kein Fifo und er läuft trotzdem.
Ist hier etwa geheimes Wissen (ähnlich der Reichsflugscheibe) verloren gegangen? :ROFLMAO:

Gruß
Dieter

sowas in der richtung haben wir auch ;) wenn ich mal dort vorbeikomme mach ich ein bild und stells rein ;)
 
Zurück
Oben