Twincat 3, ADS.dll Kommunikation funktioniert nicht

redria

Level-1
Beiträge
11
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

für die persönliche Weiterbildung beschäftige ich mich aktuell mit der Programmierung mit TwinCAT 3 (verwendete Version: 3.1.4018.5)

Für ein persönliches Projekt möchte ich die TcAdsDll.dll verwenden, um eigene Programme in Visual C++ (VisualStudio2013, Update5) schreiben zu können, die mit TwinCAT über Ads kommunizieren.
Dazu habe ich mich zunächst der Beckhoff eigenen Beispiele mit Visual-C++ angenommen.

Bereits die Beispiele 2 und 3 bereiten mir dabei Probleme, die ich mir nicht erklären kann.

Ich möchte in der PLC1 (Port851) das Merkerdoppelwort an der Adresse 0 beschreiben und lesen. Dazu habe ich dieses Merkerdoppelwort in der PLC angelegt (MerkerDoppelWort1 AT%MD0: DWORD;) und die PLC gestartet.
Möchte ich nun mithilfe des Beispiels 2 dieses Merkerdoppelwort beschreiben (IDGroup 0x4020, IDOffset 0x0, Länge 0x4), kann ich die Änderung des Merkerdoppelworts in der PLC nicht sehen.
Das angelegte Beispiel 2 läuft jedoch ohne Fehlermeldung durch. Komisch ist auch, dass ich mit Beispiel 3 die mit Beispiel 2 geschriebene Information lesen kann.
Dementsprechend tippe ich, dass Beispiel 2 etwas in einen Adressbereich schreibt, der jedoch nichts mit der Adresse 0 zu tun hat, obwohl ich die Adresse eigentlich korrekt anspreche (IDGroup 0x4020, IDOffset 0x0, Länge 0x4).

Versuche ich in der PLC über den FB "ADSREAD" das Merkerdoppelwort auszulesen, gelingt dies auch nicht. Ich kann wieder nur den mit Beispiel 2 geschriebenen Wert lesen.

Ich bedanke mich schonmal für die Hilfe.

Sollten noch weitere Informationen benötigt werden, lasst es mich wissen.

Mit freundlichen Grüßen

Redria

EDIT:

Habe jetzt herausgefunden, dass die Merkeradressen bei IndexOffset 0x10 beginnen. (D.h., "MerkerDoppeltWort1 AT %D0: DWORD;" besitzt die IndexGroup 0x4020 und den Indexoffset 0x10)
Woran kann das liegen? Nach Beckhoff Infosys müssten die Merkeradresse bei IndexOffset 0x0 beginnen und dann hochzählen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Offset von 0x10 ist tatsächlich mit der 4018.5 auf x64 Systemen zu beobachten (x32-Systeme verhalten sich wie erwartet). Das soll/darf aber so nicht sein und wird laut Support korrigiert.
 
Hallo,

Du hast ein x64 System oder? Sicherlich daher der Offset...

Viele Grüße

Der Offset von 0x10 ist tatsächlich mit der 4018.5 auf x64 Systemen zu beobachten (x32-Systeme verhalten sich wie erwartet). Das soll/darf aber so nicht sein und wird laut Support korrigiert.

In der Tat habe ich ein x64 System. Es ist beruhigend zu hören, dass es nicht an mir lag sondern als Bug bekannt ist.
Gibt es zu TwinCAT irgendwo eine Liste mit "known issues" oder muss ich mich tatsächlich stets an den Support wenden, wenn ein Sachverhalt auftritt der nicht wie dokumentiert abläuft?

Es liegt mit ziemlicher Sicherheit am Alignment
http://infosys.beckhoff.com/index.php?content=../content/1031/tc3_plc_intro/136172171.html&id=

Ein "{attribute 'pack_mode' := '1'}" am Beginn derStruktur oder Variablendeklaration behebt das und stellt Kompatibilität zu TC2 her.
MfG

Dieses Pragma zu Beginn der Variablendeklaration hat mir nicht weitergeholfen, der Offset bleibt bestehen.
Aber dennoch Danke!

Mit freundlichen Grüßen

redria
 
Zurück
Oben