LUGE 2022.4 : Automatiser des actions LabVIEW avec Scratch

Par Amaury Laurent (NERYS) · 8 décembre 2022

Document original : LUGE 2022.4 : Automatiser des actions LabVIEW avec Scratch (PDF, 1,9 Mo, 18 pages)

Télécharger le PDF Ouvrir dans le navigateur

LUGE 2022.4 - Blockly - – diapositive 1

Automatiser des actions sous LabVIEW

avec l’interface de Scratch

Le présentateur

Le présentateur – diapositive 2
  • Amaury LAURENT
  • Développeur LabVIEW depuis 2014
  • Certifications : CLED et CLA
  • Responsable projets systèmes embarqués
  • Aéromodéliste

NERYS en bref

NERYS en bref – diapositive 3
  • Fondée en 2007 à Gardanne (Bouches du Rhône), une équipe de 15 personnes ;
  • Concepteur de bancs de tests, de caractérisation et de systèmes de mesure :
  • Collaborateurs spécialisés en électrotechnique, électronique et mécanique ;
  • Pôle développement logiciels, avec une expertise LabVIEW.
  • NERYS propose une solution personnalisable pilotage de moyens d'essais appelée "Vasco" pouvant être déployée sur cible temps-réel (NI RT).

NERYS GROUP en bref

NERYS GROUP en bref – diapositive 4
  • Depuis Mai 2022 : NERYS + MESULOG → NERYS GROUP
  • Compétences logicielles NI :
  • LabVIEW (Windows, RT, DSC, FPGA)
  • TestStand
  • VeriStand
  • Partenaire National Instruments
  • Développeurs certifiés LabVIEW et TestStand

Plus d’infos : nous contacter

Plus d’infos : nous contacter – diapositive 5

Nos sites :

  • Gardanne (13)
  • Moirans (38)
  • La Rochette (73)

Sur le web :

  • https://nerysgroup.com/fr/
  • https://www.mesulog.fr/

Nous contacter :

  • contact@nerysgroup.com
  • web@mesulog.fr

Google Blockly

Google Blockly – diapositive 6
  • Projet présenté en 2012
  • Open Source
  • Bibliothèques JavaScript
  • But : faire des interfaces de programmation graphique
  • Entièrement personnalisable
  • A notamment servi pour:
  • AppInventor (Android)
  • Scratch (MIT)
  • Vasco (NERYS)

Principe d’utilisation de Blockly

Principe d’utilisation de Blockly – diapositive 7

Editeur graphique

HTML 5 Multiplateformes Ecriture du code

Descripteurs block

Javascript Définitions des blocks

Code source

Générateurs code

Javascript Convertisseur block -> code

Debut ( MaProcedure , Principale , admin , ) Pour ( 10000 , NbCycle , F:F12 , , null , , I ) Egal ( O:Alerte , N:I ) Pour ( 10000 , NbCycle , F:F12 , , null , , J )

Egal ( O:Alarme , N:J )

Tick ( )

FinPour FinPour Fin

<block type="procedure> <field name="PROC_NAME">MaProcedure</field> <field name="PROC_CAT">Principale</field> <field name="PROC_GROUP">admin</field> <field name="PROC_TRACE">FALSE</field> <statement name="PROC">

<block type="bky_for_loop" id="Et:[fwd6Ato!|9c8x:%M"> <field name="UNIT">NbCycle</field>

Exemple de descripteur XML

Intégration avec LabVIEW

Intégration avec LabVIEW – diapositive 8

Principe : Utilisation du fichier XML comme source interprétée par LabVIEW

Structure XML : Adaptée à une représentation objet Récursive Simple à lire

Editeur graphique

Descripteurs Fichier XML

Navigateur Web

<block type="procedure" id="pz*o73e6+Am^zYpJvpZ2" x="38" y="38"> <field name="PROC_NAME">MaProcedure</field> <field name="PROC_CAT">Principale</field> <field name="PROC_GROUP">admin</field> <field name="PROC_TRACE">FALSE</field> <statement name="PROC"> <block type="bky_for_loop" id="Et:[fwd6Ato!|9c8x:%M">

<field name="UNIT">NbCycle</field>

LabVIEW

libXML2

Instructions.lvclass

Code LabVIEW OOP Analyse du fichier XML Création du jeu d’instructions

Code LabVIEW Exécution du jeu d’instructions (scénario)

LabVIEW : Gestion des instructions

LabVIEW : Gestion des instructions – diapositive 9

Architecture Objets

Dispatch dynamique

Exécution récursive

Une seule primitive : Execute.vi

NB : Parameters : Instruction[] Astuce pour permettre à un objet de contenir des instances de lui-même : le variant

LabVIEW : Analyse du XML

LabVIEW : Analyse du XML – diapositive 10

<block type="for_loop" id=":|8-T_rWn@-JjY573Tqk">

<value name="ITER">

<block type="math_number" id="/`AzaFG2xxN-L|1py^%6">

</block>

<field name="NUM">10</field>

LibXML2 sous LabVIEW

Utilisation des XPath Lecture récursive

</value> <statement name="CODE">

<block type="wait" id="I?+4ik@.Ms$GVpXnblq9">

<value name="DURATION">

<block type="math_number" id="@#kFEYc))7%jYcOvRwQ7">

<field name="NUM">5</field>

Lien vers le toolkit LabXML (SourceForge)

Exécution récursive : Execute.vi

Exécution récursive : Execute.vi – diapositive 11

Dispatch dynamic :

Procedure.lvclass:Execute.vi

Trace d’exécution

ForLoop.lvclass:Execute.vi

Hardware_AI.lvclass:Execute.vi

Pour aller plus loin

Pour aller plus loin – diapositive 12

Communication entre l’éditeur Blockly et LabVIEW

  • Animation d’exécution
  • Chargement automatique du fichier XML dans blockly

Gestion d’exécution :

  • Debugger
  • Breakpoints
  • Variables

Diapositive 13

LUGE 2022.4 - Blockly - Automatiser des actions sous LabVIEW avec l’interface de Scratch – diapositive 13

Démonstration

#DQMH #Blockly #LabVIEW #Mouton

Diapositive 14

LUGE 2022.4 - Blockly - Automatiser des actions sous LabVIEW avec l’interface de Scratch – diapositive 14

Démonstration de Blockly dans un logiciel Industriel

#Vasco #NERYS #PlacementDeProduit

Diapositive 15

LUGE 2022.4 - Blockly - Automatiser des actions sous LabVIEW avec l’interface de Scratch – diapositive 15

Merci à tous pour votre attention

Annexe : Blockly Factory

Annexe : Blockly Factory – diapositive 16

https://blockly-demo.appspot.com/static/demos/blockfactory/index.html

Annexe : descripteur de block

Annexe : descripteur de block – diapositive 17

.\Blockly\Specifique\addons-blockly\Blocks\LUGE.js

Blockly.Blocks['for_loop'] = { init: function() {

this.loop_index = new Blockly.FieldTextInput("");

this.appendDummyInput() .appendField("Pour"); this.appendValueInput("ITER"); this.appendDummyInput() .appendField("Iterations"); this.appendStatementInput("CODE") .setCheck(null); this.setInputsInline(true); this.setPreviousStatement(true, null); this.setNextStatement(true, null); this.setColour("%{BKY_LOOPS_HUE}"); this.setTooltip(""); this.setHelpUrl(""); this.loop_index.showEditor_=(()=>{

});

} };

Annexe : générateur de code

Annexe : générateur de code – diapositive 18

.\Blockly\Specifique\addons-blockly\Generators\Luge\LUGE.js

Blockly.Luge['for_loop'] = function(block) {

var value_iter = Blockly.Luge.valueToCode(block, 'ITER', Blockly.Luge.ORDER_ATOMIC); var statements_code = Blockly.Luge.statementToCode(block, 'CODE');

var code = 'Pour ( ' + value_iter + ' )\n'+

statements_code + 'FinPour\n';

return code; };

Blockly.Luge['generation_ana'] = function(block) {

var value_channel = Blockly.Luge.valueToCode(block, 'CHANNEL',

Blockly.Luge.ORDER_ATOMIC);

var value_value = Blockly.Luge.valueToCode(block, 'VALUE', Blockly.Luge.ORDER_ATOMIC); var code = 'GenerationAnalogique ( ' + value_channel + ' , ' + value_value + ' )\n'; return code; };