Daten ( Temp.-Soll/Ist/Stellwerte) für IBA-PC-Mess-System

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • B4060
    Smart Home'r
    • 27.01.2017
    • 63

    #1

    Daten ( Temp.-Soll/Ist/Stellwerte) für IBA-PC-Mess-System

    Ich möchte zur Optimierung & Fehleranalyse der Heizung die Soll+Ist-Temperaturen und den Reglerausgang aufzeichnen. Dazu möchte ich ca. 50 Analogwerte und Digitalwerte
    per TCP oder UDP zum Messrechner übertragen. Soweit ich gesehen habe hat ein Programmbaustein für PicoC aber nur 13 Eingänge. Ich hätte aber am liebsten alle Messwerte gleichzeitig immer im gleichen Format zyklisch an das Mess-System geschickt. Vielleicht hat ein erfahrender Programmierer eine Vorschlag wie man so was am besten realisieren kann.
    Kann ich die Messwerte nur über den Baustein-Eingang in PicoC-Programm einlesen oder gibts da noch eine andere praktikable Möglichkeit?
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11250

    #2
    Wenn du die Werte zeitgleich in eine DB schicken willst, würde ich das entweder vom Messsystem per HTTP REST abholen (evt. aufwendig, die Daten alle korrekt aufzubereiten).

    Oder per VO per TCP/UDP/HTTP senden, serverseitig buffern und zu deinem Wunschintervall in die DB schreiben.
    Die analogen VO‘s senden bei jeder Änderung, d.h. du hast dann zu jeder Zeit die gerade aktuellen Werte am Server.
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • B4060
      Smart Home'r
      • 27.01.2017
      • 63

      #3
      Danke für deine Ratschläge!

      Ich habe die Unterstützung der Fa. iba ( www.iba-ag.de ) und habe daher jetzt mal die Mess-Software bestellt.
      So in ca. 2 Wochen werde ich sie bekommen, dann gleich mal installieren und testen.
      Das Messsystem-Programm kann man parametrieren. Ich melde mich dann hier wieder, hoffentlich bereits mit einem Mess-Schrieb.
      Zur SW in der Loxone - ich stell mir das jetzt jedenfalls so vor:
      ich lese in mehreren Pico-Bausteine je 13 Messwert ( mehr geht ja nicht, oder? ) und schreib sie dann per TCP an das Mess-System.
      Je Pico-Baustein verwende ich einen eigene Port. Da die Temp. sich eh nicht so schnell ändert, habe ich zwar einen kleinen Zeitversatz zwischen den Bausteinen, aber der ist für
      die Heizungsoptimierung nicht erheblich.

      Kommentar

      • maxw
        Lox Guru
        • 26.08.2015
        • 1394

        #4
        Ev. kommst du hier mit NodeRed dazwischen deutlich einfacher und effizienter zum Ziel.

        Kommentar

        • B4060
          Smart Home'r
          • 27.01.2017
          • 63

          #5
          Habe noch Probleme mit picoc-code. udp-mitloggen funktioniert zum messsystem, aber mein programm mag noch nicht - vielleicht kann mir jemand einen Tipp geben:
          Lese die 10 Eingänge des Bausteins in den Buffer ein und streame den zum iba-Messsystem - hab schon einiges an der syntax probiert, aber es kommt nix raus

          int maxBuffer = 10;
          int i;
          float BufferAna[maxBuffer];

          while (TRUE)
          {
          STREAM* pUDPstream = stream_create(„/dev/udp/10.164.66.10/5011?,0,0);
          if (pUDPstream != NULL)
          {
          for (i = 0; i < maxBuffer; i++)
          {
          BufferAnalog[i] = getinput(i);
          }
          stream_write(pUDPstream,BufferAnalog,maxBuffer);
          stream_flush(pUDPstream);
          stream_close(pUDPstream);
          }
          else
          sleep(1000); // 1sec Zykluszeit
          }

          Kommentar

          • Jan W.
            Lox Guru
            • 30.08.2015
            • 1504

            #6
            aber es kommt nix raus
            Die Variable muss in der Deklaration genauso genannt werden, wie im weiteren Verlauf (BufferAna vs. BufferAnalog). Das Anführungszeichen unten und das Fragezeichen sollen wohl ein " darstellen.

            Um Syntaxfehler zu erkennen, kannst Du an den Programmbaustein an den Ausgang TeQ ein Statusbaustein anhängen. Der Status ist entweder "Start" oder die Zeile und Spalte mit dem Syntaxfehler.

            Gruß Jan
            Miniserver v14.5.12.7, 2x Ext., 2x Relay Ext., 2x Dimmer Ext., DMX Ext., 1-Wire Ext., Gira KNX Tastsensor 3 Komfort, Gira KNX Präsenzmelder, Fenster- und Türkontakte, Loxone Regen- und Windsensor, Gira Dual Q Rauchmelder vernetzt, 1x Relais-Modul
            Loxberry: SmartMeter, MS Backup, CamConnect, Weather4Lox
            Lüftung: Helios KWL EC 370W ET mit Modbus TCP - via Pico-C
            Heizung: Stiebel Eltron WPF 5 cool (Sole-Wasser WP) mit ISG, FB-Heizung mit 18 Kreisen, Erdsonde - via modbus/TCP
            Node-RED: IKEA Tradfri

            Kommentar

            • B4060
              Smart Home'r
              • 27.01.2017
              • 63

              #7
              Danke für die Hilfe!!!! - ja die Variable muss natürlich gleich lauten - hab ich übersehn und das Komma " war im Beispiel ein "kleines komma"
              Jetzt läuft die Kommunikation mal, aber die Werte in float sind leider alle falsch - denke da musss ich noch mal sniffen, was da icht passt.

              Gruß Bernhard

              Kommentar

              • B4060
                Smart Home'r
                • 27.01.2017
                • 63

                #8
                int maxBuffer = 10;
                int laenge =40;
                int i;
                float BufferAnalog[maxBuffer];

                while(TRUE)
                {
                STREAM* stream = stream_create("/dev/udp/10.164.66.10/5010",0,0);
                if (stream != NULL)
                {
                for (i = 0; i < maxBuffer; i++)
                {
                BufferAnalog[i] = getinput(i);
                }
                stream_write(stream,BufferAnalog,maxBuffer);

                stream_flush(stream);
                stream_close(stream);
                }
                sleep(500); // wait 0,5sec

                for (i = 0; i < maxBuffer; i++)
                {
                setoutput(i,BufferAnalog[i]);
                }
                }

                Programm läuft, UDP-Stream kommt im Messsystem an, Telegrammzähler zählt, Länge=10 aber die Daten sind Schrott ( zumindestens konnte ich mit allen Versuchen keine brauchbaren Werte
                ermitteln.
                Frage: kann man float-Array so übertragen? Fehler gibt der Statusbaustein in der LoxConfig keinen aus. Hat jemand eine Idee oder Erfahrung mit solchen streams?

                Kommentar

                • Jan W.
                  Lox Guru
                  • 30.08.2015
                  • 1504

                  #9
                  Ich tippe auf ein Problem mit den Float-Formaten zwischen Loxone und der Mess-Software. Ich würde mal mitsniffen, wie die Daten übermittelt werden. Das Format für Float solltest Du aus dem Quellcode für Pico-C ermitteln können. Loxone gibt nur das Format für Integer an: An integer has 32 bits, little endian.

                  Falls möglich und Du auf dem o.a. Weg nicht weiterkommst, könntest Du die Zahlen als String übermitteln, allerdings ist dann zusätzliches Parsen erforderlich. Für ein Debugging kannst Du Werte im Log ausgeben. Du solltest allerdings gleich einen Schalter einbauen, da so eine Debug-Ausgabe die SD-Karte belastet und daher nur in der Testphase genutzt werden sollte.

                  Miniserver v14.5.12.7, 2x Ext., 2x Relay Ext., 2x Dimmer Ext., DMX Ext., 1-Wire Ext., Gira KNX Tastsensor 3 Komfort, Gira KNX Präsenzmelder, Fenster- und Türkontakte, Loxone Regen- und Windsensor, Gira Dual Q Rauchmelder vernetzt, 1x Relais-Modul
                  Loxberry: SmartMeter, MS Backup, CamConnect, Weather4Lox
                  Lüftung: Helios KWL EC 370W ET mit Modbus TCP - via Pico-C
                  Heizung: Stiebel Eltron WPF 5 cool (Sole-Wasser WP) mit ISG, FB-Heizung mit 18 Kreisen, Erdsonde - via modbus/TCP
                  Node-RED: IKEA Tradfri

                  Kommentar

                  • B4060
                    Smart Home'r
                    • 27.01.2017
                    • 63

                    #10
                    Danke für die Tipps!
                    Vielleicht kann man ja irgendwie die Float (*10 wegen der 1. Kommastelle) in integer umwandeln und dann schicken.
                    Ich schick mal ein paar Ausdrucke aus dem Messprogramm... ich bekomme jedenfalls nur wenige Daten

                    Das Format für Float solltest Du aus dem Quellcode für Pico-C ermitteln können
                    denke das sind 4Bytes - ich bekomme aber nur 8Bytes und die kann ich nicht interpretieren
                    Angehängte Dateien

                    Kommentar

                    • Jan W.
                      Lox Guru
                      • 30.08.2015
                      • 1504

                      #11
                      Vielleicht mal in Pico-C mit sizeof(x) die Größe der float Variablen x ausgeben lassen? Nach einem kurzen Blick auf den Quellcode sieht es für mich so aus, als ob der Datentyp "float" intern "double" verwendet. Wenn Du nur eine (oder 2) Nachkommastelle(n) benötigst, wäre das Multiplizieren mit 10 bzw. 100 wahrscheinlich das Einfachste, sofern der Wertebereich ausreicht.
                      Miniserver v14.5.12.7, 2x Ext., 2x Relay Ext., 2x Dimmer Ext., DMX Ext., 1-Wire Ext., Gira KNX Tastsensor 3 Komfort, Gira KNX Präsenzmelder, Fenster- und Türkontakte, Loxone Regen- und Windsensor, Gira Dual Q Rauchmelder vernetzt, 1x Relais-Modul
                      Loxberry: SmartMeter, MS Backup, CamConnect, Weather4Lox
                      Lüftung: Helios KWL EC 370W ET mit Modbus TCP - via Pico-C
                      Heizung: Stiebel Eltron WPF 5 cool (Sole-Wasser WP) mit ISG, FB-Heizung mit 18 Kreisen, Erdsonde - via modbus/TCP
                      Node-RED: IKEA Tradfri

                      Kommentar

                      • B4060
                        Smart Home'r
                        • 27.01.2017
                        • 63

                        #12
                        Danke für deinen Ratschlag - werde mich mal daran versuchen

                        Kommentar

                        • B4060
                          Smart Home'r
                          • 27.01.2017
                          • 63

                          #13
                          Jetzt läuft alles! - kann max 64 Analogwerte aufzeichnen ( Lizenz der MessSW ) - da ich 2 PicoC-PrgBausteine für die PV-Anlage brauche, bleiben 6 Bausteine für die Messdatenaufzeichnung ( daher max 13 x 6 Signale - aber man könnte vielleicht irgendwie digitale in Analoge umwandeln - hab aber nix gefunden, muss ja außerhalb des PicoBausteins sein, sonst bringts nicht viel )
                          Hauptproblem waren die unterschiedlichen Datentypen, da float hier eigentlich double ist und ich glaube, int gleich longInt. Jedenfalls habe ich jetzt brauchbare Messdaten.
                          Aufgefallen ist mir, dass beim letzten Baustein die Übertragung z.Teil nicht ordentlich funktioniert - ich bekomme dann viel zu viele Telegramm - scheinbar kommt da was in einen falschen task - aber mit Steuerung Spg. aus/ein funktionierts wieder ordentlich.

                          nochmals vielen DANK für eure Hilfe!
                          Angehängte Dateien

                          Kommentar

                          Lädt...