LabVIEWForum.de - Messung über GPIB

LabVIEWForum.de

Normale Version: Messung über GPIB
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Guten Morgen ihr Lieben!

Ich bräuchte bitte mal euren fachlichen Rat.
Ich sitze nämlich nun schon seit längerem an einem Problem. Ich habe mir dazu auch diverse Bücher ausgeliehen, die mir aber leider alle keine Hilfe dabei waren. Deshalb hoffe ich nun hier auf eure Hilfe.

Erst einmal worum es geht:
Ich habe in Labview eine Steuerung programmiert für einen Schrittmotor.
Und zwar in gestapelten Sequenzen.
In der ersten wird die Achse gesetzt, in meinem Fall die x-Achse.
In der zweiten wird eine Referenzfahrt durchgeführt, um den Maschinennullpunkt zu finden.
In der dritten wird ein Relais in dem Motor geschlossen, damit auch Umdrehungen von mehr als 360° möglich sind (sonst wird immer wieder der Endschalter angefahren).
In der vierten Sequenz kann ich die absolute Position einstellen, zu der der Motor fahren soll (also beispielsweise 180° mit einer Geschwindigkeit von 90° pro Sekunde). Zudem kann ich die Schrittgröße einstellen, in der sich der Motor bewegen soll (bsp. in 2° Schritten).
Und in der letzten Sequenz wird das Relais wieder geöffnet.

Das alles dient dem Zweck, einen Prüfkörper auf einen mit dem Drehmotor verbundenen Drehteller zu legen und seine Abstrahlcharakteristik zu erfassen.

Nun zu meinem Problem:
In der vierten Sequenz möchte ich nach jedem Schritt eine Messung mit einem Spektrumanalyzer durchführen.
Diese Messung soll dann in einer Datei gespeichert werden. Das Messgerät ist über GPIB mit einem PC verbunden.

Aber wie funktioniert das?
Ich habe da anscheinend ein Brett vor dem Kopf.
Ich würde mich sehr über eure Hilfe freuen!

Falls ihr darüber hinaus noch weitere Verbesserungsmöglichkeiten habt nehme ich auch diese Hilfen dankend an Smile

Viele Grüße,
Jenni
Hallo Jenni,

Zitat:Falls ihr darüber hinaus noch weitere Verbesserungsmöglichkeiten habt
- Statt einer stupiden Sequenz besser eine Statemachine verwenden!
- Muss man wirklich in jedem Teilschritt die Schnittstelle erneut öffnen, initialisieren und wieder schließen?
Danke für die Antwort Gerd!

Ich habe mich jetzt etwas in das Thema "Zustandsautomat" eingelesen.
Allerdings habe ich keine Aktionen zwischen den Sequenzen. Wäre ein Zustandsautomat dann überhaupt sinnvoll?
Und wo liegen die Vorteile gegenüber einer Sequenz?

Mit der Schnittstelle hast du recht.
Ich hab das nun geändert. Danke!


Viele Grüße,
Jenni
Hallo Jenni,

Zitat:Allerdings habe ich keine Aktionen zwischen den Sequenzen.
Doch, du hast Aktionen, z.B. eine elementare Fehlerüberprüfung!

Zitat:Wäre ein Zustandsautomat dann überhaupt sinnvoll?
Eine Statemachine ist in jedem Fall einer Sequenz vorzuziehen…

Zitat:Und wo liegen die Vorteile gegenüber einer Sequenz?
- Man kann leicht an beliebiger Stelle States hinzufügen/entfernen
- Man kann leicht States wiederholen, z.B. im Fehlerfall
- Man kann leicht(er) die Abarbeitung unterbrechen, z.B. im Fehlerfall
Genau diese Vorteile solltest du eigentlich wissen, wenn du dich eingelesen hast…
Hallo Gerd,

ich habe nirgends Vorteile eines Zustandsautomaten gefunden. Vor allem nicht gegenüber einer Sequenz.
Du hast es schön beschrieben. Aber woanders kann ich das leider nicht finden.

Ich bin auch ehrlich gesagt etwas überfordert mit dem Aufbau des Zustandsautomaten.
Mach ich das mit einem Enum?
Aber wenn ich dann die Fehlerüberprüfung als Bedingung mit dem Schieberegister verbinde funktioniert das VI nicht.
Hallo Jenni,

Zitat:Ich bin auch ehrlich gesagt etwas überfordert mit dem Aufbau des Zustandsautomaten. Mach ich das mit einem Enum?
LabVIEW hat ein Beispiel-Projekt, welches eine einfache Statemachine demonstriert…
Enums sollte man nehmen, man kann aber auch mit Zahlen oder Strings arbeiten.

Zitat:Aber wenn ich dann die Fehlerüberprüfung als Bedingung mit dem Schieberegister verbinde funktioniert das VI nicht.
Das kann man mangels VI nicht beurteilen…
So ich hab es nun mit der mehr oder weniger mit der Statemachine hinbekommen.
Allerdings funktioniert die Positionsbewegung nicht mehr.
Der Schritt danach (Relais öffnen) wird aber trotzdem ausgeführt.

Wie bekomme ich es hin, dass auch in diesem Schritt (Positionsbewegung) der Fehlerausgang und Visa Close aus der For Schleife führt?
Vielleicht liegt auch da der Fehler.
Hallo Jenni,

es wird ja immer noch in jeder Iteration deiner Hauptschleife erneut die Schnittstelle geöffnet, initialisiert und geschlossen! Was soll der Blödsinn?

Zitat:Wie bekomme ich es hin, dass auch in diesem Schritt (Positionsbewegung) der Fehlerausgang und Visa Close aus der For Schleife führt?
Hier liegt der Fehler begraben: Warum schließt du die Schnittstelle in der FOR-Loop? Nach der ersten Iteration dieser FOR-Loop greifst du auf eine nicht mehr geöffnete Schnittstelle zu!

Nochmal: Schnittstelle öffnen und schließen gehören in jeweils einen State - und dieser State wird nur je einmal zu Start und Stop deiner Statemachine aufgerufen!!!

Zur Frage:
Nimm Schieberegister, wenn du Werte (wie ErrorIO) durch eine Schleife schicken und bearbeiten willst!

Allgemeine Hinweise:
- THINK DATAFLOW!
- Warum ist das Control "Achsen&Gerätenummer" im State "Achse setzen" versteckt? Wenn er in mehreren States benötigt wird, dann gehört er vor die Case-Struktur deiner Statemachine (oder in ein Schieberegister)!
Der Blödsinn ist eben so entstanden, dass ich nicht weiß, wie ich VISA Open und VISA Close jeweils in einen State packe, so dass die Verbindungen in die anderen States führen.
Das mit dem Schieberegister klappt bei der For Schleife, aber bei der Case Struktur nicht.
Wie mache ich das denn da?

Oder soll ich diese einfach außerhalb der Case Struktur in der While Schleife lassen?
Moin Jenni,

wegen "Blödsinn" brauchst Du Dich nicht zu rechtfertigen. Haben wir alle schon verzapft. Und auch tapfer ertragen, wenn jemand dann Klartext redet.....

Zum Schieberegister: Das kann man natürlich nur bei Strukturen erzeugen, die in irgendeiner Form eine Schleife darstellen (For, While). Eine Case-Struktur in einer Schleife wird zwar auch wiederholt aufgerufen, aber pro Aufruf nur genau einmal durchlaufen.

Du kannst aber problemlos die Schieberegister der Schleife an die Case-Struktur durchverdrahten.

Wenn Du Start/Stop, open/close bzw. init/deinit nicht in eigene Cases packen willst, kannst Du sie auch außerhalb der Schleife davor und dahinter setzen. Einfach mal den Hintergrund überlegen: Gaaanz am Anfang und am Ende wird was geöffnet und geschlossen. Und dazwischen kann die Schnittstelle dann beliebig oft (1x oder 1000x ist egal) benutzt werden.
Seiten: 1 2
Referenz-URLs