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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Daten in DB nach einander speichern und FirstInLastOut wieder ablesen

  1. #11
    Registriert seit
    02.02.2012
    Ort
    Kaarst
    Beiträge
    126
    Danke
    10
    Erhielt 7 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du musst ja nur wissen wie lang ein Datensatz ist. Der Offset für die jeweiligen Teilvariablen bleibt ja gleich (Siehe dein Beispiel oben) und somit musst du nur die Startadresse variieren.

    [Datensatz 1, Startadresse 0]
    0.0 zeit1 DATE_AND_TIME
    8.0 ID1 String [10]
    20.0 Spannung1 Dint
    24.0 Strom1 Dint
    [Datensatz 2, Startadresse 28]
    0.0 zeit2 DATE_AND_TIME
    8.0 ID2 String [10]
    20.0 Spannung2 Dint
    24.0 Strom2 Dint
    [Datensatz 3, Startadresse 56]
    0.0 zeit2 DATE_AND_TIME
    8.0 ID2 String [10]
    20.0 Spannung2 Dint
    24.0 Strom2 Dint

    Und immer so weiter. Leg dir am einfachsten für einen Datensatz einen UDT an. Und falls du verschiedene Datensätze hast dann je Datensatz-Typ einen DB um alles sortiert zu haben.

    Noch als Tipp hinterher:
    Ich würde die Zähler nicht in Klar-Adresse laufen lassen (sprich 0, 28, 56, 84, ...) sondern quasi als Datensatz-Zähler und dann den Faktor (Datensatzlänge) an zweiter Stelle dazurechnen, einfach für die Übersicht- und Verständlichkeit.
    Grade Programme mit Zeigern neigen dazu später schwer nachvollziehbar zu sein
    Geändert von martin1988 (07.03.2014 um 12:37 Uhr)

  2. Folgender Benutzer sagt Danke zu martin1988 für den nützlichen Beitrag:

    kruz_007 (10.03.2014)

  3. #12
    Registriert seit
    04.11.2010
    Beiträge
    31
    Danke
    16
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Martin für dein tipp!

    ich habe auch in diese Richtung auch mal gedanken gemacht, und zwar ich erzeuge einen extra DB wo ich die Daten kopiere die aktuel abgeholt werden sollen. Die Datensätze werden weiterhin mit SFC 20 kopiert, an SFC 20 hänge ich eine Zähler. diese multipliziere ich mit 28 und so weiss ich wie gross meine Datensatz ist.
    Das Problem:
    ich weiss nicht wie ich eine Dynamische Pointer erzeugen kann, den ich an SFC 20 hängen kann ?

    habe mir das so gedacht, ist das überhaupt machbar, und wenn ja wie ?

    U(
    U M 15.5
    FP M 50.6
    SPBNB _005
    L MD 100
    L L#1
    -D
    T MD 100
    UN OV
    SAVE
    CLR
    _005: U BIE
    )
    SPBNB _006
    L MD 100
    SLD 3
    LAR1
    AUF DB 17

    CALL "BLKMOV"
    SRCBLK := DBX [AR1,P#0.0]
    RET_VAL:=#retval_i_3
    DSTBLK :=P#DB15.DBX0.0 BYTE 30
    _006: NOP 0




    Programmabschnit2.jpg

    Danke im Voraus !
    Geändert von kruz_007 (10.03.2014 um 14:01 Uhr)

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

    Standard

    hast du dir den beitrag aus der faq angesehen den pn/dp in posting #9 erwähnte?

    dort wird am ende auf diesen beitrag verwiesen
    http://www.sps-forum.de/faq/12923-an...atentypen.html
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

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

    kruz_007 (10.03.2014)

  6. #14
    Registriert seit
    04.11.2010
    Beiträge
    31
    Danke
    16
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Volker,

    dein Beitrag ja : FAQ: Pointer Zeiger FIFO LIFO habe ich gelesen, aber von PN/DP bin jetzt dabei

  7. #15
    Registriert seit
    04.11.2010
    Beiträge
    31
    Danke
    16
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Volker,

    habe ich das richtig verstanden ?


    L B#16#10
    T LB 0
    L B#16#02
    T LB 1
    L 30
    T LW 2
    L 15
    T LW 4
    L MD 100 ////// hier meine Zähler
    SLD 3
    T LD 6
    L B#16#84
    T LB

    LAR1 P##myZeiger ///Sprich P#DB15.dbx (MD100).0 Byte 30

    CALL "BLKMOV"
    SRCBLK := #myZeiger
    RET_VAL:=#retval_i_3
    DSTBLK :=P#DB15.DBX0.0 BYTE 30
    _006: NOP 0





    Danke im Voraus !
    Geändert von kruz_007 (10.03.2014 um 17:44 Uhr)

  8. #16
    Registriert seit
    04.11.2010
    Beiträge
    31
    Danke
    16
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hat immer noch nicht funktioniert, was habe ich Falsch gemacht ?

  9. #17
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zählt Dein Zähler direkt 30, 60, 90 ...??? oder vielleicht 1, 2, 3 ...?
    Der vom Zähler adressierte Datensatz of myStruct beginnt bei DB15.DBB(Zähler * Länge_myStruct + Anfangsadresse des Arrays im DB15)

    Wenn Du ein ARRAY OF myStruct hast und myStruct 30 Byte größ ist:
    Code:
    //*** ANY für BLKMOV.SRCBLK erstellen:
          LAR1  P##aSRCBLK                  // Adresse der ANY-Variable aSRCBLK in TEMP
    
          L     W#16#1002                   // Kennung S7 (16#10) + Datentyp BYTE (16#02)
          T     W [AR1,P#0.0]               // ANY: Kennung S7 + Datentyp BYTE
    
          L     15                          // DB15
          T     W [AR1,P#4.0]               // ANY: DB-Nummer
    
          L     30                          // Sizeof(myStruct) = 30 Byte
          T     W [AR1,P#2.0]               // ANY: Wiederholfaktor
    
          L     MD   100                    // der Zähler 1, 2, 3 ...
          *D                                // --> Zähler*Size
          SLD   3                           // --> P#(Zähler*Size).0
          L     P#DBX 0.0                   // Bereichskennung "DB" + ggf. Anfangsadresse des Array in DB15 
          +D    
          T     D [AR1,P#6.0]               // ANY: Speicherbereich + Adresse
    
    //*** Eintrag von ARRAY[Zähler] zum Anfang des DB15 (ARRAY[0] ?) kopieren:
          CALL  "BLKMOV"
           SRCBLK :=#aSRCBLK
           RET_VAL:=#iTEMP_INT
           DSTBLK :=P#DB15.DBX 0.0 BYTE 30
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    kruz_007 (11.03.2014)

  11. #18
    Registriert seit
    04.11.2010
    Beiträge
    31
    Danke
    16
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    es hat geklappt Jungs ,
    einen Schönen Dank an Harald, Volker und Martin, er seid Super

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 01.11.2011, 22:33
  2. DBs nach einander lesen
    Von sb9674 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.12.2009, 20:28
  3. Antworten: 7
    Letzter Beitrag: 13.02.2008, 11:52
  4. Antworten: 15
    Letzter Beitrag: 24.01.2007, 11:41
  5. Dateien automatisch öffnen, speichern und wieder schließen
    Von CrazyCat im Forum PC- und Netzwerktechnik
    Antworten: 2
    Letzter Beitrag: 20.02.2006, 15:13

Lesezeichen

Berechtigungen

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