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 

Anfängerfragen zur Programmierung



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!

04.04.2013, 14:27
Beitrag #1

KornBanane Offline
LVF-Neueinsteiger


Beiträge: 1
Registriert seit: Apr 2013

2011
2013
DE



Anfängerfragen zur Programmierung
Hallo Forum,

bin neu hier und arbeite mich gerade in die Studentenversion von LabView2011 ein.
Zu LabView bin ich gekommen, da ich einen Weg suchte, um einfach (und mit einer grafischen Oberfläche) über die RS-232 Schnittstelle mit meinem Mikrocontroller zu kommunizieren.

Ich habe jetzt in meinem Programm die Möglichkeit verschiedene Sachen für die COM Schnittstelle einzustellen. Mit verschiedenen Buttons können dann diverse Befehle an den µC gesendet werden.

Über den Button "ADC auslesen" werden Daten an den µC gesendet, Daten vom µC empfangen, ausgewertet und angezeigt.
Dies wiederholt sich 20 mal.

Soweit funktioniert alles....

Jetzt hab ich aber noch ein paar Sachen die ich ändern will, aber weiß nicht wie ich das am besten anstelle.

1. Programmierstiel: Es kommt mir so vor als wäre meine Lösung mit den ganzen Case Strukturen viel zu übetrieben. Ich weiß aber nicht wie ich sonst auf einen Button-klick reagieren soll. Es gibt ja diese Event Struktur, aber diese wartet ja bis ein Event eintritt und solange passiert garnix -> also nützt auch nix.

2. Gegenseitiges sperren der Buttons: Wenn z.B.: der Button "ADC auslesen" gedrückt wird ist das Programm erst mal 20 sek. beschäftigt. Wird in dieser Zeit ein anderer Button gedrückt passiert zwar erst einmal nichts, aber sobalt das Programm wieder "Luft hat" wird die Aktion die sich hinter dem Button befindet ausgeführt. Das Programm merkt sich also, das ein Button gedrückt wurde.
Ich hätte es jetzt gerne so, das der Button-klick eben garnicht erst realisiert wird, wenn das Programm in irgendeiner Schleife festhängt. Gedacht hatte ich mir das über eine Art Variable die ich auf "1" setze sobald eine Case Struktur aktiv ist und wieder auf "0" setze, wenn diese abgearbeitet ist. Auf einen Button-klick wird nur reagiert, wenn diese Variable den Wert "0" hat.
Allerdings kann man in LabView mit lokalen Variablen nur im Bezug auf Anzeige und Bedienelemente verwenden soweit ich weiß - also nicht wirklich eine Variable (??)
Wie kann man dies sinnvoll lösen ?

3. Durch den Button "ADC auslesen" wird ja zyklisch (20 mal) ein Befehl an den µC gesendet und auf dessen Antwort gewartet. Ich hätte es jetzt gerne so, das ich diesen Prozess jederzeit abbrechen kann, aber mit dem selben Button ! Heißt also, sobald die Case Struktur für "ADC auslesen" aktiv ist, müsst sich die Beschriftung des Buttons ändern und auch dessen Funktion - da er ja dann die While Schleife in der Case Struktur unterbrechen soll.
Man könnte z.B.: den ADC auslesen Button unsichtbar machen wenn dieser geklickt wurde und dafür einen anderen Sichtbar machen. Nur ich weiß nicht wie ....

Hab das Programm mal als Anhang mitgeschickt, weiß noch nicht wie man das hier im Forum am besten macht. Auf Screenshots hat man sicher keinen Überblick und den Code reinschreiben wie bei c oder so geht ja auch nich....

So das waren ja jetzt ne Menge (dumme) Fragen, vielen Dank schon mal für die Hilfe.


Angehängte Datei(en)
11.0 .vi  KommFujitzu.vi (Größe: 25,4 KB / Downloads: 196)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.04.2013, 14:43 (Dieser Beitrag wurde zuletzt bearbeitet: 04.04.2013 14:46 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Anfängerfragen zur Programmierung
Hallo Korn,

1) Eine Event-Struktur kennt aber auch einen TimeOut, über den du die Abarbeitung anderer Dinge steuern kannst...
Zum "Stiel": Paralleles Verteilen einer Resource (hier: COM-Port) ist ungünstig. Jeder Button = 1 Eventcase. Auch günstig: Producer-Consumer-Schema mit Queue...

2) Dein Problem ist, dass das UI sehr viel schneller bedient werden kann als dein Programm darauf reagiert (bzw. die Befehle abarbeitet).
Mögliche Lösung: Buttons deaktivieren. Finde ich hässlich, wenn das UI dauernd rumflackert.
Mögliche Lösung: Producer-Consumer-Struktur und die Befehle per Notifier verteilt. Der Consumer erhält damit immer nur den letzten Befehl (=Tastendruck).

Es gibt sicher noch andere Lösungen, aber alle fange mit einer guten Programmstruktur an...

3) Man kann das Schaltverhalten des Buttons ändern, von Latch nach Switch. Jedem Button-State kann man einen anderen Text verpassen. In der Schleife dann testen, ob der Button noch gedrückt ist, nach der Schleife zurücksetzen (per lokaler Variable). geht, lässt sich aber auch per Producer-Consumer (und mit einer Statemachine) anders lösen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Programmierung von Legobausteinen in LabVIEW becci 4 3.960 31.03.2015 17:42
Letzter Beitrag: becci
  Programmierung - Abfahren einer Produktionsstraße nobody_knows 3 4.132 27.02.2015 18:56
Letzter Beitrag: jg
  Zufallszahl - Anfängerfragen B_IMi 3 6.974 28.09.2013 07:46
Letzter Beitrag: B_IMi
  Einstieg in LabVIEW / PXI Programmierung johannes_r 1 3.690 16.04.2009 15:31
Letzter Beitrag: Y-P
  Ein paar Anfängerfragen SuperMaWio 1 3.441 25.08.2008 07:07
Letzter Beitrag: Y-P
  Programmierung einer SPS in LV Herbert 11 11.312 15.12.2006 14:56
Letzter Beitrag: IchSelbst

Gehe zu: