Integer in Char Array wandeln ?

Power_Pete

Level-1
Beiträge
46
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Sers Leutz

(Simatic Manager Step 7 Version 5.4)

Ich würd gern wissen obs ne Möglichkeit gibt einen Integer wert (maximal 9999) in ein Char Array [0..4] zu schreiben.

Meine erste Überlegung war den Integer in über einen IEC Baustein in einen String zu wandeln dann die ersten 2 Byte auszumaskieren und das Ergebnis in das Array zu schreiben ist aber irgendwie doch net so ganz einfach :) Help ?

pete
 
Hallo Pete,

geht das nicht mit dem FC5 DI_STRING ? Oder musst du noch kommas oder sonstiges einpflegen ?

Gruss Wälder
 
Ja hast recht gibt keine Kommas hier aber sorry hört sich blöd an aber ich hatt mal so was für ein heiz- Kühlgerät, da waren DINT
für soll und ist

Format war wir folgt :
VXXXYY
V=0 Plus 1=Minus
XXX= Vorkomma
YY=Nachkomma

da musste ich halt entsprechend umbasteln

OT: cool 4L endlich mal wieder im selben threat :)
Grüsse Wälder
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Möglichkeit besteht auch darin, die INT in eine DINT zu wandeln (falls auch negative Zahlen vorkommen!!!, sonst geht das auch direkt mit der INT), dann per DTB in eine BCD zu wandeln und dann die letzten 4 Byte der BCD-Zahl jeweils durch Addition von 30H in eine Char zu wandeln. DTB, da ITB nur 3 Stellen + Vorzeichen wandelt, wenn ich das richtig erinnere.
 
Eine Möglichkeit besteht auch darin, die INT in eine DINT zu wandeln (falls auch negative Zahlen vorkommen!!!, sonst geht das auch direkt mit der INT), dann per DTB in eine BCD zu wandeln und dann die letzten 4 Byte der BCD-Zahl jeweils durch Addition von 30H in eine Char zu wandeln. DTB, da ITB nur 3 Stellen + Vorzeichen wandelt, wenn ich das richtig erinnere.

die wandlung in bcd ist nicht nötig, da die stellen ja durchweg kleiner A sind
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So so, was passiert also mit einer 12 int, die in der S7 als 0C hex dargestellt wird?

ich meine es ungefähr so:

Code:
*
      LAR1  P##aMyCharArray
      L     10000
      T     #iMyDivident

      L     4
next: T     #iLoopCounter

      L     #iMyInteger
      L     #iMyDivident
      /I    
      T     #iMyInteger
      L     W#16#30
      +I    
      T     B [AR1,P#0.0]

      L     #iMyInteger
      L     #iMyDivident
      MOD   
      T     #iMyInteger

      +AR1  P#1.0
      L     10
      L     #iMyDivident
      /I    
      T     #iMyDivident

      L     #iLoopCounter
      LOOP  next
 
Zuletzt bearbeitet:
ich meine es ungefähr so:

Code:
      LAR1  P##aMyCharArray
      L     10
      T     #iMyDivident

      L     4
next: T     #iLoopCounter

      L     #iMyInteger
      L     #iMyDivident
      /I    
      L     W#16#30
      +I    
      T     B [AR1,P#0.0]

      +AR1  P#1.0
      L     10
      L     #iMyDivident
      *I    
      T     #iMyDivident

      L     #iLoopCounter
      LOOP  next

Ja natürlich geht das auch so, aber ich schrieb ja nichts von Division durch 10, sondern vom Wandeln der gesamten Zahl mittels DTB in eine BCD. Bei der BCD kann dann jedes Byte einzeln in eine Char gewandelt werden, fertig.
 
ok eure AWl codes sind mir ein bisschen zu hoch aber es müsste also in die richtung gehen ?

Der Integer besteht aus 2 Bytes, die Bytes einzeln Laden und jeweils mit 30 Hex addieren dann die wieder zu einem Integer zusammen setzen und ins Char Array transferieren ?

Gibts kein Fertigen Baustein der das macht ?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also hier mal ein Beispiel mit BCD-Wandlung:

Code:
//Seriennummer umwandeln
      L     #Seriennummer
      DTB   
      T     #Seriennummer_BCD

      L     P##Seriennummer_BCD
      LAR1  

//1. Zeichen
      L     LB [AR1,P#3.0]
      SLW   12
      SRW   12
      L     W#16#30
      +I    
      T     #Charvars.Seriennummer_1

//2. Zeichen
      L     LB [AR1,P#3.0]
      SRW   4
      L     W#16#30
      +I    
      T     #Charvars.Seriennummer_2

//3. Zeichen
      L     LB [AR1,P#2.0]
      SLW   12
      SRW   12
      L     W#16#30
      +I    
      T     #Charvars.Seriennummer_3

//4. Zeichen
      L     LB [AR1,P#2.0]
      SRW   4
      L     W#16#30
      +I    
      T     #Charvars.Seriennummer_4

//5. Zeichen
      L     LB [AR1,P#1.0]
      SLW   12
      SRW   12
      L     W#16#30
      +I    
      T     #Charvars.Seriennummer_5

wobei:

Code:
Seriennummer : DINT ;	  //--> INOUT

Seriennummer_BCD : DWORD ; //--> Temp

Charvars : STRUCT 	
   Jahr : WORD ;	
   Wochennummer : WORD ;	
   Seriennummer_1 : BYTE ;	
   Seriennummer_2 : BYTE ;	
   Seriennummer_3 : BYTE ;	
   Seriennummer_4 : BYTE ;	
   Seriennummer_5 : BYTE ;	
   Anlagennummer : BYTE ;	
   Revisionsnummer : BYTE ;	
  END_STRUCT ;	//--> VAR

Ein wenig angepaßt und schon funzt das auch für deinen Einsatzzweck!
 
Zurück
Oben