LabVIEWForum.de
Graph aus VISA - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Signaldarstellung (/Forum-Signaldarstellung)
+---- Thema: Graph aus VISA (/Thread-Graph-aus-VISA)

Seiten: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23


RE: Graph aus VISA - rolfk - 22.06.2012 09:59

(22.06.2012 08:29 )Diabolik666 schrieb:  Also mein Problem liegt darin, dass ich nichts habe was ich an das Shift Register anschließen könnte damit es initialisiert wäre?

Und wegen RaceCondition: Am besten die lokale Variable nicht verwenden oder anderst positionieren ? Wenn ich sie nicht verwende, könnte ich stattdessen probieren mit VISA read einfach den Wert auszulesen , dann müsste ich doch beim wandeln VI nicht mehr den String parsen , jedoch habe ich es bereits so mal versucht ohne Erfolg ?
Es wäre gut wenn das jemand mal so versuchen könnte.

Wenn loklale Variablen eine Racekondition bewirken bedeutet das IMMER, das sie unnötig sind. Lokale Variablen sind NICHT gedacht um Wires zu sparen. Eine solche Verwendung der lokalen Variablen hat fast immer Race Konditions zur Folge. Du kannst die lokalen Variablen dann zwar meist mit extra Sequenzframes davor behüten um in falscher Reihenfolge gelesen und geupdated zu werden, aber die sinnvollere Variante ist fast immer, um die lokalen Variablen ganz schnell wegzuschmeissen und durch explizite Wires zu ersetzen. LabVIEW ist Dataflow und das ist das Basisprinzip auf dem die Diagrammlogik aufbaut. Deshalb sollte man auch Dataflow verwenden wann immer das geht. Das ermöglicht LabVIEW um effizienter zu sein (lokale Variablen verursachen meist extra Datenkopien), und bringt auch eine eindeutige Logik in den Programmablauf.

Grundsätzlich können in LabVIEW Dinge die nicht durch Wires voneinander abhängig sind, in absolut beliebiger Reihenfolge durch LabVIEW abgearbeitet werden. Das ist grossartig für automatisches Paralleliseren von Codeteilen, aber ein Alptraum für Code der eine bestimmte Ablauflogig folgen sollte, die aber durch lokale (oder globale Variablen) völlig ausgehebelt wird.


RE: Graph aus VISA - Diabolik666 - 22.06.2012 10:13

Also ich habe nun das Register entfernt und die lokale Variable ebenfalls und das Problem, dass die Werte nicht übereinstimmen (also von read string und dem Wert der nachher in der subVI ankommt) besteht weiterhin.
Schaut euch bitte mal diese Version an und gebt mir Ratschläge woran es liegen könnte und wie ich es beheben könnte?


RE: Graph aus VISA - Diabolik666 - 22.06.2012 10:32

okay ich habe nun das ganze in eine Sequenzstruktur gepackt nun tut es, jedoch muss ich nun noch schauen wie ich den Werten einen Namen gebe und Einheit.


RE: Graph aus VISA - Diabolik666 - 22.06.2012 12:38

Also habe schon wieder ein Problem:
Mit Signalverlaufsattribute festlegen müsste ich doch eigentlich einen Namen zuordnen können? Dazu habe ich einfach an den Eingang eine Konstante AC-Voltage drangehängt.
Ich habe es also genauso gemacht wie in dem SubVI "ZES LMG95.lvlib:WDT add MSC-attribute Channel DBL rev 2-0.vi", nur dass ich Attribute SubVI weggelassen habe und für den Eingang Name einfach eine Variable dran gehängt habe.
Wieso funktioniert das nicht auch so ?


RE: Graph aus VISA - GerdW - 22.06.2012 12:57

Hallo Diabolik,

hast du dir mal das Attribute-subVI genau angeschaut? Es hatte schon seinen Sinn und Zweck!

NI verwaltet Signalattribute unter genau festgelegten Namen (bzw. "Tags"). Wenn du dem Signal also einen Namen zuweisen willst, musst du das passende Tag anlegen. Und genau dafür gab es dieses subVI...

Programmieren hat viel mit Nachdenken zu tun. Dagegen einfach etwas zu löschen hat nicht viel mit Nachdenken zu tun...

Liest du eigentlich auch, was man dir so alles schreibt?


RE: Graph aus VISA - Diabolik666 - 22.06.2012 13:20

Ja und weil es so viel mit Nachdenken zu tun hat habe ich das auch bereits schon gemacht und folgendes SubVI erstellt (siehe Anhang).
Diese müsste nun eigentlich funktionieren tut sie aber wieder nicht , Gerd kannst du es dir mal anschauen und mir Tipps geben?


RE: Graph aus VISA - Diabolik666 - 22.06.2012 14:32

Okay habe das Problem behoben, beim Eingang "Name" muss "NI_ChannelName" stehen, sonst funktioniert es nicht, bei "Wert" steht dann der Name.


RE: Graph aus VISA - Diabolik666 - 04.07.2012 14:28

Ein Problem habe ich noch und zwar verstehe ich nicht wieso seitdem ich im Case unter Cont.Measure die while Schleife eingefügt habe in der die Messwerte kontinuierlich gemessen werden (also da wo die ganzen SubVIs sind und anschließend visa read) lässt sich das Programm nicht mehr "disconnecten" , also im VI ist ja eine Funktion im Case Disconnect vorhanden die den Port wieder freigeben soll. Beim disconnecten kommt immer eine Fehlermeldung. Die While Schleife wird aber anscheinend beendet da ich eine String Anzeige gemacht habe und beobachten kann, sobald ich aus dem Case Cont. Measure rausgehe beendet sich auch die wile Schleife weil die Werte nicht mehr aktualisiert werden.
Wenn ich das Programm über close beende kommt keine Fehlermeldung. Hat jemand einen Tipp für mich woran das liegen könnte ?
Ich habe nochmal die neuste Version von dem Programm angehängt


RE: Graph aus VISA - GerdW - 04.07.2012 15:23

Hallo Diabolik,

Zitat:also im VI ist ja eine Funktion im Case Disconnect vorhanden die den Port wieder freigeben soll. Beim disconnecten kommt immer eine Fehlermeldung.
Woher weiß diese Funktion, welchen Port sie schließen soll?
Hast du mal überprüft (per Debugging), welchen Port diese Funktion den schließen will?
Welche Fehlermeldung bekommst du denn überhaupt?

Warum nimmst du nicht einfach ein normales VISA-Close, welches du mit dem Tunnel vom VISA-Open links von der Schleife verbindest?

Du musst immer daran denken:
- Ich habe nicht die subVIs zur Verfügung.
- Ich habe nicht die Hardware zur Verfügung.
- Dein BD ist viel zu groß für vernünftiges Debugging.
- Deine Beschreibung sind auch leider etwas vage...


RE: Graph aus VISA - Diabolik666 - 10.07.2012 10:06

Hallo Gerd, du hast doch gesehen wie ich meine Synchronisierung aufgebaut habe.
Ich habe die Messwertabfrage vom einem Messgerät mit der Messwertabfrage vom anderem Messgerät in eine Sequenzstruktur gesteckt und eine parallel gemacht.
Nun habe möchte ich den Wirkungsgrad einer Maschine bestimmen und dafür benötige ich die abgegebene mechanische Leistung die ich vom Messgerät über die Drehzahl und das Drehmoment bestimme. Die Eingangsleistung messe ich mit einem anderem Messgerät. Nun möchte ich diese Abfrage ebenfalls synchronisieren, jedoch ist es nicht möglich, dass ich einfach alle 3 SubVIs (Drehmoment, Drehzahl, Leistung) in eine Sequenzstruktur packe und diese 3 parallel mache, da dabei Fehler auftreten weil ich die 2 Drähte für VISA nicht einfach verbinden kann. Ich hoffe du kannst mir folgen , hast du dafür einen Vorschlag ?

Ich habe einen Screenshot angehängt und bei diesem möchte ich praktische dass SubVI 1 und 2 parallel zu dem SubVI darüber ausgeführt werden.