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

Ergebnis 1 bis 9 von 9

Thema: Any Übergeben an FB

  1. #1
    Registriert seit
    24.10.2007
    Ort
    Nürnberg
    Beiträge
    28
    Danke
    20
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe ein FB Baustein geschrieben der durch SFC14 Daten einlesen soll von KEB Umrichter Aber er will nicht funktionieren! Vielleicht sieht einer den Fehler auf Anhieb.
    Code:
    FUNCTION_BLOCK FB 122
    TITLE =
    VERSION : 0.1
    VAR_INPUT
      NR_ACHS_DB : INT ;    //Achs-DB
      AchsDB : BLOCK_DB ;    
      LADDR : INT ;    //Übergabe-Adresse
      WR_PZD : ANY ;    //Any-Zeiger auf zu schreibende Prozessdaten
      RD_PZD : ANY ;    //Any-Zeiger auf zu lesende Prozessdaten
      Reset : BOOL ;    
    END_VAR
    END_VAR
    VAR
      Sy50 : STRUCT     
       END_STRUCT ;    
      Sy41 : STRUCT     
      END_STRUCT ;    
     END_VAR
    VAR_TEMP
      wrz : ANY ;    //Anyzeiger Write Prozessdaten
      rdz : ANY ;    //Anyzeiger Read Prozessdaten
      hexadr : WORD ;    //E/A Anfangsadresse Parameterdaten
      hexadr2 : WORD ;    //E/A Anfangsadresse Prozessdaten
      hilf_zsw : BYTE ;    
      fill : BYTE ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =berechnung LADDR
    
          L     #LADDR; // EA-Adresse  int-Format 
          T     #hexadr; // daten im hexformat
    NETWORK
    TITLE =
          TAR1  ; 
          T     #ar1; // AR1 retten
          TAR2  ; 
          T     #ar2; // AR2 retten
    
          LAR1  P##rdz; 
          L     W#16#1002; // type byte
          T     LW [AR1,P#0.0]; 
          L     8; // Anzahl Bytes
          T     LW [AR1,P#2.0]; 
          L     DINO; // Quell-DB NR
          T     LW [AR1,P#4.0]; 
          L     P##RD_PZD; // Anfang der Quelle
          TAR2  ; // Ar2 in Akku -AdressOffset Multiinstanz
          UD    DW#16#FFFFFF; // Bereichscodierung ausblenden
          +D    ; // Offset dazuaddieren
          T     LD [AR1,P#6.0]; 
          LAR2  #ar2; // Adressregister wiederherstellen
          LAR1  #ar1; 
    
          CALL "DPRD_DAT" (
               LADDR                    := #hexadr,
               RET_VAL                  := #ret1,
               RECORD                   := #rdz);
     END_FUNCTION_BLOCK
    Zitieren Zitieren Any Übergeben an FB  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    die quelle ist verbockt.
    die schnittstellenbeschreibung passt nicht. u.a. fehlt die definition für #ar1 und #ar2
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    xvitali (24.03.2011)

  4. #3
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    warum nicht so?

    Code:
    CODE entfernt- Fehler enthalten
    Geändert von sps-concept (24.03.2011 um 08:32 Uhr) Grund: gelöscht um Fehlinfos zu vermeiden ;-)
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....
    Zitieren Zitieren Fb  

  5. #4
    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

    @André
    Was soll das genau werden?

    @xvitali
    Das hab ich bei irgendwem im Forum abgeschrieben:

    Code:
          TAR2  #AR2BACKUP
          L     P##inany
          LAR2  
          L     #AR2BACKUP
          +AR2  
          L     P##tempany
          LAR1  
          L     D [AR2,P#0.0]
          T     D [AR1,P#0.0]
          L     D [AR2,P#4.0]
          T     D [AR1,P#4.0]
          L     W [AR2,P#8.0]
          T     W [AR1,P#8.0]
          LAR2  #AR2BACKUP
    Sollte so gehen, zum Umräumen der Any!
    Ansonsten siehe 4L.
    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

  6. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    xvitali (24.03.2011)

  7. #5
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    vor dem Antworten erst richtig durchlesen... Hab übersehen dass der Empfangsbereich durchgereicht werden soll und dachte er will direkt in TEMP reinschreiben.

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....
    Zitieren Zitieren erst lesen...  

  8. #6
    xvitali ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2007
    Ort
    Nürnberg
    Beiträge
    28
    Danke
    20
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke
    hir das ganze programm WR_PZD funktioniert aber RD_PZD nicht

    Code:
    FUNCTION_BLOCK FB 122
    TITLE =
    VERSION : 0.1
    VAR_INPUT
      NR_ACHS_DB : INT ;    //Achs-DB
      LADDR : INT ;        //Übergabe-Adresse
      WR_PZD : ANY ;    //Any-Zeiger auf zu schreibende Prozessdaten
      RD_PZD : ANY ;    //Any-Zeiger auf zu lesende Prozessdaten
     END_VAR
    VAR_OUTPUT
      FehlerNr : INT ;    
      RegFr : BOOL ;    
    END_VAR
    VAR_TEMP
      wrz : ANY ;    //Anyzeiger Write Prozessdaten
      rdz : ANY ;    //Anyzeiger Read Prozessdaten
      ar2 : DINT ;    //gesichertes Ar2
      ar1 : DINT ;    //gesichertes Ar1
      hexadr : WORD ;    //E/A Anfangsadresse Parameterdaten
      ret1 : INT ;    //Returnvalue SFC
      dbnr : INT ;    //Achs DB Nr.
     END_VAR
    BEGIN
    NETWORK
    TITLE =berechnung LADDR
    
          L     #LADDR; // EA-Adresse  int-Format 
          T     #hexadr; // daten im hexformat
    
    NETWORK
    TITLE =
          TAR1  ; 
          T     #ar1; // AR1 retten
          TAR2  ; 
          T     #ar2; // AR2 retten
    
          LAR1  P##rdz; 
          L     W#16#1002; // type byte
          T     LW [AR1,P#0.0]; 
          L     8; // Anzahl Bytes
          T     LW [AR1,P#2.0]; 
          L     DINO; // Quell-DB NR
          T     LW [AR1,P#4.0]; 
          L     P##RD_PZD; // Anfang der Quelle
          TAR2  ; // Ar2 in Akku -AdressOffset Multiinstanz
          UD    DW#16#FFFFFF; // Bereichscodierung ausblenden
          +D    ; // Offset dazuaddieren
          T     LD [AR1,P#6.0]; 
          LAR2  #ar2; // Adressregister wiederherstellen
          LAR1  #ar1; 
    
          CALL "DPRD_DAT" (
               LADDR                    := #hexadr,
               RET_VAL                  := #ret1,
               RECORD                   := #rdz);
    NETWORK
    TITLE =
    
          TAR1  ; 
          T     #ar1; // AR1 retten
          TAR2  ; 
          T     #ar2; // AR2 retten
    
          UD    DW#16#FFFFFF; // Bereichscodierung ausblenden
          L     P##WR_PZD; // Adresse input any in Akku
          +D    ; // akku zum ar2 addieren
          LAR2  ; // Ar2 mit akku1 laden
          LAR1  P##wrz; // Adresse temp any in Ar1
          L     4; // 2 Schleifendurchläufe
    loop: L     W [AR2,P#0.0]; // 8 Byte übertragen
          T     LW [AR1,P#0.0]; // Any übergeben
          +AR1  P#2.0; // ar1 um 4 Byte erhöhen
          +AR2  P#2.0; // ar2 um 4 Byte erhöhen
          TAK   ; 
          LOOP  loop; 
          LAR2  #ar2; // Adressregister wiederherstellen
          LAR1  #ar1; 
    
          CALL "DPWR_DAT" (
               LADDR                    := #hexadr,
               RECORD                   := #wrz,
               RET_VAL                  := #ret1);
     END_FUNCTION_BLOCK
    Ich habe mehrere KEB Module und will über SFC14 und SFC15 Daten Lesen und Schreiben

    Code:
          CALL  #KEB_M1
           NR_ACHS_DB   :=122
           LADDR            :=324
           WR_PZD         :="KEB_DB".Mot4.WR_PZD
           RD_PZD          :="KEB_DB".Mot4.RD_PZD

  9. #7
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    sieht mir alles etwas suspekt aus. Was willst du mit DINO im Pointer für die SFC14?

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....
    Zitieren Zitieren Fb  

  10. Folgender Benutzer sagt Danke zu sps-concept für den nützlichen Beitrag:

    xvitali (24.03.2011)

  11. #8
    xvitali ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2007
    Ort
    Nürnberg
    Beiträge
    28
    Danke
    20
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke, Danke,
    sieht mir alles etwas suspekt aus. Was willst du mit DINO im Pointer für die SFC14?
    Ja das Stimmt ist äußerst suspekt.

    Jetzt sehe ich meine Fehler. Habe den Baustein abgeändert und so funktioniert es

    Code:
    FUNCTION_BLOCK FB 122
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      LADDR : INT ;     //Übergabe-Adresse
      WR_PZD : ANY ;    //Any-Zeiger auf zu schreibende Prozessdaten
      RD_PZD : ANY ;    //Any-Zeiger auf zu lesende Prozessdaten
    END_VAR
    VAR_TEMP
      wrz : ANY ;    //Anyzeiger Write Prozessdaten
      rdz : ANY ;    //Anyzeiger Read Prozessdaten
      hexadr : WORD ;    //E/A Anfangsadresse Parameterdaten
      ret1 : INT ;    //Returnvalue SFC
      ar2 : DINT ;    //gesichertes Ar2
      ar1 : DINT ;    //gesichertes Ar1
    END_VAR
    BEGIN
    NETWORK
    TITLE =berechnung LADDR
    
          L     #LADDR; // EA-Adresse  int-Format 
          T     #hexadr; // daten im hexformat
    NETWORK
    TITLE =
    
    // AR2 retten
          TAR1  ; 
          T     #ar1; // AR1 retten
          TAR2  ; 
          T     #ar2; // AR2 retten
          L     P##WR_PZD; // Anfang der Quelle
          TAR2  ; // Ar2 in Akku -AdressOffset Multiinstanz
          UD    DW#16#FFFFFF; // Bereichscodierung ausblenden
          +D    ; // Offset dazuaddieren
          LAR1  ; 
          L     W [AR1,P#0.0]; // type 
          T     LW     0; 
          L     W [AR1,P#2.0]; // Anzahl Bytes
          T     LW     2; 
          L     W [AR1,P#4.0]; // Quell-DB NR
          T     LW     4; 
          L     D [AR1,P#6.0]; // Anfang der Quelle
          T     LD     6; 
          LAR2  #ar2; // Adressregister wiederherstellen
          LAR1  #ar1; 
    
          CALL "DPWR_DAT" (
               LADDR                    := #hexadr,
               RECORD                   := #wrz,
               RET_VAL                  := #ret1);
    NETWORK
    TITLE =
          TAR1  ; 
          T     #ar1;             // AR1 retten
          TAR2  ; 
          T     #ar2;             // AR2 retten
          L     P##RD_PZD;        // Anfang der Quelle
          TAR2  ;                 // Ar2 in Akku -AdressOffset Multiinstanz
          UD    DW#16#FFFFFF;    // Bereichscodierung ausblenden
          +D    ;                 // Offset dazuaddieren
          LAR1  ; 
          L     W [AR1,P#0.0]; // type byte
          T     LW    10; 
          L     W [AR1,P#2.0]; // Anzahl Bytes
          T     LW    12; 
          L     W [AR1,P#4.0]; // Quell-DB NR
          T     LW    14; 
          L     D [AR1,P#6.0]; // Anfang der Quelle
          T     LD    16; 
          LAR2  #ar2;            // Adressregister wiederherstellen
          LAR1  #ar1; 
    
          CALL "DPRD_DAT" (
               LADDR                    := #hexadr,
               RET_VAL                  := #ret1,
               RECORD                   := #rdz);
    
    NETWORK
    TITLE =
    END_FUNCTION_BLOCK

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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @xvitali

    Was ich nicht so schön finde, ist die Benutztung von LW...
    Wenn du da bei Temp mal was einfügst, mußt du das nacheditieren. Die Nutzung des AR2 in dem Code meines 1. Beitrages ist da ok.
    Bereichscodierung ausblenden, muß das eigentlich sein, wenn man doch die Adresse des Any komplett auf die Temp übertragen will?
    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. DB in SCL übergeben
    Von Felse im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 11.09.2012, 19:50
  2. DB Nr. an FC übergeben
    Von Beren im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 06.05.2010, 12:23
  3. MW in INT Variable übergeben
    Von Felse im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 10.03.2009, 10:13
  4. Textdatei an SPS übergeben
    Von stau im Forum HMI
    Antworten: 11
    Letzter Beitrag: 29.07.2008, 14:42
  5. UDT an FB übergeben
    Von Ralle im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 30.11.2005, 10:34

Lesezeichen

Berechtigungen

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