Zeitmessung mittels Drehgeber/Encoder

Big Joe

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

nachdem ich die Suchfunktion erfolglos gequält habe, nun hier meine Frage:

Hardware:

IM 151-7 F CPU

Problemstellung:

Zeitmessung bzw. Geschwindigkeitsermittlung eines Förderbandes mit der maximalen Bahngeschwindigkeit von 0,5 m/s mit Hilfe eines Drehgebers/Encoders mit der Strichzahl 8 (8 Striche/Pulse pro Umdrehung).

Es soll die Zeit ermittelt werden, bis 8 positive Flanken erkannt wurden. Das ganze soll im Rahmen einer Bachelorarbeit geschehen. Nun soll die Abfrage über 24 Stunden erfolgen und jeder einzelne Wert im DB festgehalten werden um nach 24 Stunden eine Auswertung zu erstellen.

Wir wollten das mit dem OB35 realisieren (Abrufzeit auf 10ms geändert), da außer der Messung sonst nichts in die S7 kommt.

Erster Ansatz war:

Rückwärtszähler von 8 auf 0 Runter. Solang Zähler aktiv ist, einen Timer aktivieren. Wenn der Zähler bei 0 angekommen ist, den Timerwert in einen DB festhalten und Messung erneut beginnen.
Was sagen die Experten dazu? Kenntnisse in AWL sind bei 0 wenn nicht sogar bei -1...



Kommando zurück! Alternative Lösung:

Zählerkarte ranhängen. Alle 300 ms Anzahl der Pulse abfragen und über diese Anzahl der Pulse die Geschwindigkeit ermitteln. So zumindest in der Theorie. Wie die Umsetzung aussieht, ist die nächste Frage. Der Wert, der alle 300ms ermittelt wird, soll ja gespeichert werden und nicht jedesmal überschrieben werden. s = Umfang/8 * Anzahl Pulse ; v = s / 300ms

Ich hoffe ihr könnt mir helfen ;)

Greetings,

Joe
 
Zuletzt bearbeitet:
Wenn du schon mit einer Zählerkarte arbeitest, wieso misst du dann nicht einfach die Frequenz? Diese sollte doch propotional zur Geschwindigkeit sein.
Wieso möchtest du die Geschwindigkeit über 24h speichern?
 
Wenn nichts weiter in der SPS läuft, kannst du das auch im OB1 machen. In dessen Kopf gibt es auch schon eine Date_Time (OB1-Anforderung), mit der kann man arbeiten. Immer 10 Impulse des Geber zählen (Flanke und Datenwort hochzählen oder Zähler der SPS nutzen). Dann beim 10-ten Impuls eine Flanke bilden und:

1. Dauer = "aktuelle Uhrzeit" - "letzte Speicherzeit" ,
2. aktuelle Speicherzeit in die letzte Speicherzeit transferieren
3. Zähler wider auf Null stellen
 
Servus,

die Messung soll nach 24 Stunden ausgewertet werden, um eventuelle Abweichungen der Bahngeschwindigkeit zu ermitteln. Deshalb die 24 Stunden Messung.

Greetings,

Joe
 
Es wäre ein Möglichkeit, z.B. jede Stunde (24 kB) die Daten mittels SFC84 WRIT_DBL auf den MMC Karte zu verschieben. Die DBs auf den MMC Karte müssen dann "unlinked" sein.
Finde ich aber Umständlich.
Dies wäre ein typische PC Anwendung, die Daten auf den PC zu speichern, wo man dann die Daten analysieren kann.
 
Also,

gerade nochmal alles besprochen: Sie wollen lieber die Geschwindigkeit und nicht die Änderung. Jetzt ist die Idee, einen DB vollzuschreiben (Zähler!), ist dieser voll wird er auf den PC übertragen und währenddessen ein zweiter DB vollgeschrieben. Der übertragene DB soll dann mit Zenon ausgewertet werden. Das ist aber nicht mehr meine Baustelle.

Ich soll jetzt eigentlich "nur" alle 300ms den Wert in einen DB schreiben und nach 32000 Schreibvorgängen in den 2. DB wechseln.


Ach ja, desweiteren soll die Messung nur noch 8 Stunden dauern. Des wären somit 3 DBs vollschreiben bei 300ms Abfrageintervall, lieg ich da richtig?


Nächster Edit:

Ich hab jetzt ein Array im DB erstellt. Jetzt stellt sich mir die Frage, wie ich ein Word nach dem anderen befülle? Also das er automatisch zum nächsten Word springt, wenn er eins beschrieben hat.

Wie hört sich das für euch an?
 
Zuletzt bearbeitet:
Zurück
Oben