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

Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 36

Thema: TIA SCL-Code vereinfachen ?

  1. #21
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.338
    Danke
    387
    Erhielt 218 Danke für 173 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Blockmove Beitrag anzeigen
    Schau dir die Sichten / Views (Deklaration mit AT) an.
    Das macht dann richtig Spass!

    Gruß
    Dieter
    Hallo Dieter,

    Und schon bin ich wieder überfordert.
    Meinst du "Variablen mit AT überlagern" ?
    Irgendwie finde ich der Sicht nicht.

    Es kann auch meine Testumgebung sein (300/400er).
    Wobei ich es beim 1500er auch nicht finde.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  2. #22
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.242 Danke für 973 Beiträge

    Standard

    Hier mal ein Beispiel mit Anypointer

    Deklaration
    Code:
    VAR_TEMP    // temporäre Variablen
        iRetVal         : INT;  // Rückgabewert von Funktionen, SFC, ...
        anyQuellDaten   : ANY;  // Any-Pointer Quelldaten
        vQuellDaten AT anyQuellDaten : STRUCT //Sicht auf Anypointer-Quelldaten
            byID  : BYTE;
            byTyp : BYTE;
            iAnz  : INT;
            iDBNr : INT;
            dwPTR : DWORD;
            END_STRUCT;
    
    
    END_VAR
    Anypointer für Blockmove aufbereiten und Daten kopieren
    Code:
    vQuelldaten.byID  := 16#10;
    vQuelldaten.byTyp := 16#02;
    vQuelldaten.iAnz  := 26;
    vQuelldaten.iDBNr := "Datenverw".AuftragNr + 101;
    vQuelldaten.dwPtr := 16#84000000; // Zeiger auf DBX0.0
    iRetVal:= BLKMOV(SRCBLK := anyQuelldaten, DSTBLK := "Auftrag".Next);
    Gruß
    Dieter

  3. #23
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.338
    Danke
    387
    Erhielt 218 Danke für 173 Beiträge

    Standard

    Hallo Dieter,

    Das muss ich mir mal im alle ruhe anschauen. Im Moment verstehe ich es nicht.
    Was ich jetzt in SCL mache ist reine Analogwertverarbeitung und Rangierung der Signalen.

    Da ist mir wieder so ne Sache über die Füssen gelaufen.
    Was mach Mann wenn ein Boolsche variable immer mit der selbe Formel (Logik) beschrieb wird?

    In mein fall :

    immer wieder die Formel ausfüllen

    Code:
        #HH_AL_1oo2_OUT := (#HH_AL_Intern_Channel_A AND NOT #MF_AL_Intern_Channel_A) OR (#HH_AL_Intern_Channel_B AND NOT #MF_AL_Intern_Channel_B);
            #STATE_HMI_1oo2.HH_ALARM_1oo2_OUT := (#HH_AL_Intern_Channel_A AND NOT #MF_AL_Intern_Channel_A) OR (#HH_AL_Intern_Channel_B AND NOT #MF_AL_Intern_Channel_B);
            #Comm_ZLT."STATE 1oo2".HH_ALARM_1oo2_OUT := (#HH_AL_Intern_Channel_A AND NOT #MF_AL_Intern_Channel_A) OR (#HH_AL_Intern_Channel_B AND NOT #MF_AL_Intern_Channel_B);
            #Signal_Bytes_HMI."1oo2".HH_ALARM_1oo2 := (#HH_AL_Intern_Channel_A AND NOT #MF_AL_Intern_Channel_A) OR (#HH_AL_Intern_Channel_B AND NOT #MF_AL_Intern_Channel_B);
            #Comm_ZLT."Failure Messages 1oo2".HH_ALARM_1oo2 := (#HH_AL_Intern_Channel_A AND NOT #MF_AL_Intern_Channel_A) OR (#HH_AL_Intern_Channel_B AND NOT #MF_AL_Intern_Channel_B);
    Mit IF-ELSE

    Code:
         IF  (#HH_AL_Intern_Channel_A AND NOT #MF_AL_Intern_Channel_A) OR (#HH_AL_Intern_Channel_B AND NOT #MF_AL_Intern_Channel_B)THEN
                #HH_AL_1oo2_OUT := true;
                #STATE_HMI_1oo2.HH_ALARM_1oo2_OUT := true;
                #Comm_ZLT."STATE 1oo2".HH_ALARM_1oo2_OUT := true;
                #Signal_Bytes_HMI."1oo2".HH_ALARM_1oo2 := true;
                #Comm_ZLT."Failure Messages 1oo2".HH_ALARM_1oo2 := true;
            ELSE
                #HH_AL_1oo2_OUT := false;
                #STATE_HMI_1oo2.HH_ALARM_1oo2_OUT := false;
                #Comm_ZLT."STATE 1oo2".HH_ALARM_1oo2_OUT := false;
                #Signal_Bytes_HMI."1oo2".HH_ALARM_1oo2 := false;
                #Comm_ZLT."Failure Messages 1oo2".HH_ALARM_1oo2 := false;
                ;
            END_IF;
    Oder mit zwischenspeicher

    Code:
      #Zwischenspeicher := (#HH_AL_Intern_Channel_A AND NOT #MF_AL_Intern_Channel_A) OR (#HH_AL_Intern_Channel_B AND NOT #MF_AL_Intern_Channel_B);
            #HH_AL_1oo2_OUT := #Zwischenspeicher;
            #STATE_HMI_1oo2.HH_ALARM_1oo2_OUT := #Zwischenspeicher;
            #Comm_ZLT."STATE 1oo2".HH_ALARM_1oo2_OUT := #Zwischenspeicher;
            #Signal_Bytes_HMI."1oo2".HH_ALARM_1oo2 := #Zwischenspeicher;
            #Comm_ZLT."Failure Messages 1oo2".HH_ALARM_1oo2 :=   #Zwischenspeicher;
    Hab mich z.b. entschieden für die erste variant.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  4. #24
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.242 Danke für 973 Beiträge

    Standard

    Bram, ich hätte Variante 2 verwendet.
    Sie ist schlichtweg am besten lesbar.
    Am schnellsten ist Variante 3.
    Variante 1 würde ich nicht nehmen, du 3mal das Erbebnis bilden musst.

    Gruß
    Dieter

  5. Folgender Benutzer sagt Danke zu Blockmove für den nützlichen Beitrag:

    de vliegende hollander (07.05.2015)

  6. #25
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Zitat Zitat von NeoNlAmp3 Beitrag anzeigen
    Mahlzeit.
    Hab mich grad wegen dieser Diskusion angemeldet, da ich selber eine Frage diesbezüglich habe und jeden tag ins Forum schaue um neue Ideen zu sammeln.
    Wie würdet ihr das Vorzeichen einer Real variable in SCL entfernen? Ich hab das Bisher so gemacht
    Code:
     #T_POS_RE_DIF := DWORD_TO_REAL(DW#16#7FFFFFFF And REAL_TO_DWORD(#IO_AKT_PRG[1].WKZ_H - #IO_AKT_PRG[2].WKZ_H));
    was absolut nicht schön ist, so mach ich das normaler weise auch in AWL.
    Hallo

    also bei AS300 und AS400 mach ich das auch so. Und wegen der Subtraktion ist das auch bei 1200 und 1500 nicht schlecht.

    Bei 1200 und 1500 geht es inzwischen auch mittels

    Code:
    #T_POS_RE_DIF  := #IO_AKT_PRG[1].WKZ_H - #IO_AKT_PRG[2].WKZ_H;
    #T_POS_RE_DIF.%x31 := FALSE;
    dauert aber in etwa genauso lange.


    'n schön' Tach auch
    HB

  7. #26
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Code:
    #t_pos_re_dif := ABS(#io_akt_prg[1].wkz_h - #io_akt_prg[2].wkz_h);

    Hallo Ralle

    ABS( -3 ) ist 3
    -3 AND 16#7FFF_FFFF = 16#7FFF_FFFD = 2147483645

    also nicht das was hier gesucht wird.

    'n schön' Tach auch
    HB

  8. #27
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Hier mal ein Beispiel mit Anypointer

    Deklaration
    Code:
    VAR_TEMP    // temporäre Variablen
        iRetVal         : INT;  // Rückgabewert von Funktionen, SFC, ...
        anyQuellDaten   : ANY;  // Any-Pointer Quelldaten
        vQuellDaten AT anyQuellDaten : STRUCT //Sicht auf Anypointer-Quelldaten
            byID  : BYTE;
            byTyp : BYTE;
            iAnz  : INT;
            iDBNr : INT;
            dwPTR : DWORD;
            END_STRUCT;
    
    
    END_VAR
    Anypointer für Blockmove aufbereiten und Daten kopieren
    Code:
    vQuelldaten.byID  := 16#10;
    vQuelldaten.byTyp := 16#02;
    vQuelldaten.iAnz  := 26;
    vQuelldaten.iDBNr := "Datenverw".AuftragNr + 101;
    vQuelldaten.dwPtr := 16#84000000; // Zeiger auf DBX0.0
    iRetVal:= BLKMOV(SRCBLK := anyQuelldaten, DSTBLK := "Auftrag".Next);
    Gruß
    Dieter

    Nun verwirr den armen Anfänger doch nicht so.
    AT ist was für Notfälle, aber kein schnelles sauberes SCL.

  9. Folgender Benutzer sagt Danke zu HelleBarde für den nützlichen Beitrag:

    de vliegende hollander (08.05.2015)

  10. #28
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Zitat Zitat von Blockmove Beitrag anzeigen
    Bram, ich hätte Variante 2 verwendet.
    Sie ist schlichtweg am besten lesbar.
    Am schnellsten ist Variante 3.
    Variante 1 würde ich nicht nehmen, du 3mal das Erbebnis bilden musst.

    Gruß
    Dieter

    Hallo

    Ganz klar Variante 3 mit dem Zwischenspeicher.
    Kurz, übersichtlich und sogar noch schnell.

    'n schön' Tach auch
    HB

  11. Folgender Benutzer sagt Danke zu HelleBarde für den nützlichen Beitrag:

    de vliegende hollander (08.05.2015)

  12. #29
    Registriert seit
    22.11.2007
    Beiträge
    731
    Danke
    6
    Erhielt 89 Danke für 62 Beiträge

    Standard

    ich muss HelleBarde ganz klar bestätigen - stell dir einfach vor deine Bedingung und die Anzahl an Zielvariablen wäre doppelt/dreifach so Umfangreich - es Gewinnt immer die 3. Varianten - in Schreibaufwand, Lesbarkeit, Wartbarkeit und Geschwindigkeit

    Oberstes Ziel ist es immer redundaten Code zu vermeiden - alles was mehr als 1 mal vorkommt und komplex ist muss normalerweise in eine Zwischenvariable
    Geändert von LowLevelMahn (08.05.2015 um 06:35 Uhr)

  13. Folgender Benutzer sagt Danke zu LowLevelMahn für den nützlichen Beitrag:

    de vliegende hollander (08.05.2015)

  14. #30
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.338
    Danke
    387
    Erhielt 218 Danke für 173 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    O.k.,

    Danke für den feedback

    Bin jetzt dabei zu ändern in Variant 3

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

Ähnliche Themen

  1. TIA SCL Code Problem
    Von lsr im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 19.02.2015, 22:44
  2. Step 7 SCL Code
    Von Casio im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 12.03.2014, 10:33
  3. Exponent im SCL Code
    Von paula23 im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 08.09.2013, 19:40
  4. SCL code
    Von awl-scl im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 14.01.2008, 17:02
  5. 1.Adressübertragung?, 2.SCL-code?
    Von hobel im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 05.09.2006, 14:49

Lesezeichen

Berechtigungen

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