-> Hier kostenlos registrieren
Hallo zusammen,
ich habe einen DB, der für 1600 verschiedene Alarme die Häufigkeit des Auftretens zählt. Mit Hilfe von diesem DB soll eine TOP 10 der häufigsten Alarme erstellt werden. Dazu habe ich einen Code geschrieben, der die 10 größten Zahl im DB findet und nach Größe sortiert in den "DB Zwischenspeicher" schreibt. Nun sollen in einer weiteren Funktion alle Zähler mit den gefundenen 10 höchsten Anzahlen verglichen und die Alarm-Nummern erfasst werden. Diese werden dann in den "DB Fehler TOP10" geschrieben. Würde jeder Alarm eine verschiedene Anzahl besitzen wäre das alles kein Problem. Dann könnte man einfach den "DB Fehleranzahl" nach der jewiligen Anzahl durchsuchen.
Das Problem ist jetzt, dass ich nicht weiß wie ich die Abfrage machen soll, wenn mehrere Alarme die gleiche Anzahl besitzen.
Hier mal der Code für den einfachen Fall, dass alle eine verschiedene Anzahl besitzen würden:
Das soll am Ende dann ugf. so aussehen:
ich habe einen DB, der für 1600 verschiedene Alarme die Häufigkeit des Auftretens zählt. Mit Hilfe von diesem DB soll eine TOP 10 der häufigsten Alarme erstellt werden. Dazu habe ich einen Code geschrieben, der die 10 größten Zahl im DB findet und nach Größe sortiert in den "DB Zwischenspeicher" schreibt. Nun sollen in einer weiteren Funktion alle Zähler mit den gefundenen 10 höchsten Anzahlen verglichen und die Alarm-Nummern erfasst werden. Diese werden dann in den "DB Fehler TOP10" geschrieben. Würde jeder Alarm eine verschiedene Anzahl besitzen wäre das alles kein Problem. Dann könnte man einfach den "DB Fehleranzahl" nach der jewiligen Anzahl durchsuchen.
Das Problem ist jetzt, dass ich nicht weiß wie ich die Abfrage machen soll, wenn mehrere Alarme die gleiche Anzahl besitzen.
Hier mal der Code für den einfachen Fall, dass alle eine verschiedene Anzahl besitzen würden:
Code:
NW 4:
L "DB Zwischenspeicher".NR1
T #tInAnzahl
L 0
T #tInAlarmNr
AUF DB [#tWoDBAnzahl]
LAR1 P#0.0
L 1
L #tWoAnzByteInDB
SRW 1 // Durch 2 Teilen, um von BYTE zu INT zu wandeln
>I
SPB END
T #tWoAnzWerteImDB // Anzahl der INT Datensätze im DB
M001: T #tInCount // Schleifenzähler mit Anzahl der Datensätze laden
L DBW [AR1,P#0.0] // Mit Anzahl in Zwischenspeicher Platz 1 vergleichen
L #tInAnzahl
==I
SPBN WEI1 // Wenn ungleich, dann überspringen
L #tWoAnzWerteImDB // Hier wird die Alarmnummer aus dem Loopzähler berechnet
L 1
+I
L #tInCount
-I
T #tInAlarmNr
WEI1: NOP 0
+AR1 P#2.0 // Adressregister erhöhen für nächsten Durchlauf
L #tInCount
LOOP M001
L #tInAlarmNr // Ãœbertragen des gefundenen Fehlers in TOP 10 DB
T "DB Fehler TOP10".Nr1.AlarmNR
L #tInAnzahl
T "DB Fehler TOP10".Nr1.Anzahl
NW 5:
L "DB Zwischenspeicher".NR2
T #tInAnzahl
L 0
T #tInAlarmNr
AUF DB [#tWoDBAnzahl]
LAR1 P#0.0
L 1
L #tWoAnzByteInDB
SRW 1 // Durch 2 Teilen, um von BYTE zu INT zu wandeln
>I
SPB END
T #tWoAnzWerteImDB // Anzahl der INT Datensätze im DB
M002: T #tInCount // Schleifenzähler mit Anzahl der Datensätze laden
L DBW [AR1,P#0.0]
L #tInAnzahl
==I
SPBN WEI2
L #tWoAnzWerteImDB
L 1
+I
L #tInCount
-I
T #tInAlarmNr
WEI2: NOP 0
+AR1 P#2.0
L #tInCount
LOOP M002
L #tInAlarmNr
T "DB Fehler TOP10".Nr2.AlarmNR
L #tInAnzahl
T "DB Fehler TOP10".Nr2.Anzahl
.
.
.
.
Und so weiter...bis "DB Fehler TOP10".Nr10...
Das soll am Ende dann ugf. so aussehen:
Platz | Alarm-Nr. | Häufigkeit |
1 | 0025 | 423 |
2 | 1456 | 410 |
3 | 0512 | 398 |
4 | 0649 | 398 |
5 | 1232 | 270 |
6 | 0789 | 269 |
7 | 1234 | 241 |
8 | 1599 | 241 |
9 | 0002 | 223 |
10 | 1394 | 189 |