Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Industrietechnik

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Hallo zusammen,

In diesem Blogbeitrag erkunden wir einfache und komplexe Datentypen in C++ und PLCnext Engineer. Zwei Teile: einfache und komplexe Übung.

Voraussetzung: Erfahrung mit C++ und PLCnext Engineer.

Benötigte Tools

PLCnext Engineer auf der Website erhältlich.

Einfache Übung

Kleine Applikation: Prüfen, ob die richtige Zahl vom PLC gesendet wird. Neues C++-Projekt anlegen. Header-Datei ([Projektname].hpp) öffnen – [name]component.hpp nicht verwenden. Ports definieren (nur für einfache Datentypen):

//#port
//#attributes(Input)
//#name(InputTest)
int64 InputTest = 0;

//#port
//#attributes(Output)
//#name(OutputTest)
int64 OutputTest = 0;

Im .cpp-File Logik implementieren (If oder Switch):

void PLMProjectReadInputProgram::Execute() {
    if (InputTest == 1) { OutputTest = 15; }
    if (InputTest == 2) { OutputTest = 150; }
    if (InputTest == 3) { OutputTest = 1500; }
    if (InputTest == 4) { OutputTest = 15000; }
}

C++-Projekt zur Library bauen (Build-Button). Unklar? Tutorials oben prüfen.

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

In PLCnext Engineer: Hauptprogramm unter Components → Programming → Local → Variables. Name, Datentyp (muss C++ entsprechen – Zuordnungstabelle hier) und Usage (lokal oder extern) wählen.

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Library einbinden: Library aus bin-Ordner des C++-Projekts nach C:\Users\Public\Documents\PLCnext Engineer\Libraries kopieren. In PLCnext Engineer: Components → Libraries → Rechtsklick → Add user library → Library wählen.

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Programm zu Tasks hinzufügen: Links im Plant-Bereich Doppelklick auf PLCnext → Tasks and Events → neues Programm nach MainInstance hinzufügen (Typ wählen oder aus Components ziehen).

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Im Port list-Tab (neben Tasks and Events) Variablen verbinden: OUT vom PLC an IN des C++-Programms (und umgekehrt). Funktioniert nicht? Datentypen prüfen.

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Dummy-Wert setzen: Hauptprogramm → Code → Variable auf numerischen Wert setzen (hier: 1).

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Projekt auf PLC deployen → Response sollte 15 sein (Port List prüfen).

Komplexe Übung

Applikation sendet Array von Structs hin und her. Neues C++-Projekt, Header ([Projektname].hpp). Struct für Auto definieren:

public: // typedefs
  struct StrCar {
    StaticString<80> sbrand;
    int16 iHorsepower;
    int16 iYear;
    boolean xInsured;
  };

WICHTIG: Namen und Typen in C++ und PLCnext Engineer müssen identisch sein! Datentypen hier.

Ports als Listen von StrCar definieren:

//#port
//#attributes(Input)
//#name(CarIn)
StrCar CarToC[2];

//#port
//#attributes(Output)
//#name(CarOut)
StrCar CarFromC[2];

Im .cpp-File Werte von Auto 1 und 2 ändern:

// Erstes Listenelement = zweites Auto vom PLC
CarFromC[0].sbrand = CarToC[1].sbrand;
CarFromC[0].iHorsepower = CarToC[1].iHorsepower;
CarFromC[0].iYear = CarToC[1].iYear;
CarFromC[0].xInsured = CarToC[1].xInsured;

// Zweites Element mit Dummy-Werten (erstes Auto vom PLC)
CarFromC[1].sbrand = CarToC[0].sbrand;
CarFromC[1].iHorsepower = CarToC[0].iHorsepower;
CarFromC[1].iYear = CarToC[0].iYear;
CarFromC[1].xInsured = CarToC[0].xInsured;

Library bauen (Build).

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

In PLCnext Engineer eigenen Datentyp anlegen: Datatypes-Datei (Pfad siehe Screenshot).

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Struct StrCar anlegen:

TYPE
  StrCar:
  STRUCT
    sBrand: STRING;
    iHorsepower: INT;
    iYear: INT;
    xInsured: BOOL;
  END_STRUCT
END_TYPE

WICHTIG: Namen und Typen müssen mit C++ übereinstimmen!

Array carList desselben Typs in derselben Datei:

TYPE
  carList: ARRAY[0..1] OF StrCar;
END_TYPE

Variable mit Typ carList anlegen: Components → Programming → Programs → Variables → benutzerdefinierten Typ wählen.

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Library einbinden (wie oben: bin → Libraries-Ordner → Add user library).

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Programm zu Tasks hinzufügen (wie oben).

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Im Port list-Tab Variablen verbinden. Nicht klappen? Datentypen und Variablennamen prüfen.

Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern Einfache und komplexe Datentypen in C++ mit PLCnext Engineer meistern

Dummy-Werte für Autos setzen (Datentypen beachten):

CarToC[0].sBrand := 'Audi';
CarToC[0].iHorsepower := 200;
CarToC[0].iYear := 2020;
CarToC[0].xInsured := TRUE;

CarToC[1].sBrand := 'Mazda';
CarToC[1].iHorsepower := 120;
CarToC[1].iYear := 2001;
CarToC[1].xInsured := FALSE;

Nach Deployment sollte die ausgehende Liste in der eingehenden vertauscht sein (Port List prüfen).

Industrietechnik

  1. Cloud-Horizonte erweitern: Neue Zonen, Container und Multicloud-Strategien
  2. Fortgeschrittene Analyse von DC-Reaktivkreisen mit nicht-null Anfangsbedingungen
  3. C# Grundlagen: Eingabe und Ausgabe Essentials
  4. C++ Klassen & Objekte: Praktischer Leitfaden zur objektorientierten Programmierung
  5. C++ Structures vs. Classes: Praktischer Leitfaden für Embedded-Entwickler
  6. C++ Datum & Zeit: Umfassender Leitfaden
  7. Digitales Verfassen von Verfahren: Einfach, effizient und zuverlässig
  8. Sicheren Remote-gRPC-Zugriff mit grpcurl auf PLCnext-Geräten
  9. PLCnext Konsolenanwendung mit C# entwickeln: Einsteigerleitfaden
  10. APT-Paketmanager auf PLCnext Linux installieren: Schritt-für-Schritt-Anleitung