-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
189 lines (134 loc) · 7.22 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
Bedeutung rote LED
==================
1x Blinken: CAN-Fehler - Nachricht zu kurz
2x Blinken: CAN-Fehler - Funktion nicht definiert
3x Blinken: CAN-Fehler - Warteschlange voll
4x Blinken: UART-Fehler
CAN-Adressen
============
Insgesamt: 11 Bits lang
Einzel: Letzten 4-Bit der Nachrichten-ID
Gruppe: Bit 5 der Nachrichten-ID auf 1 (16). Die letzten 4 Bit sind irrelevant
Art: Die übrigen 6 Bits kodieren die Art der Nachricht
1 1
1 0 9 8 7 6 5 4 3 2 1
A A A A A A G E E E E
CAN-Nachrichten-IDs
===================
Bits Bedeutung Sender (Board/Controller)
000000 Keepalive Nachricht (B)
000001 Boot-Up Nachricht (B)
000010 Keepalive Nachricht anfordern (C)
000100 Fehler (B)
001000 Antw. Relais unbegrenzt setzen (B)
001001 Relais unbegrenzt setzen (C)
001010 Antw. Relais begrenzt setzen (B)
001011 Relais begrenzt setzen (C)
010000 Antw. Gesamtpunktestand setzen (B)
010001 Gesamtpunktestand setzen (C)
111111 Neuer Wurf (B)
Definition der Nachrichten
==========================
000000 - Keepalive Nachricht
Bedeutung: Nachricht vom Board an den Controller um zu zeigen, dass
das Board normal funktioniert und empfangsbereit ist. Die
Nachricht wird automatisch circa alle fünf Minuten an den
Controller gesendet, kann aber auch explizit angefordert werden.
Daten: [0] Aktuelle Versionsnummer der Firmware
[1] Stellung der Relais 9-16
[2] Stellung der Relais 1-8
000001 - Boot-Up Nachricht
Bedeutung: Nachricht vom Board an den Controller um zu zeigen, dass
das Board soeben hochgefahren ist. Die Nachricht wird einmalig
beim Start des Boards verschickt und enthält alle Daten einer
Keepalive Nachricht.
Daten: [0] Aktuelle Versionsnummer der Firmware
[1] Stellung der Relais 9-16
[2] Stellung der Relais 1-8
000010 - Keepalive Nachricht anfordern
Bedeutung: Anforderung einer Keepalive Nachricht durch den Controller. Das
Board antwortet mit einer Keepalive Nachricht.
Daten: [0] Byte mit beliebigen Inhalt (wird ignoriert)
000100 - Fehler
Bedeutung: Wird vom Board an den Controller geschickt wenn ein Fehler
aufgetreten ist.
Daten: [0] Gibt die Art des Fehlers an:
0b00000000 UART-Fehler
0b00000001 CAN-Fehler
0b00000010 Funktion nicht bekannt
0b00000011 Zu wenig Parameter übergeben
0b00000100 Relais Warteschlange voll
[1] Bei "Funktion nicht bekannt" ID der Nachricht (Bit 9-16)
[2] Bei "Funktion nicht bekannt" ID der Nachricht (Bit 1-8)
001000 - Antw. Relais unbegrenzt setzen
Bedeutung: Antwort des Boards an den Controller. Die Nachricht enthält
die aktuelle Stellung der Relais 1-16 sowie eine Maske, die
die veränderten Relais markiert.
Daten: [0] Stellung der Relais 9-16
[1] Stellung der Relais 1-8
[2] Maske 9-16
[3] Maske 1-8
001001 - Relais unbegrenzt setzen
Bedeutung: Setzt die Relais entsprechend der 2 ersten Bytes. Die Maske in
den Bytes 2+3 beschreibt dabei, welches Relais gesetzt werden
sollen. Eine 1 bedeutet, dass das Relais berücksichtigt werden
soll, eine 0 dass der alte Zustand beibehalten werden soll.
Beispiel: 0b00000000 0b00110010 0b00000000 0b00001110
-> Relais 2 wird eingeschaltet
Relais 3+4 werden ausgeschaltet
Die restlichen Relais werden ignoriert
Daten: [0] Stellung der Relais 9-16
[1] Stellung der Relais 1-8
[2] Maske 9-16
[3] Maske 1-8
001010 - Antw. Relais begrenzt setzen
Bedeutung: Antwort des Boards an den Controller welche Relais zur Zeit
einem Timer unterliegen. Die Nachricht enthält den aktuellen
Stand der Relais 1-16, sowie in einer Maske kodiert die Relais,
für die ein Timer läuft.
Daten: [0] Stellung der Relais 9-16
[1] Stellung der Relais 1-8
[2] Maske 9-16
[3] Maske 1-8
001011 - Relais begrenzt setzen
Bedeutung: Setzt die Relais entsprechend der 2 ersten Bytes (1-16) eine
angegebene Zeit lang auf den übergebenen Wert und stellt nach
Ablauf der Zeit den ursprünglichen Zustand wieder her. Eine
Maske definiert, welche Relais zu berücksichtigen sind (s.o.).
Daten: [0] Stellung der Relais 9-16
[1] Stellung der Relais 1-8
[2] Maske 9-16
[3] Maske 1-8
[4] Bit 25-32 eines 32-Bit Integers für die Zeit
[5] Bit 17-24 eines 32-Bit Integers für die Zeit
[6] Bit 9-16 eines 32-Bit Integers für die Zeit
[7] Bit 1- 8 eines 32-Bit Integers für die Zeit
010000 - Antw. Gesamtpunktestand setzen
Bedeutung: Antwort des Boards an den Controller mit dem eingestellten
Gesamtpunktestand.
Daten: [0] Bit 9-16 eines 16-Bit Integers für den Gesamtpunktestand
[1] Bit 1- 8 eines 16-Bit Integers für den Gesamtpunktestand
010001 - Gesamtpunktestand setzen
Bedeutung: Setzt den Gesamtpunktestand (weißer Kasten bei der Kegelbahn)
auf den angegebenen Wert. Da maximal 9999 Angezeigt werden kann,
wird über übergebene Integer mod 10000 genommen und das Ergebnis
angezeigt. Hierfür werden die (im Quellcode fest programmierten)
Relais verwendet. (Standard: Relais 3-7)
Daten: [0] Bit 9-16 eines 16-Bit Integers für den Gesamtpunktestand
[1] Bit 1- 8 eines 16-Bit Integers für den Gesamtpunktestand
111111 - Neuer Wurf
Bedeutung: Da die wichtigste zu verarbeitende Information ein neuer Wurf
ist, hat dieses Ereignis die höchste ID zugewiesen bekommen. Das
Board übertragt den String des Druckers (welches über UART
eingelesen wird) leicht verändert an den Controller. Um Platz
bei der Übertragung zu sparen, werden das Steuerzeichen '\x19',
alle Leerzeichen, sowie der Buchstabe 'S' aus dem ursprünglichen
String entfernt. Übrig bleiben vier Zahlen (#Wurf, Holz, #Punkte1,
#Punkte2).
Daten: [0] Bit 9-16 eines 16-Bit Integers für den aktuellen Wurf
[1] Bit 1- 8 eines 16-Bit Integers für den aktuellen Wurf
[2] Bit 1- 8 eines 8-Bit Integers für die aktuellen Holz
[3] Bit 9-16 eines 16-Bit Integers für den 1. Punktestand
[4] Bit 1- 8 eines 16-Bit Integers für den 1. Punktestand
[5] Bit 9-16 eines 16-Bit Integers für den 2. Punktestand
[6] Bit 1- 8 eines 16-Bit Integers für den 2. Punktestand