Struktur auslesen über AdsDLL LabVIEW mit Arrays und Sting

Deeply

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich moechte mit LabVIEW über die AdsDLL Schnittstelle eine Struktur aus TwinCAT 3 auslesen. Die Struktur enthält unter anderem Strings und Arrays. Hat einer hiermit Erfahrung und kann mir vielleicht helfen bzw einen Tipp geben. Ich habe mal ein Bild meines VIs eingefügt und die entsprechende Struktur in TwinCAT 3. Spaeter wuede ich gerne auch noch ein Array von Strukturen dieser Art auslesen. Ist das mit der AdsDLL moeglichen?

Vielen Dank schonmal fuer Eure Antworten

AdsDLLStrukturMitStringUndArraysLesen.JPG StrukturInTwinCAT3.JPG
 
VI ist jetzt nicht meins, aber klar geht das.
Mit F003 holst du dir den Handle (einmalig)
Mit F006 released du den HAndle ganz am Ende (einmalig)
und Mit F005 und dem Indexoffset aus F003 liest du die Struktur bzw Array der Struktur.
Du erhälst eine Binärwurst und musst das entsprechend der Definition aufdröseln. Insofern solltest du beachten das default in TC3 die Daten 8-Byte aligned sind.
D.h. ein String(80) ist de-facto 81 Byte lang, der nächste LREAL wird entsprechend auf einer 8-Byte aligned adresse starten, der INT auf einem 2 Byte aligned Wert.

Guga
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Deeply,

ich arbeite auch gerade an der Thematik AdsDll und Labview.
Könntest du dein Labview Vi hier hochladen?
Kann man auch ein Labview Struct per AdsSyncWriteReq anch Twincat schreiben?

Kann man auch eine reines String Array von Labview nach Twincat schreiben?

Danke und Gruß
Vetje
 
Entsprechend dem Thread #2 gilt:
-auf ein String-Array kann man zugreifen (String wird in TwinCAT als 1-Byte aligned Wert gesehen), allerdings solltest du daran denken das laut IEC z.B. ein String(80) de facto 81 Bytes benötigt wegen dem "Ende-Wert" der 0x0 ist.
-Wer Lesen kann, kann prinzipiell identisch auch schreiben
 
Danke für die Antwort.
Hab's aber leider nicht hinbekommen. Twincat zeigt zwar Zeichen an, aber das sind nur Hieroglyphen...
Welche Länge muss ich in Labview angeben, damit die beiden Strings aus dem Array bei Twincat richtig angezeigt werden?
Hallo = 5 Byte
TC = 2Byte
2 mal "Ende-Wert" zu je 1 Byte
Summe: 9 Byte?


LabView.jpgTwinCat3.jpg
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Typdefinition und Längen seitens der PLC:
STRING -> 81 Byte
String(10) -> 11 Byte
String(255) -> 256 Byte

Ich bin nun kein aktiver Nutzer von Labview und kann deshalb nicht sagen ob deine "Strings", also 'Hallo' und 'AB' denn tatsächlich als Strings dort betrachtet werden.
Physikalisch sollte somit ein "Hallo" + ein Byte mit dem Wert 0 und hier somit 6 Byte geschrieben werden. Die restlichen 5 Bytes vom String(10) sind dann vom Inhalt uninteressant bevor du den nächsten Bytestream definiert (das "AB").

Mangels Labview Erfahrung und da des doch limitierten Ausschnitts des Codes kann ich dir aber sonst nicht weiterhelfen.

Guga
 
Kann es sein, dass es da ein Codierungsproblem gibt?
Wandle mal die Strings in LabView und in TwinCat in Byte-Arrays um und schau dir die Rohdaten an.
 
Zurück
Oben