Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
And indeed, please do not reduce the protocol just to a collection of Frame formats. Check how the services are used and consult the Management Procedures.
Yes, indeed it was already interesting to implement layer per layer. The interesting stuff happens there. Frames are just the events to trigger something ;-)
It's like playing a game and the first 7 levels up to including the Application Layer is solved already. Now I'm in the 8th level, the AIL. And then by implementing the Management Procedures and Configuration Procedures the game is over :-)
Da sind in der Tat noch ein paar Teile, die ich mir noch nicht im Detail angesehen habe: 3/5/2 Management Procedures und 3/5/3 Configuration Procedures.
wenn du einen Stack fuer einen management client (=ETS) bauen willst, sind das mit die wichtigsten Teile.
There are Properties. If you write data, and you read it back, you get the same data. REST-isch avant le mot.
And then there are Properties that you write, cause a command, and when you read them back, you get something totally different. They are the exact same things, just of type PDT_FUNCTION.
Then, sometimes, you want to query the network for information. So, you have to type this information. For this, the same identifiers are used. But querying requires parameters, different from the data of the actual Property. So, it is not required that any Property shall support querying; only a handful. The Properties that support these may be called Network Properties. That is not a different type, rather a different classification. Exactly what the spec says. And the rest is in the specification of the individual Properties, in the Management Procedures and in the Profiles.
The KNX Specifications are organised according hardware, software, specification and testing. Now, everything you need to implement Layer x is comfortably together in one document, and the tester also has all things nicely together. Meanwhile, and one of the reasons why there is no index, there are powerful search functions that you can use, as suggested.
And indeed, please do not reduce the protocol just to a collection of Frame formats. Check how the services are used and consult the Management Procedures.
Der KNX Standard ist nix fuer schwache Nerven. Die Informationen sind gut versteckt und kreuz und quer verteilt.
Ja, in der Tat. Einige Informationen sind an verschiedenen Stellen enthalten oder ergänzen sich gegenseitig.
Das ist der Grund, warum ich bei mir in jeder Klasse und jedem Datentyp eine Doxygen Referenz auf die Spezifikation hinterlassen habe. Dann kann ich später noch mal nachschlagen, wo ich das her habe. Bei mir steht dann z.B. "@ingroup KNX_03_08_02_07_06_01", was so viel heißt, wie KNX Part 3/8/2 Kapitel 7.6.1 Search Request Frame. :-)
Cool, hab gleich mal ein "apt install pdfgrep" laufen lassen. Danke für den Tipp. Kannte ich noch nicht :-)
Da sind in der Tat noch ein paar Teile, die ich mir noch nicht im Detail angesehen habe: 3/5/2 Management Procedures und 3/5/3 Configuration Procedures.
Ja, ich denke schon. Hab schon einige Libraries veröffentlicht. Meistens unter Dual License: GPLv3 und Commercial. So bringt mir das Hobby immer einen kleinen Nebenverdienst ein ;-)
Nur habe ich bisher keine Applikationen veröffentlicht. Da fehlt mir noch eine geeignete Lizenz für OpenETS, die eine kommerzielle Nutzung kostenpflichtig macht, und ansonsten kostenfreie Nutzung erlaubt. Sowas wie Creative Common CC BY-NC-ND nur eben für Software.
(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.
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 .
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.
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.
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)
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.
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.
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.
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.
[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.
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?
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.
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 .
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.
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.
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:
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?
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.
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.
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?
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...
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Einen Kommentar schreiben: