Hallo zusammen,
bin noch Anfänger und habe folgendes Problem:
Ich muß 12 DINT Werte in einem DB aufsteigend sortieren und habe mir dazu den untenstehenden FC1
bei Siemens runtergeladen. Dieser funktioniert mit INT Werte. Kann mir jemand sagen, ob ich diesen FC durch
umschreiben auch für DINT Werte nutzen kann ?? und wenn ja wie mach ich das.
schon mal vielen Dank für eure Hilfe.
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
bin noch Anfänger und habe folgendes Problem:
Ich muß 12 DINT Werte in einem DB aufsteigend sortieren und habe mir dazu den untenstehenden FC1
bei Siemens runtergeladen. Dieser funktioniert mit INT Werte. Kann mir jemand sagen, ob ich diesen FC durch
umschreiben auch für DINT Werte nutzen kann ?? und wenn ja wie mach ich das.
schon mal vielen Dank für eure Hilfe.
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