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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: DB indirekt beschreiben

  1. #11
    Registriert seit
    20.02.2008
    Beiträge
    332
    Danke
    16
    Erhielt 40 Danke für 37 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo,
    das würde ich auch so sehen.
    Ich würde solche Konstrukte heute nicht mehr in AWL sondern in SCL machen. Vielleicht solltest du auch darüber nachdenken.

    Wenn es aber AWL sein soll, dann mußt du mit 2 Zeigern (einen für die Quelldaten und einen für die Zieldaten) arbeiten - würde ich jedenfalls so machen ...
    Dann würde ich mir nicht die Bits einzeln laden sondern gleich das erste Byte. Hier maskierst du dann die unteren 4 Bits mit "L w#16#F" und "UW" aus. Auf das Ergebnis dann die Hex 30 oder dezimal 48 draufaddieren. Das (neue) Byte dann wegschreiben und den Schreibzeiger um P#1.0 erhöhen. Nun nochmal das gleiche Quellbyte laden und mit "SRW 4" und "L w#16#F" und "UW" die oberen 4 Bit ausmaskieren. Damit dann verfahren wie vorher. Nun Lesezeiger um "P#1.0" erhöhen und das Ganze wiederholen bis du alle Bytes geschrieben hast.

    Gruß
    Larry
    Meine volle Zustimmung...

  2. #12
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    Zitat Zitat von lounsome Beitrag anzeigen
    könnte man das nicht irgendwie in eine Schleife packen, das ganze 2000 mal schreiben ist ja Wahn.

    Gruß lounsome
    .

    http://support.automation.siemens.co...csQuery0=step7 v5.5&subtype=133100
    kind regards
    SoftMachine

  3. #13
    Registriert seit
    05.01.2009
    Ort
    69198 Schriesheim
    Beiträge
    236
    Danke
    54
    Erhielt 34 Danke für 33 Beiträge

    Standard

    Hallo,
    hab gerade Nachtschicht und Ausnahmsweise etwas Zeit

    Code:
         FUNCTION FC 2 : VOID
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      Startpos_DB : BLOCK_DB ; 
      Startpos_Pos : INT ; 
      Zielpos_DB : BLOCK_DB ; 
      Zielpos_Pos : INT ; 
      Laenge : INT ; 
      Start : BOOL ; 
    END_VAR
    VAR_TEMP
      Hilfsdoppel : DINT ; 
      Hilfsdoppel_2 : DINT ; 
      Speicherzelle : BYTE ; 
      Speicherzelle_2 : BYTE ; 
      Durchlaeufe : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
    //----------Startbedingung 
    
         U     #Start; 
          SPBN  ende; 
          L     #Startpos_Pos; //Lade die Byteadresse der Startposition
          T     #Hilfsdoppel; //Zwischenspeichern
          L     #Zielpos_Pos; //Lade die Byteadresse der Zielposition
          T     #Hilfsdoppel_2; //Zwischenspeichern
          L     0; //Lade 0
          T     #Durchlaeufe; //nullen der Durchläufe
    
    // -----------Schleife lesen der Werte
    loop: AUF   #Startpos_DB; //Öffnen des Start DB´s
          L     #Hilfsdoppel; //Lade Zwischenspeicher Startpos
          SLD   3; //schiebe links Pointerformat
          LAR1  ; //in Adressregister schieben
          L     DBB [AR1,P#0.0]; //Lade erstes Byte des Zwischenspeichers
          L     B#16#F; //maskieren der unteren 4 Bit
          UW    ; //verunden
          L     B#16#30; //für ASCI +48
          +I    ; //addition
          T     #Speicherzelle; //transfer in Speicherelle
          L     DBB [AR1,P#0.0]; //Lade Zwischenspeicher Startpos
          SRW   4; //schiebe rechts für die linken 4 Bit
          L     B#16#F; //maskieren
          UW    ; //verunden
          L     B#16#30; //für ASCI +48
          +I    ; //addition
          T     #Speicherzelle_2; //transfer in Speicherelle_2
    
    //------------schreiben auf Zielbereich
     
          AUF   #Zielpos_DB; //Öffnen des Start DB´s
          L     #Hilfsdoppel_2; //Lade Zwischenspeicher Zielpos
          SLD   3; //schiebe links Pointerformat
          LAR1  ; //in Adressregister schieben
          L     #Speicherzelle; //Laden der ersten Speicherzelle
          T     DBB [AR1,P#0.0]; //Transfer nach Zielpos erstes Byte
          L     #Speicherzelle_2; //Laden der zweiten Speicherzelle
          T     DBB [AR1,P#1.0]; //Transfer nach Zielpos zweites Byte
    
    //-------Offset für Schleife einrichten
    
          L     #Hilfsdoppel; //Lade Hilfsdoppelwort für Offset
          L     1; //Lade 1 zum erhöhen des Offsets Byte 
          +D    ; //addition
          T     #Hilfsdoppel; //Transfer nach Hilfsdoppelwort für Offset
        
      L     #Hilfsdoppel_2; //Lade Hilfsdoppelwort für Offset
          L     2; //Lade 2 Byte für Wortoperation
          +D    ; //addition
          T     #Hilfsdoppel_2; //Transfer nach Hilfsdoppelwort für Offset
    
    //incrementieren des Schleifenzählers
        
      L     #Durchlaeufe; //Lade Anzahl der bisherigen Durchläufe 
          L     1; //Lade 1
          +I    ; //addition
          T     #Durchlaeufe; //Transfer nach bisherige Durchläufe
    
    //------ prüfen der Anzahl Durchläufe für Abbruchbedingung    
       
    L     #Laenge; //Lade Bausteinlänge
          L     #Durchlaeufe; //Lade bisherige Durchläufe
          >=I   ; //vergleich auf größer gleich
          SPB   loop; //Sprunbedingung für Schleifendurchlauf
    
    //----nullen der Speicher nach Schleifendurchlauf
    
          L     0; //laden Wert null
          T     #Speicherzelle; //nullen der Speicherzelle
          T     #Speicherzelle_2; //nullen der Speicherzelle
    ende: NOP   0; 
    
    
    END_FUNCTION
    bitte vorher Testen übernehme keine Garantie, @Larry kannst du nochmal drüber
    schauen ? Danke


    gruß Thomas
    Geändert von thomas_1975 (08.03.2012 um 04:24 Uhr) Grund: Edit für bessere Übersicht

  4. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    @Thomas:
    Ich habe mal drüber geschaut, finde den AWL-Code sehr schön und vor Allem : "sehr schön dokumentiert" und nach meiner Einschätzung kann das funktionieren. Das Weitere sollte dann aber (wie du auch schreibst) halt ein Test ergeben ...

    Gruß
    Larry

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

    thomas_1975 (08.03.2012)

  6. #15
    Registriert seit
    09.02.2010
    Beiträge
    35
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @thomas_1975 & Larry Laffer

    ganz großes Mercy
    , ich werd das leider erst nächsten Montag testen können,
    bin auf einer Inbetriebnahme und hab den RFID-Leser nicht dabei.

    Melde mich dann wens funktioniert.

    Gruß lounsome

Ähnliche Themen

  1. Eingänge beschreiben?
    Von Sesssko im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.06.2011, 09:04
  2. Array beschreiben
    Von focus81 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 16.08.2010, 14:25
  3. String beschreiben
    Von manas im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.03.2010, 17:04
  4. PEW beschreiben
    Von Joos im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 03.03.2010, 10:46
  5. Array indirekt beschreiben
    Von Airpower im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 22.06.2009, 08:34

Lesezeichen

Berechtigungen

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