TIA String fehlt entweder ganz oder nur der erste Buchstaben

Deep Blue

Level-2
Beiträge
443
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe ein KP 400 Comfort, auf dem ich aus einem DB einen String mit der Länge von 20 anzeigen lassen möchte.

In der SPS kann ich mir den String DBx.DBW 2 - 12 anschauen. Es steht genau das drin, was ich erwarte. Im Wort 0 sind ja die Infos über Länge etc., oder?

Wenn ich nun den Bereich im KP ab Adresse DBx.DBX 2.0 mit einer Länge von 20, Typ String angebe, ist der die Anzeige leer.

Starte ich nach dem ersten Byte (DBx.DBX 3.0), sehe ich den Namen, allerdings ohne ersten Buchstabe.

Eigentlich bin ich immer davon ausgegangen, das 1 Word 2 Buchstaben enthält. Was läuft denn bei mir nicht richtig...oder bei der HMI :confused:


P.S. Wie kann ich denn bei der ACK-Taste die LED ansteuern? Im Globalbild wie auch in meinem Benutzerbild ist diese Option ausgegraut. Aber das KP hat da eine LED.
 
Moin,
ich weis nicht genau ob ich dich richtig verstanden habe. Aber wenn dein String bei DBx.DBX 0.0 mit seinem Header (maximale Länge und tatsächlich genutzte Länge) beginnt, dann solltest du auch diese Adresse im Panel angeben. Die Informationen im Header sind ja unter anderem genau für ein Panel da, um den String korrekt darstellen zu können.
Noch besser wäre natürlich wenn du ihn direkt symbolisch angibst, dann kann sich die Adresse verschieben und du musst nicht jedes mal die Adresse im Panel korrigieren ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin, moin...

Ich habe nun noch einmal mit und ohne dem vorangestellten Word versucht, den Namen im String darzustellen. Nehme ich das erste Word mit, ist der String im HMI leer. Fange ich nach dem ersten Byte an, dann habe ich in der HMI den Namen ohne ersten Buchstaben. Weiß nicht mehr, was ich noch probieren soll.

CPU: 314
 
Vermutlich ist der String-Header nicht korrekt ausgefüllt.
Schreibe mal in DBx.DBB0 und DBx.DBB1 jeweils den Wert 20 :cool:

Ist der Datentyp der HMI-Variable als String deklariert und die Anfangsadresse DBx.DBB0?

Harald
 
Starte ich nach dem ersten Byte (DBx.DBX 3.0), sehe ich den Namen, allerdings ohne ersten Buchstabe.
Eigentlich bin ich immer davon ausgegangen, das 1 Word 2 Buchstaben enthält.

DBX 0.0 : Vorspann Teil 1 (Länge in Anzahl Byte = für diesen String reservierter Platz bei maximaler Länge)
DBX 1.0 : Vorspann Teil 2 (Länge in Anzahl Byte = aktuell genutzte Anzahl Zeichen)
DBX 2.0 : 1. Zeichen (Wort 2, 1. Hälfte = 1. Byte des Strings)
DBX 3.0 : 2. Zeichen (Wort 2, 2. Hälfte = 2. Byte des Strings)
DBX 4.0 : 3. Zeichen (Wort 4, 1. Hälfte = 3. Byte des Strings)
DBX 5.0 : 4. Zeichen (Wort 4, 2. Hälfte = 4. Byte des Strings)
DBX 6.0 : 5. Zeichen (u.s.w.)
DBX 7.0 : 6. Zeichen
DBX 8.0 : 7. Zeichen
DBX 9.0 : 8. Zeichen
DBX 10.0 : 9. Zeichen
DBX 11.0 : 10. Zeichen
DBX 12.0 : 11. Zeichen
DBX 13.0 : 12. Zeichen
DBX 14.0 : 13. Zeichen
DBX 15.0 : 14. Zeichen
DBX 16.0 : 15. Zeichen
DBX 17.0 : 16. Zeichen
DBX 18.0 : 17. Zeichen (Wort 18, 1. Hälfte = 17. Byte des Strings)
DBX 19.0 : 18. Zeichen (Wort 18, 2. Hälfte = 18. Byte des Strings)
DBX 20.0 : 19. Zeichen (Wort 20, 1. Hälfte = 19. Byte des Strings)
DBX 21.0 : 20. Zeichen (Wort 20, 2. Hälfte = 20. Byte des Strings)
DBX 22.0 : gehört nicht mehr zum String

Ein Wort besteht aus 2 Byte. Z.B. Wort 2 aus Byte 2 und 3.
Das nächste Wort dahinter heisst aber nicht Wort 3, sondern Wort 4, weil die "WortAdresse" nur angibt, bei welchem Byte das Wort beginnt, es sich aber NICHT um eine fortlaufende DurchNumerierung der Worte handelt.
Wenn Du als Beginn DBX3.0 angibst, ist klar, dass das 1. Zeichen in Byte DBX2.0 nicht mehr dazu gehört und deshalb "fehlt".
Mir ist aber ehrlich gesagt nicht klar (bzw. ich finde es inkonsequent), wenn dann das 2. und 3. Zeichen erscheint, obwohl diese Bytes eigentlich die LängenAngaben enthalten.
Verrätst Du uns bitte, wie Du zu Deinem Ergebnis bzw. zu Deiner Schlussfolgerung gelangt bist?

Für ASCII-Strings ist Deine Aussage "1 Wort = 2 Zeichen" richtig.
Es gibt aber auch Codierungen, die pro Zeichen generell 2 Byte oder auch eine variable Anzahl Byte belegen.
Diese sind aber in der SPS-Programmierung meines Wissens (noch) nicht üblich.

Gruss, Heinileini

PS:
Guckst Du wirklich "DBx.DBW 2 - 12"? Dann dürftest Du die Zeichen 13 bis 20 nicht zu sehen bekommen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
P.S. Wie kann ich denn bei der ACK-Taste die LED ansteuern? Im Globalbild wie auch in meinem Benutzerbild ist diese Option ausgegraut. Aber das KP hat da eine LED.
Die ACK-LED leuchtet wenn eine quittierpflichtige Meldung aktiv ist. Die LED müsste blinken solange noch unquittierte Meldungen vorhanden sind.
Die LED "steuern" geht nur über das Aktivieren einer Meldung ;)

Harald
 
@Harald
Nanü, nanü, nana … was ist denn mit Deinem String passiert? Hast Du versucht, den Fall unseres TE zu testen?
Ich sehe da "Ort Bloomington (IN)"! Nix mehr Sassnitz???
Gruss, Heinileini
PS:
(Nur falls zutreffend) Ich wünsche Dir einen schönen Urlaub!
 
Hallo liebe Community,

vielen Dank für eure Tipps und Ratschläge.

Also hier mal einige Bilder der Deklarationen bzw. Parametrierungen

HMI
String HMI.jpg

SPS
String DB.jpg

VAT
String VAT.jpg

Der String steht in der VAT ab Word 30 klar zu lesen drin. Lese ich in der HMI ab dort, fehlen 2 Buchstaben. Lese ich ab Word 28, sehe ich gar nichts. Lese ich ab 29, dann eben ohne den 1. Buchstaben. Im 1. Byte steht ja nun eine 20 drin (20 Byte reserviert). Das 2. Byte ist immer leer. Es fehlt also die Angabe der tatsächlichen Länge des Strings. Könnte dass das Problem sein?

P.S. Dem ausgewechseltem OP7 war das wohl egal. Dies zeigte den Namen bis zum Verlust der Hintergrundbeleuchtung richtig an.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Im VAT-Bildchen sehe ich DEZ 5120. Das entspricht hex 1400. 14 wiederum ist 20 dezimal, also max. 20 Zeichen und das ist OK. Aber dahinter 00 - das sind 0 belegte Zeichen in dem String. Gib doch mal 5140 statt 5120 ein - geht das?
 
Deep Blue,

zeige uns doch mal die Deklaration des String[20] im DB120. Eigentlich brauchst du doch diese Variable aus dem DB einfach rüber ziehen zu den HMI-Variablen. Und die Header-Daten müssen m.E. auch nicht handisch eingetragen werden.
 
naja, es gibt ja immer wieder Leute die einfach hard irgendwas in einem String hinein schubsen nach dem Motto:
Code:
L 'a'
T DB120.DBB30
und sich dann wundern, warum der Header nicht passt :cool:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
naja, es gibt ja immer wieder Leute die einfach hard irgendwas in einem String hinein schubsen nach dem Motto:
Code:
L 'a'
T DB120.DBB30
und sich dann wundern, warum der Header nicht passt :cool:
Wenn ich das gemacht hätte wäre deine Aussage wohl richtig. Da ich aber den String aus der Proxy SPS einfach in die HMI Variablen gezogen habe und diese dann Probleme bereitet, obwohl das OP7 diese nicht hatte, wendete ich mich ans Forum. Also nix mit L 'Variable' und T 'ins Problem'.
Ich versuche einfach nur ein OP, von dem ich gar nichts habe auszutauschen. Und da ich zum 1. Mal ausgiebiger mit TIA visualisieren muss, verzeihe mir, wenn es nicht gleich alles klappt.
 
Das sollte auch nicht als Kritik an deiner Person gemeint sein, sondern die Beschreibung eines gern und oft gemachten Fehlers. Ich wollte dir damit nur einen Tipp geben, nach welchen Fehlerursachen du den Code der SPS durchstöbern könntest.
Aber zurück zum Thema. Hat Heinileinis Vorschlag denn geklappt?
 
Werde es Morgen auf Arbeit mal versuchen und berichten. Wenn es dann hilft muss ich wohl das Programm der SPS mal anpassen.

Trotzdem Danke für eure Hilfe!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da ich aber den String aus der Proxy SPS einfach in die HMI Variablen gezogen habe und diese dann Probleme bereitet, obwohl das OP7 diese nicht hatte [...]
Ich versuche einfach nur ein OP, von dem ich gar nichts habe auszutauschen.
Schau mal in das OP7-ProTool-Projekt, ab welcher Adresse der String deklariert ist ...

Das OP7 kennt den Datentyp S7-String gar nicht (also den String mit dem 2-Byte-Header). Der ProTool-Datentyp STRING ist in Wirklichkeit ein einfaches Char-Array (1 bis max 128 Zeichen) und wurde ab ProTool V6.0 SP2 zu StringChar umbenannt, um Verwechslungen mit S7-String (in den S7-CPUs) zu vermeiden.
Wenn man ein ProTool-Projekt zu einem neueren Panel konvertiert dann muß man den Unterschied ProTool-String zu S7-String beachten und händisch anpassen und evtl. auch das SPS-Programm anpassen.
Wenn in ProTool ein String/StringChar auf eine S7-String-Variable projektiert wird, dann muß als Anfangsadresse das dritte Byte des S7-Strings angegeben werden (S7-String-Anfangsadresse + 2). Der Inhalt der ersten beiden Bytes des S7-Strings (String-Header) ist völlig egal.
Wenn man mit WinCC flexible oder TIA ein Panel projektiert, was den S7-String kennt, dann muß die HMI-Variable auf die Anfangsadresse des S7-String projektiert werden und das SPS-Programm muß für korrekte Initialisierung/Belegung der Header-Bytes sorgen. Wenn im zweiten Header-Byte eine aktuelle Stringlänge von 0 drinsteht dann zeigt das Panel korrekterweise nichts an. (alternativ kann man im HMI den "String" als CHAR-Array ab Adresse + 2 projektieren)
Siehe mein Hinweis im Beitrag #4:
Vermutlich ist der String-Header nicht korrekt ausgefüllt.
Schreibe mal in DBx.DBB0 und DBx.DBB1 jeweils den Wert 20 :cool:



@Harald
[...]
Ich sehe da "Ort Bloomington (IN)"! Nix mehr Sassnitz???
[...]
(Nur falls zutreffend) Ich wünsche Dir einen schönen Urlaub!
PS: Danke, das ist vorübergehend, zum SPS-Forum M-V-Stammtisch bin ich wieder in Sassnitz.


Harald
 
Hallo zusammen,

will den Fall nun auflösen. Es ist so wie PN/DP schon meinte, das 2. Byte vom Header war die Lösung. Nachdem ich dort mal eine 10 reingeschrieben hatte, wurde auch der erste Buchstabe korrekt angezeigt.

Muß das nun noch in der SPS korrigieren.

Vielen Dank euch allen und einen schönen Sommer noch.
 
Zurück
Oben