Hallo, ich habe eine grundlegende Frage zur Emergency Message des CanOpen Protokolls. Die DS301 Spezifikation habe ich bereits zu diesem Thema gelesen. Und zwar besteht die Emergency Message aus dem Error Register (1Byte, Objekt 1001h) und dem Error Code (2Byte, in Objekt 1003h enthalten). Der Error Code bezieht sich ja auf den aufgetretenen Fehler aus dem Error Register. Nun zu meiner Frage... Was passiert mit dem Error Code (1003h) wenn mehrere Fehler gleichzeitig aufgetreten sind und damit mehrere Bits im Error Register (1001h) gesetzt sind? Der Error Code bezieht sich ja immer auf einen spezifischen Fehler. Werden die anderen Fehler dann ignoriert? Beispiel: Allgemeiner Fehler (Bit0), Überstrom (Bit1) und Übertemperatur (Bit3) sind im Error Register gesetzt. Wie sieht nun der Error Code in der Emergency Message aus? Error Code Allgemeiner Fehler = 1000h Error Code für Überstrom = 2300h Error Code für Übertemperatur = 4200h Gibt es da eine Priorität oder werden drei Emergency Nachrichten nacheinander abgesetzt?
Peter U. schrieb: > Was passiert mit dem Error Code (1003h) wenn mehrere Fehler gleichzeitig > aufgetreten sind und damit mehrere Bits im Error Register (1001h) > gesetzt sind? > Der Error Code bezieht sich ja immer auf einen spezifischen Fehler. > Werden die anderen Fehler dann ignoriert? Der Error Code (1003h) ist laut Spec ein Array, kann also mehrere Fehler-Einträge haben. Ob das aber wirklich genutzt wird, scheint Implementations-Spezifisch zu sein: http://www.elmomc.com/support/manuals/MAN-CAN301IG.pdf "The present version of SimplIQ digital servo drives store one error at the most." - Nur ein Fehler, aber welcher? http://www.medelelektronik.com/wp-content/uploads/2015/06/SRVO-CAN-Manual.pdf "0x1003.1 → Last error code" - Letzten Fehler (aber nur einen). http://www.ps-log.si/dokumenti/UnidriveSP/Opcijske_kartice/SM-CanOpen_User_Guide_.pdf "0x1003.1 Returns the last emergency object codes (...) 0x1003.4 Returns the 4th last emergency object codes." - Die vier letzten Fehler. Zuletzt Aufgetretener zu erst.
void schrieb: > Der Error Code (1003h) ist laut Spec ein Array, kann also mehrere > Fehler-Einträge haben. > Ob das aber wirklich genutzt wird, scheint Implementations-Spezifisch zu > sein Das stimmt schon. Das Objekt 1003h ist eine Fehlerhistorie. Sobald ein Fehler auftritt und die Emergency Message abgesetzt wurde, wird im Objekt 1003h ein neuer Eintrag mit dem jeweiligen Error Code der letzten Emergency Message gemacht. Das habe ich verstanden. Was mir unklar ist... Wenn nun im Objekt 1001h mehrere Bits gesetzt sind, da min. zwei Fehler gleichzeitig aufgetreten sind, was ja durchaus mal vorkommen kann. Der Error Code ist ja eine genauere Fehlerbeschreibung, aber bezieht sich immer nur auf ein Bit aus Objekt 1001h. Müssen in dem Fall mehrere Emergency Messages nacheinander abgesetzt werden? Dazu finde ich leider nichts in der Spezifikation. Aktuell ist mein Verständnis so, dass pro Fehlerevent eine Emergency Message abgesetzt werden muss und nicht pro Fehlereintrag im Register 1001h.
Das Gerät hat einen Fehler. Das Bit für diesen aktuellen Fehler wird im 0x1001 hinzugeodert. (0x1001 zeigt die aktuelle Fehlersituation) Die Emergency mit dem jeweiligen Fehlercode wird generiert. Existiert eine Error History 0x1003 (optional) wird dieser Fehler in den Sub1 eingetragen. Ältere Fehler rutschen nach Sub 2 und folgende. Der letzte Fehler rutscht heraus. D.h. Für alle Fehler müssen auch Emergencies generiert werden. 0x1001 muss unabhängig von diesen Emergencies aktuell gehalten werden. Einen Beziehung zwischen 0x1001 und 0x1003 existiert nicht direkt. 0x1003 kann 1..254 Einträge fassen, je nach Implementierung. Es gibt einige Implementierungen, die 0x1003 nicht nach Standard implementierung und Fehler aus der History wieder löschen. Eigentlich ist nur ein komplettes löschen (0x1003:0 = 0) erlaubt.
Steffen R. schrieb: > Für alle Fehler müssen auch Emergencies generiert werden. Danke erstmal für den Beitrag. So wie Sie es beschreiben, macht es auch durchaus Sinn. Nur ein Punkt stört mich dann noch... Und zwar wird das Bit Generic Error (Bit0) im Objekt 1001h ja immer zusätzlich zu jedem anderen Fehler gesetzt. Würde dann ja bedeuten, dass ich dann bei einem Fehler z.B. Overcurrent die Bits 0 und 1 gesetzt sind und damit dann zwei Emergency Messages abgesetzt werden mit den Error Codes 1000h und 2300h ?! Gleichzeitig bläht mir damit die Fehlerhistorie in Objekt 1003h mit Generic Error Einträgen auf, die nicht wirklich aussagekräftig sind. Das scheint mir an dieser Stelle noch nicht ganz so sinnvoll zu sein. Gibt es für den Generic Error vielleicht eine Ausnahmeregelung? In der Spezifikation finde ich dazu leider nichts.
Ausschlaggebend sind aber die Gerätefehler. Entsprechend der vorliegenden Gerätefehler wird 0x1001 gesetzt. Dies selbst bewirkt nicht das Senden von Emergencies. Über 0x1001 selbst könnte man garnicht (genau) feststellen, welcher Fehler eigentlich vorliegt. Entsprechend dem vorliegenden Gerätefehler wird die Emergency mit dem passenden Fehlercode gesendet. Dabei überträgt der Dienst auch die Daten aus dem Objekt 0x1001. Das Bit 0 in 0x1001 wird dabei meist nur temporär gesetzt, teilweise automatisch. Objekt 0x1001 kann ja auch 0 werden und zeigt damit an, dass kein Fehler mehr vorliegt. Oder es wird, sobald ein Fehler nicht mehr vorliegt, dies per Emergency mit Fehlercode 0x0000 angezeigt. Über das mitgesendete Objekt 0x1001 kann man nun feststellen, ob noch andere Fehler anliegen oder nicht. Oft wird daber nicht das Bit 0 gesetzt. Wäre meiner Meinung nach auch falsch. D.h. nicht die Veränderung von 0x1001 sendet Emergencies, sondern die Fehlerbehandlung muss beides bedienen.
Steffen R. schrieb: > D.h. nicht die Veränderung von 0x1001 sendet Emergencies, sondern die > Fehlerbehandlung muss beides bedienen. Danke für deinen Beitrag. So ist es auf jeden Fall sauberer. Ich habe es mir wohl etwas zu einfach gemacht.
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.