Wiki source code of ARM_sblib_Verwendung_LPC11xx

Last modified by Olli S. on 2017/04/28 21:52

Hide last authors
Olli S. 9.1 1 In diesem Dokument soll beschrieben werden, wie man die Daten für ein erstes eigenes (nachgebautes) KNX Gerät zusammenträgt und in ein Programm für den sogenannten „ARM“ Controller auf Basis des LPC1115 bzw. 1114 einträgt.
Olli S. 5.1 2 Mit diesen Daten, der sblib, der passenden Produktdatenbank und der ETS Software ist es dann möglich dem Gerät die physikalische Adresse und das Applikationsprogramm zu übermitteln.
3
4
5 Erster Schritt: ein Gerät bestimmen, welches nachgebaut werden soll. Beispielsweise nehmen wir hier mal den „Glas Raumtemperaturregler“ (SCN-RT1GS.01) von MDT. Für dieses Gerät kann die Produktdatenbank in Form einer *.knxprod Datei herunter geladen werden. Diese Datei lässt sich z.B. mit dem Tool 7-ZIP öffnen und es erscheint folgende Ansicht:
6
Olli S. 9.2 7 (((
8 [[image:knxprod_hauptverzeichnis.png||height="113" width="758"]]
9 )))
Olli S. 5.1 10
Olli S. 9.2 11 (((
12 Abbildung 1: Dateistruktur der *.knxprod Datei
Olli S. 18.1 13
14
Olli S. 9.2 15 )))
Olli S. 9.1 16
17 Hier ist der Ordner „M-0083“ auszuwählen und es wird folgender Inhalt angezeigt:
18
Olli S. 9.2 19 (((
20 [[image:knxprod_unterverzeichnis.png||height="112" width="755"]]
21 )))
Olli S. 9.1 22
Olli S. 9.2 23 (((
24 Abbildung 2: Dateistruktur des Ordners „M-0083“
Olli S. 18.1 25
26
Olli S. 9.2 27 )))
Olli S. 9.1 28
Olli S. 25.3 29 Die Datei „M-0083_A-0047-12-AADB.xml“ lässt sich gut mit z.B. dem Notepad++ öffnen.
Olli S. 9.1 30
31 Nun sollte man sich klar machen, welche Daten überhaupt für ein KNX Gerät zur Identifizierung benötigt werden:
32 Hersteller Code (manufacturer)
33 Gerätetyp (deviceType)
34 Version
35 Hardware Version
36 Typ des Busankopplers
37
Olli S. 25.3 38 Für den Start kann man sich am besten ein bestehendes Programm aus dem Repository von selfbus laden und dieses verändern. Um eine lauffähige Umgebung zu bekommen sollte dieses Tutorial durch gearbeitet werden: [[Eclipse_ARM>>doc:Eclipse_ARM]]
Olli S. 9.1 39 Anschließend kopiert man sich ein Projekt in LPCXpresso und kann loslegen:
40 In der Datei „app_main.cpp“ findet sich die Routine „void setup()“ in der sich wiederrum der Aufruf der Routine „bcu.begin“ befindet.
41
Olli S. 9.2 42 (((
43 [[image:app_main_cpp.png||height="300" width="677"]]
44 )))
Olli S. 9.1 45
46 (((
Olli S. 9.2 47 (((
48 Abbildung 3: Setup eines KNX Gerätes
Olli S. 18.1 49
50
Olli S. 9.2 51 )))
Olli S. 9.1 52 )))
53
54 (((
55 Diese hat die Übergabeparameter
56 void BcuBase::begin(int manufacturer, int deviceType, int version)
57
Olli S. 25.3 58 Der Hersteller Code (manufacturer), der Gerätetyp (deviceType) und die Version ist aus dem Dateinamen der bereits erwähnten Datei „M-0083_A-0047-12-AADB.xml“ zu entnehmen.
Olli S. 9.1 59 In diesem Fall ist
60 0x0083 der Hersteller Code (manufacturer),
61 0x0047 der Gerätetyp (deviceType) und
62 0x12 die Version
63
64 Analog dazu sind die entsprechenden Stellen für andere Geräte auszuwerten.
65
Olli S. 25.3 66 Die Hardware Version, die wie in Abbildung 3 abgebildet ist, in einem Array abgelegt und anschließend in das userEeprom kopiert wird, lässt sich aus der Datei „M-0083_A-0047-12-AADB.xml“ entnehmen. Sie ist unter dem Parameter „LdCtrlCompareProp“ zu finden. In der Datei ist in diesem Fall der Eintrag
Olli S. 9.1 67 <LdCtrlCompareProp ObjIdx="0" PropId="78" InlineData="00000000004800000000" />
68 zu erkennen. Dieser wird folgerndermaßen ausgewertet:
69 Die Angabe ist Hexadezimal und 6 Byte lang. Angefangen wird hier bei der linken Stelle (MSB) und dann entsprechend 6 Bytes hinunter. Diese Daten werden dann in das Array übertragen.
70
Olli S. 25.3 71 Für die Wahl des korrekten Busankopplers, für die die sblib kompiliert werden muss und an den auch die Parameter des Projektes in LPCXpresso angepasst werden müssen, ist der Parameter „MaskVersion“ wichtig. In der Datei „M-0083_A-0047-12-AADB.xml“ ist der Eintrag MaskVersion="MV-0701" zu finden.
Olli S. 9.1 72 Ist dort *70*, so wie hier zu finden, handelt es sich um ein BIM112 Busankoppler.
73 *01* steht für eine BCU1, *02* für eine BCU2.
74 Die Parameter in LPCXpresso für das neu erzeugte Projekt müssen an folgenden Stellen angepasst werden:
75
Olli S. 13.2 76 (((
77 [[image:Preprocessor_BCU_settings.png||height="816" width="799"]]
78 )))
79 )))
80
81 (((
82 (((
Olli S. 25.3 83 (% style="font-family:~"Calibri~",~"sans-serif~"; font-size:11.0pt; line-height:115%; mso-ansi-language:DE; mso-ascii-theme-font:minor-latin; mso-bidi-font-family:~"Times New Roman~"; mso-bidi-language:AR-SA; mso-bidi-theme-font:minor-bidi; mso-fareast-font-family:Calibri; mso-fareast-language:EN-US; mso-fareast-theme-font:minor-latin; mso-hansi-theme-font:minor-latin" %)Abbildung 4: Projekteinstellungen C++ Compiler für den Busankoppler
Olli S. 13.2 84 )))
85
86 (((
Olli S. 9.1 87
88 )))
89
90 (((
Olli S. 13.2 91 BCU1 -> BCU_TYPE=10
92 BCU2 -> BCU_TYPE=20
93 BIM112 -> BIM112
94
Olli S. 18.1 95
Olli S. 13.2 96 (((
97 [[image:Libraries_BCU_settings.png||height="813" width="799"]]
98 )))
99
100 (((
101 Abbildung 5: Projekteinstellungen C++ Linker für den Busankoppler
102
103 BCU1 -> "${workspace_loc:/sblib/Debug_BCU1}"
104 BCU2 -> "${workspace_loc:/sblib/Debug_BCU2}"
105 BIM112 -> "${workspace_loc:/sblib/Debug_BIM112}"
106
Olli S. 18.1 107
Olli S. 13.2 108 Wenn nun noch die sblib in der korrekten Busankoppler Version kompiliert wurde, sollte ich das Projekt übersetzen lassen und das Gerät sich mittels ETS mit einer physikalischen Adresse und dem Applikationsprogramm versehen lassen.
109 Natürlich passiert (wenn überhaupt etwas passiert) nicht das richtige, aber man hat der ETS glaubhaft gemacht, dass ein entsprechendes Gerät am Bus angeschlossen ist.
110
111 Nun sollte auch das Programm im Gerät auf die entsprechenden Daten zugreifen können, die mittels ETS in das Gerät geschrieben wurden. Diese Daten werden im sogenannten userEeprom abgelegt und können dort ausgelesen werden. Nun muss man für das Auslesen eine bestimmte Adresse angeben, an der sich die gewünschten Daten verbergen. Wie kommt man also an die Informationen, an welcher Adresse sich welche Daten befinden?
112
Olli S. 25.3 113 Dafür nimmt man sich wieder die Datei „M-0083_A-0047-12-AADB.xml“ vor und hält nach einer Sektion Ausschau, die die Anfangsparameter <Parameter… und in der nächsten Zeile <Memory… hat. In diesem Fall ist das ab Zeile 1309:
Olli S. 13.2 114
Olli S. 17.1 115 (((
116 [[image:knxprod_xml_memory.png||height="322" width="1639"]]
Olli S. 9.1 117 )))
Olli S. 17.1 118
Olli S. 25.3 119 (% style="font-family:~"Calibri~",~"sans-serif~"; font-size:11.0pt; line-height:115%; mso-ansi-language:DE; mso-ascii-theme-font:minor-latin; mso-bidi-font-family:~"Times New Roman~"; mso-bidi-language:AR-SA; mso-bidi-theme-font:minor-bidi; mso-fareast-font-family:Calibri; mso-fareast-language:EN-US; mso-fareast-theme-font:minor-latin; mso-hansi-theme-font:minor-latin" %)Abbildung 6:Ausschnitt der Applikationsprogramm-Parameter
Olli S. 17.1 120
Olli S. 18.1 121
Olli S. 17.1 122 (((
123 Hier sind zu jedem Parameter, der in der ETS eingestellt und über den Bus übertragen wird, die Grundadresse und der Offset zu finden. Zusätzlich hat man durch die Namen einen guten Ansatz, welche Funktion durch den entsprechenden Parameter beeinflusst wird.
124
125 Für ein Beispiel nehmen wir den Parameter aus Zeile 1324: ZyklSenden
126
127 Dieser Parameter ist in der ETS unter der Bezeichnung „Messwert zyklisch senden“ zu finden:
128
129 (((
130 [[image:ets_parameter.png||height="348" width="770"]]
Olli S. 13.2 131 )))
Olli S. 17.1 132
133 (((
134 Abbildung 7: Ansicht in der ETS der Applikationsprogramm-Parameter
135
Olli S. 18.1 136
Olli S. 17.1 137 Nun gilt es die Adresse dieses Parameters in dem userEeprom zu finden. Dazu wird der Parameter aus Zeile 1325 „CodeSegment=“M-0083_A-0047-12-AADB_AS-4400“ herangezogen. Die 0x4400 in diesem Parameter sind die Grundadresse aller Parameter. Dazu kommt jeweils der Offset, in diesem Fall Offset=“361“. Dieser Parameter ist allerdings in dezimaler Schreibweise angegeben! Somit sind 361 dez = 0x169, welche sich für die Gesamtadresse zu den 0x4400 hinzuaddieren.
138
139 Für das Auslesen benötigt man allerdings noch die Information, wie viele Bytes man ab dieser Startadresse lesen möchte.
Olli S. 25.3 140 Dazu sucht man in der Datei „M-0083_A-0047-12-AADB.xml“ die Sektion
Olli S. 17.1 141 <ParameterType Id="M-0083_A-0047-12-AADB_PT-TempCycle" Name="TempCycle">
142 Die Id wird aus der Zeile 1324 unter „ParameterType“ herausgenommen und entsprechend danach gesucht.
143
144 (((
145 [[image:knxprod_xml_size.png||height="303" width="1041"]]
Olli S. 13.2 146 )))
Olli S. 17.1 147
Olli S. 25.3 148 (% style="font-family:~"Calibri~",~"sans-serif~"; font-size:11.0pt; line-height:115%; mso-ansi-language:DE; mso-ascii-theme-font:minor-latin; mso-bidi-font-family:~"Times New Roman~"; mso-bidi-language:AR-SA; mso-bidi-theme-font:minor-bidi; mso-fareast-font-family:Calibri; mso-fareast-language:EN-US; mso-fareast-theme-font:minor-latin; mso-hansi-theme-font:minor-latin" %)Abbildung 8: Datentypgröße eines Applikationsprogramm-Parameters
Olli S. 17.1 149
Olli S. 18.1 150
Olli S. 25.1 151 In dieser Sektion ist der Parameter „SizeInBit=8“ (Zeile 222) zu finden.
Olli S. 17.1 152 Also kann der übertragene und in userEeprom abgespeicherte Wert mittels der Funktion userEeprom.getUInt8(0x4400 + 361);
153 erfolgen.
Olli S. 21.2 154
Olli S. 24.1 155
Olli S. 21.2 156 (((
Olli S. 23.1 157 (((
Olli S. 21.2 158 (((
159 Es folgt in Zukunft noch ein Überblick, wie mit die Kommunikationsobjekte unter Verwendung der sblib behandelt werden.
Olli S. 17.1 160 )))
161 )))
162 )))
163 )))
Olli S. 18.1 164 )))
Olli S. 21.2 165 )))
166 )))
167 )))