Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX Properties

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

    KNX Properties

    Die KNX Spezifikation nennt im Teil 3/4/1 Application Interface Layer, drei Typen von Properties:
    • Data Properties werden über die Services A_PropertyValue_Read, A_PropertyValue_Write und A_PropertyDescription_Read adressiert.
    • Function Properties werden über die Services A_FunctionPropertyCommand und A_FunctionPropertyState_Read adressiert.
    • Network Parameter Properties werden über die Services A_NetworkParameter_Read und A_NetworkParameter_Write adressiert.
    Soweit so gut, aber woran erkenne ich, welchen Typ ich habe?

    Function Properties sollen als Datatype=PDT_FUNCTION haben.
    Woran erkenne ich die anderen Properties?
    Gibt es auch Data Properties oder Network Parameter Properties, die auch PDT_FUNCTION gesetzt haben?


    #2
    Dann noch eine Frage:
    Es gibt ja noch die Services A_SystemNetworkParameter_Read und A_SystemNetworkParameter_Write, die auch die Network Parameter Properties adressieren.
    Wo ist denn der Mehrwert gegenüber den normalen Services A_NetworkParameter_Read und A_NetworkParameter_Write?

    Kommentar


      #3
      Es waere hilfreich zu wissen, was der Hintergrund deiner Frage ist, was hast du vor?

      Mit den Properties kommst du normalerweise nicht in Beruehrung.
      Die ETS greift auf die Properties zu wenn sie ein Geraet programmiert, das laueft etwa so:

      - Verbindung aufbauen
      - Was bist du? (device-descriptor-property im Interfaceobject "device" wird abgefragt)
      - je nach descriptor gehts dann weiter zb mit Abfrage der Speicherstellen der Tabellen (table-ref properties in den Tabellenobjekten)
      - ...

      Kommentar


        #4
        Um den Hintergrund der Frage zu beantworten, muss ich etwas weiter ausholen...

        Mein Projekt fing mit einem Rademacher RolloTube Aktor an, der beim Runterfahren auf ein Hindernis gestoßen ist und sich das als neue Endposition gemerkt hat. Ich kann nicht akzeptieren, dass man die Endposition nur durch Ausbau neu setzen kann. Ist doch nur Software... Aber mit ETS habe ich keinen ausreichenden Zugang zum Aktor. Genaugenommen begrenzt mich ETS unnötigerweise in den Konfigurationsmöglichkeiten. Und unter Linux läuft ETS auch nicht...

        Also habe ich angefangen mich in den KNX Standard einzulesen. Dann habe ich einen KNX Stack mit Boost ASIO in C++ geschrieben. Inzwischen gibt es auch ein OpenETS auf Qt Basis, dass auch die originalen ETS-Projektdateien vollständig einlesen kann. Ein Freund hat das ganze auf Android gebracht.

        Jedenfalls bin ich gerade an den Widgets, um die Properties abzufragen. Momentan rufe ich nur die Data Properties ab, aber die Property Description zeigt mir schon, dass einige davon Function Properties sind. Und das sagt auch die ETS Projektdatei. Unklar ist mir halt noch, woran ich Network Properties erkenne und ob ich Function Properties auch als Data Properties abfragen kann. Soviel zum Hintergrund meiner Fragen...

        Die ETS Projektdatei hat mir übrigens schon offenbart, dass es mehr Group Objects gibt, als über ETS konfigurierbar sind. Eigentlich muss ich nur die Group Object Association Table (GrOAT) und die Group Address Table (GrAT) richtig einstellen und dann komme ich da ran. Ich bin mir fast sicher, dass auch die Endpositionen darunter sind.

        Mit ETS kann ich sowas nicht machen Mit OpenETS bin ich kurz davor. Aber ich will das richtig machen und programmiere daher erst mal alle Application Layer Services inkl. Property Access und Memory Access, bevor ich darauf aufbauend das Application Interface Layer mit allen Interface Objects bzw. Resourcen zugänglich mache.

        Kommentar


          #5
          Hi,

          das ist beeindruckend, dass Du - nur um ein paar Endpositionen zu setzen - die ETS nachbauen willst. Die Properties und die sich dadurch ergebenden Möglichkeiten kenne ich nicht, vielleicht kann Dir hier thewhobox weiter helfen, auch er schreibt an einem ETS-Ersatz bzw. Ergänzung. Vielleicht könnt ihr euch ja austauschen.
          Allerdings wage ich zu bezweifeln, dass Deine Schlussfolgerungen korrekt sind und somit Dein Ziel erreichbar ist:
          Zitat von TobyLorenz Beitrag anzeigen
          beim Runterfahren auf ein Hindernis gestoßen ist und sich das als neue Endposition gemerkt hat. Ich kann nicht akzeptieren, dass man die Endposition nur durch Ausbau neu setzen kann
          So wie Du das schreibst, kann die Endposition nicht nur durch den Ausbau gesetzt werden, denn es ist ja auch im Betrieb passiert (Hindernis). Was sagt denn die Anleitung (Applikationsbeschreibung) hierzu?

          Zitat von TobyLorenz Beitrag anzeigen
          Genaugenommen begrenzt mich ETS unnötigerweise in den Konfigurationsmöglichkeiten.
          Das bezweifle ich. Die ETS bietet die Konfigurationsmölichkeiten an, die der Hersteller in der Applikation exponiert. Bei den Applikationen, die ich erstellt habe, hat die ETS noch nie was eingeschränkt bzw. begrenzt.

          Zitat von TobyLorenz Beitrag anzeigen
          Die ETS Projektdatei hat mir übrigens schon offenbart, dass es mehr Group Objects gibt, als über ETS konfigurierbar sind.
          Sprichst Du hier über eine Projektdatei oder über das Applikationsprogramm? Ich habe mir bisher häufiger Applikationsprogramme angesehen (ich meine die xml-Repräsentation) und noch nie KO entdeckt, die nicht über die ETS konfigurierbar waren. Mich würde da ein Beispiel interessieren.

          Zitat von TobyLorenz Beitrag anzeigen
          Eigentlich muss ich nur die Group Object Association Table (GrOAT) und die Group Address Table (GrAT) richtig einstellen und dann komme ich da ran.
          Was meinst Du damit? In der GrAT stehen doch nur alle GA drin, die in der ETS zugeordnet wurden und in der GrOAT noch die Zuordnung von GA zum KO. Wieso solltest Du da an etwas ran kommen, das nicht in der ETS geht?

          Zitat von TobyLorenz Beitrag anzeigen
          Ich bin mir fast sicher, dass auch die Endpositionen darunter sind.
          Hier nochmal die Frage: Was sagt die Applikationsbeschreibung dazu? Gibt es KO, über die man die Endpositionen einstellen kann? Wenn ja, dann musst Du dem KO in der ETS nur eine GA zuweisen und dann den entsprechenden Wert über die ETS senden. Wenn nein, wirst Du auch mit anderen Mitteln nicht drankommen, denn dann sieht die Firmware das nicht vor.

          Die ETS schickt doch nur Parameter an den Aktor, dessen Firmware diese interpretiert. Was lässt Dich glauben, dass es "geheime" Parameter gibt, die mehr machen können als das, was mit der ETS möglich ist? Würde mich wirklich interessieren...

          Gruß, Waldemar






          OpenKNX www.openknx.de

          Kommentar


            #6
            Hi,

            there are no Network Properties.
            There are only Properties that are accessible via Network Parameter Services.
            Whether a Property shall/may/shall not be accessible via (System) Network Parameters services can of course be found in the Property specifications and in Volume 6 "Profiles" as indication NwPar.

            The Group Objects shown in the ETS file will also show GOs that are not active in your device. These may be alternative GOs for GOs that are active, or, inactive GOs, simply because of your chosen parameter settings. If GO x is not visible in your ETS UI and you try to access GO x, you may - if succesful - get totally different data. The GrOAT and the GrAT will not include references to inactive GOs.

            Finally, the application will store the end position in an implementation specific memory location. If this is not exposed a GO or as memory mapped parameter, then it can be just any random position in the memory.

            It looks more efficient to me to contact the manufacturer and address the problem with him.

            Best regards,


            Kommentar


              #7
              Let's switch to English, so also Bruyne can follow easier ;-)

              So the actor I'm talking about is from Rademacher RolloTube X-Line. Manufacturer ID 0x009C. It has Mask Version 0x0701. Both information according to ETS Manufacturer Data and according to Device Descriptor and Data Property.

              The ETS Manufacturer Data contains the default memory content under Static->Code->AbsoluteSegment. The following memory segments are listed there and I identified them as:
              - 0x0700..0x07A2 contains Group Objects
              - 0x07A3..0x07E2 contains Group Object Flags
              - 0x07E2..0x082B just contains 0's
              - 0x4000..0x41B1 contains AddressTable
              - 0x41B1..0x435F contains AssociationTable
              - 0x4360..0x4562 contains ComObjectTable
              - 0x4563..0x456A contains data I don't understand yet
              - 0x458B..0x456F contains data I don't understand yet
              - 0x4570..0x457F contains data I don't understand yet
              - 0x4580..0x4623 contains Parameters
              - 0x4624..0x467F contains data I don't understand yet

              Now the ComObjectTable is encoded according to spec "Group Object Table - E-Mode Realisation Type 3 (GrOT - Easy 3)".
              It contains 128 contiguous group object descriptors. 45 of them are listed in the ETS Manufacturer Data under Static->ComObjectTable. In ETS GUI you can also see that the ComObjects are non-contiguous. They start with #0 and end with #127, but many in between are missing. I would like to compare the ones that are not shown across my 8 Rollotube Actors.

              Although the memory layout of a Group Object Table is well known and accessible, ETS only shows the Group Objects that are mentioned in the ManufacturerData. ETS doesn't even provide me with an option to manipulate the GrOAT or GrAT directly to let me access these objects from the bus. ETS also doesn't provide me with a direct memory access to just download the memory and visualize it's content, or even manipulate it directly.

              Bye the way, I asked Rademacher already last year, if there is a way to (re)set the end positions via ETS, and not only by pressing the red button at the motor. These are some excerpts from the answer from the German support:
              • Der Rohrmotor hat vermutlich über den Behanglängenausgleich diesen Punkt als neuen Endpunkt gesetzt, auch wenn die Anzahl der Fahrten für einen erneuten Behanglängenausgleich heruntergesetzt wird so hält das Gerät dann während der Abfahrt genau dort wo der Behang nicht mehr fällt / nicht mehr schneller fällt als der Antrieb dreht und speichert diesen Punkt als neuen Endpunkt.
              • Eine manuelle Endpunktjustierung ist knx seitig leider nicht möglich. [Anmerkung: Er meint wahrscheinlich via ETS. Via KNX sollte alles möglich sein.]
              • Machbar wäre dies lediglich über die Taste am Antriebskopf oder die 230V Leitung. Bei Justierung via Anschlußleitung würde man den antrieb zunächst spannungsfrei schalten , dann die weiße Ader aus dem Motorkabel mit auf die Phase legen und die Spannung wieder zuschalten. Nach etwa 4sek. ruckt der Motor und ist im Programmiermodus, nach weiteren 3-4sek. fährt der Antrieb los und sie sind in der Endpunktjustierung. Nun wird die weiße Ader in dem Moment wo der gewünschte Endpunkt erreicht ist von der Phase getrennt und hat sich diesen Punkt als neuen Endpunkt gespeichert. Gleiche Vorgehensweise für den anderen Endpunkt.
              So I hope this explains why I think there are Group Objects that I cannot access via ETS.
              Zuletzt geändert von TobyLorenz; 23.04.2021, 09:18.

              Kommentar


                #8
                Hi Tobias,

                Zitat von TobyLorenz Beitrag anzeigen
                Anmerkung: Er meint wahrscheinlich via ETS. Via KNX sollte alles möglich sein.
                this is the point, why you might be successfull. But just Rademacher will be able to help you. They have to tell you, at which memory position the required information is stored and how it is encoded. And you will just be able to change it, if it is a memory mapped parameter, as already stated above.

                I am still pretty sure, that it has nothing to do with any GroupObject, because this would be described in the according application description and you would find a parameter combination, which enables (activates) the according GroupObject in ETS.

                Zitat von TobyLorenz Beitrag anzeigen
                ETS doesn't even provide me with an option to manipulate the GrOAT or GrAT directly to let me access these objects from the bus. ETS also doesn't provide me with a direct memory access to just download the memory and visualize it's content, or even manipulate it directly.
                Of course not! ETS is an End-User-Tool, and not an IDE for device development. It "just" sends a set of parameters to the device, that's it. The firmware running on the device itself is usually interpreting the given parameters and doing some actions. Even if you would be able to access the memory directly and write somewhere a 5 for a byte, which is interpreted as a boolean, so just 0 and 1 are defined, what should the firmware do with this information?

                Don't get me wrong, for research reasons or to learn something about KNX, your work might be very senseful. But I still doubt, that you will be successful changing the end positions of your device. I hope, I am wrong .

                Regards,
                Waldemar
                OpenKNX www.openknx.de

                Kommentar


                  #9
                  Zitat von TobyLorenz Beitrag anzeigen
                  ETS doesn't even provide me with an option to manipulate the GrOAT or GrAT directly to let me access these objects from the bus. ETS also doesn't provide me with a direct memory access to just download the memory and visualize it's content, or even manipulate it directly.
                  Das ist ein Usecase, der von der ETS explizit nicht vorgesehen ist, da man damit auch viel schaden anrichten kann. (Wer bietet dann noch support, wenn jeder iwas im Speicher ändern kann?)
                  Das ist als würdest du Word anprangern, dass er dir nicht erlaubt Bits im exportierten PDF zu manipulieren.

                  Zitat von TobyLorenz Beitrag anzeigen
                  Ich bin mir fast sicher, dass auch die Endpositionen darunter sind.
                  Die Endposition wird bestimmt nicht in eine der beiden Tabellen gespeichert. Das ist ein interner Wert der berechnet und dann iwo im Speicher abgelegt wird.

                  Zitat von TobyLorenz Beitrag anzeigen
                  [Anmerkung: Er meint wahrscheinlich via ETS. Via KNX sollte alles möglich sein.]
                  Das ist auch nur eine Vermutung von dir. Klar wird die Endlagenerkennung iwo gespeichert. Aber niemand sagt, dass du auf den Speicherbereich auch zugriff hast.
                  Frag den Hersteller doch mal genau wo das gespeichert wird oder wie man das ändern könnten. So ist das auch nur die Nadel im Heuhaufen suchen die evtl gar nicht im Heuhaufen ist.

                  Zitat von TobyLorenz Beitrag anzeigen
                  They start with #0 and end with #127, but many in between are missing.
                  Je nach Parametrierung werden nicht alle KOs angezeigt. Wenn man zum Beispiel bei nem Taster das dimmen deaktiviert (also nur schalten einstellt).
                  Dabei ist KO 0 Schalten, KO1 Status und KO2-5 fürs dimmen.


                  Ich hoffe ich hab deine Aussagen nicht Interpretiert.
                  Ansonsten finde ich das Projekt auch interessant.
                  Welche Lib verwendet ihr für den Buszugriff?

                  Gruß Mike
                  OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                  Kommentar


                    #10
                    Die Endposition wird bestimmt nicht in eine der beiden Tabellen gespeichert. Das ist ein interner Wert der berechnet und dann iwo im Speicher abgelegt wird.
                    At least the Group Object Table contains the following information:
                    - Address: Tells me, where the Group Object and the Group Object Flags are located in Memory.
                    - Config: Tells me, if this a Group Object to Read or Write. So UpdateFlag/TransmitFlag/ReadOnInitFlag/WriteFlag/ReadFlag/CommunicationFlag/Priority
                    - Type: Tells me at least, how long the value is, so bits and bytes. And I guess, the end position is not stored as bit ;-)

                    I hope that, if I compare the Group Object Memories of all my 8 rollotubes then I find in the differences the individual start and end positions.

                    this is the point, why you might be successfull. But just Rademacher will be able to help you. They have to tell you, at which memory position the required information is stored and how it is encoded. And you will just be able to change it, if it is a memory mapped parameter, as already stated above.
                    Frag den Hersteller doch mal genau wo das gespeichert wird oder wie man das ändern könnten. So ist das auch nur die Nadel im Heuhaufen suchen die evtl gar nicht im Heuhaufen ist.
                    You are both right. I just have doubts whether Rademacher will provide me with such internal information. At least the support will be confused with this question. Normally nobody will ask for details on such level, memory layout etc. But I can try it another time.

                    Welche Lib verwendet ihr für den Buszugriff?
                    As said. It wrote the complete KNX stack on my own. It's in C++ and only uses Boost ASIO (which hopefully becomes std::networking soon) as external dependency. It currently supports IP as medium type and there is a TP1 simulation including Data Link Layer and Physical Layer, which I needed to get the System Conformance Test Suite running. All headers are provided with traceability link to the specification. All implementations are tested according to examples and tests provided in the spec. Still there are ~500 todos to solve. :-) And I haven't decided for a license yet to release the software stack.

                    OpenETS is still rudimentary. There are widgets for most of the KNX application layer services already. Interesting for me currently are the Property services. There is no support for Application Interface Layer yet, which would include Interface Objects (Table views) and Memory views. I have support for ETS project files version 10,11,12,13,14.

                    Bye the way, I found some issues with ETS or more particular with ETS project files. They don't validate against the corresponding ETS project schema.
                    According to schema it should be "Project->AddinData", but the project files generated by ETS use "Project->ProjectInformation->AddinData"
                    At least that's the case with project schema v13.

                    Kommentar


                      #11
                      Zitat von TobyLorenz Beitrag anzeigen
                      I hope that, if I compare the Group Object Memories
                      Dadurch, dass wahrscheinlich die Endlage nicht als KO zur Verfügung steht, wird natürlich auch nicht darauf in der Tabelle referenziert.

                      Wenn, dann müsstest den kompletten Speicher auslesen und durch nen Binary Diff jagen.
                      Das ist die einfachste und schnellste Methode, die mir einfallen würde.

                      Gruß Mike
                      OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                      Kommentar


                        #12
                        Du hast einen KNX-Stack implementiert und weisst nicht wie du einen Propertytyp erkennst?

                        Zu dem konkreten Problem:
                        Wenn ich mich recht erinnere hat der Rollotube einen Endlagenschalter, diese automatische Endlage kann ueber eine Taste am Motor ueberschrieben werden.
                        Das heisst der Motor kann nicht nur abschalten wenn er den Endlagenschalter erreicht, sondern auch auf eine gespeicherte Position fahren.

                        Es ist nicht gesagt, dass der Speicherort der Endlage ueber KNX erreichbar ist, dazu muesste er

                        - in einer Property gespeichert sein oder
                        - von einer Propertyfunction aenderbar sein oder
                        - in einem Parameter gespeichert sein
                        - optional koennte die Applikation diese Speicherorte auch per Gruppenkommunikation zugaenglich machen (sehr unwahrscheinlich)



                        Kommentar


                          #13
                          Zitat von Zepp Beitrag anzeigen
                          Wenn ich mich recht erinnere hat der Rollotube einen Endlagenschalter, diese automatische Endlage kann ueber eine Taste am Motor ueberschrieben werden.
                          Der Rollotube misst sicherlich die Schrittweite und errechnet so die Position. Ich glaube einen Endlagenschalter hat der nicht, sonst müsste ich dem Rollotube nicht per Taster am Motor vorgeben, was die oben und unten Position ist.
                          Der Rollotube misst vermutlich auch den Strom, für die Hindernisserkennung und für den automatischen Behanglängenausgleich. Kleveres Kerlchen, aber in diesem Fall macht mir das halt Probleme.

                          Zitat von Zepp Beitrag anzeigen
                          Du hast einen KNX-Stack implementiert und weisst nicht wie du einen Propertytyp erkennst?
                          Jip, genau so ist es :-)

                          In der KNX Spec Teil 3/4/1 "Application Interface Layer" wird in nur drei Zeilen "erklärt", was Network Parameter Properties sind. Die drei Zeilen sind:
                          Services
                          A_NetworkParameter_Read
                          A_NetworkParameter_Write
                          That's it :-) Das ist etwas wenig information, um zu verstehen, woran ich diese Properties in der Property Description erkennen kann. Und ich habe in den anderen Teilen nichts weiter über Network Properties gefunden. Oder habe ich da noch was übersehen?

                          Ich weiß zwar, dass Function Properties in der Description den Datentyp PDT_Function haben müssen. Aber gilt auch der Umkehrschluss? Dürfen Data und Network Properties den Typ nicht setzen? Das steht so explizit nicht in der Spec. Mal schauen, manche Sachen haben sich erst bei der Testimplementierung erklärt. Wird hier wahrscheinlich auch so sein.

                          Kommentar


                            #14
                            Hi Tobias,

                            kennst Du das hier: https://github.com/thelsing/knx. Das ist der Stack, mit dem ich arbeite. Da ist alles drin, was ich bisher für die Implementierung eines Gerätes gebraucht habe. Vielleicht hilft Dir das ja weiter (von dem Stack selbst habe ich nur rudimentär Ahnung, ich benutze ihn nur...). Mir ist klar, dass das die "Gegenseite" ist, also der Teil, der auf dem Gerät läuft, aber vielleicht hilft es Dir und verschafft Dir weitere Einsichten. Außerdem könntest Du damit ein IP-Gerät simulieren, dass Du dann mit Deinem Stack parametrieren könntest .

                            Gruß, Waldemar
                            OpenKNX www.openknx.de

                            Kommentar


                              #15
                              Wie Herr De Bruyne schon sagte ...

                              Zitat von S. De Bruyne Beitrag anzeigen
                              (anything) can of course be found in the (this) specifications and in Volume (that)
                              Der KNX Standard ist nix fuer schwache Nerven. Die Informationen sind gut versteckt und kreuz und quer verteilt.
                              Ich nutze gerne pdfgrep wenn ich was suche.

                              Zitat von TobyLorenz Beitrag anzeigen
                              Das steht so explizit nicht in der Spec.
                              Doch. (jedenfalls mit hoher Wahrscheinlichkeit. Irgendwo.)

                              Wirst du den Stack veroeffentlichen?

                              EDIT: probier mal
                              Code:
                              pdfgrep -irn nwpar
                              Code:
                              pdfgrep -irn networkparameter
                              im Hauptverzeichnis des Standards, ich bekomme da 1202 hits.
                              Zuletzt geändert von Zepp; 23.04.2021, 13:26.

                              Kommentar

                              Lädt...
                              X