- Beiträge
- 22.240
- Reaktionspunkte
- 6.912
-> Hier kostenlos registrieren
Also ich lese in der Doku: UINT32 * "0,001 Wh" (entspricht mWh)Obwohl in der Doku steht das die Energie in Wh ausgegeben wird sehe ich bei Aktuell 1,463(55000...) also werden wohl mehr Stellen angezeigt, darum die große Zahl.
Was ist dieses "bei Aktuell" genau? Du hast bisher noch keine Variable "Aktuell" erwähnt...
Und Du hast nicht meine Frage beantwortet wo genau Du die große Zahl siehst, welche kein Dezimalkomma enthält und so viele 00000 am Ende hat.
Das könnte mit meiner Vorhersage der sprunghaften Anzeige in Beitrag #10 zu tun haben, könnte aber auch bedeuten, daß es Kommunikationsprobleme mit der Klemme gibt.(Ok 1,4853kWh Zähler blieb einige Zeit stehen, danach lief er Tickweise weiter....dann wieder einige Zeit Stop, also auch direkt der Messwert aus der Karte)
"werden wohl DINT sein" ist keine Antwort die eines Programmierers würdig ist. Da kann auch eine implizite Typkonvertierung des ST-Compilers versteckt sein. Nach meiner Interpretation des Handbuchs müßten das korrekterweise UDINT (UINT32) sein.Datenwerte werden wohl DINT sein wenn da eine DINT_TO_REAL eingebaut ist/war.
Wenn ich Dir weiter bei Deinem Job der Fehler-Analyse helfen soll dann möchte ich durch Deine Augen sehen. Weil Deine Beiträge irgendwie keine eindeutigen Antworten enthalten.
So, mal Butter bei die Fische. Ich will diesen Code beobachten:
Code:
2: (* Energy *)
L1_IndexOut:=State;
L2_IndexOut:=State;
L3_IndexOut:=State;
IF (L1_IndexIn=State) AND (L2_IndexIn=State) AND (L3_IndexIn=State) THEN
L1_Data.Energy_Wh := DINT_TO_REAL(L1_VariantValue)*0.000001*CurrentTransformer ;
L2_Data.Energy_Wh := DINT_TO_REAL(L2_VariantValue)*0.000001*CurrentTransformer ;
L3_Data.Energy_Wh := DINT_TO_REAL(L3_VariantValue)*0.000001*CurrentTransformer ;
State:=State+1;
END_IF
...
TotalEnergy := L1_Data.Energy_Wh + L2_Data.Energy_Wh + L3_Data.Energy_Wh ;
Welchen Datentyp und welchen Wert haben/hatten die Variablen zu dem Zeitpunkt, wo das IF erfüllt ist (*):
CurrentTransformer
L1_VariantValue
L2_VariantValue
L3_VariantValue
L1_Data.Energy_Wh
L2_Data.Energy_Wh
L3_Data.Energy_Wh
TotalEnergy
(*) entweder speichere die Werte im IF auf Hilfsvariablen oder verzögere das Weiterschalten "State:=State+1"
schreibe die Werte bitte genauso auf wie sie angezeigt werden, keine Kommas dazu-interpretieren oder sonstige Verfälschungen.
Kannst Du vielleicht einen Screenshot machen während Du den Code beobachtest, wo man Werte der Variablen sieht?
Kannst Du vielleicht irgendeinen Screenshot vom Beobachten des Codes zeigen - nicht das wir hier grandios total aneinander vorbeireden und Deine Software irgendwas völlig anderes ist als ich mir darunter vorstelle?
Kannst Du den kompletten Baustein inklusive Variablen-Deklarationen als Quelltext hier anhängen? (also als normale Textdatei, nicht als Twincat-Projekt)
Harald