String in Int. Was ist hier falsch ?

noeppkes

Level-1
Beiträge
150
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte einen String, der in einem DB Steht in eine INT wandeln.
Der DB20 ist folgendermaßen angelegt:

COMMENT ARRAY[0..1023]
CHAR

In den Positionen 8, 9, 10 und 11 steht jeweils ein ASCII zeichen.
z.B.
'4'
'7'
'1'
'1'

Diese 4 Zeichen sollen nun in ein INT gewandelt werden.
ICh habe hierzu ohne Erfolg folgenden Code probiert.
Code:
      CALL  "BLKMOV"
       SRCBLK :=P#DB20.DBX8.0 BYTE 4    // //"RCV_DB_A".comment[8] byte 4
       RET_VAL:=#RetVal
       DSTBLK :=P#DB21.DBX0.0 BYTE 4
      L     4                           //4 Zeichen Länge
      T     DB21.DBB    0               //max
      T     DB22.DBB    1               //aktuell
      CALL  "STRNG_I"
       S      :=DB21.IR_CODE_S          //"RCV_DB_A".HS_IR_CODE
       RET_VAL:="IR_Nummer"

Der DB21 ist angelegt wie folgt:
IR_CODE_S string[20]

IR_Nummer ist global angelegt als INT.

Ich bekomme aber imm eine 0 in IR_Nummer, obwohl beim betrachten des DB20 dort die Zeichen für ca. 2 Sekunden stehen.

Kann mir jemand helfen, bevor ich verzweifle.

Danke.

noeppkes ...
 
Hallo,

ich möchte einen String, der in einem DB Steht in eine INT wandeln.
Der DB20 ist folgendermaßen angelegt:

COMMENT ARRAY[0..1023]
CHAR

In den Positionen 8, 9, 10 und 11 steht jeweils ein ASCII zeichen.
z.B.
'4'
'7'
'1'
'1'

Diese 4 Zeichen sollen nun in ein INT gewandelt werden.
ICh habe hierzu ohne Erfolg folgenden Code probiert.
Code:
      CALL  "BLKMOV"
       SRCBLK :=P#DB20.DBX8.0 BYTE 4    // //"RCV_DB_A".comment[8] byte 4
       RET_VAL:=#RetVal
       DSTBLK :=P#DB21.DBX0.0 BYTE 4
      L     4                           //4 Zeichen Länge
      T     [COLOR=Red]DB21[/COLOR].DBB    0               //max
      T     [COLOR=Red]DB22[/COLOR].DBB    1               //aktuell
      CALL  "STRNG_I"
       S      :=DB21.IR_CODE_S          //"RCV_DB_A".HS_IR_CODE
       RET_VAL:="IR_Nummer"
Der DB21 ist angelegt wie folgt:
IR_CODE_S string[20]

IR_Nummer ist global angelegt als INT.

Ich bekomme aber imm eine 0 in IR_Nummer, obwohl beim betrachten des DB20 dort die Zeichen für ca. 2 Sekunden stehen.

Kann mir jemand helfen, bevor ich verzweifle.

Danke.

noeppkes ...

Schreibfehler?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
String in INT wandeln.

Hallo Zotos,

der DB20 wird direkt vom CP340 beschrieben.
Dort steht mein Eingangsprotokoll.
Un eben in den Bytes 8 ... 11 (4 Stück) steht ein ASCII-String den ich eben in eine INT wandeln will.

Ich hoffe ich konnte es vertändlich erklären.

noeppkes ...
 
String in INT

Hallo Zotos,

ich bin leider noch ein purer Anfänger.
Das mit dem DB22 habe ich übersehen.

Ansonsten würde es funktionieren ?
(Ich quäle mich schon seit mehreren Stunden damit rum)

noeppkes ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe keine Ahnung probiere es mal aus. Ansonsten hilft Dir der Ralle gerne weiter.

Wenn Du es Ausführlicher brauchst schreibe dazu das Du gerne einen PDF Ausdruck haben möchtest dann hilft Dir der Kai weiter.
 
Das sollte dann eigentlich gehen, wenn die Daten auch wirklich wandelbar sind und nur Ziffern als Char in den Bytes stehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Versuchs mal so:
Code:
      CALL  "BLKMOV"
       SRCBLK :=P#DB20.DBX8.0 BYTE 4    // //"RCV_DB_A".comment[8] byte 4
       RET_VAL:=#RetVal
       [B]DSTBLK :=P#DB21.DBX2.0 BYTE 4[/B]
[B]       L     20                          //4 Zeichen Länge
      T     [COLOR=Red]DB21[/COLOR].DBB    0               //max
      L     4     
      T     [COLOR=Red]DB21[/COLOR].DBB    1               //aktuell[/B]
      CALL  "STRNG_I"
       S      :=DB21.IR_CODE_S          //"RCV_DB_A".HS_IR_CODE
       RET_VAL:="IR_Nummer"
Mfg
Manuel
 
Versuchs mal so:
Code:
      CALL  "BLKMOV"
       SRCBLK :=P#DB20.DBX8.0 BYTE 4    // //"RCV_DB_A".comment[8] byte 4
       RET_VAL:=#RetVal
       [B]DSTBLK :=P#DB21.DBX2.0 BYTE 4[/B]
[B]      L     20                          //4 Zeichen Länge[/B]
[B]     T     [COLOR=red]DB21[/COLOR].DBB    0               //max[/B]
[B]     L     4     [/B]
[B]     T     [COLOR=red]DB21[/COLOR].DBB    1               //aktuell[/B]
      CALL  "STRNG_I"
       S      :=DB21.IR_CODE_S          //"RCV_DB_A".HS_IR_CODE
       RET_VAL:="IR_Nummer"
Mfg
Manuel


Hallo noch einmal,

in der Zwischenzeit funktioniert die Wandlung perfekt.
Allerdings kapiere ich nicht, wofür ich 2 * in den DB 21 schreiben muss.
Einmal, das ist klar, ist die aktuelle Länge des Strings.
Aber wofür ist bitte der max-Wert im DB21 ?

noeppkes ...
 
Hallo noeppkes,

schau dir mal die Beschreibung vom String an,
in den ersten zwei Byte stehen die Informationen
Byte 0: die maximale Länge die der String belegen darf
Byte 1: die benutzte Länge des aktuellen Inhaltes
 
Zurück
Oben