Step 7 Temperaturmessung mit 3 Sensoren

tarzipan7

Level-2
Beiträge
112
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
gibt es irgendwo Beispiele wie so eine Programmierung gemacht wird?
Die 3 Sensoren kommen auf 3 Analogeingängen rein.
Jetzt sollte ich ein Resultat aus diesen berechnen und nätürlich auch Sensorerror berücksichtigen.

Vlt kennt sich wer aus damit., SCL wäre schon gut.
Danke und Gruss
 
Kannst Du das etwas gensuer erklären. Willst Du einen Mittelwert von den 3 Werten oder wie?


Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also eigentlich nicht eine reine Mittelwertbildung. Falls zb ein Sensor abweicht von den anderen zwei sollen nur diese beiden berücksichtigt werden, also nur Mittelwert über 2 Sensoren. Dies würde auch gelten bei einem Ausfall eines Sensor.
 
Dann vergleiche die Werte und Definiere einen Toleranzbereich. Wenn einer der Sensoren aus diesem Bereich über eine Gewisse Zeit raud ist soll er ignoriert werden.
So direkt in SCL kann ich Dir das auch nicht sagen. Habe es lange nicht mehr gemacht


Gesendet von iPhone mit Tapatalk
 
Könnte hier nicht der Median ein hilfreiches Werkzeug sein? Der Median mit 3 Werten ist leicht umzusetzen: einfach den größten und den kleinsten wert ignorieren. Damit würde ein einzelner Sensorfehler direkt ausgeblendet.

Ergänzung: Sofern ein Mittelwert benötigt wird kannst Du einen aus allen drei sENsotreen bilden. Der Sensor mit der größten Abweichung wird ausgeschlossen. Den Prozesswert bildest Du dann aus den verbleibenden zwei Sensoren. Diese Entscheidung wird bei jeder Messung durchgeführt und blendet wie der Median kurzzeitige Sensorstörungen aus.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
weißnix hat Recht. Der Median wird für so eine Aufgabe genommen. Leitsysteme haben hierfür gleich einen fertigen Baustein.
Ansonsten bildest Du den Median von Hand.

A > B = größerer Wert 1
A > C = größerer Wert 2
B > C = größerer Wert 3

Median = Kleinster Wert aus (größerer Wert 1 , größerer Wert 2, größerer Wert 3)

Gruß Frank
 
Wenn Du statt z.B. "A > B = größerer Wert 1" geschrieben hättest "größererWert1 = max(A, B)" , dann hätte ich auf Anhieb verstanden, was Du meinst.
Woher stammt Deine Schreibweise? Ist das der Versuch, auf umgangssprachliche Art etwas rüberzubringen? Gibt es eine Programmiersprache, in der der Sachverhalt so programmiert würde?

Du meinst also median = min(max(A;B);max(B;C);max(C;A))

Also alle 3 Werte paarweise vergleichen und mit dem jeweiligen Maximum weiterarbeiten - dadurch ist der kleinste der 3 Werte A, B und C eliminiert.
Dann die aus den drei Zwischenergebnissen das Minimum heraussuchen - dadurch wird der grösste der 3 Werte A, B und C eliminiert.
 
Hallo Heinileini,
genauso wie Du es aufgeschrieben hast, habe ich es gemeint. Es war etwas ungeschickt von mir formuliert.

Es geht auch folgender Weg

median = max(min(A;B);min(B;C);min(C;A))

Gruß Frank
 
Danke für die guten Tips. Ich brauche 2 aus 3 Sensoren.

@weissnix_
Sofern ein Mittelwert benötigt wird kannst Du einen aus allen drei sENsotreen bilden. Der Sensor mit der größten Abweichung wird ausgeschlossen. Den Prozesswert bildest Du dann aus den verbleibenden zwei Sensoren. Diese Entscheidung wird bei jeder Messung durchgeführt und blendet wie der Median kurzzeitige Sensorstörungen aus.

Wie mach ich denn sowas?? "sensotreen"
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie mach ich denn sowas?? "sensotreen"
Nicht so buchstäblich nehmen! Dürfte eine kleine Anhäufung von Tippfehlern sein und schlicht und einfach "Sensoren" bedeuten!
Zugegeben, hier im Forum tauchen natürlich Begriffe und Abkürzungen auf, die man (noch) nicht kennt oder nur aus anderen Zusammenhängen und mit anderen Bedeutungen - da darf man selbstverständlich nachfragen, wenn man Probleme mit der Entschlüsselung hat. Lieber 1-mal zu viel fragen, als 10-mal zu wenig! ;o)

Ich brauche 2 aus 3 Sensoren.
Auf den ersten Blick verständlich. Auf den zweiten aber nicht unbedingt.
Sind 2 der 3 Werte dicht bei einander oder sogar identisch, so bringt die Bildung ihres Mittelwertes keine neuen Erkenntnisse.
Sind die 3 Werte sehr unterschiedlich, so ist der "Wahrheitsgehalt" jedes einzelnen der 3 Werte sowieso eher fraglich.
Aus der Beobachtung, dass 3 Sensoren unterschiedliche Werte melden, kann man noch nichts Negatives ableiten.
Du könntest Dir Gedanken machen, wie gross die Abweichungen sein dürfen, die Du noch tolerieren würdest und dann "Alarm schlagen", wenn anscheinend ein Problem vorliegt.
Dies würde ich aber zusätzlich zu und "unabhängig" von der MedianBildung realisieren. Man kann dafür viel Aufwand treiben und ob der noch im sinnvollen Verhältnis zum Nutzen steht ... Deine Entscheidung.
 
Zuletzt bearbeitet:
@Heinileini
Ich hatte meinen Vorschlag bewußt so formuliert. U.u. sind die Sensoren in einem größeren Prüfraum angeordnet, sodass es wegen der Zonenbildung durchaus Sinn ergeben kann, den Prozesswert aus mehreren Sensoren zu mitteln.

@tarzipan7
Ein Codebeispiel kann ich dir jetzt nicht schnell zur Verfügung stellen. Das krieg ich eventuell am Sonntag auf die Reihe. Ich würde auch keinen festen Grenzwert für den Ausschluss definieren, sondern einfach den mit der größten Abweichung vom Mittelwert oder Median ausschließen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ich jetzt was Unflätiges im Sinn habe ist Dir schon klar?!
sENsotreen war wie Du richtig erkanntest ein krummfingerbedingter Typo.

Bewußt war die Unterstellung, das ein Mittelwert aus mehr als einem Sensor angestrebt wird. :roll:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich sollte immer noch 2 von 3 Sensoren die am nächsten beieinander liegen (Werte:smile:) auswerten und von diesen beiden den Mittelwert machen.
Habe aber keine Ahnung wie ich das in SCL realisieren kann.
Hat mir wer Tips?

Gruss
 
Hast Du überhaupt schonmal einen eigenen Code ausprobiert?

Hier mal schnell zusammengeschreibselt und natürlich nicht getestet:
Code:
var

i_tempa:int;
i_tempb:int;
i_tempb:int;
i_mw1:int;
i_diffabsa:int;
i_diffabsb:int;
i_diffabsc:int;
i_tempvalid1:int;
i_tempvalid2:int;
i_temp_result:int;
x_a:bool;

end_var

i_mw1:=(i_tempa+i_tempb+i_tempc)/3;
i_diffabsa:=abs(i_mw1-i_tempa);
i_diffabsb:=abs(i_mw1-i_tempb);
i_diffabsc:=abs(i_mw1-i_tempc);

x_a:=false;

if i_diffabsa < i_diffabsb then    (*kleinerer Wert von difftempa und difftempb ist gültig*)
    i_tempvalid1:=i_tempa;
    x_a:=true;                    (*a ist schon gültig*)
else
    i_tempvalid1:=i_tempb;
end_if;

if x_a then
    if i_diffabsb < i_diffabsc then        (*a schon gewählt, auswahl zwischen b und c*)
        i_tempvalid2:=i_tempb;
    else
        i_tempvalid2:=i_tempc;
    end_if;
else
    if i_diffabsa < i_diffabsc then        (*b schon gewählt, auswahl zwischenb a und c*)
        i_tempvalid2:=i_tempa;
    else
        i_tempvalid2:=i_tempc;
    end_if;
end_if    

i_temp_result:=(i_tempvalid1+i_tempvalid2)/2;

Dieser Code sollte das leisten, was ich in meinem Edit von #5 schrieb.
 
Zuletzt bearbeitet:
läuft mal optimal, danke viel mal. muss noch ein wenig erweitern mit einem errorbit von jedem sensor


gruss
 
Zuletzt bearbeitet:
Zurück
Oben