String>Int

Trötschi

Level-1
Beiträge
61
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, ich drehe noch durch mit den Strings!
Ich habe das Problem das ich einen String von einer Kamera bekomme worin sich die verschiedenen Daten befinden.
Ich will nun den String auseinader nehmen und die verschiedenen Daten weiter leiten an einen Roboter über verschiedene Ausgangsworte (AW).
Da ich über ein AW gehen muss, muss ich den jeweiligen String stück mit dem Siemens baustein FC38 (String>INT) übersetzen jedoch funktioniert das nicht sobald ich mit einem Blockmove die Daten bereit stelle.
Was kann ich machen?
 
Frage 1: hast du SCL
Frage 2: Ist der empfangene String immer gleich lang
Frage 3: Ist die Position des Zahlenwertes immer gleich
Frage 4: Wie sind die Einheiten
Hinweis: Denke an die Max.-Länge und Istlänge des Stringes, sonst geht die Wandlung schief.

Frank


EDIT (alles beachtet?):

Die Funktion FC 38 wandelt eine Zeichenkette in eine Variable im INT­Format. Das erste
Zeichen in der Zeichenkette darf ein Vorzeichen oder eine Ziffer sein, die dann folgenden
Zeichen müssen aus Ziffern bestehen. Ist die Länge der Zeichenkette Null oder größer
als 6 oder befinden sich unerlaubte Zeichen in der Zeichenkette, findet keine Wandlung
statt und das BIE­Bit wird auf "0" gesetzt. Liegt das Ergebnis der Wandlung außerhalb
des INT-Zahlenbereichs, wird das Ergebnis auf den entsprechenden Wert begrenzt und
das Binärergebnis BIE auf "0" gesetzt.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
.
Was kann ich machen?

Ein guter Anfang wäre es , endlich mal konkrete Fragen mit konkreten Angaben zu stellen.
Wie bisher sind die Angaben extrem Sch..

Zeig mal den String , was kommt da an, was soll aus dem String in welcher Form wie an den Roboter.
 
Antwort1: Nein
Antwort2: Nein der String ist nicht immer gleich!
Antwort3: Die Position der Zahlenwerte ist je nach Job unterschiedlich!
Antwort4: Die Einheiten sind je nach Abfrage unterschiedlich, ich hab die drei Achsen X-Y und Rotation. Beim Calibrieren ist noch eine Nummer für den Punkt von 1-4 dabei die ich benötige.
Die Stringlänge für die Umwandlung ist max 6 (oder?)!
Wenn ich den Blockmove weg lasse und zum Test einen INT>String baustein vorschalte und diesen mit einer Zahl füttere kommt hinten auch diese Zahl wieder raus!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Stringlänge für die Umwandlung ist max 6 (oder?)!

STRING[6] = 8 BYTE LANG

Zu den 6 Zeichen gehört aber ggf. noch das MINUS-Zeichen oder (seltener vorhanden) das PLUS-Zeichen.


Ansonsten geht mir das Rätselraten auf den Zeiger

Stelle mal drei bis vier mögliche Varianten des KOMPLETTEN STRINGES hier rein und markiere ROT was gewandelt werden soll.


JUNGS: gewöhnt euch an die Fragen so zu stellen, das wir hier nicht noch fuffzigmal nachfragen müssen. Der Fragende hat Bringeschuld, sonst müssen wir hier noch PayPal einführen :)



Frank
 
Zuletzt bearbeitet:
String Beispiel:

Sring1
Calibrieren:
Calib1:C090.000

1= Calibrierpunkt
90= Rotation

String2
Pick Function im Normalablauf:
Pick;Xvxxx.xxx;Yvyyy.yyy;Cvccc.ccc

v=Vorzeichen
X=X-Achse
Y=Y-Achse
C=Rotation

Das sind die zwei Strings die ich auseinander nehmen muss und als AW weiter leiten muss an den Roboter!

Sorry es ist schwierig etwas zu erkären was mann selber nicht 100% versteht!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich den Blockmove weg lasse und zum Test einen INT>String baustein vorschalte und diesen mit einer Zahl füttere kommt hinten auch diese Zahl wieder raus!

Fein gemacht , damit ist bewiesen das schon mal die Siemens Bausteine funktionieren .

WIE SIEHT DEIN STRING AUS ?
 
String TO INT mit Komma d.h. Punkt??????


C090.000

muss zu


+90000

oder

-90000

werden und dann

FC37 ==> String TO DINT!!!!!

Erst dann gehts

Die Funktion FC 37 wandelt eine Zeichenkette in eine Variable im Format DINT. Das erste Zeichen in der Zeichenkette darf ein Vorzeichen oder eine Ziffer sein, die dann folgenden Zeichen müssen aus Ziffern bestehen. Ist die Länge der Zeichenkette Null oder größer als 11 oder befinden sich unerlaubte Zeichen in der Zeichenkette, findet keine Wandlung statt und das BIE­Bit wird auf "0" gesetzt. Liegt das Ergebnis der Wandlung außerhalb des DINT-Zahlenbereichs, wird das Ergebnis auf den entsprechenden Wert begrenzt und das Binärergebnis BIE auf "0" gesetzt.

Frank
 
Zuletzt bearbeitet:
Fein gemacht , damit ist bewiesen das schon mal die Siemens Bausteine funktionieren .

WIE SIEHT DEIN STRING AUS ?

Ich habe einen INT String vom Blockmove zum FC38 angelegt mit der Länge von 8 habe aber auch schon 6 ausprobiert!
Am Eingang der Blockmove habe ich das entsprechende Byte für den Calibrierpunkt aingesetzt!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie lang sit der String ?, wenn der so von der kamera kommt
Code:
Pick;Xvxxx.xxx;Yvyyy.yyy;Cvccc.ccc
Must du als erstes aus dem einen String ja drei Strings rauskopieren
vxxx.xxx
vyyy.yyy
vccc.ccc

Diese werden an den Baustein geschrieben.
 
Ja ich hol mir die zu verwendenen Bytes aus dem String raus (habe ich mir gedacht)! Schreibe diese mit Hilfe des Blockmoves in einen Temp String(Länge8) und wandele diesen dann mit dem FC38 um! Danach verschiebe ich das Ergebnis in das AW!
 
Ja ich hol mir die zu verwendenen Bytes aus dem String raus (habe ich mir gedacht)! Schreibe diese mit Hilfe des Blockmoves in einen Temp String(Länge8) und wandele diesen dann mit dem FC38 um! Danach verschiebe ich das Ergebnis in das AW!

z.B. 90000 ist NICHT mehr im INT Bereich!!!


Stelle doch mal den CODE rein, sonst wird es ein Ratespiel auf das ich kleine Lust habe.

Wenn nicht nicht schon AWL, dann auf AWL umschalten und in den
Code:
-Rahmen packen! 
 
Frank
 
String TO INT mit Komma d.h. Punkt??????


C090.000

muss zu


+90000

oder

-90000

werden und dann

FC37 ==> String TO DINT!!!!!

Erst dann gehts

Die Funktion FC 37 wandelt eine Zeichenkette in eine Variable im Format DINT. Das erste Zeichen in der Zeichenkette darf ein Vorzeichen oder eine Ziffer sein, die dann folgenden Zeichen müssen aus Ziffern bestehen. Ist die Länge der Zeichenkette Null oder größer als 11 oder befinden sich unerlaubte Zeichen in der Zeichenkette, findet keine Wandlung statt und das BIE­Bit wird auf "0" gesetzt. Liegt das Ergebnis der Wandlung außerhalb des DINT-Zahlenbereichs, wird das Ergebnis auf den entsprechenden Wert begrenzt und das Binärergebnis BIE auf "0" gesetzt.

Frank

Ich bin Momentan noch an der 1 für den Calibrierpunkt!
da funktioniert das schon nicht!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das wollte ich schon machen wusste nur nicht wie es geht!

U(
U(
U M 1000.0
SPBNB _004
CALL "BLKMOV"
SRCBLK :=P#DB81.DBX17.0 BYTE 8
RET_VAL:=#Wert
DSTBLK :=#ST7_Y_zu_Roboter_S
_004: U BIE
)
SPBNB _005
CALL "STRNG_I"
S :=#ST7_Y_zu_Roboter_S
RET_VAL:=#ST7_Y_zu_Roboter_I
_005: U BIE
)
SPBNB _006
L #ST7_Y_zu_Roboter_I
T "St7 Y"
_006: NOP 0
 
Was steht denn exakt im
"P#DB81.DBX17.0 BYTE 8"
bzw.
#ST7_Y_zu_Roboter_S
drin
 
Zuletzt bearbeitet:
Zurück
Oben