TC3: Variablenverknüpfungen zwischen KUKA KRC4 und IPC via Bridge EL6695-1001

Jörn

Level-1
Beiträge
58
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

der letzte Meter fehlt mir noch zu meinem Glück. Hier steht ein KRC4 mit einem Gespann aus EL1100 und EL6695-1001 und ein IPC mit einer EK1122. Beide Seiten sind korrekt konfiguriert und reden grundsätzlich auch miteinander. In der Online-Ansicht geht die KRC4 secondary (EL6695-1001) bei mir auf der SPS-Seite in den OP-State. Die Prozessdaten (Ein- und Ausgänge) sind konfiguriert, aaaber ... als 128 Byte vom Typ DWORD.


EL6695-1001_Variablenverknüpfung.JPG


Laut der Schnittstellenbeschreibung habe ich "diverses Zeug": BOOL, INT und REAL bunt gemischt. Ich kann die PDOs nicht ändern, da sie auf fixed gesetzt sind. Bei einem Rechtsklick auf eines der DWORD poppt ein Fenster mit der Meldung "PDO Inhalt kann nicht geändert werden" auf. Muss ich jetzt in der SPS 128 Byte als DWORD anlegen und die einzelnen Signale, z.B. per DWORD[x].y AND Signalname, kombinieren, oder gibt es da auch einen einfacheren / eleganteren Weg? :confused:

Vielen Dank schonmal. :)

Gruß
Jörn
 
Was Du machen könntest wäre in Deinem SPS-Programm die Ein- und Ausgänge als ARRAY OF DWORD mit %I* und %Q* anlegen, gleichzeitig legst Du eine Struktur an die alle Daten der jeweiligen Ein- und Ausgänge mit "vernünftigen" Variablennamen und Typ enthält (Achtung!!! Pragma {attribute 'pack_mode' := '<Value>'} mit Wert 0 oder 1 verwenden um Lücken zu vermeiden) und kopierst dann das Array mit MEMCPY in die Struktur. Probleme kann es da allerdings geben, wenn sich die Indianer nicht grün sind (Stichwort: Little Endian, Big Endian) und bei den BOOLs, weil BOOLs in TwinCAT 1 Byte einnehmen, allerdings gibt es in TwinCAT bei Strukturen den Datentyp BIT der das Problem lösen könnte, wobei ich mir da nicht sicher bin, ob dann nicht beim Pragma der Wert 0 genommen werden muss, weil 1 Byte aligment bedeutet.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
In TC3 geht es eleganter mit einer Union, bestehend aus dem Array of UDINT und der Datenstruktur aus Deiner Schnittstellenbeschreibung. Für die HW-Verknüpfung nimmst Du das Array, für den Zugriff in Deinem Programm die Struktur. Dabei beachten, was Oliver schon geschrieben hat. Wenn Du die Byte-Grösse der Schnittstelle kennst, kannst Du nachrechnen, ob die Bools wirklich Bools (1 Byte pro Bool) oder gepackte Bits sind. Sonst erstmal mit Bools ausprobieren. Wenn in denen dann Werte > 1 stehen, sind es wohl doch Bits.

Noch ein Tip: Steck eine Safetyklemme nicht direkt vor oder hinter eine EL9410. Dort wird es ihr schnell zu warm. Und auch nicht mehr als 3 Safetyklemmen nebeneinander.
 
Zuletzt bearbeitet:
@ StructuredTrash:
Also in der UNION (1) zuerst das ARRAY OF DWORD als Struktur und dann die tatsächlichen Ein- und Ausgänge (80 BOOL, 4 INT, 10 REAL, 8 INT, ...) als Struktur?! Da die beiden Strukturen im gleichen Speicherbereich liegen steht in beiden (logischerweise) die gleiche Information drin. Tricky! Probiere ich bei Gelegenheit aus. Sollte es nicht funzen werde ich oliver.tonns Ansatz als zweites Ass aus dem Ärmel hervorzaubern. :ROFLMAO:

Zu Deinem Tip: Beim Schaltschrank habe ich keinen Einfluss. Den hat mir der Kunde so hingestellt. Ich werde es mal vortragen. ;)

Gruß
Jörn


(1) https://infosys.beckhoff.com/index....1031/tc3_plc_intro/18014401038903179.html&id=
 
Das Array brauchst Du nicht extra in eine Struktur packen:
Code:
TYPE uniKRC4_In
UNION
   HW:ARRAY[0..31] OF UDINT;
   SW:strKRC4_In;
END_UNION
END_TYPE
Oder, wenn Du es wirklich tricky machen willst, die Union vom Struct ableiten:
Code:
TYPE uniKRC4_In EXTENDS strKRC4_In
UNION
   HW:ARRAY[0..31] OF UDINT;
END_UNION
END_TYPE
Diese Möglichkeit wird im "Add DUT" Dialog nicht angeboten, aber sie funktioniert. Dann kannst Du in Deinem Programm auf die Strukturelemente ohne "SW." zugreifen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Oliver.Tonn:
Die Bits innerhalb einer Bitstruktur sind immer gepackt. Wenn Du allerdings mehrere Bit-Strukturen hintereinander definierst oder eine Bit-Struktur von einer anderen ableitest, wird immer mit einem neuen Byte begonnen. Ob dabei die Alignment-Regeln zum Tragen kommen, habe ich noch nicht getestet.
 
Zurück
Oben