TIA INT in CHAR umwandeln, von linker Seite mit 0 füllen

stb_abe

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

Wir sollten von einer Seriennummer (INT) die einzelnen Zeichen als CHAR (5 Zeichen) an einen anderen Profibus-Teilnehmer übertragen, damit dieser es wieder in sein System einlesen kann.

z.B:
INT = CHAR
1 = 00001
10 = 00010
99 = 00099
120 = 00120
8888 = 08888
99999 = 99999

Den INT in ein CHAR umzuwandeln, haben wir mit diesem erstellten FB versucht:

Code:
#outString := DINT_TO_STRING(#iDINT);

FOR #i := 1 TO 10 DO
    
    #charIntern[#i] := STRING_TO_CHAR(MID(IN := #outString, L := 1, P := #i));

    //#char[#i] := STRING_TO_CHAR(MID(IN := #outString, L := 1, P := #i));
    
    IF (#charIntern[#i] = '1')
        OR (#charIntern[#i] = '2')
        OR (#charIntern[#i] = '3')
        OR (#charIntern[#i] = '4')
        OR (#charIntern[#i] = '5')
        OR (#charIntern[#i] = '6')
        OR (#charIntern[#i] = '7')
        OR (#charIntern[#i] = '8')
        OR (#charIntern[#i] = '9')
    THEN
        //Datenübergabe
        #char[#i] := #charIntern[#i];
    ELSE
        //Wert 0 eintragen
        #char[#i] := '0';
    END_IF;
    
END_FOR;

Nun ist die Frage, wie wir die 0 bei kleineren Zahlenwerten an die richtige Stelle bringen.
Habt ihr da eine Idee oder einen Lösungsansatz
 
Versuche es mal so: '0000' und den Zahlenstring zusammenhängen und davon die letzten 5 Zeichen nehmen:
Code:
#outString := RIGHT_STRING(IN:=CONCAT_STRING(IN1:='0000', IN2:=INT_TO_STRING(#iMyInt)), L:=5);

FOR #i := 1 TO 5 DO
    #char[#i] := #outString[#i];
END_FOR;

Welche CPU programmiert Ihr?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder mit dem guten alten Modulo:

Code:
  #iMyIntTemp := #iMyInt;
  FOR #i := 5 TO 1 DO
    #char[#i] := 48 + (#iMyIntTemp MOD 10);
    #iMyIntTemp := #iMyIntTemp / 10;
  END_FOR

Ist jetzt nich getestet, sollte aber trotzdem (mit positiven Werten) funktionieren. Habe bisher noch nicht SCL auf 'ner Siemens programmiert, nur ST auf anderen Maschinen. Obwohl das jetzt damals eine Programmierübung noch in C war.

Gruß
 
Zurück
Oben