Forum: Mikrocontroller und Digitale Elektronik Verständnisproblem CAN Open


von Luke (Gast)


Lesenswert?

Hey,

Habe ein Verständnis Problem was den CAN open bus angeht.
Ich will für ein Batteriemodul den Can open bus programmieren.

- Wenn ich jetzt kein variables PDO Mapping mache sondern ein festes mit 
fixen Werten wo steht das dann. Im Electronic Data Sheet?

- Es gibt eine gewisse BOOT UP Sequence in der sich jeder Knoten meldet 
nach der Initalisierung und in den PRE - Operational Modus geht. Auf 
welche Meldung bzw. welche Werte (Identifier) vom NMT Master muss ich 
warten damit die PDOS freigeschaltet werden und der Knoten in den 
Operational modus geht?

-In der Pre- Operational Phase kann der Knoten mit dem NMT Master nur 
über SDOs kommunzieren. Heißt das ich muss dem NMT Master in der Phase 
die definierten PDOs die über SDOs gesendet werden zur Verfügung 
stellen?um dann zu wissen was für PDOs kommen und wie viele usw. ?



LG

von Sandhase (Gast)


Lesenswert?

hi,

zum Thema Preoperational Modus:
Dieser Modus ist wie Du schon richtig erkannt hast nur zur Konifguration 
deiner Knoten gedacht.
Durch die SDO Telegramme (diese müssen im Datenblatt festgelegt sein) 
kannst Du verschiedene Einstellungen auf deinem Knoten vornehmen.
Dabei sind die Identifier der SDO Telegramme von der CiA festgelegt 
worden

TxSDO = 580Hex + Knotenadresse
RxSDO = 600Hex + Knotenadresse

Der Knoten wartet dabei solange bis er ein "Run Signal" vom Master 
erhält und wechselt durch dieses dann in den Operational Modus.

Operationalmodus:

Die PDOs deines Knotens müssen auch im Datenblatt festgelegt sein (die 
Datenfelder und welches PDO), Knotenadresse und Bitrate sollten per 
DIPschalter oder ähnlichem Hardwaremässig zu vergeben sein.

Dadurch kannst Du wiederum deine Telegramme bestimmen

TxPDO1 = 180Hex + Knotenadresse
RxPDO1 = 200Hex + Knotenadresse

TxPDO2 = 280Hex + Knotenadresse
RxPDO2 = 300Hex + Knotenadresse

TxPDO3 = 380Hex + Knotenadresse
RxPDO3 = 400Hex + Knotenadresse

TxPDO4 = 480Hex + Knotenadresse
RxPDO4 = 500Hex + Knotenadresse


Hast Du eine Möglichkeit auf dem CAN Bus die Telegramme mit zu verfolgen 
oder sogar welche von Hand zu senden?

Gruss
Sandhase

Ps: Das Tx oder Rx ist immer aus der sicht vom Master T = Transmit und R 
= Reciev

von Sandhase (Gast)


Lesenswert?

*Nachtrag:

Das "Starttelegram" vom Master sieht ca so aus:

ID:    Datenfeld:
0h      01h 01h

Erklärung:

ID: 0 = Gilt für alle Teilnehmer am Netz da NMT Start / Stop Telegramm

01h = Knotenadresse des Teilnehmers (in Hex) für den dieses Telegramm 
gilt

01h = Startcode um den angesprochenen Knoten zu starten.

mit diesem Telegramm würdest du jetzt den Knoten 1 "starten"

Generell zum Thema SDO:

Meistens kannst Du dort die Zeiten von Lebenszeichen (Heartbeat), und 
Widerholungszeiten deiner PDOs einstellen. Und je nach angeschlossenem 
Modul noch einige weitere Dinge. (Siehe Datenblatt)

Bei den PDOs ist ein CANKnoten generell auf 4 Tx und 4 Rx PDOs 
beschränkt, wenn er mehr benötigt, benötigt er auch mehrere Adressen.

Ich kann dazu nur sagen überprüfe die Abschlusswiderstände (120Ohm), die 
Datenleitungen CAN+, CAN- und GND ob sie richtig angeschlossen sind und 
die jeweiligen Einstellungen bezüglich Knotenadresse und Bitrate des 
Masters und des Knotens.

Gruss
Sandhase

von Luke (Gast)


Lesenswert?

Danke für die Antworten.
Ja ich habe einen PC-CAN von Peak systems. Ich kann also ganz einfach 
Can Nachrichten per Hand schicken.

Zu Operational:

ID:0 gilt für alle Teilnehmer. Schickt der NMT Master immer gleichzeitig 
an alle das Startsignal. Er kann doch auch einzelnen Knoten das 
Startsignal geben. Was aber ist dann ID für das Startsignal.
Die ID vom ersten SDO ? Also Transmit SDO: 1409- 1535 (dezimal) + 
Knotennummer

Meinst du mit Datenblatt das Electronic Data Sheet, welches ich dann für 
den CAN OPEN Bus meines Batteriemoduls anfertigen muss?

//
Object 1000h: Device type
This object describes the battery module’s functionality.
Device profile number: 418d

Muss ich hier auf die Anfrage vom NMT Master warten mit einem SDO bzw. 
ist sowas im Preoperational modus? Es geht hier im genauen zu definieren 
wie viele TPDOs und RPDOs der NMT Master vom Knoten bekommt.
\\

Für mich ist nicht klar ersichtlich welche Objekte wann gesendet werden 
müsse so wie mit dem Object 1000h.

Danke für den Support.
LG

von Sandhase (Gast)


Lesenswert?

Alsobevor ich jetzt weiter auf bereichsspeziefische Sachen ein gehe erst 
ein mal ein paar wichtige Dinge für mich
ist der Master komplett Canopenfähig?
Um was für ein Bauteil handelt es sich?

Ist dein Ladegerät bereits Canopenfähig? wenn ja bitte mal den link zum 
Datenblatt posten.

Ist dieses Ladegerät eine Bastelei für Dich oder soll die nacher irgend 
welchen industriellen Standarts genügen?

Auf Grund von diesen Antworten kann auch ich anfangen zu suchen und das 
zum Thema
id: 0 und das Datenfeld hinten dran ...
Dieses Telegramm ist der startbefehl für deinen Knoten

weitere Befehle dieser Art währen id: 0 Datenfeld: 01 80 = versetzt den 
knoten 1 in preoperational modus

...

Das sind bereits direkte Befehle ... ich poste Dir nacher noch einen 
Link, in dem Pdf steht viel zum Canopen bus drin, leider auch 
speziefische Dinge des Herstellers aber es wird viwles genau erklärt.
Gruss
Sandhase

von Sandhase (Gast)


Lesenswert?

Also,
wie versprochen, Dein Link zur Einführung in den CANopen Bus:

http://www.selectron.ch/downloads/software_kapitel/shb_canopen/01_CANopen-Einfuehrung-d.pdf

Lies das mal durch, vorallem Seite 9 enthält die IDs der einzelnen 
Telegramme.

Gruss

von Luke (Gast)


Lesenswert?

Zu deinen Fragen:

Ein Kunde wünscht sich eine Lithiumbatterie die als Schnittstelle CAN 
Open anbietet. Ich habe noch nicht klären können warum er CAN Open will 
und wer mit der Batterie kommuniziert. Ich denke CAN Open ist gewünscht, 
da es einfach in ein System eingebunden werden kann (zumindest nimmt man 
einfach an wenn man den CAN OPEN verstanden hat) und es klar definierte 
Parameter gibt die Standard bei CAN Open sind.

Jetzt wollte ich inzwischenzeit den CAN Open Bus soweit verstehen und 
vorbereiten und das mit dem CiA 301 und CiA 418 (BAtteriemodule) bzw. 
soweit programmieren.


Danke für den Link. Werde es mir gleich anschauen.

LG

von Luke (Gast)


Lesenswert?

Auf Seite 20 des Links ist das Protokoll für SDOs versehen. Genau sowas 
habe ich gesucht.

Wenn sich mein Knoten also die Batterie in der Pre-Operational Phase ist 
dann kann ja nur über SDOs kommuniziert werden. Damit der NMT Master 
weiß welche PDOs für ihn bereitstehen usw. schickt er mir eine Upload 
request (siehe Seite 20) und ich sende ihm als Knoten die Daten (Upload 
response S.21), die er benötigt zu bis ich das Signal für den 
Operational Modus bekomme wo ich dann die PDOs schicken kann. Richtig?

Wobei natürlich auch in der Operational Phase dann wieder SDOs kommen 
können.


PS: Warumm finde ich sonst nirgendwo ein Protokoll wie auf Seite 20 von 
dem Link ?
Müsste doch eindeutig in den CiA Datenblätter stehen?

Danke !

LG

von Nils (Gast)


Lesenswert?

Luke schrieb:
> Jetzt wollte ich inzwischenzeit den CAN Open Bus soweit verstehen

So eine Aussage vor dem Kunden ist nicht gerade gut. Der CAN Bus ist der 
physikalische Teil. D.h. es werden über 2 Datenleitungen Daten 
übertragen. Das Protokoll CAN ist auch spezifiziert.
CANopen fügt zum CAN eigentlich nur einen weitern Layer hinzu. CANopen 
ist also nicht mehr als eine Protokollschicht, die definierte Telegramme 
über den CAN sendet. Vielleicht ist dir das ja klar und du hast dich nur 
falsch ausgedrückt.


Luke schrieb:
> Warumm finde ich sonst nirgendwo ein Protokoll wie auf Seite 20 von
> dem Link ?
> Müsste doch eindeutig in den CiA Datenblätter stehen?

Wir haben unseren eigenen CANopen Stack nach den Informationen der CiA 
programmiert. Ich weiss nicht mehr was wo genau steht aber unser Stack 
läuft. Das heisst es ist alles dort irgendwo beschrieben.

von Sandhase (Gast)


Lesenswert?

Nils schrieb:
> Wir haben unseren eigenen CANopen Stack nach den Informationen der CiA
> programmiert. Ich weiss nicht mehr was wo genau steht aber unser Stack
> läuft. Das heisst es ist alles dort irgendwo beschrieben.

Wie Nils es oben bereit richtig (meiner Meinung nach) beschrieben hat:

Jeder Hersteller hat innerhalb der SDOs seine eigenen Parameter.
Diese müsstet hr festlegen und im Datenblatt festhalten, damit könnt Ihr 
später verschiedene variablen verstellen, um das Baterieladegerät 
einzustellen.

SDOs sollten im Operationalmodus nicht vorkommen, da dazu der Knoten in 
den preoperationalmodus versetzt werden muss.

Wenn Ihr eh am entwerfen seit, könnt Ihr Euch Gedanken darüber machen, 
was alles eingestellt werden soll und wie Ihr eine saubere 
Einstellungsmöglichkeit umsetzt.

Sobald alle einstellungen erledigt sind (und vom Knoten quittiert 
wurden) sollte der Master in den Operationalmodus wechseln, in diesem 
Moment beginnt eine Kommunikation ausschliesslich über PDOs, alle 
anderen Telegramme wie SDOS oder NMTs sollten nicht mehr vorkommen, da 
dies meist einen Fehler zur Ursache hat.

Noch ein Tipp, wenn ihr das ganze noch am entwerfen seid:
Die Heartbeat producer Zeit (per SDO verstellbar) muss unbedingt 
eingehalten werden!
Bei uns ist es üblich, sobald ein Knoten sein Heartbeat nicht nach der 
1,5 fachen Zeit gesendet hat wird er komlett zurückgesetzt und das Ganze 
beginnt von Vorne.

Ich weiss ide ganzen CiA Normen und sowas sind kompliziert und 
undurchsichtig, aber ich hoffe ich kämpft Euch da gut durch.

(kann sein, dass ich in den nächsten paar Tagen nicht mehr gross 
dazukomme hier zu schreiben... Ihr kennt das ja Arbeit und so...)

Gruss
Sandhase

von Luke (Gast)


Lesenswert?

Nils schrieb:
> So eine Aussage vor dem Kunden ist nicht gerade gut. Der CAN Bus ist der
> physikalische Teil. D.h. es werden über 2 Datenleitungen Daten
> übertragen. Das Protokoll CAN ist auch spezifiziert.
> CANopen fügt zum CAN eigentlich nur einen weitern Layer hinzu. CANopen
> ist also nicht mehr als eine Protokollschicht, die definierte Telegramme
> über den CAN sendet. Vielleicht ist dir das ja klar und du hast dich nur
> falsch ausgedrückt.

Ja das ist mir soweit klar Nils.
Ok es ist alles dort irgendwo beschrieben. Ist halt sehr zeitaufwendig.

Sandhase schrieb:
> Ich weiss ide ganzen CiA Normen und sowas sind kompliziert und
> undurchsichtig, aber ich hoffe ich kämpft Euch da gut durch.

Dann bin ich froh, dass nicht nur ich das so sehe.

Ich danke euch für die Antworten. Habe es soweit verstanden mit den SDOs 
und PDOs und werde mich an die Arbeit machen alle relevanten Sachen zu 
finden.


Eine Frage hätte ich noch:
Und zwar das EDS (Electronic Data Sheet). Wie kann ich das erstellen. 
Gibt es da ein Programm? Oder Muster?
Oder ist es nicht zwingendermaßen erforderlich?
Datenblatt und EDS sind doch wieder 2 unterschiedliche Dinge. Soweit ich 
weiß ist das EDS im .ini format.

Danke!

LG

von Sandhase (Gast)


Lesenswert?

Hmm da muss ich erlich gesagt zugeben bin ich überfragt...
Vileicht weis Nils oder jemand anderes darauf eine Antwort.
Ich hoffe es mal ;)
Normalerweise stehe ich eher auf der Anwenderseite oder der seite die 
Probleme beheben muss und damit kenne ich mich leider auf den einzelnen 
Entwicklungebenen eher schlechter aus.

Gruss
Sandhase

von Clemens S. (zoggl)


Lesenswert?

Sandhase schrieb:
> SDOs sollten im Operationalmodus nicht vorkommen, da dazu der Knoten in
> den preoperationalmodus versetzt werden muss.


doch natürlich knnst du SDOs im Programmablauf senden und empfangen. 
dafür sind sie ja da. nur ein neues mapping solltest du nicht machen. 
die sind speziell für azyklische datenübertragung und sollten auch so 
verwendet werden.


Luke schrieb:
> Und zwar das EDS (Electronic Data Sheet). Wie kann ich das erstellen.
> Gibt es da ein Programm? Oder Muster?

lade dir doch einfach einmal eines herunter. egal von was. du willst ja 
nur einmal dei struktur verstehen. (zb Nanotec schrittmotortreiber) mach 
das mit dem txt editor auf und schau einfach mal rein.

Luke schrieb:
> Oder ist es nicht zwingendermaßen erforderlich?
der Programmeirer der Gegenstelle wird dich mit nassen Fetzen schlagen, 
wenn du keines hast. es gibt nichts nervigeres als diese dinge aus dem 
pdf datenblatt in den programmcode zu klopfen, um dann herauszufinden 
dass diese nicht die gleiche version beschreiben, da das pdf auf der 
Homepage veraltet ist.

hast du dir die CIA 301 angesehen, da ist das relativ gut beschrieben.
(am besten schreichst du alles raus was du nicht brauchst, und liest 
dann den rest noch einmal genau)

wie weit darfst du vereinfachen?

fixes PDO mapping? (das spart richtig arbeit)
fixe zeiten? (auch hier kannst du wieder sparen)
kein node Guarding sondern nur einen HB? (und schon wieder den stack 
geschrumpft)

sg

von Nils (Gast)


Lesenswert?

Was das EDS angeht gibts ja Editoren dafür. Microcontrol hat da einen 
neuen, der wohl relativ gut sein soll. Naja zumindest nach derren 
Aussage. Ich weiss aber nicht ober der kostenfrei erhältlich ist.

Wir schreiben die ganzen Daten per Hand in den Code, da wir selten neue 
CANopen Knoten bekommen.Vielleicht alle 2 Jahre mal einen. In Zukunft 
wird sich das wohl aber ändern und spätestens dann werden wir auch einen 
Editor einsetzen oder ein eigenes Skript schreiben.

Hab gerade in meinen Unterlagen gesehen, dass du dein EDS File über ein 
Tool von der CiA Homepage testen kannst. Ob man das ED File wirklich 
braucht ist geschmackssache. An deiner Stelle würde ich die relevanten 
Daten einfach in deine .h reinschreiben. Ist bestimmt schneller als der 
Umweg über EDS oder haste viele verschiedene Knoten?

von Clemens S. (zoggl)


Lesenswert?

er baut einen knoten, so wie ich das verstanden habe.
als Anwender stehe ich auf dem standpunkt dass er dann eines zu liefern 
hat.

wenn du zb eine SPS hast, die mit dem ding kommuniziert dann hast du 
fast keien andere Möglichkeit als ein EDS, um die daten dort zu 
verarbeiten.

von Martin (Gast)


Lesenswert?

Von Vector gibt es einen kostenlosen EDS-Editor namens "CANeds".

Ihr solltet Euch aber überlegen, ob Ihr nicht einen fertigen Stack 
kauft. Dort sind normalerweise Konfigurationstools dabei, aus denen dann 
das EDS zusammen mit dem generierten Code (und evtl. sogar noch eine 
Doku zu den CANopen-Objekten des Gerätes) herausfällt.

Evtl. ist auch http://sourceforge.net/projects/canopennode/ was für 
Euch. Ich wollte den Stack eigentlich mal ausprobieren, bin aber (noch) 
nicht dazugekommen.

von Steffen Rose (Gast)


Lesenswert?

Luke schrieb:
> PS: Warumm finde ich sonst nirgendwo ein Protokoll wie auf Seite 20 von
> dem Link ?
> Müsste doch eindeutig in den CiA Datenblätter stehen?

CiA 301
Kann man nach kurzer Registrierung bei CAN in Automation downloaden.
http://www.can-cia.org

von Steffen Rose (Gast)


Lesenswert?

Sandhase schrieb:
> SDOs sollten im Operationalmodus nicht vorkommen, da dazu der Knoten in
> den preoperationalmodus versetzt werden muss.

Der SDO Dienst wird zur Konfiguration genutzt. Die Konfiguration findet 
typischerweise im NMT Preoperational Mode statt.
Aber: Der SDO Dienst ist auch im NMT Operational Mode erlaubt.



> Wenn Ihr eh am entwerfen seit, könnt Ihr Euch Gedanken darüber machen,
> was alles eingestellt werden soll und wie Ihr eine saubere
> Einstellungsmöglichkeit umsetzt.

Da der Kunde wohl CiA418 fordert, habt ihr wohl nicht viel nachzudenken. 
Hier ist alles schon vorgegeben. Durch das statische Mapping ergibt sich 
auch nur wenig Konfigurationsbedarf.

> Noch ein Tipp, wenn ihr das ganze noch am entwerfen seid:
> Die Heartbeat producer Zeit (per SDO verstellbar) muss unbedingt
> eingehalten werden!
> Bei uns ist es üblich, sobald ein Knoten sein Heartbeat nicht nach der
> 1,5 fachen Zeit gesendet hat wird er komlett zurückgesetzt und das Ganze
> beginnt von Vorne.

Dies ist Sache des Systemdesigners und somit des Masters.
Bei EnergyBus definieren wir eine 3fach höhere Heartbeat Consumer Zeit 
als die Heartbeat Producer Zeit der jeweiligen Geräte. Kommt darauf an, 
wie tolerant gegen Fehler man sein möchte.

Da die Heartbeats eine hohe CAN ID und somit eine niedrige Priorität 
haben, werden diese durch eine (kurzzeitig) hohe Buslast verzögert.


> Ich weiss ide ganzen CiA Normen und sowas sind kompliziert und
> undurchsichtig, aber ich hoffe ich kämpft Euch da gut durch.

Der CiA und die kommerziellen CANopen Stack Anbieter bieten regelmäßig 
Schulungen an. Da ist man zumindest auf der sicheren Seite. Vielleicht 
will der Kunde ja auch den CANopen Conformancetest des Can in Automation 
bestehen? Da zeigt sich dann jedes Missverständnis.

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.