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

Ergebnis 1 bis 10 von 10

Thema: String in einem Datenbaustein

  1. #1
    Registriert seit
    02.06.2014
    Beiträge
    46
    Danke
    21
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich schreibe ein Wort in einen Datenbaustein ab DB10.DBX14.0 fängt ein String von 10 Bytes (Siehe Foto). Das Problem dass der erste Buchstabe wird ins erste Byte (Byte 14) reingeschrieben und der zweite ins zweite (Byte 15)... Während das erste Byte für die maximale Zeichenkettelänge und das zweite für die tatsächliche Länge geeignet wäre. Die Frage jetzt wie kann ich ab dem Byte 16 anfangen zu schreiben und nicht ab Byte 14 d.h. E kommt in Byte 16 und N in Byte 17?
    Mit freundlichen Grüßen.
    Unbenannt.png
    Zitieren Zitieren String in einem Datenbaustein  

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

    Standard

    Ich kann deine Frage nicht wirklich nachvollziehen, im Datenbaustein stimmt doch alles.
    Der erste String[10] fängt bei 14 an, der zweite bei 26.
    Das sind also 12 Byte. Byte 0 und 1, wie von dir richtig beschrieben für die Längenangaben, ab Byte 2 dann 10 Byte für die Char des Strings.
    Wenn du das erste Char des 1. Strings beschreiben willst, dann wäre das im DB Byte 16, für den 2. String Byte 28.
    Wenn du Blockmove (SFC20) nutze, passiert das automatisch, du schreibst eine Stringvariable eines DB symbolisch an Source und einen symbolisch an Dest, dann wird das korrekt kopiert.
    Gleiches gilt für concat und die restlichen Stringfunktionen. "Zu Fuß" (Byte, Word, DWord umkopieren) mußt du selbst darauf achten,die richtigen Bytes zu beschreiben.
    Nicht vergessen, wenn du einzelne Char per Lade/Transferriere in den String schreibst, mußt du auch die tatsächliche Länge anpassen (Byte1), wenn sich die Länge des Strangs ändert.
    Geändert von Ralle (07.11.2014 um 23:33 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

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

    joe_bvb (08.11.2014)

  4. #3
    Registriert seit
    02.06.2014
    Beiträge
    46
    Danke
    21
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Ich kann deine Frage nicht wirklich nachvollziehen, im Datenbaustein stimmt doch alles.
    Der erste String[10] fängt bei 14 an, der zweite bei 26.
    Das sind also 12 Byte. Byte 0 und 1, wie von dir richtig beschrieben für die Längenangaben, ab Byte 2 dann 10 Byte für die Char des Strings.
    Wenn du das erste Char des 1. Strings beschreiben willst, dann wäre das im DB Byte 16, für den 2. String Byte 28.
    Wenn du Blockmove (SFC20) nutze, passiert das automatisch, du schreibst eine Stringvariable eines DB symbolisch an Source und einen symbolisch an Dest, dann wird das korrekt kopiert.
    Gleiches gilt für concat und die restlichen Stringfunktionen. "Zu Fuß" (Byte, Word, DWord umkopieren) mußt du selbst darauf achten,die richtigen Bytes zu beschreiben.
    Nicht vergessen, wenn du einzelne Char per Lade/Transferriere in den String schreibst, mußt du auch die tatsächliche Länge anpassen (Byte1), wenn sich die Länge des Strangs ändert.
    Ich danke dir für die Antwort. Du hast doch meine Frage nachvollzogen. Mit SFC20 würde es gehen, ja. Aber warum wenn ich einen Anfangswert eingebe wird ab Byte 14 belegt und nicht wie du gesagt hast ab Byte 16?Ich will nur Anfangswert eingeben und nicht mit SFC20, geht das?

  5. #4
    Registriert seit
    23.10.2009
    Beiträge
    391
    Danke
    58
    Erhielt 113 Danke für 87 Beiträge

    Standard

    Zitat Zitat von joe_bvb Beitrag anzeigen
    ... Das Problem dass der erste Buchstabe wird ins erste Byte (Byte 14) reingeschrieben und der zweite ins zweite (Byte 15)...
    Wie hast Du das denn fest gestellt? Zeig das mal als Screenshot.
    Bei mir wird der erste Buchstabe in Byte 16 geschrieben, davor werden die beiden Längenbytes eingetragen..
    Gruß
    Erch

  6. Folgender Benutzer sagt Danke zu LargoD für den nützlichen Beitrag:

    joe_bvb (10.11.2014)

  7. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Die Stringkopf-Bytes 14 und 15 zeigt der DB-Editor garnicht an, ich meine auch nicht bei Ansicht > Datensicht.
    Lade Deinen DB in PLCSIM oder eine echte CPU und schaue Dir mit der Variablentabelle die Bytes 14, 15, 16, 17 an.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    joe_bvb (10.11.2014)

  9. #6
    Registriert seit
    02.06.2014
    Beiträge
    46
    Danke
    21
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von LargoD Beitrag anzeigen
    Wie hast Du das denn fest gestellt? Zeig das mal als Screenshot.
    Bei mir wird der erste Buchstabe in Byte 16 geschrieben, davor werden die beiden Längenbytes eingetragen..
    Gruß
    Erch
    Hi,
    ich habe die Bytes in einer variablentabelle beobachtet und habe festgestellt dass, "E" in Byte 14 und "N" in Byte 15 reingeschrieben werden.
    Gruß

  10. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von joe_bvb Beitrag anzeigen
    ich schreibe ein Wort in einen Datenbaustein ab DB10.DBX14.0 fängt ein String von 10 Bytes (Siehe Foto). Das Problem dass der erste Buchstabe wird ins erste Byte (Byte 14) reingeschrieben und der zweite ins zweite (Byte 15)
    Wie schreibst Du das "Wort" in den DB? Zu welcher Adresse? Kannst Du uns Deinen Programmcode zeigen?

    Zitat Zitat von joe_bvb Beitrag anzeigen
    Mit SFC20 würde es gehen, ja. Aber warum wenn ich einen Anfangswert eingebe wird ab Byte 14 belegt und nicht wie du gesagt hast ab Byte 16?Ich will nur Anfangswert eingeben und nicht mit SFC20, geht das?
    Mit "Anfangswert" meinst Du, daß Du schon beim Erstellen des DB den STRING mit 'EN' belegen willst? Und das tut es anscheinend nicht?
    Normalerweise geht das.
    Hast Du den DB auch initialisiert bevor Du ihn in die CPU geladen hast?
    (Ansicht > Datensicht + Bearbeiten > Datenbaustein initialisieren)

    Zitat Zitat von joe_bvb Beitrag anzeigen
    ich habe die Bytes in einer variablentabelle beobachtet und habe festgestellt dass, "E" in Byte 14 und "N" in Byte 15 reingeschrieben werden.
    Direkt nach dem Laden des DB in die CPU oder läuft da schon das Programm welches eventuell falsch in den DB schreibt?
    Bist Du sicher daß Du den richtigen DB beobachtest?

    Kannst Du die CPU in STOP setzen? Oder hast Du PLCSIM?
    Lade den DB in die gestoppte CPU und beobachte die Bytes bevor Du die CPU in RUN setzt.
    In STOP ist alles richtig und in RUN ist es um 2 Byte verschoben? --> prüfe die Programmstelle, welche in den STRING schreiben soll.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    joe_bvb (10.11.2014)

  12. #8
    Registriert seit
    23.10.2009
    Beiträge
    391
    Danke
    58
    Erhielt 113 Danke für 87 Beiträge

    Standard

    So sieht das bei mir aus.
    Unbenannt.jpg
    Poste das doch mal in Deinem Fall.
    CPU bitte dabei in STOP, und dann erst den Baustein ins AG laden.
    Gruß
    Erich
    Geändert von LargoD (09.11.2014 um 09:52 Uhr)

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

    joe_bvb (10.11.2014)

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

    Standard

    Ich schließe mich PN/DP an, zeige bitte mal einen Screenshot, den den Teilen des Codes, die den String kopieren.
    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

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

    joe_bvb (10.11.2014)

  16. #10
    Registriert seit
    02.06.2014
    Beiträge
    46
    Danke
    21
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe den Datenbaustein neu geladen. Jetzt sieht das besser aus. Ich danke euch.

    Unbenannt.png
    Geändert von joe_bvb (10.11.2014 um 07:50 Uhr)

Ähnliche Themen

  1. TIA Offset in einem Datenbaustein sichtbar schalten
    Von Sudoku im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 18.08.2014, 12:35
  2. Step 7 Prozessvisualisierung: Daten in einem Datenbaustein sammeln
    Von Reibekuchen im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 09.05.2014, 07:34
  3. Antworten: 3
    Letzter Beitrag: 16.02.2011, 11:32
  4. String in Datenbaustein schreiben (S7)
    Von erwin36 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 30.11.2009, 16:53
  5. Antworten: 3
    Letzter Beitrag: 20.09.2006, 10:10

Stichworte

Lesezeichen

Berechtigungen

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