Hallo,
jetzt habe ich es glaube ich schon kapiert...
Ich füge hier mal einen Auschnitt vom Code an an dem ich das nun "extra ausführlich" kommentiert habe.
Wenn die Kommentare stimmen dann müsste ich das kapiert haben.
Code:
L #indexDB // Index DB Nr. zuweisen
T #idbn
AUF DB [#idbn] // IndexDB aufschlagen
L #Nummer // Offset laden (DBB in dem das gewünschte Modul steht)
L 8 // 8-bit-Einträge
*I
T LD 12 // Inhalt in Temp index kopieren
L DBB [LD 12] // Modul-Nummer des gewählten DBB aus dem Index lesen
SPL tbig // wenn Nummer größer als Anzahl Sprungziele ist
SPA BM00 // Sprung nach BM00 wenn Modul-Nummer = 0 war => real #1
SPA BM01 // ...wenn = 1 war => real #2
SPA BM02 // ...wenn = 2 war => real #3
SPA BM03 // ...wenn = 3 war => real #4
SPA BM04 // ...wenn = 4 war => real #5
SPA BM05 // ...wenn = 5 war => real #6
SPA BM06 // ...wenn = 6 war => real #7
tbig: NOP 0
// hier kann eine Störmeldung o.Ä. erzeugt werden...
SPA ende
BM00: NOP 0
UN "M1_Bereit" // betriebsbereit BM0
BEB // Ende ohne reduzierte Anzahl, kann BM nicht einschalten
S "Modul1_Ein" // Modul 1 einschalten
SPA END1 // Ende mit reduzierter Anzahl
..........
END1: NOP 0
L #Anzahl
DEC 1
T #Anzahl // wenn das Modul bereit war und eingeschaltet wurde wird die Anzahl der benötigten um 1 verringert
BE
Das ganze ist ja nun auch ziemlich komplett.
Angenommen es wird ein Modul eingeschaltet das aber daraufhin nicht gestartet werden kann...
Das einzige was es dann tun muß ist das Bit "Betriebsbereit" zurücksetzen, dann wird beim nächsten durchlauf erkannt daß es nicht mehr verfügbar ist und automatisch das nächst höhere (Stunden) genommen - genial.
Eine Sache überlege ich aber gerade noch:
Um zu vermeiden daß ein eingeschaltetes das gerade einwandfrei läuft abgewählt wird - nur weil es ein anderes (das gerade steht) gerade mit den Stunden überholt hat könnte man noch eine Verriegelung einbauen.
Diese muß dann aber an der Stelle platziert werden bevor alle ausgeschaltet werden.
Ich dachte da mal an folgendes:
Wenn ich mir merke wieviele Module vorher liefen, und dann vergleiche mit der Anzahl was nun laufen soll, und feststelle daß es gleich viele sind -> nichts machen....
Somit wäre zumindest gewährleistet daß wenn gerade 4 Stück laufen sollen - es die selben 4 bleiben - egal was die Stunden sagen.
Wenn dann eine Änderung eintritt wird´s schon schwieriger...
Wenn es weniger sein sollen als vorher wird ja das mit den meisten Stunden weggelassen - dabei kann aber auch schon passieren daß eines das bisher stand auch wieder weniger hat als eines das bisher lief - also Tausch.
Umgekehrt genauso.
Aber zumindest wenn sich nix ändert sollte man auch nix ändern - das geht ja... - oder etwa nicht ?
... da fällt mir doch während ich hier schreibe noch der worst case ein...
Ich zitiere mich mal:
Angenommen es wird ein Modul eingeschaltet das aber daraufhin nicht gestartet werden kann...
Das einzige was es dann tun muß ist das Bit "Betriebsbereit" zurücksetzen, dann wird beim nächsten durchlauf erkannt daß es nicht mehr verfügbar ist und automatisch das nächst höhere (Stunden) genommen - genial.
geht dann aber auch nicht - weil dann davon ausgegangen wird daß das bloße Einschalten ausreichte - aber der Fall daß das Einschalten quasi umsonst war wird dann gar nicht berücksichtigt...
Ich glaube es sollte so bleiben - dann kann eigentlich nix (oder am wenigsten) schief gehen.