Définition de tableaux personnalisés dans des blocs de fonctions natifs – Un guide pratique
Pourquoi ce message ?
En fait, cet article a été créé parce que lorsque je développais le bloc de fonctions natif, j'ai découvert qu'il était impossible d'utiliser un tableau de structures personnalisées. Ou pour le dire autrement, il est dommage que le GitHub officiel de PLCnext ne propose pas de tutoriels de ce type. Si vous utilisez le didacticiel C# pour créer un tableau personnalisé dans Native Function Block, vous constaterez que vous ne pouvez pas le compiler correctement ou que la définition des valeurs du tableau dans PLCnext Engineer n'a aucune réponse. Il se trouve que l'exemple dans ce cas est lié à la base de données, c'est tout.
Description de la démo
- L'exemple suivant utilise le bloc de fonction natif pour créer une interface Array définie par l'utilisateur avec la chaîne d'outils PLCncli
- Le tableau se compose de 21 éléments, chacun étant une structure. La structure contient deux IecString80 et une énumération, comme indiqué dans le diagramme suivant.
https://github.com/Leeable/UserDefineArray_NativeFB/tree/Master
Exigences
- Assurez-vous que la version de ToolChain est 23.0 ou supérieure. Cet exemple utilise la ToolChain 23.6 à des fins de démonstration.
- Familier avec le processus de base d'établissement d'un bloc fonctionnel natif.
- Visual Studio 2019 ou 2022 avec plug-ins du complément ToolChain
$ plcncli --version
plcncli 23.6.0.1450 (23.6.0.1450)
ÉTAPE 1
- Créez un projet à l'aide de Visual Studio, sélectionnez le type de projet « Bloc de fonction natif partagé » et nommez le projet « ArrayTest ».
- Ensuite, dans le projet ArrayTest dans Visual Studio, créez un nouveau bloc de fonctions natif nommé « ArrayCplus ».
ÉTAPE2
-
Copiez ce code dans ArrayCplus.cs
-
Comme il y a des problèmes d'affichage lors de l'inclusion directe du code source ici, comme &et>, j'ai fourni un lien à la place.
-
par exemple, le &sera encodé comme
&dans ce html.....
ArrayCplus.cs
ÉTAPE3
Ouvrez le terminal dans le dossier ArrayTestCpp et saisissez ce qui suit.
$ plcncli generate code
Après avoir généré le code, localisez le ArrayTest-cli32.h et ArrayTest-cli64.h fichiers dans le répertoire src et recherchez les endroits où #error est indiqué.
Nous devons supprimer les commentaires et améliorer le code. Cliquez pour accéder à InArrayFB-cli.cpp et modifier l'implémentation.
IntArrayFB-cli.cpp
ÉTAPE4
Dans ArrayCplus.cpp , entrez le code suivant. Les contenus contenant des chaînes doivent être initialisés dans le processus plutôt que dans la région Init ; leur initialisation dans la région Init ne fonctionnera pas, ce qui entraînera l'impossibilité d'écrire des valeurs dans sName et sAttribute via Engineer.
ArrayCplus-cli.cpp
ÉTAPE 5
Ouvrez le terminal dans le dossier ArrayTestCpp et saisissez ce qui suit.
$ plcncli build all
$ plcncli deploy
ÉTAPE 6
Ouvrez PLCnext Engineer et chargez le fichier ArrayTest.pcwlx. ajouter une variable à l'ArrayTest nommée arr
Maintenant ça peut marcher
Questions
- Bien que cette méthode fonctionne en pratique, pourquoi est-il nécessaire d'initialiser le contenu contenant IecString ou une chaîne définie par l'utilisateur dans le void PInvoke ArrayTest::ArrayCplus::Process() au lieu de dans le void PInvoke ArrayTest::ArrayCplus::Init() ? ça ne marche pas si je mets le code dans le void PInvoke ArrayTest::ArrayCplus::Init() .
- Il est clair qu'il n'existe pas de didacticiel correspondant sur les tableaux définis par l'utilisateur pour les blocs de fonctions natifs sur GitHub. Quelqu'un peut-il le compléter et l'améliorer ? (la façon dont le tableau Csharp Userdefine ne fonctionne pas dans le bloc de fonction natif)
- Un dernier point qui me rend également confus est de savoir pourquoi, qu'il s'agisse de IecString, de String défini par l'utilisateur ou de IecStringEx*, s'ils contiennent des chaînes, ils doivent être au format 【InOut. 】dans le code CSharp lorsqu'il est utilisé comme bloc fonctionnel natif ?
Remarque :
Le Makers Blog présente des applications et des témoignages d'utilisateurs de membres de la communauté qui ne sont ni testés ni examinés par Phoenix Contact. Utilisez-les à vos propres risques.
Technologie industrielle
- L'histoire du soudage
- Optimisation de la chaîne d'approvisionnement :27 professionnels de la chaîne d'approvisionnement et de la logistique révèlent le moyen le plus efficace d'optimiser le processus de la chaîne d'ap…
- Comment câbler des panneaux solaires en série et des batteries en parallèle ? Système 12/24/48V
- Fabrication 101 :Faire partie de l'industrie aérospatiale
- Capacité supplémentaire, meilleure assurance :quatre façons dont les 3PL peuvent profiter à votre entreprise
- Le recyclage des MWF peut aider à réduire l'élimination du liquide de refroidissement des machines
- Guide pour utiliser les mèches de fraise CNC en toute sécurité
- Fabrication additive :analyse Build or buy
- Libérer le succès :comment l'intégration verticale améliore les performances EMS pour les OEM