ايران ويج

نسخه‌ی کامل: اجرا کردن خودکار یک فانکشن در متلب
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام، در این برنامه چطور میشه کاری کرد تا نیازی به فشردن کلید برای نمایش دیتا نباشه؟

یعنی به صورت خودکار دیتای دریافتی نمایش داده بشه؟


کد:
function varargout = untitled(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                  'gui_Singleton',  gui_Singleton, ...
                  'gui_OpeningFcn', @untitled_OpeningFcn, ...
                  'gui_OutputFcn',  @untitled_OutputFcn, ...
                  'gui_LayoutFcn',  [] , ...
                  'gui_Callback',   []);
if nargin && ischar(varargin{1})
   gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
   [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
   gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
s=serial('COM21','BaudRate',9600);
fopen(s)
readasync(s);
out=fscanf(s);
set(handles.text1,'string',out);
fclose(s);
delete(s);

% --- Executes during object creation, after setting all properties.
function text1_CreateFcn(hObject, eventdata, handles)
یعنی میخوایید کلا روی سریال گوش بمونه و هروقت اطلاعات جدید اومد اونو نشون بده؟
و همزمان میخوایین با متلب هم کارای دیگه اننجام بدید؟
سلام، بله میخوام هر وقت اطلاعات جدید اومد اون رو نشون بده.
کار دیگه ای نمیخوام با متلب انجام بدم فقط بیاد اطلاعات جدید رو نشون بده.

این کدی که گفتین رو باید استفاده کنم؟
سلام
من کدی نگفتم! اون امضام هستش خنده بلد − بهینه شده برای ورژن جدید
در مورد سوالتون؛ من شرایط تست نداروم ولی اینارو میگم خودتون بخونید و تست کنید

کلا در اینجور مواقع که میخواییم چیزی رو از جایی بخونیم (که اینجا داریم از سریال میخونیم) ۲ حالت بیشتر نداریم؛ 

حالت اولش اینه که بعد اینکه توابع خوندن رو اجرا مکنیم (در اینجا scanf ) ؛ برنامه منتظر میمونه که یه اطلاعاتی از دستگاه مورد نظر مون بیاد؛ و تا وقتی اطلاعات نیاد کل برنامه رو بلوکه میکنه؛ یا به اصطلاح فریز میشه؛

حالت دوم واسه وقتیه که شما تابع خوندن رو اجرا میکنید؛ و یع بافر هم بهش معرفی میکنید؛ برنامه بعد از رسیدن به این حالت کار خودش رو انجام میده ولی همزمان وقتی اطلاعاتی هم از دستگاه بیاد؛ اونو میخونه و توی بافر میندازه

(لینک چهار رو ببینید)

این حالتی که شما میخوایید حالت اوله؛ یعنی برنامه منتظر بمونه اطلاعات بیاد؛ بعدش اونو بخونه و باز همینطور تا به آخر ...

که اونطور که من متوجه شدم باید روی این قسمت کار کرد:

کد php:
s=serial('COM21','BaudRate',9600);
fopen(s)
readasync(s);
out=fscanf(s);
set(handles.text1,'string',out);
fclose(s);
delete(s); 
تابع readasync برای اجرای ناهمروند هست؛ یعنی همون حالت اول؛ وقتی اجراش کردید؛ هرجا خواستید با توابه خواندن اطلاعات رو بخونید؛ برنامه صبر میکنه تا اطلاعات ار پورت سریال وارد بشه و اونو بخونه و بعد ادامه ماجرا ... (لینک شماره یک رو ببینید)

شما میتونید اون قسمت scanf رو داخل یه حلقه بندازید و به نتیجه ای که میخوایید برسید
و یا میتونید طوری تنظیم کنید که بعد از اومدن اطلاعات؛ یک تابع دیگه رو اجرا کنه (در اصطاح بهش میگن callback) - (لینک سه رو ببینید)




لینک ها:
یک:
http://matlab.izmiran.ru/help/techdoc/ma...ser23.html
دو:
http://matlab.izmiran.ru/help/techdoc/ma...ser21.html
سه:
http://matlab.izmiran.ru/help/techdoc/ma...html#73779
چهار:
http://radio.feld.cvut.cz/matlab/toolbox...ser12.html




خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید چقدر چرت و پرت گفتم خنده بلد − بهینه شده برای ورژن جدید  شما به بزرگیه خودت ببخش خنده بلد − بهینه شده برای ورژن جدید
امضا بود! خنده بلد − بهینه شده برای ورژن جدید

ممنون از شما، آخه این قسمت در فانکشن پوش بوتن هستش که تا فشار میدم این فانکشن اجرا میشه و دیتا رو از سریال میخونه.
این رو هم بگم که دیتا هر 500 میلی ثانیه به کامپیوتر ارسال میشه و دائمی هستش.
من این دستوراتی که شما میفرمایید رو از فانکشن پوش بوتن حذف کردم و بالای نوشته function pushbutton1_Callback(hObject, eventdata, handles) یک حلقه for تشکیل دادم که توو حلقه میمونه و انگار فقط اطلاعات حلقه آخری نمایش داده میشه.
نقل قول: pedram032
امضا بود! خنده بلد − بهینه شده برای ورژن جدید
خنده بلد − بهینه شده برای ورژن جدید کامند لینوکس هستش؛ میزنه هارد رو میپوکونه خنده بلد − بهینه شده برای ورژن جدید

نقل قول:   آخه این قسمت در فانکشن پوش بوتن هستش که تا فشار میدم این فانکشن اجرا میشه و دیتا رو از سریال میخونه.


من از شما پرسیدم شما میخوایین کار دیگه‌ای هم با متلب انجام بدید!؟ شما فرمودید نه خنده بلد − بهینه شده برای ورژن جدید   و عرض کردم از این روش برید که منجر به فریز شدن میشه
وقتی دارید با محیط گرافیکی کار میکنید یعنی برنامه داره همزمان چندین کار رو انجام میده و این خوب نیست که فریز بشه خنده بلد − بهینه شده برای ورژن جدید یا در یه حلقه قرار بگیره و . .

منم دقت نکرده بودم برنامتون گرافیکیه خنده بلد − بهینه شده برای ورژن جدید  (حالا مثلا اگه دقت میکردن میفهمیدم خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید )

------------
از اون callback که گفتم استفاده کردید؟
لینک شماره سه و همچنین اینم یه مثال هست
http://stackoverflow.com/questions/27973...-in-matlab
http://stackoverflow.com/questions/28885...allback-in
http://stackoverflow.com/questions/24940...-in-matlab


نکته: من هیچکدوم رو تست نکردم خنده بلد − بهینه شده برای ورژن جدید کار نکردن دعوا نکنی خنده بلد − بهینه شده برای ورژن جدید خنده بلد − بهینه شده برای ورژن جدید
چه امضای خفنی خنده بلد − بهینه شده برای ورژن جدید
بله برنامه گرافیکی هستش، امتحان میکنم بهتون اطلاع میدم. راسش این کار رو واسه بیشتر شدن اطلاعات خودم میخواستم انجام بدم و عجله ای نیست زیاد.
کلا آدم ریلکسم توو این طور زمینه ها خنده بلد − بهینه شده برای ورژن جدید
از شما ممنون برای راهنمایی هاتون