LabVIEWForum.de - Digitale Kanäle hintereinander schreiben

LabVIEWForum.de

Normale Version: Digitale Kanäle hintereinander schreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

Ich benötige eure Hilfe beim Schreiben von 6 digitalen Kanälen. Ich möchte, dass immer nur zwei digitale Kanäle gleichzeitig mit einer 1 geschrieben werden, während die restlichen 4 Kanäle mit einer 0 geschrieben werden, anschließend die nächsten beiden Kanäle mit einer 1 usw. Also ein ´sequentieller Ein- und Ausschaltvorgang. Der Vorgang, in denen 2 der 6 Kanäle mit einer 1 (und die restlichen 4 mit einer 0) geschrieben werden, soll 1 Sekunde betragen, also für insgesamt 6 Kanäle 3 Sekunden.
Zur Verdeutlichung, wie ich mir das sequentielle Ein- und Ausschalten vorstelle:

Start Vorgang 1:

11 00 00 -> 1 Sekunde
00 11 00 -> 1 Sekunde
00 00 11 -> 1 Sekunde

Start Vorgang 2:

11 00 00 -> 1 Sekunde
usw...

Ich habe mir schon überlegt ob ich das DAQmx VI "Digital 1D Bool NChan 1Samp" für das Schreiben meiner Kanäle nehmen soll. Ich habe euch mal ein Screenshot meines VI's, in denen ich den Ein- und Ausschaltvorgang integrieren möchte, angehängt. Falls etwas unklar ist, bitte einfach nachfragen. Vielen Dank im Voraus für rege Impulse. Big Grin

LabVIEW Version: 16.0
Messkarte: NI USB-6229
Hallo Christoph,

kleine Anmerkungen vor weg:
1. Es ist deutlich einfacher Binärzahlen von Links nach Rechts zu schieben, also von rechts nach links.
2. Du hast 3 Zustände, also musst du beim Quotienten auch durch 3 teilen.

Meine Lösung würde so wie im Anhang aussehen.
Ich arbeite lieber mit Integerzahlen, da ich die Handhabung in LabVIEW damit deutlich einfacher finde. Operationen wie UND, ODER, NICHT kannst du auch auf Integer anwenden.
Nach links oder rechts verschieben kannst du Integer mit der Funktion x2^n, wobei n die Anzahl der Stellen ist um die verschoben werden soll.

Gruß Max
Hallo Max,

danke für deine Antwort. Die While-Schleife soll keine erste Lösung sein, sondern dient nur zum Schreiben von Spannungswerten, genauer gesagt von Ober- und Untergrenzen. Das habe ich leider vergessen zu erwähnen. Die einzige Abhängigkeit zwischen dem Schreiben in die digitalen Kanäle und der While-Schleife soll die Taktzeit [ms] sein, die hier 3 Sekunden betragen soll. Jeder Schreibvorgang soll also 1 Sekunde dauern und zum nächsten anknüpfen. Ich benötige doch irgendein Bool'sche Array, in dem ich meine 1 oder 0 reinschreiben kann und das wiederrum mit meiner Messkarte kommuniziert? Ich glaube deine Lösung bringt mich nicht weiter.
Hallo Christoph,

Zitat:Jeder Schreibvorgang soll also 1 Sekunde dauern und zum nächsten anknüpfen. Ich benötige doch irgendein Bool'sche Array, in dem ich meine 1 oder 0 reinschreiben kann und das wiederrum mit meiner Messkarte kommuniziert?
Du brauchst:
- eine FOR-Loop, um 3mal zu iterieren
- eine Wartezeit von 1s in der Loop
- einmal DAQmxWrite in der Loop, um die boolschen Werte auf deine DOs zu schreiben
- ein Array von 6 boolschen Werten, welches du ausgeben willst
- 3 (nacheinander) auszugebende Werte…
[attachment=60035]
(03.06.2019 15:41 )Christoph1993 schrieb: [ -> ]Ich benötige doch irgendein Bool'sche Array, in dem ich meine 1 oder 0 reinschreiben kann und das wiederrum mit meiner Messkarte kommuniziert?

Brauchst du eben nicht. Machen Mikroprozessoren z.B. auch nicht, da wird auch meistens eine Zahl auf einen Port geschrieben.
Du kannst dem DAQmx Treiber einfach eine unsinged integer übergeben und schreibt ihn dann auf die Ausgänge, fertig.
Wenn du lieber mit Bool'sche Array arbeitest, kannst du die integer auch danach umformen und dann schreiben (macht in meinen Augen aber keinen großen Sinn).

Wenn das ganze immer nur einmal laufen soll, kannst du auch eine For-Schleife mit 3 Iterationen nutzen. Hier also While-Loop gegen For-Loop tauschen und du wärst damit auch wieder fertig.

Gruß Max
Referenz-URLs