Hoi
Irgendwie ist die Thematik geradezu diletantisch aber ich komm noch nicht so richtig mit den Gedanken klar.
Bevor ich mein Problem schildere und auf eure Meinung hoffe, möchte ich mal kurz meine Umgebung anreißen.
Ich hab einen PC der ein Schrittmotorkarte enthält. Diese Karte hat ein Hochspracheninterface und ich kann aus meiner Applikation heraus diverse Funktionen aufrufen. So kann ich zum Beispiel diverse Eingänge oder unterschiedliche Statusabfragen durchführen indem ich die zugehörige Funktion aufrufe und dann die Ergebnisse in meiner Applikation verarbeiten kann.
Hier mal ein kurzer Auszug um eine Variable zu lesen.
Delphi-Quelltext
1:
| rdaxstb(achsennummer, Wert) |
Damit kann ich zum Beispiel ein Bit auslesen, welches mir anzeigt, ob die gewählte Achse noch ein Profil verfährt, oder nicht mehr.
Nun vielleicht etwas mehr zu meinem Problem.
Momentan sind diverse Verfahrprozeduren realisiert und unter bestimmten Umständen tritt der Fall ein, dass ich die Achsen mittels einer Funktion des Hochspracheninterface stoppe.
Delphi-Quelltext
Da die jeweiligen Achsen generell in ihrem Trapezprofil verfahren, bremsen sie sich mittels der angegebenen Verzögerungsgeschwindigkeit ab. Dies dauert, wie man sich denken kann, eine gewisse Zeitspanne (sagen wir mal 100 ms)
Während dieser Zeit darf ich keine anderen Verfahrdatensätze starten. Um sicherzustellen das die jeweiligen Achsen wirklich stehen, kann ich die oben angebene Prozedur aufrufen und die Variable auswerten um festzustellen ob die Achse schon steht.
Zum einen kann ich das ja mittels aktivem Warten machen
Delphi-Quelltext
1: 2: 3: 4: 5:
| Wert := 0; while Wert = 0 do begin rdastb(Achsennummer,Wert); sleep(50); end; |
Wie wir hoffentlich auch alle Wissen ist diese Art des Wartens doch sehr Prozessorbelastend und ich bin auf der Suche nach einer Alternative, die mir den Prozessor schont.
Bei der Suche nach diesen Alternativen stolpere ich allerdings immer über die Tatsache das mir nichts einfällt, wie man die ganze Geschichte Prozessorsparender gestalten kann.
Ich hab schon einen Watchdogthread laufen, aber der macht im Endeffekt auch nichts anderes als die Signale auszuwerten und über Funktionsaufrufe im Hauptprogramm irgendwelche Bits zu setzen. Im Hauptprogramm selbst muß ich dann aber wieder diese Bits mittels aktivem Warten überwachen.
Hoffe ihr habt mein Anliegen verstanden und könnt mir weiterhelfen. Sind ja doch einige Käpsele hier.
Grüße
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
"So...selbst die Capitolmatratze, die hier auf jedem Karosseplan umgerutscht ist, was will sie von mir? Zahlen. Aber so ist das. Als Chef in meiner Position, da bist du so einsam wie...Gott."