mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe zu CAN


Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab folgendes Problem für die Erstellung eines eignen Protokolls.
Ich habe ein Human Machine Interface Steuergerät das ein Display und 
eine Tastatur enthält sowie meherer Applikations Steuergeräte. Wenn 
jetzt zwei Applikations Steuergeräte gleichzeitig CAN Botschaften an das 
Human Machine Interface Steuergerät senden, dann geht die CAN Botschaft 
verloren die eine niedrigere Priorität hat. Wie kann ich dies in einem 
Human Machine Interface Protokoll lösen, das auch die niedrigere priore 
CAN Botschaft noch verarbeitet werden kann?

Appl-SG_1 CAN-ID: 50hex
Appl-SG_2 CAN-ID: 51hex <-- diese CAN Botascht hat eine niedrige 
Prorität

Autor: adfix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Botschaft zyklisch senden.

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo adfix, danke für deine Antwort.
Was meinst du mit Nachricht zyklisch senden?

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weisst du wie man so ein Protokoll aufziehen bzw. grafisch (Skizze) 
darstellen kann?

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Blödsinn. Nix geht verloren. Die Message mit der niedrigen Prio wird 
später gesendet. Das macht der CAN-Controller föllig selbstständig.

Volker

Autor: Michael Roek (mexman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe ein Human Machine Interface Steuergerät das ein Display und
> eine Tastatur enthält sowie meherer Applikations Steuergeräte. Wenn
> jetzt zwei Applikations Steuergeräte gleichzeitig CAN Botschaften an das
> Human Machine Interface Steuergerät senden, dann geht die CAN Botschaft
> verloren die eine niedrigere Priorität hat. Wie kann ich dies in einem
> Human Machine Interface Protokoll lösen, das auch die niedrigere priore
> CAN Botschaft noch verarbeitet werden kann?


Hallo Ingo,

ein proprietaeres CAN - Protokoll aufzusetzen ist schon eine Aufgabe!
Genau deshalb sind die CAN Layer eben definiert wie sie definiert sind.

WAS and Deiner Kommunikation ist den neigentlich "CAN"?
Normalerweise ist diese Arbitrierung genau in der CAN Spezification 
definiert.

Wenn Du aber selber was bastelst, musst Du einfach Deinen Sender 
mirhoeren lassen und den Pegel auf dem Physical Layer mit dem 
Sendesignal vergleichen.
Der erste, der eine Abweichung feststellt, wartet bis die naechste 
Botschaft vorbei ist und probierts dann eben nochmal.

Und wie VOlker sagt: Das muesste Dein System selber machen...ausser Du 
baust ein CAN Netzwerk mit PIC16F88 auf ;-)



Gruss

Michael

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte quasi ein eigenes Protokoll entwerfen das auf Layer 3 sitzt. 
CAN deckt ja Layer 2 und 1 ab.

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Volker,

was du geschrieben hast stimmt aber so nicht.

>>Blödsinn. Nix geht verloren. Die Message mit der niedrigen Prio wird
>>später gesendet. Das macht der CAN-Controller föllig selbstständig.

Wie soll der Controller automatisch nochmal die CAN Botschaft senden. 
Das muss schon ein übergeordnetes Protokoll (Layer 3) tun.

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin davon ausgegegangen das der TE die höheren Schichten "designen" 
will.
Als ala CANopen, DeviceNez, J1939 etc.
Sich alo nicht die Schichten 0 und 1 vornehmen wollte.

Aber vielleicht könnte Ingo ja genau erklären was er erstellt(ISO 
7-Schichtenmodell,Hard- und/oder Sofware)?

Volker

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Human Machine Interface Protokoll auf der Basis von CAN entwerfen.
-quasi gleichzeitige Kommunikation der Appl-SG mit dem Human Machine 
Interface-SG
-Die Zuordnung der CAN-Botschaften zum jeweiligen Appl-SG sicherstellen
-Der Zugriff auf das Human Machine Interface-Sg soll geregelt werden

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann würde ich mal sagen, dass das ganze erst mal gar nichts mit einem 
HID zu tun hat. Wenn die Messages verloren gehen können, musst du daran 
arbeiten das zu unterbinden.
Und erst da drauf wird dann die HID-Schicht gesetzt.

D.h. die Schicht die du im Begriff bist zu entwerfen, kann sich schon 
auf einen Unterbau stützen, bei dem Messages auch wirklich ankommen und 
nichts verloren geht.

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ingo,
priorisieren heißt nicht wegschmeissen.
Die zertifiezirten CAN-Controller änthalten auch Funktionen höherer 
Schichten. (Ich glaube auch Funcktionen aus Schicht 5 waren dabei, finde 
jetzt aber keine Quelle).

Selbst fehlerhafte Messages werden erkannt und müssen vom Controller 
eine bestimmte Anahl(je nach Fehler) wiederholt werden.

Siehe Seite 5.
http://www.can-cia.org/fileadmin/cia/specification...

ciao Volker

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gehe aber davon aus das der CAN nur die Schichten 2 & 1 abdeckt.

Autor: Sven H. (dsb_sven)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ingo schrieb:
>>>Blödsinn. Nix geht verloren. Die Message mit der niedrigen Prio wird
>>>später gesendet. Das macht der CAN-Controller föllig selbstständig.
>
> Wie soll der Controller automatisch nochmal die CAN Botschaft senden.
> Das muss schon ein übergeordnetes Protokoll (Layer 3) tun.

Wenn ein CAN-Controller während des Sendens den Bus verliert, hört er 
auf zu senden und beginnt dann wieder, wenn der Bus wieder frei ist. 
Vollkommen selbstständig.

Es sei denn, der CAN-Controller hat sowas wie einen "One Shot Mode" (der 
MCP2515 hat sowas). Dann werden die Nachrichten grundsätzlich nur ein 
mal gesendet. Auch wenn sie unterbrochen werden.

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ingo,
tut er aber nicht. Er enthält auch die Sicherungsschicht.
Es sei den Du verwendest einen selbst gebauten CAN-Controller.

@Sven
dieses Feuture haben neuerdings viele CAN-Controller. Den "One Shot 
Mode" sollte mann aber nur für Testzwecke oder besondere Fälle (selbst 
konfigurierende Busse) verwenden, da er ein erheblichen Einschnitt in 
die Sicherheit des CAN-Busses darstellt. Alle hoeheren Protokolle 
verlassen sich auf die Sicherungsschicht des CAN-Controllers.

ciao Volker

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Unterstützung.

Mich verwirrt das ganze.

>Wenn ein CAN-Controller während des Sendens den Bus verliert, hört er
>auf zu senden und beginnt dann wieder, wenn der Bus wieder frei ist.
>Vollkommen selbstständig.

Wird dann gleich wieder automatisch die gleiche Nachricht wieder auf den 
BUS gesendet? Auf welcher Schicht ist dies angesidelt?

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ingo,
Das CAN-Protokoll ist keine saubere 1:1-Implementierung des 
7-Schichtenmodels. Es wurden Schichten weggelassen (3. Network Layer), 
bei anderen wurden nur Teile der Schicht implementiert (5. Session 
Layer).

Als ich würde das der Schicht 4. (Transport Layer) zu ordnen.

Viel spass in der Realität.  Volker

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin noch irgendwie ratlos. Soll ich das Protokoll auf Basis von CanOpen 
entwerfen oder soll ich mir was eigenes überlegen?

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wer veranlasst eigentlich, das die niederpriore CAN-Botschaft nochmals 
verwendet wird? Ist das die WIRED - AND - Buslogik?

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ingo,
CANopen bietet sicherlich alles was Du brauchst. Und das was in einem 
Jahr noch dazu kommt, auch. Es giebt für (fast) alles ein Profil. Es 
giebt genug Anbieter des CANopen-Stack. CANopen ist aber auch sehr 
mächtig. Das heisst das du ein paar Wochen brauchen wirst, um einen 
Überblick zu bekommen. Den Stack selber zu schreiben ist praktisch nicht 
möglich.

Da ich weder deine übrigen Randbedingungen kenne, noch mich in den 
anderen höheren CAN-Protokollen auskenne, kann ich dir leider nichts 
empfehlen.

Das was ich empfehlen kann ist eine systematisches Vorgehen: Festlegen 
der Anforderungen, Lesen der Spezifikationen, tabelarische Auswertung.

ciao Volker

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ingo schrieb:
> Wer veranlasst eigentlich, das die niederpriore CAN-Botschaft nochmals
> verwendet wird? Ist das die WIRED - AND - Buslogik?

NEIN, das ist in Hardware gegossene Logik des CAN-Controllers. Hat 
nichts mit der Bus-Logik oder dem Transceiver zutun.

Noch ein Rat:
Bevor du dir ein höheres Protokoll auswählst, solltest du CAN-bus, die 
verschiedenen Transceiver und die Kontroller kennen.
Mit deinem jetzigen Wissenstand würde ich kein höheres Protokoll selbst 
entwerfen.

Es giebt auch Schulungen zu diesem Themengebiet, wenn das Selbststudium 
Probleme aufwirft.

ciao Volker

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Randbedingungen:
-Am CAN-Bus hängen mehrere Appl-Steuergeräte und ein 
Human-Machine-Interface-Steuergerät
-Appl-Steuergerät: dort läuft eine Appl (benötigt die Interaktion mit 
dem Fahrer)
-Human-Machine-Interface-Steuergerät: Interaktion mit dem Fahrer
-keine Zeitl. Festlegungen für die Nutzung des 
Human-Machine-Interface-Steuergerät

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit "Randbedingung" meinte ich eher soetwas wie Budged, Zeit, Anzahl der 
Entwickler, anschluß von Fremdgeräten etc.

Aber auch für die NUR technische Auswahl des richtigen Protokolss, 
reichen deine allgemeine Beschreibung nicht aus. Hier sind Funktion und 
Zahlen gefragt.

Aber nicht von mir!   Jetzt Verstanden?


Wer will weiter machen?

Autor: ingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur noch eine Sache.

Wer veranlasst eigentlich, das die niederpriore CAN-Botschaft nochmals
gesendet wird? Wo ist dies im CAN Protokoll definiert bzw. umgesetzt?
Das verwirrt mich nämlich. Dies bedeutet ja eigentlich, dass man sich 
darum gar nicht mehr kümmern muss, das die niederpriore CAN-Botschaft 
versendet wird oder?

Autor: andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn:

a) noch buskapazität frei ist
b) one-shoot o.ä. deaktiviert ist (ist die regel)

kannst du davon ausgehen, dass alle nachrichten von allen teilnehmern 
empfangen werden, (solange keiner in einem fehlerzustand schmollt)

Was nicht garantiert ist: es können nachrichten doppelt ankommen, ohne 
dass es dem empfänger mitgeteilt wird (durch einen bitfehler im akn-bit 
beim sender).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.