Step 7 Programmieren und Auswerten von Impulsen aus Energie

S7Benutzer

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo werte User,

im Rahmen einer Projektarbeit benötige ich eure Unterstützung.
Es handelt sich dabei um ein komplexes Thema wo ich mir ein bisschen die Zähne ausbeiße.

Es stehen folgende Werte zur Verfügung.
Energiezähler 1: Werte
50000 Impulse = 1 kWh; Wandlerfaktor (Verhältnis Strom*Spannung des Wandlers) 3,3

Energiezähler 2: Werte
10000 Impulse = 1 kWh; Wandlerfaktor (Verhältnis Strom*Spannung des Wandlers) 33

Die Impulse werden über eine Digitale Eingabebaugruppe erfasst.

Unserer Ausbildungsleiter möchte nun eine geeignete Programmierung, die entsprechend dem digitalen Impulsen die Leistung und Arbeit je Zähler ermittelt.
Es gibt da ja die Formel W=P*t, jedoch fehlt mir die zündende Idee wie ich die "hohe" Anzahl an Impulsen verarbeite, da ein S7 Vowärtszähler hierfür nicht geeignet ist ( Werte >999).

In den Anforderungen ist auch gewünscht, dass aller 15 Minuten eine Auswertung vom aktuell berechneten und vorherigen Wert, also entstehende Differenz ausgegeben wird.

Für Eure Unterstützung bedanke ich mich bei Euch :)
 
Impulse kannst du "in" eine normale Variable zählen.
Die Vorgehensweise hängt ein wenig von der, zur Verfügung stehenden, Hardware ab und natürlich auch von eurem Lernstand.
Nehmen wir mal an, du hast einen normalen Input.

50000 Imp./KW entspricht ca. 13.9 Imp./Sekunde bei 1 KW Abgabe.
Da mußt du aufpassen, wenn mehr als 1 KW abgenommen wird, z.Bsp. bei 10 KW wären das schon 500 000 Imp./Stunde, also 139 Imp./Sek..
Das muß die Hardwäre an Geschwigkeit auch leisten können, Zykluszeit Software und erlaubte Eingangsfrequenz am Inputmodul)!

Wenn das geklärt mußt du noch überlegen, über welche Zeiteinheit du zählen willst.

1. Du könntest zählen, so lang der Verbraucher eingeschaltet ist und die Zeit komplett messen.
2. Du könntest jeweils 1 Minute Zählen, den Verbrauch ermitteln und aufaddieren.
3. Du könntest jeweils 1 Sekunde Zählen, den Verbrauch ermitteln und aufaddieren.
Auch andere Zeiteinheiten gehen natürlich, 5 Sekunden, 10 Sekunden

Lt. Aufgabenstellung würde zuerst wohl 15 Minuten ausreichen.

Normalerweise gibt es hier keine kompletten Lösungen, du solltest mit deinen Vorschlägen kommen und hier gezielte Fragen stellen.
Ich skizziere das Ganze mal hier auf die Schnelle, du solltest das testen und deinen Bedürfnissen Anpassen, bzw. bei einem Fehler auch korrigieren.

Du eine Variable DINT an Ist_Zaehlung (MD200).
Du eine Variable DINT an Zaehlung (MD204).
Du eine Variable DINT an Alt_Zaehlung (MD208 ).

Ich mach das mal mit Merken, ein DB der alle benötigten Variablen enthält wäre schöner.
Dazu noch eine Zeit, die 15 Minuten lang läuft.

Die Impulse zählst du, indem du von deinem Input eine Flanke (Hilfsmerker M212.0) bildest und bei jeder Flanke deine Variable (MD200) um 1 hochzählst.

Code:
U #Dein_Input
FP M212.0
SPBN NIX0
 
L Ist_Zaehlung
L 1
+D
T Ist_Zaehlung

NIX0: NOP 0


Die Zeit startest du ebenfalls mit einer Flanke.

Variable "Starte_Zeit" (M212.1)
SE-Zeit "Laufzeit" (T10)

Code:
UN Starte_Zeit
L S5t#15m
SE Laufzeit
U Laufzeit 
= Starte_Zeit

"Starte-Zeit" wird nun alle 15 Minuten genau einen Zyklus lang True sein.
Mit dem Impuls von Starte_Zeit trägst du zuerst die Variable "Zaehlung" in die Variable "Alt_Zaehlung", dann die Variable "Ist_Zaehlung" und die Variabel "Zaehlung" ein.
Die Variable "Ist-Zahelung" setzt du dann zurück auf 0.

Code:
U Starte_Zeit
SPBN NIX1

L Zaehlung
T Alt_Zaehlung

L Ist_Zaehlung
T Zaehlung

L 0
T Ist_Zaehlung

NIX1: NOP 0

Mit den Werten von Zaehlung und Alt_Zaehlung kannst du Verbrauch und Arbeit berechnen, auf der Basis von 15 Minuten.

Zu guter Letzt ist das Ganze doch fast komplett, aber alles in einem Datenbaustein oder in einem FB mit statischen Variablen wäre viel schöner und zumindest das wäre noch eine nette Aufgabe.
Und NEIN, KOP oder FUP machst du besser selbst. :ROFLMAO:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
50000 Imp./KW entspricht ca. 13.9 Imp./Sekunde bei 1 KW Abgabe.


Ralle, da hast du dir richtig Mühe gegeben. Eigentlich ist dem nix mehr hinzuzufügen. Aber du hast den Wandler vergessen.

bei einem Wandlerlungsverhältnis 3,3 werden und 1kW werden 4,21 Imp/Sekunde gezählt.
 
Hallo Jungs,

danke für eure Mühe.

Ich möchte für die beiden verschiedenen Zähler je einen FB generieren, also mit Merkern oder Timern weniger was machen, sondern gern alles im FB.
Die Zählung ist in Summe für 15 Eingangssignale (DI), von daher ist ein FB dafür geeignet, oder was denkt ihr?

Die Leistung des Zählers soll aller 5 Sekunden ausgewertet bekommen.
Die Arbeit des Zählers soll aller 15min ausgegeben werden, einschl. einer Ausgabe von "alten" und "neuem" Wert mit Differenzangabe.

An welcher Stelle implementiere ich je Zähler den Wandlerfaktor?

Würdet ihr mir bitte das Progamm in diesem Umfang vorstellen?

Besten Dank :)
 
Wenn du "mit Merkern oder Timern weniger was machen" willst ist sicher ein FB der richtige Ansatz. Wir wissen jetzt natürlich nicht wir fit du schon bist, aber um dem Timer-Thema aus dem Weg zu gehen würden sich im FB Multiinstanzen vom SFB4 (TON) anbieten.

Ich würde vorschlagen, du stellst uns mal vor wie dein FB beschaltet werden soll, und dann diskutieren wir mal drüber.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Modifikationen solltest du nun selbst vornehmen und dann hier vorstellen.
Da wird dir dann mit Sicherheit weitergeholfen.
Zeit-Baustein in einem FB kann man mit dem SFB4 (TON) erstellen, eine Stat-Var anlegen und dann dort SFB4 (oder TON) als Datentyp. Alle anderen Variablen ebenfalls im Stat-Bereich, den Zählimpuls natürlich als Eingangs-Signal, die Ergebnisse als Output direkt bzw. wenn gewünscht in eine Struct (oder UDT) verpackt als OUTPUT.

Wenn du 5-Sekunden -Intervalle zählst kannst du natürlich den Istwert alle 5 Sekunden ermitteln und anzeigen. Für 15 Minuten wird das dann in einer entsprechenden Variable einfach aufaddiert. Im Stat-Bereich des FB kannst du den TON für mehrere Variablen nutzen.
 
Hallo,

folgendes ist im FB 1 Test vorbereitet.
Deklorationen:
IN:
Eingang (Bool)
Wandlerfaktor (Real)
Synchr_Zeit (Real)

OUT:
Zaehlung (DInt)
Zaehlung_Ist (DInt)
Zaehlung_Alt (Dint

STAT:
Merker_FP (Bool)
Start_Zeit_5s (Bool)
Zeit (TON)
Wandlerfaktor_Dint

Für die beiden verschiedenen Arten von Energiezähler (Wandlerfaktoren) möchte ich als Input den Wandlerfaktor (Real-Format) angeben.
Für die Werte der Zaehlung möchte ich Variablen eigens konfigurierter DBs anlegen.

Den "Wandlerfaktor_Dint" muss ich ja aufgrund der Berechnung als DInt angeben (es kommt je Zähler der Wert Wert 3,3 oder 33 infrage). Daher habe ich diesen Wert wie folgt umgewandelt (siehe Anhang).

Den SFB 4 ("Zeit") habe ich in meinen FB 1 hineingezogen, hier habe ich die entsprechenden Eingänge beschaltet (PT für Test 1 Min), wobei für den Input brauche ich eine geeignete Variable - Idee?

Im Programmieren ist schon Know how vorhanden, jedoch habe ich leider knappe 8 Monate damit weniger zu tun gehabt.
Für Eure Mühe schon jetzt vielen Dank.
 

Anhänge

  • SC1.JPG
    SC1.JPG
    44 KB · Aufrufe: 41
Mal ein kleiner Tip am Rande:

Wenn du über jedes Netzwerk einen Titel hinschreibst, aus dem man Erkennen kann was du in dem Netzwerk machst wirds leserlicher.

Und jetzt zum Code:
In NW4 wandlest du den Wandlerfaktor von Real nach Dint, fragst aber in NW 2 schon den Dint ab --> wird beim ersten Druchlauf nach Änderung nicht funktionieren.
Warum rechnest du nicht gleich in Real sodass Zaehlung ein Realwert wird?
Code:
L   Zaehlung_ist
ITD
DTR
L  Wandlerfaktor
*R
T  Zaehlung

Wie soll das mit dem Timer funktionieren? Ich dachte du möchtest alle 5s einen Impuls um die Leistung der über die letzen 5s benötigten Arbeit zu berechnen. Das kann ich so nicht erkennen.
Rein formal passt die Zeitkonstante T#1M nicht zum Symbol Start_Zeit_5s.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der TE sollte auf jeden Fall den "kleinen Tip am Rande" von Aventinus beherzigen.
Mit dem Befehl "Round" in NW4 würde er zwar eine 32Bit Ganzzahl erzeugen, aber aus 3,3 eine 3 machen und damit
eine hohe Ungenauigkeit erzeugen.

Gruß, Toki
 
Zurück
Oben