*
FUNCTION_BLOCK FB 5
TITLE =
VERSION : 0.1
VAR_INPUT
dInput : DINT ;
END_VAR
VAR_OUTPUT
sOutput : STRING [11 ];
END_VAR
VAR_TEMP
xMin : BOOL ;
xFirstNumber : BOOL ;
xMinus : BOOL ;
aChar : ARRAY [0 .. 10 ] OF BYTE ;
iLoop : INT ;
iMinusPos : INT ;
iLength : INT ;
dTemp : DINT ;
dMOD : DINT ;
dCompare : DINT ;
dAR1Temp : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
//initialisieren
CLR ;
= #xMinus;
= #xMin;
= #xFirstNumber;
L 1;
T #iMinusPos;
+ -1;
T #iLength;
TAR1 #dAR1Temp;
LAR1 P##sOutput;
+AR1 P#2.0;
L 11;
init: T #iLoop;
L W#16#0;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLoop;
LOOP init;
//sonderfall
L #dInput;
L L#-2147483648;
==D ;
SPBN nmin;
= #xMin;
L #dInput;
+ 1;
SPA min;
//input ist minus??
nmin: L #dInput;
L L#0;
<D ;
L #dInput;
SPBN nonu;
min: SET ;
= #xMinus;
L L#-1;
*D ;
nonu: T #dTemp;
//ja, ist minus - position für - berechnen
U #xMinus;
SPBN ohmi;
L 10;
T #dCompare;
L 10;
nex1: T #iLoop;
L #dTemp;
L #dCompare;
<D ;
SPBN noch;
L #iLoop;
T #iMinusPos;
SPA ohmi;
noch: L #dCompare;
L L#10;
*D ;
T #dCompare;
L #iLoop;
LOOP nex1;
//ausgabe der einzelnen stellen
ohmi: LAR1 P##aChar;
L 11;
next: T #iLoop;
L #dTemp;
L 10;
MOD ;
L W#16#30;
+I ;
T B [AR1,P#0.0];
L #dTemp;
L 10;
/D ;
T #dTemp;
+AR1 P#1.0;
L #iLoop;
LOOP next;
//ausgabe -
U #xMinus;
SPBN end;
LAR1 P##aChar;
L 11;
nex2: T #iLoop;
L #iMinusPos;
==I ;
SPBN naec;
L W#16#2D;
T B [AR1,P#0.0];
SPA end;
naec: +AR1 P#1.0;
L #iLoop;
LOOP nex2;
//rauskopieren
end: LAR1 P##sOutput;
+AR1 P#2.0;
L #aChar[10];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non9;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non9: L #aChar[9];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non8;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non8: L #aChar[8];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non7;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non7: L #aChar[7];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non6;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non6: L #aChar[6];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non5;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non5: L #aChar[5];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non4;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non4: L #aChar[4];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non3;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non3: L #aChar[3];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non2;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non2: L #aChar[2];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non1;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non1: L #aChar[1];
L W#16#30;
==I ;
UN #xFirstNumber;
SPB non0;
TAK ;
T B [AR1,P#0.0];
SET ;
= #xFirstNumber;
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non0: U #xMin;
SPBN nee;
L #aChar[0];
+ 1;
SPA doch;
nee: L #aChar[0];
doch: L W#16#30;
==I ;
UN #xFirstNumber;
SPB non;
SET ;
= #xFirstNumber;
TAK ;
T B [AR1,P#0.0];
+AR1 P#1.0;
L #iLength;
+ 1;
T #iLength;
non: LAR1 P##sOutput;
L #iLength;
T B [AR1,P#1.0];
LAR1 #dAR1Temp;
SET ;
SAVE ;
END_FUNCTION_BLOCK