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

Aangepaste arrays definiëren in Native Function Blocks – Een praktische handleiding

Waarom deze post?

Deze post is gemaakt omdat ik tijdens het ontwikkelen van de Native Function Block ontdekte dat het onmogelijk was om een array van aangepaste structuren te gebruiken. Of anders gezegd: het is jammer dat de officiële GitHub van PLCnext geen tutorials van dit type heeft. Als je de C#-tutorial gebruikt om een aangepaste array in een Native Function Block te maken, zul je merken dat je hem niet kunt compileren, of dat het instellen van de array-waarden in PLCnext Engineer geen reactie geeft. Het voorbeeld in het geval heeft toevallig met de database te maken, dat is alles.

Demo-beschrijving

  • Het volgende voorbeeld gebruikt de Native Function Block om een door de gebruiker gedefinieerde Array-interface te maken met de PLCncli-toolchain
  • De Array bestaat uit 21 elementen, elk een structuur. De structuur bevat twee IecString80 en een enumeratie, zoals in het volgende diagram getoond.

https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master

Vereisten

  • Zorg dat de ToolChain-versie 23.0 of hoger is. Dit voorbeeld gebruikt de 23.6 ToolChain voor demonstratiedoeleinden.
  • Bekend met het basisproces van het opzetten van een Native Function Block.
  • Visual Studio 2019 of 2022 met ToolChain add-in plugins
$ plcncli --version plcncli 23.6.0.1450 (23.6.0.1450) 

STAP 1

  • Maak een nieuw project in Visual Studio, selecteer "Shared Native Function Block" als projecttype, en noem het project "ArrayTest".
  • Maak vervolgens, binnen het ArrayTest-project in Visual Studio, een nieuwe Native Function Block genaamd "ArrayCplus".

STAP 2

  • Kopieer die code naar ArrayCplus.cs

  • Omdat er weergaveproblemen zijn bij het direct opnemen van de broncode hier, zoals & en >, heb ik een link gegeven in plaats daarvan.

  • bijvoorbeeld, de & wordt gecodeerd als & in deze html.....

ArrayCplus.cs

STAP 3

Open de terminal in de ArrayTestCpp-map en voer het volgende in.

$ plcncli generate code 

Na het genereren van de code, zoek de ArrayTest-cli32.h en ArrayTest-cli64.h bestanden in de src-map, en vind de plaatsen waar #error wordt aangegeven.

We moeten de commentaren verwijderen en de code verbeteren. Klik om te navigeren naar InArrayFB-cli.cpp en pas de implementatie aan.

IntArrayFB-cli.cpp

STAP 4

In ArrayCplus.cpp, voer de volgende code in. Inhoud met strings moet geïnitialiseerd worden in het proces in plaats van in de Init-regio; initialiseren in de Init-regio werkt niet, wat resulteert in de onmogelijkheid om waarden naar sName en sAttribute via Engineer te schrijven.

ArrayCplus-cli.cpp

STAP 5

Open de terminal in de ArrayTestCpp-map en voer het volgende in.

$ plcncli build all $ plcncli deploy 

STAP 6

Open PLCnext Engineer en laad de ArrayTest.pcwlx, voeg een variabele toe aan ArrayTest genaamd arr

Nu kan het werken

Vragen

  • Hoewel deze methode in de praktijk werkt, waarom is het nodig om inhoud met IecString of door de gebruiker gedefinieerde String in de void PInvoke ArrayTest::ArrayCplus::Process() te initialiseren in plaats van in de void PInvoke ArrayTest::ArrayCplus::Init()? Het werkt niet als ik de code in de void PInvoke ArrayTest::ArrayCplus::Init() zet.
  • Het is duidelijk dat er geen overeenkomstige tutorial is over door de gebruiker gedefinieerde arrays voor Native Function Blocks op GitHub. Kan iemand het aanvullen en verbeteren? (de manier waarop C# door de gebruiker gedefinieerde array niet werkt in de native function block)
  • Een laatste punt dat me ook verward: waarom moeten ze, ongeacht of het IecString, door de gebruiker gedefinieerde String of IecStringEx* is, als ze strings bevatten, in de vorm van 【InOut】in CSharp-code zijn wanneer ze als Native Function Block worden gebruikt?

Let op:

De Makers Blog toont toepassingen en gebruikersverhalen van community-leden die niet getest of beoordeeld zijn door Phoenix Contact. Gebruik ze op eigen risico.

Industriële technologie

  1. Kiezen van een Betrouwbare Luchtvaart Metaalbewerking Partner: Bewezen Inkoopstrategieën
  2. Interconnect-defecten: Vuil-gedreven en Koperbinding-falen Uitgelegd
  3. De Impuls Behouden: Hoe Manufacturing Day's Impact op Studenten Te Duurzamen
  4. Uitrekenhoeken in zandgieten begrijpen: Wanneer en hoe ze te gebruiken
  5. Belangrijkste roestvrij staal hanteringsfouten om te vermijden voor levensduur & esthetiek
  6. Elektronen, gaten en doping in halfgeleiders begrijpen
  7. Top 15 metalen gietpatronen die elke industrie moet kennen
  8. Hoe Detailhandelaren Hybride Winkelaars Können Winnen
  9. Navigeren post-pandemie uitdagingen: Worop fabrikanten zich nu moeten richten
  10. Koolstofvoetafdruk Verminderen: Bewezen Strategieën voor MKB Vrachtvoerders
  11. Logo's toevoegen en PDF exporteren in E3.schematic