[آموزش 01] GUI در متلب

mimshimi......

عضو جدید
سلام
می خواستم بدونم کتاب و مرجع کاملی برای یادگیری GUI نمی شناسید که بهم معرفی کنید؟؟؟؟
اگه اطلاعاتی دارید ممنون می شم لطف کنید بگید
 

S A R a d

کاربر فعال تالار هنر ,
کاربر ممتاز
سلام
می خواستم بدونم کتاب و مرجع کاملی برای یادگیری GUI نمی شناسید که بهم معرفی کنید؟؟؟؟
اگه اطلاعاتی دارید ممنون می شم لطف کنید بگید

سلام
کتابی که اختصاصا برای آموزش GUI باشه ندیدم اما جزوه و فیلم تو نت زیاد هست.اگر اصلا آشنایی نداریدتوصیه می کنم برای یادگیری با یکی از همین جزوه ها شروع کنید و بعد با help متلب (که بهترین منبعه ) ادامه بدید.لینک دانلود یکیش رو براتون میزارم.
یادگیریش هم سادست با چند ساعت وقت گذاشتن راه میافتید.مهارت بیشترهم با تمرین به دست میاد. یک فصل از کتاب چاپمن هم راجع به gui هست . که فکر میکنم لینک زیر ترجمه ی همون فصل باشه.
 

پیوست ها

  • gui.pdf
    316 کیلوبایت · بازدیدها: 0
آخرین ویرایش توسط مدیر:

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
قسمت اول - آموزش GUI

قسمت اول - آموزش GUI

در چند قسمت قصد دارم نحوه كار كردن با GUI رو به شما آموزش بدم.
همون‌طور كه مي‌دونيد(يا شايد هم نمي‌دونيد) به‌وسيله ابزار (GUI (Graphical User Interface شما مي‌تونيد برنامه خودتون رو بهتر به كاربران ديگه عرضه كنيد. براي شروع ابتدا guide رو صفحه متلب تايپ و اينتر كنيد يا از مسير File >> New >> GUI نيز مي‌تونيد استفاده كنيد همون‌طور كه مشاهده مي‌كنيد صفحه زير نمايش داده مي‌شه بدون هيچ تغييري OK كنيد.

e1.jpg

بعد صفحه اصلي GUI براي شما ظاهر مي‌شه كه شما مي‌تونيد عناصر گرافيكي خودتون رو در اون قرار بديد. براي اينكه شما بتونيد يك GUI طراحي كنيد ابتدا بايد شما عناصر گرافيكي كه GUI در اختيار شما قرار مي‌ده بشناسيد من خلاصه‌اي از برخي عناصر رو كه بيشتر به كار ميان براي شما مي‌نويسم.


  • Push button : اين عنصر گرافيكي يك دگمه فشاري هستش كه هنگامي كه با ماوس روي اون فشار بديد Callback اون فعال مي‌شه.
  • Slider : اين عنصر يك كنترلر گرافيكي براي مقادير پيوسته است كه با دادن دو حد بالا و پايين به اون مي‌تونيد مقدارش رو بين دو حد بطور پيوسته تغيير بديد كه اين كار با كشيدن كنترلر آن با ماوس انجام مي‌شه و هر تغيير در اين كنترلر Callback اون رو فعال مي‌كنه.
  • Radio Button : اين عناصر معمولاً به صورت گروهي به كار مي‌رن و از اون‌ها مي‌تونيد براي ايجاد گزينه‌هاي وابسته استفاده كنيد (گزينه‌هاي وابسته يعني حالت‌هايي كه هميشه يكي از اون‌ها مي‌تونن فعال باشن) زماني كه بر روي يكي از اون‌ها كليك كنيد Callback مربوط به اون عنصر فعال شده و يك نطقه سياه درون دايره اون قرار مي‌گيره.
  • Check Box : با اين عناصر شما مي‌تونيد حالت‌هاي مستقل از هم ايجاد كنيد يعني حالت‌هايي كه همزمان مي‌تونن رخ بدن. زماني كه با ماوس روي اين عنصر كليك كنيد Callback اون فعال مي‌شه و اگر خاموش باشه(درون مربع چيزي نباشه) يك تيك سبز رنگ روي مربع اون نشون داده مي‌شه كه نشان دهنده روشن بودن اونه و اگر روشن باشه، خاموش مي‌شه.
  • Edit Text : اين عنصر يك متن قابل تغيير رو نشون مي‌ده كه شما مي‌تونيد محتويات اون رو تغيير بديد و سپس با فشردن دگمه اينتر Callback اون رو فعال كنيد.
  • Static Text : اين عنصر يك متن ثابت رو نشون مي‌ده كه محتويات اون تحت كنترل برنامه‌ايست كه شما براي اون نوشته‌ايد و ديگه تحت كنترل شما نيست مگر اينكه بريد به سورس برنامه و كد اون رو تغيير بديد. از اين عنصر معمولاً براي نمايش خروجي عددي استفاده مي‌شه.
  • Pop-up Menu : اين عنصر گرافيكي تقريباً مانند Radio Button‌هاي گروهي عمل مي‌كنه و مي‌تونه تعدادي حالت رو در خودش ذخيره كنه و در يك زمان واحد فقط يكي از اون‌ها رو فعال كنه. شايد بشه گفت كه يكي از تفاوت‌هاي اون با Radio Button‌ها زماني باشه كه حالت‌هاي ما زياد هستند مثلاً بيش از پنج حالت، كه در اين صورت بهتره كه از اين عنصر استفاده كنيم چرا كه اگر بخواهيم از Radio Button‌ها استفاده كنيم GUI ما بزرگ و شايد هم بي‌ريخت بشه ولي در عنصر Pop-up Menu فقط حالت فعال نمايش داده مي‌شه و فقط زماني كه بخواهيم حالت رو تغيير بديم باقي حالت‌ها نمايش داده مي‌شن.
  • Listbox : اين عنصر نيز تقريباً كار Pop-up Menu رو انجام مي‌ده با اين تفاوت كه در Listbox تمامي حالت‌ها در يك صفحه نمايش داده مي‌شن و با كليك كردن بر اون‌ها مي‌تونيم Callback اون رو فعال كنيم.
  • Toggle Button : اين عنصر گرافيكي شبيه يك كليد دو وضعيته هست كه مي‌تونه در حالت روشن و خاموش قرار بگيره. با كليك كردن روي اون Callback مربوطه فعال مي‌شه.
  • Axes : اين عنصر گرافيكي وقتي به كار مياد كه خروجي ما منحني باشه و مثل Static Text محتويات اون تحت كنترل برنامه‌ايست كه به آن داده‌ايم.
  • Panel : اين عنصر مي‌تونه تعدادي شيء گرافيكي رو در خودش قرار بده و با داشتن يك نام از بقيه اشياء جدا كنه.
  • Button Group : شما زماني كه بخواهيد از گروهي از Radio Button‌ها استفاده كنيد به اين عنصر نياز خواهيد داشت.

البته آنچه كه در بالا مشاهده كرديد بخشي از امكاناتي است كه GUI در اختيار ما قرار داده است ولي براي شروع كار با GUI اين قطعات كافيست.
حالا فرض كنيد كه ما مي‌خواهيم يك ماشين حساب خيلي ساده درست كنيم به اين صورت كه دو عدد رو بگيره و چهار عمل اصلي رو به دلخواه كاربر روي دو عدد انجام بده براي اين كار ما احتياج به دو Edit Text داريم تا بتونيم اعداد ورودي رو به اون بديم و دو Static Text كه يكي براي نمايش خروجي و ديگري رو هم بعداً مي‌گم بعد مي‌تونيم از چهار Radio Button كه به صورت گروهي به كار مي‌رن، براي انتخاب يكي از چهار عمل اصلي استفاده كنيم طبعاً يك Button Group هم مي‌خواهيم.پس از انتخاب قطعات، نوبت اون رسيده كه كارمون رو شروع كنيم در صفحه اصلي GUI در سمت چپ قطعاتي رو كه مي‌خواهيم ازشون استفاده كنيم مي‌بينيد تمام قطعات رو به تعدادي كه گفته شد به صفحه GUI وارد كنيد به اين صورت كه بر قطعه مورد نظر كليك مي‌كنيد و بدون رها كردن اون، قطعه رو توي صفحه GUI مي‌اندازيد و به‌صورت شكل زير در مي‌آوريد:

e2.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
عنصرهاي متني رو همون‌طوري كه مي‌بينيد بزرگ كردم تا اعداد بزرگ رو به راحتي نمايش بدن.حالا بايد تنظيمات اين قطعات رو انجام بديم اول روي Edit Text اولي دوبار كليك كنيد و بعد عبارت مقابل String رو پاك كرده و به جاي آن 0 رو بنويسيد و در Tag اون هم x_edit بنويسيد و پنجره رو ببنديد.

e3.jpg

همين اعمال رو هم براي Edit Text دومي انجام مي‌ديد با اين تفاوت كه در Tag اون y_edit رو مي‌نويسيد. String در واقع همون عبارتي است كه روي Edit Text نوشته مي‌شه و Tag ناميه كه بوسيله اون GUI، عنصر مربوطه رو شناسايي مي‌كنه. در ادامه كار بر Static Text اولي دوبار كليك مي‌كنيد و در String اون علامت = رو قرار مي‌ديد سپس در پنجره تنظيمات Static Text دومي مقدار String رو 0 و مقدار Tag رو Result قرار بديد همون‌طور كه ديديد Static Text دومي نياز به Tag داره چرا كه مقدار اون قراره تغيير كنه و نتيجه عمليات رو نمايش بده حالا سراغ Radio Button‌ها مي‌ريم اول به رويButton Group دوبار كليك كنيد و مقدار Title اون رو مثلاً Selector يا هر چيز ديگه بزاريد(مهم نيست) بعد روي Radio Button اولي دوبار كليك كنيد و مقدار sum_radiobutton رو در Tag و مقدار + رو در String مي‌نويسيد حالا همين كار رو براي سه‌تاي ديگه انجام مي‌ديد و در String‌هاشون به ترتيب - * / و در Tag‌هاشون به ترتيب diff_radiobutton براي دومي mult_radiobutton براي سومي و div_radiobutton رو براي چهارومي مي‌نويسيد.حالا كار تنظيمات قطعات تموم شده و شكل زير رو داريد:

e4.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
حالا ديگه وقت كد نويسي شده.روي فلش سبز رنگي كه در نوار بالايي صفحه قرار داره كليك كنيد و در ديالوگ باز شده Yes رو بزنيد و بعد يك نام دلخواه مثلاً calculator رو به عنوان نام GUI تايپ كنيد و دگمه Save رو بزنيد حالا مشاهده مي‌كنيد كه يك M-File كدنويسي شده و يك Figure كه همون GUI شماست به نمايش در آمده است. M-File مربوطه در واقع هسته اصلي GUI شماست حالا شما بايد مقداري كد به اين GUI اضافه كنيد تا قطعات شما وظايف خود رو بشناسن.در ابتدا به صفحه اصلي GUI مي‌رويد و با راست كليك كردن بر Edit Text اولي به‌صورت زير Callback اون رو فراخواني مي‌كنيد:

e5.jpg

حالا در جايي كه مكان‌نما رفته كد زير رو بنويسيد:
کد:
[LEFT][COLOR=#333333][FONT=Tahoma]i=get(hObject,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]i=str2num(i);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if(isempty(i))[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(hObject,'String','0')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]guidata(hObject, handles);[/FONT][/COLOR][/LEFT]

در خط اول اين كد مقدار Edit Text به صورت String خوانده مي‌شه و در خط دوم به عدد تبديل مي‌شه در خطوط سه تا پنج بررسي مي‌شه كه آيا عددي وارد شده يا نه؟ اگه وارد شده باشه كه هيچ وگرنه مقدار 0 در اون قرار داده مي‌شه در خط آخر هم كه مقادير به روز مي‌شوند و نياز هستش كه در آخر هر Callback آورده‌شه تا مقادير آپديت بشن. سپس دقيقاً همين كار رو براي Edit Text دومي انجام بديد و همون كد رو هم بنويسيد.
حالا به سراغ Radio Button‌ها مي‌رين Callback اولي رو به همون صورتي‌كه گفته شد فراخواني مي‌كنين و كد مربوطه رو به همان صورتي‌كه مي‌بينيد، وارد كنيد. همون‌طوري‌كه مي‌بينيد بعد از تابع سه خط توضيحات اومده كه اون‌ها رو رد مي‌كنيد بعد كد رو مي‌نويسيد.به اين صورت:
کد:
[LEFT][COLOR=#333333][FONT=Tahoma]
[/FONT][/COLOR][COLOR=#333333][FONT=Tahoma]function sum_radiobutton_Callback(hObject, eventdata, handles)[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]% hObject    handle to sum_radiobutton (see GCBO)[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]% eventdata  reserved - to be defined in a future version of MATLAB[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]% handles    structure with handles and user data (see GUIDATA)[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]x=get(handles.x_edit,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]y=get(handles.y_edit,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]x=str2num(x);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]y=str2num(y);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]result=x+y;[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]result=num2str(result);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.Result,'String',result);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]guidata(hObject, handles);[/FONT][/COLOR][/LEFT]


چهار خط اول كه خودش وجود داشت خط پنجم و ششم مقدار x_edit رو درون x و مقدار y_edit رو درون y ذخيره مي‌كنه در دو خط بعدي مقدار x و y رو به عدد تبديل مي‌كنه در خط بعدي مجموع اون‌ها رو درون result مي‌ريزه و خط بعدي result رو از عدد به رشته تبديل مي‌كنه خط بعدي result رو درون Result(كه همون Static Text دومي باشه) مي‌ريزه و در نهايت هم در خط آخر مقادير به روز مي‌شن همون‌طوري كه قبلاً توضيح داده شد.
حالا براي سه Radio Button ديگه هم عيناً همين كد رو وارد مي‌كنيد فقط به جاي اينكه x و y رو با هم جمع كنيد اون‌ها رو براي دومي از هم كم مي‌كنيد و براي سومي در هم ضرب مي‌كنيد و براي چهارومي به هم تقسيم مي‌كنيد.پس از انجام عمليات كدنويسي M-File مربوطه رو Save مي‌كنيد حالا ديگه GUI شما آماده شده و مي‌تونيد از اون استفاده كنيد.به اين صورت:

e6.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
در ادامه‌ی آموزش GUI بنا دارم در چند قسمت، یک مثال نسبتا کامل را به شما معرفی کنم، تا با مطالعه‌ی دقیق این مثال بتوانید برنامه‌های کاربردی خودتان را پیاده‌سازی کنید. در مطالعه‌ی این قسمت و همچنین قسمت‌های بعدی، پیش‌فرض آن است که دوستان یا قسمت اول آموزش را مطالعه کرده‌اند و یا اطلاعات اولیه را دارند، پس از ذکر جزئیات خودداری شده است.
برای انتخاب یک مثال خوب، بررسی‌های زیادی انجام دادم تا این مثال در درجه‌ی اول قطعات گرافیکی، منوها و دیگر امکانات موجود را در حد بالایی دربرداشته باشد، در درجه‌ی دوم کاربردی باشد و در درجه‌ی سوم طیف گسترده‌ای از رشته‌های تحصیلی با آن ارتباط برقرار کنند.
این مثال یک رابط گرافیکی است که کاربر می‌تواند با آن سیستم‌های کنترلی را آنالیز کند. یعنی با گرفتن اطلاعات سیستم(صفرها و قطب‌ها و...) از کاربر، می‌تواند پاسخ سیستم به ورودی‌های معمول، آنالیز ریشه‌های سیستم، و پاسخ فرکانسی آن را در منحنی‌های جداگانه‌ای ترسیم نماید(البته قابل ذکر است که در تولباکس کنترل متلب، چنین رابط گرافیکی و با امکانات بیشتری وجود دارد، ولی این رابط را دیگر خودتان طراحی کرده‌اید و می‌توانید، هر تغییری در آن بدهید).
برای شروع ابتدا guide را تایپ و اینتر کنید. سپس OK کرده و مانند شکل زیر قطعات را به میزان کافی آورده و مرتب کنید:

gui1.jpg

سپس مانند شکل زیر قطعات را نام‌گذاری و مرتب کنید:



gui2.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
توجه کنید که همه‌ی این قطعات در قسمت اول آموزش، معرفی شده‌اند. مشخصه‌ی tag ، برای کلیه‌ی قطعات را در حالت پیش‌فرض خود قرار دهید. برای اولین عنصر Pop-up Menu ، مقادیر Step و Impulse را به‌صورت زیر وارد کنید:


gui3.jpg

و برای دومین عنصر Pop-up Menu ، به‌ترتیب مقادیر:
  1. Root Locus
  2. Pole-Zero map
و همچنین برای سومین عنصر Pop-up Menu ، به‌ترتیب مقادیر:
  1. Bode diagram
  2. Nyquist
  3. Nichols
را وارد کرده و OK کنید.توجه داشته باشید که حالت پیش‌فرض تمامی عناصر، همانی باشد که در شکل نشان داده شده است.

توضیح طرح:
همان‌طوری که احتمالا می‌دانید، ما به چندین روش می‌توانیم مشخصات یک سیستم کنترلی را بیان کنیم. از جمله معروف‌ترین این روش‌ها، یکی روش ضرایب چندجمله‌ای صورت و مخرج تابع تبدیل سیستم است و دیگری بیان صفرها و قطب‌های سیستم، به‌همراه گین تابع تبدیل می‌باشد. همان‌طور که در شکل مشخص است، ما هر دو روش فوق را آورده و پیش‌فرض را در روش اول قرار داده‌ایم. و برای هر دو روش نیز سیستمی را به‌صورت پیش‌فرض نوشته‌ایم. در ادامه قسمتی را برای اعمال تأخیر(تأخیر در فاز سیستم تغییر ایجاد می‌کند) به سیستم گذاشته‌ایم تا در مواقع لزوم بتوانیم به سیستم تأخیر اعمال کنیم. برای اعمال تأخیر، باید ابتدا Check Box را فعال کرده و سپس عدد تأخیر را بر حسب ثانیه در کادر مقابل آن وارد کنید. در پانل بعدی شما می‌توانید سیستم مورد نظرتان را به‌صورت حلقه‌باز ویا حلقه‌بسته آنالیز کنید(پیش‌فرض به‌صورت حلقه‌باز می‌باشد). اگر سیستم (G(s ، تابع تبدیل حلقه‌باز شما باشد، تابع تبدیل حلقه بسته به‌صورت زیر است(H(s)=1):

gui4.jpgدر پانل بعدی کاربر می‌تواند پاسخ سیستم را به ازای ورودی‌های پله و یا ضربه رسم نماید. کاربر می‌تواند زمان پاسخ را در حالت پیش‌فرض و یا حالت انتخابی قرار دهد. اگر کاربر حالت انتخابی را برگزیند، باید مقدار زمان موردنظر را بر حسب ثانیه در کادر مقابل آن وارد کند. در پانل بعدی کاربر می‌تواند مکان هندسی ریشه‌ها و یا مکان ریشه‌های سیستم را در منحنی جداگانه‌ای ترسیم نماید. و در پانل آخری نیز کاربر برحسب انتخاب خود می‌تواند دیاگرام بود یا نمودار نایکوئیست و یا نمودار نیکولز سیستم را در منحنی جداگانه‌ای ترسیم کند. در قسمت پائین پانل اصلی نیز دو دگمه قرار دارد که دگمه‌ی Run ، تغییرات ایجاد شده را اعمال کرده و منحنی‌ها را ترسیم می‌کند و دگمه‌ی Reset نیز کلیه‌ی مقادیر و شکل‌ها را در حالت پیش‌فرض خود قرار می‌دهد. سه عدد Axes نیز وجود دارد که وظایف آن‌ها کاملا مشخص است.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نکته: برای تعویض رنگ زمینه‌ی عناصر می‌توانید به تنظیمات آن عنصر رفته و به‌دلخواه رنگ پیش‌فرض را تغییر دهید.از مسیر Tools >> GUI Options به تنظیمات GUI بروید و مانند شکل زیر عمل کنید:

gui5.jpg

شما با قرار دادن Proportional در قسمت Resize Behavior قادر خواهید بود تا GUI موردنظرتان را به هر سایزی درآورید(مثلا آن را Full Screen کنید).
در مرحله‌ی بعد می‌خواهیم برای GUIیمان، منوهای مختلفی را ایجاد کنیم. این منوها به‌شرح زیر می‌باشند:

gui6.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
برای ایجاد این منوها، از مسیر Tools >> Menu Editor وارد ویرایشگر منو شوید. سپس یک منو جدید ایجاد کرده و نام آن را File قرار دهید و در قسمت tag عبارت file_menu و یا هر عبارت دیگری که براساس کاراکترهای مجاز بوده و بدون فاصله باشد، را بنویسید. سپس منوی دیگری را ایجاد کرده و نام آن‌را Reset قرار داده و یک tag دلخواه برای آن بنویسید. بعد از آن در قسمت Accelerator حرف R را قرار دهید. شما با این کار قادر خواهید بود که با کلیدهای Ctrl+R عمل ریست‌کردن را انجام دهید. آیتم Check mark this item را نیز فعال کنید. پس از آن بوسیله‌ی دگمه‌های جهتی، این آیتم را به زیرمجموعه‌ی آیتم File منتقل کنید. مانند شکل زیر:

gui7.jpg

در ادامه منوی دیگری ایجاد کرده و نام آن را Print گذاشته و برای آن یک tag انتخاب کنید. این آیتم را در زیرمجموعه‌ی File قرار دهید. سپس Separator above this item را فعال کنید. با انجام این کار، دو آیتم Reset و Print را از یکدیگر جدا کرده‌اید(درواقع بین آن‌ها یک خط گذاشته‌اید). سپس چهار منوی جداگانه تعریف کرده، و نام‌های آن‌را به‌ترتیب زیر قرار دهید:
  1. Figure
  2. Response of LTI System
  3. Roots analysis
  4. Frequency response
سپس براساس کاراکترهای مجاز، tagی متفاوت برای هرکدام انتخاب کنید. مثلا به‌صورت زیر:
  1. fig_print_menu
  2. res_print_menu
  3. root_print_menu
  4. freq_print_menu
ضمنا می‌توانید برای زیبایی کار، در منوی Response of LTI System گزینه‌ی Separator above this item را فعال کنید. در ادامه منوی دیگری با نام Exit ایجاد کرده و tag آن‌را exit_menu بنامید. سپس آن‌را از Print جدا کنید. حال تمای زیرمنوهای منوی ‌اصلی File را ایجاد کرده‌ایم، پس به سراغ منوی Tools می‌رویم. این منو را با نام Tools ایجاد کنید(tag آن به کار ما نمی‌آید و همچنین tag کلیه‌ی منوهایی که دارای زیرمنو باشند) و دو منو را با نام‌های Show grid و Hide grid و تگ‌های show_menu و hide_menu را به زیرمجموعه‌ی آن اضافه کنید. منوی دیگری ایجاد کنید و نام آن‌را Help قرار داده و دو منوی دیگر را با نام‌های Using the ControlTool و About ControlTool و تگ‌های use_menu و about_menu را به زیرمجموعه‌ی آن ببرید. این دو را با یک خط از یکدیگر جدا کرده و برای Using the ControlTool در قسمت Accelerator، دگمه‌ی H را قرار دهید.کار ایجاد منوها به پایان رسیده و به‌صورت زیر درآمده‌اند:


gui8.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
در مرحله‌ی آخر از طراحی GUI ، می‌خواهیم یک نوارابزار برای GUIیمان قرار دهیم. برای اینکار از مسیر Tools >> Toolbar Editor وارد ویرایشگر نوارابزار شوید. سپس ابزار پرینت را انتخاب و Add کنید. در ادامه ابزار Zoom In را اضافه کرده و گزینه‌ی Separator on left side را فعال کنید. با انجام این کار، بین دو ابزار اضافه شده، یک خط قرار می‌دهید. سپس ابزار Zoom Out را اضافه کنید. بعد از آن ابزار Pan را اضافه کرده و آن‌را از ابزار Zoom Out جدا کنید. در نهایت نیز ابزار Data Cursor را اضافه کرده و آن‌را از ابزار Pan جدا کنید.
کار ایجاد نوارابزارها به پایان رسیده و به صورت زیر درآمده‌اند:

gui9.jpg

OK کنید.
اکنون کار طراحی GUIیمان به پایان رسیده و نوبت کدنویسی آن شده است. GUI را Run کرده و با نام ControlTool ذخیره کنید.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
قسمت سوم - آموزش GUI

قسمت سوم - آموزش GUI

طراحی بدنه‌ی اصلی GUI ، در قسمت دوم آموزش GUI، شرح داده شد. حال در این مرحله برنامه را Run کرده و با نام ControlTool ذخیره کرده‌ایم. اینک می‌خواهیم کدهای آن را بنویسیم.برای شروع ابتدا به قسمت ControlTool_OpeningFcn بروید تا کدهای بازشدن GUI را بنویسید. کدهای زیر را وارد کنید:

کد:
[COLOR=#333333][FONT=Tahoma]g=tf(1,[1 3 2 4]);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]step(handles.axes1,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]rlocus(handles.axes2,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]bode(handles.axes3,g);[/FONT][/COLOR]
این کدها نمودارهای سیستمی را که بصورت پیش‌فرض قرار داده‌ایم، رسم می‌کند. تابع تبدیل این سیستم، به قرار زیر است:gui10.jpgبه Callback تمامی Edit Textها رفته، و کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]input=get(hObject,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if (isempty(input))[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(hObject,'String','Default')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]guidata(hObject, handles);[/FONT][/COLOR]
فقط به‌جای عبارت Default ، مقدار پیش‌فرض آن Edit Text را قرار دهید. این کد مقدار واردشده در Edit Text را به‌صورت رشته‌ای می‌خواند، و اگر مقداری وارد نشده بود، Default را جایگزین می‌کند و در نهایت مقادیر آپدیت می‌شوند.در ادامه‌ی کار به Callback دگمه‌ی فشاری Run رفته و قطعه کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]if get(handles.radiobutton1,'Value') == get(handles.radiobutton1,'Max')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]num=get(handles.edit1,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]num=str2num(num);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]den=get(handles.edit2,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]den=str2num(den);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]s1=size(num);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]s2=size(den);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]delay=get(handles.edit8,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]delay=str2num(delay);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if s1(1,2) > s2(1,2)[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]errordlg('Invalid input value!  size(num) <= size(den)','Error','modal');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if get(handles.checkbox1,'Value') == get(handles.checkbox1,'Max')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if delay < 0[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]errordlg('The value of the "OutputDelay" property must be a vector of nonnegative numbers.','Error','modal');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]elseif mod(delay,1) ~= 0[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]errordlg('The value of the "OutputDelay" property must be integer valued for discrete-time models.','Error','modal');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]else[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]h=tf(num,den,1,'outputdelay',delay);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]g=tf(num,den,'outputdelay',delay);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]else[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]g=tf(num,den);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]else[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]z=get(handles.edit3,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]z=str2num(z);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]p=get(handles.edit4,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]p=str2num(p);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]s1=size(z);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]s2=size(p);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]delay=get(handles.edit8,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]delay=str2num(delay);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if s1(1,2) > s2(1,2)[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]errordlg('Invalid input value!  size(z) <= size(p)','Error','modal');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]k=get(handles.edit5,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]k=str2num(k);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if get(handles.checkbox1,'Value') == get(handles.checkbox1,'Max')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if delay < 0[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]errordlg('The value of the "OutputDelay" property must be a vector of nonnegative numbers.','Error','modal');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]elseif mod(delay,1) ~= 0[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]errordlg('The value of the "OutputDelay" property must be integer valued for discrete-time models.','Error','modal');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]else[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]h=zpk(z,p,k,1,'outputdelay',delay);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]g=zpk(z,p,k,'outputdelay',delay);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]else[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]g=zpk(z,p,k);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if get(handles.radiobutton6,'Value') == get(handles.radiobutton6,'Max')...[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]&& get(handles.checkbox1,'Value') ~= get(handles.checkbox1,'Max')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]g=feedback(g,1);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]elseif get(handles.radiobutton6,'Value') == get(handles.radiobutton6,'Max')...[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]&& get(handles.checkbox1,'Value') == get(handles.checkbox1,'Max')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]errordlg('Delay must be turn off in close loop.','Error','modal');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if (delay > 0) && (mod(delay,1) == 0)[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]%------------------------------------Response of LTI System[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]val1 = get(handles.popupmenu1,'Value');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if get(handles.radiobutton3,'Value') == get(handles.radiobutton3,'Max')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]switch val1[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 1[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]step(handles.axes1,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 2[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]impulse(handles.axes1,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]else[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]time=get(handles.edit7,'String');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]time=str2num(time);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]t=0:time/1000:time;[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]switch val1[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 1[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]step(handles.axes1,g,t);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 2[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]impulse(handles.axes1,g,t);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]%-------------------------------------------Analysis roots[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]val2 = get(handles.popupmenu2,'Value');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]switch val2[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 1[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]if get(handles.checkbox1,'Value') == get(handles.checkbox1,'Max')[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]rlocus(handles.axes2,h);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]else[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]rlocus(handles.axes2,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 2[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]pzmap(handles.axes2,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]%---------------------------------------Frequency response[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]val3 = get(handles.popupmenu3,'Value');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]switch val3[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 1[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]bode(handles.axes3,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 2[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]nyquist(handles.axes3,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 3[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]nichols(handles.axes3,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]guidata(hObject, handles);[/FONT][/COLOR]

توضیح کد:این کد درابتدا بررسی می‌کند که کدام روش برای معرفی سیستم، وارد شده است. اگر روش ضرایب چندجمله‌ای وارد شده بود، مقادیر num و den را به‌صورت رشته‌ای خوانده و به عدد تبدیل می‌کند. مقدار Delay را هم به‌همین ترتیب خوانده و به عدد تبدیل می‌کند تا در صورت نیاز از آن استفاده شود. در ادامه سایزهای num و den خوانده شده و در صورتیکه سایز num بزرگتر از den باشد، بوسیله‌ی تابع errordlg ، پیغام خطایی صادر می‌شود(در تمام توابع تبدیل سیستم‌های کنترلی، منطقی آن است که سایز num از سایز den کوچکتر و یا مساوی باشد). این دیالوگ به‌صورت زیر است:

gui11.jpg

نکته: این خطا از نوع modal است، و تا زمانی که OK نشود، کاربر نمی‌تواند به ادامه‌ی کار بپردازد.در ادامه‌ی کد بررسی می‌شود که آیا Delay فعال است یا نه؟ اگر فعال باشد، بررسی می‌کند که مقدار وارد شده برای Delay ، منفی و یا اعشاری نباشد، و برای رخداد هرکدام پیغام خطایی از نوع modal صادر می‌کند. سپس درصورتی‌که مشکلی در عدد وارد شده برای Delay نبود، تابع تبدیل سیستم را به‌همراه Delay تشکیل می‌دهد و اگرهم Delay فعال نبود، که تابع تبدیل را بدون Delay تشکیل می‌دهد.در ادامه‌ی کد به قسمتی می‌رسیم که مربوط به معرفی سیستم با صفرها و قطب‌ها و گین می‌باشد.
این کد درابتدا صفرها و قطب‌ها و گین و تأخیر سیستم را خوانده و به عدد تبدیل می‌کند. سپس بررسی می‌کند که تعداد صفرهای سیستم از تعداد قطب‌های آن بیشتر نباشد، که دراین‌صورت پیغام خطایی صادر می‌کند. سپس در صورت فعال بودن Delay، همان شروط ذکر شده را برای عدد وارد شده، چک می‌نماید. درصورتی‌که مشکلی وجود داشت، خطایی صادر می‌کند و درغیراین‌صورت تابع تبدیل را به‌همراه Delay ، تشکیل می‌دهد و در صورتی‌که تأخیری در کار نباشد، تابع تبدیل بدون تأخیر را تشکیل می‌دهد.
سپس درصورتی‌که نوع سیستم، حلقه‌بسته انتخاب شده باشد(و Delay هم فعال نباشد)، سیستم حلقه‌بسته با استفاده از دستور feedback ، تشکیل می‌شود.

در ادامه‌ی کد بررسی می‌شود که تأخیر وارد شده، مشکلی نداشته باشد که اگر چنین باشد، هیچ پاسخی رسم نمی‌شود. سپس بررسی می‌شود که در قسمت پاسخ زمانی سیستم، حالت پیش‌فرض قرار داده شده‌است و یا انتخابی؟ در صورت فعال بودن حالت انتخابی، زمان واردشده در کادر مربوطه، خوانده شده و به عدد تبدیل می‌شود سپس برداری از صفر تا عدد واردشده و با گام یک‌هزارم عدد واردشده، تشکیل می‌شود تا پاسخ سیستم به ازای آن بردار ترسیم شود. نحوه‌ی تشخیص فعال‌بودن کدام پاسخ نیز بوسیله‌ی دستور switch ، کاملا واضح است.ادامه‌ی این کد نیز مربوط به رسم نمودارهای آنالیز ریشه‌های سیستم و پاسخ فرکانسی آن می‌باشد که با توجه به توضیحات ذکر شده، مطلب خاصی باقی نمی‌ماند.در ادامه‌ی کار به Callback دگمه‌ی فشاری Reset رفته و قطعه کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]g=tf(1,[1 3 2 4]);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]step(handles.axes1,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]rlocus(handles.axes2,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]bode(handles.axes3,g);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.radiobutton1,'Value',1);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.radiobutton3,'Value',1);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.radiobutton5,'Value',1);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.edit1,'String','1');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.edit2,'String','[1 3 2 4]');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.edit3,'String','[]');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.edit4,'String','[-1 -2]');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.edit5,'String','1');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.edit7,'String','10');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.edit8,'String','2');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.popupmenu1,'Value',1);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.popupmenu2,'Value',1);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.popupmenu3,'Value',1);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(handles.checkbox1,'Value',0);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]guidata(hObject, handles);[/FONT][/COLOR]
توضیح کد:این کد تمامی تغییرات را به حالت پیش‌فرض خود بازمی‌گرداند.
 
آخرین ویرایش:

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
قسمت چهارم - آموزش GUI

قسمت چهارم - آموزش GUI

در قسمت دوم آموزش GUI، طراحی یک GUI نسبتا کامل و در ارتباط با آنالیز سیستم‌های کنترلی را آغاز کردیم. در قسمت سوم آموزش نیز کدنویسی آن‌را شروع کردیم. حال می‌خواهیم در این قسمت ادامه‌ی کدنویسی آن‌را انجام داده و GUI نهایی را تست کنیم.به Callback منوی Exit رفته و قطعه کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]button = questdlg('Do you want to quit the ControlTool?', ...[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]'Quit the ControlTool','Yes','No','No');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]switch button[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 'Yes',[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]close('ControlTool');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]case 'No',[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]quit cancel;[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]end[/FONT][/COLOR]
توضیح کد:این کد یک دیالوگ پرسشی را برای کاربر به نمایش درمی‌آورد. این دیالوگ معمولا دارای گزینه‌های Yes ، No و Cancel می‌باشد که در این مورد ما فقط از گزینه‌های Yes و No استفاده کرده‌ایم. اگر کاربر دگمه‌ی Yes را بفشارد، از برنامه‌ی ControlTool خارج می‌شود و اگر No را انتخاب کند، عملیات خروج، لغو می‌گردد.به Callback منوی Reset رفته و همان کدی را که برای دگمه‌ی فشاری Reset در قسمت سوم آموزششرح دادم، قرار دهید.حال به Callback منوی Figure رفته و کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]printdlg(ControlTool);[/FONT][/COLOR]
این کد از کل GUI‌ی ما پرینت می‌گیرد. درواقع این دستور از کل محتویات یک شیء گرافیکی(که در این مورد این شیء گرافیکی ControlTool نام دارد)، پرینت تهیه می‌کند.سپس به Callback منوی Response of LTI System رفته و قطعه کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]axes1fig = figure(10010);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]axes1copy = copyobj(handles.axes1,axes1fig);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]set(axes1copy,'Units','default','Position','default');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]printdlg(10010);[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]close 10010[/FONT][/COLOR]
توضیح کد:این کد ابتدا یک شیء گرافیکی ایجاد کرده و سپس axes موردنظر را بوسیله‌ی دستور copyobj در آن شیء کپی می‌کند. پس از آن واحدها و مکان axes کپی شده در شیء ساخته شده به حالت پیش‌فرض خود می‌روند. بعد از آن از شیء گرافیکی ایجاد شده، پرینت گرفته می‌شود و نهایت هم شیء گرافیکی بسته می‌شود.درادامه به Callbackهای Roots analysis و Frequency response رفته و همان کد بالا را برای آنها بنویسید. فقط تنها تغییری که می‌دهید این است که برای هرکدام، axes مربوطه را قرار می‌دهید.حال به Callback منوی Show grid رفته و قطعه کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]grid(handles.axes1,'on');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]grid(handles.axes2,'on');[/FONT][/COLOR]
[COLOR=#333333][FONT=Tahoma]grid(handles.axes3,'on');[/FONT][/COLOR]
همان‌طور که کاملا واضح است، این دستورات، نمودارها را شبکه‌بندی می‌کنند.برای منوی Hide grid نیز عین این دستورات را به کار ببرید با این تفاوت که به‌جای on از off استفاده کنید. با این کار شبکه‌بندی کلیه‌ی نمودارها حذف می‌شود.به Callback منوی Using the ControlTool رفته و کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]helpdlg('This is a graphical user interface(GUI) that apply for analysis of linear systems.','Help');[/FONT][/COLOR]
توضیح کد:این دستور یک دیالوگ کمک را برای کاربر به نمایش در‌می‌آورد. نویسنده‌ی GUI ، می‌تواند در این قسمت تمامی مواردی را که به کاربر در نحوه‌ی استفاده از برنامه کمک می‌کند، وارد کند. این دیالوگ را اگر یادتان باشد، می‌توانیم با کلیدهای Ctrl+H نیز باز کنیم.درنهایت به Callback منوی About ControlTool رفته و کد زیر را وارد کنید:
کد:
[COLOR=#333333][FONT=Tahoma]helpdlg('Created by Mojtaba Ayati nia   Email: [COLOR=#888888]mjt.atn@gmail.com[/COLOR]','About ControlTool');[/FONT][/COLOR]
توضیح کد:این کد یک دیالوگ از نوع کمک را ایجاد می‌کند که شامل اطلاعاتی درباره‌ی سازنده‌ی برنامه و... می‌باشد. شما می‌توانید اسم و دیگر مشخصات خودتان را وارد کنید.در این مرحله کدنویسی به پایان رسیده و می‌توانیم GUI را اجرا کنیم.

gui13.jpg

gui14.jpg


از لینک زیر می‌توانید این GUI را دریافت کنید:
 

پیوست ها

  • ControlTool.rar
    26.9 کیلوبایت · بازدیدها: 0
بالا