Visa Termination - 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: Visa Termination (/Thread-Visa-Termination) Seiten: 1 2 |
Visa Termination - Gottimp - 04.03.2021 17:51 Nabend Zusammen, ich habe heute versucht ein einfaches Programm zu realisieren, welches mir eine 18 Byte Nachricht über eine serielle Schnittstelle (UART) ausliest und darstellt.(Siehe Anhang) Leider funktioniert es noch nicht so wie gewünscht. Die zu lesende Nachricht besteht aus 18 Byte, wobei das 18te Byte der Terminator der Zeichenkette ist "\0". Meine Fragen wären: 1. Muss ich dann bei Visa-lesen 17 oder 18 Byte angeben? 2. Wie kann ich die Terminierung auf "\0" setzen? 3. Kann jemand andere Fehler entdecken, weshalb das Programm nicht funktioniert?( etwas Grundlegendes außer Acht gelassen oder eher ein Hardwareproblem? Ich nutze digitus usb zu seriell konverter) edit: 4. Spielt es eine Rolle ob ich die Anzeigeelemente in der Schleife habe oder nicht? Falls euch noch weitere Informationen fehlen, um mir zu helfen, reiche ich diese gerne nach. Ich freu mich auf eure Antworten, bleibt gesund Gruß Gotti RE: Visa Termination - jg - 04.03.2021 18:22 Hallo Gotti, (04.03.2021 17:51 )Gottimp schrieb: 1. Muss ich dann bei Visa-lesen 17 oder 18 Byte angeben?Mind. 18 (je nachdem, ob du die Terinierung aktivierst oder nicht (04.03.2021 17:51 )Gottimp schrieb: 2. Wie kann ich die Terminierung auf "\0" setzen?HEX-Wert 0 beim termination char auswählen, vgl. https://en.wikipedia.org/wiki/ASCII (04.03.2021 17:51 )Gottimp schrieb: 3. Kann jemand andere Fehler entdecken, weshalb das Programm nicht funktioniert?( etwas Grundlegendes außer Acht gelassen oder eher ein Hardwareproblem? Ich nutze digitus usb zu seriell konverter)Was genau funktioniert denn nicht? (04.03.2021 17:51 )Gottimp schrieb: edit:Das kommt darauf an, was du erreichen willst. Aktuell wird nur der String "Lesepuffer" immer wieder aktualisisert, deine Einzelbytes erst nach Betätigung des Stopp-Buttons. Gruß, Jens RE: Visa Termination - Gottimp - 10.03.2021 13:27 Vielen Dank für deine Antwort Jens. Ich habe mittlerweile herausgefunden, dass ich dem uC zuerst einen String schicken muss, damit er die Daten überhaupt sendet. Nun könnte ich tips gebrauchen wie ich es in mein Programm implementieren kann. Ich habe mir das Beispiel VI UART 8N1 angeschaut, kann es aber nicht wirklich auf meine Problemstellung umändern, da dort nur gesendet und das gesendete empfangen wird. Grundsätzlich wäre die Idee den "getData" String an den uC zu senden und dann die erwartete Antwort zu bekommen. Kann mir jemand eine Beispiel VI als unterstützung empfehlen oder generell tips zur umsetzung des Vorhabens geben? Könnte es mit der Sequenzstruktur funktionieren, dass ich quasi in der ersten Sequenz den String sende und in der zweiten Sequenz dann die Schnittstelle auslese? Bleibt gesund Gruß Gotti RE: Visa Termination - GerdW - 10.03.2021 13:30 Hallo gotti, Zitat:Ich habe mittlerweile herausgefunden, dass ich dem uC zuerst einen String schicken muss, damit er die Daten überhaupt sendet.Dann packe doch einfach ein VISAWrite vor die Schleife, um einmalig deinen "String" zu schicken. Ansonsten gehört das VISAWrite in die Schleife, um den Befehl mehrmalig zu senden… RE: Visa Termination - Gottimp - 10.03.2021 15:11 Hi Gerd, danke für die schnelle Antwort. Ich habe versucht es umzusetzen. (siehe Anhang) Leider empfange ich noch nicht die gewünschten Daten mit dem Programm. Vom Ablauf her sollte doch jetzt die Nachricht "getData \0" gesendet werden und dann empfängt er 17 Byte und endet mit \0. Ich kann leider noch keinen logischen Fehler in dem Programm entdecken. Könnt ihr mir noch mehr hilfreiche Tips geben? Gruß Gotti RE: Visa Termination - GerdW - 10.03.2021 15:16 Hallo gotti, dummerweise können wir immer noch keine Bilder mit LabVIEW debuggen… (Ich bevorzuge LV2017.) Zitat:Ich habe versucht es umzusetzen. (siehe Anhang)- Ein "Fehler" könnte durch den dicken fetten roten CoercionDot bewirkt werden… - Ein weiterer Fehler könnte der Wert in deinem TermChar-Control darstellen: wir können leider keine Bilder debuggen! Warum ist das überhaupt ein Control und keine Konstante im Blockdiagramm??? - Wer hat gesagt, dass du den Empfangspuffer nach dem VISAWrite leeren sollst? - "getData \0" enthält ein Space nach dem letzten "a", dein U8-Array aber nicht… - Welchen Fehler bekommst du, wenn du nicht die erwartete Antwort vom Gerät bekommst? RE: Visa Termination - Gottimp - 10.03.2021 16:25 Danke Gerd, hätte mir auch klar sein können, dass das Bild nicht hilft. - Ein "Fehler" könnte durch den dicken fetten roten CoercionDot bewirkt werden… Sollte man lieber mit Ascii oder binär arbeiten? - Ein weiterer Fehler könnte der Wert in deinem TermChar-Control darstellen: wir können leider keine Bilder debuggen! Warum ist das überhaupt ein Control und keine Konstante im Blockdiagramm??? Das habe ich aus einem Beispiel übernommen, ohne es zu hinterfragen. Da es bei mir aber mit Sicherheit bei \0 bleibt werde ich es in eine Konstante ändern. - Wer hat gesagt, dass du den Empfangspuffer nach dem VISAWrite leeren sollst? Auch da habe ich gedacht das der Puffer leer sein muss, wenn ich die Nachricht empfange, somit war es für mich nicht relevant wo es ist, solange es vor dem lesen kommt - "getData \0" enthält ein Space nach dem letzten "a", dein U8-Array aber nicht… Das liegt an meiner schlampigen Doku, die Nachricht enthält dort kein Leerzeichen - Welchen Fehler bekommst du, wenn du nicht die erwartete Antwort vom Gerät bekommst? Es passiert nix, bis ich das VI beende und es gibt einen Visa-Fehler. Anbei das Programm Benutzt du 2017 aus persönlichen Referenzen oder siehst du Vorteile in der Version? RE: Visa Termination - jg - 10.03.2021 18:08 Hallo gotti, Code immer so gut lesbar programmieren wie möglich. Das bedeutet dann aus meiner Sicht: Den Sende-String als String anlegen - nicht mit den ASCII-Codes rumhantieren, und da du das Abschlußzeichen 0x0 in der Stringanzeige brauchst, den Display-Style an der String-Konstanten aktivieren (Rechtsklick -> ...) [attachment=61700] und dann die Anzeige des Strings auf "\Codes Display" umschalten (Linksklick auf den Display-Style): [attachment=61701] Gruß, Jens RE: Visa Termination - GerdW - 10.03.2021 20:04 Hallo gotti, da kann ich Jens nur zustimmen: Code immer so gut lesbar programmieren wie möglich! Dein VI nach meinem Aufräumen: [attachment=61702] - String-Konstante wie von Jens beschrieben - Am VISASerialPortInit nur das anschließen, was nötig ist! Und nötig sind nur die Werte, die sich von den Default-Werten unterscheiden… - Kein EmptyBuffer… - Einfaches Umwandeln deines Arrays vom ReadString in einen Cluster aus 17 U8-Werten. Der Cluster sollte noch typdefiniert werden und die Elemente nach deinen Vorgaben benannt werden… Zitat:Es passiert nix, bis ich das VI beende und es gibt einen Visa-Fehler.Weil in deiner Schleife jegliches Error-Handling fehlt! Zitat:Benutzt du 2017 aus persönlichen Referenzen oder siehst du Vorteile in der Version?Das ist die Version, die ich auf Arbeit benutze. Wenn du tagsüber Antworten von mir erwartest, musst du eben deine VIs in LV2017 bereitstellen. Steht ja auch in meinem Profil… RE: Visa Termination - Gottimp - 11.03.2021 15:40 Erstmal vielen Dank für eure guten Hilfen, ihr habt mir schon mega gut geholfen. Da ich noch Laie bin würde ich noch gerne Fragen zu dem Programm stellen.(vielleicht auch weniger schlaue Fragen) - Kein EmptyBuffer… Die Idee hinter dem EmptyPuffer war immer die ganze Nachricht zu erhalten. versteh ich das richtig, dass es entfällt da nur auf Anfrage gesendet wird und somit der Puffer gar nicht voll sein kann und auch die nachricht selbst terminiert ist mit "\0"? - Einfaches Umwandeln deines Arrays vom ReadString in einen Cluster aus 17 U8-Werten. Der Cluster sollte noch typdefiniert werden und die Elemente nach deinen Vorgaben benannt werden… Typdefiniert bedeutet das Design im Frontpanel? Weitere Verständnis Fragen: -in deinem Programm steht "getData\00" aus anderen Programmiersprachen kenne ich nur "\0" gibts da ein Unterschied oder nur eine Null zu viel gedrückt? -der uC antwortet nur nachdem er aufgefordert wurde mit getData, brauch ich da überhaupt noch die Schleife? Oder ist sie notwendig um alle Byte zu lesen? -Also in der Schleife werden dann 18 Byte gelesen und im Cluster ausgegeben, wobei nochmal das 4 und 5 byte selektiert werden und zu einem 16 bit Integer zusammengeführt und Dargestellt werden? Nochmal vielen Dank an Gerd und Jens. Grüße Gotti |