LabVIEWForum.de - lesen von der seriellen schnittstelle

LabVIEWForum.de

Normale Version: lesen von der seriellen schnittstelle
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
hi!
ich hab da ein spezielles problem!

meine aufgabenstellung umfasste das sekündliche einlesen von der seriellen schnittstelle.
ich hab das ganze folgendermaßen realisiert:
es wird in einer while schleife abgefragt wieviele bytes am seriellen eingang(bei mir immer 19) liegen und anschließend immer ein byte von der seriellen gelesen
die schleife läuft solange,bis ein zähler den stand 19 erreicht;der string wird dann zerlegt und weiterverarbeitet
das ganze funktioniert auch tadellos

folgendes:
will ich nun eine zweite abbrechbedingung für die schleife hinzufügen (z.b sollte dreimal beim einlesen eine null an der seriellen liegen,daß heißt es befindet sich kein string an der seriellen,so soll die schleife abgebrochen werden und nicht endlos weiterlaufen,weil der zählstand 19 nicht erreicht wird)
ich hab das dies ebenfalls realiesiert.man braucht ja nur auf null abfragen und ein oder gleid dazugeben.

mein problem:
im highlight modus funktioniert das programm
befinde ich mich im normalen modus,so erhalte ich ständig null als ausgangsstring

wär echt totall nett,wenn mir da jemand weiterhelfen könnte.

ich denke an meinen abbruchbedingungen für die schleife liegt es nicht.
hab schon mehrere bedingungen dafür entwickelt und alle haben im highlight modus funktioniert.

gruss
roman
Hi Roman

Ich glaube das du ein zeit problem hast. Im hight light modus läuft dein programm sehr langsam und du hast immer was an der schnittstelle. läuft nun dein programm normal so hast du wahrscheinlich nicht immer daten an der schnittstelle.

gruß

jürgen
na buhrz, das kanns doch auch net sein, wenn er mit dem property node arbeitet und den puffer staendig abfraegt!

ich wuerde drauf tippen, dass deine "logik" zur eruierung der 3 aufeinander folgenden "0" falsch ist...
-> die frage ist jetzt nur noch, warum fkt. es im highlight modus +gruebel gruebel+ :roll: :roll:

hmmm, hmmmmmmmmmmm weilst da niemals 3nullen hintereinander bekommst bzw. bekommen hast?! Big Grin
hi!

kann mir nicht vorstellen,dass es ein problem mit der zeit gibt.

die drei nullen bekomm ich auch.

ich versteh es nur nicht,warum es im highlight modus tadellos funktioniert und im normalbetrieb nicht.

ich werd euch mal das programm mitschicken.

wenn ihr zeit habt,könnt ihr ja einen blick drauf werfen.

würd mich über jede antwort freuen.

gruss
roman
generell ist mal zu sagen:
1. zieh die serial init unbedingt vor die schleife!
2. so wie ich die logik in deiner "read schleife" verstehe, kann das gar net fkt, weil du immer nach 3mal false abbrichst - sprich, sobald einmal eine zahl kommt, wird der zaehler nicht zurueck gesetzt - zudem machst du es auch nicht davon abhaengig, was am port gelesen wird, sondern lediglich davon, ob was im puffer der seriellen steht oder nicht!

Deine Aussage vorhin bezueglich "du liest alle sekunden was vom port" stimmt auch nicht, denn die schleife laeuft ungetimed!
Gib mal einen chronographen mit 1sec wartezeit rein und beobachte nochmals was passiert - die duerfte dein generelles problem beheben!
hi!

wollt dir noch was wichtiges zeigen.

die Version sunmaster130S_v2.vi funktioniert tadellos.
gibt man jetzt die erkennung hinzu,ob bytes an der seriellen anliegen (Version sunmaster130S_v7.vi) funktioniert nichts.das programm liefert ständig als ausgangstring "xy". es erkennt nicht mehr,dass doch bytes anliegen.

wär echt voll toll,wenn du noch einen tipp für mich hättest.

hab das mit der init probiert.dann funktioniert aber nichts mehr.

gruss
roman
Hi freedive

Vielleicht postet er ja noch sein VI hier dann können wir mal schauen was er so macht

Gruß

Jürgen
hi!

hab mein vi jetzt hineingestellt.

hab eine zeitverzögerung in die while schleife gegeben.
in diesem vi ist die verzögerung noch nicht enthalten.

jetzt funktioniert es.

gruss
roman
hi!

hab ich noch vergessen zum sagen. die zeitverzögerung in der kleineren while schleife muss mindestens 160ms sein,sonst funktioniert das programm nicht.
nächste problem wär dann,dass ich nicht mehr auf eine sekunde als intervall komm.
kleinster messzyklus wär dann nur mehr 4s.

gruss
roman
Hallo Roman,

roman_bock schrieb:die Version sunmaster130S_v2.vi funktioniert tadellos.
gibt man jetzt die erkennung hinzu,ob bytes an der seriellen anliegen (Version sunmaster130S_v7.vi) funktioniert nichts.das programm liefert ständig als ausgangstring "xy". es erkennt nicht mehr,dass doch bytes anliegen.

Aufgrund des Strings den du an das Gerät sendest und dem was ich der Rückantwort entnehmen kann, vermute ich, dass das Gerät ein mehr oder minder vernünftiges Protokoll abwickelt. Es wäre aus meiner Sicht besser, wenn du dieses zuminest Ansatzweise implementieren würdest.

So wie du das jetzt machst, versuchst du auf den Zustand "das Gerät sendet keine Zeichen mehr" zu warten. Das funktioniert aber nicht, weil du dabei überhaupt keinen Zeitraum definiert hast innerhalb dessen das Gerät normalerweise seine Zeichen sendet (timeout). Oder anders formuliert, dein "Timeout" ist erheblich niedriger, als die Zeit zum übertragen eines einzelnen Zeichens bei 1200 Baud.

Vorschlag: Wirf die Schleife komplett raus und setze den timeout für die serielle Kommunikation auf einen vernünftigen Wert innerhalb dessen dein Gerät üblicherweise antwortet. Anstatt nur ein Byte zu lesen, liest du gleich alle 19 Bytes. Bei der Konfiguration der seriellen Schnittstelle setzt du den Eingang "Enable Termination Char" auf FALSE.
Seiten: 1 2
Referenz-URLs