-> Hier kostenlos registrieren
Code:
FUNCTION_BLOCK FB 1TITLE =
VERSION : 0.1
VAR_INPUT
ABBRUCH : BOOL ;
START : BOOL ;
sortDB : BLOCK_DB ;
helpDB : BLOCK_DB ;
END_VAR
VAR_OUTPUT
BUSY : BOOL ;
END_VAR
VAR
STARTflanke : BOOL ;
sortDBnummer : WORD ;
helpDBnummer : WORD ;
Auswahlbit : DWORD ;
MNGKlein : DWORD ;
MNGGross : DWORD ;
count : DWORD ;
M0 : DWORD ;
M1 : DWORD ;
END_VAR
VAR_TEMP
sortDBtempN : WORD ;
helpDBtempN : WORD ;
x : DWORD ;
y : DWORD ;
z : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
//START + iNITIALISIEREN
U #START;
FP #STARTflanke;
SPBN ENDE;
AUF #helpDB;
L DBNO;
T #helpDBnummer;
AUF #sortDB;
L DBNO;
T #sortDBnummer;
L DBLG;
L L#2;
/D ;
L L#1;
-D ;
L L#16;
*D ;
T #MNGKlein;
L L#8;
+D ;
T #MNGGross;
L L#0;
T #Auswahlbit;
T #count;
SET ;
= #BUSY;
ENDE: NOP 0;
NETWORK
TITLE =
//UNTERBRECHMOGLICHKET
U #ABBRUCH;
R #BUSY;
UN #BUSY;
SPB LAU;
NETWORK
TITLE =
//FALL 1 KOMPAKT
U( ;
L #count;
L L#0;
<>D ;
) ;
U( ;
L #count;
L L#4;
<>D ;
) ;
U( ;
L #count;
L L#8;
<>D ;
) ;
U( ;
L #count;
L L#12;
<>D ;
) ;
U( ;
L #count;
L L#16;
<>D ;
) ;
U( ;
L #count;
L L#20;
<>D ;
) ;
U( ;
L #count;
L L#24;
<>D ;
) ;
U( ;
L #count;
L L#28;
<>D ;
) ;
SPB s0;
L #count;
L L#16;
>=D ;
L L#8;
L L#0;
SPB VK1;
TAK ;
VK1: T #x;
L #count;
L L#16;
MOD ;
L L#2;
/D ;
T #M0;
L #x;
+D ;
T #x;
L L#0;
T #y;
T #z;
L #sortDBnummer;
T #sortDBtempN;
L #helpDBnummer;
T #helpDBtempN;
NETWORK
TITLE =
//FALL 2 KOMPAKT
s0: NOP 0;
U( ;
L #count;
L L#1;
<>D ;
) ;
U( ;
L #count;
L L#5;
<>D ;
) ;
U( ;
L #count;
L L#9;
<>D ;
) ;
U( ;
L #count;
L L#13;
<>D ;
) ;
U( ;
L #count;
L L#17;
<>D ;
) ;
U( ;
L #count;
L L#21;
<>D ;
) ;
U( ;
L #count;
L L#25;
<>D ;
) ;
U( ;
L #count;
L L#29;
<>D ;
) ;
SPB s1;
L #count;
L L#16;
>=D ;
L #MNGGross;
L #MNGKlein;
SPB VK2;
TAK ;
VK2: T #x;
L #M0;
L #x;
+D ;
T #x;
L #MNGKlein;
T #y;
T #z;
L #sortDBnummer;
T #sortDBtempN;
L #helpDBnummer;
T #helpDBtempN;
NETWORK
TITLE =
//FALL 3 KOMPAKT
s1: NOP 0;
U( ;
L #count;
L L#2;
<>D ;
) ;
U( ;
L #count;
L L#6;
<>D ;
) ;
U( ;
L #count;
L L#10;
<>D ;
) ;
U( ;
L #count;
L L#14;
<>D ;
) ;
U( ;
L #count;
L L#18;
<>D ;
) ;
U( ;
L #count;
L L#22;
<>D ;
) ;
U( ;
L #count;
L L#26;
<>D ;
) ;
U( ;
L #count;
L L#30;
<>D ;
) ;
SPB s2;
L #count;
L L#16;
>=D ;
L L#8;
L L#0;
SPB VK3;
TAK ;
VK3: T #x;
L #count;
L L#16;
MOD ;
L L#2;
/D ;
T #M1;
L #x;
+D ;
T #x;
L L#0;
T #y;
T #z;
L #sortDBnummer;
T #helpDBtempN;
L #helpDBnummer;
T #sortDBtempN;
NETWORK
TITLE =
//FALL 4 KOMPAKT
s2: NOP 0;
U( ;
L #count;
L L#3;
<>D ;
) ;
U( ;
L #count;
L L#7;
<>D ;
) ;
U( ;
L #count;
L L#11;
<>D ;
) ;
U( ;
L #count;
L L#15;
<>D ;
) ;
U( ;
L #count;
L L#19;
<>D ;
) ;
U( ;
L #count;
L L#23;
<>D ;
) ;
U( ;
L #count;
L L#27;
<>D ;
) ;
U( ;
L #count;
L L#31;
<>D ;
) ;
SPB s3;
L #count;
L L#16;
>=D ;
L #MNGGross;
L #MNGKlein;
SPB VK4;
TAK ;
VK4: T #x;
L #M1;
L #x;
+D ;
T #x;
L #MNGKlein;
T #y;
T #z;
L #sortDBnummer;
T #helpDBtempN;
L #helpDBnummer;
T #sortDBtempN;
s3: NOP 0;
NETWORK
TITLE =
//AUSWAHL 0
L #Auswahlbit;
L L#0;
==D ;
SPB oo0;
NETWORK
TITLE =
//AUSWAHL 1
L #Auswahlbit;
L L#1;
==D ;
SPB oo1;
NETWORK
TITLE =
//SEPARATOR
LAU: BE ;
NETWORK
TITLE =
//ZEROS sortieren
oo0: NOP 0;
o3: L #y;
L #MNGKlein; //(0->6)[7]
>D ;
SPB o1;
AUF DB [#sortDBtempN];
U DBX [#x];
SPB o2;
L DBW [#y];
AUF DB [#helpDBtempN];
T DBW [#z];
L #z;
L 16; // WORD=16
+D ;
T #z;
o2: NOP 0;
L #x;
L L#16;
+D ;
T #x;
L #y;
L L#16;
+D ;
T #y;
SPA o3;
o1: L L#1;
T #Auswahlbit;
L #count;
L L#1;
+D ;
T #count;
BE ;
NETWORK
TITLE =
//EINSER sortieren
oo1: NOP 0;
o6: L #y;
L L#0;
<D ;
SPB o4;
AUF DB [#sortDBtempN];
UN DBX [#x];
SPB o5;
L DBW [#y];
AUF DB [#helpDBtempN];
T DBW [#z];
L #z;
L L#16;
-D ;
T #z;
o5: NOP 0;
L #x;
L L#16;
-D ;
T #x;
L #y;
L L#16;
-D ;
T #y;
SPA o6;
o4: L L#0;
T #Auswahlbit;
L #count;
L L#1;
+D ;
T #count;
L L#32;
<D ;
SPB FIN;
CLR ;
= #BUSY;
FIN: BE ;
END_FUNCTION_BLOCK
Anhang anzeigen RADIXSORT.zip