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

Komplexe GDS-Portdefinitionen und -Verbindungen in der IEC-Programmierung meistern

Zusammenfassung

In diesem Artikel erkläre ich, wie man komplexe GDS-Ports wie Datenstrukturen in C++ definiert und sie mit GDS-Ports im IEC-Code verbindet.

Datenstrukturen

Wie man Datenstrukturen deklariert. Schauen wir uns C++ an.

#pragma once
#include "Arp/System/Core/Arp.h"
#include "Arp/Plc/Commons/PlcTypes.h"
namespace MyComponent {
class MyData {
public:
  MyData() = default;
  ~MyData() = default;
public:
  Arp::boolean Valid = false;
  Arp::int16 IntegerValue = 0;
  Arp::Plc::Commons::Gds::StaticString<80> StringValue = "";
  Arp::uint8 Data[8] = {0x00};
};
} // namespace MyComponent

Und im Header der Programmklasse kann dieser Typ nun als GDS-Port definiert werden.

#pragma once
...
#include "MyData.hpp"
namespace MyComponent {
//#program
//#component(MyComponent::MyComponent)
class MyProgramm ... {
  ...
public:
  //#port
  //#name(TheData)
  //#attributes(Input)
  MyData GdsPortMyData;
};
} // namespace MyComponent

Um den GDS-Port mit einem GDS-Port im IEC-Code verbinden zu können, muss die Variable im IEC-Code vom gleichen Typ sein. Das bedeutet, die IEC-Struktur muss dasselbe Datenlayout wie der C++-Datentyp haben. Zusätzlich müssen alle Elementnamen mit den Elementen im C++-Typ übereinstimmen.

TYPE UDT_PROJECT_MY_DATA : STRUCT
  Valid : BOOL;
  IntegerValue : INT;
  StringValue : STRING;
  Data : ARRAY [0..7] OF BYTE;
END_STRUCT
END_TYPE

Ein GDS Out Port vom Typ UDT_PROJECT_MY_DATA kann nun mit dem GDS In Port TheData des C++-Programms verbunden werden.

Besonderer Hinweis zu STRING

Ein besonderer Hinweis zum STRING-Datentyp. Beachten Sie, dass der IEC-Code derzeit nicht UTF-8-Encoding kennt. Die String-Literale verwenden ISO-8859-1-Encoding. Daher kann es notwendig sein, sie in UTF-8 zu konvertieren, bevor man sie mit String-Literalen im C++-Code vergleicht. Sie können die boost-locale-Bibliothek für die Konvertierung zwischen ISO-8859-1 und UTF-8 in beide Richtungen verwenden.

Arp::String toUtf8(const Arp::String& s) {
  return boost::locale::conv::to_utf<char>(s.CStr(), "ISO-8859-1");
}

Industrietechnik

  1. Kostspielige Fehler vermeiden: 7 häufige Pick-and-Pack-Fehler und bewährte Lösungen
  2. Diese sechs häufigen Logistikfehler vermeiden für nahtlosen Lieferketten-Erfolg
  3. US-Lieferketten stärken: Die strategische Rolle von Inland Ports
  4. Die sieben größten Last-Mile-Herausforderungen meistern: Bewährte Lösungen für schnelleren, kosteneffizienten Versand
  5. Vier Arten von Cyberangriffen – Bewährte Präventionsstrategien
  6. Drei zentrale Herausforderungen im Last-Mile-Delivery & bewährte Strategien zu deren Überwindung
  7. Versandfallen vermeiden: 7 häufige Fehler und bewährte Lösungen
  8. Top 4 Schaltanlagen-Ausfallursachen & bewährte Präventionsstrategien
  9. Wesentliche Maschinenausfall-Ursachen identifizieren und Strategien zur Vermeidung von Stillstand
  10. Interoperabilität erklärt: Wie Ihr Unternehmen nahtlose Integration erreicht