LabVIEWForum.de
Warten auf Signal - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Warten auf Signal (/Thread-Warten-auf-Signal)

Seiten: 1 2


Warten auf Signal - Scarto - 19.07.2010 09:27

Folgendes Problem besteht:

Ich habe eine RS232 Anbindung. Die funktioniert einwandfrei. Irgendwann kommt darüber ein String. Sobald dieser String kommt soll der an einen anderen String angefügt werden und in eine Datenbank geschrieben werden.

Event-Strukturen reagieren ja nur auf Ereignisse am Frontpanel...gibts auch ein "Warten auf Signal"? Ich hab schon versucht die Stringlänge des RS232 Ports zu prüfen.

Hab auch schon mit Cases zu arbeiten... noch klappts nciht... Gibts da ne einfachere Struktur? Also eine Event-Struktur für Signale?


Warten auf Signal - Y-P - 19.07.2010 09:37

Schau Dich mal nach einem "dynamischen Event" um, oder verwende die Property "Value Signaling". Damit sollte es klappen.

Gruß Markus


Warten auf Signal - Scarto - 19.07.2010 13:09

So ich melde mich, weil ich seit halb elf mit der Ereignisstruktur arbeite und es nciht schaffe...

Nochmal was passieren soll: über RS232 kommen Messwerte in Stringform an. Alle haben ein Anfangszeichen(von mir definiert), Messwerte und ein Endzeichen (von mir definiert). Dieser String wird etwas bearbeitet und dann an einen anderen String gehängt. Und der fertige String wird direkt in eine MySQL Datenbank geschrieben.

Bisher hab ich mit Konstanten experimentiert und das schreiben in die Datenbank funktioniert sicher. Genauso die Kommunikation über RS232.

Mein Problem: Ich weiß nciht wann die Daten kommen. Wenn ich das Programm starte und gerade keine Daten kommen, bekomme ich eine Fehlermeldung, weil die Syntax zum schreiben in die Datenbank nicht stimmt (logischerweise).

Ich brauche jetzt eine Struktur, die sozusagen auf prüft ob Daten kommen. Wenn ja, soll der empfangene Datenstring weitergereicht werden. Wenn nciht, dann weiter warten bis was kommt.

Ich habe mittlerweile Einige VIs angeschaut mit Event Strukturen. Auch mit dem dynamischen Event. Aber ich versteh nciht wie das Ding funktioniert, was ich am Eingang haben muss und wo ich was einstellen muss...

Ich hoffe ihr habt da einen Hinweis...


Warten auf Signal - jg - 19.07.2010 13:16

So wie du das erzählst, brauchst du keine Event-Struktur, die langt die einfache Case-Struktur.
Und hier hast du eigentlich schon genau das nötige Vorgehen beschrieben:
' schrieb:Mein Problem: Ich weiß nciht wann die Daten kommen. Wenn ich das Programm starte und gerade keine Daten kommen, bekomme ich eine Fehlermeldung, weil die Syntax zum schreiben in die Datenbank nicht stimmt (logischerweise).

Ich brauche jetzt eine Struktur, die sozusagen auf prüft ob Daten kommen. Wenn ja, soll der empfangene Datenstring weitergereicht werden. Wenn nciht, dann weiter warten bis was kommt.
Wenn keine Daten da -> tue nichts.
Wenn Daten über RS232 da -> tue was, nämlich Daten in DB schreiben.

In Fall 2 kann natürlich noch ein Parser enthalten sein, der dir den empfangenen String bei Bedarf aufarbeitet.

Gruß, Jens


Warten auf Signal - Y-P - 19.07.2010 13:19

Da kannst Du auch die Funktion "Empty String" verwenden und nur wenn der String nicht leer ist an die DB senden.

In meinem Bsp. ist der String beim 5. Schleifendurchlauf nicht leer:
[attachment=27965]
Lv85_img

Gruß Markus


Warten auf Signal - SeBa - 19.07.2010 13:35

Da du ja nach den Benutzerereignissen gefragt hast...
... ob das sinnvoll ist...


Lv80_img[attachment=27966]
[attachment=27967]


Gruß SeBa


Warten auf Signal - Scarto - 20.07.2010 09:21

Ich habe jetzt ein ganz seltsames Problem.

Ich bekomme Daten über RS232. Ich schicke sie mit einem Rechner alle 5 Sekunden (so wie ich den String auch später erwarte).

Fall 1: ich lasse es nicht über RS232 laufen, sondern hab eine Stringkonstante die ich über einen Timer in LabView alle 5 Sekunden an den Baustein "DB Tools Execute Query" schicke. Alles funktionier tadellos. Alle 5 Sekunden taucht ein neuer Wert in der MySQL DB auf.

Fall 2: Ich lasse es über RS232 laufen und lasse es mir darüber alle 5 Sekunden schicken. Jetzt passiert etwas seltsames: es funktioniert nur teilweise: entweder kommt schon gleich am Anfang ein Syntaxfehler, oder ich empfange erst einige Daten die ganz normal in die DB geschrieben werden und dann kommt ein Fehler. Es ist immer der gleiche Fehler. Syntax passt nicht. Wenn dieser Fehler kommt, dann ist eigentlich der String leer.

Zum Aufbau: RS232 Wird gelesen. Dann prüfe ich ob der String mehr als 10 Zeichen hat. Das minimum das ich erwarte sind 15 Zeichen. Wenn ja (TRUE Case) wird der String zur Verarbeitung weitergeleitet. Wenn nein ein leerer String. Dann wird der String verarbeitet und an einen anderen String gehängt und dann an "DB Tools Execute Query" gereicht.

Mit Konstanten String alle 5 Sekunden gehts, mit RS232 alle 5 Sekunden gehts nicht bzw. nur sporadisch (zwischen 0 und 10 Werte werden übertragen)...jemand ne Idee?


Warten auf Signal - SeBa - 20.07.2010 09:33

' schrieb:über RS232 kommen Messwerte in Stringform an. Alle haben ein Anfangszeichen(von mir definiert), Messwerte und ein Endzeichen (von mir definiert). Dieser String wird etwas bearbeitet und dann an einen anderen String gehängt. Und der fertige String wird direkt in eine MySQL Datenbank geschrieben.

' schrieb:Wenn dieser Fehler kommt, dann ist eigentlich der String leer.

Zum Aufbau: RS232 Wird gelesen. Dann prüfe ich ob der String mehr als 10 Zeichen hat. Das minimum das ich erwarte sind 15 Zeichen. Wenn ja (TRUE Case) wird der String zur Verarbeitung weitergeleitet. Wenn nein ein leerer String. Dann wird der String verarbeitet und an einen anderen String gehängt und dann an "DB Tools Execute Query" gereicht.

1) Du schreibst du hast Start und Stoppzeichen definiert, prüfst aber nur ob >10 Zeichen vorliegen, obwohl du mindesten 15 erwartest...

2) Du schreibst beim Fehler ist der String leer? Du leitest doch einen leeren String weiter..?

Versteh ich nicht.Huh

Gruß SeBa


Warten auf Signal - Lucki - 20.07.2010 09:42

Wie Jens schon sagt, braucht Du hier keine Ereignisstruktur, und zwar deshalb nicht, weil das VI Serial Read selbst so eine Art Ereignisstruktur impliziert. Das VI wartet mit dem Lesen, bis ein bestimmtes Ereignis eintritt. Das kann sein:
a) Termchar trifft ein. Du hast zwar ein Endzeichen definiert, aber ich habe den Verdacht, das Du TermChar gar nicht aktiviert hast und von dieser komfortablen Möglichkeit der Datensteuerung gar keinen Gebrauch machst oder etwas falsch machst.
b) Bei Vorgabe einer Anzahl Bytes: Du vorgegebene Bytezahl im Buffer ist erreicht.


Warten auf Signal - Scarto - 20.07.2010 09:42

zu 1) ich warte das mindestens 10 Zeichen vorliegen und prüfe DANN auf Start Stoppzeichen. Das mache ich weil ich ab und zu auch zwar mehr als 10 Zeichen habe, aber das Ende fehlt oder so. Und da soll eine "Fehlerhafte Datenübertraggung" auftauchen. Warum ich 10 genommen habe: 15 sind es mindestens wenns richtig läuft (auch mit fehlendem Datenende), aber ich wollte nciht an der Grenze sein.

zu 2) Der String ist "leer" es wird also nichts gesendet. Warum das so ist ist klar: ich habs gemacht. Der False Case ist bei mir ein leerer String, weil ich sonst einen Fehler "fehlende Tunnelzuordnung" bekomme. Komischerweise funktionierts ja auch so manchmal

Ich habs jetzt auch gelöst: ich überprüfe den String einfach nochmal direkt bevor ich in die DB schreibe. Also noch ein CASE einbauen und ich habe mittlerweile 200 Daten erfolgreich in die DB geschrieben.