RS232 e realizzazione di un eseguibile

di il
9 risposte

RS232 e realizzazione di un eseguibile

Ciao a tutti!
avrei due domande da porvi!

1) la funzione "evalin", relativa alla comunicazione con RS232, come funziona? ho cercato in internet ma purtroppo non riesco a capirla del tutto.

2) quando utilizzo matlab compiler, vengono compilate anche le sottofunzioni di matlab che non compaiono nel codice?
Ad esempio:
se io creo uno script che interroga un oggetto esterno tramite RS232, raccoglie i dati letti e in seguito esegue delle operazioni. Tutte le funzioni che matlab richiama, ma che non scrivo direttamente all'interno del codice, vengono automaticamente inserite nell'eseguibile finale?

Grazie a tutti!

9 Risposte

  • Re: RS232 e realizzazione di un eseguibile

    Le mie conoscenze specifiche sono (molto) limitate.

    Ho trovato in Internet qualcosa che, forse, può esserti utile:

    https://thilinasameera.wordpress.com/2013/08/25/serial-port-matlab-getting-started/

    Per quanto riguarda la seconda parte della domanda, vuoi creare un eseguibile stand-alone (un eseguibile che possa essere usata su PC sui quali non sia installato MatLab)?
    In questo caso pupi usare il tool "deploytool"

    Hope this helps.
  • Re: RS232 e realizzazione di un eseguibile

    Ask_raf ti ringrazio pee il link, mi ha confermato che il codice scritto è corretto.

    Il "deploytool" funziona in modo corretto, mi crea l'applicazione che una volta aperta fa partire la GUI.
    Nel momento in cui uso questa GUI però nascono gli errori che non so come risolvere. La connessione con la seriale, che da MatLab funziona correttamente, qui non va più.

    Hai per caso un'idea di come poter fare per interrogare gli errori della GUI?
    L'unica stringa di errore che mi dà è durante la compilazione "Qt: Untested Windows version 6.2 detected", è relativo alsistema operativo? io tilizzo Windows8.

    Grazie in anticipo
  • Re: RS232 e realizzazione di un eseguibile

    ask_raf ha scritto:


    Le mie conoscenze specifiche sono (molto) limitate.

    Ho trovato in Internet qualcosa che, forse, può esserti utile:

    https://thilinasameera.wordpress.com/2013/08/25/serial-port-matlab-getting-started/

    Per quanto riguarda la seconda parte della domanda, vuoi creare un eseguibile stand-alone (un eseguibile che possa essere usata su PC sui quali non sia installato MatLab)?
    In questo caso pupi usare il tool "deploytool"

    Hope this helps.
    Approfitto della tua conoscenza sulle GUI per chiederti se sai come fissare i limiti massimi degli assi nei grafici delle GUI. Cioè nonostante che io vada a rappresentare un cubetto di un cm di lato voglio che venga plottato in un grafico delle dimensioni di un metro cubo. Come posso fare?

    Grazie mille dell'aiuto!
  • Re: RS232 e realizzazione di un eseguibile

    Le funzioni base per il settaggio dei limiti degli assi sono:
    axis([xmin xmax ymin ymax zmin zmax])
    
    xlim([xmin xmax])
    ylim([ymin ymax])
    zlim([zmin zmax])
    
    set(gca,'xlim',[xmin xmax])
    set(gca,'ylim',[ymin ymax])
    set(gca,'zlim',[zmin zmax])
    
    
    Puoi, per esempio, chiamarle direttamente nella callback che genera il grafico.

    Nello script che segue ho inserito una serie di esempi delle diverse modalità con le quali puoi settare i limiti.

    Nello script, "gca" è usato per accedere al sistema di assi correnti (fai riferimento all'help di MatLab), nel tuo caso dovresti usare l'handle corrispondente della GUI.

    Ho inserito dei commenti all'interno dello script che, spero, illustrino le varie modalità.

    Sempre nello script ho inserito due esempi per l'uso delle funzioni
    daspect
    linkaxes
    
    che potrebbero tornarti utili.

    Nel caso i commenti non fossero sufficientemente chiari ... just ask ...
    
    % Creazione di un grafico 3D di esempio
    peaks
    xlabel('Asse x')
    ylabel('Asse y')
    zlabel('Asse Z')
    % Identificazione dei limiti correnti degli assi (gca ==> assi cartesiani
    % correnti, in alternativa, in una GUI si può usare l'handle
    % corrispndente):
    curr_x_lim=get(gca,'xlim')
    curr_y_lim=get(gca,'zlim')
    curr_z_lim=get(gca,'zlim')
    % Settaggio contemporaneo dei limiti dei tre assi, nell'ordine:
    % x_min x_max; y_min y_max; z_min z_max
    new_x_lim=[-6 10]
    new_y_lim=[-10 5]
    new_z_lim=[-10 10]
    axis([new_x_lim new_y_lim new_z_lim])
    % Settaggio dei limiti di uno specifico asse con le funzioni "xlim",
    % "ylim", "zlim"
    xlim(new_x_lim)
    ylim(new_y_lim)
    zlim(new_z_lim)
    % Metodo alternativo, con l'uso della funzione "set"
    set(gca,'xlim',new_x_lim)
    set(gca,'ylim',new_y_lim)
    set(gca,'zlim',new_z_lim)
    % Modifica del solo limite massimo degli assi:
    set(gca,'xlim',[curr_x_lim(1) new_x_lim(2)])
    set(gca,'ylim',[curr_y_lim(1) new_y_lim(2)])
    set(gca,'zlim',[curr_z_lim(1) new_z_lim(2)])
    
    % Chiamata alla funzione daspect per settare la stessa scala per i tre assi
    daspect([1 1 1])
    % Metodo alternatico con la funzione "set"
    set(gca,'dataaspectratio',[1 1 1])
    
    % Modifica contemporanea dei limiti di due sistemi di assi, modificando
    % "solo il primo dei due"
    % Creazione di due sistemi di assi cartesiani e di due grafici di esempio
    figure
    ax_1=subplot(2,1,1)
    plot([1:10],randi(10,1,10))
    grid on
    ax_2=subplot(2,1,2)
    plot([1:10],randi(20,1,10))
    grid on
    % Creaziione del link tra i due assi, le modifiche apportate al primo dei
    % due (specificati come parametri) vengono apportate automaticamente
    % all'altro sistema si assi cartesiani
    linkaxes([ax_1 ax_2])
    % Settaggi del nuovo linite degli assi X
    set(ax_1,'xlim',[0 15])
    
    Hope this helps.
  • Re: RS232 e realizzazione di un eseguibile

    ask_raf
    grazie mille per la risposta, ma nonostante tutto non riesco a mantenerli fissi. I limiti degli assi variano a seconda dei dati che ho inserito.
    Qui di seguito ti riporto il codice del grafico, ho usato sia il set(handles.nome_del_grafico,'xlim',[]) che il codice più conciso xlim, ylim, zlim.
    Non ho avuto però nessun risultato.

    Scrivendo xmax, ymax e zmax mi ha dato il risultato ottenuto, ma con un messaggio di errore.
    Hai qualche idea del perchè o come risolvereil problema?

    Grazie in anticipo!
      axes(handles.graphicPanel);
        title('Real position of the chain');
        rotate3d('on') % attiva rotazione 3D
        axis([-1 1 -1 1 -1.45 0]);
        
        set(handles.graphicPanel,'xlim',[-1 1]);
        set(handles.graphicPanel,'ylim',[-1 1]);
        set(handles.graphicPanel,'zlim',[-1.45 0]);
        
        set(handles.graphicPanel,'dataaspectratio',[1 1 1])
    
        plot3(csNS_fin,csEO_fin,Zeta_fin,'-ok','LineWidth',2,...
                    'MarkerEdgeColor','g',...
                    'MarkerFaceColor',[.0 .60 .0],...
                    'MarkerSize',6);
        xlabel('displacements Norh-South [m]');
    
    [color=#FF0000]%     xmax(1.5);
    %     xmin(-1.5);
    %     ymax(1.5);
    %     ymin(-1.5);[/color]
        xlim([-1 1]);
        ylim([-1 1]);
        zlim([-1.45 0]);
        ylabel('displacements East-West [m]');
        zlabel('depth[m]');
        legend('Chain location');
        grid on;
        axis tight;
  • Re: RS232 e realizzazione di un eseguibile

    Scrivendo xmax, ymax e zmax mi ha dato il risultato ottenuto
    mi ha dato il risultato voluto....
  • Re: RS232 e realizzazione di un eseguibile

    Quale messaggio di errore viene generato?

    Sembra strano che i limiti vengano settati, ma che, contemporaneamente venga generato un messaggi di errore

    Per settare i limiti devi inserire le relative istruzioni dopo le istruzioni usate per il plottaggio; quando queste funzioni (es. plot, plot3, surf, ...) vengono invocate i limiti degli assi vengono automaticamente aggiornati in modo che tutta la "curva" (o qualunque altra cosa debba essere plottata) stia all'interno degli assi cartesiani.

    Forse nello script che ho inserito nella risposta precedente non mi sono spiegato bene, ma basta un solo set di istruzioni per settare i limiti degli assi; i vari esempi erano mutuamente alternativi.

    Le funziono "xmin", "ymin", "zmin" non sono "funzioni di MatLab", nel mio script erano definiti come variabili scalari per momorizzare valori minimi.

    Hope this helps.
  • Re: RS232 e realizzazione di un eseguibile

    Mi dovrai perdonare, ti faccio vedere lo script che ho usato per il grafico.
    %% creo il grafico da visualizzare
        axes(handles.graphicPanel);
        title('Real position of the chain');
        rotate3d('on') % attiva rotazione 3D
        set(handles.graphicPanel,'dataaspectratio',[1 1 1])
        
        set(handles.graphicPanel,'xlim',[-1 1]);
        set(handles.graphicPanel,'ylim',[-1 1]);
        set(handles.graphicPanel,'zlim',[-1.4 0]);
       
        plot3(csNS_fin,csEO_fin,Zeta_fin,'-ok','LineWidth',2,...
                    'MarkerEdgeColor','g',...
                    'MarkerFaceColor',[.0 .60 .0],...
                    'MarkerSize',6);
        xlabel('displacements Norh-South [m]');
        ylabel('displacements East-West [m]');
        zlabel('depth[m]');
        legend('Chain location');
        grid on;
        axis tight;

    Mettevo sempre "axis tight" alla fine dello script del grafico, per questo credo che mi ignorasse il comando che davo prima, dove fissavo i limiti degli assi.
    Tolto quello ora funziona con tutti i modi diversi di fissarli che mi hai consigliato!

    Grazie mille per la pazienza e per tutte le risposte che mi hai dato aiutandomi a capire come funziona il tutto!
  • Re: RS232 e realizzazione di un eseguibile

    E' stato un piacere!
    Sono contento di esserti stato utile e che ora il tuo programma funzioni.
    Buon proseguimento
Devi accedere o registrarti per scrivere nel forum
9 risposte