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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: S7-200, Eimerkette programmieren

  1. #11
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn der Weg (sprich die Anzahl der Produkte die unterwegs sind) variiert, bleibt nur die Version mit FIFO (das was vorne als erstes rein geht geht auch als erstes hinten wieder raus). Zottels Version von Bit auf Byte abändern, kommt das Produkt von Spur 1 eine 1 ins Byte reinschreiben, kommt das Produkt von Spur 2 dann eine 2 rein. Du wirst allerdings nicht um indirekte Programmierung rum kommen (es sei denn da gibt's einen fertigen Baustein dafür), die Lade- (oder Entladeposition) ändert sich ja.
    Und der ganz große Nachteil der FIFO Version: es funktioniert nur solange Deine Sensorik 100%ig funktioniert und der Operator nicht eingreift, also beispielswiese Produkte bei der Staubseitigung entfernt, hier müßte er hinterher der Maschine wieder sagen daß er leer geräumt hat.

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

    Standard

    Zitat Zitat von Oberchefe Beitrag anzeigen
    Wenn der Weg (sprich die Anzahl der Produkte die unterwegs sind) variiert, bleibt nur die Version mit FIFO (das was vorne als erstes rein geht geht auch als erstes hinten wieder raus).
    Das, was ich vorgeschlagen habe, IST ein FIFO.
    Zottels Version von Bit auf Byte abändern, kommt das Produkt von Spur 1 eine 1 ins Byte reinschreiben, kommt das Produkt von Spur 2 dann eine 2 rein.
    Wozu?
    Merker 1.0,2.0 = 1, usw. -> Produkt von Weiche 1
    Merker 1.1,2.1 = 1 , usw. -> Produkt von Weiche 2
    Damit läßt sich auch kodieren:
    Beide Merker = 0-> kein Produkt vorhanden
    und
    Beide Merker = 1-> offenbar Produkte von 1 und 2 (gestapelt????).
    Du wirst allerdings nicht um indirekte Programmierung rum kommen
    Doch. Wozu sollte die nötig sein???????
    Und der ganz große Nachteil der FIFO Version: es funktioniert nur solange Deine Sensorik 100%ig funktioniert ...
    Deshalb hatte ich nach einem Takt aus der Fördertechnik gefragt.
    ...und der Operator nicht eingreift, also beispielswiese Produkte bei der Staubseitigung entfernt, hier müßte er hinterher der Maschine wieder sagen daß er leer geräumt hat.
    Das kann man aber nicht durch die Art der Programmierung ändern, sondern nur, indem man das Produkt an sich indentifizierbar macht und entsprechende Sensorik vorsieht.

  3. #13
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    wenn Du die Bits sowieso zur gleichen Zeit schieben willst, dann frage ich mich wieso Du die Bits einzeln schieben willst und nicht gleich das ganze Byte.

    Und oben schrieb der Fragesteller:
    Die Länge der Kette kann zwischen 1 und 8 Schritten variieren.
    dann kannst Du nicht fest in Byte 1 reinschreiben und Byte 8 auslesen, Du mußt dann entweder die Position für's reinschreiben oder die Position für's Abfragen variabel machen. Das was Du programmiert hast ist kein FIFO sondern ein ganz normales Schieberegister, bei einem Schiebregister kannst Du pro Schiebetakt nur einmal was vorne reinschreiben (und hinten natürlich auch auslesen), bei einem FIFO können durchaus auch mal vorne 3 Produkte rein bis hinten das nächste wieder rausgeht oder umgekehrt hinten 3 raus und in dieser Zeit kein neues vorne rein.
    Ich habe den Fragesteller so verstanden daß zwischen den Weichen kein fester Bezug in Form einer Becherkette oder dergleichen da ist, da würde das Schieberegister natürlich funktionieren, ohne Produkt am Eingang würde dann halt eine Null durchgeschoben.

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

    Standard

    Zitat Zitat von SPS-DEPP Beitrag anzeigen
    Hallo Leute,
    erst mal vielen Dank für die zahlreichen Beiträge, schlaft oder esst ihr eigentlich auch mal?
    Ich möchte direkt in die Antwort von Zottel einhaken, da hier ja schon das Problem fast gelöst ist. Also noch etwas genauer: Die beiden Eingangsweichen E1 und E2 öffnen im nicht periodischen Wechsel und lassen jeweils vier Produkte vor der entspechenden Bahn passieren, dabei wird das Signal ensprechend 1sek. lang am Eingang log. 1 sein.
    Da ist schon die erste Frage: wenn ich bei relativ kurzer Zykluszeit die Eingänge abfrage um den Wert in M1.0 oder 1.1 zu schreiben, könnte es doch in dieser 1 sek. mehrfach passieren, oder?
    Ich hatte bereits geschrieben, daß das beschriebe Programm nicht in jedem Zyklus, sondern nur bei einem "Schrittwechsel" ausgeführt werden darf.
    Schauen wir mal, was ein Schrittwechsel sein könnte:
    Du förderst Postpakete (alle verschieden groß) auf einem Band. Zwischen den Paketen sind verschiedene Abstände. Pakete kommen aus Quelle (Weiche) 1 oder 2. wobei sie durch eine Lichschranke laufen, die dadurch ca 1 sek. lang unterbrochen wird. Der Eingang sei mit Licht "0" und ohne (unterbrochen) "1". Die SPS möge für einen Programmzyklus 20 Millisekunden benötigen, das ist ein gängiger Wert. Sie "sieht" also viele Zyklen lang 0, dan ca 50 Zyklen lang 1, dann wieder 0. Das heißt natürlich nicht, daß 50 Pakete gekommen sind. Was hier aber nur EINMAL passiert, ist der Wechsel (die Flanke) von 1 nach 0 in dem Moment, in dem das Paket die Lichtschranke verläßt. Das könnte man als "Trigger" nehmen.
    Um diese Ereignis zu Erkennen, speichert man den Zustand des Eingangs für einen Zyklus, so daß man im nächsten Zyklus vergleichen kann, ob sich etwas geändert hat:
    Das Speichern:
    LD E1.0
    = M100.0
    M 100.0 hat also immer deselben Wert wie E1.0
    Deshalb ist diese Abfrage HIER sinnlos:
    LD E1.0
    UN M100.0
    die können ja gar keinen verschiedenen Wert haben.
    ABER

    LD E1.0
    UN M100.0
    = M102.0

    LD E1.0
    = M100.0
    Hier wird zuerst verglichen, ob E1.0 1 und M100.0 0 ist. Das ist genau dann der Fall, wenn E1.0 im vorigen Zyklus 0 war und in diesem zum ersten Mal 1 ist.
    Für unsere Lichtschranke brauchen wir aber genau das Gegenteil:
    LDN E1.0
    U M100.0
    = M102.0

    LD E1.0
    = M100.0
    Der Merker M102.0 ist genau dann 1 (einen Zyklus lang), wenn ein Paket die Weiche 1 verlassen hat.

    Dasselbe für Weiche 2
    LDN E1.1
    U M100.1
    = M102.1

    LD E1.1
    = M100.1
    Der Merker M102.1 ist genau dann 1 (einen Zyklus lang), wenn ein Paket die Weiche 2 verlassen hat.

    Wann immer ein Paket eine der Weichen verläßt, geht die "Eimerkette" eine Position weiter:

    LD M102.0
    O M102.1
    CALL Eimerkette

    Ein neues Problemchen:
    Da die Lichtschranken gerade frei geworden sind, können sie uns nicht mehr sagen, aus welcher das Paket kam.
    LD E0.0
    = M1.0 würde immer 0 ergeben. Aber wir wissen, daß der Merker 102.0 1 ist, wenn das Paket aus Weiche 1 kam, während der Merker 102.1 anzeigt, daß das Paket aus Weiche 2 kam. Wir ersetzen daher in meinem Eimerketten programm E1.0 durch M102.0 und E1.1 durch M102.1.
    Damit zu deiner Frage, den Takt gibt also das erneute Öffnen einer der beiden Eingangsweichen an.
    Müßte jetzt so gehen
    Ausgelesen wird die Kette später im Prozess an einer Ausgangsweiche, die genau vier Produkte zählt und dann wissen muß, von welcher Eingangsweiche diese Produkte kamen. Da es dazwischen einen weiteren Prozeß gibt, der mal mehr und mal weniger schnell abläuft, kann es also sein, dass die Kette länger oder kürzer wird, das hast du ja auch super gelöst.
    Nochmal zum "Länger oder Kürzer": Stellt da jemand an einem Schalter ein, ob mit einer 4,5,6,7,8-stufigen Kette gearbeitet wird, oder ändert sich das dynamisch?
    Aber wie kann ich die Kette hinten abfragen, ob z.B. im M6, M7 oder M8.0 oder 8.1 eine 1 steht oder nicht und diese nach erfolgtem Öffnen der Ausgansweiche auf 0 setzen.
    Für den scheinbar komplizierteren Fall der "dynamischen Kettenlänge":
    Das Prinzip: Wenn wir 5 Pakete aufs Band fördern, sind 5 drauf. Unsere Kette ist 5 lang. Wenn wir eins entnehmen, sind noch 4 da. Unsere Kette ist 4 lang. Wir zählen also Pakete, vorwärts beim fördern und rückwärts beim entnehmen. Den Zählerstand halten wir einem Wort im V-Speicherbereich, hier z.B. VW100:

    LD M102.0
    O M102.1
    ADDW 1,VW100

    Die beiden Merker sagen uns ja, daß ein neues Paket da ist. Ich nehme mal an, daß wir auch einen Merker M110.0 haben, der genau für einen Zyklus 1 ist, wenn die Entnahme erfolgt ist:

    LD M110.0
    ADDW -1,VW100

    VW100 sagt uns nun, wie lang die Kette ist.
    Ich tu mal so, als ob die Ausgangsweiche so funktioniert:
    A0.0 fördert nach links, A0.1 fördert nach rechts, Pakete aus Weiche 1 sollen nach links. Ferner haben wir eine Lichtschranke E1.2, die uns sagt, daß ein Paket ankommt. Wenn das Paket in die Lichtschranke einläuft, ist es Zeit die Weiche zu stellen. Wenn das Paket die Lichtschranke verläßt, kann die Weiche wieder in Mittelstellung zurückkehren oder so etwas (beide Ausgänge aus) und die Entnahme ist beendet.

    Wir verschaffen uns jetzt den Merker 110.0 (Entnahme in diesem Zyklus beendet):

    LDN E1.2
    U M100.2
    = M110.0

    LD E1.2
    = M100.2

    Und nun die Entnahme. Ich nehme mal an, daß grundsätzlich nicht mehr als 8 Pakete da sind.

    Wenn es genau 8 sind, sagen uns die Merker 8.0 oder 8.1 wo das Paket hin muß, Sind es genau 7, so sagen es uns die Merker 7.0 oder 7.1 usw. Ich nehme mal an wir hätten einen Merker 8.2, der gesetzt ist, wenn es 8 Pakete sind, einen Merker 7.2, der gesetzt ist, wenn es 7 Pakete sind usw.

    LD M8.2 // es sind 8 Pakete
    U M8.0 // und Merker 8.0 sagt, es muß nach links
    = M 10.0 // Bedeutung: Paket nach links

    LD M8.2 // es sind 8 Pakete
    U M8.1 // und Merker 8.1 sagt, es muß nach rechts
    = M 10.1 // Bedeutung: Paket nach rechts

    LD M7.2 // es sind 7 Pakete
    U M7.0 // und Merker 7.0 sagt, es muß nach links
    O M 10.0 // Paket nach links (aus der vorhergehenden Verknüpfung)
    = M 10.0 // Bedeutung: Paket nach links

    LD M7.2 // es sind 7 Pakete
    U M7.1 // und Merker 7.1 sagt, es muß nach rechts
    O M 10.1 // Paket nach rechts (aus der vorhergehenden Verknüpfung)
    = M 10.1 // Bedeutung: Paket nach rechts


    LD M6.2 // es sind 6 Pakete
    U M6.0 // und Merker 6.0 sagt, es muß nach links
    O M 10.0 // Paket nach links (aus der vorhergehenden Verknüpfung)
    = M 10.0 // Bedeutung: Paket nach links

    LD M6.2 // es sind 6 Pakete
    U M6.1 // und Merker 6.1 sagt, es muß nach rechts
    O M 10.1 // Paket nach rechts (aus der vorhergehenden Verknüpfung)
    = M 10.1 // Bedeutung: Paket nach rechts

    Und so weiter bis zu einem Paket.

    Wir werten nun die Merker 10.0 und 10.1 aus und stellen die Weiche:

    LD E1.2 // Solange Paket in der Lichtschranke der Weiche
    U M10.0 // Bedeutung: Paket nach links
    UN M 10.1 // Widerspruch erkennen!
    = A0.0 // Weiche nach links


    LD E1.2 // Solange Paket in der Lichtschranke der Weiche
    U M10.1 // Bedeutung: Paket nach rechts
    UN M 10.0 // Widerspruch erkennen!
    = A0.1 // Weiche nach rechts

    So jetzt fehlen noch die Merker 1.2...6.2, 7.2, 8.2, die bei einer gewissen Paketzahl 1 sein sollen:

    LDW= 1,VW100
    = M1.2
    LDW= 2,VW100
    = M2.2
    LDW= 3,VW100
    = M3.2
    LDW= 4,VW100
    = M4.2
    LDW= 5,VW100
    = M5.2
    LDW= 6,VW100
    = M6.2
    LDW= 7,VW100
    = M7.2
    LDW= 8,VW100
    = M8.2

    Fertig!

    Was nun, wenn "Kettenlänge" fest und nicht dynamisch sein soll? Einfach die Zählbefehle raus und stattdessen:
    VW100 auf die Kettenlänge einstellen, z.B. mit einem Bedienpanel.
    Oder Zählbefehle und Vergleiche Zahl mit VW100 raus und statt der Merker 1.2 bis 8.2 Eingänge von einem Wahlschalter benutzen:

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

    Standard

    Zitat Zitat von Oberchefe Beitrag anzeigen
    wenn Du die Bits sowieso zur gleichen Zeit schieben willst, dann frage ich mich wieso Du die Bits einzeln schieben willst und nicht gleich das ganze Byte.
    Weil ich weiß, daß die Azubis auch erst Bit-Logik lernen und ich mich darauf beschränken wollte.

    dann kannst Du nicht fest in Byte 1 reinschreiben und Byte 8 auslesen, Du mußt dann entweder die Position für's reinschreiben oder die Position für's Abfragen variabel machen. Das was Du programmiert hast ist kein FIFO sondern ein ganz normales Schieberegister,
    Jedes Schieberegister ist ein FIFO, aber nicht jeder FIFO ist "nur" ein Schieberegister.

    ...bei einem Schiebregister
    kannst Du pro Schiebetakt nur einmal was vorne reinschreiben (und hinten natürlich auch auslesen), bei einem FIFO können durchaus auch mal vorne 3 Produkte rein bis hinten das nächste wieder rausgeht oder umgekehrt hinten 3 raus und in dieser Zeit kein neues vorne rein.
    Sinnvollerweise teilt man die Entnahme dreier Produkte entweder in 3 einzelne Entnahmen oder man ist sich darüber im klaren, daß die Produkte keine "Individuen" sondern austauschbar sind. Im zweiten Fall kann man die Menge von drei als Los und das Los als Fördergut betrachten, was dann wieder einzeln entnommen wird. Ein "PASSENDER" FIFO, indem die Information von vielleicht Byte oder Wortgröße ist, kann dann natürlich die Losgröße mitführen. Ein etwas größerer FIFO könnte auch den Lieferschein in UDTs speichern...
    Ich habe den Fragesteller so verstanden daß zwischen den Weichen kein fester Bezug in Form einer Becherkette oder dergleichen da ist, da würde das Schieberegister natürlich funktionieren, ohne Produkt am Eingang würde dann halt eine Null durchgeschoben.
    Ja, das ist mir klar. Und ich habe zwei Bits genommen, die können natürlich
    auch beide gesetzt sein. Sind dann Produkte aus beiden Weichen übereinander gestapelt? Hängt wohl von der Anwendung ab...

  6. #16
    Registriert seit
    11.10.2005
    Ort
    Pirmasens
    Beiträge
    401
    Danke
    158
    Erhielt 74 Danke für 54 Beiträge

    Standard

    Hi,
    hier mal ein Lösungsansatz der eine variable Eimer Zahl zulässt aber mit der Einschränkung von Oberchef.


    U E 0.0; Eimer kommt z.B. LS
    FP M 0.0;
    SPBN m001;
    L MW 100;
    L 1;
    +I;
    T MW 100;
    m001 :NOP 0;
    L MW 100;
    L 1;
    ==I;
    FP M 0.1;
    SPBN m002;
    U E 0.5; Weiche 1
    S M 11.1;
    U E 0.6; Weiche 2
    R M 11.1;
    m002 :NOP 0;
    L MW 100;
    L 2;
    ==I;
    FP M 0.2;
    SPBN m003;
    U E 0.5;
    S M 11.2;
    U E 0.6;
    R M 11.2;
    m003 :NOP 0;
    L MW 100;
    L 3;
    ==I;
    FP M 0.3;
    SPBN m004;
    U E 0.5;
    S M 11.3;
    U E 0.6;
    R M 11.3;
    m004 :NOP 0;

    usw.

    m007 :NOP 0;
    U E 0.1; Eimer geht
    FP M 1.7;
    SPBN m017;
    L MW 100;
    L 1;
    -I;
    T MW 100;
    L MW 10;
    SRW 1;
    T MW 10;
    m017 :NOP 0;
    U M 11.0;Weiche 1 1-Signal Weiche 2 0-Signal
    = A 0.0;
    HDD
    Geändert von HDD (17.11.2006 um 15:32 Uhr)

  7. #17
    SPS-DEPP ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.11.2006
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen, hier ist wieder SPS-DEPP.Konnte ´ne Weile nicht antworten, da ich Ausland war und die Sache mit der Eimerkette dor verwirklichen mußte.
    Also noch mal herzlichen Dank an alle, die solche Gedanken und Mühe gemacht haben, um zu helfen. Besonderen Dank an Zottel, der zu meiner Schande meine Fähigkeiten am Besten erkannt hat und alles in meiner Sprache geschrieben hat.
    Aufgrund dieser Lösungen von Zottel hat es dann, nachdem ich mit Programm klarkam, auch super hingehauen.
    Also das Ding funktioniert und ich habe eine Menge dazugelernt.

    Danke und Gruss,

    SPS-DEPP
    Zitieren Zitieren Eimerkette programmieren  

Ähnliche Themen

  1. S7- 200 SBR wie FB Programmieren?
    Von godi im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.07.2008, 14:39
  2. S5 95U programmieren !?
    Von Tom1971 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 16.10.2007, 19:24
  3. CPU 312 programmieren
    Von Headman im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 13.09.2007, 16:08
  4. OBs in S7-300 programmieren
    Von Syntaxfehler im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 21.09.2006, 19:21
  5. Programmieren per LAN ?
    Von KartoffeL im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 25.07.2006, 05:22

Lesezeichen

Berechtigungen

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