TheBigMemph
Level-1
- Beiträge
- 9
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Also, ich habe einen Datenbaustein in den ich Werte von 1 bis 3 speichere ...
Nun will ich diese abhängig von einem Eingang aufsteigend oder absteigend sortieren...
Nun habe ich einen DB Bubble Sort Baustein der wie folgt aussieht :
Jetzt habe ich das Problem, dass das zweite Wort im DB immer bestehen bleibt ... bekomm ich nicht mehr zu einer Null ...
Und beim speichern der ersten Zahl schreibt er sie mir direkt in Wort 1 und 2 ...
Ich bin verzweifelt .... :-(
Nun will ich diese abhängig von einem Eingang aufsteigend oder absteigend sortieren...
Code:
ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
END_VAR
BEGIN
NETWORK
TITLE =
CALL FC 1 (
Data_DB :=DB 1,
DB_length :=W#16#A) ;
NETWORK
TITLE =
AUF DB 1;
NETWORK
TITLE =
U( ;
O E 0.0;
O E 0.1;
O E 0.2;
) ;
ZV Z 0;
U( ;
O E 1.0;
O E 1.1;
O E 1.2;
) ;
U E 2.0;
ZR Z 0;
NOP 0;
NOP 0;
U( ;
L DBW 0;
L 0;
==I ;
) ;
R Z 0;
NOP 0;
LC Z 0;
T MW 10;
NOP 0;
NETWORK
TITLE =
U E 0.0;
SPBNB _001;
L 1;
T MW 30;
_001: NOP 0;
NETWORK
TITLE =
U E 0.1;
SPBNB _002;
L 2;
T MW 30;
_002: NOP 0;
NETWORK
TITLE =
U E 0.2;
SPBNB _003;
L 3;
T MW 30;
_003: NOP 0;
NETWORK
TITLE =
U( ;
O E 0.0;
O E 0.1;
O E 0.2;
) ;
SPBNB _010;
CALL FC 2 ;
_010: NOP 0;
NETWORK
TITLE =
U( ;
O E 1.0;
O E 1.1;
O E 1.2;
) ;
U E 2.0;
FP M 220.1;
SPBN M001;
CALL "BLKMOV" (
SRCBLK := P#DBX 2.0 BYTE 100,
RET_VAL := MW 110,
DSTBLK := P#DBX 0.0 BYTE 100);
M001: NOP 0;
NETWORK
TITLE =
END_ORGANIZATION_BLOCK
Nun habe ich einen DB Bubble Sort Baustein der wie folgt aussieht :
Code:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
Data_DB : BLOCK_DB ;
DB_length : WORD ;
END_VAR
VAR_TEMP
Sort_done : BOOL ;
Temp : WORD ;
Count : WORD ;
END_VAR
BEGIN
NETWORK
TITLE =Sort a Data Block using the bubble sort method
//Data Block will be sorted in ascending order.
//
AUF #Data_DB; //Open Data Block
M002: LAR1 P#DBX 0.0;
SET ; //LET #Sort_done = TRUE
S #Sort_done;
L #DB_length;
L 1;
-I ;
Loop: T #Count; //FOR INDEX = Count TO DB_length
L W [AR1,P#0.0]; //IF M(INDEX) > M(INDEX+1) THEN
L W [AR1,P#2.0];
<=I ;
SPB M003;
// change M(INDEX+1) for M(INDEX)
L W [AR1,P#0.0]; //LET TEMP = M(INDEX)
T #Temp;
L W [AR1,P#2.0]; //LET M(INDEX) = M(INDEX+1)
T W [AR1,P#0.0];
L #Temp; //LET M(INDEX+1) = TEMP
T W [AR1,P#2.0];
SET ;
R #Sort_done; //LET #Sort_done = FALSE
M003: TAR1 ;
L 16; //NEXT INDEX
+D ;
LAR1 ;
L #Count;
LOOP Loop; //End of sorting pass
UN #Sort_done; //If sorting is not done
SPB M002; //Jump Conditionally to M002
BE ;
END_FUNCTION
Jetzt habe ich das Problem, dass das zweite Wort im DB immer bestehen bleibt ... bekomm ich nicht mehr zu einer Null ...
Und beim speichern der ersten Zahl schreibt er sie mir direkt in Wort 1 und 2 ...
Ich bin verzweifelt .... :-(