Berechnung von Teile pro Stunde u. Berechnung Tellerdrehzah

andreHST

Level-1
Beiträge
27
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute wenn ich nochmal nerven darf,

habe noch 2, wirklich nur noch 2 Sachen die mir ein wenig Kopfschmerzen bereiten. Wäre mal wieder für eine Lösung sehr dankbar....

Problem 1:

Teile pro Stunde:
Ich möchte mir die Teile pro Stunde ausrechnen lassen, dieser Wert soll sich immer wieder automatisch aktualisieren... Hätte den Gesamt teile Zähler VW4001. Komme hier echt garnicht klar.


Problem 2:

Teller Drehzahl:
Ich habe an einem Motor einen Inkrementalgeber. Eine Umdrehung entsprechen 100 Inkremente... Naja würde mir aus dem ganz gerne die Geschwindigkeit berechnen... Woher nehm ich die Zeit???

Also Leute, schreibt bitte auch wenn ihr mich für völlig bescheuert haltet...


Danke danke

Mfg
Andre
 
Re: Berechnung von Teile pro Stunde u. Berechnung Tellerdreh

andreHST schrieb:
Hallo Leute wenn ich nochmal nerven darf,
Problem 1:

Teile pro Stunde:
Ich möchte mir die Teile pro Stunde ausrechnen lassen, dieser Wert soll sich immer wieder automatisch aktualisieren... Hätte den Gesamt teile Zähler VW4001. Komme hier echt garnicht klar.
VW4001 ist nicht verboten, aber wenn ich es noch richtig weiß, sind in der 200er auch die Bytes durchnummeriert, so daß:
VW4000 die Bytes VB4000 und VB4001 umfaßt
VW4002 die Bytes VB4001 und VB4002,
VW4001 die Bytes VB4002 und VB4000 und damit VW4000 oder VW4002 überlagern würde. Es ist also nicht verwendbar, wenn du anderswo VW4000 oder VW4002 verwendest!
Andersherum ergibt die Parametrierung mit dem TD200-Assistent mit 50% Wahrscheinlichkeit ungerade Adressen. Dann ist es in Ordnung, da die Bytes davor und dahinter byteweise für einzelne Zeichen genutzt werden.

Aktualisierung pro Stunde:

a) Timer kann eine Stunde: //weiß ich jetzt nicht

LD Tx // Stunde abgelaufen
S Mx.y,1 //Neuberechnung durchführen

b) Timer kann keine Stunde, aber 1 Minute:
LD Tx // Minute abgelaufen
+i +1,MB10 // MB10 zählt Minuten
LDI= 60,MB10 // Stunde erreicht?
MOVB 0,MB10 // von vorne
S Mx.y,1 //Neuberechnung durchführen


LD Mx.y
call Neuberechnung

Neuberechnung:
MOVW VW4001,AC0 // Annahme Teilezähler läuft durch, Gesamtteile
MOVW AC0,AC1
-I VW4050,AC0 //VW4050 hat den Zählerstand vor einer Stunde
MOVW AC0, VW4052 //VW4052 ist die Differenz, also die Teile pro Stunde
MOVW AC1,VW4050 // speichere den Zählerstand für die nächste Berechnung
R Mx.y,1 //Neuberechnung erledigt
RET


Häufigere Aktualisierung, z.B alle 10 Min, mit verminderter Genauigkeit:

LD Tx // Zeit 10 abgelaufen
S Mx.y,1 //Neuberechnung durchführen

LD Mx.y
call Neuberechnung

Neuberechnung:
MOVW VW4001,AC0 // Annahme Teilezähler läuft durch, Gesamtteile
MOVW AC0,AC1
-I VW4050,AC0 //VW4050 hat den Zählerstand vor 10 Minuten
*I +6,AC0 //AC0 ist die Differenz, also die Teile pro 10 Min
MOVW AC0, VW4052 //VW4052 ist jetzt 6*Teile pro 10 Min, also Teile Stunde
MOVW AC1,VW4050 // speichere den Zählerstand für die nächste Berechnung
R Mx.y,1 //Neuberechnung erledigt
RET

Häufigere Aktualisierung, z.B alle 10 Min, mit voller Genauigkeit:

LD Tx // Zeit 10 abgelaufen
S Mx.y,1 //Neuberechnung durchführen

LD Mx.y
call Neuberechnung

Neuberechnung:
MOVW VW4001,AC0 // Annahme Teilezähler läuft durch, Gesamtteile
MOVW AC0,AC1
-I VW4050,AC0 //VW4050 hat den Zählerstand vor 60 Minuten
MOVW AC0, VW4052 //VW4052 ist jetzt Teile Stunde
MOVW VW4054,VW4050 //VW4054 hat den Zählerstand vor 50 Minuten
MOVW VW4056,VW4054 //VW4056 hat den Zählerstand vor 40 Minuten
MOVW VW4058,VW4056 //VW4058 hat den Zählerstand vor 30 Minuten
MOVW VW4060,VW4058 //VW4060 hat den Zählerstand vor 20 Minuten
MOVW VW4062,VW4060 //VW4062 hat den Zählerstand vor 10 Minuten
MOVW AC1,VW4062 // speichere den Zählerstand für die nächste Berechnung
R Mx.y,1 //Neuberechnung erledigt
RET

Das funktioniert natürlich erst, wenn eine Stunde abgelaufen ist und alle Speicher einen Inhalt haben. Also könntest du in den ersten 50 Minuten die Differenz immer zu demjenigen Speicher bilden, der schon einen Inhalt hat. Das sind dann 5 verschiedenen Fälle...
Außerdem mußt du in allen Beispielen die Speicher initialisieren (z.B) im Anlauf auf 0 setzen, sonst bekommst du bei der 1. Berechnung Müll. Ebenso mußt du etwas tun, wenn du den Gesamtteilezähler zurücksetzt oder wenn er überläuft.

Problem 2:

Teller Drehzahl:
Ich habe an einem Motor einen Inkrementalgeber. Eine Umdrehung entsprechen 100 Inkremente... Naja würde mir aus dem ganz gerne die Geschwindigkeit berechnen... Woher nehm ich die Zeit???
Die Zeit nimmst du am besten von einem Tinmer der einen Interrupt auslösen kann. Die Berechnung ähnelt der der Teile pro Stunde. Du kannst sie im Interrupt-Programm durchführen. Wird aber viel berechnet, so ist das nicht gut, da ein Interrupt-Programm so kurz wie möglich sein sollte. Das machst du dann so:

Interrupt-Programm:
MOV Zählerstand, ZwischenSpeicherZählerstand
MOV Timer, ZwischenSpeicherZeit // höhere Genauigkeit, falls Interrupt-Programm verzögert aufgerufen wird
S MerkerDasNeuGerechnetWerdenMuss,1
RETI

Und im Hauptprogramm:
LD MerkerDasNeuGerechnetWerdenMuss
Call Neuberechnung

Unterprogramm Neuberechnung:
MOVD ZwischenSpeicherZählerstand,AC0
-D ZählerstandAlt, AC0
ITD AC0,AC0
DTR AC0,AC0
MOVD ZwischenSpeicherZeit,AC1
-D ZeitAlt, AC1
ITD AC1,AC1
DTR AC1,AC1
/R AC1,AC0 //Impulse // Zeit = Frequenz
* FaktorDrehzahl, AC0 // irgendein Faktor für Anzeige in U/min oder Meter/pro Jahr oder so
MOVR AC0,Ergebnis
MOVD ZwischenSpeicherZählerstand,ZählerstandAlt
MOVD ZwischenSpeicherZeit,ZeitAlt // für die Differenzbildung beim nächsten mal
R MerkerDasNeuGerechnetWerdenMuss,1 // erledigt
RET

Das Zähle des Inkrementalgebers erledigst du am besten mit einem der schnellen Zähler, die die 200 hat.
 
Zurück
Oben