LabVIEWForum.de
Kommunikation mittels CANopen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenkommunikation (/Forum-Datenkommunikation)
+---- Thema: Kommunikation mittels CANopen (/Thread-Kommunikation-mittels-CANopen)



Kommunikation mittels CANopen - Bishop - 03.11.2014 09:46

Moin Moin,

Ich habe follgendes Problem ich möchte ein CAN Telegramm der Form

0x0202 06 00 E8 03 2C 01 00 00

übermitteln.

Im Anhang findet sich hierzu meine bisherige Programmierung, jedoch funktioniert diese nicht. Ich denke derzeit, es liegt an der Verwendung eines RPDO und möchte daher ein SDO write U16 verwenden. Das Sub VI baut derzeit nur die eingegebenen Dezimalwerte in ein twistet HEX (also Dez 1000 wird zu 03E8 --> twisted E803) um und steckt diese in ein Array, da der RPDO Befehl ja nur mit Arrays arbeitet.

Da ich bisher allerdings nicht viel mit SDO befehlen gearbeitet habe würde ich mich sehr freuen, wenn mir jemenad eine Kurze "Einführung" gibt, was ich bei den Eingängen Object Index (wäre denke ich bei mir 0x0202), Object sub-index (?), Data (werden diese auch als Array übergeben), Timeout (was beschreibt das) und Completion code angeben muss.

Beste Grüße und Dank im vorraus

Bishop


RE: Kommunikation mittels CANopen - GerdW - 03.11.2014 12:48

Hallo Bishop,

Begriffsklärungen:
- CANopen arbeitet mit Botschaften, die bis zu 8 Byte Daten enthalten können.
- "twisted" bezeichnet hier die Endianness, üblicherweise als MSB oder LSB gekennzeichnet

Zitat:Ich denke derzeit, es liegt an der Verwendung eines RPDO und möchte daher ein SDO write U16 verwenden.
Wieso sollte mit einem SDO etwas funktionieren, was als PDO nicht geht?
In welcher Form werden die Parameter erwartet? Welches Gerät?

Zitat:Object Index (wäre denke ich bei mir 0x0202), Object sub-index (?), Data (werden diese auch als Array übergeben), Timeout (was beschreibt das) und Completion code angeben muss.
Diese Dinge stehen im Manual deines Gerätes.
- ObjID ist die Adresse des zu lesenden/schreibenden Parameters
- SubID ist die Unteradresse des Parameters. Unter der gleichen (Haupt-)Adresse können mehrere SubIDs verwendet werden…
- DATA sind die Nutzdaten der Botschaft, eben jene 1-8 Byte. Hier musst du schauen, was der SDO-Parameter erwartet…
- TimeOut sollte die max. Zeit für den Versand des SDO sein…
- "CompletionCode" sagt mir nichts. Was steht in der Hilfe dazu?

Dein subVI sieht schon sehr kompliziert aus. Warum U16 in Arrays wandeln, dann in ein 2D-Array und dann erst ins 1D-Array? Warum nicht die U16 in Bytes zerlegen (Split) und als 1D-Array zusammenfassen? Oder andersherum die U16 in ein U64 zusammenfassen und das dann in ein 1D-Array typecasten?