DLL-Datei für WinCC erstellen (C-Script)

Zur Erweiterung des Funktionsumfangs der C-Scripte in WinCC können eigene DLL-Dateien erstellt werden.

Die DLL-Dateien können eine oder mehrere Funktionen beinhalten, die dann in WinCC verwendet werden können. Mit Hilfe eines Compilers werden die DLL-Dateien erzeugt. Als Programmiersprachen für die DLL-Dateien für WinCC können z.B. ANSI C oder C++ verwendet werden. In dem Beispiel wird GNU Compiler Collection (GCC, MinGW) verwendet.

Sinnvoll ist die Erstellung von DLL-Dateien zum Beispiel, wenn etwas komplexere Funktionen im WinCC-C-Script benötigt werden (z.B. Datenbankzugriffe (MySQL, SQLite etc.) oder die Anbindung an andere Systeme). Über die DLL-Dateien können aber auch weitere Bibliotheken, die in WinCC nicht vorhandenen sind, eingebunden werden („third party libraries“).

Beispielsweise soll die folgende, einfache Funktion in eine DLL-Datei kopiert werden:

int Test(int iZahl)
{
    return iZahl+42;
}

Die Funktion gibt die übergebene Zahl um 42 erhöht zurück.

Die Funktion wird mit Hilfe eines einfachen Texteditors in der Datei test.c gespeichert und um einen Befehl ergänzt, der das Aufrufen über WinCC ermöglicht, erweitert:

__declspec (dllexport) int Test(int iZahl)
{
    return iZahl+42;
}

Die Datei test.c kann jetzt mit den Befehlen in eine DLL test.dll kompiliert werden:

gcc -c test.c

gcc -shared -o test.dll test.o

Wird die Funktion in C++ geschrieben, muss vor dem __declspec ein extern "C" stehen und das Kompiliern erfolgt mit g++ statt mit gcc.

In WinCC kann dies Funktion jetzt wie folgt verwendet werden (z.B. unter dem Mausklick eines Buttons):

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
  #pragma code ("c:\\test.dll") // Beliebiger Pfad zur DLL-Datei
  int Test(int iZahl);
  #pragma code ()

  printf("Ergebnis: %d\n", Test(27));
}

Im Diagnosefenster wird nun der folgende Text ausgegeben:

Ergebnis: 69

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert