# Char(String) in WIN CC flexible anzeigen?



## eduard (31 Januar 2010)

Hallo zusammen,

ich habe ein Siemens Vision Sensor System VS 130-2 mit dem ich Data Matrix Codes einlesen kann, die eingelesenen Daten landen als CHAR im DB 50 (Hab unten noch mal ein Bild eingefügt wobei ihr euch das auch sicher so vorstellen könnt). 
Die Buchstaben im Format Char möchte ich in WinCC flexible am besten in einem String darstellen. Habe schon versucht im WinCC, zum Beispiel einfach die Variable DB50.DBB0.0 anzeigen zu lassen und hatte gehofft das der Buchstabe erscheint. Das klappt aber leider nicht.
Könnt ihr mir da einen einen Tipp geben wie das gehen könnte?

Schon mal vielen Dank, ihr könnt mir sicher weiterhelfen.


----------



## jabba (31 Januar 2010)

Im Ausgabefeld in WinCCFlex darauf achten das Darstellung auf Zeichenkette steht.
Die Variable unter Variablen ändern in Stringchar die Länge z.B. auf 20 setzen, sowie dann auch beim Ausgabefeld.


----------



## R.Blum (1 Februar 2010)

jabba schrieb:


> Im Ausgabefeld in WinCCFlex darauf achten das Darstellung auf Zeichenkette steht.
> Die Variable unter Variablen ändern in Stringchar die Länge z.B. auf 20 setzen, sowie dann auch beim Ausgabefeld.


 
Eine kleine Ergänzung ist zum Gesamtverständnis noch notwendig.

Der Variablentyp String, hat 2 führende Bytes mit Längenangaben.
im Ersten Byte steht die max Stringlänge im 2. Byte die tatsächliche Stringlänge. Daraus ergibt sich dass der String eine Max Länge von 255 Zeichen haben kann, weil die größmögliche Zahl die sich in einem Byte darstellen lässt, 255 unsignded ist.

Eine Variable vom Typ String mit max 20 Zeichen hat demzufolge eine Speicherbelastung von 22Byte.

Der String wird immer Linksbündig, also beginnen mit dem zuerst auszugebenden Zeichen gefüllt. Das Längenbyte muss immer angepasst werden, sonst sieht man entweder zuwenig, oder zuviel Text, manchmal auch Müll, denn es müssen Zeichen sein die sich auch darstellen lassen.

Ein CHAR to String Konverter ist also nicht so ganz trivial.

Gruß Rolf


----------



## eduard (1 Februar 2010)

Hallo,
erstmal Danke für die Antworten. Habe da aber noch einige Verständnisfragen.
Muss ich die beiden Bytes für die Länge des Strings in meinem DB50 an erster Stelle einfügen? Denn bis jetzt werden schon ab Byte 0.0 die Buchstaben eingetragen(siehe Bild in meinem ersten Post). Wenn nein, wo muss ich die Daten für die Länge des Strings eintragen?
Ein weiteres Problem ist, dass mein DB 502 Bytes hat, mit einem String kann man aber nur 255 darstellen, habe ich da so richtig verstanden?
Muss ich die Länge des Strings immer vorher angeben? Denn eigentlich möchte ich Strings mit verschiedener Länge einlesen. Oder kann ich z.b. 255 angeben wenn der String nur 150 Bytes lang ist?

Stehe im Moment noch etwas auf dem Schlauch.

Gruß


----------



## MatMer (1 Februar 2010)

Nein, da du ja ein Char Array ohne Längenangabe hast nimmst du für die Anzeige einfach den Datentyp "StringChar". Der hat am Anfang nämlich nicht die Längeninfos...

Du willst aber nicht die 502 Bytes als eine Anzeige nutzen, oder?
Im Prinzip jetzt eine Variabel vom Typ Stringchar mit der gewünschen Anzahl an Buchstaben (im Eigenschaftsfeld der Variable) anlegen und dann als Zeichenkette anzeigen


----------



## Larry Laffer (1 Februar 2010)

Hallo,
also erstmal weiß die VS130 doch, wie lang der übertragene Datenbereich ist. Ich glaube, wenn du den komischen Siemens-Standard-FB als Hantierungs-Baustein nimmst, dann kannst du doch auch festlegen, wohin das ARRAY of CHAR geschrieben werden soll - dann nimmst du halt in dem Zielbereich eine um 2 Byte versetzte Adresse und trägst dann die Header-Info's nach.
Ist dein String länger als 255 Zeichen, so mußt du ihn irgendwie teilen. Dafür könntest du dir aber auch eine entsprechende Routine bauen (SCL wäre dafür nicht schlecht).
Aber "by the way" ... zeigt Flex überhaupt so lange Zeichenketten an ? Gab es da nicht eine Längenbegrenzung bei der Anzeige ? (Ich bin mir da gerade nicht sicher und kann es auch nicht überprüfen).

Gruß
LL


----------



## eduard (1 Februar 2010)

Hallo,

stimmt schon, ich brauche nicht alle 502 Zeichen. Kann aber ehrlich gesagt noch garnicht sagen wieviele ich im endeffekt brauchen werde.

@ MatMer: Falls ich es richtig ausprobiert habe geht es nicht wenn ich bei der Variable String Char angebe. Hab ein Bild angehängt in dem ihr sehen könnt wie ich die Variable eingestellt habe.

So geht es bis jetzt nicht (


----------



## R.Blum (2 Februar 2010)

eduard schrieb:


> Hallo,
> 
> stimmt schon, ich brauche nicht alle 502 Zeichen. Kann aber ehrlich gesagt noch garnicht sagen wieviele ich im endeffekt brauchen werde.
> 
> ...


 
Mit String-Arrays habe ich noch nicht gearbeitet, daher fehlt mir die Erfahrung wie sich so etwas verhält, vor allem wenn nicht darstellbare Zeichen wie 0x00 oder 0x1B (ESC) drin stehen. 
Reduziere dein Array so dass es in eine Zeile zum anzeigen passt und schreibe einige darstellbare Zeichen von Hand rein, dann siehst Du wie und ob es passt.

Den DB 50 würde ich als Empfangspuffer für den VS130 lassen und die anzuzeigenden Zeichen in separate Strings bzw. Char-Arrays verteilen, dann gehts auch über mehrere Zeilen.
Einen String am besten mal imn einem DB deklarien und mit Variable Beobachten die ersten Bytes anschauen, dann versteht man den String besser. 

Gruß Rolf


----------



## eduard (2 Februar 2010)

Hallo R.Blum,

habe ein eigenen DB gemacht und dort selbst Buchstaben eingetragen, aber nichtmal das Anzeigen eines Bytes aus dem Char Array in WinCC klappt, zeigt im Ausgabefeld nur Rauten an. Wäre schonmal froh wenn das gehen würde. Um den String könnte man sich dann noch kümmern.

Gruß


----------



## MatMer (2 Februar 2010)

als was gibst du die Variable denn jetzt aus? als Zeichenkette? Bin heute leider nicht mehr im Büro, kann aber Morgen nachgucken wie ich alles eingestellt habe


----------



## Larry Laffer (2 Februar 2010)

Larry Laffer schrieb:


> Aber "by the way" ... zeigt Flex überhaupt so lange Zeichenketten an ? Gab es da nicht eine Längenbegrenzung bei der Anzeige ? (Ich bin mir da gerade nicht sicher und kann es auch nicht überprüfen).


 
Vielleicht checkst du das noch mal gegen.
Ich habe da so etwas mit 40 Zeichen max. anzeigen in Erinnerung ...

Gruß
LL


----------



## R.Blum (2 Februar 2010)

eduard schrieb:


> Hallo R.Blum,
> 
> habe ein eigenen DB gemacht und dort selbst Buchstaben eingetragen, aber nichtmal das Anzeigen eines Bytes aus dem Char Array in WinCC klappt, zeigt im Ausgabefeld nur Rauten an. Wäre schonmal froh wenn das gehen würde. Um den String könnte man sich dann noch kümmern.
> 
> Gruß


 
Rauten (#) deuten darauf hin dass das Ausgabefeld zu klein ist, also das was dargestellt werden soll, nicht in das definierte Objektfenster reinpasst.

Wie bereits geschrieben, verkleinere Dein Array, bzw den Bereich der von WinCC Flexible ausgegeben werden soll. Wenn du die Variablen symbolisch übernimmst, muss das Array im DB zuvor in der richtigen Göße definiert sein. Fang ganz klein an, mit 2 Zeichen oder so, das Objektfenster groß genug und dann sehen was passiert. Wenn Du die Runtime auf deinem PG installiert hast, dann kannst Du ja mal die RT zum testen nutzen anstatt immer aufs Panel zu laden.

Gruß Rolf


----------



## MatMer (2 Februar 2010)

bei ganz langen texten habe ich das auch aufgeteilt. also die 1. Reihe soviele Zeichen wie geht und dann eine zweite Variable mit dem Offset begonnen und dann konnte ich hal 2 reihig anzeigen, ist aber nicht schön, da die maximale Anzahl ja für die Breite von "w"s ausgelegt ist, wenn ich mich nicht irre... aber der richtige Texte schmaler ist ...


----------



## jabba (2 Februar 2010)

Er braucht das Array nicht zu verkleinern, sonder nur die Sachen so einstellen wie bereits von mir beschrieben. Er muss auf nicht einen String draus machen, soweit ist er ja noch gar nicht gekommen.

Das anzeigen des Array's geht ohne Problemen, halt nicht in der länge, aber er will ja erst einmal sein "Hallo" sehen.

Im Anhang mal ein Muster , dort kann man simulieren was passiert wenn ein nicht darstellbares Zeichen eingetragen ist oder z.B. eine 0Hex.


----------



## eduard (2 Februar 2010)

Hey,

es hat geklappt!
Vielen Dank an euch, habt mir echt weitergeholfen...manchmal ist die Lösung einfacher als man so denkt und man bekommt es trotzdem nicht hin...
Soweit ich das jetzt getestet hab kann man 255 Zeichen in einer Kette anzeigen.

Gruß und nochmal Danke
eduard


----------

