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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Hilfe, ich begreif die pointer nicht

  1. #1
    Registriert seit
    28.08.2009
    Beiträge
    14
    Danke
    73
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe mir mehrmals die Beispiele zur Verwendung der Pointer angesehen. Entweder bin ich zu blöd oder übersehe was ganz einfaches.
    Ich habe einen FB in dessen Instanzdatenbaustein in einem struct bei zs1.d1 ein Doppelwort mit 32 Zuständen gespeichert ist. Die einzelnen bits müsste ich in einen Globaldatenbaustein jeweils auf das bit 0 von 32 aufeinanderfolgenden bytes transportieren. Dann müsste ich das zs.d2 des IDB jeweils auf das bit 1 der 32 aufeinanderfolgenden bytes des GDB bringen usw. Das wird der Koppel- DB für die Visualisierung. Egal was ich probiere, ich bekomme nur Syntaxfehler. Ich müsste 32 mal die Bits einzeln auslesen und mit 8 Bit oder 1 Byte Abstand wieder abspeichern, das ist mir klar, aber wie ist die exakte Syntax?
    Gruss Micha
    Zitieren Zitieren Hilfe, ich begreif die pointer nicht  

  2. #2
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard

    Welche Art von pointern meist DU.

    16 Bit Pointer(wahrscheinlich nicht)

    32 Bit pointer Speicherindirekt ohne Bereichsübergreifung ?

    32 Bit pointer Registerindirekt mit Bereichsübergreifung ?
    Zitieren Zitieren Hilfe, ich begreif die pointer nicht  

  3. #3
    Registriert seit
    03.11.2006
    Ort
    Niedersachsen
    Beiträge
    1.126
    Danke
    170
    Erhielt 303 Danke für 259 Beiträge

    Standard

    Hast du schon in den FAQ nachgesehen?
    Gruß
    crash

    Ich bin nicht bekloppt,
    ich bin verhaltensoriginell!

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Vielleicht einfach mal deinen bisherigen Programm-Code hier einstellen und ggf. auf die Stellen hinweisen, bei denen es bei dir hakt - dann bekommen wir das sicher hin ...

    Gruß
    LL

  5. #5
    drmicha ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.08.2009
    Beiträge
    14
    Danke
    73
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Also da muss ich wohl etwas weiter ausholen. Ich bin kein ausgebildeter Programmierer und kenne SPSen und NCUse nur aus der Instandhaltersicht bei der Fehlersuche. Nun soll ich meinen Horizont erweitern und mich mit Programmieraufgaben befassen.

    Zitat Zitat von Bernard Beitrag anzeigen
    Welche Art von pointern meist DU.

    16 Bit Pointer(wahrscheinlich nicht)

    32 Bit pointer Speicherindirekt ohne Bereichsübergreifung ?

    32 Bit pointer Registerindirekt mit Bereichsübergreifung ?
    Wenn ich meine Fragestellung richtig beurteile, wahrscheinlich den letzten

    Zitat Zitat von crash Beitrag anzeigen
    Hast du schon in den FAQ nachgesehen?
    Das meinte ich mit den Beispielen, die ich (noch) nicht begreife.

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Vielleicht einfach mal deinen bisherigen Programm-Code hier einstellen und ggf. auf die Stellen hinweisen, bei denen es bei dir hakt - dann bekommen wir das sicher hin ...

    Gruß
    LL
    Also: Quelldaten kommen aus dem Instanzdatenbaustein DB19, dort liegen sie als mehrere Doppelwörter. Das erste DW liegt auf 190.0. Die Daten müssen in DB40, ab Byte 0 bis Byte 31 in nullte Bit. Das nächste DW liegt bei 194.0 im DB19, die Daten müssen in DB 40, Byte 0 bis 31 ins Bit 1 usw.
    Ich tippere das mal so ein, das PG steht in der Firma.
    L 190 ; erstes Doppelwort in der Quelle
    SLD 3
    TAR1
    L 0 ;erste Byteadresse im Ziel
    SLD 3
    TAR2
    L 32
    sc01: T #schleife ; Sprungmarke, Schleifenmerker in stat, integer
    Auf DB19 ; ist das nötig, wenn ich das im FB19 programmiere?
    u DIX [AR1, P#0.0] ; ist das richtig auch im DW?
    Auf DB 40
    = DBX [AR2, P#0.0]
    L P#0.1 ; ein Bit erhöhen?
    +AR1
    L P#1.0 ; ein Byte erhöhen?
    +AR2
    L #schleife
    loop sc01

    Das dann für das nächste Doppelwort in der Quelle wiederholen mit geänderten Adressen.
    Wie in der Eingangsmail schon geschrieben, habe ich wahrscheinlich irgendetwas Grundlegendes zu Pointer(n) nicht verstanden.
    Gruß Micha
    Zitieren Zitieren Nachtrag  

  6. #6
    Registriert seit
    28.01.2009
    Ort
    Hamburg
    Beiträge
    199
    Danke
    52
    Erhielt 54 Danke für 34 Beiträge

    Standard

    In was für einer Bausteintyp arbeitest du ?
    Das AR1 Register wird Bei FC Aufrufen vom System benutzt.
    Das AR1 Register wird Bei FC Aufrufen,für die Übergabe von Datentypen >4byte,verwendet.
    Das AR2 Register wird Bei FB Aufrufen vom System benutzt.
    Das AR2 Register enthält den Adressoffset für die Multiinstanzfahigkeit.
    Beim Zugriff auf Statische Daten innerhalb eines FB benutzt das System
    ebenfalls AR2.
    Zitieren Zitieren Hilfe, ich begreif die pointer nicht  

  7. #7
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    669
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    hi,

    imho brauchst du zwei verschachtelte Schleifen um das zu realisieren.

    1. Schleife: Doppelwörter laden
    2. Schleife: Bits schreiben

    Das ganze sieht mir auf den ersten Blick ziemlich zusammengeschustert aus.

    Micha
    "arbeite klug, nicht hart" - deutsches Sprichwort

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    ich bleibe mal bei deinem Code ... weiterentwickeln kann man den später ...
    Code:
    L 190 ; erstes Doppelwort in der Quelle
    SLD 3
    LAR1  
    L 0 ;erste Byteadresse im Ziel
    SLD 3
    LAR2
    L 32
    sc01: T #schleife ; Sprungmarke, Schleifenmerker in stat, integer
     
    Auf DB19 // ist nötig, da du von DB19 nach DB40 kopieren willst
    u DIX [AR1, P#0.0] // ist das richtig auch im DW?  ich verstehe die Frage hier nicht
    Auf DB 40
    = DBX [AR2, P#0.0]
    L P#0.1 // ein Bit erhöhen?
    +AR1
    L P#1.0 // ein Byte erhöhen?
    +AR2
    L #schleife
    loop sc01
    // das Erhöhen der Pointer hängt mit deiner Zielsetzung zusammen. In diesem Code würdest du die fortlaufenden Bits der Quelle jeweils in das Bit 2^0 der fortlaufenden Bytes des Ziels schreiben ...
    to be continued ...

  9. #9
    Registriert seit
    03.11.2006
    Ort
    Niedersachsen
    Beiträge
    1.126
    Danke
    170
    Erhielt 303 Danke für 259 Beiträge

    Standard

    @Larry: Das sieht doch gut aus.
    Genau so habe ich die Frage auch verstanden.
    Aber da war doch noch was mit AR2 sichern/wiederherstellen.
    Gruß
    crash

    Ich bin nicht bekloppt,
    ich bin verhaltensoriginell!

  10. #10
    Registriert seit
    03.11.2006
    Ort
    Niedersachsen
    Beiträge
    1.126
    Danke
    170
    Erhielt 303 Danke für 259 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo,
    ich bleibe mal bei deinem Code ... weiterentwickeln kann man den später ...
    Code:
    L 190 ; erstes Doppelwort in der Quelle
    SLD 3
    LAR1  
    L 0 ;erste Byteadresse im Ziel
    SLD 3
    LAR2
    L 32
    sc01: T #schleife ; Sprungmarke, Schleifenmerker in stat, integer
     
    Auf DB19 // ist nötig, da du von DB19 nach DB40 kopieren willst
    u DIX [AR1, P#0.0] // ist das richtig auch im DW?  ich verstehe die Frage hier nicht
    Auf DB 40
    = DBX [AR2, P#0.0]
    L P#0.1 // ein Bit erhöhen?
    +AR1
    L P#1.0 // ein Byte erhöhen?
    +AR2
    L #schleife
    loop sc01
    // das Erhöhen der Pointer hängt mit deiner Zielsetzung zusammen. In diesem Code würdest du die fortlaufenden Bits der Quelle jeweils in das Bit 2^0 der fortlaufenden Bytes des Ziels schreiben ...
    to be continued ...
    Es muss doch...
    u DBX [AR1, P#0.0]
    und nicht
    u DIX [AR1, P#0.0]
    heißen.
    Gruß
    crash

    Ich bin nicht bekloppt,
    ich bin verhaltensoriginell!

Ähnliche Themen

  1. Pointer (nicht Any!) weiterreichen
    Von sisplc im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 13.10.2011, 13:22
  2. Antworten: 13
    Letzter Beitrag: 22.10.2010, 22:22
  3. Pointer stimmt nach dem Speichern nicht mehr
    Von matziane im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.07.2010, 14:14
  4. ANY Pointer. Wenn ist DatenTyp NICHT "Byte" ?
    Von JesperMP im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.03.2009, 23:11
  5. Starter: Hilfe nicht aufrufbar
    Von Blackmike im Forum Antriebstechnik
    Antworten: 4
    Letzter Beitrag: 24.02.2009, 08:55

Stichworte

Lesezeichen

Berechtigungen

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