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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 27

Thema: Verarbeitung von String Variablen

  1. #1
    Registriert seit
    31.08.2009
    Beiträge
    63
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich stehe vor folgendem Problem.

    Ich erhalte von einem Sick Lector 620 einen Code die Länge des Codes variiert je nach Leseergebniss Good Read 18Byte No Read 6 Byte.
    Die Daten werden in einem Datenbaustein als Zeichen eingetragen.
    z.B. Code = 1234

    im DB

    DB72.dbb290 = 1
    DB72.dbb291 = 2
    DB72.dbb292 = 3
    DB72.dbb293 = 4


    oder im Fall das der Lector 620 den Code nicht lesen konnte wird als Ergebniss NoRead übertragen.

    das sieht dann so aus.

    DB72.dbb290 = N
    DB72.dbb291 = o
    DB72.dbb292 = R
    DB72.dbb293 = e
    DB72.dbb294 = a
    DB72.dbb295 = d


    Diese zeichenfolge schiebe ich mit SFC 20 blockmove in eine String Variable, die ich dann Vergleichen kann.


    In der Anlage sind zwei Codeleser Verbaut, deren Ergebniss verglichen wird.
    Das hab ich auch schon so weit Realisiert.

    Ich möchte jetzt die je nach Codelänge entstehenden freien Variablen mit dem Platzhalter ( ' ' ) auffüllen, so das in der Stringvariable nur immer der Letzte gelesene Wert steht.

    Bei einem Good Read des Lectors werden ab DB72.dbb


    Da ich das ganze abhängig von der Codelänge machen möchte hätte ich das ganze gerne Berechnet.

    Die Anzahl der Bytes des Leseergebnisses wird vom Lector in einer Variablen übergeben.

    d. h. Startadresse (z.b. Db72.dbb290) + anzahl der aktuell eingelesenen Bytes (z.B. 6) = Startadresse ab der der Platzhalter in die Stringvariable geschrieben werden soll. (z.B. DB72.DBB296)


    Ab dieser Startadresse soll die Stringvariable mit dem Platzhaltersymbol ( ' ' ) gefüllt werden.


    Ich hab in diese Richtung wenig bis gar keine erfahrung, und hoffe das ihr mir ein bisschen auf die sprünge helfen könnt.

    Mfg

    CZach
    Zitieren Zitieren Verarbeitung von String Variablen  

  2. #2
    Registriert seit
    16.10.2007
    Beiträge
    28
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    #ZeichenLeer := #maxStringLaenge - #LectorLaenge;
    #Ausgabestring := DELETE(IN:= #Eingabestring, L:= #ZeichenLeer, P:= #LectorLaenge+1);

  3. #3
    Registriert seit
    31.08.2009
    Beiträge
    63
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    SCL oder ?

    Das glaub ich wird mir zu hoch.

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

    Beitrag

    Wenn nicht SCL, dann bleibt eigentlich nur AWL, also indirekte Adressierung
    Lies dazu mal hier: Pointer Zeiger FIFO LIFO

    in Deinem Fall dann etwa so:

    Code:
      Auf DB72 // DB72 aktivieren 
      L     290               // hier beginnt der String
      L #MyStrLen             // die Länge deines Strangs (z.Bsp. 6)
      +I
      L 1                     // das nächste Byte
      +I
      SLD   3                 // Pointer erzeugen
      LAR1                    // im ar1 steht p#297.0
      L     ''                // Leerzeichen 
      T     DBB [AR1,P#0.0]

    Hier fehlt nun aber noch die Schleife, es wird nur 1 Byte befüllt!
    Geändert von Ralle (30.07.2014 um 12:37 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

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

    CZach001 (31.07.2014)

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

    Standard

    PS: Zur Schleife suchst du mal in der Step7-Hilfe nach "Loop" oder hier im Forum.
    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

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

    Zitat Zitat von CZach001 Beitrag anzeigen
    SCL oder ?

    Das glaub ich wird mir zu hoch.
    über diese Aussage würde ich in diesem Zusammenhang noch einmal gründlich nachdenken ...

    Gruß
    Larry

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

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    über diese Aussage würde ich in diesem Zusammenhang noch einmal gründlich nachdenken ...

    Gruß
    Larry
    Paßt aber, denn es ist ja schon fast so etwas wie eine Hochsprache!
    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. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Larry Laffer (30.07.2014)

  10. #8
    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

    ... ich mußte jetzt tatsächlich 3 mal nachdenken bis ich den Witz verstanden hatte ...

  11. #9
    Registriert seit
    31.08.2009
    Beiträge
    63
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Wenn nicht SCL, dann bleibt eigentlich nur AWL, also indirekte Adressierung
    Lies dazu mal hier: Pointer Zeiger FIFO LIFO

    in Deinem Fall dann etwa so:

    Code:
      Auf DB72 // DB72 aktivieren 
      L     290               // hier beginnt der String
      L #MyStrLen             // die Länge deines Strangs (z.Bsp. 6)
      +I
      L 1                     // das nächste Byte
      +I
      SLD   3                 // Pointer erzeugen
      LAR1                    // im ar1 steht p#297.0
      L     ''                // Leerzeichen 
      T     DBB [AR1,P#0.0]

    Hier fehlt nun aber noch die Schleife, es wird nur 1 Byte befüllt!
    Hallo, danke für die Unterstützung,
    ich hab das jezt mal so probiert, und funktioniert auch wie du beschrieben hast.

    Ich hab mir jetzt die Anzahl der Freien Bytes berechnet (siehe anhang NW 5) und möchte nun eine Loop schleife erstellen, die entsprechend der anzahl der Freien Bytes durchlaufen wird.
    Leider hab ich keine Ahnung wie der Syntax dafür aussehen soll.
    In Rot mal mein Ansatz.
    Ist der Gedanke Richtig die Schleife nur so oft zu durchlaufen bis alle freien stellen mit dem Leerzeichen gefüllt sind, oder spielt das keine Rolle.

    der Schleifenzähler wird ja von der Loopanweisung automatisch dekrementiert oder das wird mit der Sprungmarke auf den schleifenzähler erreicht oder?



    L #FreieBytes
    schl: T # Schleifenzähler
    Auf DB72 // DB72 aktivieren
    L 290 // hier beginnt der String
    L #MyStrLen // die Länge deines Strangs (z.Bsp. 6)
    +I
    L 1 // das nächste Byte
    +I
    SLD 3 // Pointer erzeugen
    LAR1 // im ar1 steht p#297.0
    L '' // Leerzeichen
    T DBB [AR1,P#0.0]

    LAR1 ein Byte hochzählen
    L1
    +I

    L #Schleifenzähler
    Loop schl

    SPA end

    end: NOP0


    Mfg
    CZach
    und schon mal danke fürs Grübeln, wobei die meisten von euch wohl gar nicht lange grübeln müssen.
    Geändert von CZach001 (31.07.2014 um 11:05 Uhr)

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Schon mal nicht so schlecht, aber die Adresse rechnest du 1. falsch hoch und 2. bildest du in der Schleife am Anfang jedes Mal eine Neue Adresse, überschreibst also die hochgezählte.
    Daher mal folgende Änderungen:

    #My_Pointer ist eine Dword (kann Temp sein)
    Du addierst auf diesen Pointer gleich einen 1 Byte "langen" Pointer, so schiebst du den Zeiger immer weiter

    Code:
    Auf DB72 // DB72 aktivieren 
    L 290 // hier beginnt der String
    L #MyStrLen // die Länge deines Strangs (z.Bsp. 6)
    +I
    L 1 // das nächste Byte
    +I
    SLD 3 // Pointer erzeugen
    T #My_Pointer
    
    L #FreieBytes
    schl: T # Schleifenzähler
    
    L #My_Pointer
    LAR1 // im ar1 steht p#297.0
    L '' // Leerzeichen 
    T DBB [AR1,P#0.0]
    
    L My_Pointer
    L P#1.0
    +D
    T My_Pointer
    
    L #Schleifenzähler
    Loop schl
    
    SPA end
    
    end: NOP0
    
    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

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

    CZach001 (31.07.2014)

Ähnliche Themen

  1. Antworten: 16
    Letzter Beitrag: 27.01.2014, 19:27
  2. Step 7 Verarbeitung von schnellen Signalen ( ca. 1-2ms )
    Von Xplosion im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 09.08.2013, 11:10
  3. Telegrammdaten auslesen / String-Verarbeitung
    Von Semo im Forum Hochsprachen - OPC
    Antworten: 8
    Letzter Beitrag: 21.06.2009, 09:15
  4. S7 String variablen
    Von zotos im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.11.2007, 18:02
  5. String verarbeitung
    Von bqstony im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 15.02.2005, 13:15

Lesezeichen

Berechtigungen

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