24C# PDF
24C# PDF
24C# PDF
Interfaces de
programmation
v.8.10
© 2019 Ing. Punzenberger COPA-DATA GmbH
3 Modules ........................................................................................................................................................ 9
3.1 Connaissances requises ...............................................................................................................................10
3.2 Terminologie ....................................................................................................................................................11
3.3 Limitations.........................................................................................................................................................12
3.4 Créer un module.............................................................................................................................................12
3.4.1 Notions fondamentales ...................................................................................................................................... 13
3.4.2 Types d'extensions ............................................................................................................................................... 17
3.4.3 Contenu des packages de modules .............................................................................................................. 20
3.4.4 Microsoft Visual Studio ...................................................................................................................................... 21
3.4.5 SharpDevelop ......................................................................................................................................................... 28
3.4.6 Administration du code source ....................................................................................................................... 31
3.4.7 Utilitaire d'analyse et de créations de packages de modules (AddInUtility)................................. 32
3.4.8 Action en cas de rechargement ...................................................................................................................... 33
3.4.9 Isolation .................................................................................................................................................................... 34
3.5 Utilisation de modules dans Editor et le Runtime .............................................................................34
3.5.1 Activation de modules dans zenon ............................................................................................................... 36
3.5.2 Action durant l'installation ................................................................................................................................ 36
3.5.3 Nœud des modules dans le gestionnaire de projet ............................................................................... 37
3.5.4 Utilisation dans zenon Editor ........................................................................................................................... 38
3.5.5 Utilisation dans le Runtime de zenon ........................................................................................................... 43
3.5.6 Dépannage .............................................................................................................................................................. 46
3.6 Fonctions de zenon .......................................................................................................................................47
3.6.1 Afficher la boîte de dialogue Gestion des services du Runtime ........................................................ 47
3.6.2 Exécuter l'extension Project Wizard .............................................................................................................. 49
3.7 Changement/conversion depuis VSTA ..................................................................................................51
5 VSTA ............................................................................................................................................................ 98
5.1 Notions fondamentales ............................................................................................................................ 100
5.1.1 Configuration de l’environnement VSTA .................................................................................................. 100
5.1.2 Accès au modèle d'objet zenon.................................................................................................................... 101
5.1.3 Fonctions dans zenon ....................................................................................................................................... 103
5.1.4 Débogage d’une macro complémentaire VSTA ..................................................................................... 105
5.1.5 Événements dans VSTA .................................................................................................................................... 105
5.1.6 Créer une sauvegarde de projets VSTA ..................................................................................................... 106
5.2 Créer un projet VSTA ................................................................................................................................. 106
5.2.1 Projets VSTA dans Editor ................................................................................................................................. 107
5.2.2 Projets VSTA dans le Runtime ....................................................................................................................... 108
5.2.3 Développement d’assistants dans VSTA ................................................................................................... 109
5.3 Exemples ......................................................................................................................................................... 109
5.3.1 Création de variables dans zenon Editor ................................................................................................... 110
5.3.2 Écriture des informations du projet dans la fenêtre de sortie zenon. ........................................... 113
5.3.3 Acquisition des variables dans zenon par le biais d’expressions régulières ............................... 115
5.3.4 Conversion des couleurs entre .NET et zenon ........................................................................................ 118
AIDE GÉNÉRALE
Si vous ne trouvez pas certaines informations dans ce chapitre de l’aide ou si vous souhaitez nous
suggérer d’intégrer un complément d’information, veuillez nous contacter par e-mail :
[email protected].
ASSISTANCE PROJET
Si vous avez besoin d’aide dans le cadre d’un projet, n’hésitez pas à adresser un e-mail à notre service
d’assistance : [email protected]
LICENCES ET MODULES
Si vous vous rendez compte que vous avez besoin de licences ou de modules supplémentaires,
veuillezcontacter l’équipe commerciale par e-mail : E-mail [email protected].
2 Interfaces de programmation
Différentes interfaces d'intégration de vos programmes ou d'automatisation des plannings sont
disponibles dans zenon :
Liste des macros (à la page 53) (VBA)
VSTA (à la page 98)
6 | 154
Interfaces de programmation
l'arborescence des modules de zenon. Lors de la conversion de projets contenant des tâches
PCE depuis des versions antérieures à la version 7.20, le nœud PCE sera affiché pour ces
projets. PCE ne fera plus l'objet de développements ou de documentations ultérieurs.
Recommandation : Veuillez utiliser zenon Logic, plutôt que PCE
MENU CONTEXTUEL
Élément de menu Action
Information
Vous trouverez des informations concernant la création et la mise en œuvre
des contrôles (ActiveX, .NET, WPF) dans le manuel Contrôles.
Vous trouverez des informations concernant le développement et l'utilisation de
l'interface SAP au chapitre Interface SAP.
MODULES
Vous pouvez également procéder ainsi : Appuyez sur les touches Ctrl+F9.
Pour ouvrir l'éditeur dans le Runtime :
En sélectionnant, dans Startup Tool, sous Tools, le lien SharpDevelop IDE.
7 | 154
Interfaces de programmation
Vous pouvez également procéder ainsi : Appuyez sur les touches Ctrl+F11.
VSTA comporte des environnements de développement distincts pour l’Espace de travail et le projet.
Vous ne pouvez en utiliser qu’un à la fois. Au démarrage, tous les autres environnements de
développement VSTA ouverts seront fermés.
8 | 154
Modules
Attention
Les erreurs dans les applications telles que ActiveX, PCE, VBA, VSTA, WPF et les
applications externes accédant à zenon via l'API peuvent également influencer la
stabilité du Runtime.
3 Modules
Les Add-Ins offrent la possibilité d'étendre les fonctionnalités de zenon dans Editor et le Runtime, grâce
à différents environnements de développement.
Les ressources suivantes permettent de créer des Add-Ins :
Microsoft Visual Studio (à la page 21)
SharpDevelop (inclus dans le package d'installation) (à la page 28)
Les Add-Ins peuvent être créés dans tous les langages de programmation .NET. La prise en charge
d'IDE est disponible dans les langages de programmation C# et Visual Basic.NET.
Remarque : Pour définir l'environnement de développement utilisé, cliquez sur Ouvrir l'éditeur de
modules dans les paramètres du menu Extras de zenon, sous Paramètres..., sur l'onglet Add-Ins.
Remarque :
Toutes les listes et interfaces sont compatibles avec IEnumerable.
Référence : https://msdn.microsoft.com/de-de/library/9eekhta0(v=vs.110).aspx
(https://msdn.microsoft.com/de-de/library/9eekhta0(v=vs.110).aspx)
Une Language Integrated Query LINQ peut être utilisée.
Référence : https://msdn.microsoft.com/en-us/library/mt693024.aspx
(https://msdn.microsoft.com/en-us/library/mt693024.aspx)
Attention
Pour les Add-Ins, les .NET Naming Guidelines sont appliquées.
À cette fin, les noms d'objets précédemment utilisés dans VSTA et VBA sont
modifiés. Dans VSTA et VBA, les noms précédents restent identiques, pour des
raisons de compatibilité. Pour les Add-Ins, l'attribution des noms tient compte
des Naming Guidelines .NET.
Une vue d'ensemble des différents noms d'objet est disponible dans le fichier
Excel API_Naming_Conversion.xlsx. Le fichier se trouve dans le répertoire
d'installation de zenon, dans le dossier \HELP\AddIns.
9 | 154
Modules
FONCTIONNALITÉS
Les Add-Ins offrent les fonctionnalités suivantes, entre autres :
Ils fournissent une assistance à la configuration de projets (par exemple, des assistants)
Ils fournissent des fonctionnalités supplémentaires, permettant d'améliorer le projet dans le
Runtime
COMPATIBILITÉ
Les add-ins zenon sont compatibles en avant et en arrière.
RÉTROCOMPATIBILITÉ
Les Add-Ins sont également compatibles avec les versions récentes de zenon. Si, par exemple, un
Add-In est compilé pour la version 7.60, il peut également être exécuté dans la version 8.00.
RÉTROCOMPATIBILITÉ
Les Add-Ins peuvent être compilés pour les versions antérieures de zenon . Par exemple, un Add-In
avec zenon 8.00 peut être créé pour zenon 7.60.
OUTILS ET ASSISTANCE
Les ressources suivantes proposent des outils et de l'assistance :
Outils pour développeurs Visual Studio : marketplace.visualstudio.com
(https://marketplace.visualstudio.com)
Forum des utilisateurs de COPA-DATA : forum.copadata.com (https://forum.copadata.com/)
10 | 154
Modules
3.2 Terminologie
Termes spécialisés et signification au regard des Add-Ins.
Terme Signification
Extension Les Extensions sont des classes pouvant être dérivées d'une
interface, à l'aide d'une ou plusieurs méthodes. Elles
constituent des points d'entrée du Add-In Package.
Project Add-In Management Composants d'Editor et du Runtime de zenon qui gèrent les
Project Add-In Packages.
Services :
11 | 154
Modules
Terme Signification
S'exécutent en tâche de fond
Sont démarrés automatiquement ou manuellement
Restent en mémoire jusqu'à ce qu'ils soient arrêtés
Assistants :
Remarque : les termes spécialisés sont exclusivement utilisés en anglais dans la documentation des
Add-Ins.
3.3 Limitations
Les limitations suivantes s’appliquent aux Add-Ins :
zenon Web Client prend en charge l'exécution des Add-Ins, cependant, sans prise en charge
d'IDE.
Par conséquent, il est impossible d'effectuer le débogage local des Add-Ins dans zenon Web
Client ; le débogage à l'aide d'outils de débogage à distant est pris en charge.
L'exécution des Add-Ins n'est pas prise en charge dans le moteur Web HTML.
INFORMATIONS GÉNÉRALES
Les Add-Ins sont identifiés au moyen d'un Add-In ID. Celui-ci est utilisé lors de l'installation et de
l'importation.
Un Add-In ID est constitué d'un Namespace facultatif et d'un ID local, l'namespace.localId. L'Local ID
identifie un Add-In ; l'Namespace attribue un Add-In à une organisation. Les deux fragments
d'informations sont définis avec l'attribut .NET Mono.AddIn.AddInAttribute. Pour que le nom d'un
Add-In Package reste unique au-delà des limites d'une organisation, l'Namespace du projet du Add-In
est utilisé dans l'ID.
Exemple d'Add-In ID complet : com.organisation.importwizard.
12 | 154
Modules
Les Namespaces peuvent être ensuite répartis au sein d'une organisation, par exemple, par équipe,
service ou projet.
Les Add-Ins peuvent être créés dans tous les langages de programmation .NET. La prise en charge
d'IDE est disponible dans les langages de programmation C# et Visual Basic.NET.
Remarque : Pour définir l'environnement de développement utilisé, cliquez sur Ouvrir l'éditeur de
modules dans les paramètres du menu Extras de zenon, sous Paramètres..., sur l'onglet Add-Ins.
Toutes les interfaces nécessaires au développement de Add-Ins sont définies dans l'ensemble
Scada.AddIn.Contracts.
13 | 154
Modules
Met en œuvre la méthode Run pour exécuter une Wizard Extension dans zenon Editor.
L'administration s'effectue depuis la boîte de dialogue Extras -> Gérer les services d'Editor...
dans zenon Editor.
Met en œuvre les méthodes Start et Stop pour exécuter une Service Extension dans zenon
Editor.
14 | 154
Modules
ATTRIBUTS DE L'EXTENSION
Les métadonnées suivantes sont définies à l'aide de l'attribut .NET avec le nom AddInExtension.
Propriété Description IEditorWi IEditorSe IProjectWi IProjectS
zardExte rviceExte zardExten erviceExt
nsion nsion sion ension
Information : Correspond
au nom de l'assistant ou du
service dans zenon.
Information : Correspond à
la description de l'assistant ou
du service dans zenon.
15 | 154
Modules
Information : Correspond
au type de démarrage du
service dans zenon.
Touche :
X : vrai
-- : pas vrai
ATTRIBUTS DU MODULE
Un Add-In Assembly nécessite plusieurs attributs .NET, définis dans le fichier AddInInfo.cs.
Les attributs les plus important et indispensables à l'utilisation du module dans zenon sont les suivants :
Nom de l'attribut Obligatoire Description Exemples
Exemple 3:
[assembly:
Addin("ProjectCreation",
"1.0")]
16 | 154
Modules
Touche :
X : vrai
-- : pas vrai
Met en œuvre la méthode Run pour exécuter une Wizard Extension dans zenon Editor.
17 | 154
Modules
L'administration s'effectue depuis la boîte de dialogue Extras -> Gérer les services d'Editor...
dans zenon Editor.
Met en œuvre les méthodes Start et Stop pour exécuter une Service Extension dans zenon
Editor.
18 | 154
Modules
19 | 154
Modules
Recommandation : Ne modifiez pas les fichiers manuellement ; utilisez toujours Add-In Utility.
FICHIER XML
Le contenu d'un Add-In Package est indiqué dans son propre fichier XML (Content.xml).
FICHIERS BINAIRES
Les fichiers binaires sont enregistrés dans leur propre fichier ZIP. Ce fichier doit contenir tous les
composants nécessaires pour exécuter le Add-In sur un autre système. Références directes et indirectes
aux .NET Assemblies. Ici, seuls les Assemblies sont inclus. Assemblies ne formant pas partie de .NET
Framework Class Library ou installés lors de l'installation de zenon.
20 | 154
Modules
Remarque : .NET Assemblies chargés dynamiquement ne sont pas inclus dans les métadonnées des
.NET Assemblies.
Information
COPA-DATA n'accepte aucune responsabilité concernant les Libraries externes
et n'offre aucune assistance technique à ce sujet.
MODULES ZENON
COPA-DATA Developer Tools permet aux utilisateurs de créer et déboguer rapidement et facilement
zenon Add-Ins avec Microsoft Visual Studio. Ils fournissent des modèles de projet pour zenon Editor et
le Runtime. Des modèles pour les services et assistants sont (extensions) sont disponibles pour les deux
applications.
Avec COPA-DATA Developer Tools, des Add-In packages sont créés lors du développement de Add-Ins.
Le déploiement et le débogage de Add-In packages sont intégrés. Ceci signifie : Si le débogage est
lancé, les Add-Ins sont déployés et l'outil de débogage est automatiquement lié à zenon Editor ou au
Runtime.
CONDITIONS REQUISES
Pour utiliser COPA-DATA Developer Tools, vous devez disposer de :
21 | 154
Modules
CRÉATION DU PROJET
22 | 154
Modules
Une classe d'extension vide est créée lorsque le projet a été créé :
DÉBOGAGE
Pour effectuer le débogage, sélectionnez une cible dans les propriétés du projet :
23 | 154
Modules
DÉPLOIEMENT
Remarque : Si le débogage est lancé directement, le déploiement démarre directement, lui aussi.
Pendant le déploiement et le débogage, la catégorie SCADA affiche des informations détaillées dans la
fenêtre de résultats.
DOCUMENTATION ET ASSISTANCE
la documentation de COPA-DATA Developer Tools est disponible sous forme d'aide intégrée dans
Visual Studio. Appuyez simplement sur la touche F1 dans l'application pour afficher une aide
contextuelle. En outre, vous pouvez également obtenir de l'assistance sur le site Web de COPA-DATA :
Utilisez le forum pour obtenir des informations sur les nouvelles fonctionnalités et demander de
l'aide aux autres utilisateurs :
24 | 154
Modules
https://forum.copadata.com/forumdisplay.php?45-Programming-Interface-API
(https://forum.copadata.com/forumdisplay.php?45-Programming-Interface-API)
Pour accéder à l'assistance de COPA-DATA, contactez notre service d'assistance :
https://www.copadata.com/en/support-services/
(https://www.copadata.com/en/support-services/)
25 | 154
Modules
Pour vérifier la version pour laquelle la compilation est exécutée dans zenon Editor :
1. Cliquez sur le Add-In.
2. Ouvrez le groupe de propriétés Général.
3. Cochez la case de la propriété Version minimale.
26 | 154
Modules
Information
En guise d'alternative à la méthode fournie, vous pouvez également déboguer
vos Add-Ins en sélectionnant Debug -> Attach to Process. Dans ce cas, vous
devez connecter le projet de Add-In correspondant dans Visual Studio au
processus de zenon Editor.
Information
En guise d'alternative aux méthodes fournies, vous pouvez également déboguer
vos Add-Ins en sélectionnant Debug -> Attach to Process. Ensuite, sélectionnez
le processus du Runtime de zenon (Zenrt32.exe), puis cliquez sur Attach
L'accès à la documentation de l'API zenon est pris en charge dans les versions suivantes de zenon :
7.60
27 | 154
Modules
8,00
Lors de l'ouverture de la documentation de l'API, la version ouverte dans la solution Visual Studio est
prise en compte.
Si aucune version de zenon n'est détectée, la documentation de la version la plus récente de l'API
zenon est ouverte.
Les possibilités d'accès suivantes peuvent être sélectionnées pour la version correspondante de zenon :
Documentation de l'API du module
Documentation de l'API Com
Cependant, vous pouvez également rechercher du contenu dans la documentation de l'API zenon :
Saisie du terme recherché dans l'interface utilisateur de Visual Studio en fonction du contenu
de la documentation de l'environnement du module et la documentation de l'API Com
Si vous saisissez @zenoncom et le terme recherché dans la barre de recherche de l'interface
utilisateur de Visual Studio, le contenu est recherché dans la documentation Com.
Exemple : @zenoncom Alarme
Saisissez le terme recherché dans la barre de recherche, puis confirmez votre sélection en appuyant sur
la touche Entrée.
3.4.5 SharpDevelop
SharpDevelop (également appelé #develop) est un environnement de développement ouvert reposant
sur la plate-forme Microsoft .NET. SharpDevelop est fourni avec zenon et est installé lors de l'installation
de zenon.
Remarque : La version actuelle et la documentation officielle de SharpDevelop sont disponibles en
ligne, à l'adresse : www.icsharpcode.net/opensource/sd/ (http://www.icsharpcode.net/opensource/sd/).
28 | 154
Modules
En sélectionnant l'option de menu Extras -> Ouvrir l'éditeur de modules... dans zenon
Editor,
Ou
En sélectionnant, dans Startup Tool, sous Tools, le lien SharpDevelop IDE.
Conseil : Dans le menu Extras => Paramètres => Modules, vérifiez si Visual Studio est
prédéfini comme environnement de développement.
2. Sélectionnez File -> New Solution..
3. Sélectionnez un modèle correspondant sous C# -> SCADA Add-Ins or VB -> SCADA Add-Ins.
4. Créez un nouveau projet sur cette base :
Extension de service d'Editor (à la page 18)
Extension d'assistant d'Editor (à la page 17)
Extension de service de projet (à la page 19)
Extension d'assistant de projet (à la page 19)
Remarque : Tous les exemples utilisés dans ce chapitre reposent sur le langage C#.
5. À vous d'ajouter votre code, vos références, etc.
6. Compilez le projet.
Le Add-In Package (sans suffixe de fichier *.scadaAddIn) est créé dans la fenêtre de sortie du
projet.
Il est nommé, en fonction de la configuration, ...bin\Debug\ ou ...bin\Release\.
7. Importez le package du module dans Editor ; pour cela, reportez-vous aux sections suivantes :
Installation et gestion des modules pour Editor (à la page 38)
Installation et gestion des modules pour le Runtime (à la page 44)
Pour vérifier la version pour laquelle la compilation est exécutée dans zenon Editor :
1. Cliquez sur le Add-In.
2. Ouvrez le groupe de propriétés Général.
29 | 154
Modules
30 | 154
Modules
3. Ouvrez le projet.
4. Dans les paramètres du projet dans SharpDevelop, accédez à l'onglet Add-In.
5. Sous Debug Target, sélectionnez le projet dans le Runtime dans lequel vous souhaitez
déboguer le Add-In.
L'instance correspondante doit être en cours d'exécution.
6. Pour commencer le débogage, appuyez sur F5 ou sélectionnez Debug -> Run.
7. Le projet de Add-In est compilé et temporairement déployé dans le projet zenon sélectionné.
En cas de nouveau déploiement, assurez-vous que l'assistant ou le service n'est pas en cours
d'exécution.
Attention : Lors de cette procédure, le Add-In est temporairement copié vers le dossier :
...\RT\FILES\zenon\system\AddInCache\...
Il est à nouveau supprimé après la fermeture du Runtime.
Pour installer un Add-In de façon permanente, importez-le en suivant les instructions fournies à
la section Installation et gestion des Add-Ins dans le Runtime (à la page 44).
8. Déboguez le Add-In.
Information
En guise d'alternative aux méthodes fournies, vous pouvez également déboguer
vos Add-Ins en sélectionnant Debug -> Attach to Process. Dans ce cas, vous
devez connecter le projet de Add-In correspondant dans SharpDevelop au
processus dans Editor ou le Runtime de zenon.
31 | 154
Modules
Attention
Contrairement à VSTA et VBA, l'enregistrement et l'administration du Source
Code des Add-Ins ne se déroulent pas dans le projet zenon.
Un package contient l'Add-In Assembly et un fichier XML avec le suffixe de fichier *.scadaAddin, dans
lequel se trouvent les métadonnées du Add-In.
32 | 154
Modules
Argument Description
Chemin du fichier de l'ensemble de modules.
ou
action = GetPackageInfo
Chemin du fichier Add-In Package.
Exemples
Crée un Add-In Package (arguments complets) :
AddInUtility.exe --action BuildPackage --path C:\Addin.dll --targetDir C:\Directory\
Les Add-Ins se comportent comme VSTA et offrent des fonctions de Pre-reload- et de Post-reload-.
Elles sont utilisées après la fonction de Pre-reload de VSTA et avant la fonction de rechargement de
VSTA, et servent de Wrapper pour la fonction de rechargement de VBA. Le rechargement est retardé
jusqu'à ce que l'exécution des Wizard Extensions soit terminée.
Recommandations : Si vous souhaitez utiliser la fonctionnalité de rechargement, évitez les
Wizard-Extensions qui entraînant de longues périodes de blocage ou d'exécution.
33 | 154
Modules
En cas de rechargement, toutes les extensions de services sont redémarrées. Les extensions de services
nouvellement installées sont démarrées après le redémarrage, si le paramètre DefaultStartMode est
défini sur Automatique.
3.4.9 Isolation
Tous les Add-Ins sont exécutés dans une zone isolée de la mémoire (App-Domain). Par conséquent,
différentes versions des mêmes Assemblies peuvent être chargées simultanément.
34 | 154
Modules
PROPRIÉTÉS
Si un Add-In est sélectionné dans Editor, ses propriétés sont affichées dans le nœud Général :
Nom : Nom du Add-In.
Description : Description du Add-In.
Version : Numéro de version du Add-In.
Code source : Indique si le code source est inclus dans le package.
Version minimale : La version de zenon la plus basse dans laquelle peut être utilisé leAdd-In.
Elle est définie lors de la création du Add-In pour :
Microsoft Visual Studio (à la page 25)
SharpDevelop (à la page 28)
Ces propriétés ne peuvent pas être modifiées dans le Runtime. Elles sont uniquement fournies à titre
d'information.
Les mêmes propriétés sont également affichées dans la vue détaillée pour tous les modules.
Remarque : Pour supprimer tous les filtres, cliquez sur le symbole correspondant dans la barre d'outils.
Pour trier la liste :
1. Cliquez sur l'intitulé de la colonne selon laquelle est triée la liste.
Le symbole représentant des jumelles indique la colonne selon laquelle la liste est triée.
La liste est triée en fonction de cette colonne.
Une flèche indique si l'ordre du tri est ascendant ou descendant.
2. Pour modifier l'ordre de tri, cliquez à nouveau sur l'intitulé de la colonne.
35 | 154
Modules
SAUVEGARDE ET RESTAURATION
Les considérations suivantes s'appliquent à la sauvegarde et la restauration de Add-Ins :
En cas d'utilisation d'un espace de travail sécurisé, les Add-Ins d'Editor ne sont pas enregistrés.
Remarque : Les Add-Ins installés pour Editor se trouvent dans le dossier
%ProgramData%\COPA-DATA\zenon810\EditorAddInStore. Ils peuvent être sauvegardés
manuellement, si nécessaire.
Les Add-In Packages de projets sont également sauvegardés lors de la création de sauvegardes
de projets et d'espaces de travail, puis sont restaurés lors de la réimportation.
[AddIns]
ON=1
36 | 154
Modules
3. Pendant l'installation, les fichiers existants d'autres versions (antérieures ou ultérieures) sont
remplacés.
Information
L'Add-In ID est unique pour chaque Add-In et est défini par un attribut .NET
dans le fichier AddInInfo.cs.
Profil Editor Opens the drop-down list with predefined editor profiles.
37 | 154
Modules
Supprimer tous les filtres Supprime tous les filtres actuellement appliqués dans la liste
de Add-Ins.
Les extensions de service d'Editor (à la page 18) sont démarrées si l'espace de travail est chargé
et son mode de démarrage est configuré sur Automatique. Elles sont arrêtées dès que l'espace
de travail est fermé.
38 | 154
Modules
Remarque : Seuls les Add-Ins avec des Editor Extensions peuvent être importés et installés. Si des
Editor Extensions ne sont pas détectées durant l'importation, un avertissement correspondant s'affiche.
39 | 154
Modules
Option Description
40 | 154
Modules
Supprimer tous les filtres Supprime tous les filtres actuellement appliqués dans la liste
de Add-Inss.
41 | 154
Modules
Option Description
Liste des services Affiche la liste de tous les Services installés. Les informations
suivantes sont affichées :
Nom
Description
Type de démarrage
États
42 | 154
Modules
Remarque : Cette boîte de dialogue est également accessible dans le Runtime (à la page 47), via la
fonction Afficher la boîte de dialogue "Gérer les services runtime".
Supprimer tous les filtres Supprime tous les filtres actuellement appliqués dans la liste
de services.
43 | 154
Modules
Hint
Vous pouvez accéder rapidement au dossier du projet en sélectionnant le projet
dans Editor, puis en appuyant sur la combinaison de touches Ctrl+Alt+R.
IMPORTER UN MODULE
Pour importer un Add-in :
1. Dans Editor, ouvrez la vue détaillée des Add-Ins dans l'arborescence du projet.
2. Cliquez sur le symbole Importer un Add-In, sélectionnez l'entrée dans le menu contextuel ou
appuyez sur la touche Insér.
La boîte de dialogue de sélection d'un Add-In s'affiche à l'écran.
3. Sélectionnez le Add-In de votre choix.
4. Cliquez sur l’option Ouvrir.
Le Add-in est importé.
Information :
Le Add-In n'est enregistré avec les fichiers du Runtime qu'après la création de ces derniers.
Dossier d'enregistrement :...\RT\FILES\zenon\system\AddInStore\...
Lors du démarrage ou du rechargement du Runtime, il est installé, modifié ou mis à jour
dans le dossier suivant :
...\RT\FILES\zenon\system\AddInCache\...
44 | 154
Modules
Remarque : Seuls les Add-Ins avec des Project Extensions peuvent être importés et installés. Si des
Project Extensions ne sont pas détectées durant l'importation, un avertissement correspondant s'affiche.
Procédure :
Lorque le Runtime est démarré, les Packages installés pour le projet sont comparés à ceux dans
Editor.
Cette opération est effectuée en fonction des informations d'horodatage.
En présence d'informations d'horodatage différentes ou de nouveaux Packages, le Package est
installé. Tout Package existant avec le même nom est remplacé.
Si un Package n'est plus présent dans Editor, mais est présent dans le Runtime, il est également
supprimé du Runtime.
RECHARGER UN MODULE
Les modules modifiés et nouveaux peuvent être rechargés dans le Runtime.
Avant le rechargement, une vérification est effectuée pour déterminer si le Add-In Cache et le Add-In
Store sont différents. Le rechargement est redémarré si des différences sont détectées.
Procédure :
1. Tous les services de Add-In sont arrêtés.
2. L'état est enregistré.
3. Le Cache est mis à jour avec le contenu du Store.
4. Les états de tous les services existants avant le rechargement sont restaurés.
5. Les nouveaux services ajoutés sont démarrés avec le type de démarrage Automatique.
Remarque : Avec les assistants, le rechargement n'est déclenché que si un assistant en cours
d'exécution a été fermé.
SUPPRIMER UN MODULE
Pour supprimer un Add-In :
1. Dans Editor, ouvrez la vue détaillée des Add-Ins dans l'arborescence du projet.
45 | 154
Modules
2. Sélectionnez un Add-In.
3. Cliquez sur le symbole Supprimer ou appuyez sur la touche Suppr..
Une boîte de dialogue de demande de confirmation s'affiche.
4. Confirmez cette sélection lorsque le programme vous invite à le faire.
Le Add-In est supprimé.
La prochaine fois que les fichiers du Runtime auront été compilés, le module sera désinstallé
lors du rechargement ou du redémarrage du Runtime.
3.5.6 Dépannage
Dans ce cas, l'extension peut être activée manuellement et sera disponible après un redémarrage.
Toutefois, après la fermeture de Visual Studio, l'extension reste désactivée jusqu'à sa prochaine
ouverture.
SOLUTION :
46 | 154
Modules
DÉVELOPPEMENT DE FONCTION
Étapes de création de la fonction :
1. Créez une nouvelle fonction :
Dans la barre d'outils ou le menu contextuel du nœud Fonctions, sélectionnez Nouvelle
fonction.
La boîte de dialogue de sélection d'une fonction s'affiche à l'écran.
2. Accédez au nœud Add-in.
3. Sélectionnez la fonction Afficher la boîte de dialogue "Gérer les services runtime".
La boîte de dialogue est fermée.
4. Name the function in the Nom property.
47 | 154
Modules
Option Description
Liste des services Affiche la liste de tous les Services installés. Les informations
suivantes sont affichées :
Nom
Description
Type de démarrage
États
48 | 154
Modules
Supprimer tous les filtres Supprime tous les filtres actuellement appliqués dans la liste
de services.
DÉVELOPPEMENT DE FONCTION
Étapes de création de la fonction :
1. Créez une nouvelle fonction :
Dans la barre d'outils ou le menu contextuel du nœud Fonctions, sélectionnez Nouvelle
fonction.
La boîte de dialogue de sélection d'une fonction s'affiche à l'écran.
2. Accédez au nœud Add-in.
3. Sélectionnez la fonction Exécuter l'extension du wizard project.
La boîte de dialogue de sélection d'un assistant s’affiche à l’écran.
4. Sélectionnez l'assistant souhaité.
5. Fermez la boîte de dialogue en cliquant sur OK.
6. Name the function in the Nom property.
49 | 154
Modules
Option Description
Liste des assistants Affiche tous les assistants trouvés dans l'arborescence
du projet dans le nœud Interface de
programmation/Add-Ins.
Afficher cette boîte de dialogue Active: When calling up the function in the Runtime, this
dans le Runtime dialog is opened and the user can amend the
configuration before execution.
50 | 154
Modules
Option Description
Runtime. During network operation when activating the
client the dialog is also displayed on the client
Aucun assistant n'est exécuté si le bouton Annuler est sélectionné dans la boîte de dialogue dans le
Runtime.
EDITOR
Pour convertir une fonctionnalité VSTA existante depuis Editor, suivez ces instructions.
FONCTIONNALITÉS D'ASSISTANTS
Une fonctionnalité mise en œuvre à l'aide d'un assistant VSTA peut uniquement être mise an œuvre au
moyen d'Editor Wizard Extensions (à la page 17).
Copiez le code existant vers une Editor Wizard Extension, puis apportez les modifications requises au
code.
51 | 154
Modules
Pour cela, copiez le code d'initialisation du gestionnaire d'événements vers la méthode de Start de
l'Editor Service Extension. Copiez ensuite le code destiné à l'exécution vers la méthode d'Stop.
Une fonctionnalité exécutée depuis la zone de liste déroulante Exécuter une macro VBA/VSTA peut
maintenant être mise en œuvre à l'aide d'Editor Wizard Extensions (à la page 17).
Pour cela, copiez le code issu de votre macro VSTA existante vers la méthode d'Run de l'Editor Wizard
Extension, puis modifiez le code si nécessaire.
RUNTIME
Pour convertir une fonctionnalité VSTA existante depuis le Runtime, suivez ces instructions.
Une fonctionnalité exécutée au moyen de la fonction Exécuter macro VSTA peut maintenant être mise
en œuvre à l'aide des Project Wizard Extensions (à la page 19).
Pour cela, copiez le code issu de votre macro VSTA existante vers la méthode d'Run de l'Project Wizard
Extension, puis modifiez le code si nécessaire.
Pour démarrer l'Project Wizard Extension, utilisez la fonction Exécuter l'extension du wizard project
de zenon.
Pour cela, copiez le code d'initialisation du gestionnaire d'événements vers la méthode de Start de
l'Project Service Extension. Copiez ensuite le code destiné à l'exécution vers la méthode d'Stop.
52 | 154
Liste de macros
4 Liste de macros
Vous pouvez utiliser le VBA et VSTA pour étendre les fonctions de zenon. L’utilisation de macros avec
zenon est décrite.
MENU CONTEXTUEL
Élément de menu Action
Profils Editor Ouvre la liste déroulante contenant les profils Editor prédéfinis.
Information
Si des macros VBA sont modifiées dans Editor,
Les fichiers de Runtime sont compilés et transférés vers le Runtime
Le Runtime est actualisé
Les éléments VSTA sont également actualisés, même si aucune modification
n’a été effectuée dans VSTA
53 | 154
Liste de macros
Vous pouvez également procéder ainsi : Appuyez sur les touches Ctrl+F11.
BARRE D’OUTILS
Nouvelle macro VBA Crée une nouvelle macro et ouvre l’éditeur de macros.
54 | 154
Liste de macros
Nouvelle macro VBA Crée une nouvelle macro et ouvre l’éditeur VBA.
Alternative : La touche F2
Si un filtre est sélectionné, cette sélection est également visible dans la barre d’outils.
Symbole Description
Recharger la liste des macros Charge toutes les macros Public Sub Name () incluses dans
VBA/VSTA myWorkspace et les modules dans la liste déroulante de la
barre d’outils.
Rechercher une macro Vous pouvez rechercher des macros par l’intermédiaire d’un
champ de saisie ou d’une liste déroulante. La largeur de la
liste déroulante est déterminée en fonction de l’élément le
plus large.
Liste déroulante Macros Contient toutes les macros chargées et vous permet de les
sélectionner.
55 | 154
Liste de macros
Symbole Description
VBA Filtres pour les macros VBA. Seules les macros VBA sont
affichées.
VSTA Filtres pour les macros VSTA. Seules les macros VSTA sont
affichées.
Options pour la barre d’outils Cliquez sur la flèche pour ouvrir le sous-menu :
Information
Si la boîte de dialogue d’association de macros ne contient pas toutes les
macros de myWorkspace, exécutez la fonction Recharger la liste des macros VBA
dans la barre d’outils.
56 | 154
Liste de macros
Certaines définitions/fonctions sont disponibles dans VBA, permettant ainsi de créer du code compatible
32 bits et 64 bits. Par exemple :
#if Win64 then
Declare PtrSafe Function MyMathFunc Lib "User32" (ByVal N As LongLong) As LongLong
#else
Declare Function MyMathFunc Lib "User32" (ByVal N As Long) As Long
#end if
#if VBA7 then
Declare PtrSafe Sub MessageBeep Lib "User32" (ByVal N AS Long)
#else
Declare Sub MessageBeep Lib "User32" (ByVal N AS Long)
#end if
Vous pouvez également consulter des notes utiles concernant le portage de code VBA 32 bits en code
VBA 64 bits de Microsoft :
Microsoft Office 2010, notes on porting: http://msdn.microsoft.com/en-us/library/ee691831.aspx
(http://msdn.microsoft.com/en-us/library/ee691831.aspx) : Microsoft Office 2010, notes
concernant le portage :
Déclarations 32 bits et 64 bits pour appels API :
http://www.jkp-ads.com/articles/apideclarations.as
(http://www.jkp-ads.com/articles/apideclarations.as)p
La particularité des propriétés est que si on change leur valeur par un programme VBA, alors on change
le comportement ou l’apparence de l’objet. Si vous modifiez, par exemple, la propriété Value d’un objet
Variable, la variable actuellement sélectionnée reçoit cette nouvelle valeur. Vous ne pouvez pas toujours
changer la valeur d’une propriété. La propriété Count de l’objet variable ne peut pas être modifiée, car
elle représente le nombre de variables créées. Vous ne pouvez pas ajouter des variables en changeant
la valeur de la propriété Count. Ainsi certaines propriétés ont l’attribut 'lecture seule', c’est-à-dire
qu’elles ne sont accessibles qu’en lecture.
57 | 154
Liste de macros
L’avantage des méthodes est que le programmeur n’a pas à connaître la structure de l’objet, et
par-dessus tout, il n’a pas la possibilité de changer les données internes de l’objet.
Si vous voulez ouvrir un autre 'form', la méthode est la même, vous avez juste à changer le nom du
'form' (nom de l’objet).
Donc une seule et même méthode peut être utilisée pour chacun des objets. Mais tous les objets n’ont
pas des méthodes.
Exemple
Lorsqu’un synoptique est ouvert, un événement d’ouverture est déclenché sur
l’objet synoptique correspondant. En tant que programmeur, vous pouvez
ajouter des commandes dans la procédure d’événement (procédure exécutée
lorsque l’événement survient), qui définissent ce qui doit arriver dans ce cas. Un
exemple lors du changement de la valeur d’une variable. Vous pouvez créer un
événement qui réagit au changement de valeurs d’une variable.
Exemple :
58 | 154
Liste de macros
Projets – Projet
Variables – Variable
Éléments – Élément
Dans la présentation graphique, dont vous pouvez obtenir l’impression intégrale auprès de
COPA-DATA.
59 | 154
Liste de macros
Cliquez avec le bouton droit de la souris sur cet événement pour ouvrir un menu.
Si une macro existe déjà, elle peut être éditée, supprimée ou renommée en cliquant dessus avec le
bouton droit de la souris.
Attention
Si vous sélectionnez l’élément de menu Renommer la macro, faites attention à
ne pas modifier le nom de l’événement, par exemple LeftClickUp_. Sinon cette
fonction ne sera pas exécutée. De plus, vous devez modifier à la main le nom de
la macro dans l’éditeur VBA.
Après avoir codé le code source à exécuter dans la procédure générée par zenon, la macro doit être
liée à l’élément.
Dans les propriétés VBA / Événements ..., la macro peut être liée à l’élément graphique.
Dans le Runtime, lorsque l’utilisateur clique avec le bouton gauche de la souris sur l’élément,
l’événement LeftClickDown est exécuté et s’il y a une macro associée, elle est exécutée.
60 | 154
Liste de macros
61 | 154
Liste de macros
Après avoir sélectionné l’élément dans la liste, vous pouvez lui associer des variables. Pour cela,
cliquez sur le bouton Variable et sélectionnez une variable ou créez-en une nouvelle.
Dans l’étape suivante, nous donnons un nom d’objet à l’élément ActiveX pour pouvoir y
accéder en VBA.
Dans notre exemple, nous lui donnons le nom d’objet Slide6_DW18, car c’est un ActiveX de
type Slider lié à la variable Doubleword18.
Maintenant l’élément Slider doit être activé et édité dans l’éditeur VBA.
Pour cela, nous créons une nouvelle macro, comme indiqué au chapitre Comment utiliser les
macros VBA (à la page 60).
La macro Init_Slider passe l’élément à initialiser au sous-programme Init_Slider de l’objet thisProject qui
contient les données du projet courant.
Public SubInit_Slider(obElem AsElement)
thisProject. Init _ Slider obElem
End Sub
62 | 154
Liste de macros
Avec ce type de librairie, vous pouvez accéder aux objets de l’application dans zenon (le Runtime).
Comme dans ce cas, il n’y pas d’objet thisProject, il doit être créé pour pouvoir accéder aux données.
Dim obProject As zenon.Project
Set obProject = zenon.Application.Projects.Item(PROJEKTNAME)
Si le projet VB doit être compatible avec tous les projets zenon (indépendamment du nom du projet), il
peut être défini comme suit :
Set obProject = zenon.Application.Projects.Item(0)
Après la création de l’objet projet (thisProject), vous pouvez par exemple accéder aux variables en
lecture ou en écriture.
Lecture :
Value = obProject.Variables.Item(Variablenname).Value
Écriture :
63 | 154
Liste de macros
obProject.Variables.Item(Variablenname).Value = Value
Créer :
Set Container = thisProject . OnlineVariables. CreateOnlineVariables (nom du conteneur)
Cet événement est créé automatiquement, lorsque le container est sélectionné dans la liste de gauche
en haut de l’éditeur VBA (liste des objets). La procédure ci-dessus est alors ajoutée au code source.
64 | 154
Liste de macros
obVar permet de transmettre la variable dont la valeur a changé. Lorsque cet événement survient, la
valeur actuelle de la variable (obVar.Value) peut être lue. Référez-vous à la documentation sur la
hiérarchie des objets VBA pour voir les propriétés et les valeurs qui peuvent être utilisées sur les
variables.
Cette ligne active la surveillance des variables dans le container. Lorsque vous exécutez la commande
Define, le conteneur est actif.
Tant que ce conteneur n’a pas été supprimé, il est impossible de créer un conteneur portant le même
nom.
65 | 154
Liste de macros
66 | 154
Liste de macros
67 | 154
Liste de macros
Information
In formulas all status bits are available. For other use the availability can be
limited.
You can read details on status processing in the Status processing chapter.
68 | 154
Liste de macros
Exemple : Avec le lasso, vous pouvez sélectionner des éléments dynamiques dans la barre de
navigation et les insérer dans la courbe Extended Trend en effectuant un glisser-déposer. Faites glisser
les éléments affichés en surbrillance dans la zone du diagramme ETM ou la liste des courbes ETM. Les
courbes correspondantes sont ensuite créées automatiquement pour ces éléments dynamiques.
Remarque : Avec les éléments dynamiques qui comportent plus d'une variable, seule la variable
principale est utilisée pour la fonction glisser-déposer.
Avec la méthode SelElements, l’utilisateur peut identifier les éléments dynamiques sélectionnés tels qu’ils
ont été sélectionnés dans le Runtime. Ces éléments DynPicture.SelElements peuvent ensuite utilisés pour
des événements tels que glisser-déposer.
Plusieurs méthodes de sélection d’éléments sont disponibles dans le Runtime, en fonction des
paramètres de fonctionnement tactile :
Fonctionnement tactile désactivé ou Windows 7 (propriété Reconnaissance désactivée ou
Windows 7) :
Clic gauche + déplacement : Une nouvelle sélection est effectuée.
Clic gauche + touche Ctrl + déplacement : La sélection est étendue.
Fonctionnement tactile natif de Windows 8 actif (propriété Reconnaissance sous Windows 8) :
Clic gauche + déplacement : Le synoptique est déplacé.
Clic gauche + touche Ctrl + déplacement : Le synoptique est déplacé.
69 | 154
Liste de macros
Clic gauche + touche Maj + déplacement : Une nouvelle sélection est effectuée.
Clic gauche + touche Ctrl + touche Maj + déplacement : La sélection est étendue.
Règles :
Seuls les éléments visibles peuvent être sélectionnés.
Si un bouton est sélectionné et vous cliquez dessus, la fonction correspondante est exécutée.
Si l'utilisateur clique sur un bouton sélectionné, puis déplace la souris avant de relâcher le
bouton de la souris, la fonction correspondante n'est pas exécutée.
Annuler la sélection : Cliquez avec le bouton gauche de la souris dans une zone à l'extérieur de
la sélection.
En outre, les macros peuvent être exécutées manuellement à l’aide de l’éditeur VBA.
Grâce aux assistants, les tâches de développement répétitives peuvent être exécutées, ou des projets
entiers peuvent être créés d’un simple clic sur un bouton. Quelques exemples d’assistants sont déjà
fournis dans zenon. Ces assistants peuvent être améliorés et complétés, si nécessaire. Ils sont utiles lors
de la création d’un projet, lors de l’importation et l’exportation, lors de la création de variables, etc. Vous
trouvez plus de détails au chapitre Assistants.
Vous trouverez des informations concernant tous les événements dans la rubrique d’aide du chapitre
Objet Modèle (à la page 154).
70 | 154
Liste de macros
Si un filtre est sélectionné, cette sélection est également visible dans la barre d’outils.
Symbole Description
Recharger la liste des macros Charge toutes les macros Public Sub Name () incluses dans
VBA/VSTA myWorkspace et les modules dans la liste déroulante de la
barre d’outils.
Rechercher une macro Vous pouvez rechercher des macros par l’intermédiaire d’un
champ de saisie ou d’une liste déroulante. La largeur de la
liste déroulante est déterminée en fonction de l’élément le
plus large.
Liste déroulante Macros Contient toutes les macros chargées et vous permet de les
sélectionner.
VBA Filtres pour les macros VBA. Seules les macros VBA sont
affichées.
VSTA Filtres pour les macros VSTA. Seules les macros VSTA sont
affichées.
Options pour la barre d’outils Cliquez sur la flèche pour ouvrir le sous-menu :
71 | 154
Liste de macros
Symbole Description
affichées. Pour fermer la barre d’outils, cliquez sur le bouton
X.
Information
Si la boîte de dialogue d’association de macros ne contient pas toutes les
macros de myWorkspace, exécutez la fonction Recharger la liste des macros VBA
dans la barre d’outils.
Option Description
72 | 154
Liste de macros
Paramètre Description
73 | 154
Liste de macros
Paramètre Description
74 | 154
Liste de macros
Fonction Description
Montrer la boîte de dialogue des macros Ouvre la boîte de dialogue de macros VBA.
VBA
Nouveau Cliquez sur ce bouton pour appliquer la valeur au paramètre dans la liste
des paramètres disponibles.
Supprimer Cliquez sur ce bouton pour supprimer l’entrée sélectionnée de la liste des
paramètres disponibles. Vous ne pouvez supprimer qu’une entrée à la
fois.
Vers le haut Cliquez sur ce bouton pour remonter l’entrée sélectionnée d’une place.
Dans l’ordre des paramètres, l’entrée est déplacée d’une place vers
l’avant.
75 | 154
Liste de macros
Paramètres : Description
Vers le bas Cliquez sur ce bouton pour descendre l’entrée sélectionnée d’une place.
Dans l’ordre des paramètres, l’entrée est déplacée d’une place vers
l’arrière.
Il est possible d’ajouter des chaînes aux macros créées avec des paramètres. Ces chaînes sont
transférées sous forme de paramètres individuels dans le Runtime lors de l’exécution de la macro.
Information
Vous devez vous assurer que le nombre de paramètres de la macro liée
correspond au nombre de paramètres créés.
Sélectionnez la macro souhaitée parmi les macros disponibles, puis cliquez sur OK.
Un autre domaine d’application des assistants est l’automatisation des modifications dans les projets
existants, par exemple la modification des propriétés d’éléments dynamiques dans tous les synoptiques
d’un projet existant.
76 | 154
Liste de macros
La base des assistants est le langage Microsoft Visual Basic for Applications (VBA) et le modèle d’objet
de zenon.
Les assistants sont disponibles sous forme de code source VBA sur le support d’installation. Les
nouveaux assistants peuvent être mis en œuvre dans l’environnement VBA.
Lorsque l’utilisateur sélectionne un assistant et clique sur le bouton OK, l’assistant sélectionné est
exécuté.
77 | 154
Liste de macros
Information
Les assistants ne sont pas compatibles avec les projets multi-utilisateurs.
Le bouton Suivant permet d’afficher la page suivante de l’élément multi-pages. Toutes les entrées
devant être conservées temporairement (par exemple, la création d’objets tels que les cadres, les
synoptiques, etc.) sont déterminées lorsque l’utilisateur clique sur le bouton Terminer de l’assistant.
Information
Les formulaires UserForms utilisés en tant qu’assistant doivent contenir des
méthodes publiques fournissent des informations concernant l’assistant au
système de contrôle. Si ces routines sont manquantes dans un formulaire
UserForm, celui-ci n’est pas considéré comme un assistant.
Tous les objets dans ce projet VBA peuvent accéder à l’espace de travail actuel par le biais de l’objet
MyWorkspace. Celui-ci est toujours lié au projet actuellement actif, accessible à l’aide de la propriété
ActiveDocument.
Le contenu de l’objet ZWorkspace est conservé dans le fichier ZenWorkspace.vba. Celui-ci est copié
dans le répertoire d’installation lors de la première installation de la version 6. Ce fichier n’est pas
remplacé lors des mises à jour ultérieures. Vous trouverez plus d’informations concernant la mise à jour
des assistants à la fin de ce didacticiel.
78 | 154
Liste de macros
Démarrez l’environnement VBA depuis zenon Editor, puis accédez au dossier ZWorkspace/Forms. Ce
fichier contient les éléments de base nécessaires au développement d’un assistant. Modifiez le nom du
formulaire UserForm.
Si le dossier indiqué ci-dessus n’est pas disponible, vous pouvez l’importer à l’aide de Importez la
commande Importer fichier.
Information
Le développement d’un assistant nécessite des connaissances concernant le
modèle d’objet de zenon et le langage VBA. Ces rubriques ne sont pas
couvertes dans ce didacticiel.
79 | 154
Liste de macros
Créez la surface affichée ci-dessus. Ensuite, basculez vers le module de codage du formulaire UserForm,
puis faites défiler le fichier jusqu’à la fin. C’est là que vous trouverez les méthodes suivantes.
Ces méthodes fournissent les informations concernant l’assistant demandées par le système de contrôle.
Gardez à l’esprit que l’assistant est uniquement affiché dans la sélection d’assistants si la méthode
IsZenOnWizard renvoie True.
80 | 154
Liste de macros
Basculez vers l’événement Initialize du formulaire UserForm, puis modifiez le contenu de la table de
chaînes m_strCaption. Dans la mesure où cet assistant ne comporte que deux étapes, il est possible de
supprimer les autres attributions.
Créez une méthode d’initialisation de la zone de liste modifiable des drivers. Cette routine a pour
objectif d’afficher tous les drivers chargés du projet actuel dans une zone de liste modifiable.
cbDriver.Clear
Dim nIndex As Long
For nIndex = 0 To MyWorkspace.ActiveDocument.Drivers.Count - 1
Dim obDriver As Driver
Set obDriver = MyWorkspace.ActiveDocument.Drivers.Item(nIndex)
If (Not obDriver Is Nothing) Then
cbDriver.AddItem
obDriver.Name
End If
Next nIndex
If (cbDriver.ListCount > 0) Then
cbDriver.ListIndex = 0
End If
En outre, une autre routine doit être définie pour afficher, dans une zone de liste modifiable, tous les
types de variables définis dans le projet.
If (Not m_obDriver Is Nothing) Then
cbVarType.Clear
Dim nIndex As Long , nSelect As Integer
For nIndex = 0 To MyWorkspace.ActiveDocument.VarTypes.Count - 1
Dim obVarType As VarType
Set obVarType = MyWorkspace.ActiveDocument.VarTypes.Item(nIndex)
If ( Not obVarType Is Nothing And obVarType.IsSimple = True) Then
cbVarType.AddItem
obVarType.Name
If (obVarType.Name = INT) Then
nSelect = nIndex
End If
End If
Next nIndex
cbVarType.ListIndex = nSelect
End If
Lors de l’ouverture de l’assistant, toutes les variables existantes sont contrôlées, afin d’identifier un offset
de départ libre pour la création des nouvelles variables. Pour cela, la méthode suivante est appliquée.
81 | 154
Liste de macros
Basculez vers l’événement Initialize du formulaire UserForm, puis ajoutez les lignes suivantes à cette
méthode :
txtStart.Value = CStr(FindHighestOffsetVar + 1)
InitializeDriver
L’attribution à txtStart définit l’offset de départ pour la création des variables. La méthode
InitializeDriver renseigne la zone de liste modifiable avec les drivers existants.
Créez un événement Change pour la zone de liste modifiable de drivers et ajoutez-y le code suivant
Une fois le driver sélectionné, les types de variables sont obtenus. L’objet de driver sélectionné est
stocké dans la variable m_obDriver pour être utilisé ultérieurement.
Private Sub cbDriver_Change()
cmdNext.Enabled = True
Set m_obDriver = MyWorkspace.ActiveDocument.Drivers.Item(cbDriver.Value)
If ( Not m_obDriver Is Nothing) Then
InitializeVarType
End If
End Sub
Créez un événement Change pour la zone de liste modifiable de variables et ajoutez-y le code suivant
Le type de variable sélectionné est stocké dans la variable m_obVarType pour être utilisé ultérieurement.
Private Sub cbVarType_Change()
Set m_obVarType = MyWorkspace.ActiveDocument.VarTypes.Item(cbVarType.Value)
End Sub
Il ne reste maintenant plus qu’à créer la routine d’événement de création des variables avec les
paramètres définis. Pour cela, il est nécessaire de cliquer sur le bouton Terminer.
82 | 154
Liste de macros
À la fin de l’assistant, la validité des paramètres définis est contrôlée. Si ce n’est pas le cas, un message
est affiché et l’utilisateur est invité à corriger les entrées concernées.
83 | 154
Liste de macros
Si les paramètres définis sont valides, les variables sont créées. Les variables reçoivent un nom et un
indice. Si une variable portant le même nom existe déjà dans le projet, l’indice disponible suivant est
utilisé. Dans notre exemple de code, une variable contenant le marqueur d’automate associé au type de
canal est créée. À chaque cycle, l’offset de la variable augmente.
Si un assistant ou une classe existe déjà dans l’espace de travail, un message d’avertissement est affiché.
Attention
Les assistants existants sont remplacés durant la mise à jour. Les modifications
individuelles apportées à un assistant sont perdues.
84 | 154
Liste de macros
Si une macro est liée à l’événement LeftClickUp sur un bouton, alors à la fin de la macro il faut exécuter
le LeftClickUp.
Public Sub LeftClickUp_Schalter(obElem As Element)
frmSchalter.Show
obElem.LeftClickUp
End Sub
4.8 Exemples
Vous trouverez ici quelques exemples de code VBA :
85 | 154
Liste de macros
frmSample2.InitForm obElem
'Affichage du formulaire Userform
frmSample2.Show
End Sub
Option Explicit
86 | 154
Liste de macros
Option Explicit
87 | 154
Liste de macros
obVar.Value = Val(txtValue.Text)
End Sub
Option Explicit
88 | 154
Liste de macros
89 | 154
Liste de macros
Option Explicit
Dim obVar As Variable
Dim WithEvents zOnlineVariable As OnlineVariable
Dim strOLVName As String
90 | 154
Liste de macros
End Sub
91 | 154
Liste de macros
'La procédure est exécutée lorsqu’une alarme a été acquittée par un utilisateur
Private Sub zAlarm_AlarmAcknowledged(ByVal obItem As IAlarmItem)
Dim strInfo As String
'Écrire les informations spécifiques concernant l’alarme dans une variable StringVariable
strInfo = obItem.Text & " - " & obItem.Name
thisProject.Variables.Item("Var_Acknowledged").Value = strInfo
End Sub
92 | 154
Liste de macros
End Sub
93 | 154
Liste de macros
DESCRIPTION :
Dans la boîte de dialogue (form) frmAlarm, une alarme en mémoire peut être sélectionnée dans un
combobox. Après la sélection, toutes les données de l’alarme sont écrites dans les champs texte
ci-dessous (groupe, classe, variable, etc.).
On utilise une macro indépendante des événements pour afficher le frmAlarm, car on ne la lie pas à un
élément.
Sub Alarm ()
frmAlarm.Show
End Sub
'La macro est exécutée avec la fonction Exécuter macro.
'À l’ouverture, la boîte de dialogue (form) est initialisée et donc la procédure suivante est
exécutée.Cette procédure s’occupe d’écrire toutes les alarmes en mémoire dans le combobox (liste de
choix) dans la boîte de dialogue (form).
If obAlarmItems.Count = 0 Then
MsgBox (# Alarms = 0 )
94 | 154
Liste de macros
Exit Sub
End If
For i = 0 To obAlarmItems.Count - 1
cmbAlarmItems.AddItem obAlarmItems.Item ( i ). Name
Next i
txtAktiv.Text = obAlarm.Aktiv
cmbAlarmItems.Text = cmbAlarmItems.List ( 0 )
End Sub
'Lorsqu’une alarme est sélectionnée dans la zone de liste, l’événement Modifier de la zone de liste
réagit.
Private Sub cmbAlarmItems _ Change ()
'Insérer les propriétés actuelles de l’élément AlarmItem dans des zones de texte
Dim obAlarmItems As AlarmItems
Dim obAlar As Alarm
Dans cet exemple, on dessine une pompe qui est constituée d’un cercle et d’un triangle. Définissez le
triangle en tant que symbole. Par dessus, dessinez une combinaison multiple et liez-la à trois variables
booléennes.
95 | 154
Liste de macros
De plus, définissez la couleur que le triangle doit prendre selon les valeurs de ces variables.
D’abord, nous combinons la combinaison multiple avec une macro qui ouvre un 'form' VBA de nom
frmSwitch.
Dans la boîte de dialogue (le 'form' VBA), nous pouvons modifier les valeurs des trois booléens.
Information
Seule une des trois variables peut avoir la valeur 1. (c’est-à-dire si une des
variables est mise à 1, les deux autres sont mises à 0).
Pour pouvoir utiliser cette macro plusieurs fois dans le projet avec différentes variables, les variables liées
à la combinaison multiple peuvent contenir dans leur nom l’état de la pompe qu’elle contrôle.
Par exemple :
Variable_Auto
Variable_Hand
Variable_Revi
Information
Les suffixes _Auto, _Hand et _Revi sont définis de façon fixe dans le code source
de l’exemple.
Avec les suffixes de 5 caractères des noms de variables, on définit quelle variable est mise à 1 ou à 0 en
cliquant sur un bouton de bascule.
Dans la macro LeftClickUp_Switch un sous-programme FindVariable est appelé dans le 'form' frmSwitch
qui récupère l’élément qui a été sélectionné dans obElem.
Public Sub LeftClickUp_Schalter (obElem As Element)
frmSchalter.FindVariable obElem
position (pixel en points = (pixel * 0,75))
frmSchalter.Top = obElem.Bottom * 0.75
frmSchalter.Left = obElem.Left * 0.75
frmSchalter.Show
obElem.LeftClickUp
End Sub
96 | 154
Liste de macros
Selon le suffixe (_Auto, _Hand or _Revi), les noms des variables sont assignés aux variables string
déclarées ci-dessus.
De plus, les états des variables sont déterminés et dépendent de la valeur (1 ou 0) du bouton
d’activation correspondant (enfoncé ou pas).
Case _ Hand
strHand = obElem . ItemVariable ( i ). Name
Case _ Revi
strRevi = obElem . ItemVariable ( i ). Name
End Select
Next i
If tbHand . Value = False And tbAuto . Value = False And tbRev . Value = False Then
tbOff . Value = True
Set cmdLast = tbOff
End If
End Sub
La fonction créée automatiquement VarExists vérifie seulement si les variables liées existent réellement.
Si ce n’est pas le cas, un message d’erreur est affiché. La variable n’existe pas.
Function VarExists ()
97 | 154
VSTA
VarExists = True
End Function
Si l’utilisateur clique sur Annuler (Cancel), la modification de valeur est annulée et la valeur originale est
restaurée.
Private Sub cmdExit _ Click ()
cmdLast.Value = True
Unload Me
End Sub
Si un bouton de bascule est cliqué, aucun autre bouton de bascule ne peut être sélectionné.
Private Sub tbAuto_Change ()
If tbAuto. Value = False And tbHand.Value = False And tbRev . Value = False Then
tbOff . Value = True
End Sub
Dans l’événement clic de chaque bouton de bascule, on vérifie si il est enfoncé et si la variable existe. Si
les deux conditions sont vraies, alors les valeurs sont envoyées vers les variables liées.
5 VSTA
Visual Studio Tools for Applications (VSTA) permet d’améliorer de manière autonome les fonctionnalités
de zenon Editor et du Runtime grâce à la programmation dans .NET.
98 | 154
VSTA
Attention
Veuillez noter que dans VSTA, seuls les Assemblies (fichiers DLL) créés dans une
version de .NET Framework jusqu’à la version 3.5 peuvent être inclus.
VSTA est également disponible dans zenon Web Client (avec certaines restrictions).
VSTA comporte des environnements de développement distincts pour l’Espace de travail et le projet.
Vous ne pouvez en utiliser qu’un à la fois. Au démarrage, tous les autres environnements de
développement VSTA ouverts seront fermés.
Information
Si des macros VBA sont modifiées dans Editor,
Les fichiers de Runtime sont compilés et transférés vers le Runtime
Le Runtime est actualisé
Les éléments VSTA sont également actualisés, même si aucune modification
n’a été effectuée dans VSTA
99 | 154
VSTA
Une boîte de dialogue d'avertissement s'affiche avant l'ouverture de l'éditeur VSTA dans zenon. Cliquez
sur le bouton OK pour ouvrir l'éditeur VSTA.
Attention
Remarque concernant le Runtime : Les fichiers DLL référencés ne peuvent pas
être remplacés s’ils sont chargés. Pour mettre à jour un fichier de référence,
vous devez arrêter le Runtime.
L’environnement VSTA peut être activé ou désactivé manuellement, en insérant l’entrée suivante dans le
fichier zenon6.ini :
Activer VSTA Désactiver VSTA
[VSTA] [VSTA]
ON=1 ON=0
[VBA] [VBA]
EIN=1 EIN=0
100 | 154
VSTA
Information
VSTA autorise le développement de projets dans les langages de
programmation C# et Visual Basic .NET. C# est considéré comme le langage
standard des projets VSTA dans Editor Le langage peut être changé en Visual
Basic.NET avec l’entrée suivante :
[VSTA]
CSHARP=0
Attention
Certaines modifications apportées au modèle d’objet ont été réalisées en raison
des limites inhérentes à la dénomination d’objets VSTA. Vous les trouverez dans
le tableau ci-dessous.
IDriver.Name IDriver.Identification
IDriver.Driver IDriver.Name
Ancien événement Nouvel événement
IApplication.Close IApplication.OnClose
IZenWorkspace.Startup IZenWorkspace.OnStartup
IZenWorkspace.Exit IZenWorkspace.OnExit
L’accès dans VSTA est autorisé via l’objet this, qui remplace l’objet MyWorkspace dans VBA. Les
méthodes et objets suivants sont identiques. Dans la méthode suivante, un gabarit portant le nom
TemplateName est créé dans zenon.
public void Macro1()
{
this.ActiveDocument.Templates().Create("TemplateName", true);
101 | 154
VSTA
Information
Contrairement à VBA, l’utilisation des lettres majuscules et minuscules après les
noms de fonctions est importante dans VSTA.
Pour accéder aux méthodes dans zenon, vous devez enregistrer et compiler le projet en procédant
comme suit :
1. Cliquez sur Fichier -> Enregistrer MyWorkspace.cs pour enregistrer le projet.
2. Cliquez sur Fichier -> Construire WorkspaceAddin pour compiler le projet.
La méthode est ensuite disponible en tant que macro dans la barre d’outils Macro VBA de zenon Editor.
Si la boîte de dialogue d’affectation des macros n’affiche pas toutes les macros de MyWorkspace,
exécutez la fonction Recharger la liste des macros VBA depuis la barre d’outils.
Information
Les macros VSTA comportant des paramètres, par exemple Public void
MacroWithParam(string mString), ne sont pas prises en charge et ne sont pas
disponibles dans la barre d’outils de macros.
102 | 154
VSTA
Parallèlement aux fonctions VBA existantes, des fonctions semblables ont été mises en œuvre pour
VSTA :
Nom fonction Description
Exécuter une VSTA Une macro VSTA peut être sélectionnée dans Editor ;
elle sera démarrée lors de l’exécution de la fonction
dans le Runtime.
Afficher la boîte de dialogue des Une boîte de dialogue est affichée dans le Runtime ; elle
macros VSTA contient une liste des macros VSTA existantes, que vous
103 | 154
VSTA
Paramètres : Description
Macros existantes
Liste des macros VSTA Affiche la liste de toutes les macros VSTA existantes.
Pour sélectionner une macro dans la liste, cliquez dessus.
104 | 154
VSTA
Pour démarrer une session de débogage, sélectionnez Débogage -> Démarrer le débogage. Vous
pouvez insérer des points d’interruption de la même manière que dans l’éditeur VBA, en cliquant avec
le bouton gauche dans la barre d’outils de points d’interruption grise, près de la marge gauche
adjacente à la cellule correspondante.
Information
Lors du débogage de macros complémentaires du Runtime, tenez compte des
aspects suivants :
Les fichiers de Runtime modifiés dans zenon doivent être recréés avant le
débogage.
Deux événements sont associés à chaque fin. Le premier événement démarre peu de temps avant la fin,
et le deuxième démarre après le démarrage d’une nouvelle session d’une macro complémentaire.
Événement Description
105 | 154
VSTA
Événement Description
est supprimée ; les références doivent être
approuvées et les données existantes doivent être
enregistrées, le cas échéant.
En revanche, les projets VSTA dans Editor doivent être enregistrés manuellement.
Les projets de l’éditeur VSTA se trouvent dans le dossier
C:\ProgramData\COPA-DATA\*version*\VSTAWorkspace\.
Attention
Veuillez noter que dans VSTA, seuls les Assemblies (fichiers DLL) créés dans une
version de .NET Framework jusqu’à la version 3.5 peuvent être inclus.
Information
Un seul projet peut être affiché à la fois dans l’éditeur VSTA. En outre, une seule
instance de l’éditeur VSTA peut être active. Lors du démarrage de l’éditeur
VSTA, toute instance en cours d’exécution est fermée.
106 | 154
VSTA
Information
Vous pouvez accéder à l’aide de l’éditeur VSTA en sélectionnant le menu Aide
-> Contenu. Cette aide fournit un aperçu général des fonctions de l’éditeur, des
fonctions de l’infrastructure .NET Framework et de la programmation en Visual
Basic.NET et C#.
Attention
Les noms de méthodes peuvent uniquement commencer par Macro (par
exemple Macro1, MacroVSTA) ; ils ne doivent pas contenir de paramètres et
doivent être définis comme publics. En outre, les noms de classes et d’autres
méthodes et événements créés par VSTA ne peuvent pas être modifiés.
Pour accéder aux méthodes dans zenon, vous devez enregistrer et compiler le projet en procédant
comme suit :
1. Cliquez sur Fichier -> Enregistrer MyWorkspace.cs pour enregistrer le projet.
2. Cliquez sur Fichier -> Construire WorkspaceAddin pour compiler le projet.
La méthode est ensuite disponible en tant que macro dans la barre d’outils Macro VBA de zenon Editor.
Si la boîte de dialogue d’affectation des macros n’affiche pas toutes les macros de MyWorkspace,
exécutez la fonction Recharger la liste des macros VBA depuis la barre d’outils.
107 | 154
VSTA
Information
Le langage de programmation ne peut pas être modifié par la suite. Cette boîte
de dialogue n’est donc affichée que lors de la première ouverture du nœud.
Dans ce projet, une classe appelée ThisProject est créée par zenon ; elle accepte les deux méthodes
suivantes :
Fonction Description
ThisProject_Startup
Exécutée automatiquement au démarrage du
Runtime.
ThisProject_Shutdown
Exécutée automatiquement à l’arrêt du Runtime.
Attention
Les noms de méthodes peuvent uniquement commencer par Macro (par
exemple Macro1, MacroVSTA) ; ils ne doivent pas contenir de paramètres et
doivent être définis comme publics. En outre, les noms de classes et d’autres
méthodes et événements créés par VSTA ne peuvent pas être modifiés.
Il est possible d’accéder à toutes les fonctionnalités du Runtime via le modèle d’objet zenon. Les
fonctions spécifiques à Editor ne peuvent pas être utilisées comme dans VBA.
108 | 154
VSTA
Information
Vous pouvez accéder à l’aide de l’éditeur VSTA en sélectionnant le menu Aide
-> Contenu. Cette aide fournit un aperçu général des fonctions de l’éditeur, des
fonctions de l’infrastructure .NET Framework et de la programmation en Visual
Basic.NET et C#.
Pour pouvoir accéder à un formulaire dans le modèle d’objet zenon, vous devez copier une référence à
celui-ci dans le formulaire. Pour cela, créez une méthode dans la classe MyWorkspace. Dans l’exemple
suivant, une instance de formulaire est créée avec le nom Wizard (Assistant) et la méthode
ZenonInstance, avec une référence au modèle d’objet zenon invoquée en tant que paramètre. Pour
afficher le formulaire Wizard, sélectionnez ShowDialog().
public void Macro1()
{
Form1 Wizard = new Form1();
Wizard.ZenonInstance(this.Application);
Wizard.ShowDialog();
}
Une variable membre reconnaissant le modèle d’objet zenon doit être créée dans le code du formulaire.
public zenOn.IApplication m_Zenon=null;
Enfin, la méthode ZenonInstance est créée. Cette méthode insère la référence du modèle d’objet dans
l’objet m_Zenon.
public void ZenonInstance(zenOn.IApplication app)
{
m_Zenon = app;
}
Vous pouvez maintenant développer, dans le formulaire, vos propres classes et méthodes employant le
modèle d’objet. Tous les objets, méthodes et attributs sont accessibles via l’objet m_Zenon.
5.3 Exemples
Ici, vous trouverez des exemples de l’utilisation de VSTA, dans le Runtime et dans Editor.
109 | 154
VSTA
La méthode Macro1 recherche d’abord le driver interne dans zenon Editor. L’utilisateur voit ensuite
s’afficher une boîte de dialogue de sélection de fichier, dans laquelle il doit sélectionner le fichier texte.
La méthode lit ensuite le fichier texte et crée les variables. La méthode GetDataType est ensuite requise
pour déterminer et attribuer le type de données associé lors de la création des variables.
C# code
using System;
using System.Windows.Forms;
using System.IO;
using zenOn;
namespace WorkspaceAddin
{
[System.AddIn.AddIn("MyWorkspace", Version = "1.0", Publisher = "", Description = "")]
public partial class MyWorkspace
{
private void MyWorkspace_Startup(object sender, EventArgs e)
{
}
private void MyWorkspace_Shutdown(object sender, EventArgs e)
{
}
public IVarType GetDataType(string vType)
{
//obtient les types correspondants pour les variables bool, int, real et string
IVarType retType;
switch (vType)
{
case "BOOL":
retType = this.ActiveDocument.VarTypes().Item("BOOL");
break;
case "INT":
retType = this.ActiveDocument.VarTypes().Item("INT");
break;
110 | 154
VSTA
C# code
case "REAL":
retType = this.ActiveDocument.VarTypes().Item("REAL");
break;
case "STRING":
retType = this.ActiveDocument.VarTypes().Item("STRING");
break;
par défaut :
retType = this.ActiveDocument.VarTypes().Item("INT");
break;
}
return retType;
}
//Lit un fichier texte défini et crée les variables correspondantes sur le driver interne de
zenon
public void MacroCreateVariablesFromFile()
{
111 | 154
VSTA
C# code
this.ActiveDocument.Variables().DoAutoSave(false);
try
{
OpenFileDialog varFileSelect = new OpenFileDialog();
String[] varLine = new String[2];
//acquérir les données ligne par ligne, scinder les lignes à chaque ',' et créer les variables
while ((line = importReader.ReadLine()) != null)
{
varLine = line.Split(new Char[] { ',' });
this.ActiveDocument.Variables().CreateVar(varLine[0], zenonInternDriver, tpKanaltypes.tpS
ystemVariable, GetDataType(varLine[1]));
}
importReader.Close();
}
}
catch (Exception fileEx)
{
MessageBox.Show("An error occurred while opening the file: " + fileEx.Message);
throw;
}
this.ActiveDocument.Variables().DoAutoSave(true);
}
#region Code généré par VSTA
private void InternalStartup()
{
this.Startup += new System.EventHandler(MyWorkspace_Startup);
this.Shutdown += new System.EventHandler(MyWorkspace_Shutdown);
}
#endregion
112 | 154
VSTA
C# code
}
}
namespace WorkspaceAddin
{
[System.AddIn.AddIn("MyWorkspace", Version = "1.0", Publisher = "", Description = "")]
public partial class MyWorkspace
{
private void MyWorkspace_Startup(object sender, EventArgs e)
{
113 | 154
VSTA
C# code
.tpMsg);
//parcourir tous les synoptiques et imprimer le nom et le modèle utilisé dans la fenêtre de
sortie
//parcourir tous les drivers et imprimer le nom et la description dans la fenêtre de sortie
114 | 154
VSTA
C# code
#endregion
}
}
Avec les expressions régulières, les variables sont uniquement lues si leurs noms commencent par 3
chiffres suivis d’un tiret bas (par exemple, 001_var ou 234_xyz). L’utilisateur doit alors sélectionner un
dossier. Un fichier texte comportant un nom défini en fonction de l’heure est créé dans ce dossier. Dans
ce fichier, les noms, intitulés et valeur actuelle de doutes les variables concernées sont enregistrés,
séparés par un point-virgule.
Information
Il est possible que des références manuelles doivent être ajoutées pour exécuter
l’exemple dans le Runtime zenon Runtime. Pour cela, ouvrez le menu contextuel
dans l’Project Explorer, puis cliquez sur Add Reference...
Les références requises dans cet exemple sont les suivantes :
Microsoft.VisualStudio.Tools.Applications.Runtime.v9.0
System
System.AddIn
System.Data
System.Windows.Forms
System.Xml
zenonVSTAProxy6500
C# code
using System;
using System.Text.RegularExpressions;
using System.IO;
using System.Windows.Forms;
namespace ProjectAddin
115 | 154
VSTA
C# code
{
[System.AddIn.AddIn("ThisProject", Version = "1.0", Publisher = "", Description = "")]
public partial class ThisProject
{
private void ThisProject_Startup(object sender, EventArgs e)
{
}
private void ThisProject_Shutdown(object sender, EventArgs e)
{
}
public void MacroGetFilteredVariables()
{
string filename = string.Empty;
string name = string.Empty;
string description = string.Empty;
string value = string.Empty;
116 | 154
VSTA
C# code
}
}
//fermer le flux
matchedVariables.Close();
}
catch (Exception ex)
{
117 | 154
VSTA
C# code
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisProject_Startup);
this.Shutdown += new System.EventHandler(ThisProject_Shutdown);
}
#endregion
}
}
118 | 154
VSTA
C# code
// extrait l’indice dans la palette de couleurs, qui est encodée dans la couleur d’API zenon
// renvoie -1 si la couleur donnée ne représente pas un indice de palette de couleurs
public static int GetColorPaletteIndex(uint apiColor)
{
System.Drawing.Color color = Api2Color(apiColor);
if (color.A == 128) // alpha value == 128 -> ind from color palette
{
// G définit le numéro de blocs 8 bits, R est l’indice
return color.G * 256 + color.R;
}
return -1;
}
119 | 154
VSTA
C# code
System.Drawing.Color color = System.Drawing.Color.FromArgb(128, idx, chunks, 0);
return Color2Api(color);
}
}
}
// Créer un exemple d’image contenant un rectangle rempli (couleur définie directement dans
l’élément)
// Supprimer et recréer un exemple d’image ou créer une nouvelle image si elle n’existe pas
encore
IDynPicture pic = null;
IDynPictures pictures = project.DynPictures();
for (int i = 0; i < pictures.Count; i++)
{
IDynPicture picture = pictures.Item(i);
if (picture.get_DynProperties("Title").ToString() == "SamplePicture")
{
pic = picture;
120 | 154
VSTA
C# code
break;
}
}
if (null != pic)
{
pic.Save();
pictures.Delete(pic.Name);
}
pic = project.DynPictures().Create("SamplePicture", "SampleFrame",
tpDynPicturesTypes.tpStandard);
// Créer un rectangle rempli (couleur définie directement à partir d’une palette de couleurs)
// Rechercher la palette de couleurs existante dans le projet actuel ou en créer une nouvelle
IColorPalettes palettes = project.ColorPalettes();
int nrOfPalettes = (int)palettes.get_DynProperties("Palette");
if (0 == nrOfPalettes)
{
//Créer une nouvelle palette
palettes.CreateDynProperty("Palette");
//Définir une couleur dans la nouvelle palette
String htmlColor = "#00FFFF"; // System.Drawing.Color.Aqua
palettes.set_DynProperties("Palette[0].PaletteColors", htmlColor);
}
121 | 154
PCE : Process Control Engine
C# code
ele.BackColor = ZenonColorHelper.EncodeColorPaletteIndex(0);
System.Drawing.Color index = ZenonColorHelper.Api2Color(ele.BackColor);
System.Diagnostics.Debug.Print("Index encoded in color: r" + index.R + " g" + index.G + "
b" + index.B + " a" + index.A);
System.Diagnostics.Debug.Print("Palette index:" +
ZenonColorHelper.GetColorPaletteIndex(ele.BackColor));
// Affichage de l’exemple :
//
// couleur zenon : 4294967040
// En HTML : #00FFFF
// En couleur : r0 g255 b255 a255
//
// Indice encodé en couleur : r0 g0 b0 a128
// Indice de la palette : 0
}
122 | 154
PCE : Process Control Engine
Un double-clic sur une tâche, l’ouvre dans la zone d’édition. Un menu contextuel est affiché en cliquant
sur la tâche avec le bouton droit de la souris.
Variables de la tâche... Ouvre la boîte de sélection des variables. Vous pouvez ainsi
123 | 154
PCE : Process Control Engine
Paramètres : Description
ajouter de nouvelles variables à la tâche.
124 | 154
PCE : Process Control Engine
Paramètre Description
Supprimer
- Supprimer tous les signets Supprime tous les signets dans le code.
125 | 154
PCE : Process Control Engine
Organiser
Mosaïque
126 | 154
PCE : Process Control Engine
Commande Action
fenêtre d’informations.
Sauver et redémarrer
Démarrer le débogage
127 | 154
PCE : Process Control Engine
Paramètres : Description
code.
Supprimer tous les signets Supprime tous les signets dans le code.
Type Les tâches peuvent être exécutées de manière cyclique ou une fois
seulement.
Cyclique : la tâche est exécutée cycliquement dans l'intervalle défini sous
Temps de cycle à atteindre.
Une fois : la tâche est exécutée une seule fois.
Priorité Priorités du procédé pour les systèmes multithread (inactif, basse, normal,
haute, la plus haute, critique (temps)).
128 | 154
PCE : Process Control Engine
Paramètre Description
Par défaut : Normal
Processus principal : la tâche s’exécute dans le même thread que le
Runtime. Si la tâche rentre dans une boucle d’attente ou si elle 'plante',
cela influence aussi le Runtime.
Fichier script Sélection du fichier script : Fichiers VB (*.vbs) pour les scripts VB ou
Fichiers JS (*.js) pour les scripts Java.
Le fichier correspondant est créé lorsque la tâche est ouverte dans la
zone d’édition pour la première fois.
Temps de cycle à Pour les tâches cycliques, c’est le temps qui doit être atteint par la tâche
atteindre en millisecondes.
Si ce temps de cycle n’est pas respecté, la tâche est exécutée aussi vite
que possible.
Pour des modifications ultérieures des propriétés, cette boîte de dialogue peut être ouverte par le menu
contextuel de la tâche et l’entrée Propriétés de la tâche.
Toutes les variables lues ou écrites dans la tâche doivent être liées ici. Il est également possible
d’accéder à une variable via l’objet de la variable, mais seules les valeurs directement liées à la tâche
concernée sont automatiquement mises à jour lors de l’initialisation de la tâche, avant son exécution.
Task.Value('Nom de la variable')=123
Si vous souhaitez modifier la sélection de la variable ultérieurement, il est également possible d’ouvrir
cette boîte de dialogue en affichant le menu contextuel de la tâche et en sélectionnant l’entrée Tâche
variables…
129 | 154
PCE : Process Control Engine
Task_Main() Cette procédure est exécutée soit une seule fois (type Une seule
fois) ou cycliquement (type Cyclique).
De façon générale, le PCE utilise le même modèle d’objet que le VBA (voir les guides VBA). Lorsque
vous utilisez des objets VBA (sauf l’objet Task) le multithreading est perdu, car ces objets ne peuvent
être utilisés que depuis le thread principal.
Attention
Dans l’interface COM, les fonctions ne bénéficient pas toutes de la possibilité de
multithreading et si ce n’est pas le cas, alors elles ne peuvent être utilisées que
dans le contexte du thread principal. Si une propriété différente de "processus
principal" est définie pour une tâche PCE, il ne doit alors pas y avoir d’accès
depuis le PCE vers le thread principal. Dans le cas où il y a un quand même un
accès à l’interface COM, ceci peut conduire à des états système indéterminés,
par exemple, un blocage du Runtime.
Produ
130 | 154
PCE : Process Control Engine
Nom
bre
it
Paren
t
DynProperties Propriété
ErrorNumber Propriété
ErrorString Propriété
Exit Événement
Init Événement
ItemVariable Méthode
Main Événement
131 | 154
PCE : Process Control Engine
État Propriété
Timer Événement
Type Propriété
C’est la seule façon disponible si vous utilisez le PCE sous Windows CE, car Windows CE ne supporte
pas le VBA.
6.2.4.2.1 Sur un PC
Une tâche peut aussi être démarrée selon un événement. Dans ce cas, le type de démarrage doit
être Selon événement. Maintenant, la tâche n’est pas démarrée automatiquement avec le Runtime.
132 | 154
PCE : Process Control Engine
Une macro VBA doit être créée, afin d’exécuter la tâche lors de la sélection d’un bouton ou en cas de
dépassement de valeur limite, ou suivant n’importe quel autre événement. L’instruction VBA suivante
permet de démarrer la tâche : thisProject.Tasks.Item(Taskname).Run
La tâche est démarrée automatiquement dans son propre thread si la propriété Processus principal n’a
pas été activée.
Avec l'instruction VBA suivante la tâche peut être arrêtée à tout moment :
thisProject.Tasks.Item("Taskname").Stop
Remarque : Pour exécuter une tâche plusieurs fois, celle-ci doit être explicitement arrêtée après qu’elle
se soit terminée, pour ensuite pouvoir être redémarrée.
Instruction : thisProject.Tasks.Item(Nom de la tâche).Stop
Elle peut être redémarrée après avoir été correctement arrêtée.
Une tâche avec le type de démarrage System start est créée. Cette tâche est démarrée
automatiquement avec le Runtime. Et cette tâche a la priorité PROCESSUS PRINCIPAL pour qu’elle
tourne dans le même thread que le Runtime. Maintenant, des variables 'bit' sont liées à cette tâche, et
exécuteront d’autres tâches déclenchées selon un événement. Avec l’instruction suivante, la tâche peut
être démarrée : Parent.Item(Taskname).Run
La tâche est démarrée automatiquement dans son propre Thread si la propriété Processus principal n’a
pas été activée.
Avec l’instruction suivante, la tâche peut être arrêtée à tout moment : Parent.Item("Taskname").Stop
6.3.1.1 Variant
VBScript comporte un seul type de données, appelé Variant. Un Variant est un type de données
spécial, qui peut contenir différentes sortes d'informations, en fonction de son utilisation. Parce que le
type de données Variant est l'unique type de données disponible dans VBScript, il s'agit également du
type de données renvoyé par toutes les fonctions dans VBScript.
Dans sa forme la plus simple, un Variant peut contenir des informations numérique ou de chaîne. Un
Variant se comporte comme un nombre lorsqu'il est utilisé dans un contexte numérique, et se
133 | 154
PCE : Process Control Engine
comporte comme une chaîne lorsqu'il est utilisé dans une chaîne de texte. Concrètement, si vous utilisez
des données qui ressemblent à des nombres, VBScript suppose qu’il s’agit de nombres et traite ces
données de la manière la plus appropriée. Vous pouvez toujours utiliser des nombres comme des
chaînes de caractères en les saisissant entre des guillemets (" "). Si vous utilisez des données pouvant
uniquement être interprétées comme des chaînes, c’est ainsi que ces données seront interprétées par
VBScript.
Le récapitulatif suivant présente les sous-types de données que peut contenir un élément Variant.
Sous-type Signification
Empty Le variant n’est pas initialisé. La valeur est 0 pour les variables numériques et
une chaîne de longueur nulle ("") pour les variables chaîne.
Long Contient un entier dans la plage de -2 147 483 648 à 2 147 483 647.
Single Contient un nombre flottant (réel) simple précision dans la plage -3.402823E38
à -1.401298E-45 pour les valeurs négatives; 1.401298E-45 à 3.402823E38 pour
les valeurs positives.
Date (Time) Contient un nombre qui représente une date entre le 1er janvier 100 jusqu’au 31
décembre 9999.
134 | 154
PCE : Process Control Engine
Sous-type Signification
String Contient une variable chaîne qui peut contenir jusqu’à 2 milliards de caractères.
6.3.2 Variables
Une variable est un opérateur très utile, qui fait référence à un emplacement dans la mémoire de
l’ordinateur dans lequel vous pouvez conserver des informations du programme susceptibles d’évoluer
durant l’exécution de votre script. Par exemple, vous pouvez créer une variable appelée ClickCount pour
mémoriser le nombre de fois qu’un utilisateur clique sur un objet sur une page Web particulière.
L’emplacement auquel la variable est conservée dans la mémoire de l’ordinateur est sans importance.
Ce qui est important, c’est que pour afficher ou modifier la valeur d’une variable, il suffit de la désigner
par son nom. Dans VBScript, les variables appartiennent toujours à un type de données fondamental,
Variant.
You declare multiple variables by separating each variable name with a comma. Example:
Dim Top, Bottom, Left, Right
135 | 154
PCE : Process Control Engine
Si vous déclarez une variable en dehors d’une procédure, elle sera accessible par toutes les procédures
du script. C’est une variable de niveau script et à une portée de niveau script.
La durée de vie d’une variable correspond au temps pendant lequel elle existe. La vie d’une variable de
niveau script démarre au moment où elle est déclarée jusqu’au moment où le script s’arrête. Une
variable locale à une procédure n’existe que tant qu’on se trouve dans la procédure. Lorsqu’on sort de
la procédure, la variable est supprimée.
Les variables locales sont idéales pour stocker des données temporaires uniquement nécessaires dans la
procédure. Vous pouvez avoir des variables locales de même nom dans différentes procédures car
chacune d’elles n’est connue que dans la procédure dans laquelle elle est déclarée.
Bien que le nombre indiqué entre parenthèses soit 10, tous les tableaux dans VBScript possèdent une
base zéro, ce qui signifie que ce tableau comporte en réalité 11 éléments. Dans un système où le
premier élément est à l’indice 0, le nombre d’éléments d’un tableau est le nombre indiqué entre
parenthèses + 1. Ce type de tableau est appelé "tableau à taille fixe".
136 | 154
PCE : Process Control Engine
On utilise un index spécifique au tableau pour attribuer des données à chacun des éléments du tableau.
En commençant à zéro et en finissant à 10, il est possible d’attribuer des données aux éléments d’un
tableau comme indiqué ici :
A(0) = 256
A(1) = 324
A(2) = 100
. . .
A(10) = 55
De même, les données peuvent être extraites de chaque élément à l’aide d’un index spécifique à
l’élément concerné du tableau de votre choix. Exemple :
. . .
SomeVariable = A(8)
. . .
Les tableaux ne sont pas limités à une dimension. Ils peuvent comporter jusqu’à 60 dimensions, bien
que la plupart des utilisateurs ne puissent appréhender plus de trois ou quatre dimensions. Vous pouvez
déclarer plusieurs dimensions en séparant les nombres définissant la taille d’un tableau (spécifiés entre
parenthèses) par des virgules. Dans l’exemple suivant, la variable MyTable est un tableau à deux
dimensions constitué de 6 lignes et 11 colonnes :
Dim MyTable(5, 10)
Dans un tableau à deux dimensions, le premier nombre représente toujours le nombre de lignes ; le
deuxième nombre représente le nombre de colonnes.
Vous pouvez également déclarer un tableau dont la taille évolue durant l’exécution de votre script. Ce
type de tableau est appelé "tableau dynamique". Le tableau est initialement déclaré dans une
procédure, à l’aide de la déclaration Dim ou ReDim. Toutefois, pour un tableau dynamique, aucune
indication de taille ou de nombre de dimensions n’est insérée entre les parenthèses. Exemple :
(Dim AnArray()
ReDim AnotherArray()
Pour utiliser un tableau dynamique, vous devez ensuite utiliser la déclaration ReDim pour déterminer le
nombre de dimensions et la taille de chaque dimension. Dans l’exemple suivant, ReDim définit la taille
initiale du tableau dynamique sur 25. Une déclaration ReDim ultérieure redimensionne le tableau à 30,
mais utilise le mot-clé Preserve pour préserver le contenu du tableau lors du redimensionnement.
ReDim MyArray(25)
. . .
ReDim Preserve MyArray(30)
137 | 154
PCE : Process Control Engine
6.3.3 Constantes
Une constante est un nom significatif qui remplace un nombre ou une chaîne de caractères et qui ne
change jamais. Le VBScript définit un nombre de constantes intrinsèques. Vous pouvez obtenir des
informations sur ces constantes intrinsèques à partir de la référence du langage VBScript.
Vous pouvez créer des constantes utilisateur en VBScript en utilisant le mot-clé Const. Vous pouvez
ainsi donner un nom significatif pour les constantes textuelles ou numériques. Vous leur assignez leur
valeur et ensuite, vous les utilisez dans un script.
La chaîne est entourée par des guillemets (par exemple, "exemple de texte"). Les guillemets sont le
moyen le plus évident pour différentier les valeurs de chaînes de caractères des valeurs numériques. La
représentation des dates (type Date) et heures (type Time) sont encadrées par le signe dièse (#).
Vous pouvez définir une convention de nommage pour différentier les constantes des variables. Ceci
vous permettra d’éviter d’assigner une valeur dans une constante dans vos scripts. Par exemple, vous
pouvez utiliser les préfixes "vb" sur vos variables ou "cste" sur vos constantes ; vous pouvez aussi choisir
d’écrire vos constantes en majuscules. Mais assurez-vous que les constantes et les variables peuvent
bien être distinguées. Vous éviterez ainsi quelques problèmes lors de l’écriture de scripts complexes.
6.3.4 Opérateurs
VBScript comporte une vaste gamme d’opérateurs, et notamment des opérateurs arithmétiques, des
opérateurs de comparaison, des opérateurs de concaténation et des opérateurs logiques.
Lorsque des expressions contiennent des opérateurs de plus d’une catégorie, les opérateurs
arithmétiques sont évalués en premier, puis les opérateurs de comparaison, et les opérateurs logiques
sont évalués en dernier. Les opérateurs de comparaison sont d’égales priorités, et sont donc évalués de
gauche à droite. Les opérateurs arithmétiques et logiques sont évalués dans l’ordre suivant.
138 | 154
PCE : Process Control Engine
Mise en exposant ^
Négation unaire -
Multiplication *
Division /
Division entière /
Modulo Mod
Addition +
Soustraction -
Concaténation de chaînes
Égalité =
Inégalité <>
Inférieur à <
Supérieur à >
Équivalence Is
d’objet
139 | 154
PCE : Process Control Engine
Lorsque des expressions contiennent des opérateurs de plus d’une catégorie, les opérateurs
arithmétiques sont évalués en premier, puis les opérateurs de comparaison, et les opérateurs logiques
sont évalués en dernier. Les opérateurs de comparaison sont d’égales priorités, et sont donc évalués de
gauche à droite. Les opérateurs arithmétiques et logiques sont évalués dans l’ordre suivant.
Pour exécuter plus qu’une ligne de code, vous devez utiliser la syntaxe correspondante. Cette syntaxe
inclut l’instruction End If, comme montré dans l’exemple suivant :
Sub AlertUser(value)
If value = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
140 | 154
PCE : Process Control Engine
AlertLabel.Font.Italic = True
End If
End Sub
Pour n’exécuter qu’une seule instruction si une condition est vraie, utilisez la syntaxe sur une seule ligne
pour If...Then...Else. L’exemple suivant illustre la syntaxe avec une seule ligne. Dans cet exemple, le
mot-clé Else est omis.
Sub FixDate()
Dim myDate
myDate = #2/13/95#
If myDate < Now Then myDate = Now
End Sub
Pour exécuter plus qu’une ligne de code, vous devez utiliser la syntaxe correspondante. Cette syntaxe
inclut l’instruction End If, comme montré dans l’exemple suivant :
Sub AlertUser(value)
If value = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
AlertLabel.Font.Italic = True
End If
End Sub
141 | 154
PCE : Process Control Engine
Msgbox value
Else
Msgbox Walue out of range!
End If
Un Select Case marche avec une expression simple qui n’est évaluée qu’une fois au début de la
structure. Le résultat de l’expression est alors comparé avec les valeurs de chaque Case à l’intérieur de la
structure. En cas de correspondance, le bloc de déclarations associé à la déclaration Case est exécuté,
comme dans l’exemple suivant.
Select Case Document.Form1.CardType.Options(SelectedIndex).Text
Case MasterCard
DisplayMCLogo
ValidateMCAccount
Case Visa
DisplayVisaLogo
ValidateVisaAccount
Case American Express
DisplayAMEXCOLogo
ValidateAMEXCOAccount
Case Else
DisplayUnknownImage
PromptAgain
End Select
Utilisation de boucles Do (à la exécute une boucle pendant ou jusqu’à ce qu’une condition soit True (vraie).
page 143) :
Utilisation de boucles exécute une boucle pendant qu’une condition est True (vraie).
While...Wend (à la page 145) :
Utilisation de boucles For...Next utilise un compteur pour exécuter des déclarations un certain nombre de fois.
(à la page 145) :
142 | 154
PCE : Process Control Engine
Paramètres : Description
Utilisation de boucles For répète un groupe de déclarations pour chaque article d’une collection ou chaqu
Each...Next (à la page 146) :
Sub ChkLastWhile()
Dim compteur, monNum
compteur = 0
monNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While monNum > 10
MsgBox 'La boucle a fait ' & compteur & ' répétitions.'
143 | 154
PCE : Process Control Engine
End Sub
Il existe deux manières d’utiliser le mot-clé Until pour vérifier une condition dans une déclaration
Do...Loop. Vous pouvez contrôler la condition avant de définir la boucle (comme indiqué dans l’exemple
ChkFirstUntil ci-dessous), ou vous pouvez la contrôler après une exécution au moins de la boucle
(comme indiqué dans l’exemple ChkLastUntil). Tant que la condition est False, la boucle s’exécute.
Sub ChkFirstUntil()
Dim compteur, monNum
compteur = 0
monNum = 20
Do Until monNum = 10
monNum = monNum - 1
compteur = compteur + 1
Loop
MsgBox 'La boucle a fait ' & compteur & ' répétitions.'
End Sub
Sub ChkLastUntil()
Dim compteur, monNum
compteur = 0
monNum = 1
Th
monNum = monNum - 1
compteur = compteur + 1
Loop Until monNum = 10
MsgBox 'La boucle a fait ' & compteur & ' répétitions.'
End Sub
You can exit a Do...Loop by using the Exit Do statement. Because you usually want to exit only in certain
situations, such as to avoid an endless loop, you should use the Exit Do statement in the True statement
block of an If...Then...Else statement. If the condition is False, the loop runs as usual.
144 | 154
PCE : Process Control Engine
In the following example, myNum is assigned a value that creates an endless loop. The If...Then...Else
statement checks for this condition, preventing the endless repetition.
Sub ExitExample()
Dim counter, myNum
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
MsgBox 'The loop made ' & counter & ' repetitions.'
End Sub
L’exemple suivant déclenche 50 exécutions d’une procédure appelée MyProc. La déclaration For spécifie
le compteur de variables x et ses valeurs de début et de fin. La déclaration Next augmente la variable
du compteur de 1.
Sub DoMyProc50Times()
Dim x
For x = 1 To 50
MyProc
Next
End Sub
À l’aide du mot-clé Step, vous pouvez augmenter ou diminuer la variable du compteur selon la valeur
spécifiée. Dans l’exemple suivant, la variable du compteur j est augmentée de 2 à chaque réinitialisation
de la boucle. Lorsque la boucle est terminée, le total est la somme de 2, 4, 6, 8 et 10.
Sub DoMyProc50Times()
Dim x
145 | 154
PCE : Process Control Engine
For x = 1 To 50
MyProc
Next
End Sub
Pour diminuer la variable du compteur, utilisez une valeur Step négative. Vous devez spécifier une
valeur de fin inférieure à la valeur de début. Dans l’exemple suivant, la variable du compteur monNum
est diminuée de 2 à chaque réinitialisation de la boucle. Lorsque la boucle est terminée, le total est la
somme de 16, 14, 12, 10, 8, 6, 4 et 2.
Sub NewTotal()
Dim monNum, total
For monNum = 16 To 2 Step -2
total = total + monNum
Next
MsgBox 'Le total est de ' & total
End Sub
Dans l’exemple de code HTML suivant, le contenu d’un objet Dictionary est utilisé pour insérer du texte
dans plusieurs zones de texte.
<HTML>
<HEAD><TITLE>Formulaires et éléments</TITLE></HEAD>
<SCRIPT LANGUAGE='VBScript'>
<!--
Sub cmdChange_OnClick
Dim d 'Créer une variable
Set d = CreateObject('Scripting.Dictionary')
For Each I in d
Document.frmForm.Elements(I).Value = D.Item(I)
Next
146 | 154
PCE : Process Control Engine
End Sub
-->
</SCRIPT>
<BODY>
<CENTER>
<FORM NAME='frmForm'
</FORM>
</CENTER>
</BODY>
</HTML>
La procédure Sub suivante utilise deux fonctions VBScript intrinsèques (ou intégrées), MsgBox et
InputBox, pour inviter l’utilisateur à saisir des informations. Elle affiche ensuite les résultats d’un calcul
basé sur ces informations. Le calcul est exécuté dans la procédure Function créée à l’aide de VBScript. La
procédure Function est sera présentée après l’exposé suivant.
Sub ConvertTemp()
temp = InputBox('Veuillez entrer la température en degrés F.', 1)
MsgBox 'La température est de ' & Celsius(temp) & ' degrés C.'
End Sub
147 | 154
PCE : Process Control Engine
Une procédure Function est une série d’instructions VBScript inclue entre les mots-clés Function et End
Function. Une procédure Function est similaire à une procédure Sub mais en plus elle renvoie une
valeur. Une procédure Function peut avoir des arguments (constantes, variables ou expressions qui lui
sont passées par la procédure appelante). Si une procédure Function n’a pas d’argument, sa déclaration
Function doit inclure une parenthèse ouvrante et une parenthèse fermante. Une Function renvoie une
valeur en affectant une valeur directement dans le nom de la fonction dans une instruction de la
procédure. Le type de la valeur renvoyée par une Function est toujours un Variant.
Dans l’exemple suivant, la fonction Celsius fait la conversion en degrés Celsius d’une valeur en degrés
Fahrenheit. Lorsque la fonction est appelée depuis la procédure ConvertTemp Sub, une variable
contenant la valeur de l'argument est transmise à la fonction.Le résultat du calcul est renvoyé à la
procédure appelante et affiché dans une zone de message.
Sub ConvertTemp()
temp = InputBox('Veuillez entrer la température en degrés F.', 1)
MsgBox 'La température est de ' & Celsius(temp) & ' degrés C.'
End Sub
Function Celsius(fDegres)
Celsius = (fDegres - 32) * 5 / 9
End Function
Chaque fragment de données est transmis à vos procédures à l’aide d’un argument. Les arguments
servent d’opérateurs pour les données que vous souhaitez intégrer à votre procédure. Lorsque vous
créez une procédure à l’aide de la déclaration Sub ou de la déclaration Function, vous devez inclure des
parenthèses après le nom de la procédure. Les éventuels arguments doivent être insérés entre ces
parenthèses, séparés par des virgules. Par exemple, dans l’exemple suivant, fDegrees est un opérateur
représentant la valeur transmise à la fonction Celsius aux fins de la conversion.
Function Celsius(fDegres)
Celsius = (fDegres - 32) * 5 / 9
End Function
Dans du code, une procédure Function doit toujours être insérée à droite d’une attribution de variable
ou dans une expression.
Exemples :
148 | 154
PCE : Process Control Engine
Temp = Celsius(fDegrees)
ou
MsgBox 'La température est de ' & Celsius(temp) & ' degrés C.'
Pour appeler une procédure Sub depuis une autre procédure, saisissez le nom de la procédure avec des
valeurs pour les éventuels arguments nécessaires, en séparant chaque valeur par une virgule. La
déclaration Call n’est pas requise, mais si vous l’utilisez, vous devez insérer les éventuels arguments
entre parenthèses.
L’exemple suivant présente deux appels de procédure MyProc. Dans un cas, la déclaration Call est
insérée dans le code, mais pas dans l’autre. Les deux appels renvoient le même résultat.
Call MyProc(premierarg, secondarg)
MyProc premierarg, secondarg
La raison principale pour l’utilisation d’un jeu de conventions cohérent est de standardiser la structure et
le style du codage pour un script ou un groupe de scripts de façon à ce que vous et d’autres personnes
puissiez lire et comprendre le code facilement. Utiliser de bonnes conventions de codage permet d’avoir
un code source clair, précis et lisible, qui est cohérent avec les conventions d’autres langages et intuitif.
Exemples :
USER_LIST_MAX
NEW_LINE
149 | 154
PCE : Process Control Engine
Bien que cette manière de nommer les constantes fonctionne toujours, vous pouvez utiliser une autre
méthode de dénomination. Vous pouvez créer des constantes réelles à l’aide de l’instruction Const.
Cette convention utilise un format à casse mixte, dans lequel les noms de constantes comportent le
préfixe "con".
Par exemple :
conYourOwnConstant
Niveau script Section HEAD d’une page HTML, Visible dans chaque procédure du
150 | 154
PCE : Process Control Engine
Pour les termes fréquemment utilisés ou les termes longs, des abréviations standard sont
recommandées pour garder une longueur de nom raisonnable. En général, les noms de variable
supérieurs à 32 caractères sont difficiles à lire. Si vous utilisez des abréviations, faites en sorte d’utiliser
toujours les mêmes et de façon cohérente dans tout le script. Par exemple, utiliser tantôt Cnt ou tantôt
Count dans un même script peut engendrer une certaine confusion.
151 | 154
PCE : Process Control Engine
Les arguments passés à une procédure doivent être décrits lorsque leur rôle n’est pas évident et lorsque
la procédure s’attend à ce qu’ils soient dans une plage de valeurs spécifique. Les valeurs renvoyées par
les fonctions et les variables qui sont modifiées par une procédure, particulièrement avec des arguments
passés par référence, doivent aussi être décrites au début de la procédure.
Les commentaires en en-tête de procédure doivent inclure les sections suivantes. Par exemple, voir la
section "Formater votre code" qui suit.
Section en-tête Commentaire
But Ce que fait la procédure (et non pas comment elle le fait).
152 | 154
PCE : Process Control Engine
Points à se rappeler :
Chaque variable importante doit contenir un commentaire sur son utilisation dans sa
ligne de déclaration.
Les variables, contrôles et procédures doivent être nommés clairement de façon à fournir une
auto-documentation ; ainsi seuls les éléments complexes nécessitent un commentaire détaillé.
Au début du script, vous devriez inclure un descriptif global, énumérant les objets, procédures,
algorithmes, boîtes de dialogue et dépendances système. Parfois, quelques lignes de
pseudocode peuvent aider à comprendre un algorithme.
Exemple :
153 | 154
Modèle d'objet
7 Modèle d'objet
Ici, vous trouverez les guides de zenon Object Model. Ils sont disponibles pour les Add-Ins, ainsi que
pour VBA, VSTA et l'interface COM externe.
154 | 154