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

Ergebnis 1 bis 8 von 8

Thema: Hilfe bei SCL-Programm

  1. #1
    Registriert seit
    02.06.2010
    Beiträge
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen,

    ich habe ein riesen Problem bei meinem SCL-Programm. Zum Hintergrund: Ich soll ein AWL-Programm teilweise in SCL übersetzten und noch ein paar Sachen ergänzen. Nun zu meinem Problem: Ich möchte mir aus einem DB ein Datenword holen und dass in ein höhres Datenword wieder abspeichen. Also zum Beispiel Wert aus DW 30 in DW 32 speichern. Das Ganze als Ringspeicher also bis zum DW 0 wieder holen. Ich habe jetzt schon 2 Varianten probiert: 1. eine For-Schleife (If-Abfrage nur zu Testzwecken) und einer Repeat-Schleife. Ich simuliere audf dem PLS-Sim von Simatic. Mein Problem ist, dass er in alle Datenwörter den Wert von DW 0 scheibt und da weiß ich nicht mehr weiter. Hat hier vielleicht jemand eine Idee.?? Hab mit SCL noch nicht soviel gemacht.
    Code:
    VAR_INPUT
        Impuls : BOOL;
        Impuls_15min : BOOL;
        EM_DB : BLOCK_DB;    
    END_VAR
        
        
    VAR_TEMP
      // temporäre Variablen
    
    
    END_VAR
    
    
    VAR
      // statische Variablen
      Laufzeit: S5TIME;
      Zeit: S5TIME;
      binWert: WORD;
      Hilfsmerker:BOOL;
      Flankenmerker:BOOL;
      Hilfswert1: INT;
      Index: INT;
      Index1: INT;
      Hilfswert: Word;
    
    END_VAR
    
      // Anweisungsteil
    BEGIN
    
    Index1 := 30;
    
      REPEAT
        Index1 := Index1-2;
        Hilfswert := EM_DB.DW[Index1];
        EM_DB.DW[Index1+2]:= Hilfswert;
        //Index1 := Index1-2;
      UNTIL 
        Index1 = 0
      END_REPEAT;
    
    //  FOR Index := 30 TO 0 BY -2 DO
        // Anweisungsteil  
    //      Hilfswert := EM_DB.DW[Index];
    //      EM_DB.DW[Index+2]:= Hilfswert; 
    //      EM_DB.DW[Index+32] := INT_TO_WORD(Index); 
    //    IF Index = 26 THEN
        // Anweisungsteil_IF
    //        EXIT;
    //    END_IF;
    
    //  END_FOR;
    Zitieren Zitieren Hilfe bei SCL-Programm  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    dein Haupt-Problem ist, dass der Durchlauf ja nicht nur einmal statt findet sondern immer wieder. Du müßtest da ein Start-Bit mit Flankenauswertung einbauen.

    Also vielleicht so :
    Code:
    if Start_Schieben and not Schieben_OK then
     
    ...
     
    end_if ;
    Schieben_OK := Start_Schieben ;
    deine Schleife könnte dann auch so aussehen :
    Code:
    FOR Index := 30 TO 0 BY -2 DO
         EM_DB.DW[Index+2] := EM.DW[Index] ; 
    end_for ;
    Gruß
    LL

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

    Nollo84 (02.06.2010)

  4. #3
    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

    ist denn der EM_DB.DW0 ein sich zyklisch ändernder wert?
    bleibt er über 30zyklen null, ist natürlich auch dein ringspeicher, sofern zyklisch aufgerufen nach diesen 30zyklen null...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #4
    Nollo84 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.06.2010
    Beiträge
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    traumhaft danke Larry das mit der Startbedindung für die Schleife hat mir irgendwie gefehlt ich danke dir

  6. #5
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard

    kleiner Tipp:

    schon mal was von Blockkommentar gehört?

    Code:
    (*
    
    Das ist alles Kommentar,
    das auch!!
    
    *)

  7. #6
    Nollo84 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    02.06.2010
    Beiträge
    3
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Erstmal vielen Dank an alle die geholfen haben.

    Jetzt hätte ich noch eine Frage:
    Ich habe eine Array [0..15] of Real, dass ich Stufen gennant habe. Ich möchte das Array jetzt im Programm nochmal komplett auf 0.0 setzen. Ich habe jetzt schonmal probiert mit
    Stufen[0..15]:= 0.0; aber auch schon mit Stufen[0..15]:= 16(0.0);
    Gibt es einen Befehl wie ich dass machen kann??? Ich wollte eine For-Schleife oder ähnliches vermeiden. Gibt es einen kurzen Befehl??

    Gruß nollo84

  8. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Zitat Zitat von Nollo84 Beitrag anzeigen
    Erstmal vielen Dank an alle die geholfen haben.

    Jetzt hätte ich noch eine Frage:
    Ich habe eine Array [0..15] of Real, dass ich Stufen gennant habe. Ich möchte das Array jetzt im Programm nochmal komplett auf 0.0 setzen. Ich habe jetzt schonmal probiert mit
    Stufen[0..15]:= 0.0; aber auch schon mit Stufen[0..15]:= 16(0.0);
    Gibt es einen Befehl wie ich dass machen kann??? Ich wollte eine For-Schleife oder ähnliches vermeiden. Gibt es einen kurzen Befehl??

    Gruß nollo84
    Ich denke, um eine Schleife kommst du da nicht herum!
    Es gibt zwar noch einen Baustein von Siemens, Fill, aber der macht ja im Prinzip intern auch nichts anderes und es kommt auch darauf an, worauf du genau zugreifen willst, da Fill wie Block_move mit Any arbeitet. Nimm also lieber die Schleife, gerade in SCL ist das ja einfach.
    Geändert von Ralle (21.06.2010 um 15:22 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  9. #8
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Genau, da brauchst ne Schleifen.

    Code:
    := (16) 0.0;
    funktioniert nur zum initialisieren bei der Variablendefinition.

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 09.12.2010, 18:08
  2. S7 programm schreiben-Hilfe
    Von tintin im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 11.05.2009, 21:03
  3. HILFE!!!! Programm zur Kesselfolgeschaltung
    Von Tobser im Forum Programmierstrategien
    Antworten: 21
    Letzter Beitrag: 28.12.2008, 21:56
  4. SPS Programm als FUP brauche HILFE!!!
    Von Pawel im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 24.09.2008, 15:35
  5. Hilfe bei Programm AWL
    Von e_huellen im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 08.04.2007, 05:13

Stichworte

Lesezeichen

Berechtigungen

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