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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: String aus Barcode Teilauslesen und vergleichen

  1. #1
    Registriert seit
    23.11.2009
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Community.

    Habe folgendes Problem.

    Scanne einen Barcode der aus 27 Zahlen besteht. Also String angelegt in DB mit String[30] plus Kopfdaten also 32 Byte.

    Jetzt nehme ich den SFC20 Blockmove, da ich nur einen betsimmten teil aus dem ganzen Barcode benötige.
    Also Blockmove P#db1.dbx21.0 Byte 5 nach P#db1.dbx34.0 byte 5

    Zweiter Eintrag im DB ist nur ein String[5] plus Kopfdaten also 7 Byte
    Da ich nur 5 Zahlen aus dem Barcoe brauche.

    P#db1.dbx21.0 Byte 5 Ab dem 21 Byte brauch ich die 5 Zahlen

    Danach möchte ich sie Wandeln in DINT
    Geht ja auch mit einer SFC

    Mein problem ist, das ab und an irgend ein Mist im 2. Byte der Kopfdaten steht. Also in der aktuellen Länge des Strings. Versteh aber nicht warum sich die aktuelle länge veändert. Immer der gleiche Barcode nur das sich die 5 Zahlen innerhalb des Codes ab und zu verändern und ich das mitbekommen möchte.

    Wenn ich diese Zahl dann als DINT habe, dann kann ich sie ja ganz normal Vergleichen.

    Es sind nur Zahlen.

    Wenn ich die einzelnen Bytes beobachte, dann kommen genau die Zahlen die ich scanne und auch brauche. Nur beim Wandeln dann von String nach DINT geht es dann nicht weiter, weil Mist in dem 2. Byte steht.


    Kann mir einer Helfen???
    Zitieren Zitieren String aus Barcode Teilauslesen und vergleichen  

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

    Standard

    Hallo,
    wenn du aus einem String einen Teil heraus kopierst und als neuen (kürzeren) String zur Weiterverarbeitung (SFC...) in einem neuem String ablegst, hast du keine Kopfdaten mitkopiert.

    Also solltest du die neuen Kopfdaten des (kürzeren) Strings selbst wieder herstellen...
    und den kopierten String-Teil erst im DBW 34+2 (also wieder hergestellte Kopfdaten + 2 Byte) ablegen...

    Gruss
    kind regards
    SoftMachine

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard

    Warum bearbeitest du denn Strings mit Blockmove, und nicht mit den dafür vorgesehenen Bausteinen aus der IEC Bibliothek?
    Dort gibt es diverse Bausteine (LEFT, RIGHT, MID) um Strings zu bearbeiten.

  4. #4
    Heintje ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.11.2009
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage

    Zitat Zitat von SoftMachine Beitrag anzeigen
    Hallo,
    wenn du aus einem String einen Teil heraus kopierst und als neuen (kürzeren) String zur Weiterverarbeitung (SFC...) in einem neuem String ablegst, hast du keine Kopfdaten mitkopiert.

    Also solltest du die neuen Kopfdaten des (kürzeren) Strings selbst wieder herstellen...
    und den kopierten String-Teil erst im DBW 34+2 (also wieder hergestellte Kopfdaten + 2 Byte) ablegen...

    Gruss
    Hallo.
    Na das hab ich doch.
    Der zweite String fängt bei 32 wieder an. Deshalb füge ich ihn
    erst bei 34 wieder ein das die Kopfdaten nicht überschrieben werden.
    Oder wie?

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

    Standard

    und wie lauten die neuen Kopfdaten in DBB 32 + 33 und wo kommen die her ?

    Gruss
    kind regards
    SoftMachine

  6. #6
    Heintje ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.11.2009
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Cool

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Warum bearbeitest du denn Strings mit Blockmove, und nicht mit den dafür vorgesehenen Bausteinen aus der IEC Bibliothek?
    Dort gibt es diverse Bausteine (LEFT, RIGHT, MID) um Strings zu bearbeiten.
    Hallo. Mit welchen Bausteinen würdest du es machen?
    27 Zahlen. Ich brauche Bsp Zahl 21-26

  7. #7
    Heintje ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.11.2009
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von SoftMachine Beitrag anzeigen
    und wie lauten die neuen Kopfdaten in DBB 32 + 33 und wo kommen die her ?

    Gruss
    In Variablen beobachten ist normalerweise ein kleines
    Viereck zu sehen. In den beiden ersten Bytes.
    In dem kürzeren String später steht diese kleine Viereck dann im ersten Byte
    Im zweiten Byte steht irgendetwas. Keine Ahnung. Weiß ich jetzt nicht mehr.

  8. #8
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    in Byte 0 muss die maximale Länge des Strings stehen und im Byte 1 die tatsächliche Länge.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  9. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.742
    Danke
    143
    Erhielt 1.688 Danke für 1.226 Beiträge

    Standard

    Zitat Zitat von Heintje Beitrag anzeigen
    Hallo. Mit welchen Bausteinen würdest du es machen?
    27 Zahlen. Ich brauche Bsp Zahl 21-26
    Na MID, wenn dein String 30 (bzw. 27) Zeichen hat scheiden LEFT oder RIGHT doch aus.
    Code:
    CALL  "MID"
    IN     :="DBxy".str1     // Eingangsstring
    L      :=6               // Länge der mittleren Zeichenkette
    P      :=21              // Position des ersten Zeichens
    RET_VAL:="DBxy".str2     // Zielstring

  10. #10
    Heintje ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.11.2009
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Na MID, wenn dein String 30 (bzw. 27) Zeichen hat scheiden LEFT oder RIGHT doch aus.
    Code:
    CALL  "MID"
    IN     :="DBxy".str1     // Eingangsstring
    L      :=6               // Länge der mittleren Zeichenkette
    P      :=21              // Position des ersten Zeichens
    RET_VAL:="DBxy".str2     // Zielstring
    Werde ich am Dienstag ausprobieren.
    Werde dann den String wandeln nach DINT
    Mal sehen ob das geht.
    Vielleicht liegt es ja am blockmove

Ähnliche Themen

  1. String vergleichen
    Von Bensen83 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 14.07.2015, 10:52
  2. String vergleichen
    Von enter im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 12.02.2008, 09:19
  3. WinCC Flex 2005 String vergleichen
    Von PLCTEC im Forum HMI
    Antworten: 7
    Letzter Beitrag: 13.05.2007, 19:33
  4. Barcode in SPS
    Von Anonymous im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 14.11.2005, 17:34
  5. Barcode
    Von zotos im Forum PC- und Netzwerktechnik
    Antworten: 6
    Letzter Beitrag: 10.07.2004, 11:46

Lesezeichen

Berechtigungen

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