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 habe mir ein Programm geschrieben, bei dem ich über ein Optionsfeld verschiedene Cases auswählen kann. Im Case A wird der AI0+, AI0- abgefragt. Im Case B erzeuge ich einmal eine PWM auf PFI12 und AI3+,AI3- und AI7+, AI7- werden abgefragt. Das alles steckt in einer While-Schleife, die die Auswahl des Optionsfeldes abfragt.
Wenn ich nun von Case A auf Case B umschalte, gibt es keine Probleme. Beim Umschalten von Case B zurück auf Case A erscheint der Fehler 50103 "Die ausgewählte Ressource ist reserviert." Diese Fehlermeldung konnte ich bisher nur umgehen, in dem ich in einer Ereignisstruktur bestimmt habe, dass bei einer Wertänderung des Optionsfeldes das komplette Programm beendet wird und ich es dann neu starten muss. Diese Lösung gefällt mir aber überhaupt nicht. Ich arbeite erst seit ca. 2 Monaten mit LV und bin ratlos.
Im Forum habe ich gelesen, dass es bei einigen Karten nicht möglich ist mehrere AI gleichzeitig abzufragen und man nicht einen Eingang in 2 verschiedenen Tasks abfragen kann. Das möchte ich auch gar nicht. Ich habe den verdacht, dass beim Wechsel von Case B nach Case A die Abfrage der AIs (AI3+,AI3- und AI7+, AI7-) nicht geschlossen wird und deshalb die Fehlermeldung erscheint.
warum erstellst du nicht einfach einen AI-Task mit allen Kanälen (AI0, AI3, AI7) und einen CTR-Task, die dann dauerhaft aktiv sind?
Warum immer wechseln zwischen den Tasks?
Also bis auf diese Fehlermeldung läuft alles soweit, wie ich es möchte. Gibt es eine Möglichkeit dieses Problem zu lösen, ohne grundlegend alles zu ändern?
Ich habe es gerade mal so probiert, wie du meintest. Da ist nur das Problem, dass ich gerne das Optionsfeld benutzen möchte, um relevante Diagramme anzeigen zu lassen, sobald man die entsprechende Option anklickt. Daraufhin verlasse ich die While-Schleife in der AI gemessen und vom Counter das Signal erzeugt wird. Wenn ich AI und CTR-Task wieder mit in die Cases einfüge, habe ich wieder das Ressourcenproblem..
Zitat:Also bis auf diese Fehlermeldung läuft alles soweit, wie ich es möchte. Gibt es eine Möglichkeit dieses Problem zu lösen, ohne grundlegend alles zu ändern?
Dazu müsste man wissen, wo der Fehler genau herkommt…
Da wir weder deine Hardware noch dein VI haben, wissen wir das leider auch nicht!
Also: Kannst du in einem kleinen TestVI mal prüfen, ob der CTR-Task und der AI-Task generell gleichzeitig laufen können?
Kannst du mal alle Parameter deiner Tasks darlegen? Gibt es evtl. Probleme, weil beide Tasks mit einer festen Samplerate laufen sollen und deine USB-Hardware nur eine Clock bereitstellt?
CTR-Task und AI-Task können gleichzeitig laufen. Ein Problem zwischen Soft- und Hardware schließe ich auch aus, da jeder Case meines Programmes funktioniert, wenn vor Ausführung das ganze Programm neu gestartet wurde.
Die Probleme kommen immer dann, wenn ich einen Case mit AI-Task geöffnet habe und dann in einen anderen Case wechsele, in dem ebenfalls ein AI-Task ausgeführt wird.
Oha, ich wusste nicht, dass die ganzen SubVIs mitgeschickt werden müssen. Ich dachte, die werden in der Hauptdatei gespeichert. Ich hoffe du kannst damit was anfangen. Das Hauptprogramm ist "Motoransteuerung_VIII"
Ich habe das Problem jetzt gelöst, indem ich alle meine AIs in einer While-Schleife parallel zu meinem Hauptprogramm laufen lasse. Keine Ahnung, ob das die eleganteste Lösung ist, aber es funktioniert zumindest.
Jetzt habe ich noch ein zweites Problem. Ich habe mir ein VI gebaut, in dem analoge Spannungen an 3 Kanälen gemessen werden. Am ersten Kanal habe ich einen Drehmomentsensor angeschlossen, die 2 anderen messen die Spannungen an 2 Motorsträngen. Den Signalverlauf aller 3 Eingänge möchte ich in mehreren Diagrammen auf dem FP sichtbar machen, wobei zusätzlich noch der Mittelwert der Spannungen an den Motosträngen angezeigt werden soll. Dazu habe ich das Signal gesplittet und die zusammengehörigen Signale wieder kombiniert.
Soweit funktioniert das auch für etwa 2 Minuten, denn dann erscheint die Fehlermeldung (Bild). So wie ich das verstanden habe, kommen schneller Daten in meinen Buffer, als ausgelesen werden. Sehe ich das richtig? Ich habe testweise den Buffer vergrößert. Dadurch werden meine Daten im Diagramm langsamer aktualisiert und der Fehler tritt ein paar Minuten später auf. Ich möchte mein Programm aber etwa 3 Stunden laufen lassen.
Mir würde es reichen, wenn nur etwa 30 Sekunden der Daten gespeichert werden würden und der Rest wieder gelöscht wird. Kann ich den Buffer irgendwie manuell leeren oder einstellen, dass alle 30 Sekunden der Buffer automatisch geleert wird (Falls das der Grund des Problems ist)?
05.02.2016, 11:30 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2016 11:32 von GerdW.)
- warum setzt bei beim DAQmxTiming die Sampleanzahl? Was sagt die Hilfe zu diesem Input?
- warum muss man schöne Waveforms nach DDT umwandeln, um sie anzuzeigen? IndexArray…
Zitat:So wie ich das verstanden habe, kommen schneller Daten in meinen Buffer, als ausgelesen werden. Sehe ich das richtig?
Der DAQmx-Treiber hat intern einen Buffer für die Messdaten. Du legst fest, wie schnell die Hardware Samples liefert, diese werden in den Buffer gepackt. Dann liest du mit DAQmxRead aus diesem Buffer.
Dummerweise liest du nicht schnell genug aus - u.a. weil du bei DAQmxTiming mit Dingen rumspielst, ohne die Hilfe dazu zu lesen. Und evtl. auch, weil du unnötigerweise mit DDTs hantierst…