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

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

Thema: Array in DB schreiben(any-pointer)

  1. #1
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also:
    FB1
    IN-Schnittstelle:
    Datenherein (ANY)
    dem FB1 ist in OB1 ein DB mit einem Char Array[0..50] zugwiesen. da soll nachher das array drinstehen.

    Quellzeiger:
    Code:
     
          L     P##Datenherein             
          LAR1                              
          TAR2                              // offset 
          +AR1                              // multi
     
          L     B [AR1,P#0.0]              
          T     #syntID               
     
          L     B [AR1,P#1.0]               
          T     #DatenTyp              
     
          L     W [AR1,P#2.0]               
          T     #RepFact               
     
          L     W [AR1,P#4.0]               
          T     #DBNummer               
     
          L     D [AR1,P#6.0]               
          T     #Offset
    Code:
     
          LAR1  P##ArraymitDatendrin 
     
          L     #syntID 
          T     LB [AR1,P#0.0] 
     
          L     #DatenTyp
          T     LB [AR1,P#1.0]  
     
          L     #RepFact
          T     LW [AR1,P#2.0] 
     
          L     #DBNummer
          T     LW [AR1,P#4.0] 
     
          L     #Offset
          T     LD [AR1,P#6.0]
    habe mir im forum den aufbau zusammengeklaubt. leider funktioniert es nicht, also es stehen keine daten im array des DBs. sieht jemand ein fehler?
    Zitieren Zitieren Array in DB schreiben(any-pointer)  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Versuch mal beim 1. Any B, W,D durch DIB,DIW und DID zu ersetzen.

    Ohne jetzt deinen Code genau durchzusehen mal ein funktionierendes Beispiel:


    Code:
    //NW1
          TAR2  #AR2BACKUP
          L     P##anySchreibstring
          LAR2  
          L     #AR2BACKUP
          +AR2  
          L     P##anyTemp
          LAR1  
          L     DIW [AR2,P#0.0]
          T     LW [AR1,P#0.0]
          L     DIW [AR2,P#2.0]
          T     LW [AR1,P#2.0]
          L     DIW [AR2,P#4.0]
          T     LW [AR1,P#4.0]
    //      T     #wDB
          L     DID [AR2,P#6.0]
    //      T     #dwAdr
          T     LD [AR1,P#6.0]
          LAR2  #AR2BACKUP
    
    //NW2
          CALL  "BLKMOV"
           SRCBLK :=#Schreibstring_intern
           RET_VAL:=#RetVal
           DSTBLK :=#anyTemp
    Ist der umgekehrte Weg auf eine INOUT. Bei dir müßte SRCBLK und DSTBLK vertauscht werden.

    #AR2BACKUP DWord
    #anySchreibstring Any INOUT
    #Schreibstring_intern String Temp <-- Das kann auch ein Any auf dein Array oder evtl. das Chararray selbst sein (mal testen)

    anyTemp enthält nach NW1 die "tatsächliche" Adresse des als INOUT am FB angelegten Any. Dorthin wird dann #anySchreibstring umkopiert.
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Limette (27.10.2011)

  4. #3
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Versuch mal beim 1. Any B, W,D durch DIB,DIW und DID zu ersetzen.
    hat leider keine besserung gebracht.

    dein code mit der INOUT Methode müsste ich noch probieren. notfalls muss er herhalten.

  5. #4
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Zitat Zitat von Limette Beitrag anzeigen
    Also:
    FB1
    IN-Schnittstelle:
    Datenherein (ANY)
    dem FB1 ist in OB1 ein DB mit einem Char Array[0..50] zugwiesen. da soll nachher das array drinstehen.

    Quellzeiger:
    Code:
     
          L     P##Datenherein             
          LAR1                              
          TAR2                              // offset 
          +AR1                              // multi
    Ohne die Applikation zu kennen bin ich etwas verwundert.

    Im Fb wird doch über das AR2 die Adresse des Instanz-DBs verwaltet, d.h. es wird nur ein Offset auf den InstanzDB addiert.

    Liegen die Daten in der Instanz oder denke ich am frühen morgen falsch ?
    Geändert von dtsclipper (28.10.2011 um 07:37 Uhr)
    Das Grauen lauert in der Zwischenablage !!

  6. #5
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von dtsclipper Beitrag anzeigen
    Ohne die Applikation zu kennen bin ich etwas verwundert.

    Im Fb wird doch über das AR2 die Adresse des Instanz-DBs verwaltet, d.h. es wird nur ein Offset auf den InstanzDB addiert.

    Liegen die Daten in der Instanz oder denke ich am frühen morgen falsch ?
    die richtigkeit meines codes kann gerne bezweifelt werden, darum auch der post, es funktioniert ja nicht.

    das Array
    Code:
    ArraymitDatendrin
    liegt in einem IDB. ich hoffe sowas hast du gefragt.

  7. #6
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Zitat Zitat von Limette Beitrag anzeigen
    Also:
    FB1
    IN-Schnittstelle:
    Datenherein (ANY)
    dem FB1 ist in OB1 ein DB mit einem Char Array[0..50] zugwiesen. da soll nachher das array drinstehen.

    Quellzeiger:
    Code:
     
          L     P##Datenherein             
          LAR1                              
          TAR2                              // offset 
          +AR1                              // multi
     
          L     B [AR1,P#0.0]              
          T     #syntID               
     
          L     B [AR1,P#1.0]               
          T     #DatenTyp              
     
          L     W [AR1,P#2.0]               
          T     #RepFact               
     
          L     W [AR1,P#4.0]               
          T     #DBNummer               
     
          L     D [AR1,P#6.0]               
          T     #Offset      
     
          LAR1  P##ArraymitDatendrin 
     
          L     #syntID 
          T     LB [AR1,P#0.0] 
     
          L     #DatenTyp
          T     LB [AR1,P#1.0]  
     
          L     #RepFact
          T     LW [AR1,P#2.0] 
     
          L     #DBNummer
          T     LW [AR1,P#4.0] 
     
          L     #Offset
          T     LD [AR1,P#6.0]
    Im moment überschreibst Du den ZielPointer mit den Daten die Du für den Quellzeiger generiert hast.
    Das Grauen lauert in der Zwischenablage !!

  8. #7
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Versuch mal beim 1. Any B, W,D durch DIB,DIW und DID zu ersetzen.

    Ohne jetzt deinen Code genau durchzusehen mal ein funktionierendes Beispiel:


    Code:
    //NW1
          TAR2  #AR2BACKUP
          L     P##anySchreibstring
          LAR2  
          L     #AR2BACKUP
          +AR2  
          L     P##anyTemp
          LAR1  
          L     DIW [AR2,P#0.0]
          T     LW [AR1,P#0.0]
          L     DIW [AR2,P#2.0]
          T     LW [AR1,P#2.0]
          L     DIW [AR2,P#4.0]
          T     LW [AR1,P#4.0]
    //      T     #wDB
          L     DID [AR2,P#6.0]
    //      T     #dwAdr
          T     LD [AR1,P#6.0]
          LAR2  #AR2BACKUP
     
    //NW2
          CALL  "BLKMOV"
           SRCBLK :=#Schreibstring_intern
           RET_VAL:=#RetVal
           DSTBLK :=#anyTemp
    Ist der umgekehrte Weg auf eine INOUT. Bei dir müßte SRCBLK und DSTBLK vertauscht werden.

    #AR2BACKUP DWord
    #anySchreibstring Any INOUT
    #Schreibstring_intern String Temp <-- Das kann auch ein Any auf dein Array oder evtl. das Chararray selbst sein (mal testen)

    anyTemp enthält nach NW1 die "tatsächliche" Adresse des als INOUT am FB angelegten Any. Dorthin wird dann #anySchreibstring umkopiert.
    hab es mal probiert aber es klappt noch nicht so recht. mir fehlt glaub einfach die erfahrung(=skill) um sowas zu händeln.
    Code:
     
     
    L     DIW [AR2,P#2.0]
    Code:
     
          L     DID [AR2,P#6.0]
    bei mir stehen nach dem speichern: indierekt adressierte Variabeln aus der IN-Schnittstelle...das kann ja eigentlich nicht richtig sein. mit denen habe ich da ja nichts zu tun...
    zudem lässt sich bei mir der any-pointer nicht auf das blockmove legen..warum auch immer...tipp?

  9. #8
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von dtsclipper Beitrag anzeigen
    Im moment überschreibst Du den ZielPointer mit den Daten die Du für den Quellzeiger generiert hast.
    ok.. von der antwort bin grad ein wenig erschlagen. ...

  10. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Ehrlich, was soll denn nun wohin, welches Array ist wo usw.? Ich blick das nicht aus deiner Beschreibung!
    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

  11. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    Ehrlich, was soll denn nun wohin, welches Array ist wo usw.? Ich blick das nicht aus deiner Beschreibung!
    Zeig bitte mal den Aufruf von FB1.
    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

Ähnliche Themen

  1. Pointer auf Array
    Von Limette im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 27.10.2011, 12:32
  2. Pointer in ein Byte Array umwandeln
    Von kai86 im Forum Simatic
    Antworten: 31
    Letzter Beitrag: 04.02.2011, 11:09
  3. Array ohne Pointer übergeben? (SCL)
    Von tahren im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.06.2010, 12:08
  4. Pointer als Out Variable Daten schreiben
    Von mkd im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 28.10.2009, 10:58
  5. Array von Bytes per OPC in SPS schreiben
    Von ingmar im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 02.11.2006, 08:51

Lesezeichen

Berechtigungen

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