Zeichen aus String auslesen

Ötzwurst

Level-1
Beiträge
34
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

die Stringbehandelung wurde schon öfters beschrieben, aber zu meinem Problem hab ich nichts gefunden.
Also ich habe in meinem DB einen String mit unbekannter Länge drin stehen. Nun möchte ich die ersten 4 Stellen mit "String 2" vergleichen und die Stellen 5 und 6 mit "String 3".
in meinm DB1 steht zum Beispiel: PD12CD34EF
Kann man den String so zerteilen? Und womit ist das machbar?

Gruß
Ötzwurst
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt dazu diverse Funktionen in der IEC-Library im Step7-Manager. Sie dir die einmal an. Bei den paar Zeichen könnte man aber auch direkt mit Vergleichern arbeiten. Dazu entweder die Daten umkopieren oder mit absoluter Adressierung in den DB greifen.
 
Hab in der Libery schon geschaut... Da hab ich auch den EQ_String gefuden, aber wenn ich den DB auf den Eingang lege, meldet er, inkompatible Typen.
Mit welchem Vergleicher soll das denn gehen?? So ein richtiger String ist es ja nicht, hab ja keinen Header... als sind es Char und womit kann man die Vergleichen?
 
Hallo,
was Ralle hier meinte ist : solange du nur 2 oder 4 Zeichen mit anderen 2 oder 4 Zeichen vergleichen willst, so brauchst du gar keine String-Bearbeitung sondern einfach nur Wort- bzw. Doppelwort-Vergleicher. Das geht dann z.B. so :
Code:
L DB1.DBD2
L DB2.DBD2  // String 2
==D
= M1.0

bzw.

L DB1.DBW6
L DB3.DBW2  // String 3
==I
= M 1.1
Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das leuchtet mir schon ein... Ich programmiere sonst eher in Delphi oder so und da ist ein String eben kein Integer... bei Step7 scheinbar schon... Vielen Dank, werd ich ausprobieren!
 
Naja ... in Step 7 ist es ohne Schwierigkeiten möglich, Speicherbereiche anders zu bewerten (für Step7 ist alles im Grunde eine Aneinandereihung von Bytes). Das was Step7 "einfach so" macht könntest du genauso auch in Delphi (oder jeder anderen Programmiersprache) hinbekommen - dafür würde es dort halt einfach nur einer Function bedürfen.

Gruß
LL
 
richtig, die hab ich hier eben auch gesucht, aus gewohnheit... also muss man bei Step7 nicht so sehr auf den Datentyp achten, eher nur auf die Datenmenge (Bit, Byte, Word, etc)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... du solltest natürlich auf den Datentyp achten - mußt es aber nicht. Es gibt in Step7 ja auch eine Pascal-Delphi-ähnliche Programmier-Ebene (names SCL) - die macht sich diese nette Eigenart dann mit dem Befehl AT (= andere Sicht definieren) zu Nutze.

Gruß
LL
 
HI,

ich hab das jetzt mal ausprobiert... Aber verständlicher weise formt die SPS meinen String in dem Datenbaustein in eine Zahlenfolge um, wenn ich ihn mit ==I vergleichen will. Allerdings verstehe ich die Logik dieser Zahlenfolge nicht. Kann mir jemand da helfen?

Hat sich erledigt... In AWL geht der Befehl, in FUP nicht, hat jemand dafür ne erklärung, oder bin ich dafür zu blöd??

L DB1.DBW 0
L A
==I
= M1.0
 
Zuletzt bearbeitet:
:confused: willst du feststellen, ob in deinem Char-Array ein "A" steht ?
Dann müßte der Vergleich so aussehen :
Code:
L DB1.DBB 0
L 'A'
==I
= M1.0
in dem Wort ständen ja 2 Zeichen drin - die könntest du natürlich ähnlich vergleichen :
Code:
L DB1.DBW 0
L 'AB'
==I
= M1.0
... aber hioer würde der Vergleich auf ein einzelnes Zeichnen nicht funktionieren ...

Im Übrigen :
deine Annahme betreffs des Zahlenwertes ist natürlich zutreffend. Siemens sieht auch die Sequenz "AB" nicht als String, sondern als eine Zahl an.

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
korrekt, hab die Hochkommas vergessen und hab nicht auf die "Datenmenge" geachtet, war nur vom Prinzip so, wie ich es jetzt gemacht hab...

Warum funkitoniert das in AWL und nicht in FUP? Im AWL kann man viel mehr mit den Datentypen rumspielen als im FUP... irgendwie merkwürdig, oder nicht?
 
Zurück
Oben