Collegamento seriale

di il
10 risposte

Collegamento seriale

Ciao a tutti.
Sono un medico e per un lavoro di ricerca devo scrivere codice matlab. In particolare devo leggere dati da una seriale di un respiratore. Il respiratore in questione inizia a inviare quando riceve un comando, il tutto in esadecimale. Per provare ho scritto questo script in matlab per ricevere un semplice "900PCI" quando gli invio la sequenza "HO<CR>" (tutto in Hex). Ovviamente in matlab non succede nulla e io non capisco cosa sbaglio o non mi pongo le domande giuste... Premetto che ho provato la stessa cosa con un "banale" software di collegamento seriale free scaricato e tutto funziona. Vi allego il codice che ho scritto...
Grazie a chiunque voglia aiutarmi.
Seriale = serial('/dev/tty.PL2303-0000101D'); 
set(Seriale,'BaudRate', 9600, 'DataBits', 8, 'Parity', 'even','StopBits', 1, 'FlowControl', 'none');
fopen(Seriale); %--apro seriale
fprintf(Seriale,'48 4F 04'  ); %--invio
a=fscanf(Seriale);  %--ricevo
fclose(Seriale) %--chiudo seriale

10 Risposte

  • Re: Collegamento seriale

    Dà qualche errore o non fa proprio niente?
  • Re: Collegamento seriale

    Ciao,
    innanzi tutto grazie per l'attenzione...
    MATLAB mi da solo l'errore di "Time-out". Se ti servono maggiori dettagli collego il PC al ventilatore (sono in ospedale) e ti invio i dettagli di quell'errore.
    Mah... non so proprio cosa fare... Prima di chiedere a voi sono settimane che mi documento in rete, sul sito della MathWork, su tutti i siti possibili, senza venirne a capo.
    Ah... scusa sicuramente l'avrai già capito uso un apple con adattatore seriale usb.
  • Re: Collegamento seriale

    Prova a mandarmi i dettagli dell'errore... non conosco il problema specifico ma magari può venirmi in mente qualcosa...
  • Re: Collegamento seriale

    Eseguo lo script con run(<script>) dopo circa 8-10 secondi matlab genera la variabile "a" vuota, la matrice "Seriale" con le caratteristiche della connessione e un messaggio sul Command Window: "Warning: A timeout occurred before the Terminator was reached". La variabile a di tipo char.
    Spero ti sia utile....
  • Re: Collegamento seriale

    Il terminator dovrebbe essere il carattere che identifica il carattere che conclude il messaggio.
    Vedo che non lo specifichi tra i parametri del set, forse sta cercando qualcosa che non esiste e quindi va in timeout (faccio supposizioni...).
    Dovresti provare a settare il terminator.
    Non so se hai già dato un'occhiata qui http://www.mathworks.com/matlabcentral/newsreader/view_thread/153993, hanno il tuo stesso problema e mi sembra che lo abbiano risolto. Nel post n° 9, nelle ultime righe c'è la soluzione dove consiglia di settare il terminator e di inserire un'ulteriore istruzione prima di definire l'oggetto relativo alla porta seriale.
    Fammi sapere...
  • Re: Collegamento seriale

    EUREKA!!!! Evviva!! Evviva!!!...
    Avrai già capito che il collegamento funziona e il respiratore finalmente "parla" con me...
    Davvero complimenti per l'intuizione potevo starci su mesi e non ne sarei mai venuto a capo.
    Adesso via a scaricare dati ed elaborarli. Per altro ho scoperto che matlab converte addirittura i caratteri in Ascii prima di inviarli, spettacolo!!!
    Beh grazie davvero e consulenze mediche gratuite a vita.. (anche se spero tu non ne abbia mai bisogno, faccio il rianimatore.....).
    Ti allego lo script matlab funzionante... se ti serve.
    Grazie.
    Seriale = serial('/dev/tty.PL2303-0000201A'); 
    set(Seriale,'BaudRate', 9600, 'DataBits', 8, 'Parity', 'even','StopBits', 1, 'FlowControl', 'none');
    Seriale.Terminator='EOT'; %-- carattere terminatore
    fopen(Seriale); %--apro seriale
    fprintf(Seriale,'HO'  ); %--invio
    pause (.1);%--- attesa prima di leggere la risposta... non so bene se serve...
    a=fscanf(Seriale);  %--ricevo
    fclose(Seriale) %--chiudo seriale
  • Re: Collegamento seriale

    Bene! mi fa proprio piacere che funzioni...
    Infatti mi sembra curioso il fatto che un medico possa avere a che fare con matlab... cosa ti ha spinto?
    Grazie per aver condiviso il codice.
  • Re: Collegamento seriale

    Abito vicino a Milano, in effetti è un po' raro trovare medici che capiscano qualche cosa di matematica e ancora meno che usino matlab. Qualcuno c'è comunque e devo dire fanno ottimi lavori. I rianimatori per altro hanno a che fare molto con la tecnologia (una rianimazione è strapiena di "macchine"), questo non vuol dire che tutti abbiano voglia di andare un po' più
    in la della routine per lanciarsi in qualcosa di nuovo...
    Dalla mia ho anche una precedente laurea in chimica con un bellissimo esame: calcolo numerico!!!
    Per farlo ho dovuto imparare il mitico fortran (orrendo) e matlab (purtroppo livello base...). Inoltre ho una sfrenata passione per la matematica, soprattutto i modelli matematici della realtà e l'informatica.
    Metti tutto insieme ed ecco....
    E tu?? Usi matlab per lavoro immagino. Un po' ti invidio... Che lavoro fai?
    Finisco dicendo che quasi sicuramente ci risentiremo perchè quello di oggi è solo uno dei tanti problemi che incontrerò se questo lavoro andrà avanti...
    Quindi aspettati altre mie domande.
    a presto

    P.S. Condividere codice mi sembra doveroso... spero possa servire a qualcuno...
  • Re: Collegamento seriale

    Bene, complimenti.
    Se dovessi avere bisogno di aiuto per il codice scrivi pure qui sul forum.
    Per il resto ti ho risposto in pvt.
  • Re: Collegamento seriale

    Buonasera,
    ho utilizzato il codice che avete fornito sopra.
    Io ho collegato alla porta seriale (in realtà sono collegato alla USB, perchè la seriale vera e propria sul mio PC non c'è) un trasmettitore di peso.
    Tutto bene fin qua, però io ho un valore "instabile" nel senso che a volte leggo sulla variabile "a" il peso giusto per esempio 002354, ma se continuo a fare <run> con MATLAB ed a visualizzare più volte il risultato mi vengono fuori dei caratteri strani, cosa può essere? Vedere allegato
    La versione che uso di MATLAB è la 2006b.

    Vi ringrazio.
Devi accedere o registrarti per scrivere nel forum
10 risposte