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!
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.
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.
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?!
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!
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.
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.
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.