sps_klassik
Level-2
- Beiträge
- 611
- Reaktionspunkte
- 69
-> Hier kostenlos registrieren
Du musst noch schauen was die Waage liefert.Das ist doch die Karte?
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Das Du die, zugegebenermaßen, geringen Fehler, die durch die Statusbits entstehen können eliminiert hast.Ach so, welchen Vorteil habe ich, wenn ich mit 4095 arbeite anstatt mit 32.767? Und was bringt es, wenn ich die Statusbits eliminiere?
... oder die Bits einfach auf 0 setzen (Du solltest den übertragenen Wert zunächst um 4 Bits nach rechts schieben mit SHR, um die Statusbits zu eliminieren. Jetzt musst Du aber mit 4095 arbeiten.
... AND 16%FFF0
), dann arbeitet man mit 0..32752 (nominal 32767), mit Stufen von je 16. Also den eigentlichen Analogwert vom ADU linksbündig in ein 16 Bit Word/Int schreiben.AStruct : STRUCT
Wert : INT;
Diag0 : BOOL;
Diag1 : BOOL;
Diag2 : BOOL;
Diag3 : BOOL;
valid : BOOL;
sim : BOOL;
...
END_STRUCT;
AnalogWert : AStruct;
AnalogWert.Diag0 := AnalogRohwert.%X0;
AnalogWert.Diag1 := AnalogRohwert.%X1;
AnalogWert.Diag2 := AnalogRohwert.%X2;
AnalogWert.Diag3 := AnalogRohwert.%X3;
AnalogWert.Wert := AnalogRohwert AND 16%FFF0; //Diagnosebits alle auf 0 setzen
0..2047: Dann ändert sich der Analogwert in 2048 Stufen von je 1 : 0 - 1 - 2 - 3 - ... 2047Ach so, welchen Vorteil habe ich, wenn ich mit 4095 arbeite anstatt mit 32.767?
Du arbeitest dann mit dem reinen "richtigen" Wert 0..32752). Wenn du die Statusbits drin lässt, dann wird der Wert sehr minimal verfälscht, maximal um weniger als die Auflösung (1 Stufe, max 15) des ADU größer.Und was bringt es, wenn ich die Statusbits eliminiere?
Dein AD Wandler arbeitet nur in diesem Bereich. Du hast keinen Genauigkeitsgewinn durch einen größeren Wertebereich.Ach so, welchen Vorteil habe ich, wenn ich mit 4095
„Erstens danke ich euch für die umfangreichen Informationen.“PROGRAM Scale
VAR_INPUT
iWert_Codesys: WORD;
END_VAR
VAR_OUTPUT
Gewicht: REAL;
END_VAR
VAR
result: WORD;
END_VAR
result:= iWert_Codesys;
result := result AND 16#FFF0;
result := SHR (iWert_Codesys,4);
Gewicht := WORD_TO_REAL (result);
weil die Ganzzahl-Division bzw das SHR 168 / 16 = 10 ergibtAlso so habe ich es dann gemacht, warum habe ich bei 0 einen 10 woher kommt es
leiderWeil Du das mit den Analogwerten noch nicht richtig begriffen hast.
das habe jzt gemachtDeine Waage liefert Dir einen Strom, der proportional zum gemessenen Gewicht ist.
Übrigens kannst Du Dir die Zeile 4 schenken, denn durch das SHR gehen die Stellen eh verloren.
Was Du gemacht hast ist, die Statusbits zu eliminieren, aber dadurch erhältst noch keine physikalische Größe, in diesem Fall das Gewicht. Dafür musst Du den Wert noch skalieren.
In Zeile 8 musst Du noch die in REAL gewandelte Zahl mit dem Gewicht multiplizieren, bei dem die Waage 20mA ausgibt und dann das Ganze durch 2047.0 teilen. Soweit das Maximalgewicht eine Ganzzahl ist auch hier ein ".0" anhängen.
Bei 1500 sollte die Waage mir die 4 mA anzeigen.Gewicht := WORD_TO_INT (result)*1500/2047;
Damit hat er mir dann 0 angezeigt, aber wenn ich etwas darauflege, bleibt es bei 0.Gewicht := WORD_TO_INT (result)*100/2047;
Gewicht := WORD_TO_REAL(result) * 1500.0 / 2047.0;
(ich habe jetzt nicht geprüft, ob die Mathematik der Formel korrekt ist)PROGRAM Scale
VAR_INPUT
iWert_Codesys: WORD;
END_VAR
VAR_OUTPUT
Gewicht: REAL;
END_VAR
VAR
offset: INT := 10;
result: WORD;
analogValue: WORD;
maxlimit: WORD := 32752;
maxGewicht: REAL := 1500.0; // Maximalgewicht in kg
aduBereich: REAL := 2047.0; // ADU-Bereich
END_VAR
So sieht es besser aus, aber leider habe ich immer noch 16er-Schritte.result := SHR (iWert_Codesys,4);
Gewicht := (WORD_TO_REAL( result - offset) / aduBereich)* maxGewicht;
Was meinst Du mit 16er Schritte? Ganz genau wird es nie werden, kann es technisch auch nicht. Das Maximalgewicht mit dem die Waage belastet werden darf wird halt in 2047 Teile unterteilt, Änderungen die Kleiner sind werden nicht erfasst.so sieht besser aus, aber leider immer noch 16ene schritte
ich habe zwar jzt die 0 bei 0kg aber immer noch keine genauer Wert
Ach so, das heißt, je weniger ich maximal belasten möchte, desto genauer wird es.Was meinst Du mit 16er Schritte? Ganz genau wird es nie werden, kann es technisch auch nicht. Das Maximalgewicht mit dem die Waage belastet werden darf wird halt in 2047 Teile unterteilt, Änderungen die Kleiner sind werden nicht erfasst.
Wenn Deine Wage tatsächlich 1500g nehme ich als Einheit mal an wiegen kann, dann dann entspricht jede Änderung des Messwertes um 1 ungefähr 740mg. Dazu kommt dann auch noch die Toleranz der Karte, die vermutlich über den 740mg liegen wird.
Laut Handbuch hat die Klemme eine Abweichung von 0,1% auf den Messbereichsendwert. Da die Karte von 4mA - 20mA misst ist der Messbereich 16mA, 0,1% davon sind 16MicroA, das entspricht bei 1500g einem möglichen Fehler von 1,5g womit Du deutlich über den 740mg liegst.
Ich hoffe, ich habe hier keinen Blödsinn verzapft, falls ja haut mir bitte auf die Finger.
Leider habe ich in der Werkstatt keine 100 kg, die ich auf meinen Aufbau legen könnte.Ja was hast du den als Gewicht auf der Waage?Leg mal 100 kg drauf.Bei einem Messbereich von 0..500kg
müsstest du dann 7,2mA messen
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen