LabVIEWForum.de - Alive-Abfrage beim Mikrokontroller

LabVIEWForum.de

Normale Version: Alive-Abfrage beim Mikrokontroller
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Guten Tag,

Gegebene Situation:
Ich habe einen Mikrokontroller, worauf 6 LEDs zu Übungszwecken angebracht wurden. In meinem VI gebe ich eine Dezimalzahl ein und die LEDs zeigen die Dualdarstellung davon an.
Das funktioniert auch sehr gut.
Nun möchte ich noch versuchen nur durchs Auslesen, das die LEDs passend leuchtet auf dem Frontpanel angezeigt werden.

Das Problem:
Alle 5s muss ich dem Mikrokontroller die Anfrage "@X*" senden worauf er mir ein "OK" sendet. Damit signalisiert er mir, dass die Verbindung noch steht. Ansonsten erhalte ich ein "Verbindung unterbrochen".
Ich weiß leider nicht, wie ich diese Statusabfrage sauber parallel zu meinem Program laufen lassen kann. Denn ohne diese Abfrage verschiebt sich mein LED Muster.
Nach 5s erhalte ich ein "Verbindung unterbrochen", dann überspringt mein Programm diese LED und irgendwie verschiebt sich dann auch das Muster.
  • Wie kann ich diese Statusabfrage abwickeln?
  • Wie kann ich dem VI sagen, dass es in dem Fall nichts tuen soll?

Gruß Atilla

lv11_img [attachment=42599]
Hallo Attila,

Zitat:Wie kann ich diese Statusabfrage abwickeln?
Befehl zum Gerät senden, Antwort abfragen...

Zitat:Wie kann ich dem VI sagen, dass es in dem Fall nichts tuen soll?
Case-Strukturen nutzen...

Im Ernst:
- RubeGoldbergs entfernen (z.B. Bool erst nach String wandeln, dann diesen String auf "1" testen: da kann man gleich mit dem Bool arbeiten oder noch schlimmer: die geschachtelten Case-Strukturen zum Anzeigen der LEDs)
- eine Mini-Statemachine für Befehlsversand und Abfrage entwerfen: so bekommst du immer die Antwort auf deinen Befehl geliefert
- In der Hauptschleife je nach Befehl die Antwort auswerten: Case-Strukturen nutzen
Hallo GerdW,

Meintest du das ca. so [attachment=42623] lv11_img ?

Also ich die Statusabfrage noch nicht eingefügt, aber ich über die Cases der LED Ausgabe nachgedacht und überlegt, dass es vll einfacher wäre diese in ein Array zu packen.

Doch meine Umsetzung ist mir nu schwach gelungen. Aber ist es nun in dem Sinne, wie du es gedacht hast? Oder sehe ich das Ganze nun etwas zu kompliziert?

Das Schreiben auf den Mikrokontroller funktioniert noch wie zuvor ohne Probleme. Das Auslesen nicht.

Ich danke dir für deine Mühe.

Lg Atilla
Hallo Attila,

zwei Verbraucher an nur einer Queue, das kann nicht funktionieren!
Es geht nur "mehrere Producer, ein Consumer". Andersherum gibt es Ärger!
(11.12.2012 12:04 )Atilla schrieb: [ -> ]Alle 5s muss ich dem Mikrokontroller die Anfrage "@X*" senden worauf er mir ein "OK" sendet.
Keine Antwort, nur Zwischenfrage:
Die serielle Kommunikation wird immer viel einfacher, wenn die Sende- und Antwortstrings mit Zeilenendezeichen abschließen. Wäre das hier der Fall?
(13.12.2012 14:04 )Lucki schrieb: [ -> ]
(11.12.2012 12:04 )Atilla schrieb: [ -> ]Alle 5s muss ich dem Mikrokontroller die Anfrage "@X*" senden worauf er mir ein "OK" sendet.
Keine Antwort, nur Zwischenfrage:
Die serielle Kommunikation wird immer viel einfacher, wenn die Sende- und Antwortstrings mit Zeilenendezeichen abschließen. Wäre das hier der Fall?

Ich hoffe ich habe deine Frage richtig verstanden.
Aber ich denke schon. Die Sendestrings habe eine bestimmte Struktur und fangen mit @ an und enden mit *. Die Antwortstrings nicht. Das sind einfach nur bestimmte Zeichen. bzw. Doch wenn ich abfrage welche LED leuchter erhalte ich @1/0* je nach dem ob die an ist oder nicht. Alle anderen Antworten die ich bekomme sind irgendwelche Strings.

@GerdW
Ok, also alles revidieren und von neuem anfangen.
Aber die idee mit dem LED string ist die besser?
Ich weiß doppel post sind nicht erwünscht, aber die Bearbeitungszeit ist viel zu kurz eingestellt.

[attachment=42649] lv11_img

Ich habe mein Vi soweit wieder geändert. Nun schicke ich das Alive Signal einfach automatisch jedes mal mit. Beim Auslesen prüft er ob er eine DBL erhält, wandelt diese in Boolean um und schreibt sie in ein Array. Falls er aber keine DBL schmeißt er einen Fehler aus und hier ist das Problem. In dem Case, wo ich nichts dem Array übergebe, macht meine ausgabe einen Sprung und das Bild verschiebt sich um eine Stelle.

Also im Grund habe ich es geschafft, die unerwünschte Ruckmeldung auszufilter, doch dabei entsteht nun ein Loch, was trotzdem alles verschiebt.

Wie kann ich dem Array sagen, dass er einfach den vorherigen Wert an dieser Stelle beibehalten soll? Zur Zeit mache ich" Standart verwenden, wenn nicht verbunden", aber was sendet er wenn hier ein Hacken gesetzt wird? Was ist Standart?
Hallo Attila,

Zitat:Also im Grund habe ich es geschafft, die unerwünschte Ruckmeldung auszufilter, doch dabei entsteht nun ein Loch, was trotzdem alles verschiebt.
Wie kann ich dem Array sagen, dass er einfach den vorherigen Wert an dieser Stelle beibehalten soll? Zur Zeit mache ich" Standart verwenden, wenn nicht verbunden", aber was sendet er wenn hier ein Hacken gesetzt wird? Was ist Standart?
Standard ist immer der "Grundwert" des jeweiligen Datentyps, also FALSE oder 0 (bool, Zahl)...

Überlegen wir mal kurz:
Code:
WENN kein Fehler
DANN empfangenen Wert ans Array anhängen
SONST nichts am Array ändern
Wenn/Dann/Sonst ist in LabVIEW die klassische Case-Struktur und in die beiden Cases kommt der passende Code hinein...

Ich würde das so machen:
[attachment=42650]
Sieht das logisch für dich aus?
Zitat:Sieht das logisch für dich aus?

Irgendwie schon, aber irgendwie auch nicht. Passiert dann nicht das selbe? Also wenn Fehler ist dann sendet Er eine 0.

Danke fur deine erklärung und Verbesserung.
Hallo Attila,

Zitat:Irgendwie schon, aber irgendwie auch nicht.
???

Ich habe deine Anforderung in Pseudo-Code umgewandelt. Der sollte doch noch logisch sein.
Dann habe ich diesen Pseudo-Code in LabVIEW nachgestellt. Dein Fehler war, dass du sowohl für DANN als auch für SONST einen Wert ins Array eingefügt hast - obwohl du selbst geschrieben hattest, dass du dies doch gar nicht willst...
Seiten: 1 2
Referenz-URLs