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!
ich brauche dringend eure Hilfe, denn ich komme einfach nicht mehr weiter.
Ich habe die SubVIs in denen ich bis jetzt immer die Werte in eine read string geschrieben habe nun so umgeschrieben, damit ich ein Signal erstelle und diesem Attribute zuordnen kann damit die Werte dann in einer Tabelle gespeichert werden können.
Nun habe ich die umgeschriebene Datei mal angehängt und wenn ich nun einen Befehl mit visa write schreibe und danach ihn mit Visa read auslesen möchte bekomme ich ein Problem.
Ich schreibe den Befehl UAC1\r\n um die Spannung auszulesen und bekomme anschließend wenn ich mit visa read den Wert auslese nicht den Wert für die Spannung sondern für das Drehmoment ! Wie kann denn das bitteschön passieren ?? Ich verstehe es einfach nicht.
18.07.2012, 17:01 (Dieser Beitrag wurde zuletzt bearbeitet: 18.07.2012 17:02 von jg.)
Glaubst du wirklich immer noch, dass bei der "langsamer seriellen Schnittstelle" direkt (also ohne Wartezeit), nachdem du ein paar Bytes versendet hast, du mit der Kombination "Bytes at Port" und VISA-Read schon die passende Antwort auf diese Anfrage bekommst?
Nur mal so als Hausnummer, das Senden eines Zeichens dauert bei 9600 Baud ca. 1 ms! Also wenn du 10 Zeichen zurückbekommst, dann sind das 10 ms. Das Schreiben dauert auch. Dann braucht der Empfänger noch Verarbeitungszeit...
Ich gehe einmal davon aus, dass du irgendwo vorher im Programmablauf das Drehmoment abgefragt hast, da noch keine Antwort bekommen hast, und du jetzt den RS-232-Puffer ausliest.
Und noch was (auch wenn es unter Garantie schon in diesem Thread durchgekaut wurde), wenn du ein Carriage Return und ein Newline in einem LabVIEW-String eintragen willst, dann musst du schon den String schon auf \Codes-Anzeige umschalten.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Wie löse ich das Problem ? Natürlich werden die Werte nicht synchron abgefragt, das ist jetzt erstmal egal, worum es geht ist, dass ich nicht verstehe was ich ändern muss damit ich wenn ich das Befehl für Spannung eingebe auch den Wert für Spannung bei visa read rausbekomme ? Hast du da einen Vorschlag ?
Also danke für eure Hilfe, ich habe das Problem inzwischen gelöst, indem ich alle Werte in einen read string schreibe und nicht nach jedem Kommando den Wert abfrage, also erst zum Schluss. Dann ist meine weitere Vorgehensweise, ich parse aus dem String die Zahlenwerte und erstelle dann für jeden Wert ein signalverlauf und gebe diesem Signal weitere Attribute wie z.B. Name und Einheit und stecke dann alles in eine Tabelle.
So weit so gut.
Nun kommt mein nächstes Problem: Ich möchte ein Drop Down Menü erstellen und zwar sollen nur die Werte, die ich im Drop Down Menü angeklickt habe, später in die Tabelle reinkommen bzw. nur die gemessen werden.
Nun habe ich dazu schon einen Ansatz siehe Anhang im Case Measure.
Nur weiß ich nun nicht mehr weiter und zwar wennn ich im ersten Menü AC Spannung und im zweiten DC Spannung auswähle, komme ich ja in den Case rein, wo dann das Kommando abgeschickt wird mit visa write. Und die Werte kommen dann zuerst in den read string und dann in die Tabelle.
Nun wähle ich z.B. im ersten Menü nicht AC Spannung sondern DC Spannung aus, dann kommt er ja gar nicht mehr in den Case rein und geht in false case rein, wo ich nur eine Verbindung durchziehe, so dass dann praktisch im read string diese beiden Werte nicht mehr ankommen, da ja beides mal false aufgerufen wird.
Nun brauch ich eure Hilfe, wie kann ich die Logik verbessern, so dass egal welchen Wert ich auswähle, dieser Wert in die Tabelle reinkommt ?
Gibt es dafür kein Beispiel VI wo ich mir das Prinzip klar machen kann ? Oder könnt ihr mein VI etwas anpassen, ich weiß, die SubVIs fehlen, jedoch könnt ihr euch die einfach hinzudenken und nur die Logik einbauen?
mit dieser Methode, alles in einen read string zu speichern komme ich nicht weiter, da ich dann Probleme bekomme, da so nicht jedem Wert auch ein Signalname zugeordnet wird,
da wenn ich am Ende einfach den string parse ja die Reihenfolge nicht mehr stimmt je nachdem was vom Benutzer ausgewählt wird welche Werte er gerne messen möchte.
Nun bin ich wieder an dem Punkt, dass ich Probleme bekomme, da er den RS-232 Puffer ausliest. Ich habe den Tipp von weiter oben auch probiert, also zwischen lesen und schreiben eine Verzögerungszeit von 50, 100, 500ms eingebaut leider hat alles nichts geholfen. Was kann ich denn nun noch probieren ich bin ratlos.
(19.07.2012 17:23 )Diabolik666 schrieb: da wenn ich am Ende einfach den string parse ja die Reihenfolge nicht mehr stimmt je nachdem was vom Benutzer ausgewählt wird welche Werte er gerne messen möchte.
Dann musst du dir programmintern merken, was der Benutzer alles ausgewählt hat und aufgrund dessen den String parsen. Also wird der Parser dynmaisch. Fände ich eine spannende Aufgabe
(19.07.2012 17:23 )Diabolik666 schrieb: Nun bin ich wieder an dem Punkt, dass ich Probleme bekomme, da er den RS-232 Puffer ausliest.
Mit Probelm meinst du, dass du nicht die komplette Antwort bekommst?
Beste Grüße,
NWO
9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris.
NI schrieb:To use the abort button is like using a tree to stop a car!
Also NWOMason, ich habe das Problem nun anderst gelöst.
Ich schreibe die Befehle nacheinander ohne jedes mal zu lesen und erst am Ende lese ich die Werte alle und schreibe alle in einen string.
Dann bekomme ich nicht mehr das Problem, dass ich z.B. die Spannung als Befehl schreibe und das Drehmoment als Antwort bekomme bzw. nicht nur das Drehmoment sondern eigentlich alle Werte also Spannung, Strom usw... Nun habe ich den String am Ende geparst und überprüft ob nun an der ersten Stelle die Spannung steht bzw. der Strom oder oder ...
und je nachdem welche Wert da steht ( ich parse den String) mache ich einen Case und in diesem Case wird dann immer ein Signal erstellt mit weiteren Attributen.
Und dann diese Signale wiederum in eine Tabelle rein. Ist zwar richtig viel Schreibarbeit ( bei 50 Kommandos ! ) aber funktioniert.
Ich hätte da aber noch eine Frage, um die Tabelle wo die Messwerte reingeschrieben werden ist ja noch so ein blauer Rahmen, wo finde ich diesen im Programm ? Ich hab ja jetzt auch so eine Tabelle erstellt, jedoch fehlt mir dieser Rahmen, den hätte ich auch gerne.