INT oder DINT in CHAR/BYTE Umwandeln

MAVI

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

habe folgendes problen

Ich habe eine 10stellige zahl und möchte sie gerne in Char aufteilen

z.B
hex 30 == Nr 0

ich will sie nicht 10 mal eingeben sondern ein 10stellige im Struct eingeben !
 
Dafür gibt es in der Step7-Bibliothek einen FC - die Nummer kann ich gerade nicht nachschauen ... er heißt aber "DINT_To_String". Such doch mal danach in der Step7-Hilfe ...

Gruß
LL
 
kenn ich das prob.....
die automobilindustrie will 10stellige seriennummern haben.
dint_to_string hat ein kleines porb. dint hat keine vollwertigen 10stellen. die erste stelle ist eine 2 (2.XXX.XXX.XXX)
ich habe es mich einfach gemacht.
ich nehme 2 mal dint.
benutze da nur 5stellen.(die verarbeitung in den ketten ist nicht wirklich schwer und problemlos und in WinCCflex begrenze ich die eingabe auf 5 stellen)

um sie zum char zu wandel, musst du eine kleinen zwischenschritt machen.

L #dint
dtb (dint zu BCD)
srd X /srw X (schiebe rechts dword/word)
sld X /srw X (schiebe rechts dword/word)
L b#16#30
+i
T #char


mit dem schieben kannst du dir jeweils die richtige stelle rausfiltern und in deinen char oder string wegpacken.

ich habe mir das ganze in einen fc gepackt und rufe ihn nur noch auf bzw kopier ihn in alle projekte;)

ich hoffe ich konte dir helfen.......oder es es deine gewünschte lösung
 
@fantas post.

hallo,
habe ein 11stelliges(vllt auch 10, weiß nicht ob die 1 null nur so angezeigt wird) Array of Char mit Inhalt. "00000001234"
leider gelingt es mir nicht, egal wie ich rechts oder links verschiebe, die zeichen 1234 aufzuspüren und sie dann in 4 chars zu schieben.

help ! :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@fantas post.

hallo,
habe ein 11stelliges(vllt auch 10, weiß nicht ob die 1 null nur so angezeigt wird) Array of Char mit Inhalt. "00000001234"
leider gelingt es mir nicht, egal wie ich rechts oder links verschiebe, die zeichen 1234 aufzuspüren und sie dann in 4 chars zu schieben.

help ! :D

Was verschiebst du, deinen Laptop auf dem Tisch??? Wäre nett, wenn du das noch einmal genauer erläuterst, es gibt da durchaus mehrere Herangehensweisen. Willst du die Nullen eliminieren, können auch mal 3 Char gewünscht sein oder worum genau geht es?
 
Hallo Limette!

Schau Dir doch mal die Standard-Bib an.
Unter IEC-Function-Blocks gibt es diverse Bausteine, die Dir helfen könnten.
Z.B.: FC 11 "FIND"

Grüße
Gebs
 
die zeichen 1234 sehen HEX so aus: 31 32 33 34
da das da offensichtlich schon ein string ist bzw. ein array of char, was ja nichts anderes als ein string ist, mal danach suchen.
die null ist übrigens 30...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Limette!

Schau Dir doch mal die Standard-Bib an.
Unter IEC-Function-Blocks gibt es diverse Bausteine, die Dir helfen könnten.
Z.B.: FC 11 "FIND"

Grüße
Gebs

Aber Achtung, FC 11 und Freunde sind aber nur auf S7-Strings anzuwenden, also muß er die Daten erst in einen S7-String umkopieren, sonst funzt das nicht.
 
Was verschiebst du, deinen Laptop auf dem Tisch??? Wäre nett, wenn du das noch einmal genauer erläuterst, es gibt da durchaus mehrere Herangehensweisen. Willst du die Nullen eliminieren, können auch mal 3 Char gewünscht sein oder worum genau geht es?

gefällt :D !

ja hier halt:
Code:
srd X /srw X (schiebe rechts dword/word)
sld X /srw X (schiebe rechts dword/word)

entweder ein W oder DW nack links oder rechts, ich weiß es ja nicht. drum frage ich. will halt mal eine zahl 1 oder 2 oder 3 oder 4 erwischen.
 
die zeichen 1234 sehen HEX so aus: 31 32 33 34
da das da offensichtlich schon ein string ist bzw. ein array of char, was ja nichts anderes als ein string ist, mal danach suchen.
die null ist übrigens 30...

jo. hab den hexwert dann auf ein SUB_I gelegt und 48(dez) abgezogen, dann müsste es ja wieder passen mit 1 2 3 4, es kommen aber leider nur wirre werte raus...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber Achtung, FC 11 und Freunde sind aber nur auf S7-Strings anzuwenden, also muß er die Daten erst in einen S7-String umkopieren, sonst funzt das nicht.

das verfahren wirkt irgendwie noch komplizierter. klappt es mit dem "FIND" auch, wenn sich das array jeden zyklus ändert. also statt 1 2 3 4 --> 3 1 2 2 ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kurz gesagt, ein Zeichen ASCII ( CHAR ) ist ein Byte.
Wenn ich richtig liege geht der SUB_I auf Worte, und ein Wort sind zwei(!) Byte.
Deswegen geht eine Subtraktion von DEZ 48 = 30HEX schief.

Es geht dann wenn du von einem BYTE diese 48DEZ abziehst. für EINE Stelle. NICHT für vier.

Bei vier must Du die Bytes einzeln berechnen, ihnen eine Wertigkeit zuteilen, in einem Zwischenpuffer zusammennageln und dann ausgeben.
 
Noch `n Hinweis:
Das geht erst mal nur wenn ausschliesslich ASCII codierte ZAHLEN in der Zeichenkette stehen. wenn dort auch noch andere Zeichen vorkommen brauchst Du noch eine Fallprüfung auf [ Zahl im Byte ]
 
Kurz gesagt, ein Zeichen ASCII ( CHAR ) ist ein Byte.
Wenn ich richtig liege geht der SUB_I auf Worte, und ein Wort sind zwei(!) Byte.
Deswegen geht eine Subtraktion von DEZ 48 = 30HEX schief.

Es geht dann wenn du von einem BYTE diese 48DEZ abziehst. für EINE Stelle. NICHT für vier.

Bei vier must Du die Bytes einzeln berechnen, ihnen eine Wertigkeit zuteilen, in einem Zwischenpuffer zusammennageln und dann ausgeben.

jo. schon immer nur eine zahl auf einmal. würde halt 4 netzwerke mit fantas code bauen und hätte dann auf 1 oder 2 oder 3 oder 4 hingeschoben. klappt aber so leider nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
stehen die 4 Zahlen immer ganz Rechts in der Zeichenkette ?
Wenn nein, sind es immer die führenden Nullen, die weg müssen ?

Ganz grundsätzlich würde ich aus dem Array_of_Char einen String machen und mit den String-Operationen die Sache bearbeiten - das bringt es m.E. am Weitesten.

Gruß
Larry
 
Hallo,
stehen die 4 Zahlen immer ganz Rechts in der Zeichenkette ?
Wenn nein, sind es immer die führenden Nullen, die weg müssen ?

Ganz grundsätzlich würde ich aus dem Array_of_Char einen String machen und mit den String-Operationen die Sache bearbeiten - das bringt es m.E. am Weitesten.

Gruß
Larry

jup, die 4 zahlen stehen immer ganz rechts.
 
Zurück
Oben