Comment pouvons-nous aider ?
Comment régler et synchroniser l’horloge de l’automate ACE avec l’IHM à l’aide d’une macro ?
Dans cet article, nous allons vous montrer comment synchroniser l’horloge de l’IHM avec l’horloge de l’automate ACE.
Comme l’IHM possède une horloge sauvegardée, nous l’utilisons pour mettre à jour l’horloge de l’automate ACE.
L’horloge de l’IHM est au format BCD. Dans l’automate ACE, l’horloge est au format DEC.
Ce tutoriel utilise une macro pour convertir l’horloge BCD (Binary-Coded Decimal) de l’IHM en horloge DEC (DECimal).
Avec vBuilderTout d’abord, les balises UI8 qui seront écrites par l’IHM doivent être définies dans le registre Modbus. Par exemple, nous utilisons ici les adresses 4×900 à 4×905. Mais vous pouvez utiliser n’importe quelle zone. N’oubliez pas de les définir comme « inscriptibles » : ‘Y’ (voir la liste des balises dans vBuilder). Vous obtiendrez l’horloge de l’IHM dans votre PC ACE (ici, ‘sec’, ‘min’,…) |
![]() |
Avec HMI-Tool
La macro pour convertir BCD en DEC
Dans l’éditeur de macros, ajoutez une nouvelle macro et copiez-la.
L’éditeur de script :
Vous n’êtes pas obligé d’utiliser toutes les balises, si vous n’avez besoin, par exemple, que des heures et des minutes.
#include "MacroInit.h"
int Convert (int input) // fonction de conversion de BCD en DEC
{
int iFirst = input &0x000F ;
int iSecond = (input/16) &0x000F ;
int iThird = (input/256) &0x000F ;
int iFourth = (input/4096) &0x000F ;
return iFirst iSecond*10 iThird*100 iFourth*1000 ;
}
void Macro_main(IN *p)
{
MarcoInit // Programme principal
LocalWord[900] = Convert (BCDSec) ;
MotLocal[901] = Conversion (BCDMin) ;
MotLocal[902] = Conversion (BCDHou) ;
MotLocal[903] = Conversion (BCDDay) ;
MotLocal[904] = Conversion (BCDMon) ;
MotLocal[905] = Conversion (BCDYea)-2000 ;
}
MotLocal[900] à MotLocal[905] sont les registres HMI dans lesquels nous avons placé les valeurs d’horloge au format DEC.
Nous aurions pu utiliser LocalWord[0] à LocalWord[5] ou tout autre registre HMI.
La liste des macro-étiquettes
Nous allons créer la liste des balises utilisées dans la macro.
- BCDSec = LW[60000] = les secondes dans HMI
- BCDMin = LW[60001] = les minutes dans HMI
- etc…
Note : Pour tous les registres HMI LB et LW et pour comprendre comment le registre HMI est organisé, voir« Registres HMI utiles, réservés et spéciaux »
Ci-dessous, le script de la fenêtre, les paramètres des variables et un exemple de paramètre de variable :
Compilation de la macro
Le résultat doit être « Succès
Ajouter la macro dans la liste « Global Macro »
Ajouter la macro dans la liste des « macros globales » et fixer sa fréquence d’exécution à 1000 ms pour une mise à jour de l’horloge toutes les secondes.
A partir de maintenant, les registres LocalWord[900] à LocalWord[905] de l’IHM contiennent les valeurs de l’horloge au format décimal (DEC)
Transférer LocalWord[900] vers MotLocal[905] dans l’API ACE
Dans HMI-Tool, à gauche, « Data forward » > « Word address », ajoutez la bonne adresse de mot pour copier le LW900 vers le LW905 vers le bon lien réseau et l’identifiant PLC.
Une fois encore, nous utilisons les registres 900 des deux côtés, IHM et API, mais vous pouvez utiliser n’importe quelle zone. L’essentiel est d’être cohérent tout au long de la configuration.
A partir de maintenant, l’automate ACE reçoit l’horloge de l’IHM au format DECimal dans ses registres.
Remplacer le mot local[900] en LocalWord[905] par vos variables pour écrire directement dans l’automate ACE
Dans une macro, vous pouvez remplacer les lignes » LocalWord[900] = Convert (BCDSec) ;
» etc. par » MyPLC_Tag_Sec = Convert (BCDSec) ;
» où « MyPLC_Tag_Sec » est directement votre variable automate dans la liste des variables de la macro.
Projet à télécharger
Vous pouvez télécharger ici le projet HMI et ACE si vous souhaitez le tester.