CANopen, BECK IPC@CHIP@SC143-IEC-LF , Beckhoff BK 5120 - unbekanntes Problem

jan84

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein freundliches Hallo an alle Forenmitglieder!!!

Ich beschäftige mich seit kurzem mit der Anbindung eines Beckhoff BK 5120 an ein Beck IPC@CHIP@SC143-IEC-LF mit CANopen (ca. 1m Kabellänge). Ich nutze CoDeSys V2.3

Bisher habe ich noch keine Erfahrung mit CAN, CoDeSys & Co gehabt.

Die Kommunikation über CANopen funktioniert. Ich habe bisher 4 DI, 4 DO, 4 AI und 4AO angehangen. Mit meinem CAN-Monitor kann ich auch sehen, dass nur die bewusst erzeugten Nachrichten über den Bus kommen.

Das Problem: Mein System macht in unregelmäßigen Abständen einen kompletten Neustart.

Um so mehr Aus- und Eingänge ich verwende, desto instabiler wird alles. Ich habe zum Test einen toggelnden DO auf einen DI gelegt. Das verkraftet mein System gar nicht mehr. Es bricht aller 10 bis 15 Sekunden zusammen.

Jetzt weiß ich nicht wo ich ansetzen soll, um meinen Fehler zu finden:confused:

Ich vermutete die Parametrierung und habe deshalb sämtliche Parameterkonstellationen ausprobiert. Ich konnte es damit etwas verbessern, aber das Problem nicht beheben.

Meine jetzige Konfiguration ist:

Beck:
Baudrate: 125000
Com. Cycle Period [µs]: 30000
Sync. Window Length [µs]: 3000
Sync. COB-ID: 128: aktiviert
Automatisch starten: aktiviert
DSP301,V4.01 und DSP306 unterstützen: aktiviert
Heartbeat Master [ms]: 1000

Beckhoff:
DCF schreiben: nicht aktiviert
Alle SDOs erzeugen: aktiviert
Optionales Gerät: nicht aktiviert
Knoten zurücksetzen: nicht aktiviert
Nicht initialisieren: nicht aktiviert
Nodeguarding: nicht aktiviert
Heartbeaterzeugung aktivieren: aktiviert
Heartbeat Producer Time [ms]: 1000
Heartbeatverbrauch aktivieren: nicht aktiviert
Emergency-Telegramm: aktiviert
Communication Cycle: nicht aktiviert

PDO-Mapping Empfangen:
DO:
Typ: asynchron+geräteprofilspezifisch
Inhibit-Time [100µs]: 0
AO:
Typ: asynchron+geräteprofilspezifisch
Inhibit-Time [100µs]: 0

PDO-Mapping Senden:
DI:
Typ: asynchron+geräteprofilspezifisch
Inhibit-Time [100µs]: 500
AI:
Typ: zyklisch+synchron
Inhibit-Time [100µs]: 500

Taskkonfiguration:
Priorität: 0
Typ: Zyklisch (Intervall: 30ms)
Watchdog: aktiviert (300ms, Empfindlichkeit: 2)


Ich würde mich riesig über Hinweise zu möglichen Fehlerquellen freuen:)

Jan
 
Hallo!

Eine mir noch unverständliche Lösung meines Problem hat sich ergeben:

Wenn ich Heartbeat nicht verwende, dann funktioiniert alles. Ich habe deshalb auf Nodeguarding umgestellt.

Hat Jemand hierzu eine Erklärung?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weiss jetzt nicht ob es zu deinem Problem passt, aber ich hatte bei CANopen immer das Problem, wenn ich zuviele PDOs asynchron betrieben habe, bekam ich selbst bei 1MBaud ständig Datenstau im Bus.
Heartbeat hatte ich nicht aktiviert gehabt, aber evtl. kann es daran liegen das das Signal nicht mehr durchkommt wenn die Leitung dicht ist.
 
Ja genau, mir scheint es auch, dass der Bus einfach voll ist. Ich bin gerade auf der Suche nach einem Weg die Buslast prozentual herauszubekommen.

Was mich nur verwundert ist, dass in der Beckhoff-Doku und auch in einem Buch über CANopen (CANopen, Holger Zeltwanger, VDE Verlag) geschrieben wird, dass Heartbeat gegenüber Nodeguarding zu bevorzugen ist, da es nicht auf CAN-Remote-Frames zugreift und so flexiblere Überwachungsstrukturen zulässt.

Mit Nodeguarding kann ich selbst alle In-/ und Outputs zyklisch-synchron abfragen. Das ging mit Heartbeat nur asynchron (außer AI, der per Default nur zyklisch-synchron zu lesen ist)
 
Die Buslast kannst du vermindern indem du die PDO auf synchron umstellst. Dann werden die Daten ja getaktet gesendet und kommen schön ordentlich in Reih und Glied.
Asynchron würde ich nur Daten verschicken, die wirklich wichtig sind und sich nur selten ändern (alarmmeldung etc. ). Asynchrone PDO werden ja "Event Getriggert" um es mal neudeutsch auszudrücken. Jedesmal wenn sich ein Wert im PDO ändert wird dieser sofort gesendet. Machen das mehrere PDOs gleichzeitig und ständig, is der Bus ratz fatz voll.

Alternativ kannst du ja auch die inhibit time der async pdo raufsetzen um ihnen mal ne sendepause zu verpassen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi MasterOhh,

Mein Bus ist seltsamerweise voller, wenn ich die PDOs synchron sende. Deshalb habe ich auf asynchron umgestellt. Warum das so ist, verstehe ich aber auch noch nicht, da sich manche Ein- und Ausgänge jeden Zyklus ändern.

Grüße

Jan
 
Ja das ist ein wenig Tricky. Wir mussten da auch ewig rumprobieren bis wir ein Setting gefunden hatten (Sendeintervalle ändern etc) das gut lief.
Ich glaub am einfachsten ist doch erstmal die PDO asynchron zu betreiben und die Inhibit time der TxPDOs rauf zu setzen (100ms oder höher). Wenn es dann besser läuft kann der Wert ja wieder schrittweise verringert werden.
 
Zurück
Oben