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

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

Thema: Array in Temp laden

  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
    Hallo,

    es wird gut möglich sein dass mein Problem nicht nur einmal aufgekommen. Habe in der Suche aber nichts Passendes gefunden.

    Code:
    Auf  BlockDB // block DB
    L DBB  0
    T #TempArray[0]
    L DBB  1
    T #TempArray[1]
    .
    .
    .
    Usw.
    Es ist ein Array[0..49] of byte welches ich indirekt ansprechen möchte und in ein temparray[0..49] laden möchte. Meine Methode funktioniert zwar, ist aber sehr viel Handarbeit. Muss den Lade- und Transferbefehl ja 50 mal tippen. Gibt es ja was eleganteres? Läuft es auf Adressregister mit Schleife und so hinaus ?

    Oder kann ich es einfach blockmoven:

    Also so ungefähr(bei mir funktioniert so nicht)

    Code:
    SRCBLK: P#L BlockDB.DBB0.0 BYTE 50
    RET_VAL: #ret_val
    DSTBLK: #TempArray
    Grüße
    Zitieren Zitieren Array in Temp laden  

  2. #2
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Limette,

    schau doch mal hier nach:
    http://www.sps-forum.de/showthread.php?43951

    Da sollte alles drin stehen, was Du brauchst.

    Grüße
    Gebs

  3. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    Limette (02.12.2011)

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

    Standard

    Wenn der 2. Codeschnipsel den gutan alten SFC20 darstellt muss auch an DSTBLK ein Pointer.

    Also musst Du nur noch einen Zeiger basteln der auf Dein #TempArray zeigt.

    hängt die Problemstellung mit http://www.sps-forum.de/showthread.p...auf-any(in_out) zusammen?
    Das Grauen lauert in der Zwischenablage !!

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

    Limette (02.12.2011)

  6. #4
    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
    Wenn der 2. Codeschnipsel den gutan alten SFC20 darstellt muss auch an DSTBLK ein Pointer.

    Also musst Du nur noch einen Zeiger basteln der auf Dein #TempArray zeigt.

    hängt die Problemstellung mit http://www.sps-forum.de/showthread.p...auf-any(in_out) zusammen?

    Hängt (eigentlich) nicht mit der einen Problemstellung zusammen. "Gebs" tipp scheint mir ein wenig aufwendiger, deshalb würde ich es mit dem blkmov erschlagen (soweit möglich)

    Code:
    SRCBLK: P#L BlockDB.DBB0.0 BYTE 50
    RET_VAL: #ret_val
    DSTBLK: #TempArray
    der DSTBLK bräuchte also auch einen Pointer. Leider nimmt er den SLCBLK so auch nicht(wird rot). irgendwas muss da ja noch falsch sein. wo kann ich da nachgucken, wie man das korrekt adressiert ?

  7. #5
    Registriert seit
    12.10.2010
    Beiträge
    6
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo

    CALL "BLKMOV"
    SRCBLK :=P#DB123.DBX0.0 BYTE 50
    RET_VAL:=#tInt
    DSTBLK :=#TempArray

    mfg Karl
    Geändert von SHU (02.12.2011 um 13:13 Uhr)

  8. #6
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Limette,

    wenn ich es richtig deute, willst Du Deinen Quell-DB als IN-Variable übergeben und an den SFC 20 weiterleiten.
    Das geht leider nicht. Es bleibt Dir nichts anderes übrig, als den Pointer "von Hand" zusammenzubauen:
    Code:
        
    // Pointer 1 
    L     B#16#10                     // 10h für S7       
    T     LB    0 
    L     B#16#2                      // 02h für BYTE 
    T     LB    1 
    L     50                             // 50 Bytes 
    T     LW    2 
    AUF   #Block_DB                // Block-DB öffnen
    L     DBNO                         // DB-Nummer 
    T     LW    4 
    L     0                              // Anfangsadresse   
    SLD   3 
    OD    DW#16#84000000     // Speicherbereich (DB) 
    T     LD    6  
    
    CALL  "BLKMOV"        
       SRCBLK :=#Pointer1        
       RET_VAL:=#TempRetVal        
       DSTBLK :=#TempArray
    Dabei musst Du #Pointer1 als 1. Eintrag (TYP ANY) in den Temp-Variablen deklarieren!

    Probier es mal aus. So kompliziert ist es nicht.

    Grüße
    Gebs

  9. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    Limette (02.12.2011)

  10. #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

    das ist natürlich gut, wenn es nicht so kompliziert ist. bei mir ist folgendes schon aufgetaucht:

    Code:
    AUF   #Block_DB                // Block-DB öffnen
    L     DBNO                         // DB-Nummer 
    T     LW    4
    Die DB-Nummer habe ich schon ein netzwerk davor herausgefunden und es in #dbnummer gespeicher.

    wenn ich nun

    Code:
    L #dbnummer
    T LW 4
    eingebe. wird nachdem speichern komischerweise:

    Code:
    L #dbnummer
    T #dbnummer

    an was liegt sowas ?




    Zitat Zitat von Gebs Beitrag anzeigen
    Hallo Limette,

    wenn ich es richtig deute, willst Du Deinen Quell-DB als IN-Variable übergeben und an den SFC 20 weiterleiten.
    Das geht leider nicht. Es bleibt Dir nichts anderes übrig, als den Pointer "von Hand" zusammenzubauen:
    Code:
        
    // Pointer 1 
    L     B#16#10                     // 10h für S7       
    T     LB    0 
    L     B#16#2                      // 02h für BYTE 
    T     LB    1 
    L     50                             // 50 Bytes 
    T     LW    2 
    AUF   #Block_DB                // Block-DB öffnen
    L     DBNO                         // DB-Nummer 
    T     LW    4 
    L     0                              // Anfangsadresse   
    SLD   3 
    OD    DW#16#84000000     // Speicherbereich (DB) 
    T     LD    6  
    
    CALL  "BLKMOV"        
       SRCBLK :=#Pointer1        
       RET_VAL:=#TempRetVal        
       DSTBLK :=#TempArray
    Dabei musst Du #Pointer1 als 1. Eintrag (TYP ANY) in den Temp-Variablen deklarieren!

    Probier es mal aus. So kompliziert ist es nicht.

    Grüße
    Gebs

  11. #8
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Das liegt daran, wie Du Deine Variablen deklariert hast.
    Hast Du den Pointer als 1. Eintrag in Deiner Variablentabelle?
    Stell doch mal Deine Variablendeklaration hier rein.

    Grüße
    Gebs

  12. #9
    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 Gebs Beitrag anzeigen
    Das liegt daran, wie Du Deine Variablen deklariert hast.
    Hast Du den Pointer als 1. Eintrag in Deiner Variablentabelle?
    Stell doch mal Deine Variablendeklaration hier rein.

    Grüße
    Gebs
    habs jetzt einfach den any ans ende meiner Temp gestellt und die adressen angepasst. so müsste es ja gehen. muss es nur noch kurz testen.
    kann ich der problematik eigenltich entgehen, wenn ich alles ins register schreibe oder gibt es da auch tretminen ?

  13. #10
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Was willst Du in welches Register schreiben?

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. Antworten: 5
    Letzter Beitrag: 24.06.2010, 10:18
  3. TEMP-Variable
    Von anne im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 14.06.2010, 19:55
  4. S5 und temp. messung.
    Von Jan_Veenstra im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 19.03.2006, 09:41
  5. Bool-Array in Byte-Array
    Von Techniker im Forum Sonstige Steuerungen
    Antworten: 10
    Letzter Beitrag: 13.01.2006, 19:12

Lesezeichen

Berechtigungen

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