CHAR zusammenfassen zu einer String

stepwin

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
entscheident sind die bytes 0 + 1 um aus chars einen string zu bauen.
beschreibe die 2 bytes vor deinen char entsprechend.
siehe grafik
 

Anhänge

  • Zwischenablage02.gif
    Zwischenablage02.gif
    5,8 KB · Aufrufe: 380
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
 
Hier ein von mir erstellter abschnitt
Code:
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Code:
 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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
 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
Er kann ja neue strings erzeugen und die Werte vom DB dorthin kopieren
 
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
 
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
 
unter ret_val versuche ich die gnaze zeit einen String zu mit einer bestimmten länge zu erstellen, klappt aber irgendwie nicht...
 
Zuletzt bearbeitet:
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.:rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
unter ret_val versuche ich die gnaze zeit einen String zu mit einer bestimmten länge zu erstellen, klappt aber irgendwie nicht...

:confused: RET_VAL ...?
Der Rückgabewert einer Funktion kann kein in der Größe festgelegter String sein ...
Siehe hierzu viielleicht auch den Beitrag von OHGN ...
 
Code:
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.;)
 
Zurück
Oben