Afficher / Masquer la table des matières

    Solution Pont-Bascule

    Architecture

    Le Pont-Bascule

    Pont-Bascule

    Le Pont-Bascule est une Sonde qui retourne 2 valeurs

    • Un Poids mesuré
    • Un Dispositif de Stockage des Données (DSD)

    API entrante

    ◇ : RS-232 / Port "Série" / Port "COM"

    La plupart du temps, le Pont-Bascule permettra le requêtage direct en envoyant une trame d'octets sur le Port COM du PC hôte et en récupérant sur ce même Port une trame réponse contenant les informations. Le paramétrage devra alors comporter toutes les caractéristiques de la connexion Série (vitesse, parité, …)

    ○ : TCP/IP / LeadUp

    Dans une architecture réseau, la connexion Série peut être remplacée par une connection TCP/IP directe. L'envoi et la réception de trames est alors identique à la connexion RS-232, mais le paramétrage se limite alors à un Socket (IP et Port).

    ▷ : Autres interfaces

    D'autres modes de connexions peuvent parfois être proposés. Quelques exemples :

    • L'interrogation d'un FTP local à l'appareil ;
    • un Web Service ;
    • etc.

    La couche intermédiaire (Middlewares)

    Middlewares

    La couche intermédiaire a plusieurs rôles

    • Normaliser les APIs des différents Ponts ;
    • les rendre accessibles sur le réseau de l'entreprise ;
    • absorber la complexité de l'infrastructure réseau ;
    • proposer une API au format Web Service REST.

    API prises en charge

    • ◇ : RS-232 / Port "Série" / Port "COM"
    • ○ : TCP/IP / LeadUp

    Les autres interfaces (▷) peuvent être ajoutées dans la solution au cas par cas.

    API entrante

    ⬡ : Droid/Probe/WeighStation

    Il s'agit d'un Web Service REST fournissant la liste des Pont-Bascules connectés au Middleware au format JSON.

    ⬡ : Droid/Probe/WeighStation/<WeighBridge>

    Il s'agit d'un Web Service REST fournissant la réponse du Pont-Bascule <WeighBridge> à une requête de pesée au format JSON.

    Le Client

    Client

    N'importe quelle Application capable de faire une requête HTTP GET au Web Service du Middleware pourra servir de Client à la Solution.

    Les Logiciels de la couche intermédiaire

    Le cœur de la solution est le logiciel Fleet/Droid qui peut s'interfacer avec les différents Pont-Bascules en utilisant les API supportées. C'est également le Fleet/Droid qui met à disposition le Web Service Droid/Probe/WeighStation.

    Il s'agit d'une application .NET 6.0 qui se lance en espace Utilisateur et écoute sur un port paramétrable les requêtes Web Services entrantes. Il n'y a pas de limite au nombre de Pont-Bascules qu'un Fleet/Droid peut adresser, tant qu'ils sont tous visibles depuis la Session de l'Utilisateur.

    Architecture Droid

    Si l'infrastructure réseau empêche un accès direct par le Client au Fleet/Droid, il est possible d'ajouter un Fleet/GroundControl qui mettra à disposition du Client le même Web Service Droid/Probe/WeighStation mais permet l'utilisation en mode Proxy, la gestion des IP Dynamiques et la possibilité pour le client d'utiliser une URL unique pour toutes ses requêtes peu importe le nombre de Fleet/Droids ou de Pont-Bascules dans l'infrastructure.

    Architecture GroundControl

    La particularité de ce type de déploiement est que le Fleet/GroundControl, se faisant passer pour un Fleet/Droid il permet d'avoir plusieurs niveaux de profondeur.

    Architecture Full

    L'image ci-dessus combine tous les scénarios possibles d'infrastructure dans une Solution Pont-Bascule avec les contraintes vues précédemment

    • Le Client peut appeler indifféremment un Fleet/Droid ou un Fleet/GroundControl via la même requête ;
    • le Fleet/GroundControl ne peut dialoguer qu'avec des Fleet/Droids, il ne peut pas s'interfacer directement avec un Pont-Bascule ;
    • Le Fleet/Droid ne peut pas communiquer avec un autre Fleet/Droid ;
    • Un même Fleet/Droid pour gérer plusieurs Pont-Bascules, peu importe leur API.

    Installation

    .NET

    Le Fleet/Droid nécessite le .NET en version 6 Le Fleet/GroundControl nécessite le .NET en version 7.

    .NET Downloads

    • À installer :
      • .NET Windows Runtime
      • ASP.NET Core Runtime

    Fleet/Droid

    Le Droid.exe est à copier sur la machine hôte à l'emplacement souhaité. L'emplacement recommandé est le suivant :

    C:\Program Files\Fleet\Droid\Droid.exe
    

    Démarrage silencieux

    S'agissant d'une Application Windows qui se lance en espace Utilisateur, il est préférable de masquer la fenêtre d'exécution pour éviter qu'elle soit accidentellement fermée.

    $path = 'C:\Program Files\Fleet\Droid\Droid.exe'
    $instance = 'Ligonnes'
    Start-Process -FilePath $path -WindowStyle Hidden -ArgumentList 'instance',$instance
    

    Fleet/GroundControl

    Le GroundControl.exe est à copier sur le serveur à l'emplacement souhaité. L'emplacement recommandé est le suivant :

    C:\Program Files\Fleet\GroundControl\GroundControl.exe
    

    Service Windows

    Pour installer le Service Windows, exécuter la commande suivante en Administrateur : Cette étape est à répéter pour chaque instance

    GroundControl.exe -install -instance <nom de l'instance>
    

    Paramétrage général

    Fleet/Droid

    Modules

    Les Modules sous forme de DLL sont à déposer à l'emplacement suivant :

    C:\ProgramData\Fleet\Droid\Modules\
    

    Droid.fleet

    Le paramétrage du Fleet/Droid est obtenu en assemblant les 4 fichiers suivants :

    1. <chemin de l'exe>\Droid.fleet
    2. C:\ProgramData\Fleet\Droid\Droid.fleet
    3. <chemin de l'exe>\Droid.<instance>.fleet
    4. C:\ProgramData\Fleet\Droid\<instance>\Droid.fleet

    Les fichiers sont lus dans l'ordre (si existants) et toute valeur présente dans l'un d'entre eux écrasera la valeur précédemment lue. Le format du fichier est le suivant :

    {
     "Quantum": { "Server": "<adresse quantum>", "Port": 11337 }, // Facultatif
     "Port": 8888, // Facultatif. Défaut 11337
    
     "<Module>" : {
      ...
     }
     ...
    }
    
    Paramètre Défaut Note
    Quantum ∅ Adresse du Fleet/GroundControl Proxy dans une infrastructure complexe
    Port 11337 SI aucun port n'est spécifié, le Fleet/Droid prendra le premier port libre suivant
    <Module> { } Objet de configuration spécifique à chaque module chargé

    Fleet/GroundControl

    Modules

    Les Modules sous forme de DLL sont à déposer à l'emplacement suivant :

    C:\ProgramData\Fleet\GroundControl\<instance>\Modules\
    

    GroundControl.fleet

    Le paramétrage du Fleet/Droid est obtenu en assemblant les 4 fichiers suivants :

    1. <chemin de l'exe>\GroundControl.fleet
    2. C:\ProgramData\Fleet\GroundControl\GroundControl.fleet
    3. <chemin de l'exe>\GroundControl.<instance>.fleet
    4. C:\ProgramData\Fleet\GroundControl\<instance>\GroundControl.fleet

    Les fichiers sont lus dans l'ordre (si existants) et toute valeur présente dans l'un d'entre eux écrasera la valeur précédemment lue. Le format du fichier est le suivant :

    {
     "Quantum": { "Server": "<adresse quantum>", "Port": 11337 }, // Facultatif
     "Port": 11337, // Facultatif. Défaut 11337
    
     "<Module>" : {
      ...
     }
     ...
    }
    
    Paramètre Défaut Note
    Quantum ∅ Adresse du Fleet/GroundControl Proxy dans une infrastructure complexe
    Port 11337 SI aucun port n'est spécifié, le Fleet/Droid prendra le premier port libre suivant
    <Module> { } Objet de configuration spécifique à chaque module chargé

    Paramétrage d'un Pont-Bascule

    Fleet/Droid/WeighStation

    Le module Fleet/Droid chargé de s'interfacer avec les Pont-Bacules est le module WeighStation. Le format est le suivant :

    "WeighStation": {
     "WeighBridges" : [
      ...
     ]
    }
    
    Paramètre Défaut Note
    WeighBridges [ ] Liste d'Objets WeighBridge de paramétrage de Pont-Bascules

    Fleet/Droid/WeighStation/WeighBridge

    Chaque WeighBridge comporte un Nom et un Modèle. Les paramètres supplémentaires dépendent du Modèle d'API paramétré.

    DemoWeighBridge

    Un WeighBridge de démo permettant de tester l'API Web Service sans avoir besoin d'un véritable Pont-Bascule. Le DemoWeighBridge retournera alternativement un Poids élevé suivi d'un Poids faible. Le DSD s'incrémentera à chaque appel.

    {
     "Name": "Ligonnes",
     "Model": "DemoWeighBridge"
    }
    
    Paramètre Défaut Note
    Name ∅ Nom du Pont-Bascule dans l'API
    Model DemoWeighBridge

    SerialWeighBridge

    Un WeighBridge utilisant l'API RS-232 / Port "Série" / Port "COM". Le paramétrage se fait en 2 temps :

    • Configuration du Port COM ;
    • configuration des trames.
    {
     "Name": "Dupond",
     "Model": "SerialWeighBridge",
    
     "PortName": "COM1",
     "BaudRate": 1200,
     "Parity": "None",
     "DataBits": 8,
     "StopBits": "One",
     "Timeout": 3000,
     "Delay": 1000,
    
     "Ask": [ "#01#0901#1099M54#0D#0A" ],
     "Data": [ "#01#0901#0204*#0201*#0203<weight,6>*#0299<dsd,5>*" ]
    }
    
    Paramètre Défaut Note
    Name ∅ Nom du Pont-Bascule dans l'API
    Model SerialWeighBridge
    PortName "" Port COM sur lequel le Pont-Bascule est branché
    BaudRate 0 Configuration de la connexion Série
    Parity ∅ Configuration de la connexion Série
    DataBits 0 Configuration de la connexion Série
    StopBits None Configuration de la connexion Série
    NewLine "" Configuration de la connexion Série
    Timeout 0 Configuration de la connexion Série (Read + Write)
    Delay 0 Délai d'attente entre l'envoi (Write) et la réception (Read) sur le Port Série
    Ask [] Ensemble des trames à envoyer pour faire une requête au Pont-Bascule (voir [[#Trames Ask / Data]] ci-après)
    Data [] Réponse attendue pour chacune des requêtes du paramètre Ask (voir [[#Trames Ask / Data]] ci-après)

    TCPWeighBridge

    Un WeighBridge utilisant l'API TCP/IP. Le paramétrage se fait en 2 temps :

    • Configuration du Socket ;
    • configuration des trames.
    {
     "Name": "Dupont",
     "Model": "TCPWeighBridge",
    
     "Address": "192.168.13.37",
     "Port": 4567,
    
     "Ask": [ "#01#0901#1099M54#0D#0A" ],
     "Data": [ "#01#0901#0204*#0201*#0203<weight,6>*#0299<dsd,5>*" ]
    }
    
    Paramètre Défaut Note
    Name ∅ Nom du Pont-Bascule dans l'API
    Model TCPWeighBridge
    Address 127.0.0.1 Configuration de la connexion TCP/IP
    Port 0 Configuration de la connexion TCP/IP
    Ask [] Ensemble des trames à envoyer pour faire une requête au Pont-Bascule (voir [[#Trames Ask / Data]] ci-après)
    Data [] Réponse attendue pour chacune des requêtes du paramètre Ask (voir [[#Trames Ask / Data]] ci-après)

    LeadUpWeighBridge

    Un WeighBridge utilisant l'API TCP/IP compatible avec l'application LP Indicator de la société LeadUp.

    {
     "Name": "Pidou",
     "Model": "LeadUpWeighBridge",
    
     "Address": "192.168.13.37",
     "Port": 4567,
    }
    
    Paramètre Défaut Note
    Name ∅ Nom du Pont-Bascule dans l'API
    Model TCPWeighBridge
    Address 127.0.0.1 Configuration de la connexion TCP/IP
    Port 0 Configuration de la connexion TCP/IP
    Ask [ "<POIDS_DSD>" ] Requête LeadUp (valeur fixe)
    Data [ "#3C/POIDS_DSD~<weight>~<dsd>#3E*" ] Réponse LeadUp (valeur fixe)

    Trames Ask / Data

    Une Requête à un Pont-Bascule en utilisant les Trames (Port Série ou TCP/IP) se paramètre comme un échange séquentiel. Le Fleet/Droid envoie la première Trame du tableau Ask, attends la réponse et en extrait des valeurs le cas échéant, puis recommence jusqu'â épuisement des Trames du tableau Ask.

    Les Réponses à chaque Requête Ask sont décodées en utilisant le paramétrage du tableau Data.

    Trame Ask

    La Trame Ask ne peut contenir que des caractères ASCII (CodePoint < 128). Les caractères non graphiques peuvent être écrits en utilisant la syntaxe #xx avec xx représentant un nombre à 2 chiffres hexadécimal.

    Élément Note
    a-z, A-Z, 0-9 Lettres, chiffres
    `,!,",$,%,&,',(,),*,+,,,<br>-,.,/,:,;,<,=,>,?,@,[,`,
    ], ^, _, ` , {, \|, }, ~
    Caractères graphiques (sauf #)
    #xx (xx = nombre hexadécimal) Caractère ASCII xx
    #23 Caractère #

    Par exemple, CRLF (Carriage Return + Line Feed) s'écrit #0D#0A

    La Trame "#01#0901#1099M54#0D#0A" se décode de la manière suivante :

    Valeur Caractères
    #01 Start of Heading (SOH)
    #09 Horizontal Tab (HT)
    0 Le chiffre 0
    1 Le chiffre 1
    #10 Data Link Escape (DLE)
    9 Le chiffre 9
    9 Le chiffre 9
    M La lettre M
    5 Le chiffre 5
    4 Le chiffre 4
    #0D Carriage Return (CR)
    #0A Line Feed (LF)

    American Standard Code for Information Interchange — Wikipédia

    Trame Data

    La reconnaissance des données dans une Trame Data se fait de gauche à droite, à la manière d'une Expression Régulière simplifiée. Les différents éléments qui la composent sont les suivants :

    Élément Note
    <weight> Poids retourné par le Pont-Bascule
    <weight,x> (x = nombre) Poids retourné sur x caractères (Peut inclure un séparateur décimal)
    <dsd> DSD retourné par le Pont-Bascule (Chaîne ASCII)
    <dsd,x> (x = nombre) DSD retourné par le Pont-Bascule (Chaîne ASCII) sur x caractères
    _ N'importe quel caractère (un seul)
    * N'importe quels caractères (jusqu'à l'Élément suivant ou la fin. Peut être de longueur 0)
    `,!,",$,%,&,',(,),+,,,-<br>.,/,:,;,=,?,@,[,`, ] ^, ` ,
    {, \|, }, ~
    Caractères graphiques (sauf #, _, *, <, >)
    #xx (xx = nombre hexadécimal) Caractère ASCII xx
    #23 Caractère #
    #5F Caractère _
    #2A Caractère *
    #3C Caractère <
    #3E Caractère >

    Exemples :

    Trame Data "#01#0901#0204*#0201*#0203<weight,6>*#0299<dsd,5>*"

    Valeur Caractères
    #01 Start of Heading (SOH)
    #09 Horizontal Tab (HT)
    0 Le chiffre 0
    1 Le chiffre 1
    #02 Start of Text (STX)
    0 Le chiffre 0
    4 Le chiffre 4
    * N'importe quels caractères (Jusqu'à #02)
    #02 Start of Text (STX)
    0 Le chiffre 0
    1 Le chiffre 1
    * N'importe quels caractères (Jusqu'à #02)
    #02 Start of Text (STX)
    0 Le chiffre 0
    3 Le chiffre 3
    <weight,6> Le Poids sur 6 caractères
    #02 Start of Text (STX)
    9 Le chiffre 9
    9 Le chiffre 9
    <dsd,5> Le DSD sur 5 caractères
    * N'importe quels caractères (Jusqu'à la fin)

    Trame Data "#3C/POIDS_DSD~<weight>~<dsd>#3E*"

    Valeur Caractères
    #3C Caractère <
    / Caractère /
    POIDS_DSD Chaîne POIDS_DSD
    ~ Caractère ~
    <weight> Le Poids (jusqu'à ~)
    ~ Caractère ~
    <dsd> Le DSD (jusqu'à #3E)
    #3E Caractère >
    Haut de page Tous droits réservés - 2020 par - Mentions légales - Licence agreement