Ich würde die Betiebsbereitschaft nachher testen.
Das ist jetzt kein getesteter Code, nur das Prinzip:
Du brauchst z.B. 2 Betriebsmittel.
Diese Information kopierts du in irgendeine Variable. Ich sag´ mal MB88.
Du gehtst die Liste in DB10 durch, beginnend mit 0. Wo du bist, merkst du dir z.B. in MB89.
Du liest aus DB10.DBB[0], daß das BM mit den wenigsten Stunden die Nummer 4 hat.
Du zählst MB89 hoch, da du auf jeden fall als nächste BM das mit nächstwenigeren Stunden einzuschalten versuchst.
Nun prüfst du die Betriebsbereitschaft von Nummer 4.
JA: Ist es bereit so schaltest du es ein und verringert MB88 um 1. Es ist nun 2-1=1. Du mußt noch 1 BM einschalten.
NEIN: Ist es NICHT bereit so schaltest du es nicht ein und läßt MB88 wie es ist. Es ist immer noch 2. Du mußt also noch 2 BM einschalten.
Du liest aus DB10[1], daß das BM mit den nächstwenigsten Stunden die Nummer 1 hat.
Du zählst MB89 hoch, da du auf jeden fall als nächstes BM das mit nächstwenigeren Stunden einzuschalten versuchst.
Nun prüfst du die Betriebsbereitschaft von Nummer 1.
Ist es bereit so schaltest du es ein und verringert MB88 um 1.
Waren beide bereit, ist MB88 jetzt 0 und du bist fertig
Waren beide nicht bereit, ist MB88 immer noch 2 und es geht so weiter.
Hast du irgendwann eine 7 in MB89, so bist du hinter dem letzten Eintrag für ein BM. Du kannst die verbleibenden Anfordrungen nicht bedienen und löst eine Meldung oder einen Alarm aus, damit sich jemand darum kümmert.
Die gesamte Umsetzung dieser Sache läßt sich ohne indirekte Adressierung, Pointer oder Schleifen erledigen.