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

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 42

Thema: Indirekt in Datenbaustein schreiben

  1. #1
    Registriert seit
    06.02.2011
    Beiträge
    16
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich möchte Zeitenaufnahmen T1 und T2 (je Mw )
    und die Summe von T1+T2 in DB schreiben.

    Hier die Merker wo ich sie reinschreibe
    Die Werte sollen immer in den DB schreiben.

    T1 MW10
    T2 MW20
    T1+T2= Mw30

    // DB 100

    Dw 1 Datensatz NR. 1-600( Hier addieren +1)
    Dw 3 Frei
    Dw 5 Frei


    Das ist 1 Datensatz
    Dw 8 T1 MW10
    Dw 10 T2 MW20
    Dw 12 T1+T2= Mw30
    Dw 14 Reserve



    Das ist 2 Datensatz

    Dw 16 T1 MW10
    Dw 18 T2 MW20
    Dw 20 T1+T2= Mw30
    Dw 22 Reserve


    Das ist 3 Datensatz

    Dw 24 T1 MW10
    Dw 26 T2 MW20
    Dw 28 T1+T2= Mw30
    Dw 30 Reserve

    Usw. …. 600 Sätze



    So weiter 600 Datensätze in der gleich Struktur

    Programmstruktur

    // zB. Db100

    U M1.0 // Bei jeder Flanke 1 Datensatz weiter schreiben
    FP M 10.0 // in den DB und DW1 (addieren +1) erhöhen
    BEB
    Auf DB 100

    L AR1

    L Dw1 Datensatz Nr. 1-600 ( Hier addieren +1)
    SLD 6
    // 1Satz

    B DW[ AR1, P0,0] Zeiger auf Dw 8 setzen
    LW MW10 T 1 Wert laden
    T DW[ AR1, P0,0] T 1 Wert schreiben
    B DW[ AR1, P2,0] Zeiger Dw 10
    LW MW 20 T 2 Wert laden
    T DW[ AR1, P2,0] T 2 Wert schreiben
    B DW[ AR1, P4,0] Zeiger auf Dw 12 setzen
    LW MW30 T 1+T2 Wert laden
    T DW[ AR1, P4,0] T 1+T2 Wert schreiben

    Ob das stimm weis ich nicht.

    Wäre Super wenn Ihr mir helfen könntet .
    Wie kann ich es machen.
    Zitieren Zitieren Indirekt in Datenbaustein schreiben  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Alle "B DW..." kannst du streichen!
    Nicht "LW MW...", sondern "L MW..." schreiben.
    Bei den Pointen einen Punkt und vor die Ziffer ein # "P#0.0" !
    "T DBW[ AR1, P#0.0]"
    Geändert von Ralle (06.02.2011 um 21:17 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

  3. #3
    Gina_Jin ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.02.2011
    Beiträge
    16
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    U M1.0 // Bei jeder Flanke 1 Datensatz weiter schreiben
    FP M 10.0 // in den DB und DW1 (addieren +1) erhöhen
    BEB
    Auf DB 100

    L AR1

    L Dw1 Datensatz Nr. 1-600 ( Hier addieren +1)
    SLD 6

    // 1Satz

    L MW10 //T 1 Wert laden
    T DBW[ AR1, P#0.0] // T 1 Wert schreiben
    L MW 20 // T 2 Wert laden
    T DBW[ AR1, P#2.0] //T 2 Wert schreiben
    L MW30 // T 1+T2 Wert laden
    T DBW[ AR1, P#4.0] // T 1+T2 Wert schreiben

    Hallo Ralle,
    schönen dank für deine schnelle hilfe.
    meinst du so,
    Siehe Oben
    Geändert von Gina_Jin (06.02.2011 um 21:46 Uhr)

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Noch nicht ganz, so könnte es gehen:

    Code:
          U     M      1.0                  // Bei jeder Flanke 1 Datensatz weiter schreiben
          FP    M     1.1                  // in den DB und DW1 (addieren +1) erhöhen --> MW10 benutzt du für T1!, also ist auch M10.0 schon damit belegt 
          SPBN  END
    
          AUF   DB   100
    
          L     DBW    0                    //Datensatz Nr. 1-600 ( Hier addieren +1) --> Datenworte bitte immer gerade adressieren
          SLD   6
          LAR1  
    
    // Satz
    
          L     MW    10                    //T 1 Wert laden
          T     DBW [AR1,P#0.0]             // T 1 Wert schreiben
          L     MW    20                    // T 2 Wert laden
          T     DBW [AR1,P#2.0]             //T 2 Wert schreiben
          L     MW    30                    // T 1+T2 Wert laden
          T     DBW [AR1,P#4.0]             // T 1+T2 Wert schreiben
    
    END:  NOP   0
    Hier wird aber nirgends aufaddiert, das machst du an anderer Stelle?
    Ansonsten nach dem Schreiben der Daten, den Datensatzzähler um 1 erhöhen, aufpassen, bei Überscheiten des Max-Wertes wieder bei 1 anfangen!
    Achtung wenn in DBW0 eine 0 steht, überschreibst du DBW 0, 2 und 4 mit deinen kopierten Daten. Also immer dafür sorgen, dass der Inhalt von DBW 0 zwischen 1 und 600 bleibt!
    Geändert von Ralle (06.02.2011 um 22:16 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

  5. #5
    Registriert seit
    16.12.2008
    Ort
    Fürth
    Beiträge
    146
    Danke
    32
    Erhielt 21 Danke für 19 Beiträge

    Standard

    Kannst dir auch mal diesen Beitrag ansehen

    http://sps-forum.de/showthread.php?t...=fifo+indirekt


    vielleicht hilft dir das ja weiter.


    und wenn du immer den gleichen Datensatz haben mächtest dann würde ich einen UDT erstellen und diesen als Array im DB verwenden. Das ganze noch ein bisschen mit Volkers indirekter Adressierung mischen und tadddaa! du kannst deine Werte sauber aufzeichnen xD
    -A+B=15=21 Klingt komisch - ist aber so!
    -It's not a bug, it's a feature!
    -Es gibt nur 3 Feinde im Leben eines Programmierers: Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel ...!

  6. #6
    Gina_Jin ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.02.2011
    Beiträge
    16
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Frage

    Zitat Zitat von Ralle Beitrag anzeigen
    Noch nicht ganz, so könnte es gehen:

    Code:
          U     M      1.0                  // Bei jeder Flanke 1 Datensatz weiter schreiben
          FP    M     1.1                  // in den DB und DW1 (addieren +1) erhöhen --> MW10 benutzt du für T1!, also ist auch M10.0 schon damit belegt 
          SPBN  END
     
          AUF   DB   100
     
          L     DBW    0                    //Datensatz Nr. 1-600 ( Hier addieren +1) --> Datenworte bitte immer gerade adressieren
          SLD   6
          LAR1  
     
    // Satz 
     
          L     MW    10                    //T 1 Wert laden
          T     DBW [AR1,P#0.0]             // T 1 Wert schreiben
          L     MW    20                    // T 2 Wert laden
          T     DBW [AR1,P#2.0]             //T 2 Wert schreiben
          L     MW    30                    // T 1+T2 Wert laden
          T     DBW [AR1,P#4.0]             // T 1+T2 Wert schreiben
     
           L   DBW    0   // Datensatzahl 
         L +1            //  +1 erhöhen
         T DBW    0   // Datensatz um 1 Satz erhöht
     
    END:  NOP   0
    Hier wird aber nirgends aufaddiert, das machst du an anderer Stelle?
    Ansonsten nach dem Schreiben der Daten, den Datensatzzähler um 1 erhöhen, aufpassen, bei Überscheiten des Max-Wertes wieder bei 1 anfangen!
    Achtung wenn in DBW0 eine 0 steht, überschreibst du DBW 0, 2 und 4 mit deinen kopierten Daten. Also immer dafür sorgen, dass der Inhalt von DBW 0 zwischen 1 und 600 bleibt!
    Hallo Ralle,
    Ich habe oben in rot geschrieben, kann ich es so programmieren
    Damit möchte ich den Datensatzzähler nach dem schreiben erhöhen.

    Zitieren Zitieren Indirekte daten schreiben Db  

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Code:
    L DBW0
    L 1
    +I
    T DBW0
    Und was machst du, wenn du bei 600 bist?
    Gleich hinter den Code mit der Aufaddierung einsetzen, dann kannst du auf 601
    hochzählen und die 601 wird sofort durch 1 überschrieben. Dann geht es wieder von vorn los, also ein Ringbuffer.
    Mal so aus dem Kopf.

    Code:
    L DBW0
    L 600
    >I
    SPBN NIX
    
    L 1
    T DBW0
    
    NIX: NOP 0
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Gina_Jin (07.02.2011)

  9. #8
    Gina_Jin ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.02.2011
    Beiträge
    16
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Befree Beitrag anzeigen
    Kannst dir auch mal diesen Beitrag ansehen

    http://sps-forum.de/showthread.php?t...=fifo+indirekt


    vielleicht hilft dir das ja weiter.


    und wenn du immer den gleichen Datensatz haben mächtest dann würde ich einen UDT erstellen und diesen als Array im DB verwenden. Das ganze noch ein bisschen mit Volkers indirekter Adressierung mischen und tadddaa! du kannst deine Werte sauber aufzeichnen xD
    Hallo Befree,

    schönen dank für die schnell hilfe,
    wie kann ich den UDT auf mit Array aufbauen.

    Es sollte so aussehen wie unten
    wäre gut wenn du mir kurz darstellen könntest.


    Das ist 1 Datensatz
    Dw 8 T1 MW10
    Dw 10 T2 MW20
    Dw 12 T1+T2= Mw30
    Dw 14 Reserve

    Das ist 2 Datensatz

    Dw 16 T1 MW10
    Dw 18 T2 MW20
    Dw 20 T1+T2= Mw30
    Dw 22 Reserve


    Das ist 3 Datensatz

    Dw 24 T1 MW10
    Dw 26 T2 MW20
    Dw 28 T1+T2= Mw30
    Dw 30 Reserve

    usw.. bis 600 Datensatz



    Zitieren Zitieren UTD aufbauen  

  10. #9
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Im Simatic Manager mit einfügen eine UDT einfügen.
    Dann diese UDT aufmachen und die Struct definieren, die du brauchst.
    Dann einen DB bauen und bei Typ deine Struct einfügen.
    Das kannst du so oft machen alswie du willst.

    bike


    P.S: ich würde mir die Reserve so anlegen, dass alles auf 10er Stellen passt, denn dann hast du es sau einfach.

  11. #10
    Gina_Jin ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.02.2011
    Beiträge
    16
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    Code:
    L DBW0
    L 1
    +I
    T DBW0
    Und was machst du, wenn du bei 600 bist?
    Gleich hinter den Code mit der Aufaddierung einsetzen, dann kannst du auf 601
    hochzählen und die 601 wird sofort durch 1 überschrieben. Dann geht es wieder von vorn los, also ein Ringbuffer.
    Mal so aus dem Kopf.

    Code:
    L DBW0
    L 600
    >I
    SPBN NIX
     
    L 1
    T DBW0
     
    NIX: NOP 0
    U M 1.0
    FP M 1.1 // in den DB und DW0 (addieren +1)
    SPBN END
    AUF DB 100
    L DBW 0 //Datensatz Nr. 1-600 ( Hier addieren +1)
    L 600
    >I
    SPB END
    SLD 6
    LAR1
    L MW 10 //T 1 Wert laden
    T DBW [AR1,P#0.0] // T 1 Wert schreiben
    L MW 20 // T 2 Wert laden
    T DBW [AR1,P#2.0] //T 2 Wert schreiben
    L MW 30 // T 1+T2 Wert laden
    T DBW [AR1,P#4.0] // T 1+T2 Wert schreiben

    L DBW 0 // Datensatzahl
    +1 // +1 erhöhen
    T DBW 0 // Datensatz um 1 Satz erhöht
    BEB

    END: L 1
    T DW0
    NOP 0



    Hallo Ralle,
    kann es so schreiben
    deine tipp habe gleich fertig gemacht.
    schau dir das bitte mal an.
    Geändert von Gina_Jin (07.02.2011 um 17:52 Uhr)

Ähnliche Themen

  1. Wert in Datenbaustein schreiben
    Von Papa_Bene im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 22.02.2011, 12:08
  2. CSV-Daten in Datenbaustein schreiben?
    Von Poldi007 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 29.03.2010, 02:31
  3. String in Datenbaustein schreiben (S7)
    Von erwin36 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 30.11.2009, 16:53
  4. Antworten: 4
    Letzter Beitrag: 01.09.2008, 12:45
  5. Antworten: 7
    Letzter Beitrag: 30.07.2008, 13:13

Lesezeichen

Berechtigungen

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