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

Ergebnis 1 bis 6 von 6

Thema: S7-1500 ein bisschen Peek Poke gespiele

  1. #1
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich hab da mal ein bisschen mit Peek Poke gespielt.
    Ich ordne in meiner Hardware die Objekte normalerweise immer genau gleich an so dass immer den ersten Eingang nehmen kann und die fortfolgenden dann immer auch zum Objekt gehören und somit indirekt adressiert werden können.
    Dazu habe ich die Peripherie immer in einen UDT eines DBs kopiert. Um mit dem UDT dann weiterarbeiten zu können.

    Das habe ich früher mit einer For Schleife gemacht (BLKMOV konnte ja keine Peripherie nur Prozess)
    Code:
    
    FUNCTION PERIN : VOID
    
    
    TITLE = 'Kopiere Peripherie in DB'
    //
    // Der Baustein nimmt die Erste Adresse eines PERIPHERIEWORTES und kopiert dieses und alle folgenden
    // der Reihe nach auf den Zielbereich der an RECORD angehängt ist. Die Menge wird vom Pointer an RECORD festgelegt
    // Die Hardwareadressen müssen alle aneinanderliegen.
    VERSION : '1.0'
    AUTHOR  : VoR
    NAME    : name
    FAMILY  : family
    
    
    VAR_INPUT
      PER_IN : INT; // erste Pripherieadresse länge wird durch Anypointer an RECORD bestimmt
    END_VAR
    
    
    VAR_IN_OUT
      RECORD : ANY;
    END_VAR
    
    
    VAR_TEMP
    laufvariable : INT;
      zwischenany : ANY;
        Recording AT zwischenany : STRUCT
            SyntaxID : BYTE;
            Datentyp : BYTE;
            Laenge : INT;
            db_Nummer : WORD;
            BytePointer : DWORD;
            END_STRUCT;
    END_VAR
        
        zwischenany := RECORD;
        
        FOR laufvariable := 0 TO (Recording.Laenge - 1) BY 1 DO
          WORD_TO_BLOCK_DB(Recording.db_Nummer).DB[(DWORD_TO_INT(SHR(IN := SHL(IN := Recording.BytePointer, N := 8), N := 11)) + laufvariable)]
           := EB[(PER_IN + laufvariable)];
        END_FOR;
    
    
    END_FUNCTION
    Jetzt bei der 1500er bietet sich da Peek/Poke noch besser an.
    Code:
    FUNCTION "PERIN" : Void
    { S7_Optimized_Access := 'FALSE' }
    VERSION : 0.1
       VAR_INPUT 
          PER_IN : Int;
       END_VAR
    
    
       VAR_IN_OUT 
          Record : Any;
       END_VAR
    
    
       VAR_TEMP 
          zwischenany : Any;
          Recording AT zwischenany : "ANY_POINTER";
       END_VAR
    
    
    
    
    BEGIN
        #zwischenany := #Record;
        
        POKE_BLK(area_src:=16#81, // von Peripherie lesen
                 dbNumber_src:=0,
                 byteOffset_src:=#PER_IN,
                 area_dest:=16#84,
                 dbNumber_dest:=#Recording.DB_Nr, // nach DB in Anypointer schreiben
                 byteOffset_dest:=DWORD_TO_DINT(SHR(IN := SHL(IN := #Recording.Startadresse, N := 8), N := 11)), // Startadresse berechnen
                 count:=#Recording.Anzahl_Werte); // Anzahl Werte aus Pointer holen.
        
        
    END_FUNCTION
    Poke läuft natürlich genau andersrum.
    Vielleicht kanns ja jemand brauchen.
    Zitieren Zitieren S7-1500 ein bisschen Peek Poke gespiele  

  2. #2
    Registriert seit
    19.06.2015
    Beiträge
    459
    Danke
    26
    Erhielt 40 Danke für 35 Beiträge

    Standard

    Wie nutzt du dann das?Die PEW musst du doch eh in die Symbolik bringen und die PEW an die AIN-Bausteine klemmen und am Ausgang auf ein Datenword schreiben.



  3. #3
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard

    nein die ID wird als Integer angegeben. dass ist dann einfach das erste eingangswort des bereichs. Die länge des Bereichs kommt dann von der Struktur die am Record angehängt wird.

    Meine Eingänge bekommen also überhaupt keine Symbolik, ausgenommen ein paar wenige einzelne welche keinem Objekt zugeordnet werden.

    mfG René

  4. #4
    Registriert seit
    19.06.2015
    Beiträge
    459
    Danke
    26
    Erhielt 40 Danke für 35 Beiträge

    Standard

    Interessant.Das habe ich so auch noch nie gesehen.Bei verfahrenstechnischen Anlagen geht das wohl eher nicht.Weil ja alles Tag-Nummern orintiert ist.

  5. #5
    Registriert seit
    19.06.2015
    Beiträge
    459
    Danke
    26
    Erhielt 40 Danke für 35 Beiträge

    Standard

    Geht das auch in S7 classic so?Einen Anwendungsfall suche ich noch.Aber den Programmcode grabsche ich mir auf jeden Fall.

  6. #6
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Bei Step7 bzw bei S7-300/400 geht das eben nicht so. Da kannst du den ersten Code nehmen. oder mit Blockmove arbeiten. Ich habe Blockmove nicht genommen weil ich bei der klassischen oft außerhalb des Prozessabbildes Peripherie gehabt habe. (vor allem bei den älteren 300ern war der arg begrenzt)

    Da blieb für mich also nur die For Schleife mit Wortweisem zugriff aus die Peripherie.

    mfG René

  7. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    silverfreaky (06.07.2015)

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 07.07.2015, 09:10
  2. TIA PEEK/POKE Probleme
    Von t.win im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.02.2014, 00:05
  3. Antworten: 0
    Letzter Beitrag: 30.08.2012, 11:12
  4. Mini-FU mit ein bisschen Logik gesucht
    Von Ludewig im Forum Antriebstechnik
    Antworten: 10
    Letzter Beitrag: 09.06.2012, 23:35
  5. Irgendwie bin ich ein bisschen stolz :)
    Von the bang 2 im Forum Stammtisch
    Antworten: 2
    Letzter Beitrag: 09.11.2007, 20:17

Lesezeichen

Berechtigungen

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