INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Sequenzüberprüfung



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

14.11.2012, 08:53
Beitrag #1

DrRino Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Apr 2011

2014
2011
DE


Deutschland
Sequenzüberprüfung
Hallo Zusammen,

ich hab ein kleines Problem woran ich seit ein paar Tagen sitze.

Ich möchte zyklisch ein Abfolge von Drehzahlen/Rampen fahren.

   

Dabei gibt die letzte Zahl in jeder Zeile an alle wieviel Zyklen diese Zeile ausgeführt werden soll.
1 = jeder Zyklus
2 = alle 2 Zyklen usw

Nun möchte ich aber überprüfen ob der Benutzer falsche Eingaben gemacht hat. Hauptsächlich ob Drehzahlsprünge vorhanden sind. Im Prinzip muss ich nur überprüfen ob die Zieldrehzahl der vorherigen Zeile mit der Startdrehzahl der jetzigen Zeile übereinstimmt. Wenn nun aber einige Zeilen nur alle paar Zyklen gefahren werden, muss ich in irgendeiner Form jede mögliche Kombination von Zyklen Probieren.

Hätte ich jetzt Zyklenzahlen von 1,2,3,5 in der Sequenz müsste ich laut meinem Verständnis folgende Kombinationen überprüfen:
1
1,2
1,3
1,5
1,2,3
1,3,5
1,2,5
1,2,3,5

Richtig?
Im Prinzip müsste ich nur die entsprechenden Zeilen aus dem Array entfernen und in den verbliebenen Zeilen die Drehzahlen überprüfen.

Aber wie realisiere ich das mathematische Problem in Labview. Ich war nie besonders gut in Kombinatorik Big Grin
Das angehängte Snippet ist allerdings nur die Überprüfung der Gesamtsequenz.

Ich hoffe das mir da jemand helfen kann. Sollte ich zu einem Ergebnis kommen oder Fortschritte erzielen werde ich sie dann hier posten.

Auf gute Zusammenarbeit!
Rino

lv12_img


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
14.11.2012, 19:43
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
RE: Sequenzüberprüfung
Bahn

Gruß Markus

(14.11.2012 08:53 )DrRino schrieb:  Hätte ich jetzt Zyklenzahlen von 1,2,3,5 in der Sequenz müsste ich laut meinem Verständnis folgende Kombinationen überprüfen:
1
1,2
1,3
1,5
1,2,3
1,3,5
1,2,5
1,2,3,5

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.11.2012, 08:30
Beitrag #3

DrRino Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Apr 2011

2014
2011
DE


Deutschland
RE: Sequenzüberprüfung
Hab ich mir gedacht es es nicht so einfach ist mit dem beschreiben des Problems. Big Grin

Ich beziehe mich jetzt mal auf den Screenshot des Arrays:
1. Zahl = Startdrehzahl
2. Zahl = Zieldrehzahl
3. Zahl = Dauer
4. Schalter = Ein- oder Ausschalten der Zeile (ob diese Zeile gefahren werden soll oder nicht)
5. Ringelement = Rampenfunktion wenn Start = Zieldrehzahl wird die Drehzahl für die Dauer gehalten
6. Zahl = Alle wieviel Zyklen soll diese Zeile gefahren werden 1= jeder Zyklus; 2 = alle 2 Zyklen; 3 = alle 3 Zyklen usw
7. LED = Stellt die Aktive Zeile dar die gefahren wird

Diese Abfolge soll x-mal gefahren werden (Benutzerabhängig)
Eigentliches Problem:
Ich möchte jetzt überprüfen ob in jeder möglichen Zykluskombination die Eingaben korrekt sind und keine Drehzahlsprünge auftreten.

Habe ich jetzt Zeilen die jeden (1) Zyklus und alle (2) Zyklen gefahren werden ergeben sich folgende Möglichkeiten:
1
1,2

Für Zeilen die alle (1), alle (2) und alle (3) Zyklen gefahren werden sollen ergeben sich diese Möglichkeiten:
1 (2te Diagramm im Bild)
1,2 (3te Diagramm im Bild)
1,3 (4te Diagramm im Bild)
1,2,3 (1te Diagramm im Bild)
Siehe Bild:    

Ich muss für diese Kombinationen die Drehzahlabfolgen überprüfen ob der Benutzer einen Fehler bei der Eingabe gemacht hat. Man könnte die Freiheitsgrade auch von vornherein einschränken, allerdings würde mich die mathematische Lösung des Problems interessieren.
Ich hoffe das ich es jetzt ein wenig besser erläutern konnte. Ist immer schwierig das zu erklären wenn man im Thema drin steckt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.11.2012, 09:20
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Sequenzüberprüfung
Hallo DrRino,

in deinem Bild sehe ich keine Sprünge, nur schöne Rampen Big Grin

Im Ernst:
Entweder im Sinne einer Benutzerführung vorher Einschränkungen bei der Eingabe machen oder im Nachhinein kontrollieren.

Einfache Kontrollmöglichkeit:
- Aus den eingegebenen Daten einen Plot der Drehzahl erstellen, den der User auch gleich zu sehen bekommt. Da du ja weißt, wie deine "Zeilen" abgearbeitet werden, kannsst du auch sehr schnell einen solchen Plot generieren!
- Im Plot Drehzahlsprünge suchen: sehr einfach, wenn zwei aufeinanderfolgende Drehzahlwert (Ende zu Start der nächsten Zeile) abweichen. Für den User gleich noch farbig markieren!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.11.2012, 10:23
Beitrag #5

Morpheus Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 205
Registriert seit: Jul 2009

2019 SP1, 2020 SP1
2005
EN

8000
Schweiz
RE: Sequenzüberprüfung
Hallo DrRino

Wie Gerd schon erläutert hat, kannst du die Eingaben überprüfen.

Als Alternative könnte man auch automatisch eine Rampenfunktion ausführen, wenn Drehzahlsprünge auftreten.
So hast du sichergestellt, dass immer bei der richtigen Drehzahl gestartet wird.
Ob dies für dich in Frage kommt, musst du selber entscheiden Big Grin

Gruss
Chris
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.11.2012, 11:43
Beitrag #6

DrRino Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Apr 2011

2014
2011
DE


Deutschland
RE: Sequenzüberprüfung
Ich hab die Diagramme mal leicht modifiziert.
Jetzt wäre quasi die Gesamtsequenz also 1 & 2 & 3 gültig.
1 = Gültig
1 & 2 = ungültig
1 & 3 = ungültig

Ich kann die Rampe während des Fahrens schon einbauen, aber ich würde gern vorher wissen ob das was der Benutzer eingibt korrekt ist Smile

Wahrscheinlich werd ich schon vorher ein die Anzahl an unterschiedliche Zyklenzahlen auf 3 Begrenzen da ist der Programmieraufwand noch relativ klein.

Die Anzahl an Kombinationsmöglichkeiten beträgt 2^(n-1) wobei n die Anzahl der Elemente ist.
Bei 1,2 & 3 währen das 2^(3-1)=4
Damit kann ich schonmal eine For-Schleife aufbauen. Ich glaub dafür brauch ich noch ein paar mehr.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.11.2012, 11:50 (Dieser Beitrag wurde zuletzt bearbeitet: 15.11.2012 11:51 von GerdW.)
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Sequenzüberprüfung
Hallo Rino,

du kannst natürlich deine Energie darauf verwenden, Rekursion in LabVIEW zu erlernen (was nicht grundsätzlich falsch wäre).
Du kannst aber den Ablauf auch sehr einfach "simulieren", in dem du den oben angesprochenen Plot erstellst und dort einfach nach Sprüngen suchst. Dies hätte den Vorteil, dass du dem Benutzer gleich grafisch den Fehler zeigen kannst!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.11.2012, 15:42
Beitrag #8

DrRino Offline
LVF-Grünschnabel
*


Beiträge: 23
Registriert seit: Apr 2011

2014
2011
DE


Deutschland
RE: Sequenzüberprüfung

Akzeptierte Lösung

Ich hab mir jetzt selbst eine Lösung zusammengebaut. (siehe Anhang) lv12_img
Die Erklärung könnte jetzt etwas schwammig werden.

Im Prinzip habe ich eine Anzahl von Elementen (n).
Die Gesamtanzahl an Kombinationen ergibt sich in meinem Fall aus 2^(n-1)
Alle weiteren Spalten in der Tabelle werden nun folgendermaßen zusammengebaut:
Zeilenweises einfügen des Elements 2 bis die Elementanzahl (Beispiel Spalte 2: 2^(n-2)=8) erreicht ist (Zähler zählt hoch). Danach werden dieselbe Anzahl an Nullen eingefügt. (Zähler zählt wieder runter)
Ist die Elementanzahl (Beispiel Spalte 3: 2^(n-3)=4) erreicht werden die gleiche Anzahl an Nullen ins Array geschrieben. Kommt der Zähler bei 0 an wird wieder das Element bis zu Elementanzahl eingefügt. Solange bis die Gesamtanzahl an Zeilen erreicht ist.

Diese vorgehensweise wird für alle Elemente durchgeführt. Das gibt mir ein Array mit allen von mir benötigten Kombinationen. Funktioniert sogar mit einer größeren Anzahl an Elementen, allerdings steigt dann auch der Rechenaufwand exponentiell. Blush

   

Ich hoffe man hat ein wenig verstanden was ich hier erklärt habe. Man kann das sicherlich auch noch optimieren allerdings kenn ich mich dazu zu wenig in LabView aus. Verbesserungsvorschläge vor allem ressourcenschonendere werden gern angenommen.

Wem die neue LabView Version nicht zu verfügung steht, für den kann ich das auch gern in eine frühere Version konvertieren.

Mfg
Rino


Angehängte Datei(en) Thumbnail(s)
   

12.0 .vi  Zyklenzahl.vi (Größe: 17,24 KB / Downloads: 130)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: