TDASDriverHTTP

TDASDriverHTTP = class (TDASTagIPBaseDriver)Interface de TDASDriverHTTPExemples 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 :

  1. À chaque cycle de polling (configurable en secondes), le driver interroge l'endpoint HTTP
  2. Il regroupe les tags par identifiant d'équipement et effectue un appel GET par équipement
  3. 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ètreObligatoireDescription
ServerOuiAdresse du serveur HTTP (IP ou hostname, avec port). Ex: 192.168.1.50:8080
DataSourceOuiChemin 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

ChampTypeObligatoireDescription
TagAddressStringOuiAdresse complète du tag (ex: FOUR01.Temperature). Doit correspondre exactement au TagAddress configuré dans le DataSet.
StringValueStringNonValeur sous forme de chaîne. Prioritaire sur Value si les deux sont présents.
ValueNumber ou StringNonValeur numérique ou textuelle. Utilisé uniquement si StringValue n'est pas défini.
QualityStringNonQualité 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 StringValue est présent et défini : c'est lui qui est utilisé
  • Sinon : Value est 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 HTTP
  • TagName : 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 (TagAddress vide) ne génèrent pas de requête

Exemple de paramétrage complet

Configuration du DataSet

ChampValeur
Nom (GPAO_ID)LIGNE_PROD_01
ProtocoleHTTP
Polling Cycle10 (secondes)
Server192.168.1.50:8080
DataSource/api/mesures

Configuration des Tags

TagNameTagAddressUnitéFormulaActif
TemperatureFOUR01.Temperature°C Oui
PressionFOUR01.Pressionbar Oui
VitesseCONV01.Vitessem/min Oui
EtatMachineCONV01.EtatMachine  Oui
TempCorrigee(vide)°CTAG:Temperature;VAL:2;ADDOui

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

SituationComportement du driver
Tag désactivé ou sans adresseIgnoré, pas de requête générée
Réponse HTTP non-200Aucun tag mis à jour pour cet équipement
TagAddress retourné mais absent de la configIgnoré silencieusement
StringValue et Value tous deux présentsStringValue est prioritaire
Quality absentMauvaise 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

Classification

Qubes Expert Qubes Expert DAS DAS.Drivers TDASDriverHTTP