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 functieblokken – een praktische gids

Waarom dit bericht?

In feite is dit bericht gemaakt omdat ik bij het ontwikkelen van het Native Function Block ontdekte dat het onmogelijk was om een reeks aangepaste structuren te gebruiken. Of anders gezegd:het is jammer dat de officiële GitHub van PLCnext dit soort tutorials niet heeft. Als u de C#-tutorial gebruikt om een ​​aangepaste array in Native Function Block te maken, zult u merken dat u deze niet succesvol kunt compileren of dat het instellen van de arraywaarden in PLCnext Engineer geen reactie geeft. Het voorbeeld in dit geval heeft toevallig betrekking op de database, dat is alles.

Demobeschrijving

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

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

Vereisten

  • Zorg ervoor dat de ToolChain-versie 23.0 of hoger is. In dit voorbeeld wordt 23.6 ToolChain gebruikt voor demonstratiedoeleinden.
  • Bekend met het basisproces voor het opzetten van een native functieblok.
  • Visual Studio 2019 of 2022 met ToolChain-invoegtoepassingsplug-ins
$ plcncli --version
plcncli 23.6.0.1450 (23.6.0.1450)

STAP1

  • Maak een nieuw project met Visual Studio, selecteer het projecttype 'Shared Native Function Block' en noem het project 'ArrayTest'.
  • Maak vervolgens binnen het ArrayTest-project in Visual Studio een nieuw systeemeigen functieblok met de naam "ArrayCplus."

STAP2

  • Kopieer deze code naar ArrayCplus.cs

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

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

ArrayCplus.cs

STAP3

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

$ plcncli generate code

Nadat u de code heeft gegenereerd, zoekt u ArrayTest-cli32.h en ArrayTest-cli64.h bestanden in de src-directory en zoek de plaatsen waar #error wordt aangegeven.

We moeten de opmerkingen verwijderen en de code verbeteren. Klik om naar InArrayFB-cli.cpp te navigeren en wijzig de implementatie.

IntArrayFB-cli.cpp

STAP4

In ArrayCplus.cpp , voer de volgende code in. Inhoud die tekenreeksen bevat, moet tijdens het proces worden geïnitialiseerd in plaats van in het Init-gebied; het initialiseren ervan in de Init-regio zal niet werken, wat resulteert in het onvermogen om via Engineer waarden naar sName en sAttribute te schrijven.

ArrayCplus-cli.cpp

STAP5

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

$ plcncli build all
$ plcncli deploy

STAP6

Open de PLCnext Engineer en laad de ArrayTest.pcwlx voeg een variabele toe aan de ArrayTest met de naam arr

Nu kan het werken

Vragen

  • Hoewel deze methode in de praktijk werkt, waarom is het dan nodig om inhoud te initialiseren die IecString of een door de gebruiker gedefinieerde tekenreeks bevat in de void PInvoke ArrayTest::ArrayCplus::Process() in plaats van in de void PInvoke ArrayTest::ArrayCplus::Init() ? het werkt niet als ik de code in de void PInvoke ArrayTest::ArrayCplus::Init() plaats .
  • Het is duidelijk dat er geen overeenkomstige tutorial is over door de gebruiker gedefinieerde arrays voor native functieblokken op GitHub. Kan iemand dit aanvullen en verbeteren? (de manier waarop de Csharp Userdefine-array niet werkt in het oorspronkelijke functieblok)
  • Een laatste punt dat mij ook verwart is waarom, ongeacht of het IecString, door de gebruiker gedefinieerde String of IecStringEx* is, als ze strings bevatten, ze de vorm moeten hebben van 【InOut 】in CSharp-code bij gebruik als native functieblok?

Opmerking:

Op de Makers Blog worden toepassingen en gebruikersverhalen van communityleden getoond die niet door Phoenix Contact zijn getest of beoordeeld. Gebruik ze op eigen risico.


Industriële technologie

  1. Het leveranciersbeheer verbeteren door goedkeuringen te stroomlijnen
  2. AC Active Oxidant - CIO2 Superieur industrieel desinfectiemiddel
  3. Effectieve planning van B2B-productlanceringen met digitale marketingstrategieën
  4. Maak kennis met de deelnemers van 2023 aan de videowedstrijd 'What's So Cool About Manufacturing'
  5. Gespannen dringt door tot Azië-Pacific - Tense Elektroniks-Review 2019
  6. Hoe u buizen buigt en wanneer gebogen buizen voordelig zijn
  7. Metalen onderdelen polijsten voor 3D-geprinte medische apparaten
  8. Een nieuwe manier om gelijktijdig magnetische velden in verschillende richtingen te detecteren
  9. Diode Clipping Circuit:verschillende soorten Clipping Circuits onder de loep
  10. Hoe contextuele mobiliteit de productiviteit van de toeleveringsketen kan verhogen
  11. Sprint en Ericsson werken samen aan intelligentie aan de rand van het netwerk