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

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

Thema: SFC 20 Problem

  1. #1
    Registriert seit
    02.02.2009
    Ort
    Thüringen
    Beiträge
    218
    Danke
    91
    Erhielt 11 Danke für 7 Beiträge

    Ausrufezeichen


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich weiß das Thema wurde schon oft behandelt, aber trotzdem. Hab ein Programm vor mir und werd einfach nicht schlau daraus. Der SFC 20 wird verwendet um Daten zu speichern und zu laden. Das Laden funktioniert auch, beim Speichern bekomm ich allerdings den Fehlercode 837F und die Daten werden nicht überschrieben... Die Hilfe sagt dazu: 8x7F "interner Fehler am Parameter X". Ist nun der Fehler an der 3. Variable dich kopiert wird oder was und wie kann ich dass beheben?
    Bitte helft mir ich bin für jede Hilfe dankbar.
    " Immer schön locker durch die Hose atmen"
    Zitieren Zitieren SFC 20 Problem  

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

    Standard

    Gibts auch einen Code dazu?
    Gibts die Datenbereiche?

  3. #3
    Avatar von Felse
    Felse ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.02.2009
    Ort
    Thüringen
    Beiträge
    218
    Danke
    91
    Erhielt 11 Danke für 7 Beiträge

    Standard

    Sorry. Hier ist was. Hab leider nicht so den Plan von AWL. Das angehangene Bild zeigt die Daten die sich nicht überschreiben lassen.


    Code:
    NW14 Daten lesen
     
       U     "Prg_wahl".PRG_EDIT_SELECT.load
          SPBN  b998
    // vom  richtigen DB an der richtige Stelle werden die Daten ausgelesen und 
    //  in DB90 zwischengespeichert
          CALL  "copy auf ziel"
           SRC_DB  :=#DB_NR
           SRC_Byte:=#AKT_Byte
           SRC_Typ :=FALSE
           SRC_Len :=16
           DEST_Any:="FRG_HEIZ_KÜHL".VISU_AKT_SCHRITT
           RET_VAL :=MW16
    b998: NOP   0
    Code:
     
    NW 15 Daten schreiben
     
      U     "Prg_wahl".PRG_EDIT_SELECT.save
          SPBN  b999
    // vom DB90 wird die Daten nun in den richtigen DB(101-110) an die richtige Stelle geschrieben
          CALL  "copy von quelle"
           DEST_DB  :=#DB_NR
           DEST_Byte:=#AKT_Byte
           DEST_Typ :=FALSE
           DEST_Len :=16
           SRC_Any  :="FRG_HEIZ_KÜHL".VISU_AKT_SCHRITT
           RET_VAL  :=MW16
    b999: NOP   0
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: bmp DB.bmp (420,8 KB, 19x aufgerufen)
    " Immer schön locker durch die Hose atmen"

  4. #4
    Avatar von Felse
    Felse ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.02.2009
    Ort
    Thüringen
    Beiträge
    218
    Danke
    91
    Erhielt 11 Danke für 7 Beiträge

    Standard

    Hier ist noch was.


    fürs Lesen:
    Code:
     
     TAR1  #T_AR1
     TAR2  #T_AR2
     
     
     LAR1  P##T_SRC_Any                // Anfangsadresse des Quell-Any-Pointers in AR1 laden
          L     B#16#10                     // Syntax-ID in den Any-Pointer eintragen
          T     LB [AR1,P#0.0]
          L     B#16#2                      // Bereichstyp BYTE laden
          UN    #SRC_Typ                    // wenn BYTE gewählt wurde, dann Sprung zum Eintrag
          SPB   Tran
          L     B#16#4                      // sonst Bereichstyp WORD laden
    Tran: T     LB [AR1,P#1.0]              // und im Any-Pointer ablegen
          L     #SRC_Len                    // Anzahl der zu übertragenden Bytes/Worte eintragen
          T     LW [AR1,P#2.0]
          L     #SRC_DB                     // Quell-DB-Nummer eintragen
          T     LW [AR1,P#4.0]
          L     0                           // wenn Quell-DB-Nummer = 0 dann
    // wird aus dem Merkerbereich 
          ==I                               // übertragen, sonst aus einem DB
          SPB   Merk
          L     P#DBX 0.0                   // Bereichspointer in Datenbaustein laden
          SPA   Offs
    Merk: L     P#M 0.0                     // Bereichspointer in Merkerbereich laden
    Offs: L     #SRC_Byte                   // Nummer des 1. zu kopierenden Bytes laden
          SLD   3                           // in Pointerformat wandeln
          +D                                // zum Bereichspointer addieren
          T     LD [AR1,P#6.0]              // Ergebnis in ANY-Ptr eintragen
    
      L     P##DEST_Any                 // Adr des Any-Ptr in AR1 legen
          LAR1  
          L     B#16#2                      // ist der Bereichstyp des übergebenen Any-Pointers
          L     B [AR1,P#1.0]               // = Byte oder = Word, erfolgt der Sprung
          ==I   
          O(    
          L     B#16#4
          ==I   
          )     
          SPB   Copy
          L     W#16#80FF                   // ansonsten Fehlerkennung laden
          T     #RET_VAL                    // an den Aufrufer übergeben
          SPA   Ende                        // Bausteinbearbeitung beenden
    Copy: LAR2  P##T_DEST_Any               // Adr. des temp. Any-Ptr laden
          L     5                           // 5 Worte müssen kopiert werden
    Back: T     #Count
          L     W [AR1,P#0.0]               // Umlegung des Any-Pointers als Inputvariable in
          T     LW [AR2,P#0.0]              // die Lokaldaten
          +AR1  P#2.0
          +AR2  P#2.0
          L     #Count
          LOOP  Back
    
    
    CALL  "BLKMOV"
           SRCBLK :=#T_SRC_Any
           RET_VAL:=#SFC_Ret_Val
           DSTBLK :=#T_DEST_Any
     
     
      L     #SFC_Ret_Val
      T     #RET_VAL
     
     
    Ende: LAR1  #T_AR1
             LAR2  #T_AR2
    fürs Schreiben:

    Code:
     TAR1  #T_AR1
     TAR2  #T_AR2
     
      LAR1  P##T_DEST_Any               // Anfangsadresse des Quell-Any-Pointers in AR1 laden
          L     B#16#0                      // Syntax-ID in den Any-Pointer eintragen
          T     LB [AR1,P#0.0]
          L     B#16#2                      // Bereichstyp BYTE laden
          UN    #DEST_Typ                   // wenn BYTE gewählt wurde, dann Sprung zum Eintrag
          SPB   Tran
          L     B#16#4                      // sonst Bereichstyp WORD laden
    Tran: T     LB [AR1,P#1.0]              // und im Any-Pointer ablegen
          L     #DEST_Len                   // Anzahl der zu übertragenden Bytes/Worte eintragen
          T     LW [AR1,P#2.0]
          L     #DEST_DB                    // Quell-DB-Nummer eintragen
          T     LW [AR1,P#4.0]
          L     0                           // wenn Quell-DB-Nummer = 0 dann
    // wird aus dem Merkerbereich 
          ==I                               // übertragen, sonst aus einem DB
          SPB   Merk
          L     P#DBX 0.0                   // Bereichspointer in Datenbaustein laden
          SPA   Offs
    Merk: L     P#M 0.0                     // Bereichspointer in Merkerbereich laden
    Offs: L     #DEST_Byte                  // Nummer des 1. zu kopierenden Bytes laden
          SLD   3                           // in Pointerformat wandeln
          +D                                // zum Bereichspointer addieren
          T     LD [AR1,P#6.0]              // Ergebnis in ANY-Ptr eintragen
    
     
      L     P##SRC_Any                  // Adr des Any-Ptr in AR1 legen
          LAR1  
          L     B#16#2                      // ist der Bereichstyp des übergebenen Any-Pointers
          L     B [AR1,P#1.0]               // = Byte oder = Word, erfolgt der Sprung
          ==I   
          O(    
          L     B#16#4
          ==I   
          )     
          SPB   Copy
          L     W#16#80FF                   // ansonsten Fehlerkennung laden
          T     #RET_VAL                    // an den Aufrufer übergeben
          SPA   Ende                        // Bausteinbearbeitung beenden
    Copy: LAR2  P##T_SRC_Any                // Adr. des temp. Any-Ptr laden
          L     5                           // 5 Worte müssen kopiert werden
    Back: T     #Count
          L     W [AR1,P#0.0]               // Umlegung des Any-Pointers als Inputvariable in
          T     LW [AR2,P#0.0]              // die Lokaldaten
          +AR1  P#2.0
          +AR2  P#2.0
          L     #Count
          LOOP  Back
    
     
    CALL  "BLKMOV"
           SRCBLK :=#T_SRC_Any
           RET_VAL:=#SFC_Ret_Val
           DSTBLK :=#T_DEST_Any
     
      L     #SFC_Ret_Val
      T     #RET_VAL
    
    Ende: LAR1  #T_AR1
            LAR2  #T_AR2
    " Immer schön locker durch die Hose atmen"

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

    Standard

    Naja, auf den ersten Blick hat das kein Ahnungsloser geschrieben, auf die Schnelle sehe ich da nichts.
    Kannst Du nicht im Status in den Adressregister schauen was da passiert?

    Und wie gesagt ist der Zielbereich vorhanden, in ausreichender Länge?

    lG
    Karl

  6. #6
    Avatar von Felse
    Felse ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.02.2009
    Ort
    Thüringen
    Beiträge
    218
    Danke
    91
    Erhielt 11 Danke für 7 Beiträge

    Standard

    Ja leider arbeitet der gute Mann nicht mehr in unserer Firma... Adressbereich ist ausreichend (im Ziel genauso groß wie in der Quelle).
    " Immer schön locker durch die Hose atmen"

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

    Standard

    Zitat Zitat von borromeus Beitrag anzeigen
    Naja, auf den ersten Blick hat das kein Ahnungsloser geschrieben, auf die Schnelle sehe ich da nichts.
    Stimmt der Code kommt aus der Hilfe zu AWL (Beispiel zum Datentyp Any).

    Ich vermute, es liegt am
    "FRG_HEIZ_KÜHL".VISU_AKT_SCHRITT

    Gib' das doch mal so an: P#DB x.DBX y.0 Byte 16

    Grüße
    Gebs

  8. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Auf den ersten schnellen Blick würde ich #DB_Nr beim Schreiben prüfen. Steht da, warum auch immer, eine 0 drin, dann wird nicht in den DB geschrieben, sondern in den Merkerbereich.
    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. #9
    Avatar von Felse
    Felse ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.02.2009
    Ort
    Thüringen
    Beiträge
    218
    Danke
    91
    Erhielt 11 Danke für 7 Beiträge

    Standard

    @Gebs

    Der meckert ständig:

    P#DB90.DB16.0 Byte 16 fehlt da noch was? Hab schon sämtliche Kombis mit Leerzeichen ausprobiert, ist immer rot
    " Immer schön locker durch die Hose atmen"

  10. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Felse Beitrag anzeigen
    @Gebs

    Der meckert ständig:

    P#DB90.DB16.0 Byte 16 fehlt da noch was? Hab schon sämtliche Kombis mit Leerzeichen ausprobiert, ist immer rot
    P#DB90.DBX16.0 Byte 16

    Hast du mal geprüft, ob auch sicher keine null in #DB_Nr steht!
    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. OPC Problem routen problem
    Von kpeter im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 25.08.2010, 19:54

Lesezeichen

Berechtigungen

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