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

Ergebnis 1 bis 8 von 8

Thema: ANY Pointer auf Array of Real im Instanz-DB

  1. #1
    Registriert seit
    22.02.2012
    Ort
    Niedersachsen
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin moin

    ich habe einen Multiinstanzfähigen Instanz-FB.

    In den statischen Variablen habe ich ein ARRAY[1..500] of REAL angelegt. Das Array soll sich wie ein Schieberegister verhalten. Das heißt, ich kopiere per SFC20 die Bytes die Felder 1-499 an 2..500.

    Hierfür baue ich mir einen ANY auf die Quelle und einen aufs Ziel. Aber irgendwie schiebt mir der SFC20 die REALS nicht einen Schritt weiter, sonder macht murks (meldet aber keinen Fehler). Könnt Ihr da mal draufgucken? Baue ich den Pointer falsch?

    Code:
          LAR1  P##P_ANY_Quelle        // Pointer ins Adressregister 1
          L     W#16#10
          T     LB [AR1,P#0.0]
          L     W#16#8                      // HEX08 für REAL
          T     LB [AR1,P#1.0]
          L     499                             // Pointerbreite (Anzahl Elemente im Array minus eins)
          T     LW [AR1,P#2.0]
          L     DINO                           // Lade Instanz-DB Nr. in Akku 1
          T     LW [AR1,P#4.0]
          L     54                              // Anfangsadresse im DB (Startadresse des Arrays]
          SLD   3
          T     LD [AR1,P#6.0]
          L     B#16#85                     // Speicherbereich => HEX85 für Instanz-DB
          T     LB [AR1,P#6.0]
    
    
    
         LAR1  P##P_ANY_Ziel            // Pointer ins Adressregister 1
          L     W#16#10
          T     LB [AR1,P#0.0]
          L     W#16#8                      // HEX08 für REAL
          T     LB [AR1,P#1.0]
          L     499                             // Pointerbreite (Anzahl Elemente im Array minus eins)
          T     LW [AR1,P#2.0]
          L     DINO                           // Lade Instanz-DB Nr. in Akku 1
          T     LW [AR1,P#4.0]
          L     58                              // Anfangsadresse im DB (Startadresse des Arrays + 4 Bytes]
          SLD   3
          T     LD [AR1,P#6.0]
          L     B#16#85                     // Speicherbereich => HEX85 für Instanz-DB
          T     LB [AR1,P#6.0]
    
          CALL  SFC   20
           SRCBLK :=#P_ANY_Quelle
           RET_VAL:=#RETVAL
           DSTBLK :=#P_ANY_Ziel
    Zitieren Zitieren ANY Pointer auf Array of Real im Instanz-DB  

  2. #2
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Ich habe das irgendwie so in Erinnerung, dass der SFC keine überlappenden Speicherbereiche mag.
    Ich wüßte jetzt auch nicht, wie der so etwas intern lösen können sollte.

    Mir würde hier nur einfallen, die ganze Sache in einer Schleife zu verarbeiten.

  3. #3
    Registriert seit
    17.09.2003
    Ort
    Zell bei Dietfurt a.d. Altmühl
    Beiträge
    357
    Danke
    8
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Hallo,

    mal ein Auszug aus der Hilfe von SFC20.

    Bedingungen für Quell- und Zielfeld
    Quell- und Zielfeld dürfen sich nicht überlappen. Ist das angegebene Zielfeld größer als das Quellfeld, dann werden auch nur so viele Daten in das Zielfeld kopiert, wie im Quellfeld stehen.

    Sollte eigentlich klar sein. Ich würde es auch über ein kleine Schleife lösen. Ist ja gleich programmiert.
    MfG

    Hubert

    \"Never change a running system. \"

  4. #4
    Potz Blitz ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.02.2012
    Ort
    Niedersachsen
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Quell und Zielfeld sind doch beide 499 REALS...

  5. #5
    Potz Blitz ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.02.2012
    Ort
    Niedersachsen
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Schleife möchte ich nicht, wegen Zykluszeit. SFC20 ist da schneller, hab ich mal gelesen.

  6. #6
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Zitat Zitat von Lupo Beitrag anzeigen
    Ich habe das irgendwie so in Erinnerung, dass der SFC keine überlappenden Speicherbereiche mag.
    Zitat Zitat von hubert Beitrag anzeigen
    Bedingungen für Quell- und Zielfeld
    Quell- und Zielfeld dürfen sich nicht überlappen
    .
    Überlappen ist das Zauberwort ...

  7. #7
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Dann mußt du dir den Quell-Speicher erst irgendwo anders hinkopieren und dann von dort aus auf den um eins versetzten Ziel-Speicher.
    Ohne es jetzt nachgesehen zu haben würde ich sagen, dass du da zeitmäßig mit der Schleife besser wegkommst.

    Du mußt aber selber wissen, was du tust ...

  8. #8
    Potz Blitz ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.02.2012
    Ort
    Niedersachsen
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Dann werd ich wohl doch ne Schleife erzeugen.

Ähnliche Themen

  1. Pointer auf Array - Dereferenzierung
    Von ksc im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 20.12.2011, 10:19
  2. Array in DB schreiben(any-pointer)
    Von Limette im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 28.10.2011, 22:17
  3. Pointer auf Array
    Von Limette im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 27.10.2011, 12:32
  4. Pointer in ein Byte Array umwandeln
    Von kai86 im Forum Simatic
    Antworten: 31
    Letzter Beitrag: 04.02.2011, 11:09
  5. Array ohne Pointer übergeben? (SCL)
    Von tahren im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.06.2010, 12:08

Lesezeichen

Berechtigungen

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