J'ai écrit un script MATLAB qui lit dans des données à l'aide d'un port commun virtuel dans temps réel fort>. J'ai fait une quantité importante de traitement du signal dans un MFILE. Ensuite, j'ai ressenti la nécessité d'avoir une interface graphique compacte qui affiche les informations comme résumé. P> Je n'ai commencé que récemment à creuser et à lire davantage l'outil GUI intégré de Matlab. J'ai suivi quelques tutoriels et je suis en mesure d'obtenir mes graphiques à afficher sur mon interface graphique Cependant, je veux que la graphèse Voici le code pertinent actuellement pour l'interface graphique: p> Modifier le code changeant: < / p> L'erreur que je reçois est: p>
4 Réponses :
Vous devez utiliser un Objet de la minuterie . Définissez le rappel pour être la fonction qui met à jour les parcelles. P>
Pas au meilleur de ma connaissance. Y a-t-il une bonne raison pour laquelle vous ne pouvez pas le faire de cette façon?
Pouvez-vous s'il vous plaît jeter un oeil à mon édition. Je n'arrive pas à utiliser correctement la fonction de minuterie.
Jetez un coup d'œil à Faire des graphiques sensibles à la liaison de données et le commande linkdata .
Si la même variable apparaît dans des parcelles dans plusieurs chiffres, vous pouvez Liez l'une des parcelles à la variable. Vous pouvez utiliser des parcelles liées dans concert avec marquage des graphiques avec le brossage de données, mais aussi sur leur propre. Les parcelles de liaison vous permettent p>
- Faites des graphiques répondent aux modifications des variables dans l'espace de travail de base ou dans une fonction li>
- Faites des graphiques Répondez lorsque vous modifiez des variables dans l'éditeur de variable et la ligne de commande LI>
- Modifier les variables via le brossage de données qui affectent différentes représentations graphiques d'eux à la fois li>
- créer des "fenêtres de montre" graphiques à des fins de débogage li> ul>
Regarder Windows sont utiles si vous programmez dans la langue matlab. Pour exemple, lors du raffinage d'un algorithme de traitement de données pour passer à travers Votre code, vous pouvez voir les graphiques répondent aux modifications des variables en tant que fonction exécute des déclarations. p> BlockQuote>
J'ai fait un test rapide et sale vu ci-dessous et je ne suis pas sûr de savoir comment cela fonctionnera dans une interface graphique une fonction, mais peut faire le tour. P>
Note 1: Je devais ajouter un point de pause dans mon sous-programme où il modifie le global
y code> pour voir la mise à jour automatique de la parcelle. Vous aurez peut-être besoin d'une combinaison de dessinés, de pause ou d'une minuterie si les données sont modifiées rapidement. P>
function testLinking() global x y %Links failed if the global did not also exist in the base workspace evalin('base','global x y'); x = 0:.1:3*pi; % Make up some data and plot y = sin(x); h = plot(x,y,'ydatasource','y','xdatasource','x'); linkdata on testSub function testSub() %Test to see if a sub can make a linked global refresh global x y for i = 1:10 %This should automatically update the plot. y = sin(x+i/10); end
Merci Aero, mais je n'étais pas clair dans ma question. En plus de modifier les graphiques, j'ai également quelques zones de texte statiques que je souhaite mettre à jour aussi bien. Il semble que la minuterie est la voie à suivre ...
@ C0D3RZ Voir mon autre réponse pour obtenir de l'aide pour obtenir votre minuterie au travail.
Vous pouvez ajouter un rappel sur l'objet série qui exécute une fonction de traçage. Vous devez joindre le rappel à l'événement "BytesAvaillableFCN" sur l'objet (voir Ceci a> Pour plus de détails sur les propriétés de l'objet COM). P>
Essentiellement, lorsqu'il y a des octets disponibles sur le port COM, vous demandez à MATLAB d'exécuter une fonction spécifique. Dans votre cas, ce sera la fonction de mise à jour de l'interface graphique. Si vous devez d'abord traiter les données entrantes, votre fonction de rappel fera d'abord le traitement du signal, puis effectuez les commandes de traçage. P>
Merci Jorge, mais je n'étais pas clair dans ma question. En plus de modifier les graphiques, j'ai également quelques zones de texte statiques que je souhaite mettre à jour aussi bien. Il semble que la minuterie est la voie à suivre ...
Vous pouvez également mettre à jour les cases à l'aide de get / Set. La chose est que je ne connais pas la logique de votre code.
Voici un exemple en utilisant une minuterie avec un rappel TimerFCN. J'ai fait une graphique simple avec 1 axes et 1 bouton.
Dans la fonction d'ouverture, j'initialise la parcelle et crée la minuterie. Dans le rappel du bouton de démarrage, je démarre la minuterie et commence à manipuler les données. Le rappel de la fonction de minuterie Il suffit de mettre à jour les données Y de la ligne via sa poignée. Vous trouverez ci-dessous les fonctions pertinentes du fichier M de GUI (section intro fois snipped et sortie FCN. P>
handles = guidata(hObject); %hObject can be any handle who is a child of the main GUI.
Merci beaucoup Aero Energy. Je pense que je dois travailler comment je voulais avec votre aide de code. J'apprécie vraiment l'aide. J'ai lu l'aide de la minuterie sur le site Web, mais je ne pouvais pas vraiment le faire, votre extrait de code a vraiment aidé. Il m'étonne que vous avez sorti le temps d'écrire le code pertinent pour m'aider. Merci encore!
Pourriez-vous s'il vous plaît sur quoi ces deux lignes de code font: poignées.output = hobject; guidera (hobjecte, poignées);
Je ne suis pas sûr d'utiliser ces poignées. * Notation. J'ai lu le fichier d'aide MATLAB sur l'utilisation des poignées, mais cela n'a pas eu trop de sens pour moi.
@ c0d3rz Voir mes éditions ci-dessus pour une amorce rapide et sale décente sur des poignées d'interface graphique.
Merci beaucoup Aero Energy. Je voudrais voter votre réponse, mais je n'ai pas les points de réputation minimes requis ...
Dupliqué possible: Stackoverflow .com / questions / 1007385 / ...
@ C0D3RZ Consultez ce lien sur la définition des rappels Timerfcn Mathworks. com / help / techdoc / matlab_prog / f9-39541.html # F9-4249 4 Essayez de définir "Timerfcn" sur @guiUpdate et changeez guipdate de sorte qu'il dispose de deux entrées
guipdate (obj, événement) < / code>. «Obj 'sera la poignée à l'objet de la minuterie et« événement »aura quelques détails sur la façon dont il a été appelé. Par défaut, les rappels de la fonction de minuterie seront adoptés au moins ces deux arguments. Je ne sais pas si c'est la cause exacte de votre erreur, mais votre échantillon n'a pas l'air correct. Si je reçois une chance plus tard aujourd'hui, je vais essayer de poster un exemple de minuterie.