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

Ergebnis 1 bis 3 von 3

Thema: 8x die gleiche Prozedur, geht das auch einfacher ?

  1. #1
    Registriert seit
    02.11.2006
    Beiträge
    496
    Danke
    217
    Erhielt 25 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo an Alle,

    wie kann ich mir eine Menge Schreibarbeit ersparen ?

    Problembeschreibung:
    Für eine "Restmengen- Warnung / Abschaltung" sind pro Kippdorn (KD..) jeweils 2 Lichtschranken (es werden an der Anlage Lichttaster sein, aber für die Erklärung werde ich weiterhin LS schreiben ) vorgesehen.

    KD 1 -> LS 1 = ca. 100kg ( Vorwarnung ) {LS1}
    KD 1 -> LS 2 = ca. 50kg ( ab jetzt muß eine "Überbrückungstaste"
    betätigt werden, sonst hält die Anlage an) {LS2}
    KD 2 -> LS 1 = ca. 100kg ( Vorwarnung ) {LS3}
    ...
    KD 4 -> LS 2 = ca. 50kg ( ab jetzt muß eine "Überbrückungstaste"
    betätigt werden, sonst hält die Anlage an) {LS8}

    Zum Produktionsablauf:
    Es wird ein Drahtbund aufgesetzt und nach oben abgezogen. Solange noch genügend Material vorhanden ist, haben beide LS 1-Signal. Irgendwann wird das Material weniger, läuft aber immernoch durch die LS. Es entsteht also irgendwann ein ständig wechselndes Signal.
    Dafür habe ich folgende Lösung:
    Code:
    // Zähler Set auf Max. 
    U "M0.2" // KD1 war unten
    SPBN For1 // wenn nicht, dann Sprung zu "Vorwärts zählen"
    L DB 1.C_Max // Max_Zähler laden
    T DB 1.C_LS1 // akt. Zähler auf max. Wert 
     
    // Vorwärts zählen 
    For1: UN "E0.0" // LS1
    SPB Rew1 // Sprung zu "Rückwärtszählen LS1"
    S "LS1_Sig1" // Merker "LS Signal= 1" setzen 
    L DB 1.C_LS1 // Vergleich, ob akt. Zähler > Max_Zähler
    L DB 1.C_Max
    >=I
    SPB End1 // Wenn, größer dann ENDE
    L DB 1.C_LS1
    L 1 // sonst Zähler inkrementieren
    +I 
    T DB 1.C_LS1
     
    // Rückwärts zählen 
    Rew1: U "E0.0"
    SPB End1
    L DB 1.C_LS1 // Vergleich, ob Zähler < 1
    L 1
    <I 
    SPB Res1 // Merker Reset
    L DB 1.C_LS1 // akt. Zähler laden
    L 1 // dekrementieren
    -I 
    T DB 1.C_LS1
    L DB 1.C_LS1 // Vergleich, ob Zähler < 1
    L 1
    <I 
     
    Res1: R "LS1_Sig1" // Merker "LS Signal= 1" rücksetzen 
    End1: NOP 0
    Nun könnte ich diesen Ablauf natürlich 8x tippseln.
    Aber mich würde mal interessieren, wie das anders geht.
    (Das muß anders gehen. Alle Programmierer, die ich kenne, sind schreibfaul . Niemals würden die das 8x kopieren und anpassen )
    Ich habe schon mal nach "array" gesucht, weil ich daß von C++ und BPascal kenne. Dort wäre die Lösung recht einfach. In s7 habe ich mal kurz reingelesen... (LAR... +AR... ) und gar keinen Anfang gefunden.
    Ich möchte aber auch nicht 8 IDB's erstellen. (Das wäre ja auch noch eine Möglichkeit. In jedem DB würde aber nur ein Word stehen, das trägt nicht zur Übersichtlichkeit und zum Verständnis des Progis nach Jahren bei.)

    Mir schwebt ein FC vor, dem ich eine ID für die jeweilige LS, eventl. noch den Startbereich (MW...) übergebe.
    Der max_Zähler ist für alle 8 LS gleich, also könnte man den direkt im FC laden.
    Das Ergebnis könnte z.B. so aussehen:
    MW20 => Zähler LS 1 (BYTE scheint mir etwas zu knapp, es sollte schon eine Verzögerung von 2-3 sec. erreicht werden )
    MW22 => Zähler LS 2
    ...
    MW34 => Zähler LS 8

    Ich würde mir das Ganze in etwa so vorstellen:
    var Word_Adr: Byte // Word- Adresse, für die Adresse sollte BYTE reichen
    ID: Byte // ID, bezieht sich auf die Anzahl der LS (max. 8 Stück = BYTE)

    Zugriff auf das jeweilige MW:

    MW[Word_Adr+ID] // wenn das so einfach wäre , das wär' toll

    Von mir aus kann das auch ein DB- Bereich sein; daß wäre mir sogar noch lieber. Dann müßte ich mir nämlich in dem bestehenden Programm keine freien Merker suchen.

    Kann mir jemand bei der Lösung des Problems helfen oder mir wenigstens einige gute Links zum Nachlesen und Selbststudium geben ?
    Es ist garantiert keine Schularbeit !

    Mfg
    Zitieren Zitieren 8x die gleiche Prozedur, geht das auch einfacher ?  

  2. #2
    Registriert seit
    21.11.2007
    Beiträge
    226
    Danke
    200
    Erhielt 24 Danke für 21 Beiträge

    Standard

    Hallo,

    ich weis nicht, ob ich dein Vorhaben richtig verstanden habe,
    aber...warum schreibst du dir keinen fc und deklarierst die in/outs?

    Dann kannst du den Baustein 8x aufrufen und hängst immer verschiedene Variablen dran. Somit hast du dir den Schreibaufwand minimiert.

    Gruß Johannes

  3. Folgender Benutzer sagt Danke zu Roos für den nützlichen Beitrag:

    mega_ohm (04.12.2008)

  4. #3
    mega_ohm ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.11.2006
    Beiträge
    496
    Danke
    217
    Erhielt 25 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Roos Beitrag anzeigen
    Hallo,

    ich weis nicht, ob ich dein Vorhaben richtig verstanden habe,
    aber...warum schreibst du dir keinen fc und deklarierst die in/outs?

    Dann kannst du den Baustein 8x aufrufen und hängst immer verschiedene Variablen dran. Somit hast du dir den Schreibaufwand minimiert.

    Gruß Johannes
    Du hattest es richtig verstanden.

    Ich habe natürlich erstmal probiert, wie das mit einem FC funktioniert (Deswegen bedanke ich mich auch erst jetzt)...
    Es paßt perfekt.

    Mfg

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 30.05.2010, 10:58
  2. einfacher zufallsgenerator
    Von linuxluder im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 30.09.2008, 22:19
  3. Einfacher Nachauf in AWL
    Von noeppkes im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.08.2006, 20:59
  4. Typkonvertierung einfacher?!
    Von Pimsti im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.06.2006, 08:40
  5. Festen Wert in der Prozedur (ProTool)
    Von Jacko im Forum HMI
    Antworten: 1
    Letzter Beitrag: 01.08.2005, 16:05

Lesezeichen

Berechtigungen

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