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

Ergebnis 1 bis 9 von 9

Thema: BlockMOV SFC20 ???

  1. #1
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich rufe in meinem FB zwei von "außen" (IN Parameter BLOCK_DB) deklarierte DB´s auf. z.B DB100(IN1) und den DB222(IN2).

    Nun möchte ich im Ablauf des FB an verschiedenen Stellen Datenbereiche des DB100 in den DB222 verschieben.

    Ich bin auf den Block mov gestoßen, der wenn ich ihm normal den DB100 und DB222 vorgebe auch funktioniert.

    Allerdings nicht wenn ich ihm die IN1 und IN2 Parameter gebe.

    Hier mal mein Quellcode


    Call "BLKMOV"

    SRCBLK:= P#IN1.DBx1540.0 Byte 40
    RET_VAL:= MW10
    DSTBLK:= P#IN2.DBx0.0 Byte 40


    Kann mir da einer sagen wie das richtig funktioniert? Der schimpft immer Syntaxfehler.
    Zitieren Zitieren BlockMOV SFC20 ???  

  2. #2
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Beitrag

    ______________________________________
    relax, take it easy
    Zitieren Zitieren -  

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

    Standard

    @ Vladi:

    Glaube Dein Link ost Defekt...

    so sollte es gehen: http://sps-forum.de/showthread.php?t=14258
    Das Grauen lauert in der Zwischenablage !!

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

    Standard

    Hallo Kiter,

    wenn Du Dir mal die IN-Variablen mit "Variablen beobachten/steuern" ansiehst, steht da nur die Nummer des DB's drin.
    Und kein "DB" oder sowas. Daher weiss der SFC 20 nicht auf was er zugreifen soll.
    Wenn Du die DB-Nummer unbedingt variabel übergeben musst, musst Du Dir Any-Zeiger bauen. Mit:
    Code:
    AUF #IN0
    L DBNO
    kannst Du den übergebenen DB rausfinden und ihn dann in Deinen Zeiger einbauen.

    Grüße
    Gebs

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

    Standard

    In Anlehnung an Gebs:

    So was musst Du dir hier zusammenbasteln, einmal für die Quell- und einmal für die Zieladresse...


    Aus der S... - Hilfe
    Format des Parametertyps ANYFormat des Parametertyps ANY

    STEP 7 speichert die Daten des Parametertyps ANY in 10 Byte. Beim Aufbau eines Parameters vom Typ ANY müssen Sie darauf achten, dass alle 10 Byte belegt sind, da der aufgerufene Baustein den gesamten Inhalt des Parameters auswertet. Wenn Sie beispielsweise in Byte 4 eine DB-Nummer spezifizieren, müssen Sie auch den Speicherbereich in Byte 6 explizit angeben.
    STEP 7 verwaltet die Daten von elementaren und zusammengesetzten Datentypen anders als die Daten für Parametertypen.
    ANY-Format bei Datentypen
    Bei elementaren und zusammengesetzten Datentypen speichert STEP 7 die folgenden Daten:

    • Datentypen
    • Wiederholfaktor
    • DB-Nummer
    • Speicherbereich, in dem die Informationen gespeichert werden
    • Anfangsadresse der Daten



    Der Wiederholfaktor kennzeichnet eine Menge des gekennzeichneten Datentyps zum Übergeben durch den Parametertyp ANY. Dadurch können Sie einen Datenbereich angeben und auch Felder und Strukturen in Verbindung mit dem Parametertyp ANY verwenden. STEP 7 kennzeichnet Felder und Strukturen als Anzahl (mit Hilfe des Wiederholfaktors) an Datentypen. Sollen z. B. 10 Wörter übergeben werden, muss beim Wiederholfaktor der Wert 10 und beim Datentyp der Wert 04 eingetragen sein.
    Die Adresse wird im Format Byte.Bit gespeichert, wobei die Byteadresse in den Bits 0 bis 2 von Byte 7, in den Bits 0 bis 7 von Byte 8 und in den Bits 3 bis 7 von Byte 9 gespeichert wird. Die Bitadresse wird in den Bits 0 bis 2 von Byte 9 gespeichert.
    Beim Nullpointer vom Datentyp NIL sind ab Byte 1 alle Bytes mit 0 belegt.
    Nachfolgenden Tabellen zeigen die Codierung der Datentypen bzw. der Speicherbereiche für den Parametertyp ANY.
    Geändert von dtsclipper (25.02.2009 um 16:28 Uhr)
    Das Grauen lauert in der Zwischenablage !!

  6. #6
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wenn Du die DB-Nummer unbedingt variabel übergeben musst, musst Du Dir Any-Zeiger bauen. Mit:
    Code:
    AUF #IN0
    L DBNO
    kannst Du den übergebenen DB rausfinden und ihn dann in Deinen Zeiger einbauen.



    Hallo, danke für die Antworten.

    Mit dem oben zitierten Quellcode, kann ich ja die als z.B. INT eingelesene Zahl als DBNummer deklarieren, doch wie rufe ich dann diesen DB auf, wie heißt der denn nach dieser deklaration?

  7. #7
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Ein Programmbeispiel für die Verwendung des SFC20 BLKMOV mit einem ANY-Zeiger (P#DB100.DBX0.0 BYTE 10) mit einer variablen DB-Nummer findest Du hier:

    http://www.sps-forum.de/showthread.php?t=25704

    http://www.sps-forum.de/showpost.php...36&postcount=5

    http://www.sps-forum.de/showpost.php...37&postcount=6

    Gruß Kai

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

    Standard

    Zitat Zitat von Kai Beitrag anzeigen
    Ein Programmbeispiel für die Verwendung des SFC20 BLKMOV mit einem ANY-Zeiger (P#DB100.DBX0.0 BYTE 10) mit einer variablen DB-Nummer findest Du hier:

    http://www.sps-forum.de/showthread.php?t=25704

    http://www.sps-forum.de/showpost.php...36&postcount=5

    http://www.sps-forum.de/showpost.php...37&postcount=6

    Gruß Kai
    He Kai, gib doch noch 12 Varianten auf den selben Thread an!

    PS: Noch ne UraltQuelle: http://www.sps-forum.de/showpost.php...92&postcount=5
    Geändert von Ralle (26.02.2009 um 08:16 Uhr)
    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
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    um das Suchen zu ersparen,

    cudos an KAI, von dem die Lösung stammt:

    Code:
    FUNCTION FC 100 : VOID
    TITLE =Werte kopieren
    //16
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : 'ANY'
    VERSION : 1.0
     
    VAR_INPUT
      DB_QUELLE : INT ; 
    END_VAR
    VAR_TEMP
      DB_REGISTER : WORD ; 
      AR1_REGISTER : DWORD ; 
      ANY_QUELLE : ANY ; 
      RETVAL : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Register sichern
     
          L     DBNO; // DB-Register
          T     #DB_REGISTER; 
     
          TAR1  #AR1_REGISTER; // AR1-Register
     
    NETWORK
    TITLE =ANY-QUELLE (ANY)
     
          L     P##ANY_QUELLE; // ANY-QUELLE (ANY)
          LAR1  ; 
     
          L     B#16#10; // Syntax-ID (STEP 7)
          T     B [AR1,P#0.0]; 
     
          L     B#16#2; // Datentyp (BYTE)
          T     B [AR1,P#1.0]; 
     
          L     10; // Anzahl (10)
          T     W [AR1,P#2.0]; 
     
          L     #DB_QUELLE; // DB-Nummer (#DB_QUELLE)
          T     W [AR1,P#4.0]; 
     
          L     P#DBX 0.0; // Bereichszeiger (DBX0.0)
          T     D [AR1,P#6.0]; 
     
    NETWORK
    TITLE =Werte kopieren
     
          CALL SFC   20 (
               SRCBLK                   := #ANY_QUELLE,
               RET_VAL                  := #RETVAL,
               DSTBLK                   := P#DB110.DBX0.0 BYTE 10);
          NOP   0; 
     
    NETWORK
    TITLE =Register wiederherstellen
     
          AUF   DB [#DB_REGISTER]; // DB-Register
          LAR1  #AR1_REGISTER; // AR1-Register
     
    END_FUNCTION
    Um das Ziel auch noch indirekt zu gestalten brauchts nur noch einen zweiten ANY als TEMP-Variable mit der gleichen Vorgehensweise.

    dtsclipper
    Das Grauen lauert in der Zwischenablage !!

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 06.06.2011, 00:13
  2. SFC20 in Schleife
    Von Markus im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 20.04.2010, 07:07
  3. Sfc20
    Von stricky im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 22.01.2010, 20:59
  4. Sfc20
    Von bresner1 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 15.07.2008, 12:06
  5. SFC20 oder 81
    Von Jochen Kühner im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 23.12.2004, 09:46

Lesezeichen

Berechtigungen

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