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!
Hallo,
ich benutzte die Serial VISA Funktionen, um mit einem Gerät über das Bitbus-Protokoll zu kommunizieren.
Ich sende einen Befehl und warte solange, bis ETX (EndTX) als Termination Char kommt.
Da es sich ja um eine Modemstrecke handelt auf der schon mal Störungen auftreten können,
wäre es schön, wenn der Serialbuffer erst Daten annimmt, wenn STX (StartTX) signalisiert wird.
Bisher habe ich einfach kurz vor Read den Eingangsbuffer geleert (Flush).
Freu mich über jede Antwort, Gruß Simon
das Problem ist in jeder textbasierten Programmiersprache einfach durch eine Statmaschin
zu lösen in LabVIEW wahrscheinlich nur über "Krücken".
also ich würde es so machen
1. erst einmal die serielle Schnittstelle auf zeichenweisen Empfang einstellen
2. in einer While-Schleife mittels Schieberegister einlaufene Zeichen sammeln
3. den zeichenweise gesammelten String auf das Muster STX, Daten, ETX parsen
4. den Empfangsstring aus dem String entfernen usw.
Ich denke das wird aber nur bei sehr kleinen Baudraten fehlerfrei funktionieren.
Da die Profis ja mit etwas Aroganz auf die Frage reagiert haben
hätte ich noch folgendes zu sagen:
1. gut wäre es, immer das nicht funktionierende VI mit einstellen;
2. welche Wege zur Lösung wurden schon beschritten ?
das Problem ist in jeder textbasierten Programmiersprache einfach durch eine Statmaschin
zu lösen in LabVIEW wahrscheinlich nur über "Krücken".
(...)
Eine Statemaschine ist auch in LV leicht zu realisieren..
Aber warum nicht einfach ein gescheites Protokoll mit Checksum und Timestamp/Blocknummer über die RS232 (egal ob jetzt mit oder ohne Modem-Strecke dazwischen) fahren?
Und wenns zurnot SLIP(TCP/IP) auf RS232 is.
Gruß, Robert
Bitte Beachten:
Die obenstehenden Texteile können unter Umständen Sarkasmus und Ironie enthalten, für nicht erkannten Sarkasmus oder nicht erkannte Ironie wird keine Haftung übernommen.
N.B.: "Multiple exclamation marks, " he went on, shaking his head, "are a sure sign of a deseased mind." - Terry Pratchett
' schrieb:Eine Statemaschine ist auch in LV leicht zu realisieren..
Aber warum nicht einfach ein gescheites Protokoll mit Checksum und Timestamp/Blocknummer über die RS232 (egal ob jetzt mit oder ohne Modem-Strecke dazwischen) fahren?
Und wenns zurnot SLIP(TCP/IP) auf RS232 is.
Gruß, Robert
Hallo Robert hier mein Kommentar zu deiner Meinung bezüglich Statmaschin,
wer schon mal eine Statmaschin, die ereignisgesteuert Schnittstellenprotokolle decodieren soll
(egal ob CAN, Ethernet, Rs232...) in C oder Cpp programmiert hat und dann in einem Projekt
etwas ähnliches in LabVIEW machen muß, ich denke der kennt den Unterschied.
Wenn man wissen würde was man alles nicht weiß, dann wäre man ein Genie, oder ?
Ich versuche solche unkonstruktiven Beiträge in Zukunft zu vermeiden, versprochen.
' schrieb:Ich denke das wird aber nur bei sehr kleinen Baudraten fehlerfrei funktionieren.
Du bist ja schlimmer als ich.
Was sind denn "sehr kleine Baudraten"? Ich wage zu sagen 57,6kBaud gehen auf Anhieb.
Zitat:wer schon mal eine Statmaschin, die ereignisgesteuert Schnittstellenprotokolle decodieren soll (egal ob CAN, Ethernet, Rs232...) in C oder Cpp programmiert hat und dann in einem Projekt etwas ähnliches in LabVIEW machen muß, ich denke der kennt den Unterschied.
Den Unterschied kenne ich wohl, bisher hab ich noch nichts gefunden, was in C++/Delphi geht und in LV nicht. Außer dass mir ständig die LV-IDE abstürzt. Aber das hat ja nichts mit meiner Programmierung zu tun.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
17.05.2008, 09:53 (Dieser Beitrag wurde zuletzt bearbeitet: 17.05.2008 09:53 von rolfk.)
das Problem ist in jeder textbasierten Programmiersprache einfach durch eine Statmaschin
zu lösen in LabVIEW wahrscheinlich nur über "Krücken".
also ich würde es so machen
1. erst einmal die serielle Schnittstelle auf zeichenweisen Empfang einstellen
2. in einer While-Schleife mittels Schieberegister einlaufene Zeichen sammeln
3. den zeichenweise gesammelten String auf das Muster STX, Daten, ETX parsen
4. den Empfangsstring aus dem String entfernen usw.
Ich denke das wird aber nur bei sehr kleinen Baudraten fehlerfrei funktionieren.
Punkt 4 kannst Du ganz einfach immens verbessern indem Du Punkt 1 ganz weg lässt. Was soll denn der zeichenweise Empfang lösen? Du musst ja die Daten ohnehin in einem Zwischenspeicher (Schieberegister) ablegen und ob da jetzt jeweils ein Character reinkommt den Du dann checkst oder ein String den Du dann in LabVIEW parst macht wirklich keinen grossen Unterschied in Komplexität aber einen recht grossen in Schnellheit.