TwinCAT Samples LabVIEW Übersicht

NI LabVIEW und TwinCAT ADS :: Übersicht

Anwendungsbeispiele TwinCAT ADS DLL

Beschreibung | Quelltexte
SPS Projekt für alle Beispiele | PLC_Demo.pro
Beispiel 1: DLL-Version auslesen | Sample 001.zip
Beispiel 2: Merker synchron in SPS schreiben | Sample 002.zip
Beispiel 3: Merker synchron aus der SPS lesen | Sample 003.zip
Beispiel 4: ADS-Status auslesen | Sample 004.zip
Beispiel 5: ADS-Information auslesen | Sample 005.zip
Beispiel 6: SPS starten/stoppen | Sample 006.zip
Beispiel 7: Zugriff auf ein Array in der SPS per Name | Sample 007.zip

Anwendungsbeispiele TwinCAT ADS OCX

Beschreibung | Quelltexte
SPS Projekt zum Testen der Sample-vi's | PLC_Demo.pro
Beispiel 1: AdsState lesen | Sample 001.zip
Beispiel 2: Variable per Adresse synchron lesen | Sample 002.zip
Beispiel 3: Variable per Name synchron lessen | Sample 003.zip
Beispiel 4: Variable per Adresse synchron schreiben | Sample 004.zip
Beispiel 5: Variable per Name synchron schreiben | Sample 005.zip
Beispiel 6: Callback-vi registrieren für ereignisgesteuertes Lesen | Sample 006.zip
Beispiel 7: Variable ereignisgesteuert lesen | Sample 007.zip
Beispiel 8: Strukturvariablen ereignisgesteuert lesen | Sample 008.zip
Beispiel 9: Strukturvariablen ereignisgesteuert lesen mit Referenzübergabe an das Callback-vi | Sample 009.zip
Beispiel 10: Auslesen des IndexGroup und IndexOffset zu einem Variablennamen | Sample 010.zip

Anwendungsbeispiele TwinCAT ADS .NET

Beschreibung | Quelltexte
Beispiel 1: Zugriff auf ein Array in der SPS | Sample 01.zip
Beispiel 2: Übertragen von Strukturen an die SPS | Sample 02.zip
Beispiel 3: Ereignisgesteuertes Lesen | Sample 03.zip
Beispiel 4: Lesen und Schreiben von String-Variablen | Sample 04.zip
Beispiel 5: Lesen und Schreiben von DATE/TIME-Variablen | Sample 05.zip
Beispiel 6: SPS Variablen-Deklaration auslesen | Sample 06.zip
Beispiel 7: Lesen und Schreiben von SPS Variablen eines beliebigen Typs (ReadAny, WrtieAny) | Sample 07.zip


TwinCAT TcAdsDll: Einbinden in LabView

TwinCAT TcAdsDLL: Referenz

Einbinden in LabView

notwendige Dateien

  • TcAdsDll.dll - Dynamische Funktions-Bibliothek

Die TcAdsDll.dll befindet sich im ‚System32'-Verzeichnis von Windows.

LabView Funktion: Call Library Function

Konfiguration des Dll-Aufrufs

Library Name or Path

Über den Button "Browse..." oder direkt wird der Pfad der TcAdsDll eingetragen.

Function Name

Nach der Auswahl der TcAdsDll lässt sich die aufzurufende Dll-Funktion auswählen.

Calling Conventions

Es wird die Aufrufkonvention stdCall verwendet

Parameter

Die Parameterliste muss an die aufzurufende Funktion angepasst werden. Über die Buttons 'Add a Parameter Before', 'Add a Parameter After' und 'Delete this Parameter' wird die Parameterliste des Aufrufs vervollständigt. Anschließend werden die Datentypen der Aufrufparameter angepasst. Bei Pointer-Übergabe von Strukturen wird der Typ 'Adapt to Type' und Format 'Handles by Value' ausgewählt.

Beispiel: Parameter pAddr der Funktion AdsSyncReadReq

Function Prototype

Der Funktionsprototyp der Aufgerufenen Funktion muss mit dem Funktionsprototypen der TcAdsDll übereinstimmen. Die Funktionsprototypen sind in der Dokumentation der TcAdsDll-Funktionen aufgeführt.

Beispiel für die Funktion AdsSyncReadReq

C Deklaration:

LONG AdsSyncReadReq(
  PAmsAddr  pAddr,
  ULONG     nIndexGroup,
  ULONG     nIndexOffset,
  ULONG     nLength,
  PVOID     pData
);

LabView:

Strukturen

Für alle bei den Funktionsaufrufen verwendeten Strukturen werden im LabView entsprechende Cluster gebildet.

AmsNetId

C Deklaration:

typedef struct {
  UCHAR        b[6];
} AmsNetId, *PAmsNetId;

Wird in LabView als Cluster aus 6 x U8 Werten gebildet:

AmsAdr

C: Deklaration

typedef struct {
  AmsNetId        netId;
  USHORT          port;
} AmsAddr, *PAmsAddr;

Wird in LabView als Cluster aus AmsNetId und einem U16 Wert gebildet:

Aus dem so gebildeten Cluster kann natürlich auch ein LabView-Control, z.B. für Adresseingaben gebildet werden:

Parameterübergabe

Bei der Parameterübergabe ist es sehr wichtig, dass an den Dll-Aufruf für alle Parameter Variablen übergeben werden. Insbesondere an die in der Dokumentation mit [out] gekennzeichneten Parameter müssen unbedingt entsprechende Platzhaltervariablen übergeben werden, damit entsprechend Speicher reserviert wird. Falsche Parameterübergabe verursacht Speicherschutzverletzungen und kann das LabView-System zum Absturz bringen!


TwinCAT TcAdsDLL: LabView Beispiel 1

TwinCAT TcAdsDLL: Beispiele

DLL-Version auslesen

Dieses Programm ermittelt die Version der DLL-Datei.

Beispielprogramm 'DLL-Version auslesen' entpacken.


TwinCAT TcAdsDLL: LabView Beispiel 2

TwinCAT TcAdsDLL: Beispiele

Merker synchron in die SPS schreiben

Bei diesem Beispielprogramm wird der Wert, den der Bediener eingegeben hat, in das Merkerwort 502 geschrieben.

Beispielprogramm 'Merker synchron in SPS schreiben' entpacken.


TwinCAT TcAdsDLL: LabView Beispiel 3

TwinCAT TcAdsDLL: Beispiele

Merker synchron aus der SPS lesen

Bei diesem Beispielprogramm wird der Wert aus dem Merkerwort 2 der SPS ausgelesen und am Bildschirm angezeigt.

Beispielprogramm 'Merker synchron aus SPS lesen' entpacken.


TwinCAT TcAdsDLL: LabView Beispiel 4

TwinCAT TcAdsDLL: Beispiele

ADS-Status auslesen

Dieses Programm ließ den Status der SPS aus. Die Variable vom Typ ADSSTATE enthält Informationen, ob sich z.B. die SPS im RUN oder STOP Zustand befindet.

Beispielprogramm 'ADS-Status auslesen' entpacken.


TwinCAT TcAdsDLL: LabView Beispiel 5

TwinCAT TcAdsDLL: Beispiele

ADS-Informationen auslesen

Jedes ADS-Gerät enthält eine Versionsnummer und eine Bezeichnung. Das Beispielprogramm liest diese Informationen der SPS aus und zeigt sie am Bildschirm an.

Beispielprogramm 'ADS-Informationen auslesen' entpacken.


TwinCAT TcAdsDLL: LabView Beispiel 6

TwinCAT TcAdsDLL: Beispiele

SPS starten/stoppen

Mit dem folgenden Programm wird das Laufzeitsystem 1 der SPS gestartet, bzw. gestoppt.

Beispielprogramm 'SPS starten/stoppen' entpacken.


TwinCAT TcAdsDLL: LabView Beispiel 7

TwinCAT TcAdsDLL: Beispiele

Zugriff per Name auf ein Array in der SPS

Ein Array, welches sich in der SPS befindet, soll mit einen Lesebefehl ausgelesen werden. Die Variable wird hierbei per Variablenname angesprochen. Die Vorgehensweise weicht nur geringfügig von dem Auslesen diskreter Variablen ab. Bei der Funktion AdsSyncReadReq() wird als Länge die Länge des gesamten Arrays angegeben.

Beispielprogramm 'Zugriff per Name auf ein Array in der SPS' entpacken.


Einbinden in LabView

  1. ActiveX Container erstellen

  2. ActiveX Object einfügen

  3. AdsOcx Element in LabView

    Panel:

    Diagramm:


Anwendungsbeispiele mit AdsOcx Eigenschaften

  1. EnableErrorHandling auf True setzen

  2. AdsAmsServerNetId und AdsAmsServerPort auf feste Werte setzen.

  3. Zugriff auf lokale PLC durch auslesen und setzen der AmsNetId

  4. Überwachung des Zustands des ADS-Gerätes (s. Sample 001.zip)


Synchrone Methoden, Lesen per Adresse

AdsSyncReadBoolReq,

AdsSyncReadIntegerReq,

AdsSyncReadLongReq,

AdsSyncReadSingleReq,

AdsSyncReadDoubleReq,

AdsSyncReadStringReq

Beispiel: AdsSyncReadBoolReq

PLC-Deklaration:

    TCtoLV_boolVal AT%MX0.0: BOOL;

LabView (s. Sample 002.zip):


Synchrone Methoden, Lesen per Name

AdsSyncReadBoolVarReq

AdsSyncReadIntegerVarReq

AdsSyncReadLongVarReq

AdsSyncReadSingleVarReq

AdsSyncReadDoubleVarReq

AdsSyncReadStringVarReq

Beispiel: AdsSyncReadBoolVarReq

PLC-Deklaration:

    TCtoLV_boolVal AT%MX0.0: BOOL;

LabView: (s. Sample 003.zip)


Synchrone Methoden, Schreiben per Adresse

AdsSyncWriteBoolReq

AdsSyncWriteIntegerReq

AdsSyncWriteLongReq

AdsSyncWriteSingleReq

AdsSyncWriteDoubleReq

AdsSyncWriteStringReq

Beispiel: AdsSyncWriteBoolReq

PLC-Deklaration:

    LVtoTC_boolVal AT%MX500.0: BOOL;

LabView: (s. Sample 004.zip)


Synchrone Methoden, Schreiben per Name

AdsSyncWriteBoolVarReq

AdsSyncWriteIntegerVarReq

AdsSyncWriteLongVarReq

AdsSyncWriteSingleVarReq

AdsSyncWriteDoubleVarReq

AdsSyncWriteStringVarReq

Beispiel: AdsSyncWriteBoolVarReq

PLC-Deklaration:

    LVtoTC_boolVal AT%MX500.0: BOOL;

LabView: (s. Sample 005.zip)


Ereignisgesteuertes Lesen, Registrieren eines Callback-vi

Beispieldateien: Sample 006.zip,

  1. Um eine asynchrone Methode zu verwenden, wird ein Callback-Vi registriert, das vom AdsOcx aufgerufen wird.

  2. Das Event Element wird mir der AdsOcx Referenz verbunden, und das aufzurufende Ereignis ausgewählt.

  3. Das Callback-Vi muss eine ganz bestimmte Parameterstruktur aufweisen. Man kann das Callback-Vi von LabView erstellen lassen.

  4. Das Event-Callback-vi sollte anschließend unter einem eindeutigen Namen abgespeichert werden.


Ereignisgesteuertes Lesen

TwinCAT ADS-OCX Integration in LabView

Ereignisgesteuertes Lesen, einfache Datentypen

Methode: AdsReadVarConnectEx

Beispiel:

Sample 007.zip

PLC-Deklaration:

    TCtoLV_boolVal AT%MX0.0: BOOL;

Für das Event AdsReadConnectUpdateEx wird ein Callback-Vi registriert.

Die Methode AdsReadVarConnectEx stellt eine feste Verbindung zwischen LabView und einer SPS-Variablen. Das zurückgelieferte Handle identifiziert die Verbindung. Wenn die Verbindung nicht mehr benötigt wird, wird sie mit AdsDisconnectEx gelöst.

Die Daten werden beim Aufruf des Callback-Vi als Variant übertragen. Anhand des Handles können die Variablen in den richtigen Typ umgewandelt und der richtigen globalen LabView Variablen zugewiesen werden.


Ereignisgesteuertes Lesen

TwinCAT ADS-OCX Integration in LabView

Ereignisgesteuertes Lesen, Strukturvariablen

Methode: AdsReadVarConvertConnect

Beispieldateien :

Sample 008.zip,

TwinCAT Deklaration:

    TYPE ST_DataExchange :

    STRUCT arrBool:

        ARRAY[0..63] OF BOOL;

        arrInt: ARRAY[0..63] OF INT;

        arrReal: ARRAY[0..63] OF REAL;

    END_STRUCT END_TYPE

    stTCtoLV AT%MB1000: ST_DataExchange;

  1. Callback-Vi für die Ereignismethode AdsReadConvertConnectUpdate registrieren

  2. Globale Variablen:
    - Cluster-Variable als Abbildung der TwinCAT-Struktur erstellen.
    - globale Handle-Variable für die Unterscheidung der Events

  3. Initialisieren der Datenstruktur als Abbildung der TwinCAT-Struktur

  4. Herstellen der Datenverbindung und speichern des Handles der Verbindung

  5. Zyklischer Zugriff auf die globalen Daten und Löschen der Verbindung

  6. Eventbehandlung im Callback-Vi
    Anhand des übergebenen Handles hConnect kann das Callback-Vi entscheiden, für welche Variable das Event aufgerufen wurde und den in Data übergebenen Wert der richtigen Variablen zuweisen.


Ereignisgesteuertes Lesen

TwinCAT ADS-OCX Integration in LabView

Ereignisgesteuertes Lesen mit Daten-Referenzübergabe an Callback-vi

Wenn nur eine Variable per Connect gelesen wird, kann die Referenz auf die Variable an das Callback-Vi übergeben werden. Die Verwendung von globalen Variablen erübrigt sich dadurch. Das Callback-vi schreibt per Referenz direkt auf die Variable des aufrufenden Vi.

Beispieldateien: Sample 009.zip

  1. Ein LabView-Anzeigeelement vom richtigen Typ wird erstellt und initialisiert

  2. Erstellen der Referenz auf das Element

  3. Übergabe der Referenz an das CallbackVi

  4. Zugriff auf die Referenzvariable im Callback-Vi
    Die Typenlose Variant-Variable muss in den richtigen Datentyp gewandelt werden, und dann an die Referenz-Variable übergeben.


Allgemeine Methoden

  1. Methoden AdsCreateVarHandle und AdsDeleteVarHandle werden verwendet, um auf PLC-Variablen per Name zuzugreifen
    PLC-Deklaration:
    TCtoLV_boolVal AT%MX0.0: BOOL;
    LabView:

  2. Methoden AdsAmsConnect und AdsAmsDisconnect
    Werden in der Start- bzw. Endphase aufgerufen, um das AdsOcx am Router an- bzw. vom Router abzumelden.

    Wenn das AdsOcx per AdsAmsDisconnect vom Router abgemeldet wurde, muss vor dem nächsten Aufruf einer AdsOcx-Methode AdsAmsConnect aufgerufen werden oder LabView neu gestartet werden.

  3. Die Methode AdsReadSymbolDesc
    Mit der Methode AdsReadSymbolDesc lassen sich zur Laufzeit Informationen zu einer benannten SPS-Variablen auslesen. So können z.B. die Adressdaten nIndexGroup und nIndexOffset gelesen werden, um dann per Adresse (evtl. auch mit der TcAdsDll) auf die Variable zuzugreifen. (s. Sample 010.zip)


Einbinden in LabView

Um ein TwinCAT.Ads Objekt in einem LabView Programm verwenden zu können müssen Sie aus der Palette .NET-Funktionen einen Konstruktorknoten in das Blockdiagramm einfügen.
Der Konstruktorknoten gibt eine Referenz auf ein .NET-Objekt aus. Die Palette .NET-Funktionen beinhaltet darüber hinaus Eigenschaftsknoten zum Festlegen oder Abfragen der Eigenschaften eines Objekts und Methodenknoten zum Aufrufen einer Methode an dem Objekt, das anhand der Referenz angegeben ist.

Nach dem Einfügen oder später nach einem Doppelklick auf den Konstruktorknoten öffnet sich ein Dialog, mit dem Sie das .Net Assembly TwinCAT.Ads.dll und das Objekt TcAdsClient auswählen können.

Eine Verbindung zu einem Ads-Gerät herstellen:

Lesen einer SPS-Variablen:

Die Daten werden mit Hilfe der AdsStream Klasse übermittelt. Für das Lesen der Daten aus dem Stream ist die Klasse Klasse AdsBinaryReader verantwortlich.

Schreiben einer SPS-Variablen:

Um Daten in Stream zu schreiben, können Sie Klasse AdsBinaryWriter verwenden.

Eine Verbindung zu einem Ads-Gerät trennen:


Zugriff auf ein Array in der SPS

Systemvoraussetzungen

  • LabView 8.5 oder höher

Hier können Sie die kompletten Sourcen zum Beispielprogramm entpacken.


Übertragen von Strukturen an die SPS

Systemvoraussetzungen

  • LabView 8.5 oder höher

Hier können Sie die kompletten Sourcen zum Beispielprogramm entpacken.


Ereignisgesteuertes Lesen

Systemvoraussetzungen

  • LabView 8.5 oder höher

Hier können Sie die kompletten Sourcen zum Beispielprogramm entpacken.


Lesen und Schreiben von String-Variablen

Systemvoraussetzungen

  • LabView 8.5 oder höher

Hier können Sie die kompletten Sourcen zum Beispielprogramm entpacken.


Lesen und Schreiben von DATE/TIME-Variablen

Systemvoraussetzungen

  • LabView 8.5 oder höher

Hier können Sie die kompletten Sourcen zum Beispielprogramm entpacken.


SPS Variablen-Deklaration auslesen

Systemvoraussetzungen

  • LabView 8.5 oder höher

Hier können Sie die kompletten Sourcen zum Beispielprogramm entpacken.


Lesen und Schreiben von SPS Variablen eines beliebigen Typs (ReadAny, WriteAny)

Systemvoraussetzungen

  • LabView 8.5 oder höher

Hier können Sie die kompletten Sourcen zum Beispielprogramm entpacken.