Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Industriële technologie

Eenvoudige en complexe datatypes gebruiken in C++

Hallo allemaal,

In deze blogpost gaan we in op eenvoudige en complexe datatypes in C++ en PLCnext Engineer. Het zal twee afzonderlijke delen bevatten, een eenvoudige en complexe oefening.

Deze tutorial gaat ervan uit dat je enige ervaring hebt met C++ en PLCnext Engineer.

begin

Allereerst heb je de juiste tools voor de klus nodig, een C++ editor, de PLCnext Engineer software en een Phoenix Contact PLC om dit op te laten draaien. Dit zijn de materialen die ik heb gebruikt:

  • AXC F 2152 op firmwareversie 2021.0.3
  • PLCnext Engineer versie 2021.0.2
  • Visual studio 2019-community versie 16.9.4

Ik heb persoonlijk voor Visual Studio gekozen als mijn C++-editor, maar Eclipse kan ook worden gebruikt. De links naar de Tutorials zijn hier te vinden:

  • Visual Studio
  • Verduistering

Wat PLCnext Engineer betreft, deze is te vinden op onze website.

Eenvoudige oefening

Voor dit eerste voorbeeld gaan we een kleine applicatie maken die controleert of het juiste nummer vanuit de PLC wordt verzonden. Maak eerst een nieuw C++-project. Dan gaan we naar het header-bestand, de naam zou er ongeveer zo uit moeten zien [NameOfTheProject].hpp, er zijn ook bestanden met de naam [nameOfTheProject]component.hpp die we niet zullen gebruiken. Als je eenmaal in het header-bestand bent, zal er een muur van code voor je zijn, maar maak je geen zorgen, het zal eenvoudig zijn. Ten eerste zullen we de poorten definiëren, één IN en één OUT. Ze kunnen als volgt worden gedefinieerd, houd er rekening mee dat dit alleen voor eenvoudige gegevenstypen is:

//#poort
//#attributes(invoer)
//#naam (InputTest)
int64 InputTest =0;


//#poort
//#attributen (uitvoer)
//#name(outputTest)
int64 UitvoerTest =0;

Daarna gaan we naar het volgende bestand waar we de eigenlijke codering gaan doen. Dit moet [NameOfTheProject].cpp heten en mag niet veel bevatten. Daar gaan we snel genoeg verandering in brengen. Laten we wat code toevoegen om te controleren op nummers, hetzij met behulp van If's of een schakelkast, dat is aan jou. Ik heb if-structuren gebruikt in deze:

void PLMProjectReadInputProgram::Execute()void PLMProjectReadInputProgram::Execute(){
if (InputTest ==1) {
UitvoerTest =15;}


if (InputTest ==2) {
UitvoerTest =150;}


if (InputTest ==3) {
UitvoerTest =1500;}


if (InputTest ==4) {
UitvoerTest =15000;}

}

Voordat we naar de PLCnext-engineer gaan, moeten we van dit C++-project een bibliotheek maken die de PLC kan begrijpen. Dit doe je door boven aan het scherm op bouwen te klikken. Dit zou een tijdje moeten werken en zal u vertellen wanneer de bibliotheek voltooid is. Als deze stap onduidelijk is, raad ik je ten zeerste aan om de bovenstaande tutorials te bekijken.

Navigeer naar het hoofdprogramma op het tabblad componenten onder programmeren in de map 'Lokaal' en selecteer vervolgens variabelen in het hoofdscherm om de variabelen in de PLC te zien. Hier kunnen we een naam en een datatype en het gebruik kiezen. Datatypes in PLCnext engineer moeten hetzelfde zijn als in het C++ programma een link naar de verschillende types en hun gelijken vind je hier. Gebruik bepaalt of de variabelen lokaal zijn of kunnen worden gebruikt om gegevens van externe programma's of variabelen te verzenden en ontvangen.

Nadat we dit hebben gedaan, zullen we beginnen met het verbinden van de variabelen nadat we de nieuwe bibliotheek hebben toegevoegd. Dit kan als volgt worden gedaan:

De bibliotheek die u hebt gemaakt, kunt u vinden in de bin-map van uw project, kopieer deze naar de bibliothekenmap voor PLCnext engineer. De locatie ziet er ongeveer zo uit:

C:\Users\Public\Documents\PLCnext Engineer\Libraries

Daarna gaan we terug naar PLCnext engineer om de bibliotheek aan ons programma toe te voegen. We gaan naar het tabblad Componenten, openen het vak bibliotheken en klikken met de rechtermuisknop op bibliotheken. Klik vervolgens op 'gebruikersbibliotheek toevoegen'. Dit brengt u naar de bibliothekenmap waar we eerder naar toe gingen. Kies de bibliotheek die je wilt gebruiken en ga verder.

Zodra dit is gebeurd, moeten we het programma aan de taken toevoegen, wat als volgt wordt gedaan. Dubbelklik op PLCnext aan de linkerkant van het scherm in het plantengebied. Het zou in het midden moeten openen. Ga dan naar het tabblad ‘taken en evenementen’ en voeg een nieuw programma toe na de MainInstance. Dit kan op twee manieren worden gedaan, door ofwel het programmatype te selecteren of het te slepen vanuit het componentengebied onder 'PLCnext Components &Programs'.

Dan zouden de variabelen moeten verschijnen op het tabblad 'Poortlijst' naast het tabblad 'taken en gebeurtenissen'. Open dit om te worden begroet door al uw variabelen uit C++ en PLCnext. Het zou er ongeveer zo uit moeten zien:

Als je alles goed hebt gedaan, zou je de OUT-poorten van je PLC moeten kunnen verbinden met de IN-poort van het C++-programma, andersom kan ook en zou er ongeveer zo uit moeten zien. Als dit niet werkt, probeer dan uw gegevenstypen te controleren.

Om een ​​dummy-waarde aan onze variabele toe te voegen, gaan we naar het hoofdprogramma op het tabblad Componenten en selecteren vervolgens code in het hoofdscherm om de code te zien en enkele van onze eigen code toe te voegen. We zullen de variabele die uitgaat gewoon instellen op een numerieke waarde, in dit geval 1.

Laten we nu het project implementeren op de plc en we zouden 15 moeten krijgen als antwoord van de C++-code. U kunt de variabelen in de 'Poortenlijst' van eerder zien.

Complexe oefening

Voor dit voorbeeld zullen we een kleine applicatie maken die een reeks structs van en naar de PLC zal sturen. Maak eerst een nieuw C++-project. Dan gaan we naar het header-bestand, de naam zou er ongeveer zo uit moeten zien [NameOfTheProject].hpp, er zijn ook bestanden met de naam [nameOfTheProject]component.hpp die we niet zullen gebruiken. Als je eenmaal in het header-bestand bent, zal er een muur van code voor je zijn, maar maak je geen zorgen, het zal eenvoudig zijn. Allereerst moeten we een structuur maken voor dit voorbeeld zullen we een structuur voor een auto maken. Dit gaat als volgt:

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

!BELANGRIJK! De namen en typen in C++ en PLCnext engineer moeten hetzelfde zijn! Gegevenstypen zijn hier te vinden.

Vervolgens zullen we de poorten definiëren, één IN en één OUT, omdat het lijsten met gegevens zijn die ze als zodanig maken. Ook belangrijk is om er een lijst van ‘auto’s’ van te maken. Dit gaat als volgt:

//#poort
//#attributes(Invoer)
//#name(CarIn)
StrCar CarToC[2];

//#poort
//#attributes(Uitvoer)
//#name(CarOut)
StrCar CarFromC[2];

Daarna gaan we naar het volgende bestand waar we de eigenlijke codering gaan doen. Dit moet [NameOfTheProject].cpp heten en mag niet veel bevatten. Daar gaan we snel genoeg verandering in brengen. Hier veranderen we de waarden van auto één en auto twee.

//Stel het eerste lid van de autolijst gelijk aan de auto van de 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;

//Voeg dummy-waarden toe aan het tweede lid
CarFromC[1].sbrand =CarToC[0].sbrand;
CarFromC[1].iHorsepower =CarToC[0].iHorsepower;
CarFromC[1].iYear =CarToC[0].iYear;
CarFromC[1].xInsured =CarToC[0].xInsured;

Voordat we naar de PLCnext-engineer gaan, moeten we van dit C++-project een bibliotheek maken die de PLC kan begrijpen. Dit doe je door boven aan het scherm op bouwen te klikken. Dit zou een tijdje moeten werken en zal u vertellen wanneer de bibliotheek voltooid is. Als deze stap onduidelijk is, raad ik je ten zeerste aan om de bovenstaande tutorials te bekijken.

Voordat we variabelen kunnen maken in PLCnext engineer, moeten we een eigen datatype maken, in dit geval een struct-auto en een lijst met auto's. Hiervoor hebben we een datatypes-bestand nodig dat hier kan worden gevonden en aangemaakt:

Open dit bestand als dit nog niet is gebeurd, dan kunnen we als volgt beginnen met het maken van onze eigen structuur:

TYPE

StrCar:

STRUCT

sMerk:STRING;
iHorsepower:INT;
iYear:int;
xVerzekerd:BOOL;

END_STRUCT

END_TYPE

!BELANGRIJK! De namen en typen in C++ en PLCnext engineer moeten hetzelfde zijn! Gegevenstypen zijn hier te vinden.

Na het maken van de struct moeten we een array van dit type maken en dat gaat als volgt en in hetzelfde bestand waarin we ons momenteel bevinden:

TYPE

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

END_TYPE

Om een ​​variabele met het type 'carList' aan te maken, navigeert u naar het hoofdprogramma in het tabblad componenten onder 'programmeren' en vervolgens in de map 'Programma's' en selecteert u vervolgens variabelen in het hoofdscherm om de variabelen in de PLC te zien. Hier kunnen we een naam en een datatype en het gebruik kiezen. Selecteer als datatype onze op maat gemaakte:

Nadat we dit hebben gedaan, zullen we beginnen met het verbinden van de variabelen nadat we de nieuwe bibliotheek hebben toegevoegd. Dit kan als volgt worden gedaan:

De bibliotheek die u hebt gemaakt, kunt u vinden in de bin-map van uw project, kopieer deze naar de bibliothekenmap voor PLCnext engineer. De locatie ziet er ongeveer zo uit:

C:\Users\Public\Documents\PLCnext Engineer\Libraries

Daarna gaan we terug naar PLCnext engineer om de bibliotheek aan ons programma toe te voegen. We gaan naar het tabblad Componenten, openen het vak bibliotheken en klikken met de rechtermuisknop op bibliotheken. Klik vervolgens op 'gebruikersbibliotheek toevoegen'. Dit brengt u naar de bibliothekenmap waar we eerder naar toe gingen. Kies de bibliotheek die je wilt gebruiken en ga verder.

Zodra dit is gebeurd, moeten we het programma aan de taken toevoegen, wat als volgt wordt gedaan. Dubbelklik op PLCnext aan de linkerkant van het scherm in het plantengebied. Het zou in het midden moeten openen. Ga dan naar het tabblad ‘taken en evenementen’ en voeg een nieuw programma toe na de MainInstance. Dit kan op twee manieren worden gedaan, door ofwel het programmatype te selecteren of het te slepen vanuit het componentengebied onder 'PLCnext Components &Programs'.

Dan zouden de variabelen moeten verschijnen op het tabblad 'Poortlijst' naast het tabblad 'taken en gebeurtenissen'. Open dit om te worden begroet door al uw variabelen uit C++ en PLCnext. Het zou er ongeveer zo uit moeten zien.

Als je alles goed hebt gedaan, zou je de OUT-poorten van je PLC moeten kunnen verbinden met de IN-poort van het C++-programma, andersom kan ook en zou er ongeveer zo uit moeten zien. Als dit niet werkt, controleer dan de datatypes en namen van je variabelen.

Om een ​​dummy-waarde aan onze variabele toe te voegen, gaan we naar het hoofdprogramma op het tabblad Componenten en selecteren vervolgens code in het hoofdscherm om de code te zien en enkele van onze eigen code toe te voegen. We zullen de variabele alleen instellen op enkele autospecificaties. Deze kunnen willekeurig worden gekozen, maar moeten overeenkomen met de datatypes. (afhankelijk van wat je hebt gekozen, gebruik strings waar je strings enz. gebruikte)

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;

Zodra we dit voorbeeld hebben geïmplementeerd, moet de lijst die uitgaat worden verwisseld in de inkomende lijst. U kunt de variabelen in de 'Poortenlijst' van eerder zien.


Industriële technologie

  1. Naar Cloud Infinity en verder
  2. Complexe spannings- en stroomberekeningen
  3. C# Basisinvoer en -uitvoer
  4. C++ klassen en objecten
  5. C++-aanwijzers en arrays
  6. Structuren en klassen in C++
  7. C++ Datum en tijd
  8. Schrijfprocedures:eenvoudig en efficiënt door digitaal te gaan
  9. Externe gRPC met behulp van grpcurl
  10. Hoe maak je een eenvoudige PLCnext console applicatie in C#
  11. Installeren van apt(-get) pakketbeheerder op PLCnext