WebSampling 1.0.X

De wiki
Aller à : navigation, rechercher

Le but de cet article est de décrire la conception du logiciel WebSampling utilisé pour la Carte d'Acquisition Web.

Téléchargement

L'archive V1.0.1 contenant les sources, les fichiers projets pour l'environnenement MPLAB, les binaires compilés est disponible ici.

Description rapide de l'implémentation

La version 1.0 est conçue à partir du logiciel Modtronix SBC68EC Webserver V3.06. Poremplir les fonction de la Carte d'Acquisition Web, il est nécessaire de lui ajouter les fonctionnalités suivantes :

  • Réception des trames de téléinformation EdF
  • Mise en place d'un client HTTP emettant des requêtes contenant ces trames de téléinformations ainsi que les valeurs de ports analogiques
  • Ajout d'un automate cadençant l'émission de ces requêtes toutes les minutes

Réception des trames de Téléinformation EdF

Pour réaliser cette fonction, il est nécessaire de modifier les fichiers suivants :

  • projdefs.h :
    • passage des tailles de buffer UART Rx/Tx à 32 et 8 octets.
  • appcfg.c :
    • passage du Baudrate par défaut 1200 Bauds.
    • modification du diviseur de l'UART pour 1200 bauds : on diminue la valeur de 1%. Cela revient à paramétrer un baudrate de 1212 bauds. En effet l'UART du PIC s'attend à avoir un bit de stop entier à la fin de chaque octet. Or la sortie téléfinformation EdF n'envoie qu'un seul bit de stop. Ce qui fait que l'UART du PIC rate parfois le front start de l'octet suivant et donc l'octet en entier. Pour remédier à ce problème on augmente la cadence de l'UART du PIC de 1%, cela permet d'être sur que l'échantillonnage du bit de stop est terminée lorsque le front start de l'octet suivant arrive. Cela n'a pas d'influence sur le décodage.
  • serint.c :
    • on ne tient plus compte du Frame Error. En effet la réception était arrêtée puis redémarrée dans ce cas, ce qui n'est pas la méthode préconisée dans la datasheet du PIC. Cette modification est optionnelle.
  • teleinfo.h et teleinfo.c :
    • ajout de ces deux fichiers qui contionnent les définitions et le code nécessaire pour la réception des trames de téléinformation.

Fonction WebSampling

Cette fonction gère l'ordonnancement des différentes actions pour obtenir le résultat désiré :

  • résolution dns du domaine.
  • acquisition de la trame téléinformation courante.
  • émission de la requête http.

L'état de la fonction est signalé à l'utilisateur à l'aide des deux rangées de leds de la plaque de prototypage.

Cette fonction est définie et implémentée à l'aide des deux fichiers suivants :

  • proto_board/websampling.h
  • proto_board/websampling.c

Fonction Leds

Cette fonction gère l'allumage et l'extinction des leds de la carte de prototype. Elle est définie et implémentée dans les fichiers suivants :

  • proto_board/led.h
  • proto_board/leds.c

Client HTTP

Pour réaliser cette fonction il est nécessaire de modifier les fichiers suivants :

  • projdefs.h :
    • définition de la macro suivante :
      • define HTTP_SERVICE_PORT : valeur définie en EEPROM du service web distant utilisé par la carte pour uploader les données.
    • définition des constantes suivantes :
      • DEFAULT_HTTP_SERVICE_PORT : valeur par défaut de HTTP_SERVICE_PORT.
      • STACK_CLIENT_MODE : directive de compilation qui permet d'inclure la partie client de la stack IP.
      • STACK_USE_DNS : directive de compilation qui permet d'inclure le client DNS.
  • appcfg.h : Mise à jour du mapping EEPROM pour sauvegarder le host name, son IP et le port utilisé.
  • appcfg.c : ajout des valeurs par défaut pour les paramêtres EEPROM ci-dessus.
  • net/http.c : modification de la fonction sendfile afin que cette derinière puisse être appelée avec pour paramètre un handle de liaison TCP et à la place de l'index de tableau de handle interne au serveur http.
  • net/httpclient.c : copie modifiée de net/tcputils.c afin de pouvoir envoyer des fichiers parsés à l'aide de la fonction sendfile de http.c.

Client DNS

  • net/dns.c:
    • correction de deux bugs :
      • une variable d'état qui doit être statique
      • le port source udp était nul, c'est contraire au protocole IP. La valeur 1234 est maintenant utilisée.

Automate

  • mxwebsrvr.c : ce fichier contient l'automate qui gère le cadencement de toutes les fonctions implémentées dans le logiciel. Les modifications suivantes ont donc été apportées :
    • désactivation de la de configuration par interface série
    • ajout des appels d'initialisation et de traitement de la fonction websampling

Commandes Utilisateur

  • cmd.h : definion des commande de modification du host name et du path de l'URL d'upload.
  • cmd.c : code de traitement pour la modification des paramêtres du serveur http cible :host name, IP, port,path de l'URL.
  • httpexec.h : définition des commande de lecture de des paramêtres du serveur http cible :host name,path de l'URL.
  • httpexec.c :code de lecture de des paramêtres du serveur http cible :host name,path de l'URL.

Compilation

L'application est compilée à l'aide de l'environnement de développement MPLAB de Microchip. Elle est chargée dans la carte à l'aide de l'application Modtronix netloader.

Pages Web

Interface Homme Machine

Les pages webs de la carte SBC68EC sont définies dans le répertoire webpages/default/ de l'archive. Elles ont été modifiées pour les besoins de l'application Websampling. En particulier :

  • les fichiers xncfg.cgi, netcfg01.js pour l'affichage de l'IP du serveur DNS utilisé (IP récupérée à l'aide du protocole DHCP).
  • les fichiers xapcfg.cgi et apcfg.js pour définir les IHM de saisie des paramètres WebSampling.
  • le fichier tiframe.cgi permet d'afficher le contenu de la dernière trame téléinformation reçue.
  • le fichier dispreq.htm permet d'afficher un exemple de requête http envoyée au service web.
  • les fichiers contact.htm, index.htm, intro.htm, syscfg65.htm, xcfg.htm ont reçus des mise à jour diverses (liens,ect..)

Définition de la requête HTTP d'upload des données

  • le fichier httpreq.cgi a été ajouté. Il contient la trame de la requête http émise périodiquement vers le service web. Elle est parsée comme les pages cgi standard, les tags étant remplacés par leurs valeurs adéquates. Une astuce concerne la longueur définie dans l'entête Content-Length. L'entête est requise par les serveurs Apache (et peut être les autres). Comme cette longueur est difficile à calculer sur le PIC (il faudrait mettre le corps de la requête en mémoire), on la remplace par sa valeur max (si la trame de télé information fait 170 caractères). Pour les cas ou le corps de la requête est plus petit que la taille max définie, on le complète par autant de retour chariots que nécessaire (vous pouvez les remarquer dans le fichier httpreq.cgi).

Compilation

L'ensemble de ces "pages web" est "compilé" à l'aide de l'application Modtronix netloader en un fichier default.img. Ce fichier est chargé dans l'EEPROM de la carte SBC68EC toujours à l'aide de l'application netloader.