This documentation is no longer maintained. For documentation of the current version of emc2, please see http://www.linuxcnc.org/docview/html

Table des matières

Liste des figures

1 Les bases de HAL

1.1 Commandes de Hal

Des informations plus détaillées peuvent être trouvées dans la man page en tapant "man halcmd" dans une console. Pour voir la configuration de HAL ainsi que le status de ses pins et paramétres utiliser la fenêtre HAL Configuration dans le menu Machine d'AXIS. Pour visualiser le status des pins, ouvrir l'onglet Watch puis cliquer dans l'arborescence sur les pins qui doivent être visualisées dans la fenêtre watch.

Figure: Fenêtre de configuration de HAL

1.1.1 loadrt

La commande "loadrt" charge un composant temps réel de HAL. Les composants temps réel doivent être ajoutés au thread temps réel pour être fonctionnels. Il n'est pas possible de charger un composant de l'espace utilisateur dans l'espace temps réel.

Syntaxe et exemple:

loadrt <composant> <options>

loadrt mux4 count=1

1.1.2 addf

La commande "addf" ajoute une fonction à un thread temps réel. Si l'assistant StepConf a été utilisé pour créer la configuration, deux threads ont été créés.

Syntaxe et exemple:

addf <composant> <thread>

addf mux4 servo-thread

1.1.3 loadusr

La commande "loadusr" charge un composant de HAL de l'espace utilisateur. Les programmes de l'espace utilisateur ont leur propre process séparé qui optionellement communique avec les autres composants de HAL via leurs pins et paramètres. Il n'est pas possible de charger un composant temps réel dans l'espace utilisateur.

Les drapeaux peuvent être un ou plusieurs parmis les suivants:

-W
pour attendre que le composant soit prêt. Le composant est supposé avoir le même nom que le premier argument de la commande.
-Wn <nom>
pour attendre un composant, qui porte le nom donné sous la forme <nom>.
-w
pour attendre la fin du programme
-i
pour ignorer la valeur retournée par le programme (avec -w)

Syntaxe et exemple:

loadusr <composant> <options>

loadusr halui

loadusr -Wn spindle gs2_vfd -n spindle

En anglais ça donne "loadusr wait for name spindle component gs2_vfd name spindle."
Le -n spindle est une partie du composant gs2_vfd et non de la commande loadusr.

1.1.4 net

La commande "net" crée une "connection" entre un signal et une ou plusieurs pins. Les indicateurs de direction "<= et =>" sont seulement des aides à la lecture, ils n'ont pas d'autre utilité.

Syntaxe et exemple:

net <signal-name> <pin-name> <opt-direction> <opt-pin-name>

net both-home-y <= parport.0.pin-11-in

Chaque signal ne peut avoir qu'une seule source (une seule pin de HAL "out”) et autant de lecteurs (des pins de HAL "in") que souhaité. Dans la colonne Dir de la fenêtre de configuration de HAL il est possible de voir quelles pins sont "in" et quelles pins sont "out".

Pour faire celà en une ligne:

net xStep stepgen.0.out => parport.0.pin-02-out parport.0.pin-08-out

Ou pour le faire en plusieurs lignes, utiliser simplement le signal avec les lecteurs des lignes suivantes:

net xStep stepgen.0.out => parport.0.pin-02-out
net xStep => parport.0.pin-02-out

Les pins appelées I/O pins comme index-enable, ne suivent pas cette règle.

1.1.5 setp

La commande "setp" ajuste la valeur d'une pin ou d'un paramètre. Les valeurs valides dépendront du type de la pin ou du paramètre.

Pour des informations sur les flottants voir ici (en anglais):

http://en.wikipedia.org/wiki/Floating_point

Les paramètres peuvent être positionnés avant utilisation ou pendant l'utilisation, toutefois certains composants ont des paramètres qui doivent être positionnés avant utilisation. Il n'est pas possible d'utiliser setp sur une pin connectée à un signal.

Syntaxe et exemple:

setp <pin/parameter-name> <value>

setp paraport.0.pin-08-out TRUE

1.1.6 Quatre commandes obsolètes

1.1.6.1 linksp

The command "linksp" creates a "connection" between a signal and one pin.

Syntaxe et exemple:

linksp <signal-name> <pin-name>

linksp X-step parport.0.pin-02-out

La commande "linksp" a été incluse dans la commande "net".

1.1.6.2 linkps

The command "linkps" creates a "connection" between one pin and one signal. It is the same as linksp but the arguments are reversed.

Syntaxe et exemple:

linkps <pin-name> <signal-name>

linkps parport.0.pin-02-out X-Step

La commande "linkps" a été incluse dans la commande "net".

1.1.6.3 unlinkp

The command "unlinkp" unlinks a pin from the connected signal. If no signal was connected to the pin prior running the command, nothing happens.

Syntaxe et exemple:

unlinkp <pin-name>

unlinkp parport.0.pin-02-out

1.1.6.4 newsig

the command "newsig" creates a new HAL signal by the name <signame> and the data type of <type>. Type must be "bit", "s32", "u32" or "float". Error if <signame> all ready exists.

Syntaxe et exemple:

newsig <signame> <type>

newsig Xstep bit

D'autres informations peuvent être trouvées dans le manuel de HAL ou la man page de halrun.

1.2 Fichiers Hal

Si l'assistant StepConf a été utilisé pour générer la configuration trois fichiers HAL ont dû être créés dans le répertoire de la configuration.

1.3 Composants de logiques combinatoire

Hal contient plusieurs composants logiques temps réel. Les composants logiques suivent une tables de vérité montrant les états logiques des sorties en fonction de l'état des entrées. Typiquement, la manipulation des bits d'entrée détermine l'état électrique des sorties selon la table de vérité des portes.

1.3.1 and2

Le composant "and2" est une porte "and" à deux entrées. Sa table de vérité montre la sortie pour chaque combinaison des entrées.

Syntaxe

and2 [count=N|names=name1[,name2...]]

Fonctions

and2.n

Pins

and2.N.in0 (bit, in)
and2.N.in1 (bit, in)
and2.N.out (bit, out)

Table de vérité

in0 in1 out
False False False
True False False
False True False
True True True

1.3.2 not

Le composant "not" est un simple inverseur d'état.

Syntaxe

not [count=n|names=name1[,name2...]]

Fonctions

not.all
not.n

Pins

not.n.in (bit, in)
not.n.out (bit, out)

Table de vérité

in out
True False
False True

1.3.3 or2

Le composant "or2" est une porte OR à deux entrées.

Syntaxe

or2[count=,|names=name1[,name2...]]

Fonctions

or2.n

Pins

or2.n.in0 (bit, in)
or2.n.in1 (bit, in)
or2.n.out (bit, out)

Table de vérité

in0 in1 out
True False True
True True True
False True True
False False False

1.3.4 xor2

Le composant "xor2" est une porte XOR à deux entrées (OU exclusif).

Syntaxe

xor2[count=,|names=name1[,name2...]]

Fonctions

xor2.n

Pins

xor2.n.in0 (bit, in)
xor2.n.in1 (bit, in)
xor2.n.out (bit, out)

Table de vérité

in0 in1 out
True False True
True True False
False True True
False False False

1.3.5 Exemples de logique combinatoire

Un exemple de connection avec un "and2", deux entrées vers une sortie.

loadrt and2 count=1
addf and2.0 servo-thread
net my-sigin1 and2.0.in0 <= parport.0.pin-11-in
net my-sigin2 and2.0.in.1 <= parport.0.pin-12-in
net both-on parport.0.pin-14-out <= and2.0.out

Dans cet exemple un and2 est chargé dans l'espace temps réel, puis ajouté à servo thread. Ensuite la broche d'entrée 11 du port parallèle est connectée à l'entrée in0 de la porte. Puis la broche d'entrée 12 du port est connectée à l'entrée in1 de la porte. Enfin la sortie and2.0.out de la porte est connectée à la broche de sortie 14 du port parallèle. Ainsi en suivant la table de vérité du and2, si les broches 11 et 12 du port sont à 1, alors sa sortie 14 est à 1 aussi.