Hallo Forums-Mitglieder,
ich arbeite zur Zeit an einer Bachelorarbeit im kardiotechnischen Bereich. Ein Teil des Projekts sieht die Siganlaufnahme von Fluss- und Druckdaten einer Herz-Lungen-Maschine (HLM) vor. Dazu habe ich mir ein CAN-USB Interface der Firma Lawicel besorgt und möchte die Daten an der Konsole der HLM abgreifen. Nach automatischer Installation der entsprechenden Treiber (ftd2xx.dll und canusbdrv.dll) ist es auch möglich die Daten mittels einer Terminalsoftware auszlesen.
Nun möchte ich aber die Daten direkt in LabVIEW aufnehmen, um diese weiterzuverarbeiten.
Um mich in die Vorgehensweise einzuarbeiten, wollte ich die auf der Homepage (
http://www.can232.com/?page_id=75) von Lawicel publizierten Beispielprogramme (siehe Anhang) durchspielen.
Beim Durchlaufen des Demo-VIs wird jedoch die Meldung "CANUSB DEVICE NOT FOUND" ausgegeben.
Muss man vorher noch irgendwo die Port-ID eingeben oder übersehe ich sonst noch etwas?
Ich wäre sehr dankbar für eure Hilfe! Ich stehe da etwas "wie der Ochs' vorm Berg"...
Mit freundlichen Grüßen
Lukas H.
[
attachment=52253]
Hallo Lukas,
Zitat:Nach automatischer Installation der entsprechenden Treiber … ist es auch möglich die Daten mittels einer Terminalsoftware auszlesen.
Dann nutze doch einfach den seriellen Port, den dir diese Treiber eingerichtet haben!
Einfach mit VISA-Funktionen auf den seriellen Port zugreifen. Dafür gibt es mitgelieferte Beispiel-VIs und auch jede Menge Threads hier im Forum!
Guten Morgen allerseits,
vielen Dank noch an Gerd für Ihre schnelle Antwort!
Ich hab das jetzt mal mit den VISA-Funktionen ausprobiert, jedoch spuckt der read-Block folgende Fehlermeldung aus:
Error -1073807339
VISA: Timeout expired before operation completed.
Ich hab die Error-Nr. bereits gegoogelt und auch bei NI nichts dazu gefunden. Hat hier jemand einen Ansatz zum Lösen dieses Problems?
Ich hänge mein Programm mal an. Hierzu darf auch gerne das ein oder andere Wort verloren werden, was besser gemacht werden kann.
Besten Dank!
[
attachment=52315]
Hallo PLH,
der Fehler basagt, dass dein Gerät nicht antwortet - zumindest nicht mit 100 Bytes oder dem TermChar…
Erwartet dein Gerät einen Befehl? Sendest du den auch?
Erwartet dein Gerät ein TermChar? Sendest du das auch?
Sendet dein Gerät ein TermChar? Hast du das richtige konfiguriert?
Funktioniert dein Gerät mit HyperTerm (o.ä.)? Wenn ja: mit welchen Einstellungen?
Hallo Gerd,
das Interface funktioniert im Terminal einwandfrei. Reagiert auch auf Befehle, etc.
Ich habe auch bei allen Einstellungen (Baudrate, Datenbits, Parität,..) im Terminal, im MAX bei der COM-Schnittstelle und im LabVIEW-Programm dieselben Werte gewählt.
TermChar wird im VISAserial-Block eingegeben und steht auf 0xA='\n'=LF (ist diese Einstellung korrekt/sinnig?).
Befehle zum Interface gebe ich über den write buffer des VISAwrite-Blocks ein (Befehle wurden von der Firma mitgeliefert).
Grüße
Lukas
Hallo PLH,
Zitat:TermChar wird im VISAserial-Block eingegeben und steht auf 0xA='\n'=LF
Dieses TermChar gilt aber nur für den Empfang von Geräteantworten - (per Default) aber nicht für deine Befehle…
Zitat:(ist diese Einstellung korrekt/sinnig?).
Das musst du im Manual deines Gerätes nachlesen…
Zitat:das Interface funktioniert im Terminal einwandfrei. Reagiert auch auf Befehle, etc.
Im Terminal wird üblicherweise an jeden Befehl ein TermChar (meist 0x0D und/oder 0x0A) angehangen. LabVIEW macht das beim Versand standardmäßig nicht. Deshalb meine Frage, ab dein Gerät bei Befehlen ein TermChar (und welches) erwartet. Wenn du weißt, welches TermChar dein Gerät erwartet, dann musst du es auch an deinen Befehlsstring anhängen!
Das automatische Terminierungszeichen kann man auch für Schreibbefehle aktivieren. Siehe folgenden Snippet:
[
attachment=52337]
Hallo zusammen!
Vielen Dank für die letzten Tips!
Ich hab jetzt mal ein neues VI nach Vorbild eines von National Instrument veröffentlichten Beispiels erstellt und versucht eure Ansätze einfließen zu lassen (siehe Anhng). Die Daten werden auch im Response-Feld ausgegeben, allerdings nicht gleichmäßig, sonder immer im Schwall. Woran könnte das liegen? Ist das ein Timingproblem? Steht irgendwas im Konflikt, das ich übersehe?
Beste Grüße
Lukas
[
attachment=52509]
Aus deiner Beschreibung wird nicht klar was dein eigentliches Problem ist. Dein aktueller Code wartet solange am Read bis die gewünschte Anzahl an Bytes anliegt oder die im Init konfiguierte Timeoutzeit abgelaufen ist. Möchtest du eigentlich nur eine definierte Antwort auf eine gesendete Anfragen erhalten oder was ist der Sinn dieses VIs?
Hallo Holy,
Das VI soll es mir ermöglichen, kontinuierlich Druck- und Flussdaten aus der Konsole einer Herz-Lungen-Maschine auszulesen. Sprich, ich gebe den Befehl zum Öffnen des CANs ein und im Responsefeld sollen dann die Daten ausgegeben werden.
Das funktioniert soweit eigentlich schon ganz gut, allerdings werden die Daten nicht wie gewünscht regelmäßig im 100ms-Abstand ausgegeben, sondern mal ca. 20 Zeilen in einem Rutsch, mal eine Zeile in einem Abstand von 5s, usw.
Und da verstehe ich einfach nicht warum das so ist und wie man dieses Problem behebt.
Gruß
Lukas