Hallo Hagen
Unter Echtzeit versteht man in der Regel eine so kleine Auflösung, die reicht um die Aufgabe ohne Probleme zu lösen. Alle Steuerung haben eine gewisse Latenzzeit. Eine SPS z.B. hat auch eine gewisse Zykluszeit, welche bei anspruchsvollen Aufgaben auch zu gross sein kann. Im Gegensatz zum PC hat solch spezialisierte Hardware aber keine Aussetzer. Beim PC sind diese Aussetzer bedingt durch Zugriffe auf Festplatte, verschieben von Fenstern oder sogar blosses Bewegen der Maus. Multitasking-Systeme wie Windows haben hier ein besonderes Handikap, bedingt durch die verschiedenen Tasks. Anspruchsvolle Aufgaben schafft ein PC unter Windows desshalb nicht (z.B. Auslesen von schnellen Impulsen). In dieser Diskussion geht es um Timer, die möglichst schnell und genau sein sollten. Der PC mit Windows setzt hier gewisse Grenzen. Ich versuche nun diese so gut wie möglich auszureizen. Dazu ein Beispiel: Ich will einen Schrittmotor ansteuern. Mit dem Multimediatimer, den ich verwende erreiche ich eine max. Frequenz von 500Hz. Wenn der Schrittmotor nun 200 Schritte pro Umdrehung hat, erreiche ich 500 / 200 * 60 = 150U/min. Für meine Aufgabe reicht dies (mehr wäre zwar nicht schlecht, aber ich kann damit leben). Eine höhere Auflösung ist theoretisch möglich. Ich bin im Besitz einer Funktion, welche Microsekunden zählt. Bei meinen Versuchen mit diesem Zähler erreichte ich aber keine höhere Frequenz als mit dem Multimedia-Timer. Eine höhere Frequenz könnte sich ergeben, wenn der PC schneller ist. Einen schnelleren PC habe ich zwar nicht, doch auf auf einem langsameren (200PI statt 350PII) erreichte ich dieselbe Auflösung. Wahrscheinlich muss der PC dann ein Stück schneller sein, damit sich die Steigerung bemerkbar macht. Als zweite Möglichkeit zur Steigerung der Geschwindigkeit sehe ich noch die Optimierung: Overhead verkleinern, Thread-Priorität hoch, Routinen am Besten in Assembler, keine unnötigen Programme im Hintergrund usw. Bevor ich mich jetzt aber ans Optimieren mache, versuche ich erst einmal die Schrittmotorsteuerung zu komplettieren (Es entsteht eine TSteppermotor - Komponente, ob diese dem Overhead gut tut?)
Damit habe ich jetzt meine Erkenntnisse zusammengetragen. Auf Verbesserungsvorschläge bin ich gespannt.
Gruss And
Unter Echtzeit versteht man in der Regel eine so kleine Auflösung, die reicht um die Aufgabe ohne Probleme zu lösen. Alle Steuerung haben eine gewisse Latenzzeit. Eine SPS z.B. hat auch eine gewisse Zykluszeit, welche bei anspruchsvollen Aufgaben auch zu gross sein kann. Im Gegensatz zum PC hat solch spezialisierte Hardware aber keine Aussetzer. Beim PC sind diese Aussetzer bedingt durch Zugriffe auf Festplatte, verschieben von Fenstern oder sogar blosses Bewegen der Maus. Multitasking-Systeme wie Windows haben hier ein besonderes Handikap, bedingt durch die verschiedenen Tasks. Anspruchsvolle Aufgaben schafft ein PC unter Windows desshalb nicht (z.B. Auslesen von schnellen Impulsen). In dieser Diskussion geht es um Timer, die möglichst schnell und genau sein sollten. Der PC mit Windows setzt hier gewisse Grenzen. Ich versuche nun diese so gut wie möglich auszureizen. Dazu ein Beispiel: Ich will einen Schrittmotor ansteuern. Mit dem Multimediatimer, den ich verwende erreiche ich eine max. Frequenz von 500Hz. Wenn der Schrittmotor nun 200 Schritte pro Umdrehung hat, erreiche ich 500 / 200 * 60 = 150U/min. Für meine Aufgabe reicht dies (mehr wäre zwar nicht schlecht, aber ich kann damit leben). Eine höhere Auflösung ist theoretisch möglich. Ich bin im Besitz einer Funktion, welche Microsekunden zählt. Bei meinen Versuchen mit diesem Zähler erreichte ich aber keine höhere Frequenz als mit dem Multimedia-Timer. Eine höhere Frequenz könnte sich ergeben, wenn der PC schneller ist. Einen schnelleren PC habe ich zwar nicht, doch auf auf einem langsameren (200PI statt 350PII) erreichte ich dieselbe Auflösung. Wahrscheinlich muss der PC dann ein Stück schneller sein, damit sich die Steigerung bemerkbar macht. Als zweite Möglichkeit zur Steigerung der Geschwindigkeit sehe ich noch die Optimierung: Overhead verkleinern, Thread-Priorität hoch, Routinen am Besten in Assembler, keine unnötigen Programme im Hintergrund usw. Bevor ich mich jetzt aber ans Optimieren mache, versuche ich erst einmal die Schrittmotorsteuerung zu komplettieren (Es entsteht eine TSteppermotor - Komponente, ob diese dem Overhead gut tut?)
Damit habe ich jetzt meine Erkenntnisse zusammengetragen. Auf Verbesserungsvorschläge bin ich gespannt.
Gruss And
Comment