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

Ergebnis 1 bis 9 von 9

Thema: Any Pointer wandern lassen??

  1. #1
    Registriert seit
    31.10.2012
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich bin grade einen Anny Pointer am bauen aber dieser soll per Takt um ein Byte wandern.
    Ich besitze eine Quelle dies ist mein Byte DB40.DBB54 und der Zeiger soll zwischen DB40.DBB0 bis DB40.DBB17 wandern!
    Zuerst will ich mir das Byte DBB0 anschauen und die Quelle einfügen. Die Quelle dann verändern und wieder ins DBB0 schreiben.
    Dann wird einmal ein Takt gegeben und möchte jetzt das DBB1 anschauen und die Quelle einfügen, dann verändern und wieder ins DBB1 schreiben.

    Folgendes habe ich zurzeit geschrieben: (Dies zeigt nur das Lesen des Bytes was in die Quelle geschrieben werden soll)

    LAR1 P##ANY_1 //Any_1 ist ein Temp im FC

    L B#16#10 //Lade die Syntex ID
    T LB[AR1,P#0.0] //transferiere es in den Any-Pointer

    L B#16#2 //Lade Datentyp Byte
    T LB[AR1,P#1.0] //transferiere es in den Any-Pointer

    L 1 //Lade 1 Byte
    T LW[AR1,P#6.0] //transferiere es in den Any-Pointer

    L 40 //Byte 0 (DB40.DBB0)
    T LW[AR,P#4.0]
    L P#DBX0.0
    T LD[AR1,P#6.0]


    LAR1 P##ANY_2 //Any_2 ist ein Temp im FC


    L B#16#10 //Lade die Syntex ID
    T LB[AR1,P#0.0] //transferiere es in den Any-Pointer

    L B#16#2 //Lade Datentyp Byte
    T LB[AR1,P#1.0] //transferiere es in den Any-Pointer

    L 1 //Lade 1 Byte
    T LW[AR1,P#6.0] //transferiere es in den Any-Pointer

    L 40 //Byte 54 (DB40.DBB54 = Quelle)
    T LW[AR,P#4.0]
    L P#DBX54.0
    T LD[AR1,P#6.0]

    Call "BLKMOV" //SFC20
    SRCBLK :=#ANY_1
    Ret_val :=MW12
    DSTBLK :=#ANY_2


    Wie bekomme ich jetzt hin, dass das lesen der Bytes sich pro takt verändert??
    Zitieren Zitieren Any Pointer wandern lassen??  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.260
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Du mußt zusätzlich noch eine Variable haben.
    Hier mal der Einfachhheit halber ein alteres Bsp., aus dem du dir die entsprechende Passage (rot) leicht rausnehmen kannst.

    Code:
    FUNCTION "BLK_MOVE" : INT
    TITLE =BLK_Move
    { S7_language := '7(1) Deutsch (Deutschland)  11.01.2006  16:20:46' }
    AUTHOR : ralle
    FAMILY : SYSTEM
    NAME : BLK_MOVE
    VERSION : 1.1
    
    
    VAR_INPUT
      AnzahlDBB : INT ;    
      QuellDB : INT ;    
      QuellDW : INT ;    
      ZielDB : INT ;    
      ZielDW : INT ;    
    END_VAR
    VAR_TEMP
      Quelle : ANY ;    
      Ziel : ANY ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Blocktransfer zwischen Datenbausteinen
    
    
          LAR1  P##Quelle; //Anfangsadresse des ANY-Pointers in AR1 laden
    
    
          L     B#(16, 2); //Syntax-ID und Typ: Byte laden
          T     LW [AR1,P#0.0]; 
          L     #AnzahlDBB; //Transferlaenge
          T     LW [AR1,P#2.0]; 
          L     #QuellDB; //Quelle-DB 
          T     LW [AR1,P#4.0]; 
          L     P#DBX 0.0; //Anfangs-DW im Quell-DB
          L     #QuellDW; 
          SLD   3; 
          +D    ; 
          T     LD [AR1,P#6.0]; 
    
    
          LAR1  P##Ziel; //Anfangsadresse des ANY-Pointers in AR1
    
    
          L     B#(16, 2); //Syntax-ID und Typ: Byte laden
          T     LW [AR1,P#0.0]; 
          L     #AnzahlDBB; //Transferlaenge
          T     LW [AR1,P#2.0]; 
          L     #ZielDB; //Ziel-DB
          T     LW [AR1,P#4.0]; 
          L     P#DBX 0.0; //Anfangs-DW im Ziel-DB
          L     #ZielDW; 
          SLD   3; 
          +D    ; 
          T     LD [AR1,P#6.0]; 
    
    
          CALL "BLKMOV" (
               SRCBLK                   := #Quelle,
               RET_VAL                  := #RET_VAL,
               DSTBLK                   := #Ziel);
    END_FUNCTION
    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
    Son1317 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.10.2012
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich müsste dies dann ja nur beim Lesen der Bytes einfügen da die Quelle ja immer gleich bleiben soll!


    L #QuellDW; <---was muss den da genau drin stehen?
    SLD 3;
    <---soll wohl um 3 Bits verschieben in meinem Fall währen dies wohl 8 Bits (pro Byte lesen)
    +D ;
    <-addieren

    Ich versteh noch nicht so ganz was in der #QuellDW drin stehen soll!

  4. #4
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.255
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Die Byteadresse!
    SLD3 dient dazu aus Byte20 für das AR Byte20.0 (die rechten 3 Bits sind ja die Bitadresse) zu machen.

    PS: in Ralle's Fall ist es eine Wortadresse.

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

    Son1317 (31.10.2012)

  6. #5
    Son1317 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.10.2012
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Sorry Jungs wenn ich das nicht grade auf anhieb verstehe!

    L #QuellDB <--dort schreibe ich z.B eine 1 rein da ich jetzt dass Byte 1 mir anschuen möchte
    SLD3 <-- Ich denke mal das es wohl so bleiben wird
    +D

  7. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.260
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    PS: in Ralle's Fall ist es eine Wortadresse.
    Ne, ich hab das nur etwas ungeschickt benannt, ich kopiere ja auch Byte, also sollte es besser QuellByte heißen. Na ja, ich benutze den Baustein schon so lange...

    @Son1317

    Schau mal in die FAQ des Forums. Da gibt es schöne Erläuterungen zum Thema Any und Pointer.
    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. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.260
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Zitat Zitat von Son1317 Beitrag anzeigen
    Sorry Jungs wenn ich das nicht grade auf anhieb verstehe!

    L #QuellDB <--dort schreibe ich z.B eine 1 rein da ich jetzt dass Byte 1 mir anschuen möchte
    SLD3 <-- Ich denke mal das es wohl so bleiben wird
    +D
    L #QuellDW //ja, hier eine 1 für Byte 1, später eine 2 für Byte 2 usw.
    SLD 3 //aus der Int wird durch verschieben um 3 Bit nach links ein Pointer gemacht. Die rechten 3 Bit enthalten bei einem Pointer die Bitadresse, hier dann automatisch 0. Aus 1 wird also P#1.0
    Das wird dann zu P#DBX0.0 addiert, also wird dann P#DBX1.0 eingelesen.
    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

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

    Standard

    @Ralle
    danke dir für die Hilfe!
    Ich habe mir noch mal grad das Any-Format angeschaut und verstehe jetzt auch warum ich um 3 Bit verschiebe.

    Werde mich jetzt auch mal hier weiter als User einbringen

  10. #9
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.255
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    Ne, ich hab das nur etwas ungeschickt benannt, ich kopiere ja auch Byte, also sollte es besser QuellByte heißen. Na ja, ich benutze den Baustein schon so lange...

    @Son1317

    Schau mal in die FAQ des Forums. Da gibt es schöne Erläuterungen zum Thema Any und Pointer.
    Achja, Typ 2, sry habe mich am Text festgehalten.

Ähnliche Themen

  1. Pointer als IN (FC/FB) wieder übergeben als Pointer
    Von saarlaender im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 18.06.2012, 11:47
  2. S7 LAR P##... --- pointer auf pointer
    Von milmu im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.11.2010, 17:39
  3. DB zusammenstellen lassen
    Von blueColt im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 24.08.2010, 17:29
  4. Zylinder verfahren lassen
    Von Vauxhall1983 im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 02.09.2009, 15:44
  5. Skript ausführen lassen
    Von magmaa im Forum HMI
    Antworten: 6
    Letzter Beitrag: 04.05.2009, 19:39

Lesezeichen

Berechtigungen

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