Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 70

Thema: EL3403 kWh Zählerstand bleibt unregelmäßig nach kurzer Zeit stehen

  1. #1
    Registriert seit
    09.02.2012
    Beiträge
    302
    Danke
    16
    Erhielt 17 Danke für 17 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!

    Habe mal Testweise eine EL3403 mit einem EK1100 Buskoppler zur Netzerfassung bzw Stromzählung zusammengebaut,
    laufen tut das ganze mit Twincat auf einem Zotac MiniPC und WinCC als Visu ( Testweise ),
    im Programm selber wird nur die Klemme ausgelesen und per Modbus TCP von WinCC aus ausgelesen ohne irgendwelche anderen Signale.

    Jetzt kommt es vor das alle 2-3 Tage der Zähler stehen bleibt, man sieht im WinCC Trend den Zähler steigen und irgendwann friert der Wert ein ( auch im Twincat )
    wenn man den im Programm wieder auf 0 setzt zählt er wieder ganz normal weiter, passiert meist so zwischen 1-3 kWh gezählter Energie.

    im Systemmanager kommen keine Fehlermeldungen sonst läuft auch alles Ok Strom Spg. Frequenz usw. und so fort.

    Bin für jeden Tipp Dankbar!


    lg
    Zitieren Zitieren EL3403 kWh Zählerstand bleibt unregelmäßig nach kurzer Zeit stehen  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Ich nehme an Du addierst Du irgendwelche Leistungen auf, da kann es passieren, dass großer Wert + sehr kleiner Wert = großer Wert ist.
    Aber vielleicht habe ich die Frage auch ganz falsch verstanden.

  3. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.204
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Energiezähler heißt Zähler weil er zählt (ein Stromzähler zählt ganze Umdrehungen der Scheibe, welche die verbrauchte Energie integriert)

    Vermutlich zählst Du nicht in Deinem Programm sondern addierst REAL-Werte (Gleitpunkt) - das wird schnell ungenau (Rundungsfehler) und funktioniert bei großen Differenzen zwischen den Summanden irgendwann (ca > 10^7) gar nicht mehr (nicht genügend Auflösung).

    Du müßtest Dich auf eine Auflösung Deines Zählers festlegen (z.B. 0.1kWh = 100Wh) und ganze Einheiten dieser Auflösung zählen (oder als Ganzzahl addieren), dann kommt es nicht zu den Problemen, die aus der Verwendung von REAL resultieren.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #4
    Crack123 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.02.2012
    Beiträge
    302
    Danke
    16
    Erhielt 17 Danke für 17 Beiträge

    Standard

    Nabend!

    Ich zähle erstmal garnix, den Programmcode habe ich nicht selber geschrieben, ist ein fertiger FB der die Daten aus der Klemme ausliest.
    so gesehn ist der Wert in der Klemme direkt ( ST ist nicht so meins...... )

    was mich halt wundert, einmal setzt es bei 0,8 kWh aus dann bei 1,5 dann 2,7 sollte wenn dann bei Relativ gleichem Wert aussteigen oder sehe is das falsch?


    Diese Zeile ist die Zählung bzw. Rechnung also TotalEnergy ist der Zählwert.

    TotalEnergy := L1_Data.Energy_Wh + L2_Data.Energy_Wh + L3_Data.Energy_Wh ;




    (* Current *)
    L1_Data.Current_A := DINT_TO_REAL(L1_Current)*0.000001*CurrentTransformer;
    L2_Data.Current_A := DINT_TO_REAL(L2_Current)*0.000001*CurrentTransformer;
    L3_Data.Current_A := DINT_TO_REAL(L3_Current)*0.000001*CurrentTransformer;

    (* Voltage *)
    L1_Data.VoltageLine_V := DINT_TO_REAL(L1_Voltage)*0.0001;
    L2_Data.VoltageLine_V := DINT_TO_REAL(L2_Voltage)*0.0001;
    L3_Data.VoltageLine_V := DINT_TO_REAL(L3_Voltage)*0.0001;
    L1_Data.VoltageFase_V := SQRT(3)*L1_Data.VoltageLine_V;
    L2_Data.VoltageFase_V := SQRT(3)*L2_Data.VoltageLine_V;
    L3_Data.VoltageFase_V := SQRT(3)*L3_Data.VoltageLine_V;

    (* ActivePower *)
    L1_Data.ActivePower_W := DINT_TO_REAL(L1_ActivePower)*0.01*CurrentTransformer;
    L2_Data.ActivePower_W := DINT_TO_REAL(L2_ActivePower)*0.01*CurrentTransformer;
    L3_Data.ActivePower_W := DINT_TO_REAL(L3_ActivePower)*0.01*CurrentTransformer;

    CASE State OF
    0: (* ApparentPower *)
    L1_IndexOut:=State;
    L2_IndexOut:=State;
    L3_IndexOut:=State;
    IF (L1_IndexIn=State) AND (L2_IndexIn=State) AND (L3_IndexIn=State) THEN
    L1_Data.ApparentPower_VA := DINT_TO_REAL(L1_VariantValue)*0.01*CurrentTransformer ;
    L2_Data.ApparentPower_VA := DINT_TO_REAL(L2_VariantValue)*0.01*CurrentTransformer ;
    L3_Data.ApparentPower_VA := DINT_TO_REAL(L3_VariantValue)*0.01*CurrentTransformer ;
    State:=State+1;
    END_IF

    1: (* ReactivePower *)
    L1_IndexOut:=State;
    L2_IndexOut:=State;
    L3_IndexOut:=State;
    IF (L1_IndexIn=State) AND (L2_IndexIn=State) AND (L3_IndexIn=State) THEN
    L1_Data.ReactivePower_VAR := DINT_TO_REAL(L1_VariantValue)*0.001*CurrentTransformer ;
    L2_Data.ReactivePower_VAR := DINT_TO_REAL(L2_VariantValue)*0.001*CurrentTransformer ;
    L3_Data.ReactivePower_VAR := DINT_TO_REAL(L3_VariantValue)*0.001*CurrentTransformer ;
    State:=State+1;
    END_IF

    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

    3: (* CosPhi *)
    L1_IndexOut:=State;
    L2_IndexOut:=State;
    L3_IndexOut:=State;
    IF (L1_IndexIn=State) AND (L2_IndexIn=State) AND (L3_IndexIn=State) THEN
    L1_Data.CosPhi := DINT_TO_REAL(L1_VariantValue)*0.001 ;
    L2_Data.CosPhi := DINT_TO_REAL(L2_VariantValue)*0.001 ;
    L3_Data.CosPhi := DINT_TO_REAL(L3_VariantValue)*0.001 ;
    State:=State+1;
    END_IF

    4: (* Frequency *)
    L1_IndexOut:=State;
    L2_IndexOut:=State;
    L3_IndexOut:=State;
    IF (L1_IndexIn=State) AND (L2_IndexIn=State) AND (L3_IndexIn=State) THEN
    L1_Data.Frequency_Hz := DINT_TO_REAL(L1_VariantValue)*0.1 ;
    L2_Data.Frequency_Hz := DINT_TO_REAL(L2_VariantValue)*0.1 ;
    L3_Data.Frequency_Hz := DINT_TO_REAL(L3_VariantValue)*0.1 ;
    State:=State+1;
    END_IF

    5: (* EnergyNegative *)
    L1_IndexOut:=State;
    L2_IndexOut:=State;
    L3_IndexOut:=State;
    IF (L1_IndexIn=State) AND (L2_IndexIn=State) AND (L3_IndexIn=State) THEN
    L1_Data.EnergyNegative_Wh := DINT_TO_REAL(L1_VariantValue)*0.001*CurrentTransformer ;
    L2_Data.EnergyNegative_Wh := DINT_TO_REAL(L2_VariantValue)*0.001*CurrentTransformer ;
    L3_Data.EnergyNegative_Wh := DINT_TO_REAL(L3_VariantValue)*0.001*CurrentTransformer ;
    State:=0;
    END_IF
    END_CASE

    (* Power and Energy *)
    CurrentActivePower := L1_Data.ActivePower_W + L2_Data.ActivePower_W + L3_Data.ActivePower_W;
    TotalEnergy := L1_Data.Energy_Wh + L2_Data.Energy_Wh + L3_Data.Energy_Wh ;
    TotalEnergyNegative := L1_Data.EnergyNegative_Wh + L2_Data.EnergyNegative_Wh + L3_Data.EnergyNegative_Wh ;

    (*===============*)
    (* Reset Energy *)
    (*===============*)
    Trigger(CLK:= ResetEnergy);

    (* Register communication *)
    FB_EcCoESdoWrite_EL3403(
    sNetId:= F_CreateAmsNetId( EL3403_NetId ),
    nSlaveAddr:= EL3403_Port,
    nSubIndex:= 16#01,
    nIndex:= 16#FB00,
    tTimeout:= t#30s);

    CASE i OF
    0: (* Start sequence *)
    IF Trigger.Q THEN
    FB_EcCoESdoWrite_EL3403.bExecute := FALSE;
    Value := 16#0004;
    i := i + 1;
    END_IF

    1: (* Start sending Value *)
    FB_EcCoESdoWrite_EL3403(
    pSrcBuf:= ADR(Value),
    cbBufLen:= SIZEOF(Value),
    bExecute:= TRUE);
    i := i + 1;

    2: (* Stop sending Value *)
    IF FB_EcCoESdoWrite_EL3403.bBusy THEN
    FB_EcCoESdoWrite_EL3403.bExecute := FALSE;
    i := i + 1;
    END_IF

    3: (* Ready *)
    IF NOT FB_EcCoESdoWrite_EL3403.bBusy THEN
    Value := 16#0000;
    i := i + 1;
    END_IF

    4: (* Start sending Value=0 *)
    FB_EcCoESdoWrite_EL3403(
    pSrcBuf:= ADR(Value),
    cbBufLen:= SIZEOF(Value),
    bExecute:= TRUE);
    i := i + 1;

    5: (* Stop sending Value *)
    IF FB_EcCoESdoWrite_EL3403.bBusy THEN
    FB_EcCoESdoWrite_EL3403.bExecute := FALSE;
    i := i + 1;
    END_IF

    6: (* Ready *)
    IF NOT FB_EcCoESdoWrite_EL3403.bBusy THEN
    i := 0;
    END_IF
    END_CASE
    Geändert von Crack123 (08.02.2016 um 19:05 Uhr)

  5. #5
    Registriert seit
    24.02.2009
    Beiträge
    1.244
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Was kommen denn für Werte von der Klemme rein? Wenn die noch Daten liefert, dann ist es ein Berechnungsproblem (Gleitkommazahlen sind tükisch).
    Sänd from mei Kombjudder mitse Dastadurr.

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.204
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Sind alle Status-LEDs auf der Klemme OK/kein Error?
    Wenn der TotalEnergy-Wert stehenbleibt, steigt dann TotalEnergyNegative?
    Bleibt nur der TotalEnergy-Wert stehen? Oder frieren auch andere Werte ein (ApparentPower, ReactivePower, Energy, CosPhi, Frequency)?
    Sind die Strom- und Spannungswerte der Phasen plausibel?
    Bleibt nur der Wert in WinCC stehen oder auch im SPS-Programm? Hast Du das Programm beim Problemfall beobachtet? Ändert sich State noch?
    Welchen Wert hat CurrentTransformer? Ist der Wert konstant? Stimmt der Wert auch im Problemfall?
    Wie sind die an der Datenerfassung beteiligten Variablen deklariert? Sind da TEMP-Variablen dabei?
    Werden Variablen im Programm noch anderswo überschrieben, insbesonders State?
    Wie kommt der Zählerstand ins WinCC? Wird der in WinCC irgendwie beeinflußt? Hast Du in WinCC nur TotalEnergy oder auch TotalEnergyNegative und L1_Data.Energy_Wh, L2_Data.Energy_Wh, L3_Data.Energy_Wh? Frieren alle ein?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Crack123 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.02.2012
    Beiträge
    302
    Danke
    16
    Erhielt 17 Danke für 17 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Sind alle Status-LEDs auf der Klemme OK/kein Error?
    Wenn der TotalEnergy-Wert stehenbleibt, steigt dann TotalEnergyNegative?
    Bleibt nur der TotalEnergy-Wert stehen? Oder frieren auch andere Werte ein (ApparentPower, ReactivePower, Energy, CosPhi, Frequency)?
    Sind die Strom- und Spannungswerte der Phasen plausibel?
    Bleibt nur der Wert in WinCC stehen oder auch im SPS-Programm? Hast Du das Programm beim Problemfall beobachtet? Ändert sich State noch?
    Welchen Wert hat CurrentTransformer? Ist der Wert konstant? Stimmt der Wert auch im Problemfall?
    Wie sind die an der Datenerfassung beteiligten Variablen deklariert? Sind da TEMP-Variablen dabei?
    Werden Variablen im Programm noch anderswo überschrieben, insbesonders State?
    Wie kommt der Zählerstand ins WinCC? Wird der in WinCC irgendwie beeinflußt? Hast Du in WinCC nur TotalEnergy oder auch TotalEnergyNegative und L1_Data.Energy_Wh, L2_Data.Energy_Wh, L3_Data.Energy_Wh? Frieren alle ein?

    Harald

    Hallo!

    Status Leds muss ich nächstes mal schauen

    TotalEnergyNegative muss ich auch nächstes mal schauen

    es bleibt nur TotalyEnergy bzw halt alle 3 Zähler von L1/2/3 die den Wert ja bilden stehen

    Strom Spgs. Phasensignale sind Ok soweit die Aufzeichnungen anzeigen

    Wert bleibt natürlich im PLC Programm bzw der Visu dort stehen ( ist nicht perma eingelogt ) und im WinCC da es dort ja per Modbus TCP ausgelesen wird. der State also raufzählen bzw durchschalten der Werte läuft noch

    Current Transformer ist ein Fixwert im Programm ändert sich nicht

    WinCC liest nur Daten und schreibt nichts in die Steuerung, sind nur 13 Variablen angelegt für Strom Spg. Frequenz Leistung und Zählen

  8. #8
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Jetzt kommt es vor das alle 2-3 Tage der Zähler stehen bleibt, man sieht im WinCC Trend den Zähler steigen und irgendwann friert der Wert ein ( auch im Twincat )
    wenn man den im Programm wieder auf 0 setzt zählt er wieder ganz normal weiter, passiert meist so zwischen 1-3 kWh gezählter Energie.
    Der Zähler zählt doch im Gerät. Wo setzt Du dann null?


    TotalEnergy := L1_Data.Energy_Wh + L2_Data.Energy_Wh + L3_Data.Energy_Wh
    Bei 1-3kWh in 3 Tagen (bis der Zähler stehen bleibt) heisst, dass da zwischen 15 und 40 Watt draufhängen.
    Was ist denn das?

    Mir kommt das etwas seltsam vor......
    Geändert von borromeus (09.02.2016 um 20:03 Uhr)

  9. #9
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Das liegt an den "ungünstigen" Faktor 0.000001. Wenn die DINT Zahl groß genug wird, dann führt eine Änderung in der letzten Stelle nicht mehr zu einer Änderung in der Gleitkommazahl. Sobald du in deiner Gleitkommazahl mehr als 2 Stellen vor dem Komma hast, dürfte es zu dem Problem kommen.
    Was für ein Wert hat denn CurrentTransformer? Wenn dieser groß (> 10) ist, könnte es etwas bringen die zweite Multiplikation zu klammern, oder so umzustellen, dass diese zu erst berechnet wird.

    Oder du stellst die Berechnung schrittweise auf Ganzzahlen um, oder setzt automatisch die Zählewerte der Karte zurück wenn diese einen bestimmten Wert überschreiten.

    Mir kommt der Faktor aber sehr spanisch vor, misst die Karte in µW Auflösung?
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.204
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ob man eine Gleitpunktzahl mit 10er-Potenzen z.B. 1000, 0.000001 oder 10^20 multipliziert, sollte imho kaum Einfluss auf die Ziffern der Mantisse haben. (Wird da nicht im Grunde mit 1 multipliziert und die Exponenten addiert?) "Ungünstig" wird es, wenn man um einige Zehnerpotenzen unterschiedlich große Zahlen addiert oder subtrahiert, was hier aber nicht der Fall ist.

    Ich meine, die Klemme liefert den Zählerstand als DINT in mWh - da wäre eine Multiplikation mit 0.000001 vermutlich erstmal korrekt um auf x.y kWh zu kommen. 1.234567 kWh wären da als DINT 1234567 gekommen, was eigentlich problemlos in 1.234567E06 wandelbar sein sollte und nach der Multiplikation mit 0.000001 immer noch 1.234567E00 ergeben sollte.

    Mir scheint, daß da irgendein Softwarefehler vorliegt. Eventuell in der Kommunikation mit der Klemme oder in der Firmware der Klemme selbst? Ich glaube nicht, daß das Verhalten so normal ist, daß Zählerstände ab ein paar kWh nicht mehr in Gleitpunktzahl übernehmbar sind. Ich glaube nicht, daß das Problem in der Wandlung an sich liegt.


    @Crack123
    Kannst Du mal zum Beobachten des SPS-Programms die DINT-Rohwerte abspeichern? Ändern die sich auch nicht mehr?
    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
            DIntVar1 := L1_VariantValue ;
            DIntVar2 := L2_VariantValue ;
            DIntVar3 := L3_VariantValue ;
            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
    Kannst Du uns vielleicht einen Screenshot von dem Trend in WinCC zeigen wo man sieht, wie der Wert einfriert?
    Ich frage nochmal: Welchen Wert hat CurrentTransformer?
    Gibt es für das Auslesen der EL3403 ein Beispielprogramm? Hast Du Beckhoff mal befragt?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 20.11.2012, 07:51
  2. Wago ist nach kurzer Zeit nicht mehr erreichbar
    Von erdbeerschaeler im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 08.08.2011, 15:37
  3. Maschine Aus -> Uhrzeit bleibt stehen
    Von EliteGurke im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 20.10.2010, 16:50
  4. TON bleibt stehen :(
    Von steinche im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 21.11.2007, 08:07
  5. S5 Taktgenerator bleibt stehen
    Von Atlantik im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 13.10.2006, 21:38

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •