(UVR16x2): Eingang-Ausgang-Kopplung mit manueller Anpassung eines Sollwerts

There are 16 replies in this Thread which was already clicked 8,916 times. The last Post () by P.T.Pludge.

  • Hallo zusammen,


    ich habe hier schon viel gelesen und gelernt, und kämpfe mich durch UVR16x2, CMI und diverse Nebenmodule.
    Als Informatiker habe ich umfangreiche Kenntnisse bzgl. Programmierung, Logik, etc.
    Aktuell stehe ich jedoch vor einem Problem, für das ich partout keinen Denkansatz finde.


    Es geht darum, einen analogen Sollwert zwischen 20°C und 60°C aus einer Wärmepumpe auszulesen, und bei Bedarf nach manueller Anpassung im CMI-Schema wieder auf die Wärmepumpe zurückzuschreiben.


    Die Schnittstelle zur Wärmepumpe ist ein Read-/Write-Modbus-Register.
    Für die Interessierten: Panasonic T-CAP 9kW Monoblock WH-MXC09H3E8 via IntesisBox AW2 auf CAN-BC2+MODB.


    Das Auslesen ist kein Problem - via TA-Designer wird das Register wunderbar auf dem CMI-Schema angezeigt.
    Das Schreiben desselben Registers via (anwenderseitig einstellbarem) Fixwert dürfte ebenso trivial sein - ich habe mich bisher mangels Kontollmöglichkeit nicht getraut, den Ausgang tatsächlich mit dem bereits erfolgreich im Schema änderbaren Fixwert zu verknüpfen.


    Nach der Pflicht kommt nun die Kür: ich möchte gern den Ausgang manuell ändern können, und zwar auf Basis des eingelesenen Sollwerts, der sich seit dem letzten Schreiben wärmepumpen-intern schon wieder geändert haben kann :!:


    Also: wenn der Eingang aktuell 45°C zeigt, möchte ich mit Hilfe des üblichen Zahlen-Sliders mit einem Klick auf 46°C oder 44°C kommen und an den Ausgang senden (ggf. auch verzögert, falls die Wertänderung mehrere Klicks (44-43-42-41) erfordert). Nach dem Senden der 41°C aktualisiet sich der zugehörige Eingang ebenso auf 41°C. Im Laufe der Zeit kann sich der Wert in der Wärmepumpe intern ändern, und damit auch der Eingang, bspw. auf 39°C. Die nächste manuelle Änderung soll dann logischerweise auf Basis der aktuellen 39°C stattfinden.


    Ich habe bereits die X2-Funktionsreferenz, das Wiki, die einschlägigen Dokus hoch und runter gelesen - mir will nichts offensichtliches ins Auge springen...
    Vielleicht denke ich auch völlig falsch?
    Bitte gebt mir einen Schubs in die richtige Richtung.


    Danke, Gruß Lars
    :)

  • Hallo Lars


    Nur damit ich das richtig verstehe :


    Du liest aus deiner Wärmepumpe den Sollwert aus
    Dieser Wert gefällt dir nicht und du möchtest z.B. 3 Grad mehr oder weniger (quasi ein Offset in plus und minus Richtung)
    Wenn der neu eingelesene Sollwert deinem Wunsch entspricht ist alles hübsch .....
    bist du wieder "unzufrieden" wirst und den Sollwert verbiegen möchtest.


    Ist das soweit richtig ?


    mfg Cord

  • Hallo Cord,


    als Bsp. steht der Sollwert in der WP-internen zeitbasierten Steuerung auf 38°C. Diese 38°C lese ich über das Modbus-Register (read/write) ein, und zeige es im CMI-Schema an.
    Wegen gutem PV-Ertrag möchte ich spontan die 38°C auf 42°C heraufsetzen, und auf dasselbe Register zurück schreiben, wo es von der WP entgegen genommen und verarbeitet wird. Konsequenterweise zeigt auch der Eingang dann direkt die 42° an.
    Am nächsten Tag steht die WP-interne Steuerung wieder auf 38°C - und damit auch wieder das Modbus-Register.
    Der Wetterbericht meldet jedoch sommerliche Hitze, daher möchte ich den Sollwert heute auf 34°C runtersetzen - dies im Bedienelement aber natürlich auf Basis des heutigen Registerwerts 38°C - nicht etwa auf Basis meiner gestrigen Eingabe von 42°C.
    Deshalb ist im Prinzip eine Vorbelegung des Bedienelements mit dem aktuellen Eingangswert notwendig. Meines Wissens nach ist dies mit einem Fixwert jedoch nicht möglich.
    Wie setzt man so etwas sonst um?


    Gruß Lars

  • Hallo Lars


    Ich habe es verstanden und probiere heute abend mal meine Idee dazu aus.
    Hoffentlich macht mir die Arbeit keinen Strich durch die Rechnung aber sollte klappen.


    Ich probiere es dann mit dem Simulator aus und schick dir das dann zu.


    mfg Cord

  • Hallo Lars


    Ich habe da mal schnell ein "Konstrukt zusammengehauen".
    Nicht schön, aber es funktioniert prinzipiell bei meinem kurzen Test.


    Hinweis:


    Ich habe Eingänge für plus und minus genutzt und auch zum Transferieren, damit man im Simulator probieren kann.
    Der Simulator verzögert das Hoch und runterzählen sehr … also nicht wundern.


    Reset Bedingung ist erst einmal über eine Zeit (30 Sek) gelöst.
    Sollte man sicherlich ändern :


    wenn "Sollwert orig" mit "Sollwert neu" gleich ist, dann resetten.




    wie gesagt kann man sicherlich eleganter lösen, aber das wäre mal ein Ansatz



    Viel Spaß …. habe es ein wenig eilig, denn ich mach mich heute Abend auf den Heimweg von Russland aus ins Osnabrücker Land !!!


    Bei Fragen bin am Samstag bestimmt mal wieder online.



    Da fällt mir gerade ein, die Zähler 1+2 müssen auch abgelöscht werden …. Bitte noch nachtragen …. leider keine Zeit mehr.


    mfg Cord

  • Hallo Cord,


    vielen Dank! 8o


    Für mich als Newbie ist das ein ganz schönes Brett. Ich habe momentan mehr Fragezeichen als Antworten, versuche mich aber durchzuarbeiten.


    Es ist also tatsächlich so, dass man mühevoll das Bedienelement, das es für regulär änderbare Zahlenwerte schon gibt, nachimplementieren muss. Das hatte ich befürchtet :(


    Ich bemühe mich, durch die Schaltung durchzusteigen.
    Vor dem Hintergrund, dass ich so etwas für mehrere R/W-Register benötige (teils numerisch (°C), teils binär (on/off), teils als Umschalter zwischen 5 Optionen) wird das eine harte Nuss...


    Ich könnte mich zumindest für numerische Register auch damit anfreunden, den Offset mit Hilfe des regulären Bedienelements manuell bzw. via auf/ab-Pfeile einzugeben. Allerdings bleibt dann ja wieder das Problem, dass zumindest der Offset auf 0 zurück gesetzt werden sollte, nachdem der neue Wert ins Register geschrieben wurde. Damit wäre ich wieder beim ursprünglichen Problem der Fixwerte, die (welch Überraschung 8) ) von außen nicht änderbar sind.



    Derzeit bin ich noch an den Basics - das Lesen von Schaltungen klappt einigermaßen. Selbst bauen ist noch sehr mühsam, bspw. die Umwandlung des zeitbasierten Resets in die eigentlich triviale Logikfunktion "Soll-alt != Soll-neu".


    Vielen Dank nochmal!


    Schöne Grüße ins Osnabrücker Land :) ,
    Lars


    P.S.: OS erinnert mich direkt dran, dass in der Garage noch ein Auto, das mal bei Karmann gebaut wurde, nach Zuwendung ruft :rolleyes:

  • Ergänzung:


    Eigentlich kann der geänderte Wert in Echtzeit, insbesondere ohne expliziten Trigger, aufs Register geschrieben werden. Im Tapps2 kann für den Modbus-Ausgang die Sendebedingung "bei Änderung" aktiviert werden.


    Damit könnte ein Teil der Reset-Programmierung überflüssig werden. Beim Deiner Lösung des Offsets via Trigger + Zähler trifft das sicher zu (solange der Zähler nicht in den Überlauf geht ;) ), wenn der Offset als echte Zahl umgesetzt wird, sollte dieser hingegen besser nach Änderung genullt werden.
    Ach ja, da war ja noch was mit den nicht von außen änderbaren Fixwerten

  • Hallo Lars,


    das geht auch einfacher mit einer Analogfunktion.
    Bin zur Zeit auch am experimentieren mit dem CMI und Modbus.


    Hab das ganze allerdings mit UVR1611 getestet.
    Mit einer Analogfunktion und Mittelwertbildung bekommst auch eine Sollwertänderung in beide Richtungen (auf und ab) zustande.
    Lesen z.B. Modbus Holding Register1 über analogen Modbus-Eingang zur CMI und diesen Wert über analogen CAN-Ausgang über analogen Netzwerkeingang in der UVR1611 zur Eingangsvariable1 übertragen werden.


    Das ist der variable Input von der Wärmepumpe vom Modbus. Dann Sollwert an der Eingangsvariable2 verändern (nach oben oder nach unten).
    Die Analogfunktion errechnet sofort einen neue Mittelwert. Dieser kann grösser oder kleiner sein als der variable Input vom Modbus.


    Dieser errechnete Mittelwert = Ergebnis der Analogfunktion (neuer Sollwert) kann wieder über einen analogen Netzwerkausgang
    über analogen CAN-Eingang in die CMI und über einen analogen Modbus-Ausgang von der CMI in das gleiche Modbus Holding Register1 geschrieben werden.


    Gruß
    Jürgen

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

  • Hallo Jürgen


    Dann zeig doch mal bitte deinen Lösungsvorschlag …..


    mfg Cord

  • Hallo Cord,


    da gibt es nicht viel zu zeigen, ist ja nur ein Analog-Funktionsbaustein.
    Einfach ein anderer Ansatz als mit zwei Zählern.


    Viele Wege führen zu einer möglichen Lösung.
    Wichtig ist, dass man im Forum über mehrere Ansätze diskutieren und Erfahrung austauschen kann.


    Gruß
    Jürgen

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

  • Hallo Jürgen,


    hast Du vllt. trotzdem ein kleines Beispiel in Form einer TAPPS2-Datei?


    Die Idee mit dem Mittelwert klingt interessant. Wie die Rückkopplung zur Eingangsvariable funktionieren soll, ist mir nicht klar.


    Bsp.:
    E1 (von der WP): 40°
    E2 (manuell): 42°
    ergibt als Mittelwert: 41°


    Eine Zeit später ändert die WP durch äußere Umstände den Wert E1 auf 38°.
    E2 steht aber immer noch auf 42°.
    Als neuer Mittelwert ergibt sich 40° - diese erneute Änderung ist hier jedoch nicht gewünscht; es soll vielmehr so lange bei den 38° der Wärmepumpe bleiben, bis ich erneut manuell eingreife.

  • Modbus - Istwert mit Sollwert auf Gleich (=) abfragen. Bei Ungleich Transfer starten.



    Die Mittelwert -Lösung ist ein "Schätzholz", kein "Maß".


    Modbus-Sender = CMI Adr. 1
    UVR1611 = Adr. 2


    UVR 1611


    Alle Uvr starten, bei geändertem CAN-Ausgangsregister, innerhalb von dem eingestellten Zeitwert den Transfer. Der kleinste Wert ist 1sec.


    Alfred

  • Hallo Lars,


    Ja, mit der Analogfunktion Mittelwert kann die Rückkopplung zur Eingangsvariable durch die Sendebedingung am Modbus-Ausgang nicht endlos verzögert werden.
    Das Ganze arbeitet wie ein Schwingkreis und pendelt sich ganz langsam um den letzten manuellen Sollwert ein.


    Aber Ideen gibt es genug. Bin zur Zeit sowiso am experimentieren mit dem C.M.I und Modbus/TCP um Erfahrungen zu sammeln.
    Mit der Analogfunktion MULTIPLEX, die nur mit den x2-Geräten verwendet werden kann, sollte es funktionieren.


    Mit Fixwerten kannst am Multiplexer 9 gespeicherte Temperatur - Werte an den Multiplexerausgang schalten. (jeden Speicher kannst natürlich selber ändern)
    Ich nehme an im laufe der Zeit werden bestimmt nicht alle 9 gespeicherte Werte zum manuellen Ändern des Sollwerts notwendig sein.
    Aber zum testen hab ich alle freien 9 Eingänge mit unterschiedlichen Temperaturen (20°-60°) zum Umschalten belegt.


    Ich habe hier zum testen das ModbusHoldingRegister 1 verwendet


    Der Ablauf einer manuelle Sollwertänderung ist so vorgesehen: default = MULTIPLEXER Auswahl steht auf Fixwert1. Damit wird der eingelesene Wert gleich wieder ausgegeben.(default)


    Die manuelle Sollwertänderung besteht aus zwei Schritten:
    1. Einen Fixwert( 2-9 ) auswählen, dann wird der gewünschte manuelle Sollwert auf den Multiplexerausgang geschaltet und
    über die bekannten Mappings zum ModbusHoldingRegister 1 übertragen und natürlich auch wieder
    vom ModbusHoldingRegister 1 eingelesen und an die Eingangsvariable1 vom MULTIPLEXER zurück übertragen (Rückkopplung).
    Das ist bei mir sehr schnell gegangen, konnte gar nicht so schnell auf den Eingang des Multiplexers umschalten,
    um die Änderung der Eingangsvariable1 zu kontrollieren.


    2. Dann wieder am MULTIPLEXER mit Fixwert1(default) auf Eingangsvariable1 zurückstellen (den MULTIPLEXER auf Durchzug schalten).


    Damit ist die manuelle Sollwertänderung abgeschlossen.
    Die Wärmepumpe kann ab diesem Zeitpunkt den zuvor manuell geänderten Sollwert im ModbusHoldingRegister 1 wieder mit der WP-internen zeitbasierten Steuerung ändern.


    Gruß
    Jürgen

    Files

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

  • Hallo Alfred, hallo Jürgen,


    ich habe mir eure beiden Lösungen angeschaut.


    @Spspaul
    Danke nochmal für den Grundlagen-Tipp bzgl. des automatischen Sendens bei geänderten Werten.
    Leider fehlen Deiner Lösung gleich zwei der gesuchten Features:

    • Wenn die WP ihren Wert selbstständig geändert, springt die Vergleichsfunktion ebenso an, da auch dann ja Solltemperatur (Eingang) != Soll-Neu, was dazu führt, dass der Wert der Wärmepumpe sofort wieder überschrieben wird mit Soll-Neu. Das ist natürlich nicht gewünscht.
    • Wünschenswert wäre eine Rückkopplung zwischen Soll-Neu und Soll-Alt, so dass Soll-Neu sich stets dem Eingang anpasst, um die nächste Änderung bequemer durchführen zu können.


    @SolarEngel
    Die Mittelwert-Variante halte ich aus von @Spspaul genannten Gründen für unglücklich. Ich würde nicht ausschließen, dass es auf Grund von (intern technisch bedingten) Rundungen Konstellationen gibt, in denen der entstehende Schwingkreis (den ich zunächst gar nicht als solchen erkannt habe - danke für den Hinweis @Spspaul!) unendlich zwischen zwei Werten hin- und herschwingt.


    Mit dem Multiplexer bin ich auch nicht so wirklich glücklich, zum einen, weil die Bedienung doch sehr umständlich ist, zum anderen, weil in der nächsten Ausbaustufe zusätzlich zur manuellen Sollwert-Änderung eine UVR-gesteuerte Sollwert-Änderung implementiert werden soll, und diese dann ebenso die Multiplexerei umsetzen müsste.


    An der Rückkopplung zwischen Soll-Alt und Soll-Neu beißen wir uns offensichtlich die Zähne aus, so dass ich als einzige Möglichkeit sehe, mit einem Offset (+/-1,2,3,...) zu arbeiten. Bei größeren Änderungssprüngen kann das aber evtl. mühsam in der Bedienung werden, wobei eine Verzögerung des Sendens eventuell hilfreich sein könnte, um nicht jede einzelne Offset-Änderung unmittelbar zu senden.
    Dennoch muss auch der Offset nach dem Senden unbedingt wieder auf 0 gesetzt werden, sonst kommt man sicher in Teufels Küche, wenn man nach erstmaliger manueller Sollwert-Änderung und darauf folgender WP-eigener Sollwert-Änderung ein weiteres Mal manuell den Sollwert ändern möchte, und der Offset noch auf dem vorherigen Wert steht.
    Dann ist man schnell wieder in der Situation, wie ich sie im Punkt 1. an @Spspaul beschrieben habe.
    Für das Rücksetzen hat ja @Troedler77 mittels Plus-Minus-Trigger und Zähler + Zählerrücksetzung schon einen Ansatz geliefert.


    Es wurden ja nun einige interessante Ideen genannt. Ich grüble mal, ob sich mit einer Kombination etwas machen lässt.
    Dennoch bin ich weiterhin für Vorschläge dankbar :thumbup:


    P.S.: Es erstaunt mich, dass die UVR in ihrem doch schon sehr ausgereiften Stadium eine solche gefühlt banale Aufgabe (tl;dr: manuelle Veränderung eines Modbus-Read-Write-Registers) zur Herausforderung selbst für die alten Hasen macht... Ob wohl TA einen Lösungsansatz hat? ?(


    Gruß Lars

  • Anbei mein Entwurf.


    Der Ausgang wird im Simulator augenscheinlich korrekt geschrieben.
    Wenn ich jedoch im Simulator dann den Eingang manuell auf den berechneten Ausgangswert setze, um den Sync in der Wärmepumpe nachzustellen, läuft die Berechnung ein weiteres Mal los - wohl, weil die Zählerrücksetzung (egal, ob durch Vergleichsfunktion oder Flankenerkennung getriggert) langsamer ist als die "dahinter liegende" Berechnung auf Grund des geänderten Eingangs.
    Irgendwie muss hier noch eine Zeitverzögerung rein, um die Eingangsänderung solange vor der Sollwert-Neuberechnung zu "verstecken", bis der Zähler zurückgesetzt ist.
    Es fehlt gefühlt nur noch ein kleines Puzzleteil - mit der Timerfunktion komm ich nicht unmittelbar weiter. Wald vor lauter Bäumen?


    Nebenbemerkung:
    Den Zähler schon beim Senden zurückzusetzen wäre natürlich optimal - dafür wäre aber wohl ein expliziter Sende-Mechanismus (wie in @Troedler77's erstem Entwurf) notwendig -> würde ich gern vermeiden.

  • Es sieht so aus, als wäre die Lösung gefunden. Danke an alle mit ihren hilfreichen Lösungsansätzen.
    Die pure Anzahl verwendeter Funktionen unterscheidet sich leider nur unwesentlich von @Troedler77 's Ansatz.


    Der Trick ist eine Kombi aus Erkennung einer Eingangsänderung mittels doppelter Flankenerkennung (kann man die evtl noch zu einer einzigen zusammenführen?) und einer daran angehängten Freischaltung der Berechnung sowie Rücksetzung des Zählers.


    Entwurf anbei.



    @Spspaul : Danke für den Hinweis. Die Verwendung von Modbus-Registern via CAN-BC-MODB ist natürlich klar - das Modul habe ich im Einsatz. Die Betonung lag auf der Read/Write-Eigenschaft eines Registers (im konkreten Fall halt zufällig Modbus), die ganz offensichtlich nicht trivial zu verwenden ist.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!