Professional Documents
Culture Documents
Prsentation
Cette note dapplication a pour but de prsenter une manire simple et efficace de raliser lacquisition sur PC de donnes sries binaires pour permettre un traitement ultrieur. Loutil choisi est Matlab, pour la polyvalence quil permet en aval de lacquisition. Matlab fonctionne partir dun langage interprt dont les bases ne sont pas lobjet de cette note. Un minimum de connaissances dans la syntaxe et la gestion des objets graphiques (figures, axes ) est recommand pour une bonne comprhension. Lintrt de lutilisation dun GUI pour lacquisition de donnes srie est de pouvoir paramtrer de faon simple la connexion et de pouvoir sauvegarder facilement le rsultat.
Page 1 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
Page 2 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
Code 1 : GUI contenu dans acquisition_serie_donnees.m ....... 7 Code 2 : Callback - Ouvrir port..................................................... 10 Code 3 : Callback Fermer port .................................................... 11 Code 4 : Callback Lancer acquisition.......................................... 11 Code 5 : Callback Stopper acquisition ........................................ 12 Code 6 : Callback Sauvegarde des donnes................................. 12
Figure 1 : Visualisation de l'interface .............................................. 5 Figure 2 : Proprits de lobjet serial (sous Windows) .............. 8 Figure 3 : Perte de donnes par non vidage du buffer .................... 9
Tableau 1 : Format d'une trame RS232........................................... 4 Tableau 2 : Exemples de constructeurs des objets sriels ............... 7
Page 3 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
Nous traiterons dans le cadre de cette note des donnes 8 bits sans vrification de parit, et avec un bit de stop. Ceci permet de transmettre la majorit des donnes binaires : par exemple, la rception dune donne 8, 16, 32 bits peut se faire respectivement par la rception dune, de deux, ou de quatre trames 8 bits. La liaison srie sur PC, et principalement son connecteur associ (DB9) tend disparatre des nouvelles machines. De nombreux adaptateurs srie USB permettent dmuler des ports sries et donc de contourner le problme de connectique. Tous les systmes dexploitation courants sont capables de grer ce type de priphriques, mais il faut noter que la plupart ne proposent que des drivers Windows.
1.2
2.1
Fonctionnalits
Ouverture, fermeture dun port srie Configuration des paramtres de bases de la liaison (vitesse, port) Lancement, et arrt de lacquisition Mise en forme des donnes (totalement dpendant de lapplication)
Page 4 sur 14
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab Sauvegarde des donnes produites.
2.2
Structure
Page 5 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
%------------------------------------------------------------%Bouton : Mise en forme des donnes handle(4) = uicontrol('pos',[250,50,140,30],... 'style','pushbutton',... 'callback',@cb_mise_forme_donnees,... 'String','Mise en forme donnes'); %Bouton : Sauver donnees handle(5) = uicontrol('pos',[250,10,140,30],... 'style','pushbutton',... 'callback',@cb_sauv_donnees,... 'String','Sauver donnes'); %------------------------------------------------------------%Zone paramtres liaison srie %------------------------------------------------------------%Bouton : Ouvrir port handle(6) = uicontrol('pos',[30,90,80,30],... 'style','pushbutton',... 'callback',@cb_ouvrir_port,... 'String','Ouvrir port'); %Bouton : Fermer port handle(7) = uicontrol('pos',[135,90,80,30],... 'style','pushbutton',... 'callback',@cb_fermer_port,... 'String','Fermer port'); %Champ de texte : Vitesse du port handle(8) = uicontrol('pos',[28,148,40,30],... 'style','text',... 'string','Vitesse du port',... 'backgroundcolor',[0.7,0.7,0.7]); %Champ parametrable de la vitesse handle(9) = uicontrol('pos',[80,150,80,30],... 'style','edit',... 'string','115200',... 'tag','champ_vitesse'); %Popupmenu choix port serie handle(10) = uicontrol('pos',[80,120,80,30],... 'style','popupmenu',... 'String',{'COM1','COM2','COM3',... 'COM4','COM5','COM6','COM7',... 'COM8','COM9','COM10'},... 'tag','selection_com'); %------------------------------------------------------------%Zone nom de l'acquisition %------------------------------------------------------------%Affichage choix du nom handle(11) = uicontrol('pos',[10,40,180,15],... 'style','text',... 'string','Nom de l''acquisition (.mat)',... 'backgroundcolor',[0.9,0.9,0.9]); %Champ contenant le nom handle(13) = uicontrol('pos',[10,20,225,20],...
Page 6 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
'style','edit',... 'string','acquisitions\acquisition.mat',... 'tag','champ_nom'); %------------------------------------------------------------data=guihandles(gcf); guidata(gcf,data); %------------------------------------------------------------%Fin : Creation du GUI %------------------------------------------------------------Code 1 : GUI contenu dans acquisition_serie_donnees.m
3 Structure serial
Lobjet serial permet laccs aux diffrents ports srie dune machine. Plusieurs possibilits existent pour louverture dun port, suivant le systme dexploitation. Systme dexploitation Linux / Linux 64 Mac OS Solaris 64 Windows 32/64 Constructeur type serial('/dev/ttyS0'); serial('/dev/tty.KeySerial1'); serial('/dev/term/a'); serial('com1);
Lappel de la primitive serial renvoie un identifieur contenant tous les paramtres de la liaison srie. Dans le cas o nous lutilisons : 8 bits pas de parit un bit de stop
et vis vis des valeurs par dfaut des proprits de lobjet serial, il faut configurer au minimum les champs Port, BaudRate, InputBuffer (choix de la tailler du buffer dentre) et Timeout (si la valeur par dfaut de 0.01s ne convient pas lapplication) .
Page 7 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab s = serial('COM1'); set(s) ByteOrder: [ {littleEndian} | bigEndian ] BytesAvailableFcn BytesAvailableFcnCount BytesAvailableFcnMode: [ {terminator} | byte ] ErrorFcn InputBufferSize Name OutputBufferSize OutputEmptyFcn RecordDetail: [ {compact} | verbose ] RecordMode: [ {overwrite} | append | index ] RecordName Tag Timeout TimerFcn TimerPeriod UserData SERIAL specific properties: BaudRate BreakInterruptFcn DataBits DataTerminalReady: [ {on} | off ] FlowControl: [ {none} | hardware | software ] Parity: [ {none} | odd | even | mark | space ] PinStatusFcn Port ReadAsyncMode: [ {continuous} | manual ] RequestToSend: [ {on} | off ] StopBits Terminator
Figure 2 : Proprits de lobjet serial (sous Windows)
4 Prcautions dusage
Ce point est critique dans la rception des donnes. Lacquisition srie sous Matlab, en flux continu et avec un dbit lev (au del de quelques ko.s-1), ne peut pas se faire directement sur un vecteur de taille inconnue au dpart. Laugmentation constante de la taille du vecteur force une srie de rallocations qui ont pour effet de provoquer une perte de donnes chaque fois. La technique la plus simple consiste prallouer un vecteur de taille suffisante au regard du dbit et de la dure dacquisition. Page 8 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
4.1
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
4.2
Ouverture/fermeture de ports
La gestion des ports srie est rigoureuse dans Matlab. Il est important de toujours respecter la squence suivante : 1. 2. 3. 4. 5. ouverture du port lancement de lacquisition arrt de lacquisition mise en forme ou prs traitement si ncessaire fermeture du port
et en particulier, il faut imprativement viter (sous peine de devoir relancer Matlab) : douvrir deux fois le mme port douvrir un port qui nest pas connect de quitter le GUI sans avoir ferm le port
Lors du dmarrage de lacquisition, si le flux est permanent, il faut imprativement vider le buffer dentre, quelle que soit sa taille.
Ouverture du port
La perte de donnes peut tre simple si les donnes nont quune seule signification, elle peut tre plus complexe grer si la rception se fait sous forme de trames : la synchronisation est perdue.
Page 9 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
Lobjet serial s, assimilable un fichier, est dclar en tant que variable globale : en effet, il doit tre accessible par la fonction de fermeture du port, et dacquisition des donnes.
Page 10 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
Page 11 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
Cette fonction na pas dintrt tre prsente ici, tant donn quelle dpend entirement du type de donnes reues. On peut envisager simplement de convertir plusieurs octets en un nombre de dynamique plus grande, ou reconstituer des chaines de caractres De faon gnrale, et en accord avec linterface, cette fonction doit gnrer un vecteur ou un tableau, ou une structure donnees_formatees partir du vecteur out. La sauvegarde des donnes reues peut se faire sous diffrentes formes, ici on cre directement un fichier .mat ouvrable par Matlab. On peut envisager de tester la fin de la chaine de caractres du nom (ici get(data.champ_nom,'string') ) pour rajouter si ncessaire lextension .mat, mais on peut aussi pour simplifier obliger saisir nom de fichier contenant la bonne extension.
%------------------------------------------------------------%Callback : sauvegarde des donnes function cb_sauv_donnees(obj,event) data=guidata(gcbf); global out; global donnees_formatees; %enregistrer sous le nom de champ_nom le vecteur out, et donnes formates save(get(data.champ_nom,'string'),'out','donnees_formatees'); guidata(gcbf,data); Code 6 : Callback Sauvegarde des donnes
Page 12 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
6.1
Page 13 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS
Note dapplication P09AB08 Acquisition de donnes sries binaires via une interface graphique Matlab
Bibliographie
Briot, Jrme. Dveloppement efficace des interfaces graphiques. Devellopez.com. 17 03 2009. . Prsentation des objets graphiques. Developpez.com. 17 03 2009. RS232 Specifications and standard. http://www.lammertbies.nl/comm/info/RS-232_specs.html (accs le 01 24, 2010).
Cette note dapplication a t ralise par Jean Doucement. Pour toute question ou prcision : jean.doucement@polytech.univ-bpclermont.fr ou jean.doucement@gmail.com
Contacts
Page 14 sur 14 Projet odomtrie ferroviaire par fusion de donnes acclromtriques et GPS