Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Les interruptions.

Bonjours à tous, je suis actuellement en première année de DUT et je rencontre un problème avec LabView.
Je dois en effet comprendre comment fonctionne les interruptions de programme et en faire un petit rapport.

 

Voici l'intitulé exact du sujet : "Réaliser un rapport explicatif du fonctionnement des interruptions. Fournir des VI d'exemples"
Le problème 
est , que j'ai beau avoir cherché sur LabView, Internet, demandé à des personnes de deuxième année, je n'ai rien trouvé.
Je viens donc ici, en espérant trouver ce dont j'ai besoin.

 

Merci d'avance.

0 Compliments
Message 1 sur 11
3 998 Visites

les interruptions (?)

 

Personnellement je ne connais le concept d'interruptions que via l'Assembleur.

Ce sont des mécanismes de très bas niveaux, liés directement au Processeur.

Interruptions hardware, software ... c'est un sujet dont le "principe" est assez simple,

mais qui devient vite complexe si on désire dépasser le niveau du simple principe.

 

Le soucis, c'est que via Labview, on ne manipule pas directement les interruptions ... avec les autres langages non plus d'ailleurs.

Cela reste de la programmation de haut vol ... par exemple dans le développement de pilote ...

et encore ... la couche HAL est placée en intermédiaire entre le pilote et le gestionnaire d'interruptions.

 

Les cartes d'acquisition NI doivent certainement utiliser les interruptions du µP ...

mais le code est totalement occulté via les fonctions natives proposées par LV.

 

Donc ... "étudier les interruptions" dans le cadre de LV ...qui est un langage de haut niveau ... je ne vois pas.

 

ou ce mot d'interruption me fait peut-être prendre une fausse route ...

Je passe la main aux "pro" de LV ... il y en a sur ce forum Smiley heureux

Message 2 sur 11
3 987 Visites

Bonjour,

 

Je n'ai pas forcément grand chose à rajouter à ce qu'a dit ouadji, mes souvenirs d'interruptions datent d'école d'ingé quand on programmait sur µ-pro.

En revanche j'ai encore gardé ma capacité à triturer les sujets ^^, par hasard ne serait-il pas question de la gestion des évènements ?

Dans l'idée c'est réagir immédiatement soit à un évènement de l'interface utilisateur soit à un évènement créé par programmation:

Structure évènement

Evènement utilisateur

Après ça demande peut être d'en discuter avec l'enseignant mais c'est peut être une piste.

 

-----
Mat_P
Message 3 sur 11
3 956 Visites

Bonjour,

 

Je me permets de rajouter un mot ou deux sur ce qu'a dit Ouadji.

 

Lors de la programmation micro contrôleur, on programme directement en langage machine. Il est donc nécessaire de gérer les interruptions de manière manuelle pour autoriser le contrôleur d’exécuter plusieurs tâches de manière pseudo-parallèle.

 

L’introduction des systèmes d’exploitation à changer la donne. Ces systèmes (type Windows) proposent une surcouche logicielle qui s’occupe, entre-autre, de gérer les exploitations. Cette action est réalisée via un de leur composant nommé « Scheduler » (ou ordonnanceur en français, voir wiki).

 

Ce Scheduler s’occupe, via un algorithme bien  définit, de gérer les interruptions des différentes tâches concurrentes tournant sur un même système (on parle de Process (processus) pour els différentes applications tournant en parallèle (par Exemple, Windows en parallèle avec Foobar pour la musique, Opera pour le web et un client Thunderbird pour les mails. Le Scheduler doit faire en sorte que vous puissiez surfer tout en écoutant de la musique) et de Threads pour les tâches parallèle au sein d’un même processus (exemple type : Windows Media Player à un visualizer qui tourne en parallèle avec le lecteur de musique)). Pour que tout ce beau monde tourne d’une manière donnant l’illusion d’être parallèle, le Scheduler doit sans cesse jongler avec ces threads en les interrompant les-uns les autres.

 

Les premiers scheduler (celui de Windows 3 par exemple, si je ne dis pas de bêtises) se contentaient de laisser un temps défini à chaque thread, sans notion de priorité. C’est ce que l’on appelle le « Round-Robin Scheduling » (wiki). Plus tard, un autre type de scheduling à fait son apparition, plus proche des possibilités données par els interruptions de Microcontrôleur : Le « Preemptive Scheduling » (wiki). Cet algorithme d’ordonancement permet d’allouer des niveaux de priorité aux tâches pour qu’une tâche de priorité plus importante interrompe toutes tâches de prioroité moindre lorsque celle-ci doit être exécutée.

 

Oui mais LabVIEW dans tout ca ?

 

Il y a d’autres types d’ordonnancement, mais ces deux là représentent de mon point de vue la base nécessaire à comprendre les systèmes d’interruptions des systèmes d’exploitation sur lesquels LabVIEW tourne. Je me focaliserais sur deux d’entre-eux :

 

Windows 7 :

Je ne suis pas extrêmement familier avec le Scheduler de Windows 7. De ce que j’en ai compris, il fonctionne comme un mix de Scheduling Round-Robin et de Preemptive Scheduling. Les différentes tâches ont des niveaux de priorité. Les tâches de haute priorité interrompent les tâches de basses priorités. Cependant, il me semble que le scheduler peut aussi interrompre les tâches de haute priorité si celles-ci prennent trop de temps d’exécution pour garantir une exécution minimale pour els tâches de basse priorité. La plupart des niveaux de priorité ne sont utilisables que par le Système d’exploitation.

 

Cela signifie qu’un programme labVIEW peut avoir différent niveaux de priorité, mais jamais les plus haut et qu’une tâche exécutée sous labVIEW peut être à tout moment interrompue par Windows. Pour changer le niveau de priorité, il y a 3 méthodes :

 

* Définir le processus LabVIEW.exe comme processus de haute priorité dans le gestionnaire des tâches de Windows.

* Utiliser une « Timed Loop ». Ce faisant, vous réduirez l’algorithme dans la boucle à un thread et ce thread sera d’une plus haute priorité que les autres threads du processus en cours. Attention donc, la réduction de l’algorithme à un thread peut entrainer des Race Conditions assez dramatiques et cette priorité n’est que relative au programme. Les autres programmes et processus (dont ceux de windows) peuvent interrompre ce thread à tout moment.

* Dans les propriétés ‘exécution d’un VI, il est possible de configurer la priorité de ce VI. Encore une fois, cette priorité est relative aux autres Vis.

 

Conclusion : il n’est pas possible de créer de « vrais » mécanismes d’interruption pour un programme LanVIEW sous Windows.

 

LabVIEW Real-Time OS :

Le Scheduler de LabVIEW Real-Time OS fonctionne de manière quasi purement préemptive. Toute tâche de priorité supérieure interrompra une tâche de priorité inférieure et toute tâche de priorité inférieure ne pourra être exécutée qu’une fois toutes les tâches de priorité supérieures finies. En cas de tâches de priorité équivalente, c’est la règle de « Round Robin » qui s’applique. LabVIEW Real-Time autorise LabVIEW à utiliser tous les niveaux de priorité.

 

Les moyens de définir cette priorité est équivalente aux deux derniers points soulevés dans le paragraphe  sur Windows, avec la particularité que cette fois, la priorité d’une tâche est absolue.

 

Conclusion : Même si les interruptions processeur sont prise en charge par la surcouche logicielle du système d’exploitation, il est possible d’avoir un contrôle quasi-total sur les interruptions (avec la seule limite que LabVIEW n’autorise pas à donner une priorité telle à un processus que celui-ci pourrait interrompre le scheduler).

 

J’espère que cette petite explication sera utile à tous. N’hésitez pas à donner des Kudos si c’est le cas.

 

Cordialement

______________
Florian Abry
Inside Sales Engineer, NI Germany
Message 4 sur 11
3 939 Visites

Active ParticipantNaity >>> super! Smiley clignant de l'œil

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW
Auteur livre LabVIEW : Programmation et applications - Introduction à LabVIEW NXG
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD)
LabVIEW Champion

Message 5 sur 11
3 930 Visites

Très bonne explication, Bravo Naity !

Message 6 sur 11
3 917 Visites

Tu bosses pour Wikipedia Naity??

 

Olivier L. | Certified LabVIEW Developer


Message 7 sur 11
3 858 Visites

Non pourquoi? Smiley heureux

 

J'y ai un peu participé et le projet est vraiment intéressant. Quand il s'agit d'avoir des informations supplémentaires qui restent supperficielles et vulgarisées, ca reste selon moi la meilleure base de donnée du web (j'y ai même appri aujourd'hui que Scheduler se dit ordonnanceur en francais 😄 ).

______________
Florian Abry
Inside Sales Engineer, NI Germany
Message 8 sur 11
3 851 Visites

Je dis ça parce que tes explications sont complètes et détaillées, à la manière d'un bon article wiki...

C'est toujours très intéressant!!!

 

Merci de prendre le temps de faire de si bonnes réponses!!

 

Olivier L. | Certified LabVIEW Developer


Message 9 sur 11
3 848 Visites

@Olivier_L wrote:

Je dis ça parce que tes explications sont complètes et détaillées, à la manière d'un bon article wiki...

 


On pourrait en discuter.

 

Le post en question est rédigé dans un style non encyclopédique. les affirmations ne sont pas sourcées. Il n'est pas organisé de manière encyclopédique. Il est rédigé par un employé de la société commercialisant la technologie en question (donc impossibilité d'être objectif car conflit d'interret). Typiquement le genre de post qui sur un Wiki ne mérite qu'une intervention au lance-flamme. Smiley clignant de l'œil

 

Ceci dit, merci pour le compliment. 🙂

 

Disons que je pense que le développement d'une communauté active et d'utilisateurs responsables passe par ce genre de posts. D'autant que ce genre de savoir peut être vital quand au choix d'une plateforme pour un futur dévelopement et qu'il concerne autant les nouveaux utilisateurs que des programmeurs plus expérimentés ou des collègues (relire els bases de temps en temps fait toujours du bien).

 

Cheers

______________
Florian Abry
Inside Sales Engineer, NI Germany
Message 10 sur 11
3 842 Visites