Configuration de l'interface sur Machine Expert Basic

Sur ordinateur, ouvrir le logiciel Machine Expert Basic.

Dans un premier temps, configurer un mot de passe pour les deux types de protections. Pour plus de facilité, mettre les protections en Inactif puis cliquer sur Appliquer.  

Aller sur l'onglet Configuration et rechercher la référence du PLC. 

Glisser-déposer le bloc sur l'espace de travail et cliquer sur Oui.

Enregistrer le projet. 

Aller sur ETH1, configurer une adresse IP disponible, cocher les quatre cases en dessous et cliquer sur Appliquer.

Aller dans l'onglet Mise en service. L'adresse IP renseignée précédemment doit apparaitre dans le champ Equipements Ethernet. Pour vérifier la connexion au PLC, cocher les cases à proximité de l'adresse IP, puis cliquer sur celle-ci et enfin cliquer sur Connexion

Si la connexion s'est faite, la mention En ligne doit apparaitre.

Cliquer sur Deconnexion.

Retourner sur l'onglet Configuration et sur Modbus TCP. Ajouter l'adresse IP statique du robot. Pour définir une adresse statique, suivre le tuto suivant ici. Cliquer sur Ajouter, choisir un nom et cliquer sur Appliquer

Aller sur Programmation. Cette première partie va se concentrer sur la lecture de données. Ajouter le bloc Read Var.

Ajouter les paramètres suivants dans le bloc. 

Bloc READ_VAR (Rung 0) :

  • Link : 3 - ETH1
  • OBJTYPE : 0 - Read multiple words (Pour lire les valeurs des registres)

  • FirstObj : adresse de départ dans le robot (ex: 228). Noter un décalage de un par rapport aux registres du robot. Dans notre cas, on recevra les données sur le registre 229 envoyées par le robot.

  • Quantity : 2 (pour lire un flottant).

  • IndexData : %MW228 (adresse de réception dans l'automate).

Cliquer sur Appliquer

Ajouter des contacts aux entrées du bloc et des bobines aux sorties de celui-ci. Attribuer des adresses et des symboles aux différentes broches : 

Broche EXECUTE ABORT DONE BUSY ABORTED ERROR
Symbole SB_TB1S ERROR_READ DONE_READ BUSY_READ ABORTED_READ ERROR_READ
Adresse %S6 %M4 %M1 %M2 %M3 %M4

Les adresses et symboles présentés ici sont donnés à titre indicatif. Libre d'adapter ce choix selon les différents standards. Noter également que l'adresse de l'horloge est modifiable (par exemple en utilisant %S7) pour correspondre à votre configuration système.

Ajouter un nouveau réseau. Dans celui-ci, ajouter un nouveau contact, deux blocs d'opérations et pour une nouvelle bobine. Les blocs d'opérations vont servir à procéder à une conversion des données.

En effet, le robot et l’automate ne parlent pas le même "dialecte" binaire pour les nombres à virgule (Flottants/REAL). Le robot envoie les informations dans un ordre inversé par rapport à ce qu'attend l'automate M221. Sans cette étape, on peut lire des valeurs incohérentes comme 9.10844E-44  au lieu de 8.0.

Rôle des deux blocs d'opération (Mode Lecture)

Le but est de remettre les 32 bits de la donnée dans le bon ordre avant que l'automate ne les interprète.

  1. Le "Word Swap" (inversion des mots) :

    • Le flottant est découpé en deux registres de 16 bits (%MW228 et %MW229).

    • L'opération consiste à utiliser deux nouveaux registres (%MW300 et %MW301), déplacer le contenu du deuxième mot vers le premier, et vice-versa, pour replacer l'exposant et la mantisse au bon endroit. Le flottant est donc inversé. 

  2. Le "Byte Swap" (Inversion des octets) :

    • À l'intérieur de chaque mot, les deux octets (8 bits) sont aussi inversés.

    • La fonction SWAP (ou ROL ..., 8) bascule ces octets pour que l'automate lise enfin la valeur réelle.

Étapes de conversion
  1. Réception : le bloc %READ_VAR0 enregistre les données brutes "en désordre" dans %MW228 et %MW229.

  2. Déclenchement : une fois la lecture terminée sans erreur, le bit %M1  (DONE) s'active et autorise l'exécution des calculs.

  3. Traitement : Les instructions %MW300:2 := SWAP(%MW229:2) et %MW301:2 := SWAP(%MW228:2) traitent les deux mots d'un coup. Elles inversent les octets et rangent le résultat dans de nouvelles zones propres : %MW300 et %MW301.

  4. Résultat : l'automate assemble automatiquement ces deux mots pour former la variable %MF300 (%MW300 et %MW301). C’est ici qu'on lit la valeur corrigée (ex: 1,0 ou 8,0).

Ajouter les expressions ainsi que les adresses et symboles comme indiqué sur l'image suivante.

Le bloc de lecture est enfin prêt. Pour la partie écriture, la même logique va être appliquée.

Ajouter un nouveau réseau et rechercher le bloc Write Var

Ajouter les différents blocs de la même manière qu'indiquée sur l'image avec les adresses et symboles correspondants. 

Broche EXECUTE ABORT DONE BUSY ABORTED ERROR
Symbole SB_TB1S ERROR_WRITE DONE_WRITE BUSY_WRITE ABORTED_WRITE ERROR_WRITE
Adresse %S6 %M9 %M6 %M7 %M8 %M9

Ajouter les paramètres suivants dans le bloc. 

Bloc WRITE_VAR (Rung 0) :

  • Link : 3 - ETH1
  • OBJTYPE : 0 - Write multiple words (Pour envoyer les valeurs aux registres)

  • FirstObj : adresse de départ dans le robot (ex: 226). Noter également un décalage de un par rapport aux registres du robot. Dans notre cas, on enverra les données de commandes sur le registre 227 du robot.

  • Quantity : 2 (pour lire un flottant).

  • IndexData : %MW226 (adresse de réception dans l'automate).

Cliquer sur Appliquer

De la même manière que la partie lecture, ajouter un nouveau réseau avec un nouveau contact, deux blocs d'opérations et une nouvelle bobine. 

Rôle des deux blocs d’opération (Mode Écriture)

Le but est de "désordonner" volontairement les 32 bits de la consigne pour qu'ils arrivent dans le format attendu par le robot.

  • Le "Word Swap" : on prépare l'envoi en croisant les registres de la consigne (ex : %MW400 et %MW401) vers les registres d'envoi (%MW410 et %MW411).

  • Le "Byte Swap" : la fonction SWAP préinverse les octets de chaque mot pour que le robot reçoive les bits de l'exposant et de la mantisse dans son propre "dialecte".

Étapes de conversion

  1. Préparation : saisir la valeur cible dans la variable flottante %MF400 (composée de %MW400 et%MW401).

  2. Traitement : les instructions %MW410:2 := SWAP(%MW401:2) et %MW411:2 := SWAP(%MW400:2) (avec inversion de l'ordre des mots) préparent les données dans les registres tampons %MW410 et %MW411.

  3. Déclenchement : l'activation du bloc %WRITE_VAR0 (via un bouton ou une horloge) lance le transfert.

  4. Envoi : l'automate transmet les données "pré-croisées" au robot qui les interprète alors instantanément comme la bonne valeur réelle.

La configuration est prête.

Avant de le charger dans l'automate, créer une table d'animation pour afficher les valeurs lues et modifier les valeurs à écrire. 

Pour cela, faire un clic droit sur Outils → Table d'animation Ajouter une nouvelle table d'animation. 

Saisir les adresses %MF300 (Lecture) et %MF400 (Écriture) une par une en cliquant à chaque fois sur Entrée ou le bouton Ajouter

Aller dans Mise en service. Cliquer sur Connexion puis sur PC vers contrôleur (chargement). Confirmer pour écraser le programme. 

Retourner dans Programmation. Cliquer sur le bouton pour Démarrer le contrôleur.

Double-cliquer sur la case de la valeur de l'adresse. C'est cette valeur qui va être utilisée dans le programme du robot pour exécuter des actions prédéfinies.

La configuration côté PLC est maintenant terminée. 

Modification du port Modbus 

Bien que le port standard du protocole Modbus soit le 502, les robots Niryo utilisent par défaut le port 5020. Le logiciel Machine Expert – Basic ne permettant pas la personnalisation du port de communication (contrairement aux versions "Pro" ou à TIA Portal), une adaptation est nécessaire. Pour pallier cette limitation, une règle de redirection de port (port forwarding) doit être configurée directement sur le robot.

Pour faire cela, sur Windows (à voir sur Linux et Mac), ouvrir l'invite de commandes et se connecter au robot en SSH. Les démarches sont expliquées ici. L'adresse IP à fournir est celle du robot, configurée précédemment lors de l'ajout de celle-ci sur Machine Expert - Basic.

Dès lors que la connexion est faite, taper ligne par ligne : 

cd /etc/ufw
sudo nano before.rules

Saisir le même mot de passe lors de la connexion en SSH. Dans ce fichier, ajouter les lignes suivantes avant le COMMIT :  

COMMIT
### PORT FORWARDING ###
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport <PORT> -j REDIRECT --to-port 5020

Remplacer "<PORT>" par le numéro de port souhaité (502). 

Sauvegarder en appuyant sur CTRL+S puis fermer le fichier avec CTRL+X.

Ensuite, taper les commandes suivantes : 

cd 
cd /etc/default
sudo nano ufw

Puis, au niveau de la ligne DEFAULT_FORWARD_POLICY, passer de DROP à ACCEPT

Sauvegarder en appuyant sur CTRL+S puis fermer le fichier avec CTRL+X

Taper la commande suivante : 

sudo ufw enable

Si des erreurs surviennent lors du lancement de cette commande (comportement instable observé avec ufw), éditez le fichier before.rules : supprimez puis réinsérez la balise COMMIT située juste avant la ligne ### PORT FORWARDING ###.

Retenter la commande du dessus, puis si aucune erreur n'apparait, taper la commande suivante :

sudo ufw reload

Si tout a fonctionné, désactiver la connexion SSH

sudo reboot

Programmation côté robot 

Il est temps de créer un programme pour le robot, afin qu'il puisse recevoir les commandes provenant du PLC et envoyer leur statut en retour. Ce programme peut être codé uniquement avec PyNiryo. La version de PyModbus utilisée est la 3.9.0. Pour l'installer, taper la commande suivante dans le terminal d'un environnement Python virtuel.

pip install pymodbus==3.8.0

Par la suite, vous pouvez copier le code exemple, retrouvable ici

Le script Python transforme le robot Niryo en un client Modbus TCP qui va écouter ses propres registres enregistrés sur le serveur du robot. Son rôle est d'écouter les ordres envoyés par le PLC (commandes) et de lui renvoyer des informations sur son état actuel (statut).

1. Adressage et Registres Clés

Le dialogue repose sur deux zones mémoires précises :

  • REG_COMMAND (227) : le "tableau de bord" où le PLC écrit ses ordres (1.0, 2.0, etc.).
  • REG_STATUS (229) : le "miroir" où le robot écrit son état (action en cours ou terminée) pour que le PLC le lise.
2. Le rôle du Décodage/Encodage

Comme l'automate et le robot n'utilisent pas le même ordre d'octets, le script utilise deux fonctions vitales :

  • decode() : réceptionne les registres "en désordre" envoyés par le PLC et les reforme en nombre réel (ex: transforme les signaux du PLC en 2.0).

  • encode() : prépare les données de statut du robot (ex: 1.0 pour "fini") dans le format inverse pour que le PLC puisse correctement les lire sans erreur.

3. Logique de commande et statut

Le programme tourne en boucle selon ce cycle :

  1. Lecture : le robot surveille le registre 227. Si une nouvelle valeur apparaît, il lance l'action correspondante (Home, Vision, ou Trajectoire).

  2. Statut : dès qu'il commence, il écrit 0.0 dans le registre 229 (Occupé). Une fois le mouvement fini, il écrit 1.0 (Prêt).

La configuration côté robot et PLC est faite. 

Tests

Retourner sur Machine Expert Basic, cliquer sur Connexion, puis démarrer le contrôleur. Lancer le programme au niveau du robot, puis faire varier la valeur de l'adresse %MF400 au niveau de la table d'animation, pour voir le robot bouger. 

Modifié le: jeudi 2 avril 2026, 16:29