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

Ergebnis 1 bis 7 von 7

Thema: Hilfe bei Funktionsoptimierung IF ELSEIF ELSE

  1. #1
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Böse


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi leute,

    ich habe ein Problem, welches mein Programm überquellen lässt.

    Ich kann mir vorstellen, dass es für mein problem eine "relativ einfache" Lösung gibt.

    Momentan ist dies hier ein Auszug aus meinem Programm, in welchem ich einem Analogwert (AnalVal1) verschiedene, einstellbare Szenenwerte zuweisen will:

    Code:
    (*Licht einschalten  *)
    IF AnalVal1 = 0 AND W1Imp = TRUE THEN
    AnalVal1 := StartValW1;
    (* Licht ausschalten *)
    ELSIF AnalVal1 > 0 AND W1Imp = TRUE THEN
    AnalVal1 := 0;
    (* Szenenwert für Szenen 1-8 setzen *)
    ELSIF Scene1Imp = TRUE THEN
    AnalVal1 := Scene1ValW1;
    ELSIF Scene2Imp = TRUE THEN
    AnalVal1 := Scene2ValW1;
    ELSIF Scene3Imp = TRUE THEN
    AnalVal1 := Scene3ValW1;
    ELSIF Scene4Imp = TRUE THEN
    AnalVal1 := Scene4ValW1;
    ELSIF Scene5Imp = TRUE THEN
    AnalVal1 := Scene5ValW1;
    ELSIF Scene6Imp = TRUE THEN
    AnalVal1 := Scene6ValW1;
    ELSIF Scene7Imp = TRUE THEN
    AnalVal1 := Scene7ValW1;
    ELSIF Scene8Imp = TRUE THEN
    AnalVal1 := Scene8ValW1;
    END_IF;
    Eine kleiner Erklärung zu den Variablen:

    - Scene1ValW1 steht für "Szenenwert der Szene Nr. 1 für Lichtfarbe Weißlicht1"
    - Scene1Imp steht für "Scenen-Impuls", also den Initiator für das setzen des Analogwertes
    - W1Imp steht für "Weißlicht1 Impuls", also den Einschaltimpuls für Weißlicht1

    Nun habe ich insgesamt vorerst 8 Szenen und 5 Lichtfarben.
    Das heisst, dass ich diese Zeilen 5 mal im Programm einfügen muss.

    Das ist eine "dumme" Arbeit, die wie ich finde lästig ist und bestimmt vereinfachbar ist.

    Ich hatte schon etwas von "array"-Funktionen gehört, allerdings kenne ich diese nicht wirklich und wäre über eine Erklärung des Lösungsweges (falls es einen gibt) sehr dankbar.

    Beste Grüße,

    Florian
    Zitieren Zitieren Hilfe bei Funktionsoptimierung IF ELSEIF ELSE  

  2. #2
    Registriert seit
    10.04.2012
    Beiträge
    21
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Willst du wissen wie man mit Array umgeht?

  3. #3
    Avatar von KingHelmer
    KingHelmer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Standard

    Wenn du denkst, dass dieses Problem mit Array Funktionen zu lösen ist, dann ja

  4. #4
    Registriert seit
    10.04.2012
    Beiträge
    21
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Mh ich erkenne dein Problem nicht. Naja egal.

    Also einen Array deklarieren kannst du mit:
    ArrayName : Array [1..10] of datentyp;

    und zurgreifen mit:
    ArrayName[Nummer]:=irgendwas

    Der Vorteil ist das du das ganze in einer For-Schleife verwenden kannst.

    for i=1 to 10 by 1 do
    ArrayName[i]:= ......
    end_for

    Weiß nicht ob du das wissen wolltest. Du kannst auch einen Array of Strukts machen.

  5. #5
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Woher kommen denn die Scene-Imp's ? Sind das IN-Parameter deines Bausteins ?
    Müssen das 8 IN's sein oder ginge auch ein IN als Imp und eine Nummer zum Auswählen ?

  6. #6
    Avatar von KingHelmer
    KingHelmer ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    21.02.2011
    Ort
    Deutschland, Baden-Würtemberg
    Beiträge
    990
    Danke
    115
    Erhielt 125 Danke für 100 Beiträge

    Standard

    hi Lupo,

    es gibt 1 Taster für Szene 1, einen Taster für szene 2, einen für szene 3 und so weiter und so weiter.
    Also insgesamt 8 inputs.

    Drücke ich einen dieser Taster, beispielsweise szene Nr. 4, so muss jeder "Lichtsorte" (5 Stück an der Zahl) eine einstellbare Lichtstärke (zum Beispiel 80% Grün, 30% Blau, 20% Rot, 10% Weiß 1, 5% Weiß 2) zugewiesen werden.

    Die Lichtstärke stelle ich über AnalVal1 ein. Dieser AnalVal1 ist der Analogwert eines 1-10V Analogausgabeklemme, welche ein Vorschaltgerät von RGBW-Leuchten ansteuert.
    In diesem Fall ist AnalVal1 eben für das Weißlicht Nr. 1 zuständig.
    Es gibt dann weiterhin im Baustein noch AnalVal2, AnalVal3, AnalVal4 und AnalVal5.

    Es müssen also für jede Szene und für jede Farbe ein bestimmter Prozentwert als Integer hinterlegt werden, welcher durch betätigen des Szenentasters auf den entsprechenden Analogausgang zugewiesen wird.

    Ist es jetzt klarer geworden?

    Grüße

  7. #7
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.733
    Danke
    317
    Erhielt 1.522 Danke für 1.283 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also wäre hier zur sinnvollen Array Adressierung folgendes nötig:

    arSceneImp : ARRAY[1..8] OF BOOL ;
    arSceneVal : ARRAY[1..8] OF typSceneValues;

    typSceneValues
    Red : INT;
    Green : INT ;
    Blue : INT ;
    White : INT ;
    Temperature: INT ;

    Code:
    FOR iSchleife := 1 TO 8 BY 1 DO
        IF arSceneImp[iSchleife] THEN
             AnalVal1 := arSceneVal[iSchleife].Red
             AnalVal2 := arSceneVal[iSchleife].Green
             AnalVal3 := arSceneVal[iSchleife].Blue
             AnalVal4 := arSceneVal[iSchleife].White
             AnalVal5 := arSceneVal[iSchleife].Temperature
    
             (* Eventual *)
             arSceneImp[iSchleife] := FALSE ;
    
       END_IF;
    END_FOR;
    
    IF NOT Ligth_On THEN
        AnalVal1 := 0 ;
        AnalVal2 := 0 ;
        AnalVal3 := 0 ;
        AnalVal4 := 0 ;
        AnalVal5 := 0 ;
    END_IF;
    Das ganze ist sicher ausbaufähig, aber die Grundweise sollte klar werden.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

Ähnliche Themen

  1. Hilfe bei Problem bei TechnikerArbeit
    Von Borschd im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 04.01.2012, 06:26
  2. Hilfe bei Konformitätserklärung
    Von schneemann86 im Forum Maschinensicherheit - Normen und Richtlinien
    Antworten: 10
    Letzter Beitrag: 03.11.2009, 16:26
  3. Hilfe bei Frequenzumformer
    Von rene im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 25.07.2007, 11:48
  4. Hilfe bei Halbautomatik
    Von rene im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 30.06.2007, 16:21
  5. HILFE bei Schutzgitterendschalter
    Von stefand im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 14.06.2007, 10:50

Stichworte

Lesezeichen

Berechtigungen

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