Allen Bradley PLC5 - Integer Sortieren

elektroede

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hi,

stehe hier vor einer (für mich ;) ) kniffligen aufgabe.

30 integer words ( N20:0 bis N20:29 ) enthalten je einen
decimal-wert unterschiedlicher grösse. nun möchte ich diese
zahlen nach der grösse ordnen und dabei in einen anderen
integer-file schieben. mit einem FBC bin ich bis jetzt nicht
viel weiter gekommen. vll. habt ihr ein paar anregungen?

danke im voraus.

gruss,ede
 
Welchen PLC5 hast Du denn? Die "Enhanced" Versionen unterstützen den Befehl "SRT". Ansonsten Basteln, sprich "Bubblesort" oder was ähnliches nachbilden. Könnte ungefähr so aussehen (Achtung: nicht getestet, habe keinen PLC hier):

Code:
SOR XIC B3/0 ONS B3/1 BST COP #N20:0 #N21:0 30 NXB OTL B3/2 BND EOR

Code:
SOR XIC B3/2 FOR 10 N7:0 0 29 1 EOR

Code:
SOR XIC B3/2 SUB 30 N7:0 N7:1 EOR

Code:
SOR XIC B3/2 FOR 11 N7:2 0 N7:1 1 EOR

Code:
SOR ADD N7:2 1 N7:3 EOR

Code:
SOR GRT N21:[N7:2] N21:[N7:3] BST MOV N21:[N7:3] N7:4 NXB MOV N21:[N7:2] N21:[N7:3] NXB MOV N7:4 N21:[N7:2] BND EOR

Code:
SOR NXT 11 EOR

Code:
SOR NXT 10 EOR

Code:
SOR OTU B3/2 EOR
 
Zuviel Werbung?
-> Hier kostenlos registrieren
danke für die schnelle hilfe :) habe die enhanced version. habe jetzt
also den "srt" befehl genutzt. danach war dann mein problem, dass der
srt natürlich auch die integer mit dem wert "0" mitsortiert. das gab dann
ein ziemlich unschönes bild und meine zahlenkolonne fing dann zb. erst bei
N20:10 an.

hier meine lösung ( wen es interessiert *g* )
ich schiebe die 30 words erstmal in einen "schmierfile" ( N40:0) lasse sie dort mit dem "srt" sortieren. ein "fsc"(R8:1) zählt in dem" schmierfile" die position der ersten zahl > 0. ein "fal"(R8:2) schiebt dann, dank der indirekten adressierung in der expression vom "fal"( " #N40:[R8:1.POS] "), 30 words ab der von dem "fsc" ermittelten position in mein N20:0. somit habe ich die unschönen nullen aussortiert.

gruss, ede
 
"fal"(R8:2) schiebt dann, dank der indirekten adressierung in der expression vom "fal"( " #N40:[R8:1.POS] "), 30 words ab der von dem "fsc" ermittelten position in mein N20:0. somit habe ich die unschönen nullen aussortiert.

Da ist aber ein "COP" für die Scantime besser, also erst Länge für's kopieren berechnen (SUB, 30 - R8:1.POS), dann kopieren von #N40:[R8:1.POS] nach #N20:0 mit der Länge des zuvor ausgerechneten Ergebnisses.

Ein SUB braucht:
6.2µS
Ein COP braucht:
16.2+E[0.72]
also
16.2 + 30*[0.72] = 37.8µS
macht zusammen 44µS



Ein FAL braucht:
11 + (S[2.3 + i])E
also 11+(S[2.3 + 4.5])*30
oder 11+(S[6.8])*30

Leider finde ich im Handbuch die Zeichenerklärung für "S" nicht (das Forum stellt das Zeichen auch nicht in der Form dar wie es im Handbuch zu finden ist, kann leider hier keine Schriftart "Symbol" auswählen), das Endergebnis dürfte aber einiges höher liegen.

alle Angaben beziehen sich auf Deine 30 Worte Integer und bei direkter Adressierung, bei indirekter Adressierung dürfte der Unterschied noch größer werden weil die Adresse bei jedem Schritt des FAL neu ermittelt werden muß. Es sei denn Du hast nicht den Modus "ALL", dann sieht die Sache wieder anders aus.
 
Zurück
Oben