Schönen guten morgen,
ich möchte zwei Signale möglichst gleichzeitig über zwei digitale Ausgänge meiner NI 6008 Karte ausgeben. Dabei soll über einen definierten Zeitraum High am Ausgang anliegen. Hab mir ein Unterprogramm gebaut um die Zeit einzustellen und ein VI um zwei Leitungen anzusprechen. Aber irgendwie wird immer nur einer der Kartenausgänge auf High gestellt, nie beide.
Könnt ihr mir bei dem Problem helfen ?
Ich habe beide VI's angehangen. Dabei ist "Schalter_betätigen" meine SubVI
MFG
the_Boshi
[
attachment=36721][
attachment=36722]
Hallo boshi,
- Was soll der Quatsch mit den lokalen Variablen im "Schalter"-subVI? Zwei Stichworte: RaceConditions und RubeGoldberg...
- Wozu zwei verschiedene Wartezeiten in der Schleife im subVI? Einmal Warten im 50ms-Takt und einmal 1s warten???
- Wozu ein ExpressVI, um x/60 zu berechnen?
- Mal bitte einen Rahmen um das Icon des subVI...
Im HauptVI:
- Die gleiche (fehlerträchtige) Vergewaltigung von lokalen Variablen...
- Wozu das "50ms warten" im zweiten Frame der Haupt-Sequenz?
- Wozu die kleine Sequenzstruktur?
Gut gemeinter Hinweis:
Alle lokalen Variablen in deinen beiden VIs sind unnötig!
Räum auf, dann wird geholfen werden! (Und vielleicht ist der Fehler dann schon weg...)
Erstmal danke für die schnelle Antwort,
das ist übrigens mein erstes Projekt was ich mit Lapview oder generell mit datenflussorientierten Programmen schreibe. Also einwenig Nachsicht ^^.
Ich hab die VI soweit umgeschrieben.
[-Wozu zwei verschiedene Wartezeiten in der Schleife im subVI? Einmal Warten im 50ms-Takt und einmal 1s warten???
- Wozu ein ExpressVI, um x/60 zu berechnen?]
1. ich wollte nicht immer den gleichen Task durchführen und dadurch meinen Rechner entlasten // ist gestrichen
2. ich will eine Verzögerung im Stunden/Minuten Format und deswegen habe ich die Sekunden umgerechnet
Durch die Umarbeitung meiner Programme ist nun folgendes:
Es werden sie Signale nacheinander und nicht gleichzeitig gesendet, zuerst DO3 dann DO 1. So genau sehe ich nicht warum. Ach ja und mein Zähler der Sekunden, welcher in der SubVI steckt, gibt mir erst nach beendigung der Schleife den Sekundenwert an mein HauptVI. Geht das irgendwie anderes?
[
attachment=36729]
[
attachment=36730]
Hallo Boshi,
sieht doch schon viel schöner aus...
Zitat:Es werden sie Signale nacheinander und nicht gleichzeitig gesendet,
Du verwendest das gleiche subVI, um die Signale auszugeben. Ein subVI kann aber (per default) nicht gleichzeitig mehrfach aufgerufen werden, es wird stattdessen nacheinander aufgerufen. Um das zu erreichen, muss man es "reentrant" machen - in den VI-Einstellungen. Bitte hierzu die Hilfe lesen...
Ansonsten: Link in meiner Signatur!
Wunderbar danke !!!!
Das Aufrufen der Funktionen gleichzeitig funktioniert schonmal.
Jetzt muss ich mir nur noch die Zeiten ausgeben lassen.
Hallo boshi,
Zitat:mein Zähler der Sekunden, welcher in der SubVI steckt, gibt mir erst nach beendigung der Schleife den Sekundenwert
Das ist das Wunder des Datenflusses - erst wenn eine Struktur (hier: Schleife) abgearbeitet ist, wird der Wert ausgegeben...
Ansonsten:
- globale Variablen (mit ähnlichen Fallstricken wie die lokalen)
- Queues/Notifier
- Referenzen
Außerdem:
Wieso Zeiten mitverfolgen, wenn du doch schon die Vorgaben an das subVI übergibst?
Naja das Wunder des Datenfluss tritt ja in der SubVI nicht auf, da ließt er mir ja auch vor dem Schleifenende die Zeit aus. Erst bei dem Übertragung über den Anschluss der SubVI tritt der Effekt auf. Ich möchte mir die verstrichene Zeit anzeigen lassen um anzeigen zu können, wie lange ein Vorgang schon läuft und wie lange er noch laufen wird.
Ich werde das ganze nach mal überdenken ^^.
Hallo Boshi,
Zitat:Erst bei dem Übertragung über den Anschluss der SubVI tritt der Effekt auf.
Genau das habe ich doch beschrieben: erst nach Beenden einer Struktur (hier Schleife oder auch: subVI) wird der Wert weitergereicht! Alternativen hatte ich ja schon genannt...