Le labo étant encore coincé avec de vieilles licences, impossible d’utiliser les fonctionnalités des versions récentes, et en particulier les modèles QMH et QDMH de développement d’application labview. Profitant de la période spéciale que nous vivons, et histoire de penser à autre chose qu’à l’actualité, je me suis lancé dans les formations NI sur le sujet.
Un des exercices présente le modèle QDMH, que j’ai essayé de reproduire avec la version 7.1. De ce que je crois avoir compris, l’intérêt est d’avoir une structure de base similaire pour tous les développements et de concentrer les variations spécifiques à chaque application dans des structures case.
Une première étape du programme est de créer deux types de communication entre nos futures boucles: soit des évènements, soit des queues ou files d’attente. Les queues peuvent transporter des messages « lourds », des clusters associant une chaîne et un variant, qui transportent des commandes et des données d’une boucle à l’autre. Il est possible à plusieurs boucles d’envoyer des messages sur une queue, mais, pour un bon fonctionnement, il faut n’avoir qu’une seule boucle de traitement de ces messages par queue. Par contre on peut avoir plusieurs queues spécialisées. Elles sont normalement en FIFO, mais il est possible d’inverser cet ordre.
Les évènements ne portent pas d’information autre que leur survenue. Un évènement peut se propager à plusieurs boucles réceptrices en même temps. Ici, je les utilise uniquement pour déclencher l’arrêt du programme (évènement stop).
La phase d’initialisation créé un cluster de queues (une par spécialisation), et un cluster d’évènement personnalisé (avec pour l’instant un seul évènement stop).
Dans le corps du programme, je créé deux types de boucles: certaines associées aux évènements, ou aux queues. Ici en haut, j’ai une boucle de contrôle de l’ensemble de l’application qui, lorsqu’elle reçoit l’évènement personnalisé STOP, envoie un message de STOP sur toutes les files d’attente (queues) en position prioritaire -c’est à dire en LIFO-, avant de sortir de la boucle (donc de cesser de surveiller les évènements).
La boucle du bas, représentative de toutes les autres boucles basées sur les files d’attente, reçoit le message STOP, supprime sa file d’attente et envoie les erreurs possibles au gestionnaire d’erreur.
Ce gestionnaire, ici placé dans un sous VI, est lui-même une boucle qui lit une file d’attente dédiée. Il a le même comportement en cas d’arrêt.
Une boucle dédiée à l’interface utilisateur est placée dans un sousVI. Il s’agit en fait d’une double boucle, avec une gestion d’évenement classique des boutons de la face avant, et une boucle de traitement des messages spécifiques à l’UI (typiquement des demandes des autres boucles pour mettre à jour un indicateur).
Toutes les files d’attente et clusters de file d’attente/d’évènement sont des types personnalisés, de façon à pouvoir les modifier en répercutant le changement de type dans l’ensemble de l’application facilement.
Il y a sans doute un certain nombre de soucis potentiels (quid si une erreur se produit après la sortie de la boucle évènement de contrôle?), mais globalement c’est une assez bonne approximation des modèles proposés par NI sur les versions plus récentes de labview…
Logo à droite au dessus des marge d’un document latex rédigé avec memoir.class
La classe memoir permet facilement de mettre une image dans les en-têtes en utilisant \includegraphics dans \makeevenhead et \makeoddhead, respectivement pour les pages paires et impaires.
Le code nécessaire pour cet usage traditionnel est le suivant:
\makeevenhead {ruled}{\includegraphics{toto.jpg}\scshape\leftmark}{}{} % small caps
\makeoddhead {ruled}{}{}{\rightmark{\includegraphics{toto.jpg}}
Par contre, c’est plus difficile de mettre ce logo au dessus des marges gauches et droites (respectivement), car les en-têtes sont classiquement limités en largeur à la même taille que le corps du texte.
Deux pistes donc: soit on augmente la largeur des en-têtes, ce qui a des conséquences également sur la ligne, le titre de chapitre… qui ne sont plus nécessairement alignés avec le corps de texte, soit on créé deux boites pour loger l’image du logo et on positionne ces boites avec \put en dehors de l’en-tête initial qui n’est pas modifié. C’est ce que je fais ci-dessous (solution inspirée d’une proposition de la doc de memoir, légèrement modifiée):
%%Création d'une boite pour insertion de logo au dessus de la marge GAUCHE
\makeatletter
\newlength{\logoabscisseL}%création d'une variable longueur
\setlength{\logoabscisseL}{\marginparsep} %distance horizontale entre texte et la boite
\addtolength{\logoabscisseL}{\marginparwidth} %doit valoir au moins la largeur du logo
\addtolength{\logoabscisseL}{\marginparsep} %distance entre les notes de marges et le corps de texte
\newcommand{\bringpicrleft}[1]{%
\setlength{\unitlength}{1pt}
\begin{picture}(0,0)
\put(-\strip@pt\logoabscisseL,0){%
\begin{minipage}[t]{\marginparwidth}
\raggedleft #1
\end{minipage}}
\end{picture}
}
%%Création d'une boite pour insertion de logo au dessus de la marge DROITE
\newlength{\logoabscisseR}%création d'une variable longueur
\setlength{\logoabscisseR}{\marginparsep} %distance horizontale entre texte et la boite
\addtolength{\logoabscisseR}{0cm} %doit valoir la largeur du logo
%\addtolength{\logoabscisseR}{1cm} %ajouter la largeur du logo pour le positionner en haut à gauche de la page, dans la marge
\newcommand{\bringpicrright}[1]{%
\setlength{\unitlength}{1pt}
\begin{picture}(0,0)
\put(\strip@pt\logoabscisseR, 0){%
\begin{minipage}[t]{\marginparwidth}
\raggedright #1
\end{minipage}}
\end{picture}
}
\makeatother
En espérant que cela puisse servir…
Publié dansTechnique|Marqué avecen-tête, header, image, latex, logo, memoir class|Commentaires fermés sur Latex & classe memoir: comment afficher un logo dans les en-têtes MAIS au dessus des marges…
L’option « enregistrer sous »/options web d’excel v2016 permet théoriquement d’utiliser les encodages standards UTF8, unicode…
C’est un peu plus compliqué que cela car, en ouvrant les fichiers avec un éditeur hexadécimal, on voit des différences entre deux fichiers textes.
Enregistrer sous « Fichier texte UNICODE »
Quelque soit l’option « web » choisie (UTF8, unicode, occidental ISO ou windows), le fichier commence par la séquence FF FE correspondant à UCS-2 Little Endian. Après quoi, tous les caractères sont enregistrés en laissant un octet sur deux vide, sauf pour le symbole €. Exemple: a est codé (61 00); é (E9 00), le € (AC 20), sa valeur sous unicode en inversant les deux octets.
Aucune différence visible entre les différentes « options web ».
Enregistrer sous « Fichier texte (tabulation) »
Pas de séquence de démarrage (BOM) comparable en début de fichier: on embraye immédiatement avec les valeurs. Le é est codé E9, le € (AC 20), sa valeur sous unicode en inversant les deux octets. Contrairement au cas précédent, tous les octets sont utilisés en séquence, et non uniquement pour le symbole €.
Enregistrer sous « Fichier texte (prn) pour lotus »
Pas de séquence de démarrage (BOM) en début de fichier: on embraye immédiatement avec les valeurs. Le é est codé E9, le € est codé 80, on suit l’encodage spécifique windows cp1252.
Enregistrer sous « Fichier texte (macintosh) »
Pas de séquence de démarrage (BOM) en début de fichier: on embraye immédiatement avec les valeurs. Le é est codé 8E, le € DB, le fichier suit l’encodage Mac OS roman, ce qui est au moins logique….
Enregistrer sous « Fichier texte (MSDOS) »
Pas de séquence de démarrage (BOM) en début de fichier: on embraye immédiatement avec les valeurs. Le é est codé 82, le € 3F et n’est pas affiché sous notepad++. Le caractère n’est visiblement pas encodé, car sa valeur est perdue même si on réouvre le fichier sous excel. L’encodage semble suivre la table IBM OEM 850 ou cp850.
Bref, le seul moyen d’obtenir de l’UTF 8 depuis excel semble être d’enregistrer le fichier excel en tant que page web….
Note:
Pour utiliser les fichiers texte « tabulation » tels qu’enregistrés par excel sous latex, cet environnement semble bien opérationnel:
\newenvironment{excelTXTinput}{%
\inputencoding{latin9} %utilise l'encodage des fichiers TXT excel "tabulation"
\DeclareInputText{"80}{\euro} %dans le fichier de sortie excel hexa 80
\DeclareInputText{164}{\euro}
\DeclareInputText{25}{\symbol{25}} %symbole degré °
}%
{\inputencoding{utf8}%revient à l'encodage utf 8 après l'environnement
}
Publié dansTechnique|Marqué avecExcel, latex, unicode, utf-8|Commentaires fermés sur Excel et encodage des caractères lors des sauvegardes
La température de soudure étain-or est très basse. Pour un mélange à forte teneur en étain (grosse goutte de soudure versus petit fil d’or typiquement), la température de fusion est de l’ordre de 200°C à 300°C maxi.
Il est donc très difficile de souder sur or comme on peut le faire sur cuivre. Il faut fortement réduire la température du fer à souder.
Dans notre montage de mesure électriques « four », nous avons un système de mesure en faux quatre fils, soit deux fils soudés juste avant le contact échantillon de chaque coté de celui-ci.
Nous avons malheureusement une impédance résiduelle qui semble liée à ce montage, spécifiquement à la partie de câble parallèle de chaque coté de l’échantillon qui se situe à l’intérieur du four.
Impédance résiduelle du montage 4 fils (phase et module)
Cette impédance a une phase qui augmente légèrement lorsque l’on connecte entre eux les deux câbles d’une des électrodes au niveau de l’appareil de mesure.
Le montage permet donc de supprimer au moins une partie de la contribution des câbles (entre l’appareil et l’échantillon). La composante résiduelle est légèrement modifiée si l’on touche au fil dans le four: Cela plaide pour une modification de la connection à l’intérieur du four.
L’impédance ayant tendance à augmenter avec la fréquence (puis à diminuer à haute fréquence), on serait sans doute sur un système RLC parasite dû à la proximité des fils à l’intérieur de la canne alumine.
Une information ne figure pas dans la doc: lors de l’écriture d’un programme sur un contrôleur de température eurotherm 3504, l’ordre d’écriture des registres n’est pas anodine. Ainsi, l’écriture sur le registre « segment.type » remet à zéro les valeurs caractéristiques du segment associée (par exemple la durée pour un palier).
Pour prendre l’exemple du premier segment sur le premier programmeur, il convient d’écrire d’abord sur le registre 5376 le type du segment, puis, par exemple pour un palier, la durée sur le registre 5380.
Si on entre d’abord une valeur sur le registre 5380, puis le type du segment sur 5376, la valeur en 5380 est écrasée.
Publié dansTechnique|Commentaires fermés sur Eurotherm 3504/3508 programmation via modbus
Le manuel utilisateur (pdf) est très discret sur le changement de pile du BIOS; il s’agit d’une pile BR2032 Panasonic (3V) au porte pile soudé sur la carte mère… Il n’y a malheureusement pas de solution autre que de devoir dessouder l’ancienne pile pour la remplacer. C’est dommage s’agissant d’une carte souvent montée sur des appareils en rack à la durée de vie largement supérieure à 5 ans (espérance de vie officielle de la pile…).
Schéma de la pile du BIOS pour la carte IB890R
Ci dessus un schéma similaire. Sur la ID890, l’écartement noté 10.16 est de ~10mm.
Exemple de porte pile à pile non soudée facilitant la maintenance
Il est possible de profiter du changement de pile pour changer de porte pile et prendre un modèle plus simple de maintenance, type ci contre, également chez RS.
Publié le6 septembre 2019parXavier|Commentaires fermés sur Carte mère IB890 R: changement de la pile BIOS
Les tables de paramètres modbus présentes dans itools indiquent que le registre 122 contient l’information 0 ou 1 selon que l’on dispose du modèle 3504 ou 3508.
En réalité, il existe une variable interne INST_TYP_HEX dont la valeur est E440 (hexadécimal) ou E480 pour un 3504 ou un 3508.
C’est cette valeur que l’on récupère en lisant le registre 122, et non un booléen. C’est indiqué dans la doc… mais dans les pages consacrées au protocole EI-BISYNC, au mnémonique II.
A noter que si le registre à interroger est identique pour la série eurotherm 24xx et 35xx, ce n’est pas le cas pour le 902, pour lequel l’adresse 122 est hors limites: c’est le registre 121 qui contient l’information.
extrait de la doc eurotherm 3504
extrait de la doc eurotherm 2400
extrait de la doc eurotherm 902
Publié dansScience, Technique|Commentaires fermés sur Eurotherm 3504 et 3508: quel identifiant?