Kommunikatin mit µC - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA) +---- Thema: Kommunikatin mit µC (/Thread-Kommunikatin-mit-%C2%B5C) |
Kommunikatin mit µC - domoosma - 04.05.2011 17:43 Hallo, ich bin ein absoluter Neuling mit LabView und muss im Rahmen meines Studiums eine Bedienoberfläche für einen Servomotor gestalten. Dabei Kommunizieren der µC der Servomotorsteuerung über eine RS232 Schnittstelle mit LabView. Mein Problem ist die Kommunikatin mit dem µC während des Versuches. Dabei sollen von LabView je ms ein Messwert (4 Byte) empfangen werden. Während der Messung schleichen sich nicht gesendete Bytes (Wert 0) in die Messreihe mit ein und verhauen mir meine spätere Auswertung. Diese Werte werden nicht vom µC abgeschickt, wurde mit einem anderen Terminal bereits überprüft. Im Anhang findet Ihr mein kleines Programm zur Messwertaufzeichnung. Ich hoffe Ihr könnt mir weiterhelfen. Gruß Dominik RE: Kommunikatin mit µC - jg - 04.05.2011 18:19 Schau dir einmal genau dein Programm an. Was passiert, wenn dein VISA-Read in einen Timeout läuft und, obwohl du 1 Byte zum Lesen anforderst, einen leeren String zurückliefert? String To Byte Array wandelt das zwar in ein leeres Array um, von dem fragst du dann aber per Index Array Element 0 ab. Irgendwas muss LabVIEW jetzt zurückgeben, und somit wird eine Null ausgegeben. Schau doch mal, ob es so nicht besser läuft: [attachment=33648] Zusätzlich würde ich das Lesen umbauen, und ein Wait einfügen, um der CPU ein wenig Zeit zum Atmen zu geben: [attachment=33649] Gruß, Jens RE: Kommunikatin mit µC - Lucki - 04.05.2011 19:09 Ganz schlecht, so geht es überhaupt nicht. Du schreibst einerseits "1 Messwert = 4 Byte", behandelst aber dann jedes einzelne Byte so, als sei es der vollständige Messwert. Und wenn Du je 4 byte zu einem Messwert zusammenfassen würdest, dann gibt es Synchronisationsprobleme. Mit Synchronisation meine ich, daß nicht Byte 3+4 des letzten Messwertes mit byte 1+2 das nachfolgenden Masswertes zu einem irregulären Messwert zusammengefasst werden. Synchronisation errreicht man a) Master- Slave-Betrieb (µC sendet Messwert nur nach Aufforderung) b) Empfangene Messwerte haben Abschlußzeichen. (Falls Byte 4 des Messwertes ein solches ist, dann wäre alles gut) Ansonsten gib es noch die Möglichkeit, die Pause zwischen den Messwerten zu detektieren. Das ist hier aber gar nicht möglich, wen alle 1ms ein neuer Messwerte erwartet wird, und die Uhren in LV nur weniger als 1ms Auflösung haben. Also ich sehr hier nur eine Möglichkeit: Der µP muss ein Abschlußzeichen für jeden Messwert mitliefern. Ideal ist ein eigenes Byte, aber es kann notfalls auch ein einzelnes Bit sein, z.B. das Bit 8 in einem 7 Bit ASCII-Code. Das war zwar nicht Deine Frage, aber es dürfte Dein nächstes Problem sein. RE: Kommunikatin mit µC - domoosma - 05.05.2011 15:38 Hallo Jens, vielen Dank für deine Hilfe. Die Messwerte aufnehmen funktioniert jetzt richtig gut. Zur Erkennung wann die Messreihe eindeutig beginnt mussten wir noch ein Erkennungsbyte einfügen. Gruß Dominik |