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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 27

Thema: Strukturierter Text für Anfänger

  1. #11
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Dann brauchst Du aber für jeden Regler noch eine weitere Variable, die den aktuell verwendeten Sollwert enthält, z. B. ActualSet1..ActualSet24. Die Zuweisung würde dann so aussehen:
    Code:
    IF bSet_Temp
    THEN
       ActualSet1:=SET_Temp;
       ActualSet2:=SET_Temp;
       (* usw. *)
       ActualSet24:=SET_Temp;
    ELSE
       ActualSet1:=SET_HZG1;
       ActualSet2:=SET_HZG2;
       (* usw. *)
       ActualSet24:=SET_HZG24;
    END_IF
    Und an dieser Stelle wird es wirklich Zeit, sich mit Arrays zu befassen. Ich stelle mal den entsprechenden Code hier ein, um Dir die Sache schmackhaft zu machen:
    Code:
    VAR
       ActualSet:ARRAY[1..24] OF REAL;  (bzw. den Datentyp, *)
       SET_HZG:ARRAY[1..24] OF REAL;  (den Du für die Sollwerte verwendest *)
       HZG_Index:USINT; (* Schleifenzähler *)
    END_VAR
    
    (* und der Code *)
    IF bSET_Temp
    THEN
       FOR HZG_Index:=1 TO 24 DO
          ActualSet[HZG_Index]:=SET_Temp;
       END_FOR
    ELSE
    (* entweder mit Schleife *)
       FOR HZG_Index:=1 TO 24 DO
          ActualSet[HZG_Index]:=SET_HZG[HZG_Index];
       END_FOR
    (* oder noch einfacher, Zuweisung des Arrays in einem Rutsch *)
       ActualSet:=SET_HZG; (* Diese Zuweisung ist möglich, weil ActualSet und SET_HZG vom gleichen Datentyp sind *)
    ENDIF
    Geändert von StructuredTrash (01.10.2013 um 20:46 Uhr) Grund: Tippfehler

  2. #12
    Registriert seit
    26.12.2011
    Beiträge
    73
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die schnelle Hilfe. Mit dem Array muss ich mich morgen noch befassen da ich da noch wenig durchblick habe.

    Gruß
    Andi

  3. #13
    Registriert seit
    21.10.2010
    Beiträge
    545
    Danke
    60
    Erhielt 42 Danke für 40 Beiträge

    Standard

    Hi

    Wenn wir schon an Ausdrücken und Zuweisungen verkürzen sind, ich hätte da auch seit längerem eine Frage.
    Wenn ich eine Schrittkette mit dem Befehl "CASE ... OF" mache, mache ich die Ausgangsbeschaltung nach dem CASE. Sprich:
    Code:
    var: 
    step:int; 
    end_var
    
    CASE step of
    
    0: bla bla bla
    1: bla bla bla 
    3: etc. .....
    end_case
    
    IF step= 1 or step=3 or step=15 or step=28 or step=98 THEN
    Ausgang:= true;
    ELSE
    Ausgang:= false;
    END_IF
    Nun wäre es noch recht hübsch wenn ich die ellenlange Vergleicherei (step= 1 or step=3 or step=15 or step=28 or step=9 auf etwas wie step=1,3,15,28,95 oder so könnte kürzen.
    Leider habe ich noch keine schlaue Möglichkeit gefunden. Hat da jemand ein guter Tipp?

    Gruss blimaa

  4. #14
    Registriert seit
    26.12.2011
    Beiträge
    73
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi

    @StructuredTrash

    Danke für das Array Beispiel leider durchschaue ich das noch nicht ganz. Kannst du mir vielleicht dazu noch etwas Hilfestellung geben?

    Danke

    Gruß
    Andi

  5. #15
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Zitat Zitat von blimaa Beitrag anzeigen
    Hi

    Wenn wir schon an Ausdrücken und Zuweisungen verkürzen sind, ...
    Code:
    var: 
    step:int; 
    end_var
    
    CASE step of
    
    0: bla bla bla
    1: bla bla bla 
    3: etc. .....
    end_case
    
    IF step= 1 or step=3 or step=15 or step=28 or step=98 THEN
    Ausgang:= true;
    ELSE
    Ausgang:= false;
    END_IF
    Nun wäre es noch recht hübsch wenn ich die ellenlange Vergleicherei (step= 1 or step=3 or step=15 or step=28 or step=9 auf etwas wie step=1,3,15,28,95 oder so könnte kürzen.... Hat da jemand ein guter Tipp?

    Gruss blimaa
    Erst einmal feststellen, was am häufigsten vorkommt, ich nehme einmal an, Ausgang sollte in > 50 % der Cases FALSE sein:

    var:
    step:int;
    end_var
    Ausgang := FALSE; (*setze vorab den Standard Fall *)
    CASE step of

    0: bla bla bla Ausgang := TRUE;
    1: bla bla bla
    2: bla bla bla
    3: bla bla bla Ausgang := TRUE;
    4: etc. .....
    end_case

    Also in der Case Anweisung gleich die "Ausnahmen" mitbehandeln.

    Alternativ auch danach suchen, ob ganze Gruppen zusammen gefasst werden können.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Etwas einfacher geht es so ...  

  6. Folgender Benutzer sagt Danke zu RobiHerb für den nützlichen Beitrag:

    blimaa (03.10.2013)

  7. #16
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    776
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Zitat Zitat von Monsignore Beitrag anzeigen
    Ich möchte erreichen dass wenn ich den Button bSET_Temp drücke alle 24 Regler den Wert SET_Temp übernehmen. Es soll jedoch wenn der Button bSET_Temp nicht gedrückt wird bzw ist jeder Reglersollwert SET_HZG1-24 einzeln parametrierbar ist deshalb die zuweisung im Else zweig.
    Dann lässt du den Else Zweig einfach weg.

    Also nur noch
    Code:
    IF bSET_Temp
    THEN
       SET_HZG1:=SET_Temp;
    END_IF
    Wenn die Bedingung nicht erfüllt ist. kannst du jederzeit von irgendwoher auf SET_HZG1 schreiben weil die Bedingung ja nicht mehr erfüllt ist und daher nicht vom IF Construkt überschrieben wird.


    Hier..
    Code:
        IF bHZG_Aktiv=0 THEN                (*Wenn keine Regler aktiviert werden Freigabe Bit´s 0*)
            bHZG1         :=         FALSE;
            bHZG2        :=         FALSE;
            bHZG3         :=         FALSE;
            bHZG4         :=         FALSE;
            bHZG5         :=         FALSE;
            bHZG6         :=         FALSE;
            bHZG7         :=         FALSE;
            bHZG8         :=         FALSE;
            bHZG9         :=         FALSE;
            bHZG10         :=         FALSE;
            bHZG11         :=         FALSE;
            bHZG12         :=         FALSE;
    Würde ich die False Zuweisung direkt vor dem IF unbedingt machen. Und im IF Konstrukt immer nur die True zuweisen.
    Wenn natürlich keine IF Bedingung erfüllt ist, ist dann aber immer alles auf FALSE.

    also

    Code:
            bHZG1         :=         FALSE;   (*Wenn keine Regler aktiviert werden Freigabe Bit´s 0*)
            bHZG2        :=         FALSE;
            bHZG3         :=         FALSE;
            bHZG4         :=         FALSE;
            bHZG5         :=         FALSE;
            bHZG6         :=         FALSE;
            bHZG7         :=         FALSE;
            bHZG8         :=         FALSE;
            bHZG9         :=         FALSE;
            bHZG10         :=         FALSE;
            bHZG11         :=         FALSE;
            bHZG12         :=         FALSE
    
       IF bHZG_Aktiv=1 THEN             
            bHZG1         :=         True;
       elsif bHZG_Aktiv=2 then
            bHZG1         :=         True;
            bHZG2         :=         True;
    
    etc.
    mfG René
    Geändert von vollmi (03.10.2013 um 09:41 Uhr)

  8. #17
    Registriert seit
    21.10.2010
    Beiträge
    545
    Danke
    60
    Erhielt 42 Danke für 40 Beiträge

    Standard

    @RobiHerb
    Gar keine schlechte Idee! Muss man auch zuerst darauf kommen
    Aber prinzipiell etwas änliches wie step=1,3,15,28,98 oder so gibt es also nicht im ST?
    Ich schreibe halt die Ausgänge gerne unter dem CASE Befehl, somit weiss ich genau, von wo überall der Ausgang beschrieben sein könnte. Respektiv es wird nur an einer Stelle auf den Ausgang geschriben.
    Vieleicht hat noch jemand anderes eine ebenfalls schlaue Idee

    Gruss blimaa

  9. #18
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von blimaa Beitrag anzeigen
    Aber prinzipiell etwas änliches wie step=1,3,15,28,98 oder so gibt es also nicht im ST?
    Du kannst bei der Case-Anweisung für die Auswahl auch eine Wertliste angeben.
    Code:
    CASE step OF
      1, 3, 15, 28, 98: Ausgang := true;
    ELSE
      Ausgang := false;
    END_CASE
    Oder noch klarer
    Code:
    Ausgang := step= 1 or step=3 or step=15 or step=28 or step=98;

  10. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    blimaa (03.10.2013)

  11. #19
    Registriert seit
    21.10.2010
    Beiträge
    545
    Danke
    60
    Erhielt 42 Danke für 40 Beiträge

    Standard

    Hi
    @Thomas_v2.1: Natürlich, Logisch
    Code:
    CASE step OF
      1, 3, 15, 28, 98: Ausgang := true;
    ELSE
      Ausgang := false;
    END_CASE
    Das würde meiner Vorstellung etwa entsprechen. Werde ich doch direkt beim nächsten Projekt anwenden

    So und nun zurück zum Problem des Themenstarters (Sorry für den Thread-Missbrauch)

    Gruss blimaa

  12. #20
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    745
    Danke
    27
    Erhielt 164 Danke für 142 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Monsignore Beitrag anzeigen
    Hi

    @StructuredTrash

    Danke für das Array Beispiel leider durchschaue ich das noch nicht ganz. Kannst du mir vielleicht dazu noch etwas Hilfestellung geben?

    Danke

    Gruß
    Andi
    Ich denke, dass Deine Doku (CoDeSys?) Arrays und Schleifen besser erklärt als ich das hier in Kürze könnte. Lies Dich erst mal da ein, dann wird bestimmt einiges klarer.

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 23.07.2013, 15:02
  2. Strukturierter Text Grundlagen
    Von hansol1991 im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 26.02.2013, 11:30
  3. Strukturierter Text ????HÄ?????
    Von Pinky im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 22.04.2010, 14:26
  4. For Schleif Strukturierter Text
    Von bluebird277 im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 28.01.2010, 20:45
  5. Strukturierter Text
    Von bluebird277 im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 21.01.2010, 15:54

Lesezeichen

Berechtigungen

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