Impulse auswerten für Durchfluss-Berechnung

Zuviel Werbung?
-> Hier kostenlos registrieren
Keine Funktion, ganz genau. Vielleicht ist genau das seine Funktion, er dient vielleicht als PlatzHalter für etwas, das vorübergehend unwirksam gemacht wurde?
Habe ich mir auch schon so gedacht. Vielleicht ein Überbleibsel von der Inbetriebnahme.

Mein Hinweis war einfach als Anregung an den TE.
 
Ich wollte die Zeit im MD145 (Format: Time) in eine Real Zahl umrechnen um eine Durchflussrate zu bestimmen.
Mit der Formel: [(1/0,111s)*60] *0,5 = 270 L/min
In der Formel kommt gar keine Variable vor, da fehlt das "x" (das MD145) :unsure:

U E 0.6
U "High_Merker"
= M 144.2
SPBNB _030
T MD 145
DTR
T #TimePulse_REAL
L 1.000000e+000
/R
T #TimePulse_REAL
L 6.000000e+001
*R
T #TimePulse_REAL
L 5.000000e-001
*R
T #TimePulse_REAL



_030: T #TimePulse_REAL
- Die 4 blau markierten Zeilen sehe ich als Test/Inbetriebnahme-Code, der den eigentlichen Code nicht stört, der aber in der fertigen Version nicht mehr drin sein sollte.
- Das "T MD 145" müsste ziemlich sicher "L MD145" heißen, oder wird MD145 auch noch vor dem gezeigten Code geladen?
- Wo ist das "1/0,111s" aus der Formel geblieben? Im Code wird nur noch (unnötigerweise) durch 1 geteilt, die 0.111 kommen nirgends vor.
- das letzte rote "T #TimePulse_REAL" speichert irgendwas, was zufällig vor dem Code im AKKU1 ist, wenn zu _030 gesprungen wird (wenn E0.6 = 0 ist)

Also ich suche die AWL Funktion hiervon:
Da ich die FUP-Convert Bbausteine nicht finde..
Welche CPU hast Du? S7-300?
Welches TIA verwendest Du?

Du könntest für die Berechnung eine eigene Function (FC) programmieren, da kannst Du für die Formel SCL verwenden.
Bei S7-1200/1500 kann man sogar in einem FUP-Baustein direkt einzelne Netzwerke in SCL programmieren.

Harald
 
Ich wollte die Zeit im MD145 ...
Und solch "furchtbare" Adressen solltest Du Dir auch erst gar nicht angewöhnen.
Das wird in der Regel als "unsauber programmiert" angesehen.
;)

Adressen für MD (DWORD, DINT, Real ...) sollten immer auf einer ohne Rest durch 4 (Byte) teilbaren Adresse beginnen.
Also hier entweder MD144 (da drin wird aber u.a. Dein Merker M144.2 schon verwendet, der dann eine anderweitige Adresse benötigen würde, wie z.B. die dann freie M148.2) oder halt als Nächstes das MD148.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen liebes Forum Team,

herzlichen Dank für die vielen Kommentare ich gehe erstmal auf die Fragestellungen ein.
@PN/DP genau das x hatte ich nicht geschrieben es sind die 0,111s aus MD145, dies entspricht dem Ausgang ET vom TON-Baustein.
2. Genau das ganze war ein schneller Test mit der Inbetriebnahme am Arbeitsplatz, da der Stand noch nicht aufgebaut wurde.
3. Den restlichen Code habe ich gestern aus "Frust" gelöscht und wollte heute mit neuen Gedanken starten. (Bestand aus TON und der Auswertung zum Steuern des Zählers mit SW_GATE und Zählwert in LADDR1).
4. Da ist mir wohl ein Fehler in der Reihenfolge passiert sollte natürlich 1 / MD145 sein und nicht MD145 / 1 gut bemerkt.
5. War noch nicht fertig geschrieben ich wollte in den Zeilen vorher meinen Wert erstmal beobachten als Gleitpunktzahl da stand halt nie die gewünschten 270, damit habe ich es dann auch belassen (90 und 700 kamen da teilweise zurück.)

Also ich arbeite mit Step 7 V5.6 SP2 ohne SCL, das hat mir mein Vorgänger hinterlassen.
Ich programmiere die Steuerung für einen Wasserprüfstand und diese Funktion soll einen Durchfluss berechnen.
Die Visuelle Anwendung und Steuerung erfolgt über LabView.
(Was auch eigentlich mein Anteil mal an dem Projekt war mit Siemens bin ich eher weniger vertraut, aber mittlerweile kann ich mich zu funktionierenden Lösungen hinarbeiten und verstehe auch den Daten-Aufbau der ECU.
Zum Anwenden nicht entwickeln natürlich bevor ich gleich gesteinigt werde.

@Tschoke genau ich bin zu keinem brauchbaren Ergebnis gekommen.
Mein Ansatz war es die Periodendauer direkt umzurechnen in eine Durchflussrate was bei konstantem Volumenstrom oder nahe zu konstant auch eigentlich sauber gehen sollte, ich arbeite da mit 0-10Hz und 0-2kHz Sensoren sprich 200L/min wären dann 2kHz.

Wenn mir noch jemand kurz auf die Sprünge helfen könnte bezüglich Strukturierung in der Siemens Welt:
1. Ich Löse über meinen Prozessalarm meines Z0 z.B. eine Logfunktion aus mit der ich jeden VG =4 sichere in einem DB.
2. Will ich im OB1 meine Durchflussrate wie oben beschrieben berechnen können für Z0, Z1, Z2.

Wie ich zähle am Besten?
Mir ist schon das Steuern bekannt mit SW_GATE im Kontrollwort und dem Statuswort auch wie ich zurücksetzte, einen Algorithmus würde ich mir noch überlegen zum automatisieren.
Aber wo schreibe ich den meine Durchflussberechnung hin damit sie Zeit unabhängig erfolgt, also das die Zeit zwischen den Impulsen auch der tatsächlichen entspricht ?
OB40 - wird nur beim erreichend es Vergleichswerts ausgelöst also hier nicht oder?
OB1 - hat eine Zykluszeit ~ ? (wo sieht man das in Step7 ?)

Oder ist das mit der TON Funktion schon unkritisch, weil er die Zeit bereits passend auswertet mit dem Pulseingang von meinem Sensor wie es Harald beschrieben hat.


CPU basiert auf einer 318 ist aber eine VIPA 314ST
 
Zuletzt bearbeitet:
Wie ich zähle am Besten?
Mir ist schon das Steuern bekannt mit SW_GATE im Kontrollwort und dem Statuswort auch wie ich zurücksetzte, einen Algorithmus würde ich mir noch überlegen zum automatisieren.
Bei der Verwendung von Hardware-Zählern verzichte ich meistens auf den ganzen Brimborium mit Starten/Stoppen/Steueraufträgen der Zählkanäle. Ich lasse die Kanäle meistens endlos frei laufen und lese nur den Zählerstand aus.
Möglicherweise kann Deine Zähler-Hardware auch direkt die Periodendauer oder Frequenz des Eingangssignals messen? Da könnte es günstiger sein, diese Betriebsart zu nutzen. Was für Zähler-Hardware hast Du?

Aber wo schreibe ich den meine Durchflussberechnung hin damit sie Zeit unabhängig erfolgt, also das die Zeit zwischen den Impulsen auch der tatsächlichen entspricht ?
Bei max 10Hz könntest Du auf den Digitaleingang einen Prozessalarm bei steigender Flanke projektieren (falls Deine Hardware das unterstützt), und dann im OB40 die abgelaufene Zeit umrechnen.

OB40 - wird nur beim erreichend es Vergleichswerts ausgelöst also hier nicht oder?
Das kommt auf Deine Hardware drauf an und wie Du die projektiert hast.
Der OB40 wird bei allen projektierten Prozessalarmen ausgelöst. In den Startinformationen des OB40 wird in OB40_MDL_ADDR und OB40_POINT_ADDR mitgeteilt von welcher Baugruppe und welchem Eingang der Prozessalarm aufgerufen wurde. Siehe Step7-Hilfe zum OB40 und die Beschreibung Deiner Zähler-Hardware.

OB1 - hat eine Zykluszeit ~ ? (wo sieht man das in Step7 ?)
Rechtsmausklick auf die CPU > Zielsystem > Baugruppenzustand > Reiter: Zykluszeit

Harald
 
Hi @PN/DP ,

das ist natürlich ein sehr guter Ansatz!
Ich denke den Verfolge ich auch einmal quasi die Zählerdifferenz zwischen einem Zeit Intervall auszuwerten?
Kann ich dabei den auf TON vertrauen also quasi nicht die Zeit ET betrachten, sondern das Delta aus dem LADDR1 des Zählers bilden?
(Zum Zeitpunkt T0 und T1)

Ich habe extra diese Impulsvariante übernommen, damit ich eine unabhängige Programmstruktur habe.
Damit bei einem Wechsel der Hardware dann einfach den imp/L als Datentyp eingibt.
Klar könnte man das auch schön mit HART-Signal umsetzten, aber das habe ich noch nie gemacht und mir fehlt auch eine Karte dafür.
(und zwei Sensoren sind nur PNP-Transistoren die sind leider wirklich nur als Rechtecksignal zu gebrauchen..)

Also das mit dem Pointer des Eingangs ist natürlich klasse, das sehe ich mir auch noch an!
Eigentlich habe ich es über die Reihenfolge der Sensor Auswertung ausgeschlossen (verschiedene Messleitungen über Ventile), aber ein "Fehlerhafter Impuls" kann natürlich trotzdem nicht technisch ausgeschlossen werden.

Mit OB40 würde ich ungerne Zeiten berechnen, da ich hier bereits einen Wert speichere das sind schon ein paar Zeilen Code.
Ich versuche mich gleich mal an deiner ersten Idee mit der Differenzbildung.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Für die Nachwelt ich habe es jetzt wie folgt gelöst:
OB35 Weckalarm auf 1000ms gestellt.
OB35 Programmiert - Im Netzwerk 1 wird der Zählerwert des betroffenen Zählers zwei mal gespeichert in Var1 und Var2.
Anschließend bilde ich die Differenz daraus und multipliziere dies mit der genannten Formel.
Geg:
Sensor = "Wert" L/imp

Formel:
[(var1,2 Differenz =imp/s) *60]* L/imp

Also solange meine Gesamtzykluszeit des Projektes <1000ms bleibt habe ich immer den genauen Durchfluss das sollte eigentlich kein Problem sein.
Und dann kann man damit weiter arbeiten im OB1 z.B. Mittelwertbildung..
Eine Mengenbildung würde ich im OB40 realisieren da ich dort meinen Zähler zuordnen kann wie Harald schrieb.

Viel Erfolg und besten Dank allen!
 
Zurück
Oben