Ankündigung

Einklappen
Keine Ankündigung bisher.

Kommunikation Enertex Spannungsversorgung und EibPC

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Uwe!
    antwortet
    hier scheint mir auch noch ein Fehler drin zu stecken, da fehlt das "_address":
    Code:
    //  --------------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------------
    //  Beginn EibPC Code
    //  --------------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------------
    //  Hier muss nichts mehr verändert werden
    //  --------------------------------------------------------------------------------------------------------------------------
    #ifdef Information
    if systemstart() then write(address(PS960_GAEinschaltdatum[COLOR=#FF0000][B]_address[/B][/COLOR]),PS960_GADatum) endif
    if systemstart() then write(address(PS960_GAEinschaltzeit[COLOR=#FF0000][B]_address[/B][/COLOR]),PS960_GAUhrzeit) endif

    Einen Kommentar schreiben:


  • Uwe!
    antwortet
    Zitat von enertegus Beitrag anzeigen
    So nun hier der überarbeitete Code.
    Hab noch einen Verbesserungsvorschlag für diesen Abschnitt:

    Code:
    #ifdef Mail
    // Benachrichtigung per E-mail bei überschreiten des eingestellten Grenzwertes
    PS960_Betreff1=$Spannungsgrenzwert überschritten$
    [COLOR=#FF0000]PS960_Nachricht1=$Der Spannungsgrenzwert wurde überschritten $ + convert(PS960_SpannungV,$$) + convert(PS960_StromMA,$$)[/COLOR]
    if PS960_SpgGrenzwertOben==1b01 then sendmail(PS960_Mail_Empfaengeradresse,PS960_Betreff1,PS960_Nachricht1) endif
    PS960_Betreff2=$Stromgrenzwert überschritten$
    [COLOR=#FF0000]PS960_Nachricht2=$Der Stromgrenzwert wurde überschritten $ + convert(PS960_SpannungV,$$) + convert(PS960_StromMA,$$)[/COLOR]
    if PS960_StromGrenzwertOben==1b01 then sendmail(PS960_Mail_Empfaengeradresse,PS960_Betreff2,PS960_Nachricht2) endif
    Die beiden markierten Zeilen führen zu einem Mailtext, der wie folgt aussieht:

    Der Spannungsgrenzwert wurde überschritten 27.92418.24
    Das ist nicht wirklich lesbar. Ich würde da eher sowas vorschlagen:

    Code:
    [COLOR=#0000FF]PS960_Nachricht1=$Der Spannungsgrenzwert wurde überschritten: $ + stringformat(PS960_SpannungV, 4, 1, 5, 1) + $V bei $ + stringformat(PS960_StromMA, 4, 1, 5, 0) + $mA.$[/COLOR]
    Die Anzahl der Nachkommastellen ist natürlich Geschmackssache, aber 1 Kommastelle bei Volt und keine bei mA ist für mich ok.

    Außerdem bau ich wahrscheinlich auch noch den aktuellen Grenzwert in den Mailtext mit ein.

    Generell werd ich für den Webserver die Nachkommastellen noch beschneiden, da z. B. drei Nachkommastellen bei einem mA Wert nicht viel Sinn machen. IMHO. Macht es für mich übersichtlicher und leichter lesbar.

    Außerdem fehlt mir im Webserver noch die Angabe WANN der Grenzwert überschritten wurde.
    Zuletzt geändert von Uwe!; 13.10.2015, 13:09.

    Einen Kommentar schreiben:


  • MichaelR
    antwortet
    Auch von meiner Seite - Danke für den Code!

    Grüße Michael

    Einen Kommentar schreiben:


  • saft6luck
    antwortet
    Zitat von enertegus Beitrag anzeigen
    Habe hier eben nachgefragt: Ist vorgegebenen vom KNX Standard.
    Kannst du das nicht näher erläutern, was hier konkret vorgegeben ist?

    Einen Kommentar schreiben:


  • enertegus
    antwortet
    Hier noch der Link zum vorhin hochgeladenen Code.
    You do not have permission to view this gallery.
    This gallery has 1 photos.

    Einen Kommentar schreiben:


  • Jambala
    antwortet
    Guten Abend Michael,

    vielen Dank für den Code.

    Kannst Du bitte einmal einen Screenshot der fertigen Visu Seite hochladen.

    Viele Grüße Michael

    Einen Kommentar schreiben:


  • enertegus
    antwortet
    So nun hier der überarbeitete Code. Über die Defines kann man die einzelnen Features ein bzw. ausblenden.
    Der Code kann einfach per #include eingebunden werden oder am Ende des bestehende Projekts gehängt werden - ist am Anfang sicher einfacher, weil man die Gruppenadressen dann einfacher konfigurieren kann. Damit dies möglich ist, haben wir das mal exemplarisch mit indizierter Adressierung gemacht (address/getaddress). Das Ende der Konfuguration markiert der entsprechende Kommentar.
    EDIT: Das ist der erste Entwurf, kann sein,dass ich noch was ändert...
    EDIT: Eben angebpasst, da waren noch ein paar Unstimmigkeiten drinn
    Viel Spaß
    Code:
    #addto [EibPC]
    //  Definition der verschiedenen Bereiche und Anzeigemöglichkeiten der PowerSupply960
    //  Bei kommentieren bzw. entkommentieren der jeweiligen #define .... - Zeile,
    //  wird die jeweils beschriebene Aktion ausgeführt.
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //
      #define PS960_WebServer
    //  Bei Definition wird eine leere PS960_PowerSupply-Webserverseite hinzugefügt
    //  Die Seite wird unter der Rubrik Enertex mit dem Seitennamen PowerSupply angehängt.
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //
      #define Grenzwertanzeige
    //  Bei Definition wird die Eingabe von Grenzwerten ermöglicht und Überschreitungen dargestellt.
    //  Temperaturwerte minimal-aktuell-maximal werden angezeigt. Die Aktualisierung erfolgt sobald sich ein Wert ändert.
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //
      #define Chart V,A,W,°C
    //  Bei Definition werden 2 Timecharts hinzugefügt. Alle 15 Minuten werden die Werte in den Buffer geschrieben.
    //  Der 1. Chart enthält die Spannungs-, Strom- und Leistungsverläufe.
    //  Der 2. Chart enthält den Temperaturverlauf der PowerSupply
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //
      #define Spannung,Strom,Leistung-Wächter
    // Bei Definition werden jeweils (Minimale,Aktuelle,Maximale) Anzeigen (inklusive Zeitstempel)
    // für Spannung, Strom und Leistung hinzugefügt. Die Aktualisierung erfolgt sobald sich ein Wert ändert.
    // Eine prozentuale Messwertausgabe ist empfehlenswert, da sich der Wert sonst sekündlich ändern kann.
    // Diese wird über die ETS an der Stromversorgung parametriert.
    // Zu jedem Messwert wird jeweils ein Chartverlauf angezeigt. Die Aktualisierung erfolgt alle 15 Minuten.
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //
      #define EnergieWächter
    // Bei Definition werden 6 Anzeigeelemente hinzugefügt, welche die Aufgenommene und Abgegebene Energie
    // von Einschaltzeitpunkt, seit Analysereset und Lebenszeit angeben. Die Aktualisierung erfolgt alle 15 Minuten.
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //
      #define Information
    // Bei Definition werden Einschaltdatum, Einschaltzeit, Betriebsstunden, Analysereset, Wirkungsgrad hinzugefügt
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //
      #define Mail
    // Wenn die Grundkonfigurationen (Handbuch Seite 145) vorgenommen wurden und die Empfängeradresse
    // im weiteren Code angegeben ist, wird bei Definition und Überschreiten des festgelegten Grenzwertes eine E-Mail versendet
    //
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------
    //  Hier die ID der Webserver Seite konfigurieren
    //  Default ist belegt: 99
    //  --------------------------------------------------------------------------------------------------------------------
    #ifdef PS960_WebServer
    PS960_PowerSupplyID=99
    #endif
    Zyklus15=mtime(0,0) or mtime(15,0) or mtime(30,0) or mtime(45,0)
    //  --------------------------------------------------------------------------------------------------------------------
    //  Hier die Gruppenadressen der PS960 konfigurieren
    //  Die Gruppenadressen so eintragen, dass die Typenkennzeichnung
    //  (z.B. t24) hinten angefügt ist.
    //  Beispiel: PS960_GAEinschaltzeit="Einschaltzeit-0/4/0"t24
    //  --------------------------------------------------------------------------------------------------------------------
    // Uhrzeit- und datumsgebende Gruppenadressen
    #ifdef Information
    if systemstart() then write("Datum-0/2/0",setdate()) endif
    if systemstart() then write("Uhrzeit-0/2/4",settime()) endif
    PS960_GAUhrzeit="Uhrzeit-0/2/4"t24
    PS960_GAUhrzeit_address=getaddress("Uhrzeit-0/2/4")
    PS960_GADatum="Datum-0/2/0"
    PS960_GADatum_address=getaddress("Datum-0/2/0")
    #endif
    PS960_GASpannung="Spannung-0/4/5"
    PS960_GAStrom="Strom-0/4/6"f16
    PS960_GALeistung="Leistung-0/4/7"f32
    PS960_GALeistung_address=getaddress("Leistung-0/4/7"f32)
    #ifdef Spannung,Strom,Leistung-Wächter
    PS960_GASpannungMax="Spannung Maximum-0/4/13"
    PS960_GASpannungMax_address=getaddress("Spannung Maximum-0/4/13")
    PS960_GASpannungMin="Spannung Minimum-0/4/12"
    PS960_GASpannungMin_address=getaddress("Spannung Minimum-0/4/12")
    PS960_GAStromMax="Strom Maximum-0/4/15"f16
    PS960_GAStromMax_address=getaddress("Strom Maximum-0/4/15"f16)
    PS960_GAStromMin="Strom Minimum-0/4/14"f16
    PS960_GAStromMin_address=getaddress("Strom Minimum-0/4/14"f16)
    PS960_GALeistungMax="Leistung Maximum-0/4/17"f32
    PS960_GALeistungMax_address=getaddress("Leistung Maximum-0/4/17"f32)
    PS960_GALeistungMin="Leistung Minimum-0/4/16"f32
    PS960_GALeistungMin_address=getaddress("Leistung Minimum-0/4/16"f32)
    #endif
    PS960_GAAufgenommeneEnergieLebenszeit="AufgenommeneEnergieLebenszeit-0/4/23"
    PS960_GAAbgegebeneEnergieLebenszeit="AbgegebeneEnergieLebenszeit-0/4/20"
    #ifdef EnergieWächter
    PS960_GAAufgenommeneEnergieLebenszeit_address=getaddress("AufgenommeneEnergieLebenszeit-0/4/23")
    PS960_GAAbgegebeneEnergieLebenszeit_address=getaddress("AbgegebeneEnergieLebenszeit-0/4/20")
    
    PS960_GAAbgegebeneEnergieEinschalten="AbgegebeneEnergieSeitEinschalten-0/4/21"
    PS960_GAAbgegebeneEnergieEinschalten_address=getaddress("AbgegebeneEnergieSeitEinschalten-0/4/21")
    PS960_GAAbgegebeneEnergieAnalyseReset="AbgegebeneEnergieSeitAnalysereset-0/4/22"
    PS960_GAAbgegebeneEnergieAnalyseReset_address=getaddress("AbgegebeneEnergieSeitAnalysereset-0/4/22")
    PS960_GAAufgenommeneEnergieEinschalten="AufgenommeneEnergieSeitEinschalten-0/4/24"
    PS960_GAAufgenommeneEnergieEinschalten_address=getaddress("AufgenommeneEnergieSeitEinschalten-0/4/24")
    PS960_GAAufgenommeneEnergieAnalyseReset="AufgenommeneEnergieSeitAnalysereset-0/4/25"
    PS960_GAAufgenommeneEnergieAnalyseReset_address=getaddress("AufgenommeneEnergieSeitAnalysereset-0/4/25")
    #endif
    #ifdef Information
    PS960_GAAnalyseReset_address=getaddress("Reset-0/4/3")
    PS960_GAEinschaltzeit="Einschaltzeit-0/4/0"t24
    PS960_GAEinschaltzeit_address=getaddress("Einschaltzeit-0/4/0"t24)
    PS960_GAEinschaltdatum="Einschaltdatum-0/4/1"d24
    PS960_GAEinschaltdatum_address=getaddress("Einschaltdatum-0/4/1"d24)
    PS960_GABetriebsstunden="Betriebsstunden-0/4/2"
    PS960_GABetriebsstunden_address=getaddress("Betriebsstunden-0/4/2")
    #endif
    #ifdef Grenzwertanzeige
    PS960_GASpannung_address=getaddress("Spannung-0/4/5")
    PS960_GAStrom_address=getaddress("Strom-0/4/6")
    PS960_GATemperatur="Temperatur-0/4/8"
    PS960_GATemperatur_address=getaddress("Temperatur-0/4/8")
    PS960_GATemperaturMin="Temperatur Minimum-0/4/18"
    PS960_GATemperaturMin_address=getaddress("Temperatur Minimum-0/4/18")
    PS960_GATemperaturMax="Temperatur Maximum-0/4/19"
    PS960_GATemperaturMax_address=getaddress("Temperatur Maximum-0/4/19")
    PS960_GASpannungGrenzwert="Spannung Grenzwert-0/4/9"
    PS960_GASpannungGrenzwertueberschritten="SpannungGrenzwertTreffer-0/4/26"
    PS960_GASpannungGrenzwertueberschritten_address=getaddress("SpannungGrenzwertTreffer-0/4/26")
    PS960_GASpannungGrenzwert_address=getaddress("Spannung Grenzwert-0/4/9")
    PS960_GAStromstaerkeGrenzwert="Strom Grenzwert-0/4/10"
    PS960_GAStromstaerkeGrenzwert_address=getaddress("Strom Grenzwert-0/4/10")
    PS960_GAStromstearkeGrenzwertueberschritten="StromGrenzwertTreffer-0/4/27"
    PS960_GAStromstearkeGrenzwertueberschritten_address=getaddress("StromGrenzwertTreffer-0/4/27")
    #endif
    //  --------------------------------------------------------------------------------------------------------------------
    //  Hier die Default der Mailadresse konfigurieren
    //  Nur für NP Erweiterung. Der EibPC verschickt bei
    //  überschreiten des eingestellten Grenzwertes eine Warnung heraus.
    //  Um die Funktion sendmail nutzen zu können, muss die Grundkonfiguration
    //  des E-Mail vorgenommen werden ( Handbuch Seite 145).
    //  --------------------------------------------------------------------------------------------------------------------------
    #ifdef Mail
    PS960_Mail_Empfaengeradresse=$Praktikum@enertex.de$
    #endif
    //  --------------------------------------------------------------------------------------------------------------------
    //  Hier die PageIDs der Webelemente konfigurieren
    //  Defaults sind belegt: 1 bis 31
    //  --------------------------------------------------------------------------------------------------------------------------
    #ifdef Chart V,A,W,°C
    PS960_PSSpannung5ID=1
    PS960_PSTemperaturID=26
    #endif
    #ifdef Grenzwertanzeige
    PS960_SpannungGrenzwertID=2
    PS960_Input4ID=3
    PS960_Input5ID=4
    PS960_Output17ID=5
    PS960_Output18ID=6
    PS960_TemperaturID=7
    #endif
    #ifdef Spannung,Strom,Leistung-Wächter
    PS960_PSSpannung6ID=8
    PS960_PSStrom7ID=9
    PS960_PSLeistung8ID=10
    PS960_MinimaleSpannungID=11
    PS960_MinimalerStromID=12
    PS960_MinimaleLeistungID=13
    PS960_MaximaleSpannungID=14
    PS960_MaximalerStromID=15
    PS960_MaximaleLeistungID=16
    PS960_AktuelleSpannungID=17
    PS960_AkutellerStromID=18
    PS960_AktuelleLeistungID=19
    #endif
    #ifdef EnergieWächter
    PS960_AbgegebeneEnergieEinschaltenID=20
    PS960_AbgegebeneEnergieAnalyseResetID=21
    PS960_AbgegebeneEnergieLebenszeitID=22
    PS960_AufgenommeneEnergieEinschaltenID=23
    PS960_AufgenommeneEnergieAnalyseResetID=24
    PS960_AufgenommeneEnergieLebenszeitID=25
    #endif
    #ifdef Information
    PS960_ResetID=27
    PS960_WirkungsgradID=28
    PS960_EinschaltDatumID=29
    PS960_EinschaltZeitID=30
    PS960_BetriebsstundenID=31
    #endif
    //  --------------------------------------------------------------------------------------------------------------------------
    //  Hier die IDs der Timebuffer konfigurieren
    //  Default sind belegt: 254 bis 244
    //  --------------------------------------------------------------------------------------------------------------------------
    PS960_LeistungBuffer=254
    PS960_SpannungBuffer=253
    PS960_StromBuffer=252
    #ifdef Chart V,A,W,°C
    PS960_TemperaturBuffer=251
    #endif
    #ifdef Spannung,Strom,Leistung-Wächter
    PS960_LeistungMaxBuffer=249
    PS960_LeistungMinBuffer=248
    PS960_SpannungMaxBuffer=247
    PS960_SpannungMinBuffer=246
    PS960_StromMinBuffer=245
    PS960_StromMaxBuffer=244
    #endif
    //  --------------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------------
    //  Beginn EibPC Code
    //  --------------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------------
    //  Hier muss nichts mehr verändert werden
    //  --------------------------------------------------------------------------------------------------------------------------
    #ifdef Information
    if systemstart() then write(address(PS960_GAEinschaltdatum),PS960_GADatum) endif
    if systemstart() then write(address(PS960_GAEinschaltzeit),PS960_GAUhrzeit) endif
    //Einschaltdatum
    if systemstart() or change(PS960_GAEinschaltdatum) then pdisplay(PS960_EinschaltDatumID,convert(PS960_GAEinschaltdatum,$$),DATE,ACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Einschaltzeit
    if systemstart() or change(PS960_GAEinschaltzeit) then pdisplay(PS960_EinschaltZeitID,convert(PS960_GAEinschaltzeit,$$),CLOCK,ACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Wirkungsgrad
    PS960_Pzu=convert(PS960_GAAufgenommeneEnergieLebenszeit,0f16)
    PS960_Pab=convert(PS960_GAAbgegebeneEnergieLebenszeit,0f16)
    PS960_Wirkungsgrad=(PS960_Pab/PS960_Pzu)*100f16
    if systemstart() or change(PS960_Wirkungsgrad) then pdisplay(PS960_WirkungsgradID,convert(PS960_Wirkungsgrad,$$)+$%$,INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Betriebsstunden
    PS960_Betriebsstunden=convert(PS960_GABetriebsstunden,0f16)*100f16
    if change(PS960_GABetriebsstunden) then read(address(PS960_GABetriebsstunden_address)) endif
    if systemstart() or change(PS960_GABetriebsstunden) then {
        pdisplay(PS960_BetriebsstundenID, convert(PS960_Betriebsstunden,$$) + $ h $,CLOCK,INACTIVE,GREEN,PS960_PowerSupplyID);
    } endif
    #endif
    #ifdef Grenzwertanzeige
    //TemperaturAnzeigeButton
    PS960_AktuelleTemperatur=convert(PS960_GATemperatur,$$)
    PS960_MinimaleTemperatur=convert(PS960_GATemperaturMin,$$)
    PS960_MaximaleTemperatur=convert(PS960_GATemperaturMax,$$)
    if change(PS960_GATemperatur) or change(PS960_GATemperaturMin) or change(PS960_GATemperaturMax) then pdisplay(PS960_TemperaturID,PS960_MinimaleTemperatur + $ °C -    $ + PS960_AktuelleTemperatur  + $ °C -    $ + PS960_MaximaleTemperatur + $ °C$,TEMPERATURE,INACTIVE,GREY,PS960_PowerSupplyID) endif
    //MtimeChart2Grafen Temperatur Min Max
    timebufferconfig(PS960_TemperaturBuffer, 0, 672u16, 0f16)
    if  Zyklus15 then {
        timebufferadd(PS960_TemperaturBuffer,PS960_GATemperatur);
    } endif
    //Store and Read2Buffer Temperatur,max
     
    if chtime(23,45,01) then {
        timebufferstore(PS960_TemperaturBuffer);
    } endif
    if after(systemstart(),30000u64) then {
        timebufferread(PS960_TemperaturBuffer);
    } endif
    // Grenzwerte für Spannung und Stromstearke
    // Grenzwerte Input/Output
    PS960_StromInput=webinput(PS960_Input5ID)
    PS960_SpgInput=webinput(PS960_Input4ID)
    PS960_SpgInputBack=convert(PS960_SpgInput,0f16)*1000.0f16
    if after(systemstart(),5000u64) or change(PS960_GASpannungGrenzwert) or change(PS960_GAStromstaerkeGrenzwert) then {
        weboutput(PS960_Output17ID,$aktueller Grenzwert Spannung: <br>$ + convert((PS960_GASpannungGrenzwert/1000f16),$$) + $ Volt$);
        weboutput(PS960_Output18ID,$aktueller Grenzwert Srom: <br>$ + convert(PS960_GAStromstaerkeGrenzwert,$$) + $ mA$)
    } endif
    if change(PS960_SpgInput) then {
        weboutput(PS960_Output17ID,$aktueller Grenzwert Spannung: <br>$ + PS960_SpgInput + $ Volt$);
        write(address(PS960_GASpannungGrenzwert_address),PS960_SpgInputBack)
    } endif
    if change(PS960_StromInput) then {
        weboutput(PS960_Output18ID,$aktueller Grenzwert Strom: <br>$ + PS960_StromInput + $ mA$);
        write(address(PS960_GAStromstaerkeGrenzwert_address),convert(PS960_StromInput,0f16))
    } endif
    if change(PS960_GASpannungGrenzwert) then read(address(PS960_GASpannung_address)) endif
    if change(PS960_GAStromstaerkeGrenzwert) then read(address(PS960_GAStrom_address)) endif
    //Grenzwerte über/unterschritten
    PS960_SpgGrenzwertOben=PS960_GASpannungGrenzwertueberschritten
    PS960_SpgGrenzwertUnten=!PS960_GASpannungGrenzwertueberschritten
    PS960_StromGrenzwertOben=PS960_GAStromstearkeGrenzwertueberschritten
    PS960_StromGrenzwertUnten=!PS960_GAStromstearkeGrenzwertueberschritten
    PS960_SpannungGrenzwert=PS960_GASpannungGrenzwert
    PS960_StromGrenzwert=PS960_GAStromstaerkeGrenzwert
    PS960_SpannungV=convert(PS960_GASpannung,0f16)/1000f16
    PS960_StromMA=convert(PS960_GAStrom,0f16)
    if PS960_SpgGrenzwertOben==1b01 or PS960_StromGrenzwertOben==1b01 then {
        pdisplay(PS960_SpannungGrenzwertID,$Spg: $ +convert(PS960_SpannungV,$$) + $ Volt $ + $- Strom: $ +convert(PS960_StromMA,$$)+ $ mA$,WARN,DARKRED,GREEN,PS960_PowerSupplyID);
    } endif
    if systemstart() or PS960_SpgGrenzwertUnten and PS960_StromGrenzwertUnten then {
        pdisplay(PS960_SpannungGrenzwertID,$Spg: $ +convert(PS960_SpannungV,$$) + $ Volt $ + $- Strom: $ +convert(PS960_StromMA,$$)+ $ mA$,WARN,INACTIVE,GREY,PS960_PowerSupplyID);
    } endif
    #endif
    #ifdef Spannung,Strom,Leistung-Wächter
    //Aktuelle Spannung
    PS960_S1=convert(PS960_GASpannung,0f16)/1000f16
    if systemstart() or change(PS960_GASpannung) then pdisplay(PS960_AktuelleSpannungID,convert(PS960_S1,$$) + $V$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Maximale Spannung
    PS960_S2=convert(PS960_GASpannungMax,0f16)/1000f16
    if systemstart() or change(PS960_GASpannungMax) then pdisplay(PS960_MaximaleSpannungID,convert(PS960_S2,$$) + $V$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Minimale Spannung
    PS960_S3=convert(PS960_GASpannungMin,0f16)/1000f16
    if systemstart() or change(PS960_GASpannungMin) then pdisplay(PS960_MinimaleSpannungID,convert(PS960_S3,$$) + $V$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Aktueller Strom
    if systemstart() or change(PS960_GAStrom) then pdisplay(PS960_AkutellerStromID,convert(PS960_GAStrom,$$) + $mA$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Maximaler Strom
    if systemstart() or change(PS960_GAStromMax) then pdisplay(PS960_MaximalerStromID,convert(PS960_GAStromMax,$$) + $mA$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Minimaler Strom
    if systemstart() or change(PS960_GAStromMin) then pdisplay(PS960_MinimalerStromID,convert(PS960_GAStromMin,$$) + $mA$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Aktuelle Leistung
    PS960_L1=convert(PS960_GALeistung,2.2f16)
    if systemstart() or change(PS960_L1) then pdisplay(PS960_AktuelleLeistungID,convert(PS960_L1,$$) + $W$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Maximale Leistung
    PS960_L2=convert(PS960_GALeistungMax,2.2f16)
    if systemstart() or change(PS960_GALeistungMax) then pdisplay(PS960_MaximaleLeistungID,convert(PS960_L2,$$) + $W$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    //Minimale Leistung
    PS960_L3=convert(PS960_GALeistungMin,2.2f16)
    if systemstart() or change(PS960_L3) then pdisplay(PS960_MinimaleLeistungID,convert(PS960_L3,$$) + $W$ + $ - am $ + convert(settime(),$$),INFO,INACTIVE,GREEN,PS960_PowerSupplyID) endif
    #endif
    #ifdef EnergieWächter
    //Abgegebene Energie Lebenszeit
    if change(PS960_GAAufgenommeneEnergieLebenszeit) then {
    read(address(PS960_GAAufgenommeneEnergieLebenszeit_address));
    read(address(PS960_GAAbgegebeneEnergieLebenszeit_address));
    }endif
    if Zyklus15 then read(address(PS960_GAAbgegebeneEnergieLebenszeit_address)) endif
    if systemstart() or change(PS960_GAAbgegebeneEnergieLebenszeit) then pdisplay(PS960_AbgegebeneEnergieLebenszeitID,convert(PS960_GAAbgegebeneEnergieLebenszeit,$$c14) + $ Wh$c14,METER,INACTIVE,GREY,PS960_PowerSupplyID) endif
    //Abgegebene Energie Einschalten
    if Zyklus15 then read(address(PS960_GAAbgegebeneEnergieEinschalten_address)) endif
    if systemstart() or change(PS960_GAAbgegebeneEnergieEinschalten) then pdisplay(PS960_AbgegebeneEnergieEinschaltenID,convert(PS960_GAAbgegebeneEnergieEinschalten,$$c14) + $ Wh$c14,METER,INACTIVE,GREY,PS960_PowerSupplyID) endif
    //Abgegebene Energie AnalyseReset
    if Zyklus15 then read(address(PS960_GAAbgegebeneEnergieAnalyseReset_address)) endif
    if systemstart() or change(PS960_GAAbgegebeneEnergieAnalyseReset) then pdisplay(PS960_AbgegebeneEnergieAnalyseResetID,convert(PS960_GAAbgegebeneEnergieAnalyseReset,$$c14) + $ Wh$c14,METER,INACTIVE,GREY,PS960_PowerSupplyID) endif
    //Aufgenommene Energie Lebenszeit
    if Zyklus15 then read(address(PS960_GAAufgenommeneEnergieLebenszeit_address)) endif
    if systemstart() or change(PS960_GAAufgenommeneEnergieLebenszeit) then pdisplay(PS960_AufgenommeneEnergieLebenszeitID,convert(PS960_GAAufgenommeneEnergieLebenszeit,$$c14) + $ Wh$c14,METER,INACTIVE,GREY,PS960_PowerSupplyID) endif
    //Aufgenommene Energie Einschalten
    if Zyklus15 then read(address(PS960_GAAufgenommeneEnergieEinschalten_address)) endif
    if systemstart() or change(PS960_GAAufgenommeneEnergieEinschalten) then pdisplay(PS960_AufgenommeneEnergieEinschaltenID,convert(PS960_GAAufgenommeneEnergieEinschalten,$$c14) + $ Wh$c14,METER,INACTIVE,GREY,PS960_PowerSupplyID) endif
    //Aufgenommene Energie AnalyseReset
    if Zyklus15 then read(address(PS960_GAAufgenommeneEnergieAnalyseReset_address)) endif
    if systemstart() or change(PS960_GAAufgenommeneEnergieAnalyseReset) then pdisplay(PS960_AufgenommeneEnergieAnalyseResetID,convert(PS960_GAAufgenommeneEnergieAnalyseReset,$$c14) + $ Wh$c14,METER,INACTIVE,GREY,PS960_PowerSupplyID) endif
    #endif
    #ifdef Information
    ////Charts
    // PS960_Analyse Reset
    PS960_AnalyseReset=0b01
    if systemstart() then pdisplay(PS960_ResetID,$Letzter Reset am $+convert(settime(),$$),WASTE,STATE4,GREEN,PS960_PowerSupplyID) endif
    if pbutton(PS960_ResetID,PS960_PowerSupplyID)==1 then PS960_AnalyseReset=1b01 endif
    if PS960_AnalyseReset then write(address(PS960_GAAnalyseReset_address),1b01) endif
    if PS960_AnalyseReset then pdisplay(PS960_ResetID,$Letzter Reset am $+convert(settime(),$$),WASTE,BRIGHTRED,BLINKRED,PS960_PowerSupplyID) endif  
    if after(PS960_AnalyseReset,5000u64) then pdisplay(PS960_ResetID,$Letzter Reset am $+convert(settime(),$$),WASTE,STATE4,GREEN,PS960_PowerSupplyID) endif
    if systemstart() or after(PS960_AnalyseReset,1000u64) then {
        PS960_AnalyseReset=0b01;
        read(address(PS960_GAUhrzeit_address));
        read(address(PS960_GADatum_address));
    #endif
        #ifdef Spannung,Strom,Leistung-Wächter
        read(address(PS960_GASpannungMin_address));
        read(address(PS960_GASpannungMax_address));
        read(address(PS960_GAStromMin_address));
        read(address(PS960_GAStromMax_address));
        read(address(PS960_GALeistungMin_address));
        read(address(PS960_GALeistungMax_address));
        #endif
        #ifdef EnergieWächter
        read(address(PS960_GAAbgegebeneEnergieLebenszeit_address));
        read(address(PS960_GAAbgegebeneEnergieEinschalten_address));
        read(address(PS960_GAAbgegebeneEnergieAnalyseReset_address));
        read(address(PS960_GAAufgenommeneEnergieLebenszeit_address));
        read(address(PS960_GAAufgenommeneEnergieEinschalten_address));
        read(address(PS960_GAAufgenommeneEnergieAnalyseReset_address));
        #endif
        #ifdef Grenzwertanzeige
        read(address(PS960_GASpannungGrenzwert_address));
        read(address(PS960_GAStromstaerkeGrenzwert_address));
        read(address(PS960_GATemperatur_address));
        read(address(PS960_GATemperaturMin_address));
        read(address(PS960_GATemperaturMax_address));
        read(address(PS960_GASpannungGrenzwertueberschritten_address));
        read(address(PS960_GAStromstearkeGrenzwertueberschritten_address));
        #endif
        #ifdef Information
        read(address(PS960_GAEinschaltzeit_address));
        read(address(PS960_GAEinschaltdatum_address));
        read(address(PS960_GABetriebsstunden_address));
        read(address(PS960_GAAnalyseReset_address))
        } endif
        #endif
    #ifdef Spannung,Strom,Leistung-Wächter
    //MtimeChart2Grafen Spannung Min Max
    timebufferconfig(PS960_SpannungMinBuffer, 1, 672u16, 3.3f16)
    timebufferconfig(PS960_SpannungMaxBuffer, 1, 672u16, 3.3f16)
    //MtimeChart2Grafen Leistung Min Max
    timebufferconfig(PS960_LeistungMinBuffer, 1, 672u16, 3.3f32)
    timebufferconfig(PS960_LeistungMaxBuffer, 1, 672u16, 3.3f32)
    //MtimeChart2Grafen Strom Min Max
    timebufferconfig(PS960_StromMinBuffer, 1, 672u16, 3.3f16)
    timebufferconfig(PS960_StromMaxBuffer, 1, 672u16, 3.3f16)
    
    if Zyklus15 then {
        timebufferadd(PS960_SpannungMinBuffer,PS960_S3);
        timebufferadd(PS960_SpannungMaxBuffer,PS960_S2);
            timebufferadd(PS960_StromMinBuffer,PS960_GAStromMin);
        timebufferadd(PS960_StromMaxBuffer,PS960_GAStromMax);
        timebufferadd(PS960_LeistungMinBuffer,PS960_GALeistungMin);
        timebufferadd(PS960_LeistungMaxBuffer,PS960_GALeistungMax) ;
    } endif
    //Store and Read2Buffer Spannung,Min,Max
    if chtime(23,45,01) then {
        timebufferstore(PS960_SpannungMinBuffer);
        timebufferstore(PS960_SpannungMaxBuffer);
    } endif
    if after(systemstart(),30000u64) then {
        timebufferread(PS960_SpannungMinBuffer);
        timebufferread(PS960_SpannungMaxBuffer);
    } endif
    
    
    //Store and Read2Buffer Strom,min,max
    if chtime(23,45,04) then {
        timebufferstore(PS960_StromMinBuffer);
        timebufferstore(PS960_StromMaxBuffer);
    } endif
    if after(systemstart(),31000u64) then {
        timebufferread(PS960_StromMinBuffer);
        timebufferread(PS960_StromMaxBuffer);
    } endif
    
    //Store and Read2Buffer Leistung,Min,Max
    if chtime(23,45,41) then {
        timebufferstore(PS960_LeistungMinBuffer);
        timebufferstore(PS960_LeistungMaxBuffer);
    } endif
    if after(systemstart(),32000u64) then {
        timebufferread(PS960_LeistungMinBuffer);
        timebufferread(PS960_LeistungMaxBuffer);
    } endif
    #endif
    #ifdef Chart V,A,W,°C
    //MtimeChart3Graphen3Datatyp Spannung Strom Leistung
    timebufferconfig(PS960_SpannungBuffer, 1, 672u16, 3.3f16)
    timebufferconfig(PS960_StromBuffer, 1, 672u16, 3.3f16)
    timebufferconfig(PS960_LeistungBuffer, 1, 672u16,1.1f32)
    PS960_SBuffer=convert(PS960_GASpannung,0f16)/1000f16
    
    if after(systemstart(),20000u64) or  Zyklus15 then {
        timebufferadd(PS960_SpannungBuffer,PS960_SBuffer);
        timebufferadd(PS960_StromBuffer,PS960_GAStrom);
        timebufferadd(PS960_LeistungBuffer,PS960_GALeistung)
    } endif
    //Store and Read3Buffer Spannung,Strom,Leistung
    if cycle(30,00) then {
        timebufferstore(PS960_SpannungBuffer);
        timebufferstore(PS960_StromBuffer);
        timebufferstore(PS960_LeistungBuffer)
    } endif
    if after(systemstart(),10000u64) then {
        timebufferread(PS960_SpannungBuffer);
        timebufferread(PS960_StromBuffer);
        timebufferread(PS960_LeistungBuffer)
    } endif
    #endif
    #ifdef Mail
    // Benachrichtigung per E-mail bei überschreiten des eingestellten Grenzwertes
    PS960_Betreff1=$Spannungsgrenzwert überschritten$
    PS960_Nachricht1=$Der Spannungsgrenzwert wurde überschritten $ + convert(PS960_SpannungV,$$) + convert(PS960_StromMA,$$)
    if PS960_SpgGrenzwertOben==1b01 then sendmail(PS960_Mail_Empfaengeradresse,PS960_Betreff1,PS960_Nachricht1) endif
    PS960_Betreff2=$Stromgrenzwert überschritten$
    PS960_Nachricht2=$Der Stromgrenzwert wurde überschritten $ + convert(PS960_SpannungV,$$) + convert(PS960_StromMA,$$)
    if PS960_StromGrenzwertOben==1b01 then sendmail(PS960_Mail_Empfaengeradresse,PS960_Betreff2,PS960_Nachricht2) endif
    #endif
    #addto [WebServer]
    #ifdef PS960_WebServer
    // Webelemente für das Power Supply
    page(PS960_PowerSupplyID)[$Enertex$,$PowerSupply$]
    design $black$
    header(0)
    footer(0)
    #endif
    #ifdef Grenzwertanzeige
         weboutput(PS960_Output17ID)[SINGLE,ICON] weboutput(PS960_Output18ID)[SINGLE,ICON]\\
        pshifter(PS960_TemperaturID)[TEMPERATURE]$Temperatur Min  -  Aktuell  -  Max$
         webinput(PS960_Input4ID)[UPDATE]$Grenzwert Spannung in V$ webinput(PS960_Input5ID)[UPDATE]$Grenzwert Strom in mA$ \\
        pshifter(PS960_SpannungGrenzwertID)[WARN]$Grenzwerte$
         line
    #endif
    #ifdef Chart V,A,W,°C
         mtimechart(PS960_PSSpannung5ID)[EXTLONG,2,255,0,500,0,500]($Spg. in V$,0,PS960_SpannungBuffer,$Strom in mA$,1,PS960_StromBuffer,$Leistung in W$,1,PS960_LeistungBuffer)\\
        mtimechart(PS960_PSTemperaturID)[EXTTRIPLE,2,255,0,500,0,500]($Temperatur in °C$,0,PS960_TemperaturBuffer)
    #endif
    #ifdef Spannung,Strom,Leistung-Wächter
         pshifter(PS960_MaximaleSpannungID)[INFO] $Maximale Spannung$ pshifter(PS960_MaximalerStromID)[INFO] $Maximaler Strom$ pshifter(PS960_MaximaleLeistungID)[INFO] $Maximale Leistung$
         pshifter(PS960_AktuelleSpannungID)[INFO] $Aktuelle Spannung$ pshifter(PS960_AkutellerStromID)[INFO] $Aktueller Strom$ pshifter(PS960_AktuelleLeistungID)[INFO] $Aktuelle Leistung$
         pshifter(PS960_MinimaleSpannungID)[INFO] $Minimale Spannung$ pshifter(PS960_MinimalerStromID)[INFO] $Minimaler Strom$ pshifter(PS960_MinimaleLeistungID)[INFO] $Minimale Leistung$
         mtimechart(PS960_PSSpannung6ID)[EXTTRIPLE,2,255,0,500,0,500]($Spannung in V$,0,PS960_SpannungBuffer,$Spannung Min$,0,PS960_SpannungMinBuffer,$Spannung Max$,0,PS960_SpannungMaxBuffer)\\
             mtimechart(PS960_PSStrom7ID)[EXTTRIPLE,2,255,0,500,0,500]($Strom in mA$,0,PS960_StromBuffer,$Strom Min$,0,PS960_StromMinBuffer,$Strom Max$,0,PS960_StromMaxBuffer) \\
            mtimechart(PS960_PSLeistung8ID)[EXTTRIPLE,2,255,0,500,0,500]($Leistung in W$,0,PS960_LeistungBuffer,$Leistung Min$,0,PS960_LeistungMinBuffer,$Leistung Max$,0,PS960_LeistungMaxBuffer)
         line
    #endif
    #ifdef EnergieWächter
            pshifter(PS960_AbgegebeneEnergieEinschaltenID)[METER]$Abgegebene Energie seit Einschaltzeitpunkt$ \\
        pshifter(PS960_AbgegebeneEnergieAnalyseResetID)[METER]$Abgegebene Energie seit Analyse-Reset$ \\
        pshifter(PS960_AbgegebeneEnergieLebenszeitID)[METER]$Abgegebene Energie seit Lebenszeit$
            pshifter(PS960_AufgenommeneEnergieEinschaltenID)[METER]$Aufgenommene Energie seit Einschaltzeitpunkt$ \\
        pshifter(PS960_AufgenommeneEnergieAnalyseResetID)[METER]$Aufgenommene Energie seit Analyse-Reset$ \\
        pshifter(PS960_AufgenommeneEnergieLebenszeitID)[METER]$Aufgenommene Energie seit Lebenszeit$
    #endif
    #ifdef Information
    pbutton(PS960_EinschaltDatumID)[DATE]$Einschaltdatum$pbutton(PS960_EinschaltZeitID)[CLOCK]$Einschaltzeit$pbutton(PS960_BetriebsstundenID)[CLOCK]$Betriebsstunden$pbutton(PS960_ResetID)[WASTE]$Analysereset$ pshifter(PS960_WirkungsgradID)[INFO]$Wirkungsgrad$
    #endif
    //  --------------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------------
    //  Ende PowerSupply960 Code
    //  --------------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------------
    //  --------------------------------------------------------------------------------------------------------------------------
    Zuletzt geändert von enertegus; 19.05.2015, 16:51.

    Einen Kommentar schreiben:


  • saft6luck
    antwortet
    Zitat von enertegus Beitrag anzeigen
    Habe hier eben nachgefragt: Ist vorgegebenen vom KNX Standard.
    Welcher Teil ist da vorgegeben?

    DTP 14.x erlaubt durchaus V und A, insbesondere auch genauer/richtiger als f16.

    Abgesehen davon hat die Angabe in mV ja auch nichts mit der Genauigkeit des gemessenen Wertes zu tun (und BTW das ist die Information, die in der Anleitung fehlt).

    Einen Kommentar schreiben:


  • Uwe!
    antwortet
    Ok, danke für die Info! Zwar komischer Standard, aber gut, dass ihr euch dran haltet!

    Einen Kommentar schreiben:


  • enertegus
    antwortet
    Zitat von enertegus Beitrag anzeigen
    Bin nicht genau sicher für die Spannung und Strommessung in "mili", ich glaube die mV und mA haben da einen ähnlichen Hintergrund (bin nicht im Büro, sondern unterwegs).
    Habe hier eben nachgefragt: Ist vorgegebenen vom KNX Standard.

    Einen Kommentar schreiben:


  • Jambala
    antwortet
    Cool Danke Dir.

    Reicht eigentlich im ESF File der EIS Typ alleine aus oder muß immer noch die Beschreibung in Anführungszeichen und die Byte Angabe dahinter?

    EIS 3 'Time' (3 Byte)

    Ich habe das noch nie ohne ausprobiert.

    Einen Kommentar schreiben:


  • Uwe!
    antwortet
    Zitat von Jambala Beitrag anzeigen
    Ich habe auf die Schnelle keine perfekte Gegenüberstellung der DPT und EIS Datentypen gefunden.
    Perfekt geht ja irgendwie auch nicht, weil EIS ja viel gröber ist.

    Hier kann man es aber ganz gut sehen:
    http://www.it-gmbh.de/support/servic...bffbb231ab3fa7

    Einen Kommentar schreiben:


  • Jambala
    antwortet
    Zitat von MarkusS Beitrag anzeigen

    das ist ein liebevoll gepflegtes Feature, mindestens schon seit ETS2.

    So ziemlich alles was bei Dir uncertain ist könnte man auch deklarieren, die Sub-DPTs dafür gibt es im Standard.
    Die Einen nennen es Bug, die Anderen Feature. Die Positionierung der Konnex und der Anspruch an die eigene Arbeit sind offensichtlich diametral verschieden. Da sind ja viele Freeware Programme stimmiger und nachhaltiger programmiert.

    Die EIS Typen habe ich nur so weit ergänzt, bis das Ergebnis im EibPC stimmte.

    Ich habe auf die Schnelle keine perfekte Gegenüberstellung der DPT und EIS Datentypen gefunden.

    Einen Kommentar schreiben:


  • Uwe!
    antwortet
    Jambala
    Danke, das kopier ich mir mal als Vorlage.

    @MarkusS
    ja, das ist echt schwach. In der ETS hab ich die auch alle mit den richtigen DPT deklariert und der Gruppenmonitor zeigt dadurch auch alle Telegramme vernünftig an. Aber da hat der EibPC (das Wiregate,....) halt leider nichts davon...

    Einen Kommentar schreiben:


  • MarkusS
    antwortet
    Zitat von Jambala Beitrag anzeigen

    Warum die dämliche ETS das nicht automatisch macht bleibt ein Rätsel der Entwickler. Kann man bei einem Kaufpreis von 1000€ Netto offensichtlich nicht erwarten.
    das ist ein liebevoll gepflegtes Feature, mindestens schon seit ETS2.

    für die ETS3 hat Makki mal was gebastelt was die Daten in ordentlich aus der DB extrahiert, die Wiregate-Leute haben das gleiche Problem.

    So ziemlich alles was bei Dir uncertain ist könnte man auch deklarieren, die Sub-DPTs dafür gibt es im Standard.

    Einen Kommentar schreiben:

Lädt...
X