Step 7 Umwandeln in Ascii (CHAR)

Martin L.

Level-1
Beiträge
219
Reaktionspunkte
16
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Profi´s

Steuerung: (S7300 CPU 315-2DP, Step7 V5.5)
muß eine Artikel-Nr. 291889 Wert in Ascii (CHAR) umwandeln, wie geht es am einfachsten!
Beispiel:
Artikel-Nr. = DB140.DBD = Wert 291889
umwandeln in ASCII (CHAR)

MB40 = '2'
MB41 = '9'
MB42 = '1'
usw. bis MB45
 
Zum Beispiel mit dem FC5 DI_STRING aus der iec-library den Wert in einen String wandeln und dann die CHARs au dem Ergebnis-String ausschneiden.

Grüße
hovonlo
 
Hallo hovonlo, Volker + vierlagig,
danke für eure schnellen Info´s. Habe den FC5 eingebunden funktioniert perfekt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

vielleicht hat noch Jemand Interesse an zwei Bausteinen (DINT-> ASCII; ASCII->DINT) beides 4-stellig....

FUNCTION "ASCII_DINT" : DINT
TITLE =
//ASCII -> DINT (ASCII in Doppelwort)
AUTHOR : MF
FAMILY : CONVERT
NAME : ASC_DINT
VERSION : 1.0


VAR_INPUT
Idw_ASCII : DWORD ; //Zeichenfolge (ASCII-Zeichen) - 4 Stellen
END_VAR
VAR_TEMP
Tdw_Eingang : DWORD ; //Zwischenspeicher Eingangsstring
END_VAR
BEGIN
NETWORK
TITLE =ASCII in DINT
//Historie:
//------------------------------------------------------------------------------
//Release: 15.10.2013 MF
//
//
//Benötigte Bausteine:
//------------------------------------------------------------------------------
// -
//
//
//Beschreibung:
//------------------------------------------------------------------------------
//ASCII-Code
//
//Zeichen Hex Dez BCD
//----------------------------------------
// '0' 30h 48 1111 0000
// '1' 31h 49 1111 0001
// '2' 32h 50 1111 0010
// '3' 33h 51 1111 0011
// '4' 34h 52 1111 0100
// '5' 35h 53 1111 0101
// '6' 36h 54 1111 0110
// '7' 37h 55 1111 0111
// '8' 38h 56 1111 1000
// '9' 39h 57 1111 1001
//
//Daraus folgt: immer die 1. Tetrade enthält den gesuchten Wert. Nur BCD-Zahlen
//sind gültig. D.h. die 1. Tetrade muss eine gültige BCD-Zahl enthalten. Dann
//kann
//die 1. Tetrade als Zahl verwendet werden.
//
//
//


//*** Initialisierung ***

SET ;
SAVE ; // BIE-Bit vorbelegen


//*** Daten gültig? ***

L #Idw_ASCII;
PUSH ;
UD DW#16#F0F0F0F0;
XOD DW#16#30303030;
SPN FEHL; // Wenn ASCII-Bereich != 0-9 >> springe zu FEHL
TAK ;
UD DW#16#F0F0F0F; // 1. Tetrade ausmaskieren MASKE: 0F0F0F0F
T #Tdw_Eingang;
UD DW#16#6060606; // 0,1,8 und 9 ausmaskieren MASKE: 06060606
SPZ OK; // wenn 0,1,8 oder 9 >> springe zu OK
SLD 1;
L #Tdw_Eingang;
UD ;
UD DW#16#8080808;
SPN FEHL; // wenn 10-15 >> springe zu FEHL
TAK ;
UD DW#16#4040404;
SLD 1;
L #Tdw_Eingang;
UD ;
SPN FEHL;


//*** ASCII-Eingang in DINT wandeln ***

OK: L #Tdw_Eingang;
PUSH ;
SLD 28;
SRD 28;
TAK ;
SRD 4;
OD ;
PUSH ;
SLD 24;
SRD 24;
TAK ;
SRD 8;
SLD 4;
OD ;
PUSH ;
SLD 20;
SRD 20;
TAK ;
SRD 12;
SLD 8;
OD ;
BTD ;
T #RET_VAL; // Wert ausgeben
BEA ; // Baustein beenden


//*** Fehler ***

FEHL: CLR ;
SAVE ; // BIE-bit setzen

END_FUNCTION









FUNCTION "DINT_ASCII" : DWORD
TITLE =
//DINT -> ASCII (ASCII in Doppelwort)
AUTHOR : MF
FAMILY : CONVERT
NAME : DINT_ASC
VERSION : 1.0


VAR_INPUT
Idi_DINT : DINT ; //Zahl in DINT-Format
END_VAR
BEGIN
NETWORK
TITLE =ASCII in DINT
//Historie:
//------------------------------------------------------------------------------
//Release: 15.10.2013 MF
//
//
//Benötigte Bausteine:
//------------------------------------------------------------------------------
// -
//
//
//Beschreibung:
//------------------------------------------------------------------------------
//ASCII-Code
//
//Zeichen Hex Dez BCD
//----------------------------------------
// '0' 30h 48 0011 0000
// '1' 31h 49 0011 0001
// '2' 32h 50 0011 0010
// '3' 33h 51 0011 0011
// '4' 34h 52 0011 0100
// '5' 35h 53 0011 0101
// '6' 36h 54 0011 0110
// '7' 37h 55 0011 0111
// '8' 38h 56 0011 1000
// '9' 39h 57 0011 1001
//
//
//
//
//


//*** Initialisierung ***

SET ;
SAVE ; // BIE-Bit vorbelegen


//*** DINT-Eingang in ASCII wandeln ***

L #Idi_DINT;
DTB ;
PUSH ;
SRD 12;
SLD 16;
TAK ;
SLD 20;
SRD 20;
OD ;
PUSH ;
SRD 8;
SLD 12;
TAK ;
SLD 24;
SRD 24;
OD ;
PUSH ;
SRD 4;
SLD 8;
TAK ;
SLD 28;
SRD 28;
OD ;
OD DW#16#30303030; //ASCII-Offset für 0-9
T #RET_VAL;

END_FUNCTION
 
Zurück
Oben