LabVIEWForum.de - Technikerprojekt mit Labview und Arduino

LabVIEWForum.de

Normale Version: Technikerprojekt mit Labview und Arduino
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Noch ein Hinweis:

Die Abfrage der beiden Eingänge direkt im Haupt-VI zu machen, kann nur als Notlösung gelten. Du hast ja bestimmt festgestellt: Das Auslesen der beiden Eingänge dauert sehr lange!

Besser ist hier eine Modultrennung: Ein Modul verarbeitet alles, was mit dem Arduino zusammenhängt. Ein anderes Modul alles das, was die Ablaufsteuerung an sich betrifft.

Mach also, wenn es denn deine Zeit erlaubt, ein SubVI, das letztendlich kontinuierlich die beiden Eingänge sampelt. Deren Zustände werden dann per Melder zur Verfügung gestellt. Gesteuert wird dieses SubVI durch eine Queue.

Das Hauptprogramm, das in deinem Falle auch die Ablaufsteuerung enthalten kann, pollt in kurzen Abständen (z.B. 50ms) den Melder und reagiert entsprechend.

Mit diesem Verfahren ist die Reaktionszeit auch auf die Tastenbetätigung durch das Schrankenpersonal angemessen ...
Hallo "Ich Selbst",
vielen Dank für das VI und die schnelle Hilfe!
Damit klappt die Ansteuerung exakt so wie sie soll! Ich habe jetzt noch die Ausfahrtsschranke hinzugefügt und auch das funktioniert problemlos!
Jetzt muss "nur" noch dieses VI mit der Zählung der freien Parkplätze vernetzt werden...
Sofern es weitere Probleme gibt melde ich mich wieder Tongue
>>> Yourock <<<
Hallo nochmal,
ich habe das VI von dir um die Ausfahrtsschranke erweitert. Das funktioniert so weit auch alles aber ich habe einen kleinen Fehler, den ich mir nicht erklären kann:
Es tritt manchmal auf, dass die Ausfahrtsschranke über den IR-Sensor der Einfahrtsschranke geöffnet wird. Dieses Phänomen kann ich mir leider nicht erklären. Es tritt meistens auf, wenn der IR-Sensor recht lange ein Objekt erkennt.
Tut mir sehr Leid, dass ich schon wieder nerve Sad ich habe aber leider nur sehr wenig Wissen in Sachen LabView...
(Mein Wissensstand ist "LabView-Grundlagen 1 --> Kapitel 5.1 Bearbeiten von Arrays". Alles darüber hinaus ist durch rumprobieren, Youtube und eure Hilfe entstanden).
In Sachen Sub-VI's und dem ganzen Kram den du noch in deinem Zweiten Post genannt hast kenne ich mich demnach auch nicht aus. Da heißt es dann wieder rumprobieren sobald der komische Fehler weg ist!
Vielen Dank nochmal und einen schönen Abend noch.
Hallo Stryke,

Zitat:Es tritt manchmal auf, dass die Ausfahrtsschranke über den IR-Sensor der Einfahrtsschranke geöffnet wird. Dieses Phänomen kann ich mir leider nicht erklären. Es tritt meistens auf, wenn der IR-Sensor recht lange ein Objekt erkennt.
Die Ausfahrtsschranke wird geöffnet, wenn:
- "Taste Ausfahrt öffnen" vom User betätigt wird
- wenn im Timeout-Event der Wert von Pin11 sich ändert und ungleich Null ist

Hast du mal per Debugging (Sonden, Haltepunkte) geprüft, was von beidem Ursache für das Öffnen ist?
Wozu hast du per Errorwire eine Datenfluss-Abhängigkeit bei den diversen Vergleichen im Timeout-Event erstellt?
(08.01.2018 19:59 )GerdW schrieb: [ -> ]Wozu hast du per Errorwire eine Datenfluss-Abhängigkeit bei den diversen Vergleichen im Timeout-Event erstellt?
Um eine Reihenfolge bei der Abarbeitung der Events (durch Wert(signalisierend)) zu definieren.

Funktioniert das überhaupt?


(08.01.2018 17:50 )Stryke schrieb: [ -> ]Es tritt manchmal auf, dass die Ausfahrtsschranke über den IR-Sensor der Einfahrtsschranke geöffnet wird.
Wenn du mit LabVIEW programmierst, musst du dich um eine ausreichende Sequenzierung kümmern! Du selbst muss dich darum kümmern.
Hallo nochmal,
das Programm ist inzwischen etwas fortgeschritten: Ein Lichtsensor, der die Parkplatzbeleuchtung ansteuert ist jetzt integriert und ein Counter für die verfügbaren Stellplätze ist jetzt auch drin. Ob Parkplätze frei sind oder nicht wird über eine grüne bzw. rote LED angezeigt.

Warum ich euch wieder einmal um Rat fragen muss: Bahn
1. Bei den Schranken besteht immer noch eine kleine Fehlfunktion, dass die IR-Lichtschranke der Einfahrtsschranke zeitweise die Ausfahrtsschranke öffnet....
Diese ist aber erst einmal nicht ganz so wichtig -wäre aber trotzdem schön das gelöst zu bekommen. Tongue

Mein neues Problem beschäftigt sich mit dem nun enthaltenen Counter der verfügbaren Parkplätze.
Geplant sind 8 Parkplätze. Der Wechsel der LED von Grün auf Rot funktioniert auch schon Einwandfrei.
Nun zu meinem Problem:
2. Ich möchte, dass die Einfahrtsschranke beim Erreichen der 8/8 nicht mehr öffnet. Ich habe es schon mit vergleichen, UND-Funktion usw. versucht und effektiv locker 2-3 Stunden rumprobiert -finde aber keine brauchbare Lösung.
Ich hoffe, dass einer von euch die zündende Idee hat Smile

Ich hänge euch nochmal mein aktuelles Programm an und baue auf euch Wink
Liebe Grüße!
Ich hab da mal was vorbereitet. Was mit Queues und Melder und mit unabhängigen Modulen.

Nachtrag:
Und hab gleich mal ein Projekt daraus gemacht.
Hallo Stryke

Ich hab da nochmals was angepasst und vorbereitet.

Da ich mir schon gedacht habe, dass meine Version für dich ungeeignet ist, hab ich auch dein Programm etwas angepasst. Ungeeignet ist der Code dann, wenn du ihn nicht verstehst - aber ihn aufgrund des Technikrojektes erklären musst. Im übrigen bin ich der Meinung, dass es überhaupt nichts ausmacht, zuzugeben, etwas nicht zu verstehen. Meistens ist dann allerdings der Lehrer an diesem Zustand Schuld - er hat es nämlich schlecht oder nicht erklärt.

Folgende Hinweise zu deinem Programm:

1. Alles in ein VI zu packen, hat mehrere Nachteile:
1.1 Der Sourcecode wird irgendwann zu groß und deswegen zwangsweise unübersichtlich.
1.2 Verifizieren, Validieren und Debuggen (hat er Lehrer mal erklärt was das ist?) wird mit steigender VI-Größe überproportional schwieriger.
1.3 Der fehlende, modulare Aufbau verhindert ein Wiederverwenden von applikationsunabhängigem Code (ein Modul Arduino könnte auch für was anderes als Parklatz-Ansteuerung verwendet werden).
1.4 Der Code wird auch deswegen vergrößert, weil viele Cases notwendig sind, um die Arduino-Befehle nicht auszuführen, wenn die Arduino-Software keine Arduino-Hardware gefunden hat. Ansonsten ist nämlich das Testen des Programmes ohne Arduino-Hardware extrem mühsam.

2. Du denkst viel zu kompliziert:
2.1 Da bist du nicht der einzige ...
2.2 Warum die Zählung der belegten Parkplätze nicht genau dort machen, wo die Schranke auf und zu geht - also dort, wo der Arduino-Befehl hierfür steht?
2.3 Wo die Einfahrtschranke geöffnet wird, wird die Anzahl der belegten Plätze um eins erhöht - einschließlich Kontrolle ob das Maximum erreicht ist.
2.4 Wo die Einfahrtschranke wieder geschlossen wird, wird die Ampel entsprechend den belegten Plätzen neu berechnet.
2.5 Wo die Ausfahrtschranke geöffnet wird, wird die Anzahl der belegten Plätze um eins erniedrigt - einschließlich Kontrolle ob alle Plätze jetzt frei sind (= Null) erreicht ist.
2.6 Wo die Ausfahrtschranke geöffnet wird, wird die Ampel entsprechend den belegten Plätzen neu berechnet.
2.7 Anstelle von Lokalen Variablen sollten, gerade in LabVIEW, besser Schieberegister verwendet werden. Also alles (naja, zumindest sehr viel) in Schieberegister legen - und dann in allen Cases mit dem Wert aus dem Schieberegister arbeiten.
2.8 Da die Anzahl der belegten Plätze (jetzt aufgrund des Schieberegisters, Variablen täten es aber auch), überall verfügbar ist, kann man den Arduino-Befehl unterbinden, wenn die Parkplätze alle belegt sind ...

3. Fragen des Lehrers:
3.1 Warum geht die Ampel erst beim Schließen der Einfahrtsschranke auf Rot (wenn alle Plätze belegt sind) und nicht schon beim Öffnen?
3.2 Warum ist es bei der Ausfahrtschranke umgekehrt?
3.3 Kann es vorkommen, dass aufgrund von Vorrangproblemen (das ist eine Art Race-Condition) die Ampel einen inkonsistenten Zustand annimmt (= grün, obwohl acht Plätze belegt sind, oder umgekehrt)

4. Frage von mir:
4.1 Kannst du mal ausprobieren, ob mit meiner modularen Programmierung das Problem mit der falschen Schranke behoben ist?
Seiten: 1 2
Referenz-URLs