Details: Vendor-Baustein erstellen

So erstellen Sie einen →Vendor-Baustein:

  1. Erstellen Sie ein neues ST-Objekt im Projekt: Öffnen Sie z. B. das Kontextmenü, wählen Sie Neu und ST-Objekt. Geben Sie im Dialog einen beliebigen Objektnamen ein. In dieser Anweisung wird der Name TestVendor für das ST-Objekt verwendet.

  2. Kopieren Sie den folgenden Code und fügen Sie ihn in den geöffneten Editor für das ST-Objekt ein. images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/warning.svg Speichern Sie den eingefügten Code noch nicht.

    {CustomImplementation}
    NAMESPACE com.oem1.lib1
    FUNCTION TestVendor01
    { ImplementationProperties (functionHasCFile; ) }
    VAR_INPUT
    in1 : INT;
    in2 : BOOL;
    END_VAR
    VAR_OUTPUT
    out1 : BOOL;
    END_VAR
    END_FUNCTION
    END_NAMESPACE

    Erläuterung der Angaben, die für einen Vendor-Baustein erforderlich sind:

    Ersatz- oder Zusatz-Anweisung

    Zweck

    {CustomImplementation}

    Diese Anweisung macht den Baustein zum Vendor-Baustein, der für eine Bibliothek verwendet werden soll.
    images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Aufgrund dieser Anweisung bezeichnet logi.cals die Vendor-Bausteine in C-Code auch als CustomImpl-Bausteine in der Umgangssprache.

    FUNCTION TestVendor01
    { ImplementationProperties (functionHasCFile; ) }

    functionHasCFile ist ein optionales Schlüsselwort. Dieses Schlüsselwort ist nur erforderlich, wenn Ihr Vendor-Baustein Ihren eigenen C-Code verwendet. Die Anweisung geht davon aus, dass dies der Fall ist.
    Die Schlüsselwörter wären nicht erforderlich, wenn ein Vendor-Baustein nur durch Makros in der H-Datei realisiert wird.

    images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Die Anweisung { ImplementationProperties ( ) } kann auch andere Schlüsselwörter enthalten. Siehe "Eigenschaften für das Implementieren von Vendor-Bausteinen" für diese Möglichkeiten.

  3. Passen Sie den Code wie gewünscht an.
    Beachten Sie das Folgende:

    • logi.cals empfiehlt die Verwendung eines Namespace, wie im obigen Code angegeben. Passen Sie einfach den Namen com.oem1.lib1 an Ihre Bedürfnisse an. Geben Sie den Namespace immer an, bevor Sie das ST-Objekt speichern, da der Namespace Teil der C-Struktur und des Funktionsnamens ist.

    • Wenn Sie einen Vendor-Funktionsbaustein anstelle einer Vendor-Funktion erstellen wollen, ändern Sie das Schlüsselwort FUNCTION in FUNCTION_BLOCK und das Schlüsselwort END_FUNCTION in END_FUNCTION_BLOCK.

    • Passen Sie den Rest des Codes so an, dass er Ihren Bedürfnissen entspricht: Ändern Sie zum Beispiel die Namen der Funktion oder des Funktionsbausteins, der Eingänge und der Ausgänge. Oder ändern Sie den Datentyp der Eingänge und der Ausgänge. Oder fügen Sie neue Eingänge und Ausgänge hinzu, wie sie aus dem ST-Editor bekannt sind.
      logi.cals empfiehlt Ihnen, alle Arten von Variablen in der Schnittstelle zu deklarieren – vor allem, wenn der Wert der Variablen für den Baustein von einer Ausführung der Anwendung zur nächsten erhalten bleiben soll. So vermeiden Sie Probleme, die andernfalls beim Aktualisieren einer geänderten Anwendung mit Hilfe des Ressourcen-Managers (auch als Reload der Anwendung bekannt) auftreten könnten.

      Falls Sie Variablen nur in einer C-Datei deklarieren und nachträgliche Änderungen der Baustein-Logik erforderlich werden, empfiehlt Ihnen logi.cals, einen neuen Baustein mit der geänderten Logik zu erstellen – anstatt den Baustein tatsächlich zu ändern. In Folge ist es weiterhin möglich, den Ressourcen-Manager zum Aktualisieren der geänderten Anwendung zu verwenden.
      Eine Änderung von Bausteinen mit Variablen, die nur in der C-Datei enthalten sind, wird von logi.CAD 3 nicht verhindert. Falls Sie solche Änderungen durchführen und den Ressourcen-Manager zum Aktualisieren der geänderten Anwendung verwenden, können unerwartete Fehler auftreten. So kann die Anwendung falsch ausgeführt oder terminiert werden, möglicherweise wird sogar die SPS terminiert. In solchen Fällen wird am besten die Anwendung neu erstellt und danach auf die SPS geladen.

  4. Speichern Sie das ST-Objekt erst, wenn der Code vollständig ist.
    images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/warning.svg Wenn Sie das ST-Objekt bereits vor der Fertigstellung des Codes gespeichert haben, ist es wahrscheinlich, dass das Objekt nicht mit den erzeugten Dateien übereinstimmt. Beispiel: Sie haben eine CustomImplementation-Funktion mit einem Datentyp als Ergebniswert dieser Funktion deklariert, das ST-Objekt gespeichert und danach den Datentyp in der Funktion verwendet und diese Änderung gespeichert. In diesem Fall werden beim 1. Speichern die C-/H-Dateien mit den Implementierungs-Stubs erzeugt, beim 2. Speichern werden die C-/H-Dateien mit den Implementierungs-Stub nicht aktualisiert. In diesem Fall müssen Sie die automatisch erzeugten Dateien auf einen anderen eindeutigen Namen umbenennen (falls Sie bereits Ihren Code in diesen C-/H-Dateien erfasst haben) oder diese Dateien löschen (falls Sie noch keinen Code in diesen C-/H-Dateien erfasst haben). Dann speichern Sie das ST-Objekt erneut, um sicherzustellen, dass die erzeugten Dateien die richtigen Implementierungs-Stubs enthalten. Falls Sie die zuerst erzeugten C/H-Dateien umbenannt haben: Übertragen Sie noch Ihren Code in die neu erzeugten C-/H-Dateien und löschen Sie die umbenannten C-/H-Dateien.
    In diesem Fall löschen Sie jene Dateien, die wie unten beschrieben erzeugt werden. Speichern Sie dann das ST-Objekt erneut, um sicherzustellen, dass die erzeugten Dateien die richtigen Implementierungs-Stubs enthalten.

    Ergebnis (falls die Implementierungs-Stubs noch nicht erzeugten wurden): logi.CAD 3 erzeugt 2 Dateien mit den erforderlichen Implementierungs-Stubs.

    Datei

    Name der Datei für den obigen Code

    Details

    die C-Datei

    lcfu___COM.OEM1.LIB1.TESTVENDOR01.c

    Diese Datei wird nur automatisch generiert, wenn functionHasCFile angegeben wurde.

    die H-Datei

    lcfu___COM.OEM1.LIB1.TESTVENDOR01.h

    Wenn Sie sich für die grundlegende Struktur einer H-Datei interessieren, lesen Sie den Artikel "Die Struktur der benötigten H-Datei".

    images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg Diese Dateien befinden sich in dem neu erstellten Ordner src-code auf der gleichen Ebene wie das ST-Objekt. Achten Sie auf die Großbuchstaben der Bausteinnamen in den Dateinamen. Dies ist wichtig, wenn Sie die erstellte Bibliothek mit dem Vendor-Baustein auf einem Linux-Rechner verwenden. Wenn Sie die Bibliothek nur auf einem Windows-Rechner verwenden, spielt es keine Rolle, dass die POE-Namen Kleinbuchstaben (in den Dateinamen) enthalten.
    Wenn der Ordner src-code nicht sichtbar ist und Sie dies bevorzugen, muss der Wert für die Konfigurationsvariable lc3.src_code.filter.enable geändert werden. Kontaktieren Sie Ihren logi.CAD 3-Administrator für diese Konfigurationsänderung.

  5. Schließen Sie den Editor für das ST-Objekt.

  6. Empfohlen: Bereinigen Sie das Projekt.

  7. Beginnen Sie, den benötigten Code zu erstellen: Geben Sie den C-Code in der C-Datei ein und/oder geben Sie die Makros in der H-Datei ein.
    Beachten Sie dabei Folgendes:

    1. Wenn Sie Variablen mit einem →allgemeinen Datentyp in der Schnittstelle des Vendor-Bausteins deklarieren, müssen Sie auch die automatisch generierten Implementierungs-Stubs anpassen und/oder die Anweisung { ImplementationProperties ( ) } und einige deren Definitionen innerhalb der Schnittstelle verwenden.

    2. Wenn Sie Funktionen einer Bibliothek im C-Code des Vendor-Bausteins aufrufen, müssen Sie das Pragma { FunctionReferences } in der Schnittstelle verwenden.

    3. Verwenden Sie POE-eindeutige Namen (wenn möglich, sogar projekt- und POE-eindeutig) für alle C-Identifier, die in einem globalen Namespace verfügbar sind. Details zum Grund dafür finden Sie unter "Grundregeln für das Arbeiten", Abschnitt "Beim Erstellen von Bausteinen mit C-Code".

Die folgenden Artikel unterstützen Sie bei der Erstellung der H-Datei und der Verwendung der Anweisungen/Pragmas in der Schnittstelle:

Siehe "Eigene Bibliothek mit dem Vendor-Baustein erstellen", wenn Sie den Vendor-Baustein in einer Bibliothek bereitstellen wollen.