Hallo Leute,
ich habe als Werkstudent ein neues Projekt erhalten was mich ein wenig fertig macht...Ich soll einen FB schreiben der von aufgenommenen Messwerten die Steigung berechnen soll. Das speichern der Messwerte in einen Array der in einem DB liegt hab ich schon fertig bekommen( dies geschieht in FuP und AWL). Die Steigung soll am Ende über einen Zeitraum von ca. 5min gehen und mögliche Fehler durch Spikes sollen minimiert werden. Es liegt also ein Array mit ca. 300 Werten vor und die Berechnung läuft neben dem einlesen der Werte parallel. Dadurch würde ja eine Regression nicht funktionieren richtig?
Mein Vorgang wäre in SCL den Array auf zu rufen und in einer for-Schleife eine mittlere Steigung über 3 Werte zu berechnen, ungefähr so:
Steigung= (Wert[1]-Wert[0]+Wert[2]-Wert[1]+Wert[2]-Wert[0])/3 (wobei Wert[Index] ist)
Die Rechnung von dem Mittelwert sollte doch mögliche Spikes berichtigen oder?
Die Steigungswerte würde ich dann in einen weiteren Array im selben DB speichern und hier das selbe nochmals machen nur mit dem ersten und letzen Wert, dies müsste dann annähernd die Steigung sein die das System ( wahrscheinlich nur Temperaturmessung) nach 5min mit Spikes hat oder?
Was mein Problem ist, ist die Syntax für das aufrufen des Arrays...Vllt. hat ja auch jemand eine bessere Möglichkeit oder weiß mehr darüber?
So sieht die for-Schleife erstmal mit falschem Array Aufruf aus.
Ich hoffe ich konnte das halbwegs erklären,MfG Red:)
ich habe als Werkstudent ein neues Projekt erhalten was mich ein wenig fertig macht...Ich soll einen FB schreiben der von aufgenommenen Messwerten die Steigung berechnen soll. Das speichern der Messwerte in einen Array der in einem DB liegt hab ich schon fertig bekommen( dies geschieht in FuP und AWL). Die Steigung soll am Ende über einen Zeitraum von ca. 5min gehen und mögliche Fehler durch Spikes sollen minimiert werden. Es liegt also ein Array mit ca. 300 Werten vor und die Berechnung läuft neben dem einlesen der Werte parallel. Dadurch würde ja eine Regression nicht funktionieren richtig?
Mein Vorgang wäre in SCL den Array auf zu rufen und in einer for-Schleife eine mittlere Steigung über 3 Werte zu berechnen, ungefähr so:
Steigung= (Wert[1]-Wert[0]+Wert[2]-Wert[1]+Wert[2]-Wert[0])/3 (wobei Wert[Index] ist)
Die Rechnung von dem Mittelwert sollte doch mögliche Spikes berichtigen oder?
Die Steigungswerte würde ich dann in einen weiteren Array im selben DB speichern und hier das selbe nochmals machen nur mit dem ersten und letzen Wert, dies müsste dann annähernd die Steigung sein die das System ( wahrscheinlich nur Temperaturmessung) nach 5min mit Spikes hat oder?
Was mein Problem ist, ist die Syntax für das aufrufen des Arrays...Vllt. hat ja auch jemand eine bessere Möglichkeit oder weiß mehr darüber?
So sieht die for-Schleife erstmal mit falschem Array Aufruf aus.
Code:
....
BEGIN
// Anweisungsteil
i:=0; // counter als int
x:=19; // Anzahl an Elementen im Array-> DB hat symbolischen Namen Werte, Array hat den Namen Werte und ist vom Typ Real
FOR Werte.Werte[i*4] TO Werte.Werte[x*4] // *4 wegen Addressen 0.0;4.0;8.0...
Steigung=(Werte.Werte[(i+1)*4]-Werte.Werte[i*4]+Werte.Werte[(i+2)*4]-Werte.Werte[(i+1)*4]+Werte.Werte[(i+2)*4]-Werte.Werte[i*4])/3
//Steigung=(Werte.Werte[4.0]-Werte.Werte[0.0]+Werte.Werte[8.0]-Werte.Werte[4.0]+Werte.Werte[8.0]-Werte.Werte[0.0])/3
//0.0->1. Wert im Array 4.0->2. Wert 8.0->3. Wert
Werte.Steigung[i*4]=Steigung // Speichern der errechneten Werte im DB: Werte und dem Array: Steigung
i=i+1;
END_FUNCTION_BLOCK