# CHAR zusammenfassen zu einer String



## stepwin (24 April 2008)

Hallo Zusammen,
bin hier völlig am ende, bräuchte dringend eure Hilfe..Ich arbeite hier mit einer Step7 v5.3 und winCC 6.0 Sp4.
Ich habe in einer DB  je ein Byte ein CHAR Zeichen die ich gerne zu einen String verkette möchte.
Es sind sieben CHAR Zeichen die aus Buchstaben und Zahlen bestehen, verkettet möchte ich es in WinCC anzeigen.
Bitte um eueren Rat.
mfg


----------



## Larry Laffer (24 April 2008)

Ich denke, dass ich dir helfen könnte, aber du müßtest schon einmal genau beschreiben, was du hast und was draus werden soll. Am Besten stellst du noch eine Ansicht deines DB's hier mit ein ...

Gruß
LL


----------



## volker (24 April 2008)

entscheident sind die bytes 0 + 1 um aus chars einen string zu bauen.
beschreibe die 2 bytes vor deinen char entsprechend.
siehe grafik


----------



## marlob (24 April 2008)

Falls du es nur anzeigen willst und sonst nichts damit tust, dann setze in WinCC doch 7 Ausgabefelder nebeneinander.
Das wäre auf jeden Fall die schnellste Lösung


----------



## stepwin (24 April 2008)

Hier ein von mir erstellter abschnitt

```
Mein DB
Adresse Name  Typ   Anfangswert Kommentar
10.0      Dicke1 CHAR ' '               Dicke 1.Zeichen 
11.0      Dicke2 CHAR ' '               Dicke 2.Zeichen 
12.0      Dicke3 CHAR ' '               Dicke 3.Zeichen 
13.0      Dicke4 CHAR ' '               Dicke 4.Zeichen 
14.0      Breite1 CHAR ' '              Breite 1.Zeichen 
15.0      Breite2 CHAR ' '              Breite 2.Zeichen 
16.0      Breite3 CHAR ' '              Breite 3.Zeichen
```
 
ich möchte nun die Zeichen als eine Zusammengesetzter Zeichen z.B.
1&0&m   => '10m' aus dicke 
1&2&3&m => '123m' aus breite

haben und so auch in WinCC anzeigen.

Ich dachte mir wenn ich alles mit verketten könnte und in einen String rein schreibe, wäre dies leichter. Nur weis ich nicht wie das gehen soll.


----------



## marlob (24 April 2008)

Ist Dicke immer 4 Zeichen und Breite immer 3 Zeichen bei dir.
Dann erzeuge doch 2 Strings von jeweils 3 und 4 Zeichen und beschreibe die ersten beiden Bytes mit der max. Länge und tatsächlichen Länge.
und in die anderen Bytes kommen dann deine Zeichen.
Gucke dir Volker sein Bild nochmal dazu an


----------



## marlob (24 April 2008)

Hier noch was aus der FAQ von Siemens
Textstrings bearbeiten und ein- bzw. ausgeben in STEP 7 und WinCC
falls du dann deinen String zusammengebastelt hast


----------



## volker (24 April 2008)

```
8.0      max Byte ' '               maxstringlänge (hier 4 eintragen)
 9.0      ist Byte ' '               iatstringlänge (hier 4 eintragen)
10.0      Dicke1 CHAR ' '               Dicke 1.Zeichen 
11.0      Dicke2 CHAR ' '               Dicke 2.Zeichen 
12.0      Dicke3 CHAR ' '               Dicke 3.Zeichen 
13.0      Dicke4 CHAR ' '               Dicke 4.Zeichen
```
das würde gehen. bei zweiten teil gehts nicht da dir der platz für die 2 byte fehlt


----------



## marlob (24 April 2008)

volker schrieb:


> ```
> 8.0      max Byte ' '               maxstringlänge (hier 4 eintragen)
> 9.0      ist Byte ' '               iatstringlänge (hier 4 eintragen)
> 10.0      Dicke1 CHAR ' '               Dicke 1.Zeichen
> ...


Er kann ja neue strings erzeugen und die Werte vom DB dorthin kopieren


----------



## stepwin (24 April 2008)

erstmal vielen dank für die vielen beispiele, aber ehrlich gesagt habe ich nicht viel von dem verstanden was ihr da meint....:-(
Könnt ihr mir das vieleicht zeigen anhand eines Beispiels mit awl oder scl 
oder


----------



## Larry Laffer (24 April 2008)

Da haben sich die beiden schon so viel Mühe gegeben ...

Der Vorschlag war :
Du legst statt deinen 4 Einzelbytes in deinem DB gleich einen String mit der passenden Länge an (STRING [4]). Hier musst du dann nur in das Byte 0 die Gesamtlänge des Strings eintragen (in deinem Fall "4") und in das Byte 1 die tatsächliche Länge (in deinem Fall ("3" oder "4"). Die Zeichen, die du jetzt schon hast kommen ja auch warscheinlich irgendwo her. Dieser Quelle sagst du dann, dass sie in die Bytes 2 ..6 des Strings schreiben soll. Das Ganze geht mit den bekannten Lade- und Transfer-Befehlen ...

Gruß
LL


----------



## volker (24 April 2008)

das ist ein beispiel. 
in wcc definierst du dann einfach einen string in der länge 4 zeichen beginnend ab dbb8


----------



## stepwin (24 April 2008)

unter ret_val versuche ich die gnaze zeit einen String zu mit einer bestimmten länge zu erstellen, klappt aber irgendwie nicht...


----------



## OHGN (24 April 2008)

stepwin schrieb:


> hallo ich bin ein anfänger, und dachte das ihr mir helfen könnt....


Da ist in den vorhergehenden Beiträgen sehr umfassend geholfen worden.
Den Aufbau einer String-Variable sollte man allerdings schon verstanden haben (der geht übrigens sehr schön aus dem Dateianhang von Volker hervor).
Weiterhin sollte man sich mit den Lade / Transferiere - Funktionen auskennen. 
Mehr ist für die Lösung Deines Problems eigentlich nicht erforderlich.
Wenn dieses Grundwissen noch fehlt, empfiehlt es sich, sich mit den Ausbildungsunterlagen von Siemens zu befassen bevor man an Anlagen herumprogrammiert.


----------



## stepwin (24 April 2008)

ich habe nicht behauptet das sie mir falsches erzählen oder sonst was,bin für jede hilfe dankbar...nur die hilfe stellung waren für mich nicht ausreichend...bin schon hier unter druck geraten mit meinem problem und muss mir jetzt auch das noch anhören...
wenn sie mir helfen wollen bitte, sonst danke


----------



## Larry Laffer (24 April 2008)

stepwin schrieb:


> unter ret_val versuche ich die gnaze zeit einen String zu mit einer bestimmten länge zu erstellen, klappt aber irgendwie nicht...


 
  RET_VAL ...? 
Der Rückgabewert einer Funktion kann kein in der Größe festgelegter String sein ...
Siehe hierzu viielleicht auch den Beitrag von OHGN ...


----------



## OHGN (24 April 2008)

```
L B#16#4
T DB1.DBB0   //max. Stringlänge
T DB1.DBB1  //aktuelle Stringlänge
L DB?.DBB10 //Dicke 1
T DB1.DBB2
L DB?.DBB11 //Dicke 2
T DB1.DBB3
L DB?.DBB12 //Dicke 3
T DB1.DBB4
L DB?.DBB13 //Dicke 4
T DB1.DBB5
```
 
In dem Beispiel oben habe ich Deine Dicke in einen String mit der Anfangsadresse DB1.DBB0 geschrieben.
Das sollte so funktionieren wenn Du dazu noch ein entsprechendes Ausgabefeld in WinCC anlegst.


----------

