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!
Ü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?
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.
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.