PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Telegramm-Profi gesucht



Magic B.
28.11.04, 10:47
Hallo!

Ich spiele jetzt schon seit 1,5 Jahren das Adventure "EIB". Momentan stecke ich allerdings ein bisschen fest.

Ich habe mir mit VB.NET eine Anbindung an den Bus (FT1.2 über BCU2.0) zusammengebastelt. Damit möchte ich später mal visualisieren und steuern. Die Arbeit mit Gruppenadressen (Mitlesen, Lesen und Schreiben) funktioniert auch zufriedenstellend. Die Beispiele und Informationen von Matthias Dehof haben mir da sehr weitergeholfen.

=== ab jetzt sind viele Dinge Interpretationen von mir und nicht unbedingt Wahrheiten - ich bin Amateur ===

Mein nächster Punkt auf der Liste sind die EIB-Objekte. Ich habe mir vorgestellt die Objekte der einzelnen Geräte auch mal direkt auszulesen (Werte, Datentypen, etc.).

Frei zugängliche Informationsquellen für diese (Forschungs-)Arbeit sind übrigens:

- EIBA EIB Specifications Volume 3 (http://eiba-software.com/eibacom/Volume3.zip)
und http://www.knx-developer.de/bcu2_help_1/help_java.htm

Ich sehe zwei Ansätze:
- A_Memory_Read one-to-one connection oriented
- A_PropertyValue_Read one-to-one connectionless

Ich habe mich für letzteres entschieden:

Mein Diagramm sieht dann folgendermaßen aus:

FT1.2 Header (Längenbytes mit Wert=14) = 68 0E 0E 68

FT1.2 function code = Send_UDAT = 53 oder = 73 je nach FrameCountBit

Auf Data Link Layer = L_Data.req = 11

Im Controlfield die Priorität auf normal = 0C

Quell-Adresse leer (wird nicht benötigt) = 00 00

Zieladresse 1.1.10 = 11 0A

NCPI Adresstype Physical adress, Routing Counter auf 6, Länge der Nachricht 5 => 0 110 0101 = 65

TPCI inkl APCI: Numbered Data, Sequence Number = 0, A_PropertyValue_Read => 01 0000 1111010101 = 43 D5

und jetzt kommts: A_PropertyValue_Read möchte gerne ein paar Daten (User Layer), nämlich:
- object_id - dies habe ich als Objektnummer interpretiert - die ersten vier (0-3) sind System EIB Objekte => ab 4 sind es User EIB Objekte, das müsste heißen Objekt_id = 4 ist das vom Gerät bereitgestellte Objekt Nr. 0, 5 ist 1 und so weiter => Objekt Nr 1 = 05
- Property_id - keine Ahnung, ich nehme an Wert, Datentyp, etc. - ich probiers mal mit der 1 => 01
- No of elements und Start_index - sollte für sich sprechen - ich probier 1 Element ab Stelle 1 und index 1 => 10 01

noch schnell die Checksumme dazu und das Endekennzeichen.

Zusammen ergibt dies: 68 0E 0E 68 73 11 0C 00 00 11 0A 65 43 D5 05 01 10 01 3F 16
Es kommt auch sofort ein confirm, d.h. das Telegramm ist im Aufbau korrekt. Es kommt aber kein Indicate.

Lange Vorrede. Ich hoffe irgendjemand im Forum kann mir da weiterhelfen.

Gruß Oliver

Klaus Gütter
28.11.04, 17:23
Hallo,


object_id - dies habe ich als Objektnummer interpretiert

nein, das ist nicht richtig. Die Objekte der Property-Services haben mit den Gruppen-Kommunikationsobjekten gar nichts zu tun. Es gibt überhaupt nur wenige Geräte, mit denen man über A_PropertyValue_Read sinnvoll kommunizieren kann.

Gruß, Klaus Gütter

Magic B.
28.11.04, 17:50
Hallo Klaus,

danke für die Info.

Wie liest man dann den Wert (und auch weiteres) der Aktorobjekte direkt (ohne Umweg Gruppenadresse) aus?

Gruß Oliver

Klaus Gütter
28.11.04, 20:26
Hallo Oliver,

also zunächst mal ist "via Gruppenadresse" nicht der Umweg sondern der einzig offizielle Weg, an den Wert zu kommen. Und man braucht schon gute Gründe, daran vorbeizugehen.

Wenn man das interne Speicher-Layout kennt, kann man natürlich auch einen MemoryRead machen - bei den meisten BCU1-Geräten (eigentlich allen ohne externen Prozessor) steht die Speicheradresse des Objektwerts in der Objekttabelle.
Einen geräteunabhängigen Weg gibt es aber nicht.

Gruß, Klaus