# PDO Mapping mit Twincat



## Basstarono (16 Mai 2008)

Hallo SPS Gemeinde,

ich bin noch Anfänger in der SPS Programmierung. Zur Zeit versuche ich eine Anlage mit Bändern zu konfigurieren. Dies ist mir nun schon fast gelungen. Ich habe da nur ein kleines Problem.

Auf ein TXPDO kann man bis zu 8 byte mappen.

Hier ein Codebeispiel:

Index         Subid    Length   Wert
0x1a01         0          1          0         // löscht TXPDO 2
0x1a01         1          4        60640020 // mapt Index 6064 auf TXPDO2
0x1a01         2          4        60650020 // mapt Index 6065 auf TXPDO2
0x1a01         0          1          1          // speichert das TXPDO 2

Die Indexe 6064 und 6065 sind frei ausgedacht.

Wie sage ich im Twincat System Manager jetzt, welcher Index auf welche Variable im Systemmanager gelegt wird. Ich meine nicht die Variablen die vom Twincat PLC control kommen sondern die man anlegt unter Eingang (linke Maustaste auf Eingang und dann Var anfügen oder so).

Ich hoffe es versteht noch jemand was ich meine.

Ich würde mich wirklich freuen wenn mir jemand hilft

Bis denne


----------



## drfunfrock (16 Mai 2008)

Wird der Index nicht automatisch vergeben? Du kannst an die Vars auch über den Namen ankoppeln.


----------



## Basstarono (17 Mai 2008)

*Hey*

Mit Indexes meine ich die Obj.idx. Diese ist laut CANOpen festgelegt. Der Index entscheidet welche Sachen man von dem Motor auslesen möchte.


----------



## Basstarono (30 Juni 2008)

*Fehler gefunden*

Beim speichern des TXPDO muß man schreiben

0x1a01         0          1 2

Die letzte Zahl gibt an wieviele PDOS man auf diesen INDEX gemappt hat.

Hier 2.

Gruß Basstarono


----------



## carrybit (18 August 2008)

*TPDO Mapping, Beckhoff CX1500-M510 nicht immer korrekt*

Das PDO-Mapping hat 5 Schritte:
1. PDO-Identifier (COB-ID, Bit 31) im PDO-Kommunikationsparameter löschen.
2. Gemappte Objekte im PDO-Mapping-Parameter auf Null setzen.
3. Gewünschte Objekte in das PDO mappen.
4. Summe der gemappten Objekte in den PDO-Mapping-Parameter eintragen.
5. PDO-Identifier (COB-ID, Bit 31) im PDO-Kommunikationsparameter
aktivieren.​

=======================================================
Beispielmapping Knoten mit Adresse 10

// SDO 1 Delete COB-ID 1800 Sub 1

| 8.478720 1 Rx 60A 8a 01 00 80 [1800,01] Initiate Download Rq. expedited 23 00 18 01 8A 01 00 80 
| 8.479176 1 Rx 58A [1800,01] Initiate Download Rsp 60 00 18 01 00 00 00 00 

// SDO2 Quantity of mapped Objects: 1A00 Sub 0 := 0
| 8.479770 1 Rx 60A 00 [1a00,00] Initiate Download Rq. expedited 2F 00 1A 00 00 00 00 00 
| 8.485469 1 Rx 58A [1a00,00] Initiate Download Rsp 60 00 1A 00 00 00 00 00 

// SDO3 1. PDO-Byte: [6000,01] mapped to 1A00 Sub 1 
| 8.485983 1 Rx 60A 08 01 00 60 [6000,01] [1a00,01] Initiate Download Rq. expedited "...`" 23 00 1A 01 08 01 00 60 
| 8.487015 1 Rx 58A [1a00,01] Initiate Download Rsp 60 00 1A 01 00 00 00 00 

// SDO4 2. PDO-Byte: [6000,02] mapped to 1A00 Sub 2 
| 8.488235 1 Rx 60A 08 02 00 60 [6000,02] [1a00,02] Initiate Download Rq. expedited "...`" 23 00 1A 02 08 02 00 60 
| 8.488627 1 Rx 58A [1a00,02] Initiate Download Rsp 60 00 1A 02 00 00 00 00 

// SDO5 3. PDO-Byte: [6000,03] mapped to 1A00 Sub 3 
| 8.489177 1 Rx 60A 08 03 00 60 [6000,03] [1a00,03] Initiate Download Rq. expedited "...`" 23 00 1A 03 08 03 00 60 
| 8.489700 1 Rx 58A [1a00,03] Initiate Download Rsp 60 00 1A 03 00 00 00 00 

// SDO6 4. PDO-Byte: [6000,04] mapped to 1A00 Sub 4 
| 8.490250 1 Rx 60A 08 04 00 60 [6000,04] [1a00,04] Initiate Download Rq. expedited "...`" 23 00 1A 04 08 04 00 60 
| 8.490782 1 Rx 58A [1a00,04] Initiate Download Rsp 60 00 1A 04 00 00 00 00 

// SDO7 5. PDO-Byte: [6000,05] mapped to 1A00 Sub 5 
| 8.491754 1 Rx 60A 08 05 00 60 [6000,05] [1a00,05] Initiate Download Rq. expedited "...`" 23 00 1A 05 08 05 00 60 
| 8.492596 1 Rx 58A [1a00,05] Initiate Download Rsp 60 00 1A 05 00 00 00 00 

// SDO8 6. PDO-Byte: [6000,06] mapped to 1A00 Sub 6 
| 8.493158 1 Rx 60A 08 06 00 60 [6000,06] [1a00,06] Initiate Download Rq. expedited "...`" 23 00 1A 06 08 06 00 60 
| 8.493674 1 Rx 58A [1a00,06] Initiate Download Rsp 60 00 1A 06 00 00 00 00 

// SDO9 7. PDO-Byte: [6000,07] mapped to 1A00 Sub 7 
| 8.494186 1 Rx 60A 08 07 00 60 [6000,07] [1a00,07] Initiate Download Rq. expedited "...`" 23 00 1A 07 08 07 00 60 
| 8.494752 1 Rx 58A [1a00,07] Initiate Download Rsp 60 00 1A 07 00 00 00 00 

// SDO10 8. PDO-Byte: [6000,08] mapped to 1A00 Sub 8 
| 8.495300 1 Rx 60A 08 08 00 60 [6000,08] [1a00,08] Initiate Download Rq. expedited "...`" 23 00 1A 08 08 08 00 60 
| 8.495829 1 Rx 58A [1a00,08] Initiate Download Rsp 60 00 1A 08 00 00 00 00 

// SDO11 Quantity of mapped Objects: 1A00 Sub 0 := 8
| 8.496365 1 Rx 60A 08 [1a00,00] Initiate Download Rq. expedited 2F 00 1A 00 08 00 00 00 
| 8.502657 1 Rx 58A [1a00,00] Initiate Download Rsp 60 00 1A 00 00 00 00 00 

// SDO12 PDO-type "event driven" ==> 1800 Sub 2 := 0xFF
| 8.503187 1 Rx 60A ff [1800,02] Initiate Download Rq. expedited 2F 00 18 02 FF 00 00 00 
| 8.503773 1 Rx 58A [1800,02] Initiate Download Rsp 60 00 18 02 00 00 00 00 

// SDO 13 Inhibit Time := 0, 1800 Sub 3
| 8.504979 1 Rx 60A 00 00 [1800,03] Initiate Download Rq. expedited 2B 00 18 03 00 00 00 00 
| 8.505822 1 Rx 58A [1800,03] Initiate Download Rsp 60 00 18 03 00 00 00 00 

// SDO 14 Enable COB-ID 1800 Sub 1
| 8.506380 1 Rx 60A 8a 01 00 00 [1800,01] Initiate Download Rq. expedited 23 00 18 01 8A 01 00 00 
| 8.507212 1 Rx 58A [1800,01] Initiate Download Rsp 60 00 18 01 00 00 00 00 


========================================================

Ich habe die Erfahrung gemacht, dass bei der Gegenkontrolle mit einem CANalyzers der Beckhoff-Master CX1500-M510 nicht jedes eingetragene SDO auch wirklich sendet.


----------



## fontsix (13 April 2012)

Hallo, ich stehe gerade vor dem selben Problem, das ich nicht genau weiß wie das PDO Mapping funktioniert, bzw. hat das bisher mit TwinCAT automatisch ganz gut geklappt, aber nun hab ich das problem das bei einem Gerät scheinbar per Default Objekte in das TxPDO 1 gemapped werden, wenn ich diese in das TxPDO gemappten Variablen lösche und danach neue Variablen erstelle, scheinen die Adressen der Objekte aber schon vergeben zu sein.

Das hat die Auswirkung das ich immer den Wert der Variablen erhalte der Vorher in dem PDO gemapped war. 

Nun bin ich im Beckhoff Information System auf den folgenden Punkt gestoßen das man auch "variabel mappen" kann. Allerdings ist Beschreibung nicht gerade sehr hilfreich, vielleicht kann jemand dazu kurz was sagen




Wie mappe ich die Objekte variabel ?

Leider konnte ich unter dem Reiter Prozessdaten auch nicht viel an den PDO's verändern.





Hoffe es kann jemand helfen.

MfG fontsix


----------



## carrybit (14 Oktober 2012)

*Wie ein PDO gemappt wird ist eindeutig von CiA definiert*

Hallo fontsix,

sorry Ich kann leider Deine Bilder nicht anschauen :=(
Wie prinzipiell ein PDO gemappt wird habe ich oben beschrieben. Die Definition kann man auch bei der CiA nachlesen.
Allerdings muß man sich dazu die CANopen-Telegramme mit einem CAN-Analyzer anschauen und SDO-Telegramme, die zum
PDO-Mapping erforderlich sind, "von Hand" zu erzeugen.


Als Bedingung muß das CANopen-Device (in der Regel der CANopen Slave) die Option eines dynamischen PDO-Mappings unterstützen. 
(siehe Dokumentation des Slave-Gerätes), d.h. es gibt auch Geräte, die ein Ummappen der Inhalte nicht zulassen, weil diese fest konfiguriert sind.

Eine weitere Bedingung ist, dass sich das zu mappende Device im Zustand "preoperational" befinden muss. Das PDO-Mapping erfolgt mittels SDO-Telegramme. 
Nach dem PDO-Mapping
wird dann das Device in den Zustand "operational" geschaltet. Nur im Zustand "operation" können PDO-Daten (Prozessdaten) 
gesendet und empfangen werden. 

Mit einem CANAnalyzer kann man die Fehlerursache eingrenzen => Entweder Beckhoff-Master oder CANopen-Slave.

Sind die Bedingungen seitens Deines Slaves erfüllt, wird wohl eine Unterstützung von Beckhoff erforderlich sein.

Beste Grüße
Carrybit

(Das Bit, dass zum "Überlaufen" führt.)


----------



## carrybit (14 Oktober 2012)

Hallo fontsix,

soeben konnte ich deine Bilder öffen. Du befindest dich aber nicht im Bereich CANopen, sondern in der EthetCAT-Feldbusbereich.

Somit sind alle meine Aussagen Gegenstandslos, da das Mapping und das Verhalten (Zustandsmaschine etc) in der CoE (CANopen over EtherCAT) nach anderen Vorgaben arbeitet.

Als Sniffer-Tool benötigts Du nun Ethereal/Wireshark. Fachlich muss ich nun zu diesem Thema EtherCAT leider passen.


Beste Grüße
Carrybit


----------

