klausbre
Level-2
- Beiträge
- 54
- Reaktionspunkte
- 17
-> Hier kostenlos registrieren
Gelöst: Beckhoff-Twincat: ADR()-Funktion
Guten Abend,
ich bin im Moment dabei einen recht umfangreichen Codesys-Baustein zur Ansteuerung meiner CANopen-Servos auf TwinCat/EtherCat zu portieren. Das klappt überraschend gut ... aber an einer Stelle hänge ich.
Ich würde gerne einem Funktionsblock eine Adresse einer Variablen übergeben. Diese Variable kann ein Byte, ein Wort oder ein DInt sein. Der Funktionsblock dient dabei ein beliebiges SDO zu schreiben.
Unter Codesys konnte man z. Bsp.
schreiben. Dabei landete in dem DWord dw_ErgebnisVar_pt die entsprechende Adresse unabhängig davon welchen Datentyp man innerhalb der Funktion ADR() verwendet hatte.
Laut der Beckhoff Hilfe sollte das hier genau so gehen:
Nur tut es das leider nicht. Wenn man die obige Zeile übersetzt bekommt man immer den Fehler. Typ 'POINTER TO BYTE' kann nicht in 'DWORD' konvertiert werden.
Kennt hier jemand einen gangbaren Weg? Ich würde ungern eine Inputvariable für jeden Datentyp im Funktionsblock anlegen ... aber was anderes fällt mir im Moment nicht ein.
Vielen Dank
K. Kilper
Guten Abend,
ich bin im Moment dabei einen recht umfangreichen Codesys-Baustein zur Ansteuerung meiner CANopen-Servos auf TwinCat/EtherCat zu portieren. Das klappt überraschend gut ... aber an einer Stelle hänge ich.
Ich würde gerne einem Funktionsblock eine Adresse einer Variablen übergeben. Diese Variable kann ein Byte, ein Wort oder ein DInt sein. Der Funktionsblock dient dabei ein beliebiges SDO zu schreiben.
Unter Codesys konnte man z. Bsp.
Code:
dw_ErgebnisVar_pt:=ADR(by_HomingMethod)
Laut der Beckhoff Hilfe sollte das hier genau so gehen:
ADR liefert die Adresse seines Arguments in einem DWORD. Diese Adresse kann an Herstellerfunktionen geschickt und dort wie ein Pointer behandelt werden oder innerhalb des Projektes an einen Pointer zugewiesen werden. [...]
Beispiel in ST:
dwVar:=ADR(bVAR);
Nur tut es das leider nicht. Wenn man die obige Zeile übersetzt bekommt man immer den Fehler. Typ 'POINTER TO BYTE' kann nicht in 'DWORD' konvertiert werden.
Kennt hier jemand einen gangbaren Weg? Ich würde ungern eine Inputvariable für jeden Datentyp im Funktionsblock anlegen ... aber was anderes fällt mir im Moment nicht ein.
Vielen Dank
K. Kilper
Zuletzt bearbeitet: