La connexion à un broker MQTT
Dans tous les logiciels modernes, il est possible de publier des données pouvant être utilisées par d'autres applications. Dans QuickView, nous avons opter pour l'utilisation de MQTT. MQTT est une manière de publier des données selon un protocole standard (voir MQTT sur wikipedia ).
Création d'un "UNS" (Unified Name Space)
L'utilisation de MQTT doit se faire d'une manière standardisée en appliquant les standards ISA-95 dans l'architecture d'un UNS:
Exemple d'un Unified Name Space:
La configuration
La configuration de la connexion se fait dans VKServer.ini. Une nouvelle section [MQTT] doit être créée. Il faut auparavant avoir obtenu la licence pour permettre cette connexion. La licence correspond à AMConnector car elle est aussi utilisée par VK A&M pour importer des données depuis QuickView.
Exemple de configuration:
[MQTT]
Enabled=1
Host=192.168.11.31
Port=8883
SSlEnable=1
ClientID=VKQuickView
GroupName=A34002
RefreshRate=30
Hierarchical=1
ForceIOType=0
AutoRestart=1
PublishRectifiers=1
PublishMachine=1
PublishCounters=1
PublishDailyData=1
ValueStyle=1
DecimalCount=2
La section [MQTT]
Les mots clef suivants peuvent être définis:
|
Mot clef |
Type |
Valeur par défaut |
Description |
|
Enabled |
Boolean |
0 |
Doit être activé pour que la connexion soit créée. |
|
Host |
String |
vide |
Adresse du broker MQTT |
|
Port |
Integer |
1883 |
Numéro du port TCP |
|
SSLEnable |
Boolean |
0 |
Vrai si la connexion utilise Open SSL (TLSv1.1) pour une connexion sécurisée. Pour pouvoir travailler en mode SSL sécurisé, il faut placer les dll d'OpenSSL dans le même répertoire que QuickView (version 32bits, version testée: 1.0.2.18) |
|
ClientID |
String |
GUID |
Nom du client MQTT |
|
KeepAlive |
Integer |
60 |
Temps en secondes pour garder la connexion en vie lorsqu'il n'y a pas de communication |
|
RefreshRate |
Integer |
30 |
Temps en secondes pour l'exécution d'un rafraîchissement des variables |
|
Retain |
Boolean |
0 |
Vrai si le contenu des variables doit être préservé sur le broker après la déconnexion. Si ce flag est activé, alors des messages seront renvoyés à tous les clients lors de leur connexion au broker. |
|
BaseName |
String |
VKQV |
Nom de base des topics. |
|
GroupName |
String |
MachineName |
Nom de publication du groupe. En général correspond au code de la machine par exemple: A34002 |
|
ForceIOType |
Boolean |
1 |
Vrai si le type défini dans les I/O doit être respecté. Si faux alors le système utilise le type des registres des databanks. |
|
Hierarchical |
Boolean |
0 |
Vrai pour forcer une hiérarchie dans la publication des variables par exemple: VKQV\23\Température actuelle. Si faux alors le système n'utilise pas le nom de la variable mais son numéro exemple: VKQV\924 |
|
PublishMachine |
Boolean |
0 |
Vrai pour forcer la publication de la machine et des tableaux correspondants comme les redresseurs, les pompes doseuses. |
|
AutoRestart |
Boolean |
1 |
Vrai pour forcer la reconnexion et le démarrage de la publication après une perte de connexion. |
|
ValueStyle |
Integer |
1 |
Format des valeurs des variables: 0: Tous les changement de variable sont envoyés dans le même topic soit: BaseName/GroupName/ToVKAM . Le format utilisé sera: { "Type":1, "Items":[{ "LB": "A34001/23/Température actuelle", "V": 12.4, "U":"°C","T":"Double"},{...}], "TS": "2019-04-06T13:46:15.145"}
1: {"V":12.4,"U":"°C","T":"Double","TS":"2019-04-06T13:46:15.145"} V=Value, U=Units, T=Type, TS=TimeStamp |
|
DecimalCount |
Integer |
2 |
Nombre de décimales affichées dans les valeurs réelles |
|
UserName |
String |
vide |
Nom de l'utilisateur lorsqu'un login est demandé par le broker |
|
Password |
String |
vide |
Mot de passe lorsqu'un login est demandé par le broker |
|
Language |
Integer |
0 |
Langue utilisée pour les textes des alarmes et messages |
|
PublishAlarm |
Boolean |
0 |
Vrai pour forcer la publication des alarmes et des messages |
|
UsePosNumber |
Boolean |
0 |
Vrai pour utiliser la valeur "display" de la position à la place de son index dans le nom des variables publiées. |
|
PublishDailyData |
Boolean |
0 |
Vrai pour publier les données de fonctionnement journalier |
La définition des variables dans QuickView
Les variables sont définies dans les IO de QuickView. Le flag 'Q' doit être ajouté à toutes les variables devant être publiées vers MQTT. Ceci se fait soit manuellement dans le fichier IO.ini soit en utilisant le navigateur d'équipement de VKClient10.
Exemple de définition dans [IO.INI]:
; Températures
; ============
300=1,Actual Temperature A,W,RQ,15,0,$FFFF,10,100
301=1,Actual Temperature B,W,RQ,15,1,$FFFF,10,100
302=3,Actual Temperature,W,RQ,15,2,$FFFF,10,100
303=4,Actual Temperature,W,RQ,15,3,$FFFF,10,100
304=5,Actual Temperature,W,RQ,15,4,$FFFF,10,100
La publication des variables
Le système publiera les I/O qui sont définies comme pouvant être publiées dans la définition ci-dessus. Il publiera également les valeurs globales de la machine comme par exemple la définition machine ou les redresseurs à condition que le mot clef "PublishMachine" soit activé.
Les variables sont publiées sous forme d'un enregistrement au format JSON. Exemple:
{"V":12.4,"U":"°C","T":"Double","TS":"2019-04-06T13:46:15.145"}
Les topics de publication dépendent du mot clef "ValueStyle". 2 styles sont définis: 0: Style utilisé avec VKAM ayant une version > 3.0.0.2. et 1: Style utilisé avec VKAM ayant une version <= 3.0.0.2
VariableStyle=0
Ce style utilise des topics prédéfinis dont voici la liste:
| Topics | Description |
| BaseName/GroupName/ToVKAM |
Topic dans lequel les changements des variables sont envoyés. Le format du topic sera le suivant:
{ "Type": int, "Items": Array [ { "LB": string, "V": object, "U": string, "T": string, "S": string }, { .... } ], "TS" : string }
Type: Type de message. Toujours 1 pour l'instant LB : Label de la variable V : valeur de la variable U : unité de la variable T: type de la variable S: source de la variable TS: Timestamp
Exemple: { "Type":1, "Items":[{ "LB": "A34001/23/Température actuelle", "V": 12.4, "U":"°C", "T":"Double"},{"LB":"A34001/78/Conductivité", "V":2.44, "U":"mS", "T":"Double"}], "TS": "2019-04-06T13:46:15.145"} |
| BaseName/GroupName/FromVKAM | Topic dans lequel VKAM peut envoyer des commandes à VKQV. Le format utilisé est le même que ci-dessus. |
| BaseName/GroupName/Watchdogs |
Topic dans lequel VKQV va écrire à chaque rafraîchissement des variables. VKQV s'abonne à ce topic pour vérifier que le broker soit bien fonctionnel. Si celui-ci fonctionne correctement, il devrait renvoyer ce que VKQV a écrit. La liaison est déclarée comme débradée si ce topic n'est pas envoyé par le broker après 5 fois le temps de rafraichissement. Dans ce cas, la liaison est interrompue et une nouvelle connexion est tentée.
Exemple du contenu envoyé par VKQV: {"V":269,"T":"Int","TS":"2022-06-03T10:28:01.936"}
|
| BaseName/GroupName/Machine/Definition | |
| BaseName/GroupName/Machine/Status | |
| BaseName/GroupName/Alarms | |
| BaseName/GroupName/Messages | |
| BaseName/GroupName/DailyData | |
| BaseName/GroupName/Status |
Statut de la connexion VKQV. Lorsque VKQV démarre, il écrit le statut de la connexion soit: {"V":"Connected","T":"String","TS":"2022-06-02T09:20:00.642"}. Avant de se déconnecter, il écrit: {"V":"Disconnected","T":"String","TS":"2022-06-02T10:24:35.123"}. Ce topic est également désigné comme Last Will Topic lors de la connexion. |





