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 

Warten auf Signal



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!

19.07.2010, 09:27
Beitrag #1

Scarto Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jul 2010

8.5
2010
de


Deutschland
Warten auf Signal
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?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.07.2010, 09:37
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

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

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.07.2010, 13:09
Beitrag #3

Scarto Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jul 2010

8.5
2010
de


Deutschland
Warten auf Signal
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...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.07.2010, 13:16
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Warten auf Signal
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

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.07.2010, 13:19
Beitrag #5

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Warten auf Signal
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:

Sonstige .vi  Empty_String.vi (Größe: 8,11 KB / Downloads: 294)

Lv85_img

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.07.2010, 13:35
Beitrag #6

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Warten auf Signal
Da du ja nach den Benutzerereignissen gefragt hast...
... ob das sinnvoll ist...


Lv80_img
Sonstige .vi  Benutzerereignis.vi (Größe: 12,01 KB / Downloads: 234)

   


Gruß SeBa

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
20.07.2010, 09:21
Beitrag #7

Scarto Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jul 2010

8.5
2010
de


Deutschland
Warten auf Signal
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?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.07.2010, 09:33
Beitrag #8

SeBa Offline
LVF-Guru
*****


Beiträge: 2.025
Registriert seit: Oct 2008

09SP1 & 10 FDS
2008
DE

65xxx
Deutschland
Warten auf Signal
' 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

Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.

Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.

Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.07.2010, 09:42
Beitrag #9

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Warten auf Signal
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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.07.2010, 09:42
Beitrag #10

Scarto Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jul 2010

8.5
2010
de


Deutschland
Warten auf Signal
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.
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
  Wie auf abgearbeitete Queue warten mez15 11 8.085 28.09.2017 13:02
Letzter Beitrag: TR61
  Auf Benutzereingabe in einer State-Machine warten, ohne diese zu blockieren Gigantbohne 11 9.373 11.05.2015 17:27
Letzter Beitrag: Gigantbohne
  Bestimmte zeit warten und Messwerte aufzeichnen Simon169 1 3.720 28.04.2014 12:33
Letzter Beitrag: Y-P
  Probleme mit SubVI und Funktion ´Warten bis zum nächssten Vielfachen von ms´ Herby07 3 8.894 27.04.2014 09:53
Letzter Beitrag: Herby07
  warten in For-Schleife Labviewnoob2000 1 4.556 11.11.2013 19:04
Letzter Beitrag: Lucki
  Wie auf Ergebnisse aus reentranten VIs warten? toaran_ 3 3.602 24.01.2013 19:04
Letzter Beitrag: jg

Gehe zu: