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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Arrays in S7 schreiben

  1. #1
    Registriert seit
    13.09.2005
    Beiträge
    633
    Danke
    8
    Erhielt 8 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ist es möglich für die S7 so etwas wie eine for - Schleife in C oder Basic zu schreiben?

    Die Schleife würde in etwa o aussehen:

    for (i = 1 to 100 step 1)
    (Berechnungen)
    .
    .
    .
    Ergebnis[i] = zwischen * exp (hilf)
    next

    Ich schaffe es nicht das Array über eine Variable zu schreiben.

    Kann die S7 so etwas als AWL - Code.

    Konkret ist mein Feld im DB151 und beginnt ab der Adresse DBD8. Die Variablen sind REAL - Variablen.
    Zitieren Zitieren Arrays in S7 schreiben  

  2. #2
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    kannst du mit scl machen

    geht aber auch leicht mit pointern in awl

    Code:
          L     #Datenanfang
          T     #akt_dw
    
    anf:  NOP   0                           //schleifenanfang
    
          L     #akt_dw
          SLD   3
          LAR1  
    ...
    ...
          T     DBD [AR1,P#0.0]
    
          L     #akt_dw
          L     4
          +D                                //nächstes dw
          T     #akt_dw
          L     #Datenende
          >D    
          SPB   ende                        //Schleifenende erreicht
    
          SPA   anf                         //zum Schleifenanfang
    ende: nop 0
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Oder mit dem Loop-Befehl, siehe Hilfe in Step7.
    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

  4. #4
    CrazyCat ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.09.2005
    Beiträge
    633
    Danke
    8
    Erhielt 8 Danke für 6 Beiträge

    Standard

    Danke!


    Damit das funktioniert muss ich den DB zuerst öffnen, oder?

    AUF DB151 //??????

    Dann übertrage ich nur die Zahl der Anfangsadresse in akt_dw.

    Also bei DB150.DBW20 muss in akt_dw 20 stehen, richtig?

    Was bewirkt SLD3?

    Wofür ist der Zusatz p#0.0?

    Für akt_dw ist nur der Datentyp INT zulässig, oder?

    Die Suche nach LOOP hat nichts ergeben.

  5. #5
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    Damit das funktioniert muss ich den DB zuerst öffnen, oder?

    >>AUF DB151 //??????
    richtig

    >>Dann übertrage ich nur die Zahl der Anfangsadresse in akt_dw.
    >>Also bei DB150.DBW20 muss in akt_dw 20 stehen, richtig?
    richtig

    >>Was bewirkt SLD3?
    macht einen pointer aus akt_dw

    >>Wofür ist der Zusatz p#0.0?
    ist der versatz des pointers
    wüdre hier z.b. p#4.0 stehen würdest du nicht auf dbd20 sondern auf dbd24 zugreifen

    >>Für akt_dw ist nur der Datentyp INT zulässig, oder?
    sollte doch wohl reichen,oder? oder hast du einen db der dw mit einer adresse > 32768 hat.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  6. #6
    CrazyCat ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    13.09.2005
    Beiträge
    633
    Danke
    8
    Erhielt 8 Danke für 6 Beiträge

    Standard

    Nochmals danke!

    Werd' das sofort versuchen.

    SLD bewirkt also einen Pointer, p#0.0 steht für den Versatz. Das ist für die Dokumentation sehr wichtig.

    Der Kunde liest diese ständig und fragt bei solchen Sachen immer nach.
    Würde schlecht aussehen, wenn ich nicht erklären könnte was der Befehl bewirkt.

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Es geht ja auch ohne Loop, hier nur mal aus der AWL-Hilfe von Step7:

    Format

    LOOP <Sprungmarke>

    Operand Beschreibung
    <Sprungmarke> Symbolischer Name des Sprungziels.
    Beschreibung

    LOOP <Sprungmarke> (Dekrementiere AKKU1-L und springe, wenn AKKU1-L <> 0) vereinfacht die Programmierung von Schleifen. Der Schleifenzähler ist eine vorzeichenlose Ganzzahl (16 Bit) und befindet sich in AKKU1-L. Die Anweisung springt an das angegebene Sprungziel. Der Sprung wird ausgeführt, solange der Inhalt von AKKU1-L ungleich "0" ist. Der lineare Programmablauf wird am Sprungziel fortgesetzt. Dieses Sprungziel wird durch eine Sprungmarke angegeben. Es kann sowohl vorwärts als auch rückwärts gesprungen werden. Sprünge können nur innerhalb eines Bausteins ausgeführt werden, d. h. die Operation Programmschleife und das Sprungziel müssen innerhalb desselben Bausteins liegen. Das Sprungziel darf innerhalb dieses Bausteins nur einmal vorhanden sein. Die maximale Sprungweite liegt bei -32768 bzw. +32767 Wörtern des Programmcodes. Die tatsächliche maximale Anzahl der Anweisungen, die übersprungen werden können, hängt von der Kombination der Anweisungen innerhalb des Programms (Ein-, Zwei- oder Dreiwortanweisungen) ab.

    Statuswort

    BIE A1 A0 OV OS OR STA VKE /ER
    schreibt: - - - - - - - - -
    Beispiel zur Berechnung der Fakultät von 5 (5!)

    Code:
    AWL	Erläuterung
    L	L#1	//Lade die Ganzzahl-Konstante &#40;32 Bit&#41; in den AKKU 1.
    T	MD20	//Transferiere den Inhalt von AKKU 1 in MD20 &#40;Initialisierung&#41;.
    L	5	//Lade die Anzahl der Schleifenzyklen in AKKU1-L.
    NEXT&#58;	T	MW10	//Sprungmarke = Anfang der Schleife / Transferiere AKKU1-L in Schleifenzähler.
    L	MD20	
    *	D	//Multipliziere aktuellen Inhalt von MD20 mit aktuellem Inhalt von MB10.
    T	MD20	//Transferiere Ergebnis der Multiplikation in MD20.
    L	MW10	//Lade den Inhalt des Schleifenzählers in AKKU 1.
    LOOP	NEXT	//Dekrementiere den Inhalt von AKKU 1 und springe zur Sprungmarke NEXT, wenn AKKU1-L > 0 ist.
    L 	MW24	//Der Programmablauf wird nach dem Ende der Schleife hier fortgesetzt.
    L	200
    >I
    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

  8. #8
    Registriert seit
    05.01.2006
    Beiträge
    46
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo,

    mit der S7 gibt es mehrere Möglichkeiten der Schleifenprogrammierung, durch die verschieden Softwareprodukte, die Siemens für die Steuerung anbietet.

    Hier eine Lösungsmöglichkeit in AWL:

    Code:
    // Schleifen Voreinstellung
          L     L#0                         			// Schleifen anfangswert laden
          T     #DIT_Schleifenwert          		// Schleifenanfangswert laden
    
          L     L#1234                      		// Letzte Adresse zum bearbeiten
          T     #DIT_Schleifenende          		// Schleifenende speichern
    
    
    // Schleifenausführung
    
    RS50&#58; L     DBD &#91;#DIT_Schleifenwert&#93;    	// DB-Bytewert zurücksetzen
    
    // --- Aktion mit den geladenen Wert ---
    // --- Ende ---
    
    // Kontrolle auf Schleifenende
    
          SET                               		// VKE-1 laden
          L     #DIT_Schleifenwert          	// Schleifenanfangswert laden
          L     L#32                         		// Wert für Adressanpassung laden
          +D                                		// Adresse anpassen
          T     #DIT_Schleifenwert          	// Schleifenanfangswert speichern
          SRD   3                           		// Adresse für Schleifenende Kontrolle anpassen
          L     #DIT_Schleifenende          	// Schleifenende laden
          <D                                		// Wenn noch nicht alle Werte bearbeitet, dann
          SPB   RS50                        	// Sprung für erneuten Schleifendurchlauf
    Wenn du noch Fragen hast, oder noch andere Varianten benötigst, melde dich bitte.[/code]
    Viele Grüße
    Matthias
    SPS .bz
    -----------------
    Rechtschreibfehler wurden absichtlich zur allgemeinen Belustigung hinzugefügt, wer einen findet, darf ihn natürlich behalten ...
    Zitieren Zitieren Schleife in AWL  

  9. #9
    Registriert seit
    10.08.2010
    Beiträge
    770
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Zitat Zitat von volker Beitrag anzeigen
    kannst du mit scl machen

    geht aber auch leicht mit pointern in awl

    Code:
          L     #Datenanfang
          T     #akt_dw
    
    anf:  NOP   0                           //schleifenanfang
    
          L     #akt_dw
          SLD   3
          LAR1  
    ...
    ...
          T     DBD [AR1,P#0.0]
    
          L     #akt_dw
          L     4
          +D                                //nächstes dw
          T     #akt_dw
          L     #Datenende
          >D    
          SPB   ende                        //Schleifenende erreicht
    
          SPA   anf                         //zum Schleifenanfang
    ende: nop 0
    Kann mir jemand das in fup darstellen?

  10. #10
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von emilio20 Beitrag anzeigen
    Kann mir jemand das in fup darstellen?
    Nein.
    Indirekte Adressierung geht nur mit AWL oder SCL
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

Ähnliche Themen

  1. Arrays in PC Worx
    Von Daywalker im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 13.08.2010, 15:01
  2. 2 Arrays aus 2 DBs vergleichen
    Von Günni1977 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 03.12.2008, 17:14
  3. dynamische Arrays?
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 30.05.2008, 16:06
  4. Pointer und Arrays
    Von SolSna im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 26.02.2008, 20:16
  5. arrays mit udt...
    Von Jochen Kühner im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 01.12.2005, 14:27

Lesezeichen

Berechtigungen

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