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.2014, 15:22 (Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2014 16:27 von kallejoerg.)
über USB habe ich einen Mikrocontoller mit meinem PC verbunden. Sobald sich ein boolscher Wert bzw. numerischer Wert auf mein Frontpanel ändert, schickt LabView Daten an den Mikrocontroller. Messende Sensoren am µC senden Daten an LabView, wenn diese sich über über einen bestimmten Toleranzgrenze ändern.
Eine Ereignisstruktur ermöglicht mir problemlos die Daten via VISA an den µC zu senden. Das Empfangen habe ich, wie das Bild im Anhang zeigt, in meinem Timeout gepackt. Dies funktioniert, jedoch ist ersten das Timeout dafür nicht da und zweiten liest er immer.
Folgender Versuch hat auch nicht geklappt:
Die Funktion Byte at Port habe ich vor die Ereignisstruktur gepackt und einer Variablen zugeordnert. Im Anschluß eine neues Ereignis-Case generiert "Daten lesen". Dieses Case soll aktiviert werden, wenn sich eine Wertänderung in der Variable "Byte at Port" erfolgt.
Jedoch wird die Wertänderung im Ereignis-Case nicht erkannt und somit nicht aktiv und die Funktion Byte at Port erkannt auch Daten die von LabView zum µC gesendet werden.
Hat jemand ein Tipp wie ich ein Ereignis aktivieren kann, wenn Daten am Port vom µC zu LabView anliegen?
Ich Danke vorab für eure Hilfe.
Beste Grüße und ein schönes Wochenende
Kalle
14.11.2014, 16:41 (Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2014 16:49 von Lucki.)
(14.11.2014 15:22 )kallejoerg schrieb: Hat jemand ein Tipp wie ich ein Ereignis aktivieren kann, wenn Daten am Port vom µC zu LabView anliegen?
Einfach die "Zeilenendeerkenung" aktivieren. Standardmäßig ist das sogar schon der Fall. VisaRead wartet dann solange, bis ein Zeilenendezeichen im Empfangspuffer ist und liest dann die gesamte Zeile aus. Das Eintreffen des Zeilenendezeichens ist das Ereignis, das Ganze ist eigentlich eine Ereignisbehandlung, aber man braucht dazu keine Ereignisstruktur. (Damit es funktioniert: An den Eingang Byteanzahl eine Konstante anschließen, die größer ist als die zu erwartenden Zeilenlänge. Nicht die Funktion Bytes at Board verwenden!)
Der µC muß die Daten natürlich im entsprechenden Format, d.h mit Zeilenendezeichen, senden. Normalerweise sollte das der Fall sein, aber je nachdem wer den µC progammiert hat, ist natürlich alles Andere auch möglich.
vielen Dank für deinen Beitrag. Jedoch kann ich nicht richtig damit was anfangen, da ich an der Ereignisstruktur eigentlich festhalten wollte.
In dieser befindet sich auch Cases zum schreiben an den µC, sprich die bei Wertänderung der Inputs am Frontpanel aktiviert werden.
Im Anhang ein Minimalbeispiel. Wenn sich somit der boolsche LED Botton ändert, sendet LabView Daten an den µC (Arduino). Wenn keine Eingabe erfolgt, jedoch Daten von Mikrocontroller gesendet werden, soll ein separates Case aktiv werden, wo Daten von µC gelesen werden. Im Anschluß sollen die Daten im Frontpanel aktualisiert werden.
Mein Minimalbeispiel funktioniert, jedoch möchte ich den Inhalt aus dem Timeout haben.
Kann das mit deiner angesprochenen Zeilenenderkennung umgesetzt werden?
Beste Grüße
Kalle
17.11.2014, 09:24 (Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2014 09:32 von Lucki.)
Vergiss die Zeilenende-Erkennung. Du sendest ja die Bytes direkt und nicht als Text. Das hat den Vorteil, dass man nur halb so viele Bytes zur Übertragung braucht. Bei sehr hohen Datenraten notwendig, sonst aber eher ungünstig. Bei der üblichen Datenübertragung von Zahlen in Form eines lesbaren ASCII-Textes braucht man hingegen 2 Zeichen (0..9, A..F) für jedes Zahlenbyte, was aber den Vorteil hat, dass Zeilenendezeichen und andere Zeichen als Steuerzeichen zur Verfügung stehen.
Die Kommunikation und Synchronisation wird aber dann schwieriger. Man weiß nicht mehr, was Anfang und Ende einer Message ist. (Man kann es nur an den Pausen zwischen 2 Nachrichten erkennen). Ich kann Dir hier keine Empfehlung geben, man müßte die Formate aller Nachrichten genau wissen.
Übrigens: Die Konverierung der 4 Byte in U32 und DBL ginge einfacher so:
danke für deine Nachricht und den Konvertierung-Tipp!
Es werden max. 4 Sensoren, sprich 4x4 Byte, hintereinander vom µC zu LabView gesendet. Im Anhang das Bild wie in LabView die 4x4Bytes gelesen werden (nach alt - dein Konvertierung-Tipp wird umgesetzt).
Langfristig würde ich gern vom µC 5 Bytes senden (1Byte Sensoradresse, 4Byte Sensorwert).
Sprich, wenn sich einer der 4 Sensoren im Toleranzfeld ändert, sendet der µC an LabView die entsprechende Sensoradresse und den Sensorwert (Sensorwert kann sich sekündlich oder stündlich ändern). Somit muss nur gelesen werden, wenn wirklich was passiert. Aber dafür brauche ich eine Ereigniserkennung, dass Daten vom µC kommen.
Zumindest ist das meine Umsetzungsidee.