21.01.2008, 14:14
In einer Steuerung, mit einer State Machine umgesetzt, habe ich u.a. eine Motorsteuerung umgesetzt. Der Motor fährt so lange in eine Richtung, bis er in Grundstellung (Motor Endlage Normal) ist. Wenn der Motor diese Endlage in einer gewissen Zeit nicht erreichen sollte, wird der Motor gestoppt und eine Fehlermeldung ausgegeben. Programmiert habe ich das zwar, nur hätte ich gerne gewusst, ob man das auch ohne Global Variables realisieren kann, da man diese ja vermeiden soll. Ein Shift-Register finde ich nicht so optimal, da die State Machine viele States beinhaltet und dadurch der Verdrahtungsaufwand zu groß wird.
Im Bild Motor Endlage Normal.jpg werden die Endschalter des Motors abgefragt. Ist der Endschalter nicht betätigt, wird der Motor eingeschaltet und dieser State wieder angesprungen, bis der Motor den Endschalter erreicht. Dann wird der Motor ausgeschaltet Motor Position.jpg und es geht es mit dem nächsten State weiter. Im State Motor Endlage Normal wird auch noch, wie oben beschrieben, die Zeit überwacht. Dazu wird im vorhergehenden State Start-Zeit.jpg der Zeitstempel in der Global Variable abgelegt, um den Startpunkt des Motors später im State Motor Endlage Normal zu vergleichen.
Die Sub-VIs DIO Ein bzw. DIO Aus dienen dazu die Ports gezielt ein- bzw. auszuschalten.
Mit Global bzw. Local Variables kann man das zwar recht übersichtlich programmieren, aber laut NI-Regeln soll man diese ja nicht unbedingt einsetzen. Welche sinnvolle Alternative gibt es sonst?
Das ist mein erstes Programm mit LabVIEW, deshalb bin ich für jeden Hinweis dankbar.
Gruß
Frank
Im Bild Motor Endlage Normal.jpg werden die Endschalter des Motors abgefragt. Ist der Endschalter nicht betätigt, wird der Motor eingeschaltet und dieser State wieder angesprungen, bis der Motor den Endschalter erreicht. Dann wird der Motor ausgeschaltet Motor Position.jpg und es geht es mit dem nächsten State weiter. Im State Motor Endlage Normal wird auch noch, wie oben beschrieben, die Zeit überwacht. Dazu wird im vorhergehenden State Start-Zeit.jpg der Zeitstempel in der Global Variable abgelegt, um den Startpunkt des Motors später im State Motor Endlage Normal zu vergleichen.
Die Sub-VIs DIO Ein bzw. DIO Aus dienen dazu die Ports gezielt ein- bzw. auszuschalten.
Mit Global bzw. Local Variables kann man das zwar recht übersichtlich programmieren, aber laut NI-Regeln soll man diese ja nicht unbedingt einsetzen. Welche sinnvolle Alternative gibt es sonst?
Das ist mein erstes Programm mit LabVIEW, deshalb bin ich für jeden Hinweis dankbar.
Gruß
Frank