easy-forum
Deutsch - Software => easySoft => Thema gestartet von: mueller-m am Januar 20, 2021, 10:55:18 Vormittag
-
Moin zusammen,
ich bin momentan an einer Auswertung eines Kontaktwasserzählers dran.
Mein Ziel ist es über einen schnellen Zähleingang I1 (Steuerung EASY-E4-UC-12RC1) Impulse pro Sekunde zu erfassen um diese auf einen Mengendurchfluss verarbeiten zu können.
Ich erhalte max. 5,55 Impulse pro Sekunde. Der Kontaktwasserzähler wird über ein solid state relais entkoppelt und auf den Eingang gegeben.
Impulslänge 50ms - Rechteckform (Angabe vomKontaktwasserzähler)
Zum Testen habe ich das ganze wie folgt aufgebaut:
//Sekundentakt über Zeitrelais blinkend
T01(
EN:= TRUE,
RE:=,
ST:=,
I1:= T#500ms,
I2:= T#500ms,
Q1=>,
QV=>
);
Q03:=T01Q1;
//Frequenzzähler Messintervall 1,0s, Zählereingang C_:I1
CF01(
EN:= TRUE,
SH:= 10;
SL:= 1;
OF=>,
FB=>,
ZE=>,
QV=>MD05,
QF=>MD10
);
MD10:=MD10/10; //QF=Frequenz*10, daher wieder durch 10teilen
------
Mit dem Zeitrelais habe ich eine Frequenz von 1Hz auf den Ausgang gegeben. Verdrahtet habe ich den Ausgang an der Steuerung dann wiederum wieder auf den Eingang I1. Eine Änderung des Messintervalls hat ein identisches Ergebnis ergeben.
Die beiden Doppelwörter habe ich auf eine Textanzeige mit zwei Wertanzeigen gebracht mit den Einstellungen:
Wertebereich/Abbildungsbereich 65535 und entsprechender Verknüpfungsvariable
Auf dem Display und auch in den Bausteinparametern, die ich mir Online im Display direkt am Baustein anschauen kann, kommen 3Hz bei raus.
Sieht jemand vielleicht einen Fehler, warum dies so ist? Es müsste ja 1Hz rauskommen.
-
Hat jemand vielleicht eine Idee? Oder gibt es eine leichtere Herangehensweise
-
Hallo mueller-m,
die Parametrierung sollte IMHO eher so aussehen
T01(
EN:= TRUE,
RE:=,
ST:=,
I1:= T#50ms,
I2:= T#950ms,
Q1=> Q03,
QV=>
);
Da du aber eine Steuerung mit Relais Ausgängen nutzt wird es vmtl. eher in Richtung 200ms, 800ms gehen.
Weiters sollte das Messintervall vom Frequenzzähler ein vielfaches der geringsten zu erwartenden Frequenz sein.
In deinem Fall würde ich mal bei 3 - 5 Sekunden anfangen.
Gruß
PS: ich habe hier (https://easy-forum.net/index.php?topic=8234.msg35033#msg35033) sowas ähnliches programmiert ...
-
Hallo weiss_nix,
vielen Dank für die Antwort.
Ich habe mir mal dein Beispiel gezogen und es mal ausprobiert.
So ganz verständlich ist die Funktionsweise aber leider noch nicht und wie ich es auf mein System anpassen könnte.
Bei max. 5,55 Impulsen pro Sekunde müsste ich T32 auf 180ms stellen. Das wäre mein Max.
Mein min. ist ungefähr 0,5 Imp./Sek. Es kommt hier aber auch nicht auf kleinste Ungenauigkeiten an.
Jetzt muss ich aber noch die Zeitmessung der Impulse T01 und die Durchflussberechnung anpassen.
Die Berechnung des Durchflusses wäre:
Durchfluss (m³/h) = (Impulse/sek * 3600) / 1000 * 1
Das ganze bei einem 1Liter pro Impuls
Muss ich diese Formel quasi über die Arithmetik machen?
Kann ich mit diesem Ablauf auch Kommazahlen hinbekommen? Sieht nur nach Ganzzahliger Auswertung aus anhand der Funktionsbausteine.
-
Hallo mueller-m,
Anbei ein Beispiel wie es funktionieren würde, P01 ist nur für Testzwecke und kann für den Echtbetrieb entfallen ;)
T01 ( // Timer ansprechverzögert
EN := true,
RE := M01, // Timer reset mit pos. Flanke von M01
ST := ,
I1 := T#5s000ms, // Zeit ohne Impuls bis Anzeige auf 0 geht
I2 := ,
Q1 => ,
QV =>
);
M01 := (I01 or P2) and not M02; // Positive Flanke generieren
M02 := (I01 or P2); // Hilfsmerker für pos. Flanke
if T01Q1 then // Wenn Zeit ohne Impuls abgelaufen
MD02 := 0; // setze MD02 auf 0
elsif M01 then // wenn M01 (pos. Flanke)
MD02 := 3600000 / T01QV; // berechne Impulse pro Stunde
end_if;
D01 ( // Aufruf Textanzeige, Werteangleich (Menge pro Impuls) erfolgt mit Abbildungsbereich!
EN := true,
AI := ,
Q1 => ,
AO =>
);
Have Fun
-
Vielen Dank für deine Antwort und sorry für meine verspätete Rückmeldung!!
Ich hatte es übers Wochenende bereits ähnlich aufgebaut aber durch dein Beispiel das Programm noch ein wenig verschlanken können.
Vielen Dank nochmal!
-
... kein Problem, wenn's geholfen hat ist alles gut ;)
Gruß