TDASDriverHTTP
| TDASDriverHTTP = class (TDASTagIPBaseDriver) | Interface de TDASDriverHTTP | Exemples de TDASDriverHTTP |
Qubes Expert v5 Driver HTTP pour l'acquisition périodique de données DAS via des requêtes GET JSON
Introduction
Le driver HTTP fait partie du système DAS (Data Acquisition System) de QuBES Expert. Il permet d'acquérir périodiquement des données depuis un serveur HTTP externe.
Principe de fonctionnement :
- À chaque cycle de polling (configurable en secondes), le driver interroge l'endpoint HTTP
- Il regroupe les tags par identifiant d'équipement et effectue un appel GET par équipement
- La réponse JSON est parsée et les valeurs sont associées aux tags configurés dans le DataSet
Configuration du driver
Le driver HTTP nécessite deux paramètres :
| Paramètre | Obligatoire | Description |
|---|---|---|
| Server | Oui | Adresse du serveur HTTP (IP ou hostname, avec port). Ex: 192.168.1.50:8080 |
| DataSource | Oui | Chemin URL de l'endpoint de données. Ex: /api/mesures |
(:tip:) Le protocole http:// est ajouté automatiquement si l'URL ne contient pas :// .
Format de la requête HTTP
Méthode
GET
Construction de l'URL
{Server}{DataSource}?m={EquipmentID}
Le paramètre de query string m contient l'identifiant de l'équipement. Cet identifiant est extrait automatiquement de la partie avant le premier . dans le TagAddress de chaque tag.
Regroupement par équipement
Le driver parcourt tous les tags actifs du DataSet, extrait les EquipmentID distincts, puis effectue une requête GET par équipement. Les tags sans adresse ou désactivés sont ignorés.
Exemple : Pour des tags ayant les adresses FOUR01.Temperature, FOUR01.Pression, CONV01.Vitesse :
GET http://192.168.1.50:8080/api/mesures?m=FOUR01 GET http://192.168.1.50:8080/api/mesures?m=CONV01
Format de la réponse HTTP attendue
Code HTTP
200: la réponse est traitée normalement- Tout autre code : la réponse est ignorée, aucun tag n'est mis à jour pour cet équipement
Corps de la réponse
Le serveur doit retourner un tableau JSON d'objets. Chaque objet représente la valeur d'un tag :
[
{
"TagAddress": "FOUR01.Temperature",
"Value": 185.2,
"Quality": "GOOD"
},
{
"TagAddress": "FOUR01.Pression",
"StringValue": "3.5",
"Quality": "GOOD"
}
]
Champs de chaque objet
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
TagAddress | String | Oui | Adresse complète du tag (ex: FOUR01.Temperature). Doit correspondre exactement au TagAddress configuré dans le DataSet. |
StringValue | String | Non | Valeur sous forme de chaîne. Prioritaire sur Value si les deux sont présents. |
Value | Number ou String | Non | Valeur numérique ou textuelle. Utilisé uniquement si StringValue n'est pas défini. |
Quality | String | Non | Qualité de la donnée. "GOOD" (insensible à la casse) = donnée valide. Toute autre valeur = mauvaise qualité. |
Priorité des valeurs
La valeur du tag est déterminée par l'expression : StringValue ?? Value
- Si
StringValueest présent et défini : c'est lui qui est utilisé - Sinon :
Valueest utilisé
Horodatage
Le driver HTTP ne lit pas de timestamp depuis la réponse JSON. Les timestamps sont générés côté QuBES :
DriverTimeStamp=LocalDateTimeToUTCDateTime(Now)(heure locale convertie en UTC)QubesTimeStamp=Now(heure locale du serveur QuBES)
(:note:) Cela diffère du driver OPC qui lit TimeStampUtc depuis la source de données.
Structure des TagAddress
Format : {EquipmentID}.{TagName}
Exemple : FOUR01.Temperature
CONV01.Vitesse
EquipmentID: partie avant le premier.— sert à regrouper les requêtes HTTPTagName: partie après le premier.— identifie la mesure au sein de l'équipement- Les tags dont l'adresse ne contient pas de
.produisent un EquipmentID vide et sont ignorés - Les tags sans adresse (
TagAddressvide) ne génèrent pas de requête
Exemple de paramétrage complet
Configuration du DataSet
| Champ | Valeur |
|---|---|
| Nom (GPAO_ID) | LIGNE_PROD_01 |
| Protocole | HTTP |
| Polling Cycle | 10 (secondes) |
| Server | 192.168.1.50:8080 |
| DataSource | /api/mesures |
Configuration des Tags
| TagName | TagAddress | Unité | Formula | Actif |
|---|---|---|---|---|
| Temperature | FOUR01.Temperature | °C | Oui | |
| Pression | FOUR01.Pression | bar | Oui | |
| Vitesse | CONV01.Vitesse | m/min | Oui | |
| EtatMachine | CONV01.EtatMachine | Oui | ||
| TempCorrigee | (vide) | °C | TAG:Temperature;VAL:2;ADD | Oui |
Requêtes HTTP générées
Le driver extrait les EquipmentIDs distincts (FOUR01, CONV01) et effectue 2 appels :
GET http://192.168.1.50:8080/api/mesures?m=FOUR01 GET http://192.168.1.50:8080/api/mesures?m=CONV01
Réponse attendue pour ?m=FOUR01
[
{
"TagAddress": "FOUR01.Temperature",
"Value": 185.2,
"Quality": "GOOD"
},
{
"TagAddress": "FOUR01.Pression",
"Value": 3.5,
"Quality": "GOOD"
}
]
Réponse attendue pour ?m=CONV01
[
{
"TagAddress": "CONV01.Vitesse",
"Value": 12.8,
"Quality": "GOOD"
},
{
"TagAddress": "CONV01.EtatMachine",
"StringValue": "EN_MARCHE",
"Quality": "GOOD"
}
]
(:note:) Le tag TempCorrigee n'a pas de TagAddress : il n'est pas lu par le driver HTTP mais calculé via sa formule RPN (TAG:Temperature;VAL:2;ADD = Temperature + 2).
Réponse avec mauvaise qualité
[
{
"TagAddress": "FOUR01.Temperature",
"Value": 0,
"Quality": "BAD"
}
]
Quand Quality n'est pas "GOOD", le tag est marqué comme ayant une mauvaise qualité dans QuBES (Good = False).
Comportement et cas limites
| Situation | Comportement du driver |
|---|---|
| Tag désactivé ou sans adresse | Ignoré, pas de requête générée |
| Réponse HTTP non-200 | Aucun tag mis à jour pour cet équipement |
TagAddress retourné mais absent de la config | Ignoré silencieusement |
StringValue et Value tous deux présents | StringValue est prioritaire |
Quality absent | Mauvaise qualité (Good = False) |
TagAddress sans . | L'EquipmentID est vide, le tag est ignoré |
Référence au code source
- Implémentation du driver :
DAS.Drivers.pas - Classes de base :
DAS.Kernel.pas(TDASTagValue, TDASTag, TDASDriver) - Exemple d'implémentation serveur (émulateur OEE) :
Machine.Emulator.pas