LabVIEWForum.de
Mit Zähler Volumenstrom messen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Mit Zähler Volumenstrom messen (/Thread-Mit-Zaehler-Volumenstrom-messen)



Mit Zähler Volumenstrom messen - Knarrre - 23.01.2012 12:24

Hallo,

ich habe eine Ni-USB 6210 Karte mit LV2011 und möchte den Volumenstrom der durch eine Gasuhr geht messen. Diese kann einen Takt ausgeben, also mehr oder weniger hat sie einen Schalter, der alle 10 Liter einmal schließt.
Da ich ich Labview Neuling bin benutze ich den DAQ-Assistenten.
Bisher habe ich es über Signale erfassen-->Zählergestützte Erfassung-->Flankenzahl bestimmen so weit hinbekommen, dass er pro Kontakt zählt. Nur zählt er jetzt pro Kontakt nicht einen hoch sondern ca. 10 bis 30.
Ich vermute er zählt immer Kontaktzeit*Frequenz.

Wie kann ich ihn pro Kontakt einmal hochzählen lassen?


RE: Mit Zähler Volumenstrom messen - Knarrre - 23.01.2012 15:09

Also ich habe auch noch die möglichkeit mir den geschlossenen Kontakt boolisch als eins und null ausgeben zu lassen. Jetzt müsste ich halt noch einen zähler programmieren der dieses "signal" erkennt und danach hochzählt.

Weiß jemand wie das geht? im endeffekt ist mein größtes Problem gerade, dass ich nichtmal hinkriege einen Wert zu erstellen den ich dann hochlaufen lasse. Herkömmlich würde ich das etwa so programmieren:


zähler=0
do
if schalter=1 then i=1;
elseif schalter=0 and i=1 then zähler=zähler+1 and i=0;
loop

Er soll also merken ob der schalter gerade von eins auf null umgeschaltet hat und dann immer einen hochzählen...


RE: Mit Zähler Volumenstrom messen - GerdW - 23.01.2012 15:26

Hallo Knarre,

Zitat:Nur zählt er jetzt pro Kontakt nicht einen hoch sondern ca. 10 bis 30.
Hat die Gasuhr vielleicht einen stark prellenden mechanischen Schalter (aka Relais)?

Code:
zähler=0
do
if schalter=1 then i=1;
elseif schalter=0 and i=1 then zähler=zähler+1 and i=0;
loop
In LabVIEW sind das zwei Schieberegister und keine lokalen Variablen...


RE: Mit Zähler Volumenstrom messen - M Nussbaumer - 23.01.2012 15:30

(23.01.2012 15:09 )Knarrre schrieb:  Also ich habe auch noch die möglichkeit mir den geschlossenen Kontakt boolisch als eins und null ausgeben zu lassen. Jetzt müsste ich halt noch einen zähler programmieren der dieses "signal" erkennt und danach hochzählt.

Weiß jemand wie das geht? im endeffekt ist mein größtes Problem gerade, dass ich nichtmal hinkriege einen Wert zu erstellen den ich dann hochlaufen lasse. Herkömmlich würde ich das etwa so programmieren:


zähler=0
do
if schalter=1 then i=1;
elseif schalter=0 and i=1 then zähler=zähler+1 and i=0;
loop

Er soll also merken ob der schalter gerade von eins auf null umgeschaltet hat und dann immer einen hochzählen...

Wenn ich dich richtig verstehe, willst du bei jedem Wechsel von 1 nach 0 deinen Counter um 1 erhöhen.

Falls dem so ist könntest du die Schieberegister verwenden um den letzten Wert zu vergleichen.
Hier mal ein Beispiel wie es funktionieren könnte:

[attachment=38299]

Nicht vergessen, den Initialisieren-Case zuerst auszuführen damit die Counter etc zurückgesetzt werden.

Hoffe das hilft dir weiter!

Gruss Marc


RE: Mit Zähler Volumenstrom messen - Knarrre - 23.01.2012 15:49

(23.01.2012 15:26 )GerdW schrieb:  Hallo Knarre,

Zitat:Nur zählt er jetzt pro Kontakt nicht einen hoch sondern ca. 10 bis 30.
Hat die Gasuhr vielleicht einen stark prellenden mechanischen Schalter (aka Relais)?

Code:
zähler=0
do
if schalter=1 then i=1;
elseif schalter=0 and i=1 then zähler=zähler+1 and i=0;
loop
In LabVIEW sind das zwei Schieberegister und keine lokalen Variablen...

Hallo GerdW,

ja das mit dem Schalter kann sein, weißt du was genau dieser counter da zählt?

Das mit den Schieberegistern verstehe ich einfach nicht! Meinst du den Zähler und i in meinem Beispiel? Aber ich muss doch den Zähler im Frontpanel ausgeben können...
Ich verstehe wirklich nicht warum mir der Wechsel zu Labview (bzw. zur grafischen Programmierung) so schwer fällt! Sorry und Danke für die Geduld!










(23.01.2012 15:30 )M Nussbaumer schrieb:  
(23.01.2012 15:09 )Knarrre schrieb:  Also ich habe auch noch die möglichkeit mir den geschlossenen Kontakt boolisch als eins und null ausgeben zu lassen. Jetzt müsste ich halt noch einen zähler programmieren der dieses "signal" erkennt und danach hochzählt.

Weiß jemand wie das geht? im endeffekt ist mein größtes Problem gerade, dass ich nichtmal hinkriege einen Wert zu erstellen den ich dann hochlaufen lasse. Herkömmlich würde ich das etwa so programmieren:


zähler=0
do
if schalter=1 then i=1;
elseif schalter=0 and i=1 then zähler=zähler+1 and i=0;
loop

Er soll also merken ob der schalter gerade von eins auf null umgeschaltet hat und dann immer einen hochzählen...

Wenn ich dich richtig verstehe, willst du bei jedem Wechsel von 1 nach 0 deinen Counter um 1 erhöhen.

Falls dem so ist könntest du die Schieberegister verwenden um den letzten Wert zu vergleichen.
Hier mal ein Beispiel wie es funktionieren könnte:



Nicht vergessen, den Initialisieren-Case zuerst auszuführen damit die Counter etc zurückgesetzt werden.

Hoffe das hilft dir weiter!

Gruss Marc

Hallo Marc!

Vielen Dank für das Beispiel! Ich versuche das mal zu verstehen und dann meld ich mich ob ich es damit hinkriege...


RE: Mit Zähler Volumenstrom messen - Lucki - 23.01.2012 15:51

Marc war mit seinem VI eher, wegen des Rube-Goldberg-Anteils poste ich mal noch mein ansonsten gleiches Bildchen. Es reagiert allerdings auf die O/1- Flanke, was leicht zu ändern ist. ("<" statt ">" verwenden)
Wichtig ist ein Wait in der Schleife. Nicht nur wegen der ansonten 100%igen CPU-Last, sondern auch um Falschzählungen wegen Kontaktprellung zu vermeiden. Wenn t0 und t1 die 0- und 1-Zeiten bei der höchsten Durchflußrate sind, dann sollte t-Wait kleiner sein als die kürzere der beiden Zeiten - aber nicht sehr viel kleiner.
[attachment=38300]


RE: Mit Zähler Volumenstrom messen - GerdW - 23.01.2012 16:01

Hallo Knarre,

Zitat:Das mit den Schieberegistern verstehe ich einfach nicht! Meinst du den Zähler und i in meinem Beispiel? Aber ich muss doch den Zähler im Frontpanel ausgeben können...
Dank an Lucki. Der zeigt in seinem Bild nämlich die zwei genannten Schieberegister - und der Zähler wird auch im Frontpanel angezeigt...


RE: Mit Zähler Volumenstrom messen - M Nussbaumer - 23.01.2012 16:11

(23.01.2012 15:51 )Lucki schrieb:  Marc war mit seinem VI eher, wegen des Rube-Goldberg-Anteils poste ich mal noch mein ansonsten gleiches Bildchen. Es reagiert allerdings auf die O/1- Flanke, was leicht zu ändern ist. ("<" statt ">" verwenden)
Wichtig ist ein Wait in der Schleife. Nicht nur wegen der ansonten 100%igen CPU-Last, sondern auch um Falschzählungen wegen Kontaktprellung zu vermeiden. Wenn t0 und t1 die 0- und 1-Zeiten bei der höchsten Durchflußrate sind, dann sollte t-Wait kleiner sein als die kürzere der beiden Zeiten - aber nicht sehr viel kleiner.

Der Rube-Goldberg-Teil ist mir im Nachhinein auch aufgefallenBlush

Gruss Marc


RE: Mit Zähler Volumenstrom messen - Knarrre - 23.01.2012 16:19

(23.01.2012 15:30 )M Nussbaumer schrieb:  
(23.01.2012 15:09 )Knarrre schrieb:  Also ich habe auch noch die möglichkeit mir den geschlossenen Kontakt boolisch als eins und null ausgeben zu lassen. Jetzt müsste ich halt noch einen zähler programmieren der dieses "signal" erkennt und danach hochzählt.

Weiß jemand wie das geht? im endeffekt ist mein größtes Problem gerade, dass ich nichtmal hinkriege einen Wert zu erstellen den ich dann hochlaufen lasse. Herkömmlich würde ich das etwa so programmieren:


zähler=0
do
if schalter=1 then i=1;
elseif schalter=0 and i=1 then zähler=zähler+1 and i=0;
loop

Er soll also merken ob der schalter gerade von eins auf null umgeschaltet hat und dann immer einen hochzählen...

Wenn ich dich richtig verstehe, willst du bei jedem Wechsel von 1 nach 0 deinen Counter um 1 erhöhen.

Falls dem so ist könntest du die Schieberegister verwenden um den letzten Wert zu vergleichen.
Hier mal ein Beispiel wie es funktionieren könnte:



Nicht vergessen, den Initialisieren-Case zuerst auszuführen damit die Counter etc zurückgesetzt werden.

Hoffe das hilft dir weiter!

Gruss Marc



Sehr geil hat geklappt. Ich habe einfach meinen Wert den ich von der Gasuhr bekommen an deinen "value" über "lokale Variable" übergeben und dein vi so eingefügt. Vielen Dank!

(23.01.2012 15:51 )Lucki schrieb:  Marc war mit seinem VI eher, wegen des Rube-Goldberg-Anteils poste ich mal noch mein ansonsten gleiches Bildchen. Es reagiert allerdings auf die O/1- Flanke, was leicht zu ändern ist. ("<" statt ">" verwenden)
Wichtig ist ein Wait in der Schleife. Nicht nur wegen der ansonten 100%igen CPU-Last, sondern auch um Falschzählungen wegen Kontaktprellung zu vermeiden. Wenn t0 und t1 die 0- und 1-Zeiten bei der höchsten Durchflußrate sind, dann sollte t-Wait kleiner sein als die kürzere der beiden Zeiten - aber nicht sehr viel kleiner.

Danke Lucki!
Habe jetzt schon Marcs Variante genommen (sie funktioniert also nehm ich sie einfach erstmalWink )
Aber jetzt können andere mit dem gleichen Problem sich eine Variante aussuchen. Dieses Forum ist echt der Hammer!
Werde mich sobald (und falls) ich es kann revangieren!