Was ist das State Machine Prinzip?
Правила форума
In unserem Forum ist es möglich Foren zu verbergen. Für jede Sprache gibt es eine Gruppe:
hide XXX forums
Wenn du also ein Forum in einer Sprache nicht sehen möchtest, dann musst du einfach in die richtige Gruppe(n) eintreten. Das kannst du in den Profileinstellungen machen.
In unserem Forum ist es möglich Foren zu verbergen. Für jede Sprache gibt es eine Gruppe:
hide XXX forums
Wenn du also ein Forum in einer Sprache nicht sehen möchtest, dann musst du einfach in die richtige Gruppe(n) eintreten. Das kannst du in den Profileinstellungen machen.
-
- user
- Сообщения: 97
- Зарегистрирован: 04 окт 2008, 14:24
- Версия LabVIEW: 8.6
- Контактная информация:
Was ist das State Machine Prinzip?
Was genau versteht man unter dem State Machine Prinzip und wie wende ich es an?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Was ist das State Machine Prinzip?
State Machine ist ein Programmiermechanismus, das dir erlaub dein Programm in mehere Schritte aufzuteilen. Man kann zwar ähnlich in LabVIEW mit einer Sequenz arbeiten, da hast du aber das Problem von einem Zustand in den vorherigen zu gehen.
Zum Beispiel hast du drei Schritte in deinem Programm:
vorfahren
stehen
rückfahren
und du willst zuerst vorfahren, dann rückfahren, dann stehen bleiben und wieder rückfahren. Mit einer Sequenz ist es nicht möglich. Da muss eine Statemachine eingesetzt werden.
Die Statemachine besteht normalerweise aus einer While-Schleife, einer Case-Struktur und einem Schieberegister in dem der aktuelle Schritt zwischengespeichert wird. Die Case-Struktur beinhaltet so viele Cases wie viele Schritte du in deiner Machine haben willst.
Probiere zuerst das zu verstehen und dann kommen bestimmt noch fragen von dir.
Zum Beispiel hast du drei Schritte in deinem Programm:
vorfahren
stehen
rückfahren
und du willst zuerst vorfahren, dann rückfahren, dann stehen bleiben und wieder rückfahren. Mit einer Sequenz ist es nicht möglich. Da muss eine Statemachine eingesetzt werden.
Die Statemachine besteht normalerweise aus einer While-Schleife, einer Case-Struktur und einem Schieberegister in dem der aktuelle Schritt zwischengespeichert wird. Die Case-Struktur beinhaltet so viele Cases wie viele Schritte du in deiner Machine haben willst.
Probiere zuerst das zu verstehen und dann kommen bestimmt noch fragen von dir.
- Вложения
-
- State.png (7.29 КБ) 10781 просмотр
-
- State.vi
- LV 8.0
- (10.93 КБ) 631 скачивание
-
- user
- Сообщения: 97
- Зарегистрирован: 04 окт 2008, 14:24
- Версия LabVIEW: 8.6
- Контактная информация:
Re: Was ist das State Machine Prinzip?
ah ok schonmal danke.
aber wenn mein ablauf genau passt also erst 1 dann 2 dann 3 und ich nicht vorhabe dazwischen zu springen ist doch die sequenz die bessere alternative oder hat die state machine noch weitere vorteile?
aber wenn mein ablauf genau passt also erst 1 dann 2 dann 3 und ich nicht vorhabe dazwischen zu springen ist doch die sequenz die bessere alternative oder hat die state machine noch weitere vorteile?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Was ist das State Machine Prinzip?
Da du die Werteerfassung als Statemachine und die Regelung als Statemachine in einer Schleife machen willst, würde ich diese Methode empfehlen, aber da könntest du fast recht haben. In deinem Fall kannst du auch ohne Statemachine arbeiten. Aber den Zustand solltest du trotzdem irgendwo merken um zu wissen ob du regeln musst oder nicht.
Probiere es doch einfach ohne Statmachine aus. Versuche mal beide Sequenzen in eine Schleife zu packen. Dann sehen wir weiter.
Probiere es doch einfach ohne Statmachine aus. Versuche mal beide Sequenzen in eine Schleife zu packen. Dann sehen wir weiter.
-
- user
- Сообщения: 97
- Зарегистрирован: 04 окт 2008, 14:24
- Версия LabVIEW: 8.6
- Контактная информация:
Re: Was ist das State Machine Prinzip?
aber wie mache ich es denn, dass die werte dann über mehrere zustände kontinuierlich gemessen werden? setze ich die messung dann einfach außerhalb der case-struktur?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
- user
- Сообщения: 97
- Зарегистрирован: 04 окт 2008, 14:24
- Версия LabVIEW: 8.6
- Контактная информация:
Re: Was ist das State Machine Prinzip?
könnte ich auch teile von der case struktur von der messung ausschließen?
-
- junior
- Сообщения: 61
- Зарегистрирован: 14 янв 2009, 11:52
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Was ist das State Machine Prinzip?
Was genau muss man denn beachten, wenn man so ein Zustandsautomat mit dem Datentypen enum anwenden will?
Also ich möchte in folgenden VIs jeweils einen Zähler entwerfen, der je nach Schalterstellung vorwärts oder rückwärts zählt. (Dient nur als kleine Übung, damit ich eben Zustandsautomaten und enum-Variablen verstehen lerne.)
Mit Strings funktioniert das ganze einwandfrei, aber wenn ich enum-Variablen werwende, läuft's nicht. Was mache ich da gerade falsch? Und wie genau arbeitet denn so eine enum-Variable?
Wär super, wenn mir jemand das erklären könnte! Danke schon mal.
Also ich möchte in folgenden VIs jeweils einen Zähler entwerfen, der je nach Schalterstellung vorwärts oder rückwärts zählt. (Dient nur als kleine Übung, damit ich eben Zustandsautomaten und enum-Variablen verstehen lerne.)
Mit Strings funktioniert das ganze einwandfrei, aber wenn ich enum-Variablen werwende, läuft's nicht. Was mache ich da gerade falsch? Und wie genau arbeitet denn so eine enum-Variable?
Wär super, wenn mir jemand das erklären könnte! Danke schon mal.
- Вложения
-
- string_statemachine.vi
- (13.94 КБ) 391 скачивание
-
- enum_statemachine.vi
- (12.94 КБ) 369 скачиваний
-
- junior
- Сообщения: 61
- Зарегистрирован: 14 янв 2009, 11:52
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Was ist das State Machine Prinzip?
hmm...also ich hab jetzt die enum-Variable mit ner Typdefinition gemacht. so funktioniert's jetzt perfekt. Aber das müsste doch auch anders gehn? kann man nicht die enum-Variablen auch anders miteinander verknüpfen, so dass sie wie bei der typedef verschiedene Instanzen kriegen?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Was ist das State Machine Prinzip?
Ne ne, so wird es auch nicht laufen. Du verwendest ja unterschiedliche Enums in deinem VI. Enum ist eine Liste von Elementen. Diese Liste fängt immer mit 0 an. Enum ist eine Umsetzung von Alias Namen zu Zahlen. Zum Beispiel:
0 = Eg
1 = LauraS
2 = Studi
3 = Nemo
Du hast in deinem VI aber folgendes gemacht:
0 = 0
1 = 1
2 = 2
3 = 3
Wenn du das so machen willst, dann brauchst du überhaupt kein Enum. Nimm doch einfach eine Numeric Konstante.
Und nun zum eigentlichen Problem. Du hast mehrere Enums verwendet.
Enum 1:
0 = 0
1 = 1
2 = 2
3 = 3
Enum 2:
0 = 1
Enum 3:
0 = 2
Enum 4:
0 = 3
Hoffentlich verständlich
0 = Eg
1 = LauraS
2 = Studi
3 = Nemo
Du hast in deinem VI aber folgendes gemacht:
0 = 0
1 = 1
2 = 2
3 = 3
Wenn du das so machen willst, dann brauchst du überhaupt kein Enum. Nimm doch einfach eine Numeric Konstante.
Und nun zum eigentlichen Problem. Du hast mehrere Enums verwendet.
Enum 1:
0 = 0
1 = 1
2 = 2
3 = 3
Enum 2:
0 = 1
Enum 3:
0 = 2
Enum 4:
0 = 3
Hoffentlich verständlich
-
- junior
- Сообщения: 61
- Зарегистрирован: 14 янв 2009, 11:52
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Was ist das State Machine Prinzip?
Ja, sehr verständlich, vielen Dank...eg писал(а): Hoffentlich verständlich
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Was ist das State Machine Prinzip?
Typedefs nutze ich auch. Du kannst auch ohne Typedef arbeiten. Einfach die erstellte Enum-Konstante kopieren. Nur, wenn du Änderung machst, musst du alle anderen auch mitanpassen. Diese Arbeit macht halt Typedef für dich.LauraS писал(а):hmm...also ich hab jetzt die enum-Variable mit ner Typdefinition gemacht. so funktioniert's jetzt perfekt. Aber das müsste doch auch anders gehn? kann man nicht die enum-Variablen auch anders miteinander verknüpfen, so dass sie wie bei der typedef verschiedene Instanzen kriegen?