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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: DB auslesen

  1. #11
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
    db1:  L     "db_längedaten_1".schreibzeiger    //Abfrage DB1 voll
          L     7802
          >=I   
          SPB   db2
    
          L     "db_längedaten_1".schreibzeiger    //Abfrage DB1 leer
          L     0
          ==I   
          SPBN  lad1
    
          L     2                           //Lade Anfangswert Schreibzeiger
          T     "db_längedaten_1".schreibzeiger
          SPA   wdb1
    
    lad1: L     "db_längedaten_1".schreibzeiger
          L     26
          +I    
          T     "db_längedaten_1".schreibzeiger
          L     7776
          >I    
          SPBN  wdb1
    
          L     0                           //Reset Schreibzeiger DB2
          T     "db_längedaten_2".schreibzeiger

  2. #12
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
    db2:  L     "db_längedaten_2".schreibzeiger    //Abfrage DB2 voll
          L     7802
          >=I   
          SPB   db3
    
          L     "db_längedaten_2".schreibzeiger    //Abfrage DB2 leer
          L     0
          ==I   
          SPBN  lad2
    
          L     2                           //Lade Anfangswert Schreibzeiger
          T     "db_längedaten_2".schreibzeiger
          SPA   wdb2
    
    lad2: L     "db_längedaten_2".schreibzeiger
          L     26
          +I    
          T     "db_längedaten_2".schreibzeiger
          L     7776
          >I    
          SPBN  wdb2
    
          L     0                           //Reset Schreibzeiger DB3
          T     "db_längedaten_3".schreibzeiger

  3. #13
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
    db3:  L     "db_längedaten_3".schreibzeiger    //Abfrage DB3 voll
        L     7802                        //Schreibe weiter in DB4
        >=I   
        SPB   db4
     
        L     "db_längedaten_3".schreibzeiger    //Abfrage DB3 leer
        L     0
        ==I   
        SPBN  lad3
     
        L     2                           //Lade Anfangswert Schreibzeiger
        T     "db_längedaten_3".schreibzeiger
        SPA   wdb3
     
    lad3: L     "db_längedaten_3".schreibzeiger
        L     26
        +I    
        T     "db_längedaten_3".schreibzeiger
        L     7776
        >I    
        SPBN  wdb3
     
        L     0
        T     "db_längedaten_4".schreibzeiger

  4. #14
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
     
    db4:  L     "db_längedaten_4".schreibzeiger
          L     7802
          >=I   
          SPB   db5
     
          L     "db_längedaten_4".schreibzeiger    //Abfrage DB4 leer
          L     0
          ==I   
          SPBN  lad4
     
          L     2                           //Lade Anfangswert Schreibzeiger 
          T     "db_längedaten_4".schreibzeiger
          SPA   wdb4
     
    lad4: L     "db_längedaten_4".schreibzeiger
          L     26
          +I    
          T     "db_längedaten_4".schreibzeiger
          L     7876
          >I    
          SPBN  wdb4

  5. #15
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
    db5:  L     "db_längedaten_5".schreibzeiger
         L     7802
         >=I   
         SPB   db5
     
         L     "db_längedaten_5".schreibzeiger    //Abfrage DB5 leer
         L     0
         ==I   
         SPBN  lad5
     
         L     2                           //Lade Anfangswert Schreibzeiger 
         T     "db_längedaten_5".schreibzeiger
         SPA   wdb5
     
    lad5: L     "db_längedaten_5".schreibzeiger
         L     26
         +I    
         T     "db_längedaten_5".schreibzeiger
         L     7876
         >I    
         SPBN  wdb5
     
     
     
         L     0
         T     "db_längedaten_1".schreibzeiger
         SPA   db1

  6. #16
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Leider kann ich nicht den ganzen Code in einem Fenster hoch laden, unsere EDV verbietet solche Datenmengen... Die CPU kann 6000 DB mit jeweils 64kByte. Es sollte demnach funktionieren, tut es aber nur mit etwas über 300 Datensätzen.
    Geändert von User1974 (07.07.2010 um 19:29 Uhr)

  7. #17
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
    wdb1: L     "db_längedaten_1".schreibzeiger
          SLW   3
          LAR1  
          SPA   writ
    
    wdb2: L     "db_längedaten_2".schreibzeiger
          SLW   3
          LAR1  
          SPA   writ
    
    
    wdb3: L     "db_längedaten_3".schreibzeiger
          SLW   3
          LAR1  
          SPA   writ
    
    
    wdb4: L     "db_längedaten_4".schreibzeiger
          SLW   3
          LAR1  
          SPA   writ
    
    
    wdb5: L     "db_längedaten_5".schreibzeiger
          SLW   3
          LAR1  
          SPA   writ

  8. #18
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Code:
    writ: L     #dkn_1
          T     DBB [AR1,P#0.0]
          L     #dkn_2
          T     DBB [AR1,P#1.0]
          L     #dkn_3
          T     DBB [AR1,P#2.0]
          L     #dkn_4
          T     DBB [AR1,P#3.0]
          L     #dkn_5
          T     DBB [AR1,P#4.0]
          L     #dkn_6
          T     DBB [AR1,P#5.0]
          L     #dkn_7
          T     DBB [AR1,P#6.0]
          L     #dkn_8
          T     DBB [AR1,P#7.0]
          L     #dkn_9
          T     DBB [AR1,P#8.0]
          L     #dkn_10
          T     DBB [AR1,P#9.0]
    
    
          L     #ngn_1
          T     DBB [AR1,P#10.0]
          L     #ngn_2
          T     DBB [AR1,P#11.0]
          L     #ngn_3
          T     DBB [AR1,P#12.0]
          L     #ngn_4
          T     DBB [AR1,P#13.0]
          L     #ngn_5
          T     DBB [AR1,P#14.0]
          L     #ngn_6
          T     DBB [AR1,P#15.0]
          L     #ngn_7
          T     DBB [AR1,P#16.0]
          L     #ngn_8
          T     DBB [AR1,P#17.0]
          L     #ngn_9
          T     DBB [AR1,P#18.0]
          L     #ngn_10
          T     DBB [AR1,P#19.0]
    
          L     #l_soll
          T     DBW [AR1,P#20.0]
          L     #l_ist
          T     DBW [AR1,P#22.0]
          L     #k_wert
          T     DBW [AR1,P#24.0]

  9. #19
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Hallo Benny,

    daß Du Dein Problem derart umständlich löst, hätte ich nicht gedacht.
    Doch OK, jeder darf seine Aufgabe so aufwändig und uneffizient lösen, wie es der Prozess zuläßt.

    Du mußt nicht für jeden DB einen eigenen Schreibzeiger verwalten.
    Denk' Dir doch Deinen Datensatzpuffer als ein einziges Gebilde "am Stück", mach' Deine
    Schreib-Verwaltung auf Basis von Datensatz-Nummern (und nicht Offset-Adressen) und teile den
    Datensatzpuffer erst beim eigentlichen Datensatz-Schreiben auf mehrere DB der zulässigen Größe auf.
    Dann mußt Du auch nicht vorher Adress-Grenzwerte berechnen.

    Das Zwischenspeichern der Datenpunkte in einen Temp-Bereich vor dem Übertragen in den Datensatz-Puffer
    ist aber eine gute Idee (so halte ich das auch immer). Damit erspart man sich das ständige AUF [#DB]
    beim indirekten Schreiben jedes Datenpunktes in den Datensatz (bei Dir ab Marke writ:, Beitrag #18).

    Wie aus Deinen Postings zu sehen ist, ist jeder Datensatz nun doch wieder 26 Byte lang.
    Damit ist ganz logisch, daß Deine Adressberechnung beim 316. Datensatz crasht (bei 24 Byte je
    Datensatz crasht es erst beim 341. Datensatz).

    Lange Rede, kurzer Sinn:
    Dein Problem steckt im Code im Posting #17.
    Ersetze die "SLW 3" durch "SLD 3", dann ist die Pointerbildung auch für mehr als 316 Datensätze
    in einem DB korrekt (sprich: nach der 8kB-Grenze).
    Deine Adress-Grenzwerte 7802 und 7776 mußt Du natürlich anpassen oder besser Adress-unabhängig mit
    Datensatz-Nummern arbeiten.

    Oder mache Dir die Mühe, meinen kurzen knackigen Code im Beitrag #7 zu lesen und zu verstehen,
    dann kannst Du den leicht auf eine andere Datensatz-Größe, Datensatz-Anzahl und DB-Anzahl ändern.

    Gruß
    Harald

  10. #20
    User1974 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.03.2009
    Ort
    Lohmar
    Beiträge
    29
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Harald,

    Zitat Zitat von PN/DP Beitrag anzeigen
    daß Du Dein Problem derart umständlich löst, hätte ich nicht gedacht.
    Doch OK, jeder darf seine Aufgabe so aufwändig und uneffizient lösen, wie es der Prozess zuläßt.
    Schön geschrieben, finde ich gut.

    Das das Programm viel zu aufwendig und kompliziert geschrieben wurde war mir klar, einen anderen Weg habe ich nicht gefunden. Meine Programmierkenntnisse sind schlecht und waren bis vor kurzen in meiner Tätigkeit (IH) auch nicht gefragt. Bin Frischling...

    Ich habe mir Deinen Code die letzten zwei Tage, immer wenn es zeitlich ging, angeschaut und auch zum Großteil verstanden. So hatte ich mir das vorgestellt, kannte aber den Weg dahin nicht.

    Ein paar Fragen habe ich dennoch:
    1. Dein Schreibzeiger setzt sich selbstständig zurück, warum dann die zusätzlichen Eingangsvariablen #DS-Reset und #DS_Add?
    2. Wie kommt die Datensatz-Nr. zustande? Die DB Auswahl kann ich noch nachvollziehen, oder rechne ich falsch?
      Code:
      // Anfangsadresse neuer Datensatz im Aufzeichnungspuffer berechnen
            L     2500                        // 2500 Datensätze je Teil-DB
            /I                                // 0..9999 -> 0..3 / AKKU1-H -> 0..2499
      // AKKU1-L: Quotient 0..3 = DB-Selector -> Nr Datensatz-DB DB71..DB74
      // AKKU1-H: Div.Rest 0..2499 = Datensatz-Nr im Puffer-Teil-DB
    3. Und zu guter letzt, wozu ist der Schiebe rechts Befehl gut? Da komm ich nicht hinter.
      Code:
          POP                               // AKKU1-H 0..2499 zurück
            SRD   16                          // -> Datensatz-Nr in diesem Teil-DB
            L     26                          // Länge 1 Datensatz


    Vielend Dank.

Ähnliche Themen

  1. S7-200 CPU 226 CN auslesen
    Von RGELEKTRO im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 03.10.2016, 16:39
  2. S7 MMC auslesen
    Von Wowa05 im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 30.01.2010, 11:20
  3. SZL auslesen
    Von der Micha im Forum Hochsprachen - OPC
    Antworten: 19
    Letzter Beitrag: 09.08.2008, 19:02
  4. OP 37 auslesen!
    Von RobRoy94 im Forum HMI
    Antworten: 4
    Letzter Beitrag: 16.03.2006, 18:28
  5. SPS mit c auslesen
    Von Speedy3311 im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 24.08.2005, 15:30

Lesezeichen

Berechtigungen

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