▼
Scroll to page 2
of
104
SoMachine EIO0000002531 06/2017 SoMachine FileFormatUtility Guide de la bibliothèque EIO0000002531.00 06/2017 www.schneider-electric.com Le présent document comprend des descriptions générales et/ou des caractéristiques techniques des produits mentionnés. Il ne peut pas être utilisé pour définir ou déterminer l'adéquation ou la fiabilité de ces produits pour des applications utilisateur spécifiques. Il incombe à chaque utilisateur ou intégrateur de réaliser l'analyse de risques complète et appropriée, l'évaluation et le test des produits pour ce qui est de l'application à utiliser et de l'exécution de cette application. Ni la société Schneider Electric ni aucune de ses sociétés affiliées ou filiales ne peuvent être tenues pour responsables de la mauvaise utilisation des informations contenues dans le présent document. Si vous avez des suggestions, des améliorations ou des corrections à apporter à cette publication, veuillez nous en informer. Vous acceptez de ne pas reproduire, excepté pour votre propre usage à titre non commercial, tout ou partie de ce document et sur quelque support que ce soit sans l'accord écrit de Schneider Electric. Vous acceptez également de ne pas créer de liens hypertextes vers ce document ou son contenu. Schneider Electric ne concède aucun droit ni licence pour l'utilisation personnelle et non commerciale du document ou de son contenu, sinon une licence non exclusive pour une consultation « en l'état », à vos propres risques. Tous les autres droits sont réservés. Toutes les réglementations locales, régionales et nationales pertinentes doivent être respectées lors de l'installation et de l'utilisation de ce produit. Pour des raisons de sécurité et afin de garantir la conformité aux données système documentées, seul le fabricant est habilité à effectuer des réparations sur les composants. Lorsque des équipements sont utilisés pour des applications présentant des exigences techniques de sécurité, suivez les instructions appropriées. La non-utilisation du logiciel Schneider Electric ou d'un logiciel approuvé avec nos produits matériels peut entraîner des blessures, des dommages ou un fonctionnement incorrect. Le non-respect de cette consigne peut entraîner des lésions corporelles ou des dommages matériels. © 2017 Schneider Electric. Tous droits réservés. 2 EIO0000002531 06/2017 Table des matières Consignes de sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . A propos de ce manuel. . . . . . . . . . . . . . . . . . . . . . . . . . Partie I Informations générales . . . . . . . . . . . . . . . . . . . . . . . Chapitre 1 Présentation de la bibliothèque . . . . . . . . . . . . . . . . . . . Informations générales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 2 Entrées et sorties communes . . . . . . . . . . . . . . . . . . . . . Comportement des blocs fonction avec l'entrée i_xExecute . . . . . . Partie II Types d'unités de données . . . . . . . . . . . . . . . . . . . . Chapitre 3 Énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ET_XmlItemType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ET_CsvReadMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ET_ModeFileOpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ET_Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 4 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ST_XmlItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ST_XmlUserDefinedHeader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ST_CsvTable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ST_CsvFileInformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ST_CsvWarnValueTruncated. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ST_CsvReadParameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ST_CsvWriteParameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 5 Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Partie III Variables globales . . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 6 Liste des constantes globales. . . . . . . . . . . . . . . . . . . . . Liste des constantes globales (GCL). . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 7 Liste des paramètres globaux. . . . . . . . . . . . . . . . . . . . . GPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Partie IV Fonctions globales . . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 8 Fonctions globales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FC_EtResultToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EIO0000002531 06/2017 5 9 15 17 17 21 21 23 25 26 27 28 29 33 34 36 37 38 40 41 42 43 43 45 47 47 49 49 51 53 53 3 Partie V Unités organisationnelles de programme (POU) XML Chapitre 9 Blocs fonction XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1 FB_XmlRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description fonctionnelle du bloc FB_XmlRead. . . . . . . . . . . . . . . . . . Remarques concernant le bloc FB_XmlRead . . . . . . . . . . . . . . . . . . . Dépannage du bloc FB_XmlRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple de bloc FB_XmlRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2 FB_XmlWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description fonctionnelle du bloc FB_XmlWrite. . . . . . . . . . . . . . . . . Remarques concernant le bloc FB_XmlWrite . . . . . . . . . . . . . . . . . . Dépannage du bloc FB_XmlWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple de bloc FB_XmlWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapitre 10 Fonctions XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.1 FC_XmlGetElementValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description fonctionnelle du bloc FC_XmlGetElementValue . . . . . . Remarques concernant le bloc FC_XmlGetElementValue . . . . . . . 10.2 FC_XmlSetElementValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description fonctionnelle du bloc FC_XmlSetElementValue . . . . . . Remarques concernant le bloc FC_XmlSetElementValue . . . . . . . Partie VI Unités organisationnelles de programme (POU) CSV Chapitre 11 Blocs fonction CSV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 FB_CsvRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description fonctionnelle du bloc FB_CsvRead. . . . . . . . . . . . . . . . . . Remarques concernant le bloc FB_CsvRead . . . . . . . . . . . . . . . . . . . Dépannage du bloc FB_CsvRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple de bloc FB_CsvRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 FB_CsvWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description fonctionnelle du bloc FB_CsvWrite. . . . . . . . . . . . . . . . . Remarques concernant le bloc FB_CsvWrite . . . . . . . . . . . . . . . . . . Dépannage du bloc FB_CsvWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple de bloc FB_CsvWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Glossaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 55 57 58 59 62 63 64 66 67 69 70 71 73 74 75 76 77 78 79 81 83 84 85 88 89 90 93 94 96 97 98 101 103 EIO0000002531 06/2017 Consignes de sécurité Informations importantes AVIS Lisez attentivement ces instructions et examinez le matériel pour vous familiariser avec l'appareil avant de tenter de l'installer, de le faire fonctionner, de le réparer ou d'assurer sa maintenance. Les messages spéciaux suivants que vous trouverez dans cette documentation ou sur l'appareil ont pour but de vous mettre en garde contre des risques potentiels ou d'attirer votre attention sur des informations qui clarifient ou simplifient une procédure. EIO0000002531 06/2017 5 REMARQUE IMPORTANTE L'installation, l'utilisation, la réparation et la maintenance des équipements électriques doivent être assurées par du personnel qualifié uniquement. Schneider Electric décline toute responsabilité quant aux conséquences de l'utilisation de ce matériel. Une personne qualifiée est une personne disposant de compétences et de connaissances dans le domaine de la construction, du fonctionnement et de l'installation des équipements électriques, et ayant suivi une formation en sécurité leur permettant d'identifier et d'éviter les risques encourus. AVANT DE COMMENCER N'utilisez pas ce produit sur les machines non pourvues de protection efficace du point de fonctionnement. L'absence de ce type de protection sur une machine présente un risque de blessures graves pour l'opérateur. AVERTISSEMENT EQUIPEMENT NON PROTEGE N'utilisez pas ce logiciel ni les automatismes associés sur des appareils non équipés de protection du point de fonctionnement. N'accédez pas aux machines pendant leur fonctionnement. Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des dommages matériels. Cet automatisme et le logiciel associé permettent de commander des processus industriels divers. Le type ou le modèle d'automatisme approprié pour chaque application dépendra de facteurs tels que la fonction de commande requise, le degré de protection exigé, les méthodes de production, des conditions inhabituelles, la législation, etc. Dans certaines applications, plusieurs processeurs seront nécessaires, notamment lorsque la redondance de sauvegarde est requise. Vous seul, en tant que constructeur de machine ou intégrateur de système, pouvez connaître toutes les conditions et facteurs présents lors de la configuration, de l'exploitation et de la maintenance de la machine, et êtes donc en mesure de déterminer les équipements automatisés, ainsi que les sécurités et verrouillages associés qui peuvent être utilisés correctement. Lors du choix de l'automatisme et du système de commande, ainsi que du logiciel associé pour une application particulière, vous devez respecter les normes et réglementations locales et nationales en vigueur. Le document National Safety Council's Accident Prevention Manual (reconnu aux Etats-Unis) fournit également de nombreuses informations utiles. Dans certaines applications, telles que les machines d'emballage, une protection supplémentaire, comme celle du point de fonctionnement, doit être fournie pour l'opérateur. Elle est nécessaire si les mains ou d'autres parties du corps de l'opérateur peuvent entrer dans la zone de point de pincement ou d'autres zones dangereuses, risquant ainsi de provoquer des blessures graves. Les produits logiciels seuls, ne peuvent en aucun cas protéger les opérateurs contre d'éventuelles blessures. C'est pourquoi le logiciel ne doit pas remplacer la protection de point de fonctionnement ou s'y substituer. 6 EIO0000002531 06/2017 Avant de mettre l'équipement en service, assurez-vous que les dispositifs de sécurité et de verrouillage mécaniques et/ou électriques appropriés liés à la protection du point de fonctionnement ont été installés et sont opérationnels. Tous les dispositifs de sécurité et de verrouillage liés à la protection du point de fonctionnement doivent être coordonnés avec la programmation des équipements et logiciels d'automatisation associés. NOTE : La coordination des dispositifs de sécurité et de verrouillage mécaniques/électriques du point de fonctionnement n'entre pas dans le cadre de cette bibliothèque de blocs fonction, du Guide utilisateur système ou de toute autre mise en œuvre référencée dans la documentation. DEMARRAGE ET TEST Avant toute utilisation de l'équipement de commande électrique et des automatismes en vue d'un fonctionnement normal après installation, un technicien qualifié doit procéder à un test de démarrage afin de vérifier que l'équipement fonctionne correctement. Il est essentiel de planifier une telle vérification et d'accorder suffisamment de temps pour la réalisation de ce test dans sa totalité. AVERTISSEMENT RISQUES INHERENTS AU FONCTIONNEMENT DE L'EQUIPEMENT Assurez-vous que toutes les procédures d'installation et de configuration ont été respectées. Avant de réaliser les tests de fonctionnement, retirez tous les blocs ou autres cales temporaires utilisés pour le transport de tous les dispositifs composant le système. Enlevez les outils, les instruments de mesure et les débris éventuels présents sur l'équipement. Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des dommages matériels. Effectuez tous les tests de démarrage recommandés dans la documentation de l'équipement. Conservez toute la documentation de l'équipement pour référence ultérieure. Les tests logiciels doivent être réalisés à la fois en environnement simulé et réel. Vérifiez que le système entier est exempt de tout court-circuit et mise à la terre temporaire non installée conformément aux réglementations locales (conformément au National Electrical Code des Etats-Unis, par exemple). Si des tests diélectriques sont nécessaires, suivez les recommandations figurant dans la documentation de l'équipement afin d'éviter de l'endommager accidentellement. Avant de mettre l'équipement sous tension : Enlevez les outils, les instruments de mesure et les débris éventuels présents sur l'équipement. Fermez le capot du boîtier de l'équipement. Retirez toutes les mises à la terre temporaires des câbles d'alimentation entrants. Effectuez tous les tests de démarrage recommandés par le fabricant. EIO0000002531 06/2017 7 FONCTIONNEMENT ET REGLAGES Les précautions suivantes sont extraites du document NEMA Standards Publication ICS 7.1-1995 (la version anglaise prévaut) : Malgré le soin apporté à la conception et à la fabrication de l'équipement ou au choix et à l'évaluation des composants, des risques subsistent en cas d'utilisation inappropriée de l'équipement. Il arrive parfois que l'équipement soit déréglé accidentellement, entraînant ainsi un fonctionnement non satisfaisant ou non sécurisé. Respectez toujours les instructions du fabricant pour effectuer les réglages fonctionnels. Les personnes ayant accès à ces réglages doivent connaître les instructions du fabricant de l'équipement et les machines utilisées avec l'équipement électrique. Seuls ces réglages fonctionnels, requis par l'opérateur, doivent lui être accessibles. L'accès aux autres commandes doit être limité afin d'empêcher les changements non autorisés des caractéristiques de fonctionnement. 8 EIO0000002531 06/2017 A propos de ce manuel Présentation Objectif du document Ce document décrit la bibliothèque FileFormatUtility. La bibliothèque FileFormatUtility contient des fonctions qui simplifient l'accès à certains formats de fichiers. Les formats pris en charge sont les suivants : XML (eXtensible Markup Language) CSV (Comma Separated Values) La bibliothèque FileFormatUtility est prise en charge par les contrôleurs suivants : Modicon M241 Logic Controller Modicon M251 Logic Controller Modicon M258 Logic Controller Modicon LMC078 Motion Controller Modicon LMC058 Motion Controller Champ d'application Ce document a été actualisé pour le lancement de SoMachine V4.3. Les caractéristiques techniques des équipements décrits dans ce document sont également fournies en ligne. Pour accéder à ces informations en ligne : Etape Action 1 Accédez à la page d'accueil de Schneider Electric www.schneider-electric.com. 2 Dans la zone Search, saisissez la référence d'un produit ou le nom d'une gamme de produits. N'insérez pas d'espaces dans la référence ou la gamme de produits. Pour obtenir des informations sur un ensemble de modules similaires, utilisez des astérisques (*). 3 Si vous avez saisi une référence, accédez aux résultats de recherche Product Datasheets et cliquez sur la référence qui vous intéresse. Si vous avez saisi une gamme de produits, accédez aux résultats de recherche Product Ranges et cliquez sur la gamme de produits qui vous intéresse. 4 Si plusieurs références s'affichent dans les résultats de recherche Products, cliquez sur la référence qui vous intéresse. 5 Selon la taille de l'écran, vous serez peut-être amené à faire défiler la page pour consulter la fiche technique. 6 Pour enregistrer ou imprimer une fiche technique au format .pdf, cliquez sur Download XXX product datasheet. EIO0000002531 06/2017 9 Les caractéristiques présentées dans ce manuel devraient être identiques à celles fournies en ligne. Toutefois, en application de notre politique d'amélioration continue, nous pouvons être amenés à réviser le contenu du document afin de le rendre plus clair et plus précis. Si vous constatez une différence entre le manuel et les informations fournies en ligne, utilisez ces dernières en priorité. Information spécifique au produit AVERTISSEMENT PERTE DE CONTROLE Le concepteur d'un système de commande doit envisager les modes de défaillance possibles des chemins de commande et, pour certaines fonctions de commande critiques, prévoir un moyen d'atteindre un état sécurisé en cas de défaillance d'un chemin, et après cette défaillance. Par exemple, l'arrêt d'urgence, l'arrêt en cas de surcourse, la coupure de courant et le redémarrage sont des fonctions de commande cruciales. Des canaux de commande séparés ou redondants doivent être prévus pour les fonctions de commande critiques. Les chemins de commande système peuvent inclure les liaisons de communication. Soyez particulièrement attentif aux implications des retards de transmission imprévus ou des pannes de liaison. Respectez toutes les réglementations de prévention des accidents ainsi que les consignes de sécurité locales.1 Chaque implémentation de cet équipement doit être testée individuellement et entièrement pour s'assurer du fonctionnement correct avant la mise en service. Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des dommages matériels. 1 Pour plus d'informations, consultez le document NEMA ICS 1.1 (dernière édition), « Safety Guidelines for the Application, Installation, and Maintenance of Solid State Control » (Directives de sécurité pour l'application, l'installation et la maintenance de commande statique) et le document NEMA ICS 7.1 (dernière édition), « Safety Standards for Construction and Guide for Selection, Installation, and Operation of Adjustable-Speed Drive Systems » (Normes de sécurité relatives à la construction et manuel de sélection, installation et opération de variateurs de vitesse) ou son équivalent en vigueur dans votre pays. Avant de tenter de fournir une solution (machine ou processus) pour une application spécifique en utilisant les POU trouvés dans la bibliothèque, vous devez tenir compte de la réalisation et de l'exécution des bonnes pratiques. La liste non exhaustive de ces pratiques liées à cette bibliothèque inclut l'analyse des risques, la sécurité fonctionnelle, la compatibilité des composants, les tests et la validation du système. 10 EIO0000002531 06/2017 AVERTISSEMENT MAUVAISE UTILISATION DES POU Effectuez une analyse de la sécurité de l'application et des appareils installés. Assurez-vous que les POU sont compatibles avec les appareils du système et n'ont pas d'effets inattendus sur le bon fonctionnement du système. Utilisez les paramètres appropriés, notamment les valeurs limites, et observez l'usure de la machine et son comportement à l'arrêt. Vérifiez que les capteurs et déclencheurs sont compatibles avec les POU sélectionnés. Testez de manière approfondie toutes les fonctions durant la vérification et la mise en service dans tous les modes de fonctionnement. Indiquez des méthodes indépendantes pour les fonctions de commande critiques (arrêt d'urgence, conditions de dépassement des valeurs limites, etc.) en fonction d'une analyse de la sécurité, des règles correspondantes et des réglementations. Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des dommages matériels. AVERTISSEMENT FONCTIONNEMENT IMPREVU DE L’EQUIPEMENT N'utilisez que le logiciel approuvé par Schneider Electric pour faire fonctionner cet équipement. Mettez à jour votre programme d'application chaque fois que vous modifiez la configuration matérielle physique. Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des dommages matériels. Les transferts incomplets, qu'il s'agisse de fichiers de données, d'application et/ou de micrologiciel, peuvent avoir des conséquences graves sur votre machine ou votre contrôleur. En cas coupure de courant (volontaire ou non) ou d'interruption de la communication pendant un transfert de fichier, votre machine peut devenir inopérante ou votre application peut tenter d'utiliser un fichier de données endommagé. Si une interruption survient, relancez le transfert. Veillez à inclure l'impact des fichiers de données endommagés dans votre analyse des risques. EIO0000002531 06/2017 11 AVERTISSEMENT FONCTIONNEMENT IMPREVU DE L'EQUIPEMENT, PERTE DE DONNEES OU FICHIER ENDOMMAGE N'interrompez pas un transfert de données en cours. Si le transfert est interrompu pour une raison quelconque, relancez-le. Ne mettez pas votre machine en service tant que le transfert de fichier n'est pas terminé, sauf si vous avez pris en compte les fichiers endommagés dans votre analyse des risques et si vous avez mis en place des mesures appropriées pour prévenir les conséquences potentiellement graves dues à des échecs de transfert. Le non-respect de ces instructions peut provoquer la mort, des blessures graves ou des dommages matériels. Les POU fournis avec cette bibliothèque utilisent des variables de type POINTER TO en interne. Ces pointeurs ne sont affectés qu'au début de l'exécution du POU concerné. C'est-à-dire qu'ils ne sont pas réaffectés tant que le bloc fonction indique Busy. ATTENTION POINTEUR INCORRECT N'utilisez pas la commande « Changement en ligne » ou l'option « Se connecter avec changement en ligne » tant que l'un des blocs fonction de cette bibliothèque indique Busy dans votre application en cours d'exécution. Le non-respect de ces instructions peut provoquer des blessures ou des dommages matériels. Documents à consulter 12 Titre du document Référence SoMachine - Fonctions et bibliothèques - Guide de l'utilisateur EIO0000000735 (ENG) ; EIO0000000792 (FRE) ; EIO0000000793 (GER) ; EIO0000000795 (SPA) ; EIO0000000794 (ITA) ; EIO0000000796 (CHS) SoMachine - Guide de programmation EIO0000000067 (ENG) ; EIO0000000069 (FRE) ; EIO0000000068 (GER) ; EIO0000000071 (SPA) ; EIO0000000070 (ITA) ; EIO0000000072 (CHS) EIO0000002531 06/2017 Vous pouvez télécharger ces publications ainsi que d'autres informations techniques sur notre site Web : http://www.schneider-electric.com/en/download. Terminologie utilisée dans les normes Les termes techniques, la terminologie, les symboles et les descriptions correspondantes employés dans ce manuel ou figurant dans ou sur les produits proviennent généralement des normes internationales. Dans les domaines des systèmes de sécurité fonctionnelle, des variateurs et de l'automatisme en général, les termes employés sont sécurité, fonction de sécurité, état sécurisé, défaut, réinitialisation du défaut, dysfonctionnement, panne, erreur, message d'erreur, dangereux, etc. Entre autres, les normes concernées sont les suivantes : Norme Description EN 61131-2:2007 Automates programmables - Partie 2 : exigences et essais des équipements ISO 13849-1:2008 Sécurité des machines - Parties des systèmes de commande relatives à la sécurité Principes généraux de conception EN 61496-1:2013 Sécurité des machines - Équipements de protection électro-sensibles Partie 1 : prescriptions générales et essais ISO 12100:2010 Sécurité des machines - Principes généraux de conception - Appréciation du risque et réduction du risque EN 60204-1:2006 Sécurité des machines - Équipement électrique des machines - Partie 1 : règles générales EN 1088:2008 ISO 14119:2013 Sécurité des machines - Dispositifs de verrouillage associés à des protecteurs - Principes de conception et de choix ISO 13850:2006 Sécurité des machines - Fonction d'arrêt d'urgence - Principes de conception EN/IEC 62061:2005 Sécurité des machines - Sécurité fonctionnelle des systèmes de commande électrique, électronique et électronique programmable relatifs à la sécurité IEC 61508-1:2010 Sécurité fonctionnelle des systèmes électriques/électroniques/électroniques programmables relatifs à la sécurité - Exigences générales IEC 61508-2:2010 Sécurité fonctionnelle des systèmes électriques/électroniques/électroniques programmables relatifs à la sécurité - Exigences pour les systèmes électriques/électroniques/électroniques programmables relatifs à la sécurité IEC 61508-3:2010 Sécurité fonctionnelle des systèmes électriques/électroniques/électroniques programmables relatifs à la sécurité - Exigences concernant les logiciels IEC 61784-3:2008 Communications numériques pour les systèmes de mesure et de commande Bus de terrain de sécurité fonctionnelle 2006/42/EC Directive Machines 2014/30/EU Directive sur la compatibilité électromagnétique 2014/35/EU Directive sur les basses tensions EIO0000002531 06/2017 13 De plus, des termes peuvent être utilisés dans le présent document car ils proviennent d'autres normes telles que : Norme Description Série IEC 60034 Machines électriques rotatives Série IEC 61800 Entraînements électriques de puissance à vitesse variable Série IEC 61158 Communications numériques pour les systèmes de mesure et de commande Bus de terrain utilisés dans les systèmes de commande industriels Enfin, le terme zone de fonctionnement utilisé dans le contexte de la description de dangers spécifiques a la même signification que les termes zone dangereuse ou zone de danger employés dans la directive Machines (2006/42/EC) et la norme ISO 12100:2010. NOTE : Les normes susmentionnées peuvent s'appliquer ou pas aux produits cités dans la présente documentation. Pour plus d'informations sur chacune des normes applicables aux produits décrits dans le présent document, consultez les tableaux de caractéristiques de ces références de produit. 14 EIO0000002531 06/2017 SoMachine Informations générales EIO0000002531 06/2017 Partie I Informations générales Informations générales Contenu de cette partie Cette partie contient les chapitres suivants : Chapitre Titre du chapitre Page 1 Présentation de la bibliothèque 17 2 Entrées et sorties communes 21 EIO0000002531 06/2017 15 Informations générales 16 EIO0000002531 06/2017 SoMachine Description EIO0000002531 06/2017 Chapitre 1 Présentation de la bibliothèque Présentation de la bibliothèque Informations générales Présentation de la bibliothèque La bibliothèque FileFormatUtility contient des fonctions qui simplifient l'accès à certains formats de fichiers. Les formats pris en charge sont les suivants : XML (eXtensible Markup Language) CSV (Comma-Separated Values) Caractéristiques de la bibliothèque Le tableau suivant indique les caractéristiques de la bibliothèque : Caractéristique Valeur Titre de la bibliothèque FileFormatUtility Société Schneider Electric Catégorie Util Application/Util Composant FileFormatUtility Espace de noms par défaut FFU Attribut du modèle de langage qualified-access-only (voir SoMachine, Fonctions et bibliothèques - Guide de Bibliothèque post-compatible Oui (FCL (voir SoMachine, Fonctions et bibliothèques - Guide de l'utilisateur)) EIO0000002531 06/2017 l'utilisateur) 17 Description NOTE : Cette bibliothèque est paramétrée en Uniquement accès qualifié . Cela signifie que l'on ne peut accéder aux POU, aux structures de données, aux énumérations, et aux constantes qu'en utilisant l'espace de nom de la bibliothèque. L'espace de noms par défaut de la bibliothèque est FFU. Présentation des POU Bloc fonction Utilisation FB_XmlRead (voir page 58) Lit un fichier XML. FB_XmlWrite (voir page 66) Crée un fichier XML. FC_XmlGetElementValue (voir page 74) Lit la valeur d'un élément de la mémoire tampon (XmlItems). FC_XmlSetElementValue (voir page 77) Modifie la valeur d'un élément de la mémoire tampon (XmlItems). FB_CsvRead (voir page 84) Lit les valeurs d'un fichier CSV. FB_CsvWrite (voir page 93) Ecrit des valeurs dans un fichier CSV nouveau ou existant. Présentation des structures dans l'interface propre au module 18 Structure Utilisation ST_XmlItem (voir page 34) Décrit un élément ou un attribut lu ou écrit dans un fichier XML. ST_XmlUserDefinedHeader (voir page 36) Permet de définir un en-tête, qui est écrit au début d'un fichier XML récemment créé. ST_CsvTable (voir page 37) Transmet la mémoire tampon fournie par l'application au bloc fonction correspondant. ST_CsvFileInformation (voir page 38) Fournit des informations sur le dernier fichier CSV traité par le bloc fonction FB_CsvRead. ST_CsvWarnValueTruncated (voir page 40) Le cas échéant, fournit des informations sur la première valeur tronquée pendant l'exécution du bloc fonction FB_CsvRead. ST_CsvReadParameter (voir page 41) Indique le contenu à lire dans le fichier CSV à l'aide du bloc fonction FB_CsvRead. ST_CsvWriteParameter (voir page 42) Fournit le paramètre de l'opération d'écriture exécutée par le bloc fonction FB_CsvWrite. EIO0000002531 06/2017 Description Présentation des énumérations Énumération Utilisation ET_XmlItemType (voir page 26) Indique le type d'un élément XML. ET_CsvReadMode (voir page 27) Indique le contenu à lire dans le fichier CSV à l'aide du bloc fonction FB_CsvRead. ET_ModeFileOpen (voir page 28) Indique le mode d'ouverture d'un fichier. ET_Result (voir page 29) Contient les valeurs possibles indiquant le résultat des opérations exécutées par les POU de la bibliothèque. EIO0000002531 06/2017 19 Description 20 EIO0000002531 06/2017 SoMachine Entrées et sorties communes EIO0000002531 06/2017 Chapitre 2 Entrées et sorties communes Entrées et sorties communes Comportement des blocs fonction avec l'entrée i_xExecute Informations générales Un front montant sur l'entrée i_xExecute lance l'exécution du bloc fonction. Le bloc fonction poursuit son exécution et la sortie q_xBusy prend la valeur TRUE. Un front montant sur l'entrée i_xExecute est ignoré pendant l'exécution du bloc fonction. A la fin de l'exécution, les sorties q_xDone ou q_xError restent sur TRUE jusqu'à ce que l'entrée i_xExecute prenne la valeur FALSE. Si l'entrée est remise à zéro avant la fin de l'exécution, les sorties q_xDone ou q_xError prennent la valeur TRUE pendant un cycle. Exemple EIO0000002531 06/2017 21 Entrées et sorties communes 22 EIO0000002531 06/2017 SoMachine Types d'unités de données EIO0000002531 06/2017 Partie II Types d'unités de données Types d'unités de données Contenu de cette partie Cette partie contient les chapitres suivants : Chapitre Titre du chapitre Page 3 Énumérations 25 4 Structures 33 5 Alias 43 EIO0000002531 06/2017 23 Types d'unités de données 24 EIO0000002531 06/2017 SoMachine Énumérations EIO0000002531 06/2017 Chapitre 3 Énumérations Énumérations Contenu de ce chapitre Ce chapitre contient les sujets suivants : Sujet Page ET_XmlItemType 26 ET_CsvReadMode 27 ET_ModeFileOpen 28 ET_Result 29 EIO0000002531 06/2017 25 Énumérations ET_XmlItemType Présentation Type : Énumération Disponible à partir de la version : V1.0.8.0 Description L'énumération ET_XmlItemType indique le type d'un élément XML. Éléments de l'énumération Nom Valeur (INT) Description NotSet 0 Aucun type n'a été indiqué pour l'élément XML. Element 1 L'élément est de type élément. Attribute 2 L'élément est de type attribut. Utilisé par 26 ST_XmlItem EIO0000002531 06/2017 Énumérations ET_CsvReadMode Présentation Type : Énumération Disponible à partir de la version : V1.0.8.0 Description L'énumération ET_CsvReadMode définit le contenu à lire dans le fichier CSV à l'aide du bloc fonction FB_CsvRead. Éléments de l'énumération Nom Valeur (INT) Description AllValues 0 Les valeurs du fichier CSV sont toutes lues. OneRow 1 Une ligne (un enregistrement) est lue dans le fichier CSV. OneColumn 2 Une colonne est lue dans le fichier CSV. OneValue 3 Une valeur est lue dans le fichier CSV. GetFileInformation 4 Seules les informations sur le contenu du fichier sont récupérées. Aucune valeur n'est lue. Utilisé par FB_CsvRead EIO0000002531 06/2017 27 Énumérations ET_ModeFileOpen Présentation Type : Énumération Disponible à partir de la version : V1.0.8.0 Description L'énumération ET_ModeFileOpen indique le mode d'ouverture d'un fichier. Éléments de l'énumération Nom Valeur (INT) Description NotSet 0 Aucun mode n'a été sélectionné. Append 1 Un fichier existant est ouvert et le contenu indiqué est ajouté. Si le fichier n'existe pas, le bloc fonction renvoie une erreur. AppendPlus 2 Comme pour Append, un fichier existant est ouvert et le contenu indiqué est ajouté. Par contre, avec AppendPlus, si le fichier n'existe pas, un nouveau fichier est créé. Create 3 Un fichier est créé et le contenu indiqué y est écrit. Si le fichier existe déjà, le bloc fonction renvoie une erreur. CreatePlus 4 Comme pour Create, un fichier est créé et le contenu indiqué y est écrit. Par contre, avec CreatePlus, si le fichier existe déjà, son contenu est remplacé. Utilisé par 28 FB_CsvWrite EIO0000002531 06/2017 Énumérations ET_Result Présentation Type : Énumération Disponible à partir de la version : V1.0.8.0 Description L'énumération ET_Result contient les valeurs possibles qui donnent le résultat des opérations exécutées par les POU de la bibliothèque. Éléments de l'énumération Nom Valeur (UDINT) Description Idle 0 Le bloc fonction est prêt à être exécuté. Informations d'état, indiquées par q_etResult si q_xDone = TRUE OK 1 Le bloc fonction a été exécuté. Informations d'état, indiquées par q_etResult si q_xError = FALSE et q_xBusy = TRUE CheckingInputs 10 Vérification en cours des entrées. Initializing 15 Initialisation en cours d'une ressource interne. OpeningFile 17 Ouverture en cours du fichier. AnalyzingFile 20 Analyse en cours du fichier. ReadingFile 24 Lecture en cours du fichier. WritingFile 25 Ecriture en cours du fichier. ClosingFile 30 Fermeture en cours du fichier. GetFileSize 35 Récupération en cours de la taille du fichier. Informations d'erreur, indiquées par q_etResult si q_xError = TRUE FilePathInvalid 100 La syntaxe du chemin d'accès au fichier n'est pas valide. XPathExpressionInvalid 102 L'expression XPath (langage XML Path) indiquée a une syntaxe non valide ou n'est pas prise en charge. FileInvalid 103 Le contenu du fichier à lire n'est pas pris en charge. Timeout 104 Le délai d'exécution a expiré. FileOpenFailed 110 Une erreur a été détectée lors de l'ouverture du fichier. FileWriteFailed 111 Une erreur a été détectée lors de l'écriture dans le fichier. FileCloseFailed 112 Une erreur a été détectée lors de la fermeture du fichier. EIO0000002531 06/2017 29 Énumérations Nom Valeur (UDINT) Description FileAlreadyExists 113 Le fichier indiqué pour l'opération d'écriture existe déjà. Il ne peut pas être remplacé. FileNotExists 114 Le fichier indiqué pour l'opération d'écriture n'existe pas. Impossible d'ajouter des données. GetFileSizeFailed 115 Une erreur a été détectée lors de la récupération de la taille du fichier. NumOfParentsExceeded 120 Le niveau d'imbrication de la structure XML est supérieur au paramètre Gc_udiXmlMaxNumOfParents défini dans la liste des paramètres globaux (voir page 49). BufferFull 140 La mémoire tampon servant à stocker les éléments lus n'est pas suffisamment grande. AdditionalContentInvalid 150 Le pointeur pbyAdditionalContent (voir page 36) est égal à 0 alors que la valeur de udiNumBytesToWrite est supérieure à 0. ElementNotFound 160 Aucun élément correspondant à l'expression XPath n'a été trouvé. XmlStructureInconsistent 165 Les relations parent-enfant entre les éléments du tableau XmlItems sont incohérentes. XmlItemTypeInvalid 167 Un élément du tableau XmlItems est de type non valide. ParsingFailed 169 Une erreur interne a été détectée lors de l'analyse du fichier. FileInconsistent 170 La structure du fichier XML analysé est incohérente. Une balise au moins n'est pas fermée correctement. TableReadValuesInvalid 171 Les dimensions fournies pour la table de stockage des valeurs lues ne sont pas valides. Consultez la section ST_CsvTable (voir page 37). TableWriteValuesInvalid 172 Les dimensions fournies pour la table contenant les valeurs à écrire ne sont pas valides. Consultez la section ST_CsvTable (voir page 37). TableInvalid 175 Le pointeur pbyAdditionalContent (voir page 36) vers la mémoire tampon fournie par l'application doit être différent de 0. ReadParameterInvalid 181 Les paramètres contrôlant l'opération de lecture ne sont pas valides. Consultez la section ST_CsvReadParameter (voir page 41). WriteParameterInvalid 182 Les paramètres contrôlant l'opération d'écriture ne sont pas valides. Consultez la section ST_CsvWriteParameter (voir page 42). FileReadFailed 190 Une erreur interne a été détectée lors de la lecture du fichier. TableTooSmall 200 La table ne dispose pas de suffisamment de cellules pour stocker les valeurs à lire dans le fichier. 30 EIO0000002531 06/2017 Énumérations Nom Valeur (UDINT) Description ValueNotFound 210 La valeur définie par la ligne et la colonne n'existe pas dans le fichier CSV. FilePathTooLong 215 Le chemin d'accès au fichier indiqué, hors extension, se situe en dehors de la plage valide. Impossible d'ajouter l'extension de fichier par défaut. Le chemin d'accès sans extension est limité à 255 caractères, moins la longueur de l'extension de fichier par défaut. FilenameTooLong 216 Le nom de fichier indiqué, avec extension, dépasse la longueur maximale de 126 caractères. FilenameInvalid 217 Le nom de fichier indiqué n'est pas valide. FirstItemNoElement 220 Le premier élément du tableau XmlItems (voir page 34) n'est pas de type élément. FirstItemInvalidParentIndex 221 La valeur diParentIndex du premier élément du tableau XmlItems (voir page 34) n'est pas égale à -1. XpathRootElementDoesNotMatch 222 Le nom du premier élément du tableau XmlItems (voir page 34) ne correspond pas à l'élément racine indiqué dans l'expression XPath. XpathExpressionNotSupported 230 L'expression XPath indiquée n'est pas prise en charge par cette fonction. UnexpectedProgramBehaviour 999 Une erreur interne a été détectée. Contactez votre service d'assistance Schneider Electric. Utilisé par FB_XmlRead FB_XmlWrite FB_CsvRead FB_CsvWrite EIO0000002531 06/2017 31 Énumérations 32 EIO0000002531 06/2017 SoMachine Structures EIO0000002531 06/2017 Chapitre 4 Structures Structures Contenu de ce chapitre Ce chapitre contient les sujets suivants : Sujet Page ST_XmlItem 34 ST_XmlUserDefinedHeader 36 ST_CsvTable 37 ST_CsvFileInformation 38 ST_CsvWarnValueTruncated 40 ST_CsvReadParameter 41 ST_CsvWriteParameter 42 EIO0000002531 06/2017 33 Structures ST_XmlItem Présentation Type : Structure Disponible à partir de la version : V1.0.8.0 Hérite de : - Description La structure ST_XmlItem permet de décrire un élément ou un attribut lu ou écrit dans un fichier XML. Éléments de la structure Nom Type de données Description diParentIndex DINT Index dans le tableau désignant la position du parent de l'élément XML (reportez-vous à la section Exemple de relations hiérarchiques indiquées par uiParentIndex (voir page 35)). Si la valeur est -1, l'élément est un élément racine. sName STRING[GPL.Gc_uiXmlLengthO fString] Nom de l'élément ou de l'attribut. sValue STRING[GPL.Gc_uiXmlLengthO fString] Valeur de l'élément ou de l'attribut. etType ET_XmlItemType (voir page 26) Type de l'élément XML. uiNumOfAttributes ULINT Cette valeur varie en fonction du type de l'élément XML : Avec un élément de type élément, la valeur indique le nombre d'attributs associés. Avec un élément de type attribut, la valeur indique le numéro séquentiel. Utilisé par 34 FB_XmlRead FB_XmlWrite EIO0000002531 06/2017 Structures Exemple de relations hiérarchiques indiquées par uiParentIndex L'exemple suivant illustre la corrélation entre le paramètre uiParentIndex de la mémoire tampon de type XmlItems fournie par l'application et la structure hiérarchique dans le document XML. Document XML Mémoire tampon de type XmlItems fournie par l'application <?xml version="1.0" encoding="ASCII"?> <AAA> <BBB /> <CCC /> <DDD> <EEE /> </DDD> </AAA> Elément Index de parent Explication AAA –1 AAA est l'élément racine. Il n'a pas de parent. BBB 0 CCC 0 AAA est l'élément parent. Il est stocké dans le tableau à l'index 0. DDD 2 CCC est l'élément parent. Il est stocké dans le tableau à l'index 2. EEE 3 DDD est l'élément parent. Il est stocké dans le tableau à l'index 3. EIO0000002531 06/2017 35 Structures ST_XmlUserDefinedHeader Présentation Type : Structure Disponible à partir de la version : V1.0.8.0 Hérite de : - Description La structure ST_XmlUserDefinedHeader permet de définir un en-tête qui est écrit dans le fichier XML. Éléments de la structure Nom Type de données Description sUserComment STRING[255] Saisissez un texte qui sera converti en commentaire XML. Ce texte est écrit au début du fichier XML. pbyAdditionalContent POINTER TO BYTE Pointeur vers la mémoire tampon fournie par l'application, qui renferme le contenu à écrire au début du fichier XML en plus du commentaire. udiNumBytesToWrite UDINT Indique la taille du contenu à ajouter, en octets. Utilisé par 36 FB_XmlWrite EIO0000002531 06/2017 Structures ST_CsvTable Présentation Type : Structure Disponible à partir de la version : V1.0.8.0 Hérite de : - Description La structure ST_CsvTable permet de transmettre la mémoire tampon fournie par l'application au bloc fonction correspondant. Éléments de la structure Nom Type de données Description pbyTable POINTER TO BYTE Pointeur vers la mémoire tampon (tableau ARRAY à double entrée de type STRING) fournie par l'application. uiNumOfRows UINT Nombre de lignes (enregistrements) de la table. uiNumOfColumns UINT Nombre de valeurs par ligne (enregistrement) dans la table. udiSizeOfTable UDINT Taille totale de la table, en octets. NOTE : Pour empêcher tout accès non autorisé, par exemple un accès de pointeur à la mémoire, utilisez l'opérateur arithmétique SIZEOF en association avec la mémoire tampon cible pour déterminer la valeur de udiSizeOfTable. EIO0000002531 06/2017 37 Structures Exemple L'exemple suivant explique comme affecter des valeurs à cette structure : PROGRAM POU VAR g_asCsvTable:ARRAY[0..c_uiNumOfRows-1,0..c_uiNumOfColumns-1] OF STRING(c_uiLengthOfValue); stCsvTable: FFU.ST_CsvTable; END_VAR VAR CONSTANT c_uiNumOfRows :UINT:= 100; c_uiNumOfColumns :UINT:= 10; c_uiLengthOfValue :UINT:= 40; END_VAR stCsvTable.pbyTable := ADR(g_asCsvTable); stCsvTable.uiNumOfRows := c_uiNumOfRows; stCsvTable.uiNumOfColumns := c_uiNumOfColumns; stCsvTable.udiSizeOfTable := SIZEOF(g_asCsvTable); Utilisé par FB_XmlRead FB_XmlWrite ST_CsvFileInformation Présentation Type : Structure Disponible à partir de la version : V1.0.8.0 Hérite de : - Description La structure ST_CsvFileInformation fournit des informations sur le dernier fichier CSV traité par le bloc fonction FB_CsvRead (voir page 84). 38 EIO0000002531 06/2017 Structures Éléments de la structure Nom Type de données Description udiFileSize UDINT Taille du fichier CSV, en octets. udiNumOfValues UDINT Nombre de valeurs dans le fichier CSV. udiNumOfRows UDINT Nombre de lignes (enregistrements) dans le fichier CSV. udiNumOfColumns UDINT Nombre de colonnes (valeurs par enregistrement) dans le fichier CSV. xTableInconsistent BOOL Renvoie TRUE si le nombre de colonnes détecté diffère pour deux lignes au moins. Utilisé par FB_CsvRead EIO0000002531 06/2017 39 Structures ST_CsvWarnValueTruncated Présentation Type : Structure Disponible à partir de la version : V1.0.8.0 Hérite de : - Description La structure ST_CsvWarnValueTruncated fournit des informations sur la première valeur tronquée pendant l'exécution du bloc fonction FB_CsvRead. Éléments de la structure Nom Type de données Description xValueTruncated BOOL Renvoie TRUE si au moins une valeur a été tronquée. udiRow UDINT Numéro de la ligne contenant la première valeur tronquée. udiColumn UDINT Numéro de la colonne contenant la première valeur tronquée. Utilisé par 40 FB_CsvRead EIO0000002531 06/2017 Structures ST_CsvReadParameter Présentation Type : Structure Disponible à partir de la version : V1.0.8.0 Hérite de : - Description La structure ST_CsvReadParameter permet d'indiquer le contenu à lire dans le fichier CSV à l'aide du bloc fonction FB_CsvRead. Éléments de la structure Nom Type de données Description sDelimiter STRING[5] Code de caractère du séparateur servant à délimiter deux valeurs. etReadMode ET_ReadMode Indique le contenu à lire dans le fichier CSV. udiNumOfRow UDINT Numéro de la ligne à lire. Cette valeur est pertinente pour : ET_ReadMode.OneRow ET_ReadMode.OneValue udiNumOfColumn UDINT Consultez la section ET_CSVReadMode (voir page 27). Numéro de la colonne à lire. Cette valeur est pertinente pour : ET_ReadMode.OneColumn ET_ReadMode.OneValue Consultez la section ET_CSVReadMode (voir page 27). Utilisé par FB_CsvRead EIO0000002531 06/2017 41 Structures ST_CsvWriteParameter Présentation Type : Structure Disponible à partir de la version : V1.0.8.0 Hérite de : - Description La structure ST_CsvWriteParameter permet de configurer l'opération d'écriture exécutée par le bloc fonction FB_CsvWrite. Éléments de la structure Nom Type de données Description sDelimiter STRING[5] Code de caractère du séparateur inséré entre deux valeurs. etModeFileOpen ET_ModeFileOp Mode d'écriture utilisé lors de l'ouverture ou de la création du en (voir page 28) fichier CSV. udiNumOfRow UDINT Nombre de lignes à écrire. Lorsque la valeur est égale à 0, les lignes définies par le paramètre i_stBufferWriteValues.uiNumOfRows sont écrites dans le fichier. udiNumOfColumn UDINT Nombre de colonnes par ligne à écrire. Lorsque la valeur est égale à 0, les colonnes définies par le paramètre i_stBufferWriteValues.uiNumOfColumns sont écrites dans le fichier. Utilisé par 42 FB_CsvWrite EIO0000002531 06/2017 SoMachine Alias EIO0000002531 06/2017 Chapitre 5 Alias Alias Alias Présentation Type : ALIAS (DUT) Disponible à partir de la version : V1.0.8.0 Hérite de : – Description Un alias est un type de données complexe, qui est utilisé dans cette bibliothèque. XmlItems Nom Type de données XmlItems ARRAY[0..GPL.Gc_ud Le type d'unité de données XmlItems permet de stocker iXmlMaxNbOfElements les éléments lus ou écrits dans un fichier XML. Utilisez-le ] of (ST_XmlElement) pour déclarer la mémoire tampon fournie par l'application. Ce type est associé aux blocs fonction FB_XmlRed et FB_XmlWrite. EIO0000002531 06/2017 Description 43 Alias 44 EIO0000002531 06/2017 SoMachine Variables globales EIO0000002531 06/2017 Partie III Variables globales Variables globales Contenu de cette partie Cette partie contient les chapitres suivants : Chapitre Titre du chapitre Page 6 Liste des constantes globales 47 7 Liste des paramètres globaux 49 EIO0000002531 06/2017 45 Variables globales 46 EIO0000002531 06/2017 SoMachine Liste des constantes globales EIO0000002531 06/2017 Chapitre 6 Liste des constantes globales Liste des constantes globales Liste des constantes globales (GCL) Présentation Type : Constantes globales Disponible à partir de la version : V1.0.8.0 Description La liste des constantes globales contient les constantes globales de la bibliothèque FileFormatUtility. Constantes globales Variable Type de données Gc_sLibraryVersion STRING[80] 1 Valeur Description 1 Vx.x.x.0 Version de bibliothèque Cette valeur varie selon la version de la bibliothèque. EIO0000002531 06/2017 47 Liste des constantes globales 48 EIO0000002531 06/2017 SoMachine Liste des paramètres globaux EIO0000002531 06/2017 Chapitre 7 Liste des paramètres globaux Liste des paramètres globaux GPL Présentation Type : Paramètres globaux Disponible à partir de la version : V1.0.8.0 Description La liste des paramètres globaux (GPL) contient les constantes globales utilisées par certains composants de la bibliothèque. Il est possible de modifier un à un les paramètres pour chaque application dans laquelle la bibliothèque est utilisée. Les modifications doivent être apportées dans le gestionnaire de bibliothèques du projet référençant la bibliothèque. EIO0000002531 06/2017 49 Liste des paramètres globaux Paramètres globaux Variable Type de Valeur par données défaut Plage Gc_udiXmlMaxNumOfItems UDINT 1 000 1…2 147 483 Définit la taille de la mémoire 647 tampon contenant les éléments (avec leurs attributs) lus ou à écrire dans un fichier XML. La valeur correspond à la somme des éléments et des attributs pouvant être stockés dans la mémoire tampon. Gc_uiXmlLengthOfString UINT 40 1…254 Définit la longueur maximale des éléments de type STRING dans la structure (voir page 34) ST_XmlItem. Gc_udiXmlMaxNumOfParents UDINT 20 1…10 000 Définit le niveau d'imbrication maximal de la structure XML. Utilisée en interne, la valeur sert à déterminer l'index du parent. Gc_uiXmlWriteProcessingBlockSize UINT 5 000 500…65 535 Définit la taille de la mémoire tampon provisoire (en octets) utilisée pour traiter le contenu du fichier XML lors d'une opération d'écriture. Gc_uiCsvReadProcessingBlockSize UINT 1 000 100…65 535 Définit la taille de la mémoire tampon provisoire (en octets) utilisée pour traiter les valeurs du fichier CSV lors d'une opération de lecture. Gc_uiCsvWriteProcessingBlockSize UINT 1 000 100…65 535 Définit la taille de la mémoire tampon provisoire (en octets) utilisée pour traiter les valeurs du fichier CSV lors d'une opération d'écriture. 50 Description EIO0000002531 06/2017 SoMachine Fonctions globales EIO0000002531 06/2017 Partie IV Fonctions globales Fonctions globales EIO0000002531 06/2017 51 Fonctions globales 52 EIO0000002531 06/2017 SoMachine Fonctions globales EIO0000002531 06/2017 Chapitre 8 Fonctions globales Fonctions globales FC_EtResultToString Présentation Type : Fonction Disponible à partir de la version : V1.0.8.0 Hérite de : – Met en œuvre : – Tâche Convertir un élément d'énumération de type ET_Result en une variable de type STRING. Description fonctionnelle La fonction FC_EtResultToString permet de convertir un élément d'énumération de type ET_Result en une variable de type STRING. Interface Entrée Type de données Description i_etResult ET_Result Énumération avec le résultat. Valeur retournée Type de données Description STRING(80) ET_Result converti en texte. EIO0000002531 06/2017 53 Fonctions globales 54 EIO0000002531 06/2017 SoMachine Unités organisationnelles de programme (POU) XML EIO0000002531 06/2017 Partie V Unités organisationnelles de programme (POU) XML Unités organisationnelles de programme (POU) XML Contenu de cette partie Cette partie contient les chapitres suivants : Chapitre 9 10 EIO0000002531 06/2017 Titre du chapitre Page Blocs fonction XML 57 Fonctions XML 73 55 Unités organisationnelles de programme (POU) XML 56 EIO0000002531 06/2017 SoMachine Blocs fonction XML EIO0000002531 06/2017 Chapitre 9 Blocs fonction XML Blocs fonction XML Contenu de ce chapitre Ce chapitre contient les sous-chapitres suivants : Sous-chapitre Sujet Page 9.1 FB_XmlRead 58 9.2 FB_XmlWrite 66 EIO0000002531 06/2017 57 Blocs fonction XML Sous-chapitre 9.1 FB_XmlRead FB_XmlRead Contenu de ce sous-chapitre Ce sous-chapitre contient les sujets suivants : Sujet 58 Page Description fonctionnelle du bloc FB_XmlRead 59 Remarques concernant le bloc FB_XmlRead 62 Dépannage du bloc FB_XmlRead 63 Exemple de bloc FB_XmlRead 64 EIO0000002531 06/2017 Blocs fonction XML Description fonctionnelle du bloc FB_XmlRead Présentation Type : Bloc fonction Disponible à partir de la version : V1.0.8.0 Hérite de : - Met en œuvre : - Description fonctionnelle Le bloc fonction FB_XmlRead permet de lire (analyser) un fichier XML stocké dans le système de fichiers du contrôleur ou dans la mémoire étendue (une carte SD, par exemple). Pour obtenir des informations sur le système de fichiers, reportez-vous au chapitre Organisation de la mémoire Flash du guide de programmation de votre contrôleur. Le contenu du fichier XML, à savoir les éléments XML ainsi que leurs attributs et valeurs, est stocké dans un tableau de type XmlItems, dans la mémoire du contrôleur dédiée aux applications. Vous devez déclarer ce tableau et l'affecter à l'entrée associée i_refXmlItems au niveau du bloc fonction. Le contenu du tableau est effacé au début de chaque opération de lecture. Le paramètre Gc_udiXmlMaxNumOfItems de la liste GPL (voir page 50) indique le nombre d'éléments (éléments + attributs) pouvant être stockés dans le tableau. Les noms et les valeurs des éléments et attributs sont stockés dans des champs de type STRING. Vous pouvez définir la longueur de ces champs STRINGs avec le paramètre global Gc_uiXmlLengthOfString. Lorsque la valeur à lire dans le fichier dépasse cette longueur, la valeur d'origine est tronquée. Dès qu'une valeur au moins est tronquée, l'information est communiquée par la sortie q_xWarnValueTruncated. NOTE : La sortie q_xWarnValueTruncated est valide à condition que la sortie q_xDone soit sur TRUE. EIO0000002531 06/2017 59 Blocs fonction XML La structure hiérarchique des éléments du fichier XML est indiquée par le paramètre uiParentIndex pour chaque élément du tableau correspondant au type XmlItems. Pour plus d'informations, reportez-vous à la sectionExemple de relations hiérarchiques indiquées par (voir page 35)uiParentIndex. Interface Entrée Type de données Description i_xExecute BOOL Le bloc fonction exécute l'opération de lecture concernant le fichier XML indiqué sur un front montant de cette entrée. Reportez-vous également au chapitre Comportement des blocs fonction avec l'entrée i_xExecute (voir page 21). i_sFilePath STRING[255] Chemin d'accès au fichier XML qui doit être lu. Lorsque le nom de fichier est indiqué sans extension, le bloc fonction ajoute l'extension .xml. i_sXPathItemToRead STRING[255] Expression XPath pour l'adressage des éléments à lire dans le fichier XML. Valeur par défaut : '//*' i_xReadElementsOnly BOOL Si cette entrée a la valeur TRUE, les noms d'éléments et leurs valeurs sont lus et stockés dans la mémoire tampon de l'application. Si cette entrée a la valeur FALSE, les attributs et leurs valeurs sont également lus et stockés dans la mémoire tampon de l'application. i_refXmlItems REFERENCE TO XmlItems Mémoire tampon fournie par l'application pour le stockage des éléments lus dans le fichier XML indiqué. La mémoire tampon est effacée à chaque exécution du bloc fonction. Sortie Type de données Description q_xDone BOOL Si cette sortie est TRUE, l'exécution s'est effectuée correctement. q_xBusy BOOL Si cette sortie est TRUE, le bloc fonction est en cours d'exécution. q_xError BOOL Si cette sortie est TRUE, une erreur a été détectée. Pour plus d'informations, reportez-vous à q_etResult et q_etResultMsg. q_etResult ET_Result Fournit des informations de diagnostic et d'état sous la forme d'une valeur numérique. q_xBusy = True, la valeur indique l'état. Si q_xDone ou q_xError = True, la valeur indique le résultat. 60 EIO0000002531 06/2017 Blocs fonction XML Sortie Type de données Description q_sResultMsg STRING[80] Fournit des informations de diagnostic et d'état sous la forme d'un message textuel. q_udiNumOfItemsRead UDINT Nombre total d'éléments et d'attributs lus dans le fichier XML. q_xWarnValueTruncated BOOL Si cette sortie prend la valeur TRUE, une valeur au moins a été tronquée. NOTE : La sortie est mise à jour en même temps que q_xDone. Pour plus d'informations sur les signaux des entrées et sorties basiques, reportez-vous au chapitre Comportement des blocs fonction avec l'entrée i_xExecute (voir page 21). Expressions XPath définissant le contenu à lire Pour lire un élément ou un groupe d'éléments dans le fichier XML, utilisez la syntaxe du langage XPath (XML Path). Le contenu à lire est défini par l'entrée i_XpathItemToRead. NOTE : Le bloc fonction FB_XmlRead prend en charge une partie des fonctions fournies par les expressions XPath. Le tableau suivant répertorie les expressions XPath prises en charge : Expression XPath Description //* Sélectionne tous les éléments du document. / Indique un chemin d'accès absolu à un élément. /…/child::* Sélectionne tous les éléments enfants du nœud. /…/descendant::* Sélectionne tous les éléments descendants du nœud. /…/<nom_élément> Sélectionne tous les éléments du nœud qui correspondent au nom indiqué. /…/<nom_élément>[<n>] Sélectionne le nème élément du nœud qui correspond au nom indiqué. /…/<nom_élément>[@<attribut>] Sélectionne tous les éléments du nœud qui correspondent au nom et à l'attribut indiqués. /…/<nom_élément>[@<attribut>=<valeur>] Sélectionne tous les éléments du nœud qui correspondent au nom et à la paire attribut/valeur indiqués. NOTE : Les prédicats, ou expressions entre crochets ([]), peuvent être suivis d'une barre oblique (/) et d'un nom d'élément pour identifier l'élément enfant suivant. Exemple : /…/<nom_élément>[<n>]/<nom_élément> EIO0000002531 06/2017 61 Blocs fonction XML Remarques concernant le bloc FB_XmlRead Observations Les contraintes suivantes s'appliquent lors de la lecture d'un fichier XML : Seuls les fichiers XML codés en ASCII sont pris en charge. Les espaces vides sont interprétés comme des valeurs, contrairement aux tabulations. Les sauts de ligne dans les valeurs ne sont pas pris en charge. Les caractères situés avant ce signe de ponctuation dans une valeur sont pris en compte lors de l'analyse. Seuls les noms d'éléments et leurs attributs (avec les valeurs correspondantes) sont lus, puis stockés dans la mémoire tampon fournie par l'application. Par conséquent, l'analyseur XML ne détecte pas les autres objets XML, tels que les commentaires et les déclarations DOCTYPE. Les objets CDATA ne sont pas pris en charge. Le contenu des objets CDATA est interprété comme une valeur de l'élément ouvert. 62 Les valeurs lues dans le fichier sont stockées en tant que valeurs STRING dans l'application. Ce principe s'applique également aux valeurs numériques. Avant de pouvoir être traitées, les valeurs doivent être converties pour correspondre au type de données approprié. L'utilisation des fonctions de conversion STRING_TO_ est alors recommandée. Dans ce cas, les valeurs STRING doivent respecter une syntaxe spécifique, qui dépend du type de données cible. Pour faciliter le traitement des valeurs lues, merci de tenir compte de ces exigences lorsque vous créez des fichiers. L'analyse du fichier XML prend du temps. Elle se déroule en parallèle de la tâche appelant le bloc fonction. C'est pourquoi la durée d'analyse est incluse dans le temps d'exécution de la tâche. Ce temps d'exécution s'allonge donc pour un cycle lorsque le bloc fonction FB_XmlRead est en cours d'exécution. En fonction de la taille du fichier et du contrôleur, le cycle de la tâche peut durer plusieurs secondes. Pour éviter que l'analyse d'un fichier XML bloque d'autres processus, créez une tâche distincte d'une priorité inférieure (>24) pour cette fonction. Voyez également s'il est possible de désactiver l'horloge de surveillance de cette tâche pour éviter des exceptions associées en cours d'analyse. Pour plus d'informations, reportez-vous au chapitre Horloges de surveillance du système et des tâches du guide de programmation de votre contrôleur. EIO0000002531 06/2017 Blocs fonction XML Dépannage du bloc FB_XmlRead Dépannage Le tableau suivant présente quelques problèmes généraux avec leurs solutions : Problème Cause Solution L'exécution se termine par la détection d'une erreur et renvoie le résultat FilePathInvalid. Le fichier indiqué ou son Vérifiez que le fichier figure bien dans le répertoire répertoire ne sont pas disponibles. La syntaxe du chemin indiqué. Si le chemin d'accès pointe vers la mémoire étendue (une carte SD, par exemple), vérifiez que celle-ci est disponible. d'accès au fichier n'est pas Vérifiez que la syntaxe employée est prise en charge par votre contrôleur. valide. Par exemple, le séparateur autorisé varie en fonction du contrôleur ('\' ou '/'). L'exécution se termine par la détection d'une erreur et renvoie le résultat FileInvalid. Le fichier comporte des caractères autres que ASCII. Une balise de fermeture inattendue a été détectée lors de l'analyse. L'exécution se termine par la L'expression XPath saisie détection d'une erreur et n'est pas valide ou n'est renvoie le résultat pas prise en charge. XPathExpressionInvalid. L'exécution se termine par la détection d'une erreur et renvoie le résultat NumOfParentsExceeded. Le niveau d'imbrication L'exécution se termine par la détection d'une erreur et renvoie le résultat BufferFull. Le nombre d'éléments à des éléments à lire dans le fichier XML est supérieur à celui défini. Vérifiez que le fichier contient exclusivement des caractères ASCII. Vérifiez la validité du fichier XML : chaque balise d'ouverture doit être fermée et les éléments doivent être correctement imbriqués. NOTE : Les noms d'élément prennent en compte les majuscules et les minuscules. Vérifiez la validité de la syntaxe de l'expression XPath. Vérifiez que l'expression est prise en charge par le bloc fonction (voir page 61). Augmentez la valeur du paramètre Gc_udiXmlMaxNumOfParents de la liste GPL (voir page 50). Evitez d'utiliser des fichiers avec des structures XML à niveau d'imbrication trop détaillé. EIO0000002531 06/2017 lire dans le fichier XML dépasse la taille de la mémoire tampon fournie par l'application. Augmentez la taille de la mémoire tampon à l'aide du paramètre Gc_XmlMaxNumOfItems de la liste GPL (voir page 50). Scindez l'opération de lecture en plusieurs blocs. Utilisez l'expression XPath qui convient pour limiter le nombre d'éléments à lire par bloc. 63 Blocs fonction XML Problème Cause Solution L'exécution se termine par la détection d'une erreur et renvoie le résultat ElementNotFound. L'élément défini par Vérifiez l'absence de faute de frappe dans l'expression XPath ne figure pas dans le fichier. La déclaration du chemin d'accès dans l'expression XPath ne respecte pas la structure utilisée dans le fichier XML. l'élément défini. Vérifiez que la déclaration du chemin d'accès respecte la structure attendue dans le fichier XML. Vérifiez que le fichier XML défini à l'aide du paramètre i_sFilePath (voir page 60) est le bon. L'expression XPath contient une faute de frappe. L'exécution se termine par la détection d'une erreur et renvoie le résultat FileInconsistent. Une balise au moins n'est Vérifiez la validité du fichier XML : chaque balise pas fermée alors que la fin du fichier est atteinte. d'ouverture doit être fermée et les éléments doivent être correctement imbriqués. Exemple de bloc FB_XmlRead Présentation L'exemple suivant illustre la manière dont les éléments lus dans un fichier XML sont stockés dans la mémoire tampon fournie par l'application, en vue de leur traitement. Exemple de fichier XML <?xml version="1.0" encoding="ASCII"?> <!--This is the user comment.--> <!DOCTYPE AAA SYSTEM "example.dtd"> <AAA> <BBB>1st bbb</BBB> <BBB>2nd bbb</BBB> <CCC id="1"> <DDD id="1" activate="TRUE">ddd</DDD> </CCC> </AAA> NOTE : Le commentaire et la déclaration du type de document (DTD) aux lignes 2 et 3 ne sont pas lus. Ces informations ne seront pas disponibles dans l'application. 64 EIO0000002531 06/2017 Blocs fonction XML Exemple de programme PROGRAM SR_Example VAR fbRead :FFU.FB_XmlRead; astXmlItems :FFU.XmlItems; xCmdRead :BOOL; END_VAR fbRead i_xExecute := xCmdRead, i_sFilePath := '/sd0/Example.xml', i_sXPathItemsToRead := , i_xReadElementsOnly := , i_refXmlItems := astXmlItems, q_xDone => , q_xBusy => , q_xError => , etResult => , q_sResultMsg => , q_udiNumOfItems => , q_xWarnValueTruncated => ) ; Mémoire tampon La mémoire tampon fournie par l'application de type XmlItems contient les éléments et les attributs lus dans le fichier XML. Dans cet exemple, la sortie q_udiNumOfItems a la valeur 8. Index de tableau uiParentIndex sName sValue etType uiNumOfAttributes 0 -1 AAA – 1 0 1 0 BBB 1st bbb 1 0 2 0 BBB 2nd bbb 1 0 3 2 CCC – 1 1 4 3 id 1 2 1 5 3 DDD ddd 1 2 6 5 id 1 2 1 7 5 activate TRUE 2 2 EIO0000002531 06/2017 65 Blocs fonction XML Sous-chapitre 9.2 FB_XmlWrite FB_XmlWrite Contenu de ce sous-chapitre Ce sous-chapitre contient les sujets suivants : Sujet 66 Page Description fonctionnelle du bloc FB_XmlWrite 67 Remarques concernant le bloc FB_XmlWrite 69 Dépannage du bloc FB_XmlWrite 70 Exemple de bloc FB_XmlWrite 71 EIO0000002531 06/2017 Blocs fonction XML Description fonctionnelle du bloc FB_XmlWrite Présentation Type : Bloc fonction Disponible à partir de la version : V1.0.8.0 Hérite de : - Met en œuvre : - Description fonctionnelle Le bloc fonction FB_XmlWrite permet de créer ou d'écraser un fichier XML stocké dans le système de fichiers du contrôleur ou dans la mémoire étendue (une carte SD, par exemple). Pour obtenir des informations sur le système de fichiers, reportez-vous au chapitre Organisation de la mémoire Flash du guide de programmation de votre contrôleur. Les éléments du tableau de type XmlItems stockés dans la mémoire du contrôleur dédiée aux applications sont ensuite écrits dans le fichier qui vient d'être créé. Le code de caractère LF (0A hex) est utilisé comme saut de ligne dans le fichier créé. Le prologue <?xml version="1.0" encoding="ASCII"?> est inséré en première ligne de chaque fichier créé par le bloc fonction. Les éléments XML fournis dans le tableau de type XmlItems, ainsi que leurs attributs et valeurs, sont écrits après le prologue dans le fichier. La structure ou l'imbrication des éléments sont définies par le paramètre uiParentIndex, qui fait partie de la structure ST_XmlItem. Pour plus d'informations, reportez-vous à la section Exemple de relations hiérarchiques indiquées par (voir page 35)uiParentIndex. EIO0000002531 06/2017 67 Blocs fonction XML Le bloc fonction FB_XmlWrite fournit l'entrée i_sRootElement permettant de définir un élément racine. Cela s'avère utile lorsque le tableau qui fournit les éléments contient zéro ou plusieurs éléments racine : Scénario sans élément racine : autorisé à condition que les valeurs des paramètres uiParentIndex du tableau soient toutes égales à 0. Scénario avec plusieurs éléments racine : possible si seul un groupe d'éléments enfants a été lu précédemment dans le fichier. Hormis ces deux scénarios exceptionnels, la structure définie doit être cohérente. Dans le cas contraire, le bloc fonction annule l'opération d'écriture et le fichier est ignoré. Le paramètre uiParentIndex ne s'applique pas avec des éléments de type attribut. Les attributs sont affectés à l'élément de type élément supérieur suivant dans le tableau. La structure i_stUserDefinedHeader vous permet de définir un contenu supplémentaire, qui sera écrit entre le prologue et le premier élément dans le fichier XML. Il peut s'agir, par exemple, d'un commentaire (syntaxe XML) et/ou d'une déclaration DOCTYPE (DTD). L'entrée i_xOverwriteFile vous permet d'indiquer si un fichier existant doit être remplacé ou non. Si l'entrée a la valeur FALSE et si le fichier indiqué existe déjà, le bloc fonction ne s'exécute pas et une erreur est renvoyée. Interface Entrée Type de données Description i_xExecute BOOL Le bloc fonction exécute l'opération de lecture concernant le fichier XML indiqué sur un front montant de cette entrée. Reportez-vous également au chapitre Comportement des blocs fonction avec l'entrée i_xExecute (voir page 21). i_sFilePath STRING[255] Chemin d'accès au fichier XML. Lorsque le nom de fichier est indiqué sans extension, le bloc fonction ajoute l'extension .xml. i_xOverwriteFile BOOL Indique si un fichier existant doit être remplacé ou non. Pour autoriser le remplacement, réglez cette entrée sur TRUE. i_sRootElement WSTRING[GPL.Gc_u Elément racine créé lorsque le tableau respectant la structure iXmlLengthOfWStri XmlElements contient plusieurs éléments racine. ng] i_stUserDefinedHeader ST_XmlUserDefined La structure renferme un contenu défini par l'utilisateur, qui HeaderAscii doit être écrit au début du nouveau fichier XML. i_timTimeout TIME L'exécution du bloc fonction est annulée à l'issue de ce délai. Si la valeur est T#0s, la valeur par défaut T#2s est appliquée. i_refXmlItems REFERENCE TO XmlItems Mémoire tampon fournie par l'application et dans laquelle est stocké le contenu à écrire dans le fichier XML. 68 EIO0000002531 06/2017 Blocs fonction XML Sortie Type de données Description q_xDone BOOL Si cette sortie est TRUE, l'exécution s'est effectuée correctement. q_xBusy BOOL Si cette sortie est TRUE, le bloc fonction est en cours d'exécution. q_xError BOOL Si cette sortie est TRUE, une erreur a été détectée. Pour plus d'informations, reportez-vous à q_etResult et q_etResultMsg. q_etResult ET_Result Fournit des informations de diagnostic et d'état sous la forme d'une valeur numérique. q_xBusy = True, la valeur indique l'état. Si q_xDone ou q_xError = True, la valeur indique le résultat. q_sResultMsg STRING[80] Fournit des informations de diagnostic et d'état sous la forme d'un message textuel. Remarques concernant le bloc FB_XmlWrite Observations Les contraintes suivantes s'appliquent lors de l'écriture dans un fichier XML : Les opérations sur les fichiers prennent du temps. Pour éviter de compromettre des fonctions de contrôle n'acceptant aucun retard, créez une tâche distincte d'une priorité inférieure pour ces processus. Voyez également s'il est possible de désactiver l'horloge de surveillance de cette tâche pour éviter des exceptions associées en cours d'analyse. Pour plus d'informations sur la gestion des tâches, reportez-vous au chapitre Horloges de surveillance du système et des tâches du guide de programmation de votre contrôleur. Le paramètre de délai i_timTimeout permet de contrôler l'opération réalisée sur le fichier. Si le bloc fonction est toujours en cours d'exécution à l'issue de ce délai, l'opération d'écriture est annulée et le bloc renvoie une erreur. Pour savoir quelle valeur attribuer au paramètre de délai, gardez à l'esprit que l'opération sur le fichier s'étale sur plusieurs cycles de tâche. La valeur minimale sera donc égale au nombre de cycles de tâche requis, multiplié par l'intervalle entre les tâches. Le nombre de cycles dépend de la quantité de données à écrire et de la taille du bloc de traitement, qui peut être définie avec le paramètre Gc_uiXmlWriteProccessingBlockSize dans la liste GPL (voir page 49). Pour diminuer la charge par cycle de tâche, le processus de création du fichier est scindé en plusieurs opérations d'écriture. Lors de chacune d'elles, un bloc de données est traité et écrit dans le fichier. Plus le bloc de traitement est grand, moins vous avez besoin de cycles pour créer le fichier et y écrire du contenu. Par contre, le temps d'exécution de chaque opération d'écriture est plus long. EIO0000002531 06/2017 69 Blocs fonction XML Dépannage du bloc FB_XmlWrite Dépannage Le tableau suivant présente quelques problèmes généraux avec leurs solutions : Problème Cause L'exécution se termine par la Le répertoire spécifié n'est pas détection d'une erreur et renvoie le disponible. résultat FilePathInvalid. La syntaxe du chemin d'accès au fichier n'est pas valide. Solution Vérifiez que le répertoire existe. Si le chemin d'accès pointe vers la mémoire étendue (une carte SD, par exemple), vérifiez que celle-ci est disponible. Vérifiez que la syntaxe employée est prise en charge par votre contrôleur. Par exemple, le séparateur autorisé varie en fonction du contrôleur ('\' ou '/'). Le fichier indiqué existe déjà et L'exécution se termine par la détection d'une erreur et renvoie le l'entrée i_xOverwriteFile résultat FileAlreadyExists. est FALSE. Indiquez un autre nom du fichier. Si le fichier existant peut être remplacé, réglez l'entrée i_xOverwriteFile sur TRUE. Le paramètre uiParentIndex L'exécution se termine par la détection d'une erreur et renvoie le de la mémoire tampon résultat contenant les éléments XML XmlStructureInconsistent. (voir page 35) comporte une valeur qui empêche la création d'un fichier XML valide. La valeur du paramètre uiParentIndex du premier élément est différente de -1. L'exécution se termine par la Le délai indiqué est trop court. détection d'une erreur et renvoie le résultat Timeout. Vérifiez que les valeurs du paramètre uiParentIndex (voir page 34) sont cohérentes. NOTE : Reportez-vous à la sortie q_sResultMsg pour en savoir plus sur le paramètre non valide. Augmentez le paramètre de délai en fonction du nombre de cycles nécessaires pour créer le fichier. Tenez compte également de l'intervalle entre les tâches. Augmentez la taille du bloc de traitement par opération d'écriture pour limiter le nombre d'appels de bloc fonction nécessaires pour créer le fichier. 70 EIO0000002531 06/2017 Blocs fonction XML Exemple de bloc FB_XmlWrite Présentation L'exemple suivant illustre le processus d'écriture dans le fichier XML des éléments et attributs de la mémoire tampon fournie par l'application. Un exemple est également fourni pour les autres contenus. Mémoire tampon La mémoire tampon fournie par l'application de type XmlItems comporte les éléments à écrire dans le fichier XML. Index de tableau uiParentIndex sName sValue etType uiNumOfAttributes 0 -1 AAA – 1 0 1 0 BBB 1st bbb 1 0 2 0 BBB 2nd bbb 1 0 3 2 CCC – 1 1 4 – id 1 2 1 5 3 DDD ddd 1 2 6 – id 1 2 1 7 – activate TRUE 2 2 EIO0000002531 06/2017 71 Blocs fonction XML Exemple de programme PROGRAM SR_Example VAR fbWrite :FFU.FB_XmlWrite; astXmlItems :FFU.XmlItems; xCmdWrite :BOOL; sComment :STRING(255) := 'This is the user comment.'; sExternalDTD :STRING := '<!DOCTYPE AAA SYSTEM "example.dtd">'; stHeader :FFU.ST_XmlUserDefinedHeader; END_VAR stHeader.sUserComment := sComment; stHeader.pbyAdditionalContent := ADR(sExternalDTD); stHeader.sUserComment := Standard.LEN(sExternalDTD); fbWrite( i_xExecute := xCmdWrite, i_sFilePath := '/sd0/Example.xml', i_xOverwriteFile := , i_sRootElement := , i_refXmlItems := astXmlItems, i_stUserDefinedHeader := stHeader, i_timTimeout := , q_xDone => , q_xBusy => , q_xError => , q_etResult => , q_sResultMsg => ); Exemple de fichier XML <?xml version="1.0" encoding="ASCII"?> <!--This is the user comment.--> <!DOCTYPE AAA SYSTEM "example.dtd"> <AAA> <BBB>1st bbb</BBB> <BBB>2nd bbb</BBB> <CCC id="1"> <DDD id="1" activate="TRUE">ddd</DDD> </CCC> </AAA> 72 EIO0000002531 06/2017 SoMachine Fonctions XML EIO0000002531 06/2017 Chapitre 10 Fonctions XML Fonctions XML Contenu de ce chapitre Ce chapitre contient les sous-chapitres suivants : Sous-chapitre Sujet Page 10.1 FC_XmlGetElementValue 74 10.2 FC_XmlSetElementValue 77 EIO0000002531 06/2017 73 Fonctions XML Sous-chapitre 10.1 FC_XmlGetElementValue FC_XmlGetElementValue Contenu de ce sous-chapitre Ce sous-chapitre contient les sujets suivants : Sujet 74 Page Description fonctionnelle du bloc FC_XmlGetElementValue 75 Remarques concernant le bloc FC_XmlGetElementValue 76 EIO0000002531 06/2017 Fonctions XML Description fonctionnelle du bloc FC_XmlGetElementValue Présentation Type : Bloc fonction Disponible à partir de la version : V1.0.8.0 Hérite de : - Met en œuvre : - Description fonctionnelle La fonction FC_XmlGetElementValue permet de lire la valeur de l'élément XML indiqué dans la mémoire tampon de type XmlItems. La valeur de retour est TRUE si la fonction a été exécutée avec succès. Si cette valeur est FALSE, évaluez la sortie q_etResult. Interface Entrée Type de données Description i_refXmlItems REFERENCE TO XmlItems Mémoire tampon fournie par l'application et dans laquelle sont stockés les éléments et les attributs lus ou écrits dans un fichier XML. i_sXpathToElement STRING[255] Expression XPath permettant d'indiquer l'élément qui doit être lu. Sortie Type de données Description q_etResult ET_Result Fournit des informations de diagnostic sous la forme d'une valeur numérique. q_sElementValue STRING[Gc_uiXmlLength Fournit la valeur de l'élément indiqué. OfString] EIO0000002531 06/2017 75 Fonctions XML Expressions XPath définissant le contenu à lire Pour définir l'élément dont la valeur doit être lue, utilisez la syntaxe du langage XPath (XML Path). Les relations parent-enfant entre les différents éléments de la mémoire tampon sont définies par le paramètre diParentIndex, qui désigne l'index de l'élément parent dans le tableau. NOTE : La fonction FC_XmlGetElementValue prend en charge une partie des fonctions fournies par les expressions XPath. Le tableau répertorie les expressions XPath prises en charge : Expression XPath Description /…/<nom_élément> Sélectionne l'élément du nœud qui correspond au nom indiqué. /…/<nom_élément>[<n>] Sélectionne le nème élément du nœud qui correspond au nom indiqué. /…/<nom_élément>[@<attribut>] Sélectionne l'élément du nœud qui correspond au nom et à l'attribut indiqués. /…/<nom_élément>[@<attribut>=<valeur>] Sélectionne l'élément du nœud qui correspond au nom et à la paire attribut/valeur indiqués. Les prédicats, ou expressions entre crochets ([]), peuvent être suivis d'une barre oblique (/) et d'un nom d'élément pour identifier l'élément enfant suivant. Exemple : /…/<nom_élément>[<n>]/<nom_élément> Remarques concernant le bloc FC_XmlGetElementValue Remarques sur la lecture de valeurs XML Les contraintes suivantes s'appliquent : Les opérations d'exécution de la fonction ou de recherche d'élément dans la mémoire tampon XmlItems peuvent durer plusieurs millisecondes. Pour éviter que cette fonction ne bloque d'autres processus, créez une tâche distincte d'une priorité basse (>24). Voyez également s'il est possible de désactiver l'horloge de surveillance de cette tâche pour éviter des exceptions associées en cours d'analyse. Pour plus d'informations, reportez-vous au chapitre Horloges de surveillance du système et des tâches du guide de programmation de votre contrôleur. Selon la taille de la mémoire tampon XmlItems et la position à laquelle l'élément est stocké, la fonction peut prendre plus ou moins de temps à s'exécuter d'un appel à l'autre. Pensez-y au moment de mettre en service l'application. La fonction traite un seul et unique élément. Lorsque la mémoire tampon comporte plusieurs éléments correspondant à l'expression XPath, le premier élément trouvé est traité. 76 EIO0000002531 06/2017 Fonctions XML Sous-chapitre 10.2 FC_XmlSetElementValue FC_XmlSetElementValue Contenu de ce sous-chapitre Ce sous-chapitre contient les sujets suivants : Sujet Page Description fonctionnelle du bloc FC_XmlSetElementValue 78 Remarques concernant le bloc FC_XmlSetElementValue 79 EIO0000002531 06/2017 77 Fonctions XML Description fonctionnelle du bloc FC_XmlSetElementValue Présentation Type : Bloc fonction Disponible à partir de la version : V1.0.8.0 Hérite de : - Met en œuvre : - Description fonctionnelle La fonction FC_XmlSetElementValue sert à modifier la valeur de l'élément XML indiqué dans la mémoire tampon de type XmlItems. La valeur de retour est TRUE si la fonction a été exécutée avec succès. Si cette valeur est FALSE, évaluez la sortie q_etResult. Interface 78 Entrée Type de données i_refXmlItems Description REFERENCE TO XmlItems Mémoire tampon fournie par l'application et dans laquelle sont stockés les éléments et les attributs lus ou écrits dans un fichier XML. i_sXpathToElement STRING[255] i_sElementValue STRING[Gc_uiXmlLength Valeur à définir pour l'élément indiqué. OfString] Expression XPath permettant d'indiquer l'élément qui doit être lu. Sortie Type de données Description q_etResult ET_Result Fournit des informations de diagnostic sous la forme d'une valeur numérique. EIO0000002531 06/2017 Fonctions XML Expressions XPath définissant le contenu à définir Pour définir l'élément dont la valeur doit être définie, utilisez la syntaxe du langage XPath (XML Path). Les relations parent-enfant entre les différents éléments de la mémoire tampon sont définies par le paramètre diParentIndex, qui désigne l'index de l'élément parent dans le tableau. NOTE : La fonction FC_XmlSetElementValue prend en charge une partie des fonctions fournies par les expressions XPath. Le tableau répertorie les expressions XPath prises en charge : Expression XPath Description /…/<nom_élément> Sélectionne l'élément du nœud qui correspond au nom indiqué. /…/<nom_élément>[<n>] Sélectionne le nème élément du nœud qui correspond au nom indiqué. /…/<nom_élément>[@<attribut>] Sélectionne l'élément du nœud qui correspond au nom et à l'attribut indiqués. /…/<nom_élément>[@<attribut>=<valeur>] Sélectionne l'élément du nœud qui correspond au nom et à la paire attribut/valeur indiqués. Les prédicats, ou expressions entre crochets ([]), peuvent être suivis d'une barre oblique (/) et d'un nom d'élément pour identifier l'élément enfant suivant. Exemple : /…/<nom_élément>[<n>]/<nom_élément> Remarques concernant le bloc FC_XmlSetElementValue Remarques sur la définition de valeurs XML Les contraintes suivantes s'appliquent : Les opérations d'exécution de la fonction ou de recherche d'élément dans la mémoire tampon XmlItems peuvent durer plusieurs millisecondes. Pour éviter que cette fonction ne bloque d'autres processus, créez une tâche distincte d'une priorité basse (>24). Voyez également s'il est possible de désactiver l'horloge de surveillance de cette tâche pour éviter des exceptions associées en cours d'analyse. Pour plus d'informations, reportez-vous au chapitre Horloges de surveillance du système et des tâches du guide de programmation de votre contrôleur. Selon la taille de la mémoire tampon XmlItems et la position à laquelle l'élément est stocké, la fonction peut prendre plus ou moins de temps à s'exécuter d'un appel à l'autre. Pensez-y au moment de mettre en service l'application. La fonction traite un seul et unique élément. Lorsque la mémoire tampon comporte plusieurs éléments correspondant à l'expression XPath, le premier élément trouvé est traité. EIO0000002531 06/2017 79 Fonctions XML 80 EIO0000002531 06/2017 SoMachine Unités organisationnelles de programme (POU) CSV EIO0000002531 06/2017 Partie VI Unités organisationnelles de programme (POU) CSV Unités organisationnelles de programme (POU) CSV EIO0000002531 06/2017 81 Unités organisationnelles de programme (POU) CSV 82 EIO0000002531 06/2017 SoMachine Blocs fonction CSV EIO0000002531 06/2017 Chapitre 11 Blocs fonction CSV Blocs fonction CSV Contenu de ce chapitre Ce chapitre contient les sous-chapitres suivants : Sous-chapitre Sujet Page 11.1 FB_CsvRead 84 11.2 FB_CsvWrite 93 EIO0000002531 06/2017 83 Blocs fonction CSV Sous-chapitre 11.1 FB_CsvRead FB_CsvRead Contenu de ce sous-chapitre Ce sous-chapitre contient les sujets suivants : Sujet 84 Page Description fonctionnelle du bloc FB_CsvRead 85 Remarques concernant le bloc FB_CsvRead 88 Dépannage du bloc FB_CsvRead 89 Exemple de bloc FB_CsvRead 90 EIO0000002531 06/2017 Blocs fonction CSV Description fonctionnelle du bloc FB_CsvRead Présentation Type : Bloc fonction Disponible à partir de la version : V1.0.8.0 Hérite de : - Met en œuvre : - Description fonctionnelle Le bloc fonction FB_CsvRead permet de lire un fichier CSV stocké dans le système de fichiers du contrôleur ou dans la mémoire étendue (une carte SD, par exemple). Pour obtenir des informations sur le système de fichiers, reportez-vous au chapitre Organisation de la mémoire Flash du guide de programmation de votre contrôleur. Le fichier CSV à lire contient un certain nombre de valeurs (colonnes) organisées sous forme d'enregistrements (lignes). Les valeurs sont délimitées par un séparateur spécifique. Les enregistrements sont séparés par un saut de ligne. Le bloc fonction se base sur le code de séparateur indiqué pour identifier les différentes valeurs lors de la lecture du contenu du fichier. Le code de caractère du saut de ligne varie selon le système d'exploitation dans lequel le fichier a été créé. Le bloc fonction prend en charge les trois codes de saut de ligne les plus courants (ASCII). Ce caractère est détecté pendant la lecture du contenu du fichier. Les caractères de saut de ligne (ASCII) suivants sont pris en charge : CRLF (0D0A hex) : utilisé avec les systèmes d'exploitation Windows et MS-DOS. LF (0A hex) : utilisé avec les systèmes d'exploitation Unix, Linux, Mac OS X et Android. CR (0D hex) : utilisé avec les systèmes d'exploitation Mac OS X version 9 ou ultérieure. EIO0000002531 06/2017 85 Blocs fonction CSV Les valeurs lues dans le fichier sont stockées dans la mémoire tampon de lecture fournie par l'application, sous forme de variables STRING. Cette mémoire tampon de lecture doit être déclarée dans l'application en tant que ARRAY STRING à double entrée. L'entrée i_stTableReadValues permet de fournir les dimensions du tableau et le pointeur correspondant au bloc fonction. Pour plus d'informations, reportez-vous à la structure ST_CsvTable (voir page 37). Pour que le contenu s'affiche correctement dans l'application, le fichier à lire ne doit comporter que des caractères ASCII. Un indicateur d'ordre des octets (BOM), désignant le type de codage, est autorisé au début du fichier. Les fichiers ASCII ne comportent pas cet indicateur. Le bloc fonction vérifie la présence d'un indicateur BOM dans le fichier. Si le fichier contient l'un des indicateurs BOM suivants, l'exécution du bloc fonction est annulée et une erreur est renvoyée : FE FF hex, FF EF hex ou EF BB BF hex Déterminez la quantité de données à lire à l'aide de l'entrée i_stReadParameter. Vous pouvez lire l'intégralité du fichier, ou encore sélectionner un enregistrement (ligne), une colonne ou une valeur spécifique à lire. Vous avez également la possibilité de lire uniquement les informations de fichier fournies par la sortie q_stFileInformation. Interface Entrée Type de données Description i_xExecute BOOL Le bloc fonction exécute l'opération de lecture concernant le fichier CSV indiqué sur un front montant de cette entrée. Reportez-vous également au chapitre Comportement des blocs fonction avec l'entrée i_xExecute (voir page 21). i_sFilePath STRING[255] Chemin d'accès au fichier CSV. Lorsque le nom de fichier est indiqué sans extension, le bloc fonction ajoute l'extension .csv. i_stReadParameter ST_CsvReadParameter Indique le contenu à lire dans le fichier. i_timTimeout TIME L'exécution du bloc fonction est annulée à l'issue de ce délai. Si la valeur est T#0s, la valeur par défaut T#2s est appliquée. i_stTableReadValues ST_CsvTable Structure permettant de transmettre au bloc fonction la mémoire tampon fournie par l'application (reportez-vous à la structure (voir page 37) ST_CsvTable). 86 EIO0000002531 06/2017 Blocs fonction CSV Sortie Type de données Description q_xDone BOOL Si cette sortie est TRUE, l'exécution s'est effectuée correctement. q_xBusy BOOL Si cette sortie est TRUE, le bloc fonction est en cours d'exécution. q_xError BOOL Si cette sortie est TRUE, une erreur a été détectée. Pour plus d'informations, reportez-vous à q_etResult et q_etResultMsg. q_etResult ET_Result Fournit des informations de diagnostic et d'état sous la forme d'une valeur numérique. q_xBusy = True, la valeur indique l'état. Si q_xDone ou q_xError = True, la valeur indique le résultat. q_sResultMsg STRING[80] Fournit des informations de diagnostic et d'état sous la forme d'un message textuel. q_stFileInformation ST_CsvFileInfo La structure contient des informations sur le dernier fichier traité. q_stWarnValueTruncated ST_CsvWarnValueT Fournit des informations sur la première valeur tronquée, le runcated cas échéant. NOTE : La sortie est mise à jour en même temps que q_xDone. Pour plus d'informations sur les signaux des entrées et sorties basiques, reportez-vous au chapitre Comportement des blocs fonction avec l'entrée i_xExecute (voir page 21). EIO0000002531 06/2017 87 Blocs fonction CSV Remarques concernant le bloc FB_CsvRead Observations Les contraintes suivantes s'appliquent lors de la lecture d'un fichier CSV : Seuls les fichiers CSV codés en ASCII sont pris en charge. Le système ne vérifie pas si le fichier est bien au format ASCII. Lorsque le fichier contient des caractères autres que ASCII, les valeurs renvoyées par l'application ne sont pas valides. Les valeurs lues dans le fichier sont stockées en tant que valeurs STRING dans l'application. Ce principe s'applique également aux valeurs numériques. Avant de pouvoir être traitées, les valeurs doivent être converties pour correspondre au type de données approprié. L'utilisation des fonctions de conversion STRING_TO_ est alors recommandée. Dans ce cas, les valeurs STRING doivent respecter une syntaxe spécifique, qui dépend du type de données cible. Pour faciliter le traitement des valeurs lues, merci de tenir compte de ces exigences lorsque vous créez des fichiers. Les opérations sur les fichiers prennent du temps. Pour éviter de compromettre des fonctions de contrôle n'acceptant aucun retard, créez une tâche distincte d'une priorité inférieure pour ces processus. Voyez également s'il est possible de désactiver l'horloge de surveillance de cette tâche pour éviter des exceptions associées en cours d'analyse. Pour plus d'informations sur la gestion des tâches, reportez-vous au chapitre Horloges de surveillance du système et des tâches du guide de programmation de votre contrôleur. Le paramètre de délai i_timTimeout permet de contrôler l'opération de lecture. Si le bloc fonction FB_CsvRead est toujours en cours d'exécution à l'issue de ce délai, l'opération de lecture est annulée et le bloc génère une erreur. Pour savoir quelle valeur attribuer au paramètre de délai, gardez à l'esprit que l'opération de lecture s'étale sur plusieurs cycles de tâche. La valeur minimale sera donc égale au nombre de cycles de tâche requis, multiplié par l'intervalle entre les tâches. Le nombre de cycles dépend de la taille du fichier à lire et de la taille du bloc de traitement, qui peut être définie avec le paramètre Gc_uiCsvReadProccessingBlockSize dans la liste GPL (voir page 49). Pour diminuer la charge par cycle de tâche, le processus d'analyse du contenu du fichier est scindé en plusieurs opérations de lecture. Lors de chacune d'elles, un bloc de données est traité et éventuellement stocké dans la mémoire tampon (si cette demande a été formulée). Plus le bloc de traitement est grand, moins vous avez besoin de cycles pour lire le fichier. Par contre, le temps d'exécution de chaque opération de lecture est plus long. Le code de caractère défini comme séparateur ne doit pas être inclus dans la valeur. 88 EIO0000002531 06/2017 Blocs fonction CSV Dépannage du bloc FB_CsvRead Dépannage Le tableau suivant présente quelques problèmes généraux avec leurs solutions : Problème Cause L'exécution se termine par la Le répertoire spécifié n'est détection d'une erreur et renvoie le pas disponible. résultat FilePathInvalid. La syntaxe du chemin d'accès au fichier n'est pas valide. Solution Vérifiez que le répertoire existe. Si le chemin d'accès pointe vers la mémoire étendue (une carte SD, par exemple), vérifiez que celle-ci est disponible. Vérifiez que la syntaxe employée est prise en charge par votre contrôleur. Par exemple, le séparateur autorisé varie en fonction du contrôleur ('\' ou '/'). Le pointeur vers la mémoire Vérifiez l'affectation du paramètre L'exécution se termine par la détection d'une erreur et renvoie le tampon de lecture n'est pas pbyTable dans la structure résultat TableInvalid. affecté. i_stTableReadValues (voir page 37). L'exécution se termine par la Les dimensions de la Vérifiez l'affectation du paramètre dans la détection d'une erreur et renvoie le mémoire tampon (table) structure i_stTableReadValues résultat indiquée sont incohérentes. (voir page 37). TableReadValuesInvalid. Les paramètres du mode de Vérifiez que la valeur choisie pour L'exécution se termine par la détection d'une erreur et renvoie le lecture sont incohérents. etReadMode est prise en charge par résultat ET_CsvReadMode (voir page 27). Aucun caractère de ReadParameterInvalid. séparateur n'a été défini. Si etReadMode = OneRow, la valeur uiNumOfRow doit être différente de 0. Si etReadMode = OneColumn, la valeur uiNumOfColumn doit être différente de 0. Si etReadMode = OneValue, les valeurs uiNumOfRow et uiNumOfColumn doivent être différentes de 0. La valeur sDelimiter ne doit pas être vide. L'exécution se termine par la Le délai indiqué est trop détection d'une erreur et renvoie le court. résultat Timeout. Augmentez le paramètre de délai en fonction du nombre de cycles nécessaires pour lire le fichier. Tenez compte également de l'intervalle entre les tâches. Augmentez la taille du bloc de traitement par opération de lecture pour limiter le nombre d'appels de bloc fonction nécessaires pour lire le fichier. EIO0000002531 06/2017 89 Blocs fonction CSV Exemple de bloc FB_CsvRead Présentation L'exemple suivant illustre la manière dont les valeurs lues dans un fichier CSV sont stockées dans la mémoire tampon fournie par l'application, en vue de leur traitement. Exemple de fichier CSV Contenu du fichier example.csv avec le point-virgule (;) comme séparateur : PNo;PName;PValue;PUnit;Description 1;Velo_Max;1500;rpm;maximum velocity of the motor 2;Velo_Min;100;rpm;minimum velocity of the motor 3;Velo_ManMode_Slow;150;rpm;velocity manual mode slow move 4;Velo_ManMode_Fast;600;rpm;velocity manual mode fast move 90 EIO0000002531 06/2017 Blocs fonction CSV Exemple de programme PROGRAM SR_Example VAR fbRead :FFU.FB_CsvRead; xCmdRead :BOOL; sCsvTable:ARRAY[0..c_uiNumOfRows-1,0..c_uiNumOfColumns1] OF STRING(c_uiLengthOfValue); stCsvTable: FFU.ST_CsvTable; END_VAR VAR CONSTANT c_uiNumOfRows :UINT:= 8; c_uiNumOfColumns :UINT:= 7; c_uiLengthOfValue :UINT:= 20; END_VAR fbRead.i_stBufferReadValues.pbyTable := ADR(g_asCsvTable); fbRead.i_stBufferReadValues.uiNumOfRows := c_uiNumOfRows; fbRead.i_stBufferReadValues.uiNumOfColumns := c_uiNumOfColumns; fbRead.i_stBufferReadValues.udiSizeOfTable := SIZEOF(asCsvTable); fbRead.i_stReadParameter.sDelimiter := fbRead.i_stReadParameter.etReadMode := fbRead.i_stReadParameter.uiNumOfRow := fbRead.i_stReadParameter.uiNumOfColumn ';'; FFU.ET_CsvReadMode.AllValues; 0; := 0; fbRead( i_xExecute:= xCmdRead, i_sFilePath:= '/sd0/Example.csv', i_stBufferReadValues:= , i_stReadParameter:= , i_timTimeout:= , q_xDone=> , q_xBusy=> , q_xError=> , q_etResult=> , q_sResultMsg=> , q_stFileInformation=> , q_stCsvWarnValueTruncated=> , xValueTruncated=> ); EIO0000002531 06/2017 91 Blocs fonction CSV Mémoire tampon La mémoire tampon fournie par l'application contient les éléments lus dans le fichier CSV : Index de tableau 0 1 2 3 4 5 6 0 PNo PName PValue PUnit Description – – 1 0 Velo_Max 1500 rpm maximum velocity of – – 2 1 Velo_Min 100 rpm minimum velocity of – – 3 2 Velo_Man_Slow 150 rpm velocity manual mode – – 4 3 Velo_Man_Fast 600 rpm velocity manual mode – – 5 – – – – – – – 6 – – – – – – – 7 – – – – – – – NOTE : Les valeurs de la colonne Description ont été tronquées lors de la lecture du fichier, car les valeurs de type STRINGs dans la mémoire tampon de lecture sont limitées à 20 caractères. La sortie q_stWarnValueTruncated du bloc fonction indique que la valeur à la ligne 2 et à la colonne 5 a été tronquée. 92 EIO0000002531 06/2017 Blocs fonction CSV Sous-chapitre 11.2 FB_CsvWrite FB_CsvWrite Contenu de ce sous-chapitre Ce sous-chapitre contient les sujets suivants : Sujet Page Description fonctionnelle du bloc FB_CsvWrite 94 Remarques concernant le bloc FB_CsvWrite 96 Dépannage du bloc FB_CsvWrite 97 Exemple de bloc FB_CsvWrite 98 EIO0000002531 06/2017 93 Blocs fonction CSV Description fonctionnelle du bloc FB_CsvWrite Présentation Type : Bloc fonction Disponible à partir de la version : V1.0.8.0 Hérite de : - Met en œuvre : - Description fonctionnelle Le bloc fonction FB_CsvWrite permet d'écrire des valeurs dans un fichier CSV stocké dans le système de fichiers du contrôleur ou dans la mémoire étendue (une carte SD, par exemple). Il peut également être utilisé pour créer un fichier. Pour obtenir des informations sur le système de fichiers, reportez-vous au chapitre Organisation de la mémoire Flash du guide de programmation de votre contrôleur. Les données à écrire dans le fichier sont stockées dans la mémoire tampon fournie par l'application sous forme de variables STRING. Cette mémoire tampon doit être déclarée dans l'application en tant que ARRAY STRING à double entrée. L'entrée i_stTableWriteValues permet de fournir les dimensions du tableau et le pointeur correspondant au bloc fonction. Pour plus d'informations, reportez-vous à la structure ST_CsvTable (voir page 37). Le tableau à double entrée est une structure de table composée de lignes et de colonnes, où chaque ligne représente un enregistrement. Le nombre de colonnes correspond au nombre maximal de valeurs possibles pour un enregistrement. L'entrée i_stWriteParameter fournit le paramètre permettant de contrôler l'opération d'écriture. Le paramètre sDelimiter permet de définir le code de caractère du séparateur inséré entre les valeurs du fichier. Le paramètre etModeFileOpen permet d'indiquer si les données doivent être ajoutées dans un fichier existant ou dans un nouveau fichier à créer. Définissez la quantité de données à écrire à l'aide des paramètres uiNumOfRows et uiNumOfColumns. 94 EIO0000002531 06/2017 Blocs fonction CSV Le code de caractère LF (0A hex) est inséré pour ajouter un saut de ligne entre deux enregistrements. Interface Entrée Type de données Description i_xExecute BOOL Le bloc fonction ouvre ou crée le fichier CSV indiqué et y écrit le contenu spécifié sur un front montant de cette entrée. i_sFilePath STRING[255] Chemin d'accès au fichier CSV. Lorsque le nom de fichier est indiqué sans extension, le bloc fonction ajoute l'extension .csv. i_stWriteParameter ST_WriteParameter Indique le mode d'ouverture du fichier CSV et le contenu qui doit y être écrit. i_timTimeout TIME L'exécution du bloc fonction est annulée à l'issue de ce délai. Si la valeur est T#0s, la valeur par défaut T#2s est appliquée. i_stTableWriteValues ST_CsvTable Structure permettant de transmettre au bloc fonction la mémoire tampon fournie par l'application (reportez-vous à la structure (voir page 37) ST_CsvTable). Sortie Type de données Description q_xDone BOOL Si cette sortie est TRUE, l'exécution s'est effectuée correctement. q_xBusy BOOL Si cette sortie est TRUE, le bloc fonction est en cours d'exécution. q_xError BOOL Si cette sortie est TRUE, une erreur a été détectée. Pour plus d'informations, reportez-vous à q_etResult et q_etResultMsg. q_etResult ET_Result Fournit des informations de diagnostic et d'état sous la forme d'une valeur numérique. q_xBusy = True, la valeur indique l'état. Si q_xDone ou q_xError = True, la valeur indique le résultat. q_sResultMsg STRING[80] Fournit des informations de diagnostic et d'état sous la forme d'un message textuel. q_udiFileSize UDINT Fournit la taille du fichier traité récemment, en octets. EIO0000002531 06/2017 95 Blocs fonction CSV Remarques concernant le bloc FB_CsvWrite Observations Les contraintes suivantes s'appliquent lors de l'écriture dans un fichier CSV : Les opérations sur les fichiers prennent du temps. Pour éviter de compromettre des fonctions de contrôle n'acceptant aucun retard, créez une tâche distincte d'une priorité inférieure pour ces processus. Voyez également s'il est possible de désactiver l'horloge de surveillance de cette tâche pour éviter des exceptions associées en cours d'analyse. Pour plus d'informations sur la gestion des tâches, reportez-vous au chapitre Horloges de surveillance du système et des tâches du guide de programmation de votre contrôleur. Le paramètre de délai i_timTimeout permet de contrôler l'opération réalisée sur le fichier. Si le bloc fonction est toujours en cours d'exécution à l'issue de ce délai, l'opération d'écriture est annulée et le bloc renvoie une erreur. Pour savoir quelle valeur attribuer au paramètre de délai, gardez à l'esprit que l'opération sur le fichier s'étale sur plusieurs cycles de tâche. La valeur minimale sera donc égale au nombre de cycles de tâche requis, multiplié par l'intervalle entre les tâches. Le nombre de cycles dépend de la quantité de données à écrire et de la taille du bloc de traitement, qui peut être définie avec le paramètre Gc_uiCsvWriteProccessinBlockSize dans la liste GPL (voir page 49). Pour diminuer la charge par cycle de tâche, le processus d'écriture dans le fichier est scindé en plusieurs opérations d'écriture. Lors de chacune d'elles, un bloc de données est traité et écrit dans le fichier. Plus le bloc de traitement est grand, moins vous avez besoin de cycles pour créer le fichier et y écrire du contenu. Par contre, le temps d'exécution de chaque opération d'écriture est plus long. 96 EIO0000002531 06/2017 Blocs fonction CSV Dépannage du bloc FB_CsvWrite Dépannage Le tableau suivant présente quelques problèmes généraux avec leurs solutions : Problème Cause Solution L'exécution se termine par la détection d'une erreur et renvoie le résultat FilePathInvalid. Le répertoire spécifié Vérifiez que le répertoire existe. Si le chemin d'accès L'exécution se termine par la détection d'une erreur et renvoie le résultat FileAlreadyExists. Le fichier indiqué L'exécution se termine par la détection d'une erreur et renvoie le résultat TableInvalid. Le pointeur vers la n'est pas disponible. La syntaxe du chemin pointe vers la mémoire étendue (une carte SD, par exemple), vérifiez que celle-ci est disponible. d'accès au fichier n'est Vérifiez que la syntaxe employée est prise en charge pas valide. par votre contrôleur. Par exemple, le séparateur autorisé varie en fonction Le fichier indiqué du contrôleur ('\' ou '/'). n'existe pas au chemin spécifié. Sélectionnez la valeur AppendPlus pour le paramètre etModeFileOpen (voir page 28). existe déjà, mais ne peut pas être écrasé (paramètre etModeFileOpen (voir page 28)). mémoire tampon de lecture n'est pas affecté. Indiquez un autre nom du fichier. Si le fichier existant peut être remplacé, sélectionnez la valeur CreatePlus pour le paramètre etModeFileOpen (voir page 28). Vérifiez l'affectation du paramètre pbyTable dans la structure i_stTableWriteValues (voir page 37). L'exécution se termine par la Les dimensions du détection d'une erreur et tableau CSV indiqué renvoie le résultat sont incohérentes. TableWriteValuesInvalid . Vérifiez l'affectation du paramètre dans la structure L'exécution se termine par la détection d'une erreur et renvoie le résultat WriteParameterInvalid. Vérifiez que la valeur choisie pour Les paramètres du mode d'écriture sont incohérents. Aucun caractère de séparateur n'a été défini. L'exécution se termine par la détection d'une erreur et renvoie le résultat Timeout. Le délai indiqué est trop court. i_stTableWriteValues (voir page 37). etModeFileOpen est prise en charge par etModeFileOpen (voir page 28). La valeur sDelimiter ne doit pas être vide. Augmentez le paramètre de délai en fonction du nombre de cycles nécessaires pour créer le fichier. Tenez compte également de l'intervalle entre les tâches. Augmentez la taille du bloc de traitement par opération d'écriture pour limiter le nombre d'appels de bloc fonction nécessaires pour créer le fichier. EIO0000002531 06/2017 97 Blocs fonction CSV Exemple de bloc FB_CsvWrite Présentation L'exemple suivant montre comment implémenter le bloc fonction FB_CsvWrite pour écrire des données dans un fichier CSV existant. Mémoire tampon La mémoire tampon fournie par l'application comporte les éléments à écrire dans le fichier CSV : Index de tableau 0 1 2 3 4 5 6 0 2017-02-24 09:30:10 OpMode Machine AutoMode – – – 1 2017-02-24 09:35:27 Error Module1 ErrorID 16#A123 – – – 2 2017-02-24 09:35:27 State Machine ErrorStop – – – 3 – – – – – – – 4 – – – – – – – 5 – – – – – – – 6 – – – – – – – 7 – – – –– – – – Exemple de programme PROGRAM SR_Example VAR fbWrite :FFU.FB_CsvWrite; xCmdWrite :BOOL; asCsvTable:ARRAY[0..c_uiNumOfRows-1,0..c_uiNumOfColumns1] OF STRING(c_uiLengthOfValue); stCsvTable: FFU.ST_CsvTable; END_VAR VAR CONSTANT c_uiNumOfRows :UINT:= 8; c_uiNumOfColumns :UINT:= 7; c_uiLengthOfValue :UINT:= 80; END_VAR fbWrite.i_stTableWriteValues.pbyTable := ADR(asCsvTable); fbWrite.i_stTableWriteValues.uiNumOfRows := c_uiNumOfRows; 98 EIO0000002531 06/2017 Blocs fonction CSV fbWrite.i_stTableWriteValues.uiNumOfColumns := c_uiNumOfColumns; fbWrite.i_stTableWriteValues.udiSizeOfTable := SIZEOF(asCsvTable); fbWrite.i_stWriteParameter.sDelimiter := ';'; fbWrite.i_stWriteParameter.etModeFileOpen := FFU.ET_ModeFileOpen.Append ; fbWrite.i_stWriteParameter.uiNumOfRows := 3; fbWrite.i_stWriteParameter.uiNumOfColumns := c_uiNumOfColumns; fbWrite( i_xExecute:= xCmdWrite, i_sFilePath:= '/sd0/Example.csv', i_stWriteParameter:= , i_timTimeout:= , i_stTableWriteValues:= , q_xDone=> , q_xBusy=> , q_xError=> , q_etResult=> , q_sResultMsg=> , q_stFileInformation=> ); Exemple de fichier CSV Contenu du fichier example.csv après ajout des données : Date;Time;Eventype;Event;;;; 2017-02-24;09:27:36;OpMode;Machine - Power on;;;; 2017-02-24;09:27:54;OpMode;Machine - Manual Mode;;;; 2017-02-24;09:28:32;OpMode;Machine - Homing;;;; 2017-02-24;09:29:44;State;Machine - All Modules Homed;;;; 2017-02-24;09:30:10;OpMode;Machine - AutoMode;;;; 2017-02-24;09:35:27;Error;Module1 - ErrorID 16#A123;;;; 2017-02-24;09:35:27;State;Machine - ErrorStop;;;; EIO0000002531 06/2017 99 Blocs fonction CSV 100 EIO0000002531 06/2017 SoMachine Glossaire EIO0000002531 06/2017 Glossaire A application Programme comprenant des données de configuration, des symboles et de la documentation. B bus d'extension Bus de communication électronique entre des modules d'E/S d'extension et un contrôleur. C configuration Agencement et interconnexions des composants matériels au sein d'un système, ainsi que les paramètres matériels et logiciels qui déterminent les caractéristiques de fonctionnement du système. contrôleur Automatise des processus industriels. On parle également de contrôleur logique programmable (PLC) ou de contrôleur programmable. E E/S Entrée/sortie P programme Composant d'une application constitué de code source compilé qu'il est possible d'installer dans la mémoire d'un contrôleur logique. EIO0000002531 06/2017 101 Glossaire 102 EIO0000002531 06/2017 SoMachine Index EIO0000002531 06/2017 Index A alias, 43 E entrées et sorties communes comportement des blocs fonction avec l'entrée i_xExecute, 21 ET_CsvReadMode, 27 AllValues, 27 GetFileInformation, 27 OneColumn, 27 OneRow, 27 OneValue, 27 ET_ModeFileOpen, 28 Append, 28 AppendPlus, 28 Create, 28 CreatePlus, 28 NotSet, 28 EIO0000002531 06/2017 ET_Result, 29 AdditionalContentInvalid, 30 AnalyzingFile, 29 BufferFull, 30 CheckingInputs, 29 ClosingFile, 29 ElementNotFound, 30 FileAlreadyExists, 30 FileCloseFailed, 29 FileFormatUtility, 29 FileInconsistent, 30 FileInvalid, 29 FilenameInvalid, 31 FilenameTooLong, 31 FileNotExists, 30 FileOpenFailed, 29 FilePathInvalid, 29 FilePathTooLong, 31 FileReadFailed, 30 FileWriteFailed, 29 FirstItemInvalidParentIndex, 31 FirstItemNoElement, 31 GetFileSize, 29 GetFileSizeFailed, 30 Idle, 29 Initializing, 29 NumOfParentsExceeded, 30 OK, 29 OpeningFile, 29 ParsingFailed, 30 ReadingFile, 29 ReadParameterInvalid, 30 TableInvalid, 30 TableReadValuesInvalid, 30 TableTooSmall, 30 TableWriteValuesInvalid, 30 Timeout, 29 UnexpectedProgramBehaviour, 31 ValueNotFound, 31 WriteParameterInvalid, 30 WritingFile, 29 103 Index XmlItemTypeInvalid, 30 XmlStructureInconsistent, 30 XPathExpressionInvalid, 29 XpathExpressionNotSupported, 31 XpathRootElementDoesNotMatch, 31 ET_XmlItemType, 26 Attribute, 26 Element, 26 NotSet, 26 F FB_CsvRead, 84 FB_CsvRead, dépannage, 89 FB_CsvRead, description fonctionnelle, 85 FB_CsvRead, exemple, 90 FB_CsvRead, remarques, 88 FB_CsvWrite, 93 FB_CsvWrite, dépannage, 97 FB_CsvWrite, description fonctionnelle, 94 FB_CsvWrite, exemple, 98 FB_CsvWrite, remarques, 96 FB_XmlRead, 58 FB_XmlRead example, 64 FB_XmlRead, dépannage, 63 FB_XmlRead, description fonctionnelle, 59 FB_XmlRead, remarques, 62 FB_XmlWrite, 66, 67, 71 FB_XmlWrite, dépannage, 70 FB_XmlWrite, remarques, 69 FC_EtResultToString, 53 FC_XmlGetElementValue, 74 FC_XmlGetElementValue, description fonctionnelle, 75 FC_XmlGetElementValue, remarques, 76 FC_XmlSetElementValue, 77 FC_XmlSetElementValue, description fonctionnelle, 78 FC_XmlSetElementValue, remarques, 79 FileFormatUtility, 17 GCL (liste des constantes globales), 47 GPL, 49 104 G GCL (liste des constantes globales) FileFormatUtility, 47 GPL FileFormatUtility, 49 S ST_CsvFileInformation, 38 ST_CsvReadParameter, 41 ST_CsvTable, 37 ST_CsvWarnValueTruncated, 40 ST_CsvWriteParameter, 42 ST_XmlItem, 34 ST_XmlUserDefinedHeader, 36 X XmlItems, 43 EIO0000002531 06/2017