WebSampling 1.3.X

De wiki
Version du 1 juin 2014 à 14:23 par Admin (discuter | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

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

Prérequis

Avant de commencer il est indispensable de lire la documentation disponible de la carte SB68EC sur le site de Modtronix.

Après avoir lu la documentation, il est aussi conseillé de s'entrainer à utiliser le serveur web intégré et à recharger le logiciel fourni par modtronix à l'aide de l'application netloader.

Téléchargement

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

Description rapide de l'implémentation

Les différences par rapport à la version 1.2 sont la correction de quelques warning de compilation, et l'utilisation de l'IDE MPLAB X.

La version 1.3 est toujours conçue à partir du logiciel Modtronix SBC68EC Webserver V3.06. Pour remplir 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 de 2 compteurs différents
  • Ajout d'un client SNTP permettant d'aquérir l'heure GMT, mais aussi d'ajuster le diviseur de la base de temps interne afin d'annuler la dérive de celle-ci
  • Mise en place d'un client HTTP emettant des requêtes contenant ces trames de téléinformation ainsi que les valeurs de ports analogiques
  • Ajout d'un module BDPV qui permet d'uplmoader vers le site www.bdpv.fr les chiffres de production d'une installation photovoltaique
  • 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 contiennent les définitions et le code nécessaire pour la réception des trames de téléinformation.

Fonction WebSampling

Cette fonction gère chaque minute 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

Elle a été modifié depuis la version 1.1 pour permettre de commander chaque led séparément.

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 port TCP 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 derniè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/tcp.c : correction des fonctions TCPGetArrayChr et TCPGetArray dans lesquelles le compteur d'octets restant à lire n'est pas mis à jour.
  • 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. Ajout des fonctions initHttpClient et initHttpClientIpEeprom pour initialiser la connection, getHttpResponseLine pour récupérer une ligne de la réponse, skipHttpHeaders pour sauter les en têtes de la réponse et le corps de cette dernière.

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.

Client SNTP

Pour implémenter le client SNTP, les fichiers suivants ont été modifiés :

  • appcfg.h : Mise à jour du mapping EEPROM pour sauvegarder le host name du serveur sntp.
  • appcfg.c : ajout des valeurs par défaut pour les paramêtres EEPROM ci-dessus.
  • net/tick.h et net/tick.c : ces deux fichiers sont modifiés pour :
    • ajouter un compteur tickSec32 qui compte le nombre de secondes depuis le lancement du logiciel sur 32 bits.
    • offrir la possibilité d'ajuster la valeur rechargée tous les 10 ms dans le timer0 afin d'augmenter la précision de ces 10 ms.
    • corriger un bug potentiel lié à la modification des variables tickCounter et tickSec32 dans une interruption : si cela intervient pendant l'utilisation de ces variables dans l'application, cela peut donner des résultats incohérents.
  • sntp/sntp.h et sntp/sntp.c : ces deux fichiers contiennent :
    • une fonction, activée toutes les heures qui permet d'obtenir l'heure GMT d'un serveur sntp
    • une fonction qui permet de calculer la dérive de l'horloge interne entre deux acquisitions sntp et de modifier la valeur utilisée pour recharger le timer0 (voir net/tick.c)

Module Hashes

Ce module défini par les fichiers net/hashes.c et net/hashes.h permet de calculer des sommes de contrôles MD5 et SHA

Module BDPV

Ce module est décrit dans les fichiers :

  • proto_board/bdpv.h
  • proto_board/bdpv.c

Il permet d'envoyer quotidiennement (chaque nuit, entre 0h et 2h GMT) vers le site BDPV

Module Pulse Counter

Ce module est décrit dans les fichiers :

  • proto_board/pulseCounter.h
  • proto_board/pulseCounter.c

Il permet de compter des impulsions présentes sur l'entrée A5

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 des fonctions sntp, websampling et BDPV

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 (commande lh), path de l'URL (commande lr).
    • serveur sntp source : host name (commande ls)
  • httpexec.h : définition des tags de lecture de des paramêtres du :
    • serveur http cible :host name (l22) ,path de l'URL (l23).
    • serveur sntp source : host name (l24)
  • ainsi que des variables contenant :
    • le nombre de secondes écoulées depuis le dernier reset (R00)
    • l'heure (timestamp UNIX) (R01)
    • la dernière trame téléinfo reçue sur l'entrée 1 (R02)
    • la dernière trame téléinfo reçue sur l'entrée 2 (R03)


  • httpexec.c :implémentation des fonctions de lecture des paramètres et variables définies ci-dessus.

Compilation

L'application est compilée à l'aide de l'environnement de développement MPLAB X 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 webs.xml et webs.htm pour définir les IHM de saisie des paramètres WebSampling.
  • les fichiers sntp.xml et sntp.htm pour définir l'IHM liée au client sntp.
  • les fichiers bdpv.xml et bdpv.htm pour définir l'IHM liée au client sntp.
  • 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,etc..)

Note : les pages webs.htm, bdpv.htm et sntp.htm utilisent la technologie AJAX.

Définition des requêtse 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.
  • le fichier bdpvreq.cgi a été ajouté. Il contient la trame de la requête http émise chaque jour vers le service bdpv. Elle est parsée comme les pages cgi standard, les tags étant remplacés par leurs valeurs adéquates.

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.