Forum: Mikrocontroller und Digitale Elektronik Datenübertragung von Bedienteil zu Steuerung über CAN


von Übertrager (Gast)


Lesenswert?

Hallo,

es geht darum, dass ein Bedienteil mit insgesamt acht Tasten per CAN Bus 
an eine Maschinensteuerung angebunden ist. Diese Tasten sollen jeweils 
eine bestimmte Funktion an der Steuerung bewirken. Die Frage, die mich 
beschäftigt, ist wie die Daten am besten aufbereitet werden. Beim 
Tastendruck eine CAN-Message senden, beim Loslassen wieder eine 
CAN-Message? Oder gibt es bessere Methoden? Wie kann sichergestellt 
werden, dass keine Message "verlorengeht", d.h. aus welchem Grund auch 
immer, nicht gesendet oder vom Empfänger verarbeitet wird? In welchem 
Format werden solche Daten eigentlich üblicherweise gesendet, ich meine, 
wird eine Message über den gesamten Zustand des Bedienteils gesendet 
oder ist es besser jeder Aktion am Bedienteil eine eigene Message 
spendieren? Wenn das letztere zutrifft, fährt man damit gut, jeder Taste 
eine eigene ID für die Message zu vergeben oder reicht es, wenn man für 
das Bedienteil eine ID vergibt und die Tastenzuordnung innerhalb Message 
verpackt?
Danke für jeden Hinweis!

von Rolf M. (rmagnus)


Lesenswert?

Übertrager schrieb:
> Hallo,
>
> es geht darum, dass ein Bedienteil mit insgesamt acht Tasten per CAN Bus
> an eine Maschinensteuerung angebunden ist. Diese Tasten sollen jeweils
> eine bestimmte Funktion an der Steuerung bewirken. Die Frage, die mich
> beschäftigt, ist wie die Daten am besten aufbereitet werden. Beim
> Tastendruck eine CAN-Message senden, beim Loslassen wieder eine
> CAN-Message? Oder gibt es bessere Methoden?

Du könntest es so machen, wie es im Auto häufig gemacht wird: Regelmäßig 
den aktuellen Tastenstatus senden, z.B. alle 500 ms, und zusätzlich beim 
Drücken und Loslassen jeweils eine Botschaft.
Welche Zykluszeit du da ansetzt, hängt natürlich davon ab, welche 
maximale Verzögerung bei der Reaktion noch akzeptabel für deinen 
Anwendungsfall ist - für den Fall dass mal eine Botschaft ausfällt.

> Wie kann sichergestellt werden, dass keine Message "verlorengeht", d.h.
> aus welchem Grund auch immer, nicht gesendet oder vom Empfänger
> verarbeitet wird? In welchem Format werden solche Daten eigentlich
> üblicherweise gesendet, ich meine, wird eine Message über den gesamten
> Zustand des Bedienteils gesendet oder ist es besser jeder Aktion am
> Bedienteil eine eigene Message spendieren?

Ich würde eine Botschaft definieren, die den aktuellen Zustand aller 
Tasten enthält und diese wie oben geschrieben zyklisch senden und 
zusätzlich bei Änderung des Zustandes einer der Tasten.

> Wenn das letztere zutrifft,  fährt man damit gut, jeder Taste eine eigene
> ID für die Message zu  vergeben oder reicht es, wenn man für das
> Bedienteil eine ID vergibt und die Tastenzuordnung innerhalb Message
> verpackt?

Eine Botschaft kann bis zu 64 Bits enthalten. Selbst die kürzeste 
Botschaft, die noch Daten enthält, hat 8 Bits. Warum dann nur den 
Zustand einer einzelnen Taste übertragen statt von allen 8 auf einmal?

von Übertrager (Gast)


Lesenswert?

Rolf M. schrieb:
> Warum dann nur den
> Zustand einer einzelnen Taste übertragen statt von allen 8 auf einmal?

Das ist ja genau mein Anliegen. ich arbeite mich noch in diese Thematik 
ein, daher fehlt es mir noch ein bisschen an praktischer Erfahrung. Ich 
würde natürlich gerne ein Konstrukt verwenden, welches ich später für 
andere Aufgaben wiederverwenden kann. Da muss ich natürlich schon gut 
überlegen, an welcher Stelle welche information hinterlegt wird. Denn 
die Zuordnung der Tasten  würde ich gerne beibehalten, auch wenn in 
einer eventuellen späteren Variante auch andere Funktionen als nur 
Tasten zur Anwendung kommen. Traffic auf dem Bus spart man in der von 
Dir beschriebenen Variante natürlich allemal.

von Übertrager (Gast)


Lesenswert?

Rolf M. schrieb:
> Du könntest es so machen, wie es im Auto häufig gemacht wird:

Wäre auch mal interessant! Welche Fachliteratur zu diesem Thema ist 
empfehlenswert? Bzw. gibt es einschlägige Internetseiten, welche das 
Thema CAN Bus im Automobil auch von der Softwareseite her behandeln?

von Jonas (Gast)


Lesenswert?

Wir machen es so, dass die Nachricht des Handbedienteils 8 Bytes mit dem 
aktuellen Zustand aller Tasten enthält.
Keine Taste gedrückt -> 00 00 00 00 00 00 00 00.

Die "Zentrale" schickt zyklisch 3x die Sekunde Sync-Kommandos (80h) und 
das Handbedienteil sendet darauf seinen Status.
Wenn das Handbedienteil 5x hintereinander nicht reagiert, wird ein 
Fehler gemeldet.

Bei Tastendruck wird zusätzlich eine Message gesendet.

Gruß Jonas

von Übertrager (Gast)


Lesenswert?

Rolf M. schrieb:
> Regelmäßig
> den aktuellen Tastenstatus senden, z.B. alle 500 ms, und zusätzlich beim
> Drücken und Loslassen jeweils eine Botschaft.

Jonas schrieb:
> Wir machen es so, dass die Nachricht des Handbedienteils 8 Bytes mit dem
> aktuellen Zustand aller Tasten enthält.
> Keine Taste gedrückt -> 00 00 00 00 00 00 00 00

Dieser Ansatz gefällt mir sehr gut. Allerdings reichen bei mir zwei 
Bytes aus, sodass jede Taste ein Bit davon bekommt. Ich habe es 
ausprobiert und es läuft auf Anhieb. Danke dafür!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.