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

Ergebnis 1 bis 6 von 6

Thema: Schleife oder nicht ?

  1. #1
    Registriert seit
    13.01.2011
    Beiträge
    39
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Tach Freunde

    Ich muss mehrere (12) komplett identische aber jeweils recht umfangreiche Funktionen programmieren und später auch evtl. öfters mal abändern.

    Kann man eine Schleifenvariable nehmen (X 1..12) und die entsprechenden Werte in Arrays "Wert[1..12]" auslesen/bearbeiten/setzen ?
    (*x ist eine globale Variable*)

    START TASK
    ...
    x:=x+1;
    if (x>12) then
    x:=1;
    End_if;
    Abarbeitung();

    ...
    END TASK



    Oder ist diese Strategie eher negativ weil eine Aktion immer erst beim Erreichen der passenden Schleife ausgeführt wird.

    Es geht 12 mal um Tastenabfrage (Klick.. Doppelklick..dreifach klick.. langer Klick mit jeweils anderen Funktionen dahinter) und eine gleichzeitige Betätigung der Taster ist eher ausgeschlossen, und wenn doch wäre es nicht wirklich wichtig.

    Besten Dank
    Geändert von Binatone (28.01.2011 um 20:52 Uhr) Grund: etwas ergänzt zur Verdeutlichung
    Zitieren Zitieren Schleife oder nicht ?  

  2. #2
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Tach Freund,

    Zitat Zitat von Binatone Beitrag anzeigen
    ..Kann man eine Schleifenvariable nehmen (X 1..12) und die entsprechenden Werte in Arrays "Wert[1..12]" auslesen/bearbeiten/setzen ?..
    Prinzipiell kann man das. Da du u.a. einen Doppelklick von einem Einfachklick unterscheiden willst, wäre eine zyklische Abarbeitung aller Tasten gescheiter. Daher würde ich zu einer FOR-Schleife tendieren. Oder du schreibst einen FB (für nur eine Taste) und rufst ihn zwölf mal auf.

    Oder: Eventuell könnte man auch "x" durch die jeweilige Taste setzen.
    Geändert von Onkel Dagobert (28.01.2011 um 21:41 Uhr)
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  3. #3
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    749
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Kommt auf die Task-Zykluszeit an. Wenn ein Tastendruck kürzer als 12 Zyklen sein kann, wirst Du nicht jeden Klick erwischen. Wenn es die Rechenleistung zulässt, würde ich auch lieber alle Taster zyklisch bearbeiten.
    Falls nicht, wäre noch Folgendes denkbar:
    Solange kein Taster betätigt ist, in jedem Zyklus alle Taster abfragen, und bei einer L-H-Flanke in den folgenden Zyklen nur noch diesen Taster bearbeiten, bis er wieder losgelassen wurde und die max. Zeit bis zu seinem nächsten Klick abgelaufen ist.

  4. #4
    Registriert seit
    17.08.2010
    Ort
    Blaichach
    Beiträge
    84
    Danke
    1
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Zitat Zitat von StructuredTrash Beitrag anzeigen
    Kommt auf die Task-Zykluszeit an. Wenn ein Tastendruck kürzer als 12 Zyklen sein kann, wirst Du nicht jeden Klick erwischen. Wenn es die Rechenleistung zulässt, würde ich auch lieber alle Taster zyklisch bearbeiten.
    Falls nicht, wäre noch Folgendes denkbar:
    Solange kein Taster betätigt ist, in jedem Zyklus alle Taster abfragen, und bei einer L-H-Flanke in den folgenden Zyklen nur noch diesen Taster bearbeiten, bis er wieder losgelassen wurde und die max. Zeit bis zu seinem nächsten Klick abgelaufen ist.
    eine FOR...Schleife wir komplett in einem Zyklus abgearbeitet...

    also wenn Du deinen Code in einen FB packst und die instanzen als ein Array deklarierst hast du kein problem...
    Wenn du aus der Instanz direkt auf EA´s zugreigen willst kannst du diese im FP z.B. als:

    Eingang at %IX* : bool;

    deklarieren und dann außerhalb (var_config) zuweisen.


    (* Deklaration *)

    TuWas : Array[1..12] of Mein_FB;
    Idx : int;


    (* Programm *)

    FOR Idx := 1 TO 12 DO
    TuWas[Idx]();
    END_FOR

    Oder mal hier lesen


    Gruß Bernd
    Real programmers don’t comment their code. It was hard to write, it should be hard to understand.

  5. #5
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    749
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard

    Zitat Zitat von BerndAllgäu
    eine FOR...Schleife wir komplett in einem Zyklus abgearbeitet...
    Richtig. Aber Binatone hat in seinem Code ja keine FOR-Schleife, sondern einen Indexzähler, der in jedem Zyklus hochgezählt wird. Dann wird pro Zyklus nur einer der Taster bearbeitet, und jeder Taster-Signalzustand muss für min. 12 Zyklen anliegen, um sicher erkannt zu werden.

  6. #6
    Registriert seit
    17.08.2010
    Ort
    Blaichach
    Beiträge
    84
    Danke
    1
    Erhielt 9 Danke für 9 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Oh - das hab ich wohl überlesen - sorry für die belehrung *g*

    lg Bernd
    Real programmers don’t comment their code. It was hard to write, it should be hard to understand.

Ähnliche Themen

  1. Entscheidungshilfe, C-SPS oder nicht?
    Von eYe im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 23.03.2011, 17:04
  2. Antworten: 35
    Letzter Beitrag: 14.09.2010, 14:16
  3. IF oder FOR Schleife in AWL?
    Von motamas im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 21.07.2010, 14:19
  4. Original oder nicht?
    Von Peter_AUT im Forum Suche - Biete
    Antworten: 6
    Letzter Beitrag: 26.06.2010, 19:00
  5. Signatur oder nicht ...
    Von DELTALOGIC Support im Forum Stammtisch
    Antworten: 0
    Letzter Beitrag: 20.06.2006, 13:55

Lesezeichen

Berechtigungen

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