kyrillische Buchstaben in DB speichern

fuss

Level-1
Beiträge
350
Reaktionspunkte
48
Zuviel Werbung?
-> Hier kostenlos registrieren
Folgendes Problem ist mir heute auf die Füsse gefallen,

Ich habe mehrere Behälter deren Inhalt durch Eingabefelder (STRING[10]) festgelegt werden. Um eine Vermischung zwischen den einzelnen Behältern zu verhindern vergleiche ich die verschiedenen Strings in der SPS. Das hat bisher auch immer wunderbar funktioniert. Nun soll das gleiche aber in einem Projekt mit russischer Sprache realisiert. Problem dabei ist aber nun das die kyrillischen Buchstaben nicht im ASCII-Zeichensatz (String) enthalten sind. Nach einer Eingabe in dem E/A-Feld werden nur noch ????? ausgegeben, sprich im DB-String stehen auch nur ????? und somit ist ein vernünftiger Vergleich der Strings nicht mehr möglich.

Programm erstellt mit:
Step7 v5.5
WinCC flexible 2008 SP3

Hat irgendjemand einen Lösungsansatz für dieses Problem?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Je nachdem wieviel Flexibilität Du brauchst, könntest Du das auch über eine Textliste und ein symbolisches EA-Feld machen. Der Benutzer wählt aus der Textliste welchen Inhalt der Behälter hat, und Du legst Dir den Integerwert des Eintrags aus der Textliste ab.
 
Hallo Tigerente,

Erst einmal Danke für deine Antwort. Das mit den Textlisten setze ich sonst auch so ein. Aber gerade in diesem Projekt soll es völlig flexibel sein, weil vorab nicht bekannt ist mit welchen bzw. wievielen Sorten der Kunde arbeitet. :x
 
Dann musst du wohl was anderes als die Siemens Panels einsetzen. Soweit Ich das weiss geht da nur Ascii Zeichensatz als String an die SPS.
Im der SPS ist in Step 7 auch nur Ascii in Strings möglich, aber die PLC muss das ja auch nirgends anzeigen, dann kann man ein Zeichen aus einer Visu auch in 2 Byte auf der PLC speichern. Aber mit WinCC Flexible => Meiner Meinung nach, keine Chance.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
aber die PLC muss das ja auch nirgends anzeigen, dann kann man ein Zeichen aus einer Visu auch in 2 Byte auf der PLC speichern.
Womit aber auch das compare wegfällt. Das wird eine hässliche Baustelle, wenn man jedes WORD einzeln abfragen muss.

Der Benutzer wählt aus der Textliste welchen Inhalt der Behälter hat, und Du legst Dir den Integerwert des Eintrags aus der Textliste ab.

Sehe ich auch als einzig realistische Lösung.

Die Frage ist auch, ob man wirklich Unicode auf einer popligen Steuerung haben muss. ASCII ist (und bleibt) Standard.
 
Auch wenn Du beim Beobachten nur ???? siehst, sollte es trotzdem möglich sein, die Strings auf Gleichheit zu überprüfen, schlimmstenfall per BYTE-Vergleich. Schlimmer ist wohl, daß Dein Panel oder Deine PC-RT ???? anzeigt. Fehlt da vielleicht einfach nur eine Sprache in den Geräteeinstellungen? Wie ist es überhaupt möglich, in dem E/A-Feld russische Zeichen einzugeben? Hilft Dir vielleicht dies weiter?

Harald
 
Moin Harald,

Das Projekt soll auf einer PC-RT laufen. Als Projektsprachen sind sowohl deutsch als auch russisch eingestellt (umschaltbar über eine Schaltfläche in der RT). Durch umstellen des Tastaturlayouts des Runtime-PC's ist es möglich kyrillische Buchstaben einzugeben. Ist an das E/A-Feld eine interne Variable geknüpft so ist der russische Text nach der Eingabe weiterhin lesbar. Nur wenn ich den Wert des E/A-Feldes auf einen STRING in einem DB schreibe werden mir die ??? zurückgegeben, weil kyrillisch nicht im ASCII-Zeichensatz enthalten ist. Könnte man da vielleicht irgendwas mit Skripten machen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
mhmm, wenn in den scripten auch unicode geht: den string in einzelne zeichen zerlegen, fuer jedes zeichen einen ersatzwert in einen anderen string speichern und dieser an die sps! rückwärts einfach umgekehrt!
 
Ich würde es ganz einfach machen!

Der Benutzer legt eine Rezeptur an und vergibt ihr einen Namen (Auch gern in Kyrillisch)
Der Rezeptur muss eigtl. nix zugewiesen sein, wenn das doch nötig wäre halt irgend ein Bit nehmen.

Über die Funktion LESE_REZEPTURNAME (o.ä.) die ID der angewählten Rezeptur auswählen/speichern/vergleichen...

Das ist quasi eine flexible Textliste!

Grüße

Marcel
 
Tach Matze,

na das hört sich ja mal interessant an! Werde ich heute Nachmittag mal ausprobieren.
Feedback folgt!!!
 
Klingt doch super! Jetzt hast du gemacht, was ich schon immer mal testen wollte... (jaja die Zeit)

Ein Punkt mehr auf der ToDo abgehakt! Danke auch von mir!

Grüße

Marcel

Edit: Doof nur: Wenn man auf Deutsch schaltet ist DIESER Text immernoch russisch...
 
Zuletzt bearbeitet:
Das ist in meinem Fall egal da die Visu eigentlich nur auf russisch läuft. Deutsch ist nur für die IBN oder Wartungsarbeiten. Was in den Zellen steht ist mir egal da ich ja nur noch die werte der datensatzvariablen vergleiche. Ich habe jetzt nur noch ein kleines Problem mit der der Größe der Datensatzanzeige, ich bekomme sie in der Breite nicht kleiner als 186. Werde ich morgen früh aber nochmal genauer unter die Lupe nehmen!
 
So habe jetzt für mich eine akzeptable Lösung gefunden.

Ich habe jetzt ein weiteres Bild "Zellenbelegungsplan" in die Visu eingefügt. Dort kann ich über eine Rezepturanzeige neue Sorten anlegen, löschen und bearbeiten. Desweiteren ist auf diesem Bild für jede Zelle eine Rezepturanzeige zum Auswählen des Inhalts. Auf einem anderen Bild sind die Zellen mit Ausgabefeldern für den Inhalt dargestellt. In dem Bild mit den Zellen habe ich unter Ereignisse-->Aufgebaut die Funktion "LeseDatensatzname" projektiert und dort folgende Eingaben gemacht:
Rezepturnr.: Nummer der Rezeptur "Sorte" (in meinem Fall = 2)
Datensatznr.: die gleiche Variable (INT) die ich auch in der Rezepturanzeige der jeweiligen Zelle unter "Datensatz: Variable Nummer/Name" verwendet habe
Rezeptnahme: irgndeine interne Variable (bloß damit flex nicht meckert)
Datensatzname: eine interne Variable im Format STRING

Die projektierte Variable unter "Datensatzename" knüpfe" ich dann ebenfalls an das Ausgabefeld für den Inhalt der Zelle.

Hoffe das war jetzt nicht zu wirr beschrieben. Bei Bedarf kann ich hier auch nochmal ein Beispiel hochladen!
 
Zurück
Oben