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

Seite 8 von 14 ErsteErste ... 678910 ... LetzteLetzte
Ergebnis 71 bis 80 von 138

Thema: Grundsätzlich: Warum AWL ?

  1. #71
    tymanis ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    20.03.2010
    Beiträge
    134
    Danke
    43
    Erhielt 5 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Eine FC für ne Mittelwertsberechnung, warum nicht ?!
    Wenn ich den Editor öffne klicke ich doch im Menü rum bis ich die Vorlage für eine FC habe, muss ich schonmal nichts tippen. Dann eine Zeile:

    Mittel := ( IN1 + IN2 + IN3 + IN4)/4

    und schon hab ich einen Baustein, den ich geg. häufiger einsetzten kann.

    BTW: Ich versteh garnicht, was ihr gegen den Editor habt. Er bietet doch für vieles ein Grundgerüst. Ich tippe ja kaum noch, bei einer IF-Anweisung füge ich alles ein und tippe nurnoch die Platzhalter in den Code.

  2. #72
    Registriert seit
    08.11.2006
    Ort
    Uckermark
    Beiträge
    903
    Danke
    201
    Erhielt 256 Danke für 208 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Aber wenn man die SPS-Götter in diesem Thread so liest machen die eh nie einen Fehler...
    Diese Aussage ist jetzt wirklich reiner Quatsch!

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Überprüfung ob ein Überlauf stattgefunden hat wie es eine Aneinanderreihung der entsprechenden Bausteine in FUP ergeben würde? Fehlt.
    Also meistens benötige ich diese Überprüfung nicht. Und wenn doch, muss das eben entsprechend ausprogrammiert werden oder man macht es eben in FUP!
    Ich weiß nicht warum hier jetzt schon wieder so eine Grundsatzdiskussion stattfindet....
    Das hat auch nichts mit 'SPS-Göttern' zu tun. Ich selbst programmiere viel in FUP, aber eben nicht alles, und immerhin hat der Themenstarter in diesem Faden die AWL- Anhänger als Deppen bezeichnet und nicht umgekehrt.
    .
    Neue Ideen begeistern jene am meisten, die auch mit den alten nichts anzufangen wussten.
    Karl Heinrich Waggerl (1897-1973)

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

    vierlagig (26.05.2010)

  4. #73
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Hallo Leute!
    Normalerweise poste ich nicht im Simatic-Board, da ich CoDeSys (TwinCAT) nutze.
    Ich würde trotzdem gern mal meine Sicht der Dinge mitteilen.

    Vorweg:
    Ich nutze zu 95% ST (SCL), manchmal FUP.
    Ich habe im Studium zuerst IEC-Programmierung gelernt und erst später Step 7 nutzen müssen. Ich habe nie verstanden, was an AWL so dolle is.

    Wenn ich mal zwei Postings der Vorredner vergleiche, sehe ich keinerlei Vorteile von AWL zu ST (oder SCL).
    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Dieser blöde AWL-Code, ermöglicht aber ein schönes Debuggen und
    zeigt mir seine Zwischenergebnisse, was in der Praxis schon einmal
    enorme Vorteile hat. Für mich ist eine Verkettung von 10 Variabeln
    immer noch nicht Kompliziert. Nocheinmal SCL ist ein tolles Werkzeug,
    aber für einfache Sachen ist AWL einfach besser, dazu hören für micht
    auch einfache Arithmetische Funktion. Die Darstellung in einer Zeile
    ist in meinen Augen nicht vorteilhafter, als wenn es untereinander steht.

    Code:
          L     #Wert_1; 
          L     #Wert_2; 
          +I    ; 
          L     #Wert_3; 
          +I    ; 
          L     #Wert_4; 
          +I    ; 
          T     #RET_VAL;
    Zitat Zitat von tymanis Beitrag anzeigen
    Code:
    Mittel := ( IN1 + IN2 + IN3 + IN4)/4
    Das Argument des besseren Debuggens, weil AWL untereinander steht, gilt für mich nicht, da ich generell untereinander schreiben in ST:
    Code:
    Mittel := 
        ( IN1 
        + IN2 
        + IN3 
        + IN4)
        /4
    Mit ST ist's für mich kürzer und effizienter zu programmieren. Sei's Logik, Arithmetik, Schleifen, oder sonstwas.
    Code:
    bOut := 
      In1
      OR In2
      OR In3;
    ---------------------------------
    IF rVar3 > 0 THEN
      rBerechnung :=
       (rVar1
       + INT_TO_REAL(iVar2) )
        / rVar3;
    END_IF
    ---------------------------------------
    IF In1 
      AND iVar2 <= 10 THEN
         bOut1 := FALSE;
         iVar2 := iVar2 + 1;
    ELSE
      bOut2 := TRUE;
      IF iVar2 > 0 THEN 
        iVar2 := iVar2 - 1;
      END_IF
    END_IF
    ---------------------------------
    FOR i := 0 TO iVar2 DO
      fbArray[i](iarrParameter[i]);   (* mehrfacher FB-Aufruf mit ARRAY von FBs *)
    END_FOR
    Auch Hochsprachenprogrammierer kommen mit ST-Code gut klar, da die Schlüsselwörter meist selbstklärend sind. Bei AWL muss ich immer grübeln, was das nun überhaupt alles bedeutet.

    Mag sein, dass bei Siemens das ganze noch etwas erschwert wird, weil SCL scheinbar in einem speziellen Editor untergebracht ist.
    Mag vielleicht auch viel Gewohnheit mit im Spiel sein. Aber ich hab damals schon keine Vorteile von AWL gesehen und sehe sie auch heute nicht.

  5. #74
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    @trinitaucher: falls du mal zeit und lust hast, kannste folgendes mal in SCL umsetzen ... würde mich interessieren, hab selber aber leider grad keine zeit.

    Code:
    *
    FUNCTION FC 1710 : VOID
    TITLE =READ_CLK
    //Funktion zum Lesen und Speichern der Systemzeit im Merker- oder 
    //Datenbausteinbereich
    //Die Uhrzeit wird fortlaufend ab dem ersten Word am Eingang aDateTime gespeichert
    //Jahr,Monat,Tag,Stunde,Minute,Sekunde,Millisekunde,Wochentag
    //
    //Aufrufbeispiel:
    //      CALL  FC     2
    //       anyDateTime   :=#OB1_DATE_TIME
    //       anyDestination:=DB1.DBW16
    //
    //DATE:     09.12.2008
    //AUTHOR:   4lagig
    //VERSION:  V0.1 BasicVer
    AUTHOR : '4lagig'
    FAMILY : ClockGF
    VERSION : 0.1
    
    
    VAR_INPUT
      anyDateTime : ANY ;	
      anyDestination : ANY ;	
    END_VAR
    VAR_TEMP
      dwTempAR1 : DWORD ;	
      dwTempAR2 : DWORD ;	
      xDB : BOOL ;	
      wDB : WORD ;	
      tTimeDateTemp : DATE_AND_TIME ;	
      iLoop : INT ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          TAR1  #dwTempAR1; // adressregister
          TAR2  #dwTempAR2; // sichern
    
          L     P##anyDestination; // ziel prüfen
          LAR1  ; 
    
          L     W [AR1,P#4.0]; // ob DB
          L     0; 
          <>I   ; 
          SPBN  db2; 
          TAK   ; 
          T     #wDB; 
          SET   ; 
          =     #xDB; 
          SPA   ver; 
    db2:  CLR   ; 
          =     #xDB; // oder nicht
    
    ver:  L     D [AR1,P#6.0]; // speicherbereich aus ANY
          LAR1  ; // in AR1
    
          L     P##anyDateTime; // quelle
          LAR2  ; 
          L     D [AR2,P#6.0]; // adressieren
          LAR2  ; 
    
          U     #xDB; // wenn DB
          SPB   ver2; // die andere schleife nutzen
    
          L     6; 
    nex1: T     #iLoop; // jahr, monat, tag,
          L     B [AR2,P#0.0]; // stunden, minuten, sekunden
          BTI   ; // in integer wandeln
          T     W [AR1,P#0.0]; // und speichern
          +AR1  P#2.0; 
          +AR2  P#1.0; 
          L     #iLoop; 
          LOOP  nex1; 
    
          L     W [AR2,P#0.0]; // millisekunden
          SRW   4; // filtern
          BTI   ; 
          T     W [AR1,P#0.0]; // und speichern
    
          L     W [AR2,P#0.0]; // wochentag
          L     W#16#F; // filtern
          UW    ; 
          BTI   ; 
          T     W [AR1,P#2.0]; // und speichern
    
          SPA   ver3; 
    
    ver2: AUF   DB [#wDB]; 
    
          L     6; 
    nex2: T     #iLoop; 
          L     B [AR2,P#0.0]; 
          BTI   ; 
          T     DBW [AR1,P#0.0]; 
          +AR1  P#2.0; 
          +AR2  P#1.0; 
          L     #iLoop; 
          LOOP  nex2; 
    
          L     W [AR2,P#0.0]; 
          SRW   4; 
          BTI   ; 
          T     DBW [AR1,P#0.0]; 
    
          L     W [AR2,P#0.0]; 
          L     W#16#F; 
          UW    ; 
          BTI   ; 
          T     DBW [AR1,P#2.0]; 
    
    ver3: LAR1  #dwTempAR1; // adressregister zurückspeichern
          LAR2  #dwTempAR2; 
    
          SET   ; //EN0-handling
          SAVE  ; 
    END_FUNCTION
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #75
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    @trinitaucher: falls du mal zeit und lust hast, kannste folgendes mal in SCL umsetzen ... würde mich interessieren, hab selber aber leider grad keine zeit.

    Code:
    *
    FUNCTION FC 1710 : VOID
    TITLE =READ_CLK
    //Funktion zum Lesen und Speichern der Systemzeit im Merker- oder 
    //Datenbausteinbereich
    //Die Uhrzeit wird fortlaufend ab dem ersten Word am Eingang aDateTime gespeichert
    //Jahr,Monat,Tag,Stunde,Minute,Sekunde,Millisekunde,Wochentag
    //
    //Aufrufbeispiel:
    //      CALL  FC     2
    //       anyDateTime   :=#OB1_DATE_TIME
    //       anyDestination:=DB1.DBW16
    //
    //DATE:     09.12.2008
    //AUTHOR:   4lagig
    //VERSION:  V0.1 BasicVer
    AUTHOR : '4lagig'
    FAMILY : ClockGF
    VERSION : 0.1
    
    
    VAR_INPUT
      anyDateTime : ANY ;    
      anyDestination : ANY ;    
    END_VAR
    VAR_TEMP
      dwTempAR1 : DWORD ;    
      dwTempAR2 : DWORD ;    
      xDB : BOOL ;    
      wDB : WORD ;    
      tTimeDateTemp : DATE_AND_TIME ;    
      iLoop : INT ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          TAR1  #dwTempAR1; // adressregister
          TAR2  #dwTempAR2; // sichern
    
          L     P##anyDestination; // ziel prüfen
          LAR1  ; 
    
          L     W [AR1,P#4.0]; // ob DB
          L     0; 
          <>I   ; 
          SPBN  db2; 
          TAK   ; 
          T     #wDB; 
          SET   ; 
          =     #xDB; 
          SPA   ver; 
    db2:  CLR   ; 
          =     #xDB; // oder nicht
    
    ver:  L     D [AR1,P#6.0]; // speicherbereich aus ANY
          LAR1  ; // in AR1
    
          L     P##anyDateTime; // quelle
          LAR2  ; 
          L     D [AR2,P#6.0]; // adressieren
          LAR2  ; 
    
          U     #xDB; // wenn DB
          SPB   ver2; // die andere schleife nutzen
    
          L     6; 
    nex1: T     #iLoop; // jahr, monat, tag,
          L     B [AR2,P#0.0]; // stunden, minuten, sekunden
          BTI   ; // in integer wandeln
          T     W [AR1,P#0.0]; // und speichern
          +AR1  P#2.0; 
          +AR2  P#1.0; 
          L     #iLoop; 
          LOOP  nex1; 
    
          L     W [AR2,P#0.0]; // millisekunden
          SRW   4; // filtern
          BTI   ; 
          T     W [AR1,P#0.0]; // und speichern
    
          L     W [AR2,P#0.0]; // wochentag
          L     W#16#F; // filtern
          UW    ; 
          BTI   ; 
          T     W [AR1,P#2.0]; // und speichern
    
          SPA   ver3; 
    
    ver2: AUF   DB [#wDB]; 
    
          L     6; 
    nex2: T     #iLoop; 
          L     B [AR2,P#0.0]; 
          BTI   ; 
          T     DBW [AR1,P#0.0]; 
          +AR1  P#2.0; 
          +AR2  P#1.0; 
          L     #iLoop; 
          LOOP  nex2; 
    
          L     W [AR2,P#0.0]; 
          SRW   4; 
          BTI   ; 
          T     DBW [AR1,P#0.0]; 
    
          L     W [AR2,P#0.0]; 
          L     W#16#F; 
          UW    ; 
          BTI   ; 
          T     DBW [AR1,P#2.0]; 
    
    ver3: LAR1  #dwTempAR1; // adressregister zurückspeichern
          LAR2  #dwTempAR2; 
    
          SET   ; //EN0-handling
          SAVE  ; 
    END_FUNCTION
    Geht schon los damit, dass ich deinen Code fast überhaupt nicht lesen kann (bzw. verstehe).
    Aber du kannst gern mal meine Codebeispiele in AWL umsetzen . Vielleicht verstehe ich AWL dann etwas besser.

  7. #76
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von trinitaucher Beitrag anzeigen
    Geht schon los damit, dass ich deinen Code fast überhaupt nicht lesen kann (bzw. verstehe).
    Aber du kannst gern mal meine Codebeispiele in AWL umsetzen . Vielleicht verstehe ich AWL dann etwas besser.
    mußt du den code verstehen? da stehen doch kommentare dran!
    es ist klar um was es geht, soll doch keine wortwörtliche sondern eine funktionale übersetzung sein. den code hab ich dir nur gegeben, damit du siehst, dass es in AWL kein problem ist, diese funktion zu realisieren.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. #77
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Die aktuelle Systemzeit auslesen ist im TwinCAT jetzt nicht so schwer, da es vorgefertigte Funktionsbausteine gibt. Der Ergebnisdatetyp TIMESTRUCT ist allerdings kein IEC-Typ.

    Code:
    VAR
        wYear       : WORD;
        wMonth     : WORD;
        wDay        : WORD;
        wHour       : WORD;
        wMinute     : WORD;
        wSecond    : WORD;
        wMilliSec    : WORD;
        wDayOfWeek  : WORD;
    
        dtDateAndTime : DATE_AND_TIME;
        fbNtGetTime    : NT_GetTime;    (* Systembaustein von TwinCAT *)
        iCyc: INT;
    END_VAR
    --------------------------------------
    fbNtGetTime(
        NETID:= '',
        TMOUT:= DEFAULT_ADS_TIMEOUT );
    
    IF fbNtGetTime.BUSY THEN
        fbNtGetTime.START := FALSE;
    ELSE
        iCyc := iCyc +1;     
        IF iCyc = 2 THEN   (* weil der Baustein sich nicht unmittelbar neu triggern lässt *)
            iCyc := 0;
            fbNtGetTime.START := TRUE;
        END_IF
    END_IF
    
    (* Das Ergebnis findet sich im FB-Ausgang fbNtGetTime.TIMESTR *)
    (* optional kann's weiter rumkopiert werden: *)
    
    wYear     := fbNtGetTime.TIMESTR.wYear;
    wMonth    := fbNtGetTime.TIMESTR.wMonth;
    wDay      := fbNtGetTime.TIMESTR.wDay;
    wHour     := fbNtGetTime.TIMESTR.wHour;;
    wMinute   := fbNtGetTime.TIMESTR.wMinute;
    wSecond    := fbNtGetTime.TIMESTR.wSecond;
    wMilliSec  := fbNtGetTime.TIMESTR.wMilliseconds;
    wDayOfWeek:= fbNtGetTime.TIMESTR.wDayOfWeek;
    
    (* Umwandlung in Datentyp DATE_AND_TIME (DT): *)
    
    dtDateAndTime := SYSTEMTIME_TO_DT(fbNtGetTime.TIMESTR);  (* zusatzfunktion von TwinCAT *)
    Geändert von trinitaucher (26.05.2010 um 17:59 Uhr)

  9. #78
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von trinitaucher Beitrag anzeigen
    Die aktuelle Systemzeit auslesen ist im TwinCAT jetzt nicht so schwer, da es vorgefertigte Funktionsbausteine gibt. Der Ergebnisdatetyp TIMESTRUCT ist allerdings kein IEC-Typ.
    thema verfehlt. 6. setzen!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #79
    Registriert seit
    13.10.2007
    Beiträge
    12.033
    Danke
    2.788
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    thema verfehlt. 6. setzen!
    Aber trotzdem, ein sehr nützlicher Baustein findest du nicht auch
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  11. #80
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Helmut_von_der_Reparatur Beitrag anzeigen
    Aber trotzdem, ein sehr nützlicher Baustein findest du nicht auch
    ehrlich? ich find meinen übersichtlicher...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 18.05.2011, 09:34
  2. Antworten: 9
    Letzter Beitrag: 26.03.2011, 20:47
  3. Grundsätzlich PID mit S7 Programmieren
    Von Bensen83 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.12.2009, 10:29
  4. Grundsätzlich: Unterschied FU - Servoverstärker
    Von trinitaucher im Forum Antriebstechnik
    Antworten: 28
    Letzter Beitrag: 17.05.2009, 20:34
  5. Wie regelt man grundsätzlich die Temperatur
    Von wonderfulworld im Forum Elektronik
    Antworten: 19
    Letzter Beitrag: 28.08.2007, 17:12

Lesezeichen

Berechtigungen

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