]-->lang="fa-IR"> آموزش نکات پایه ای و مهم سیمولینک | مرکز درس

آموزش نکات پایه ای و مهم سیمولینک

آموزش کار با سیمولینک

در این مقاله از مرکز درس می خواهیم در ادامه ی آموزش نرم افزار متلب، این بار به سراغ سیمولینک که یک ابزار شبیه سازی موجود در نرم افزار MATLAB است برویم. این نرم افزار ،کاربردهای عمومی و فراوانی دارد که در این پست تمام نکات پایه ای و کاملا مهم که برای یادگیری سیمیولینک نیاز دارید را بصورت تصویری به شما آموزش می دهیم. یکی از مزایای اصلی سیمولینک توانایی مدلسازی یک سیستم غیر خطی است که تابع انتقال نمی تواند آن را انجام دهد. یکی دیگر از مزیت ها توانایی در نظر گرفتن شرایط اولیه است. وقتی تابع انتقال ساخته شود، شرایط اولیه صفر در نظر گرفته می شود.

این آموزش برگرفته از وب سایت رسمی دانشگاه میشیگان آمریکا می باشد.

آموزش کار با سیمولینک

آموزش کار با سیمولینک

در سیمولینک سیستم ها به صورت نمودارهای کلی روی صفحه نمایش کشیده می شوند . بسیاری عناصر نمودارهای کلی در دسترس هستند مواردی مثل توابع انتقالی، نقاط جمع بندی، و …. همچنین ابزارهای ورودی و خروجی مجازی مثل ژنراتور ها اسیلوسکپ ها . سیمولینک با MATLAB تلفیق می شود و داده ها می توانند بین برنامه ها به راحتی انتقال پیدا کند در این برنامه های آموزشی ما سیمولینک را برای مثال هایی از برنامه آموزشی MATLAB تا مدلسازی سیستم تلفیق می شود و داده ها می توانند بین برنامه ها به راحتی انتقال پیدا کنند. در این برنامه های آموزشی ما سیمولینک را برای مثال هایی از برنامه آموزشی MATLAB تا مدلسازی سیستم ها ، ساخت کنترل کننده ها به کار می بریم و همچنین شبیه سازی سیستم ها ، سیمولینک روی یونیکس ، مکینتاش و محیط های ویندوز حمایت می شود و در نسخه ی دانش آموزی MATLAB روی کامپیوتر های شخصی گنجانده می شود.

ایده ی پشت این برنامه های آموزشی این است که می توانید آنها را در یک پنجره ببینید درحالیکه سیمولینک اجرایی در یک پنجره دیگر است. فایل های مدلسازی سیستم می توانند از برنامه های آموزشی دانلود شوند و در سیمولینک باز شوند. شما این سیستم را اصلاح خواهید کرد و توسعه خواهید داد در حالیکه یادگیری سیمیولینک برای مدلسازی، کنترل و شبیه سازی سیستم استفاده می شود. ویندوز ها، آیکون ها ومنوهای آموزشی را برای ویندوز های واقعی سیمولینک ترکیب نکنید. اکثر تصاویر در این برنامه های آموزشی زنده نیستند. آنها فقط آنچه شما باید در ویندوز های سیمولینک خودتان ببینید را نشان می دهند. همه ی عملکرد های سیمولینک باید در ویندوز های سیمولینک خودتان انجام شوند.

شروع به کار سیمولینک

آموزش کار با سیمولینک

سیمولینک از دستور MATLAB آغاز می شود یعنی باید دستور زیر را وارد کرد : سیمولینک شما می توانید دکمه ی سیمولینک را در بالای پنجره ی MATLAB فشار دهید همانطور که در اینجا نشان داده شده است. وقتی آغاز می شود سیمولینک یک پنجره ی تکی حاصل می کند که اسم آن صفحه ی شروع سیمولینک است که در اینجا می توانید ببینید.

آموزش کار با سیمولینک

آموزش کار با سیمولینک

وقتی روی مدل Blank کلیک می کنید یک پنجره ی جدید ظاهر خواهد شد که در زیر نشان داده شده است.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_StartingSimulink_SimulinkModelWindow.png

فایل های مدل

در سیمو لینک یک مدل مجموعه ای ازبلوک ها است که به طور کلی یک سیستم را نمایش می دهند . علاوه بر ایجاد یک مدل از ابتدا ، مدل هایی که قبلاً ذخیره شده اند می توانند یا از منو فایل یا از دستور MATLAB بارگذاری شوند. به عنوان مثال  روی این لینک دانلود کنید وفایل را ذخیره کنید . با وارد کردن دستور زیر در پنجره دستوری MATLAB این فایل را در سیمولینک باز کنید. پنجره ای با مدل زیر باید ظاهر شود.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_ModelFiles_Simple.png

می توان با انتخاب NEW از File یک مدل جدید ایجاد کرد.

عناصر اصلی

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

بلوک ها

چندین گروه کلی از بلوک ها در یک کتابخانه ی سیمولینک وجود دارد:

  • منابع: برای ایجاد سیگنال های مختلف استفاده می شوند.
  • سینک ها: برای نمایش یا خروجی سیگنال ها به کار می روند.
  • مستمر: عناصر سیستم مستمر زمانی (توابع انتقال ، مدل های فضایی ، کنترل کننده ها ی PID)
  • مجزا: عناصر سیستم مجزای زمانی، خطی
  • عملیات ریاضی: شامل بسیاری عناصر معمول ریاضی است.
  • خروجی ها و سیستم های فرعی: شامل بلوک های مفید برای ساخت سیستم است.
بیشتر بخوانید :   ریخته گری در جواهرسازی

بلوک های دارای چندین خروجی صفر تا چند تایی است و همچنین خروجی های چند گانه پایانه های داده های ورودی که استفاده نشده اند توسط مثلث باز کوچک نشان داده می شود. پایانه های استفاده نشده توسط نقاط مثلثی نمایش داده می شوند . بلوک نشان داده شده دارای یک پایانه داده های ورودی سمت چپ و یک پایانه داده های استفاده نشده خروجی در سمت راست است.

خطوط

خطوط سیگنال ها را در جهت نشان داده شده توسط پیکان منتقل می کند. خطوط باید همیشه سیگنال ها را از پایانه خروجی یک بلوک که به پایانه ورودی یک بلوک دیگر منتقل می کند . یک سیگنال تقسیم سیگنال به هر کدام از بلوک های مبدأ است که در زیر نشان داده شده است. خطوط نمی توانند یک سیگنال به خط دیگر تزریق کند، خطوط باید از طریق استفاده از یک بلوک ترکیب شود. مثل :Summing junction . سیگنال می تواند یک سیگنال مدرج یا سیگنال برداری باشد . برای سیستم های تک ورودی و تک خروجی ، سیگنال های مدرج به طور کلی استفاده می شوند.برای سیستم های چند خروجی و چند ورودی (MIMO) ، سیگنال های برداری اغلب استفاده می شوند و شامل دو یا بیش از دو سیگنال مدرج است. نوع سیگنال حمل شده توسط خط به وسیله بلوک های روی انتهای خط تعیین می شوند.

یک مدل ساده شامل سه بلوک است: مرحله تابع انتقال و حوزه، مرحله یک بلوک منبع است که از یک سیگنال ورودی منشاء می شود. سیگنال از طریق خط در جهت پیکان به بلوک متوالی تابع انتقال منتقل می شود. بلوک تابع انتقال سیگنال ورودی و خروجی را اصلاح می کند و یک سیگنال جدید روی خط حاصل می کند .Scop . Scope یک بلوک Sink است که برای نمایش یک سیگنال استفاده می شود که خیلی شبیه اسیلکوپ است.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_ModelFiles_Simple.png

انواع زیادی بلوک ها در سیمولینک وجود دارد، برخی از آن در بخش بعدی بحث خواهد شد اکنون ما فقط سه نوع را در مدل ساده بررسی خواهیم کرد.

بلوک های اصلاح کننده (ویرایش کننده)

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BasicElements_ModifyingBlocks_TFParameters.png

یک بلوک می تواند توسط یک دابل کلیک اصلاح شود. مثلاً اگر شما روی بلوک تابع انتقالی در مدل ساده دابل کلیک کنید، شما باکس زیر را خواهید دید. باکس و یا گپ شامل زمینه هایی برای شمارش گروه تقسیم کننده ی تابع انتقال بلوک است . با وارد کردن یک برادر شامل ضرایب شمارش گروه تقسیم کننده ، تابع انتقال مورد نظر را می توان وارد کرد. برای مثال برای تغییر تقسیم کننده: مورد زیر وارد حوزه ی تقسیم کنید و دکمه ی Close را بزنیدو پنجره به صورت زیر تغییر خواهد کرد که تغییر در تقسیم کننده ی تابع انتقال را منعکس می کند.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BasicElements_ModifyingBlocks_Simple2.png

بلوک Step را می توان دابل کلیک کرد و باکس دیالگ زیر را به دست آورد.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BasicElements_ModifyingBlocks_StepOptions.png

پارامتر های پیش فرض در باکس دیالگ تابعی را ایجاد می کند که در ۱ ثانیه زمان رخ می دهد، از سطح اولیه ی صفر به سطح ۱ هر کدام از این پارامتر ها را می توان تغییر داد. قبل از ادامه دادن این دیالوگ را ببندید. پیچیده ترین این سه بلوکScope است . دابل کلیک کنید و یک صفحه نمایش خالی اسیلسکوب حاصل کنید.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BasicElements_ModifyingBlocks_Scope.png

وقتی شبیه سازی انجام شود، سیگنالی که وارد Scope می شود در این پنجره نمایش داده خواهد شد عملکرد مختصر Scope در این برنامه آموزشی پوشش داده نمی شود.

شبیه سازی های اجرایی

برای اجرای شبیه سازی ما با فایل مدل زیر کار خواهیم کرد : فایل را در سیمولینک دانلود و باز کنید وهمین دستور العمل را برای فایل دنبال کنید قبل از از شبیه سازی سیستم ، ابتدا پنجره ی Scope را با دابل کلیک روی بلوک Scope باز کنید.سپس برای آغاز شبیه سازی یا Run را از منوی شبیه سازی انتخاب کنید و یا دکمه ی Play را در بالای صفحه نمایش کلیک کنید یا ctrl-T را فشار دهید.

بیشتر بخوانید :   3 روش صحیح تست زنی

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_RunningSimulations_Simple2.png

شبیه سازی باید خیلی سریع اجرا شود و پنجره ی scope مانند زیر ظاهر خواهد شد.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_RunningSimulations_Start.png

اکنون پاسخ تا t=1 نباشد آغاز نمی شود .این نکته را می توان با دابل کلیک روی بلوک step تغییر داد. اکنون ما می توانیم پارامتر ها ی سیستم را تغییر دهیم . و مجدداً سیستم را شبیه سازی کنیم روی بلوک تابع انتقال دابل کلیک کنید وتقسیم کننده را تغییر دهید.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_RunningSimulations_Scope.png

شبیه سازی را مجدداً اجرا کنید و می توانید مورد زیر را در پنجره Scope ببینید . چون تابع انتقال پاسخ خیلی سریع دارد به بخش بسیار طریف پنجره ی Scope فشرده می شود. این مشکل Scope نیست بلکه مشکل خود شبیه سازی است سیمولینک سیستم را به مدت ۱۰ ثانیه شبیه سازی می کنداگر چه سیستم مدت کوتاهی بعد از یک ثانیه به حالت ثابت می رسد .

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_RunningSimulations_NewTFScope.png

برای اصلاح این امر، شما باید پارامتر های شبیه سازی را تغییر دهید. در پنجره مدل ، پارامتر های پیکربندی را از منو شبیه سازی انتخاب کنید . شما باکس دیالگ را خواهید دید.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_RunningSimulations_ConfigParameters.png

گزینه های پارامتر شبیه سازی زیادی وجود دارد، ما فقط به زمان های شروع و توقف می پردازیم ، که به سیمولینک می گوید در چه دوره ی زمانی شبیه سازی اجرا شود. زمان شروع را از ۰ تا ۸% تغییر دهید . زمان توقف را از ۱۰% تا ۲% تغییر دهید که فقط مدت کوتاهی بعد از سیستم کنترل می شود.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_RunningSimulations_Stop2Scope.png

باکس دیالگ را ببندید و شبیه سازی را مجدداً اجرا کنید. اکنون پنجره Scope باید نمایش بهتری از پاسخ Step فراهم کند که در زیر نشان داده شده است.

سیستم های سازنده

در این بخش، شما متوجه خواهید شد چگونه سیستم را در سیمولینک بسازیم و از بلوک های سازنده در کتابخانه های سیمولینک استفاده کنیم شما سیستم زیر را خواهید ساخت.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_FinalModel.png

اگر شما نیاز دارید که مدل کامل شده را دانلود کنید، اینجا کلیک راست کنید و سپس Sare Link را انتخاب کنید ابتدا شما تمام بلوک های ضروری از کتابخانه های بلوک جمع آوری خواهید کرد . سپس بلوک ها را طوری اصلاح خواهید کرد که مطابق با بلوک های مدل مورد نظر در بیایند . در نهایت شما بلوک ها را با خط ها متصل خواهد کرد تا سیستم کاملی را بسازید . سپس شما سیستم کامل را شبیه سازی می کنید تا عملکرد آن را اصلاح کنید. مراحل زیر را د نبال کنید تا بلوک های ضروری را جمع آوری کنید.

آموزش کار با سیمولینک

یک مدل جدید ایجاد کنید. شما پنجره ی مدل خالی به دست خواهید آورد . روی Tools Tab کلیک کنید و سپس جستجو گر کتابخانه را انتخاب کنید.

آموزش کار با سیمولینک

سپس روی منابع لیست شده در کتابخانه ی سیمولینک کلیک کنید.

آموزش کار با سیمولینک

این امر منابع را حاصل می کند. منابع برای ایجاد سیگنال ها استفاده می شوند.

آموزش کار با سیمولینک

بلوک Step را از پنجره منبع به سمت چپ پنجره مدل بکشید.

آموزش کار با سیمولینک

  1. روی عملیات ریاضی کلیک کنید . عملیات لیست شده در پنجره سیمولینک اصلی از این کتابخانه Sum و Gain را دارد پنجره مدل کنید و آن را سمت راست بلوک قرار دهید.
  2. روی لینک مستمر در پنجره ی سیمولینک اصلی کلیک کنید.
  3. ابتدا از این کتابخانه، بلوک کنترل کننده ی PID را وارد پنجره مدل کنید و آن را سمت راست بلوک Gain قرار دهید.
  4. از همین کتابخانه تابع انتقال را به پنجره مدل انتقال دهید و آن را سمت راست بلوک کنترل کننده ی PID قرار دهید.
  5. روی Sink ها در پنجره سیمولینک اصلی کلیک کنید.
  6. بلوک Scop را به سمت راست پنجره مدل بکشید.
  7. بلوک ها را ویرایش و اصلاح کنید.

آموزش کار با سیمولینک

این مراحل را به صورت صحیح دنبال کنید تابلوک های شما در مدلتان ویرایش شوند:

  1. روی بلوک Sun دابل کلیک کنید چون می خواهید ورودی دوم کم شود، + – را وارد لیست علامت ها کنید باکس دیالگ را ببندید.
  2. روی بلوک Gain دابل کلیک کنید. gain را به ۵/۲ تغییر دهید و باکس دیالوگ را ببندید.
  3. بلوک کنترل کننده PID را دابل کلیک کنید و proportion gain را به یک و integral gain را به ۲ تغییر دهید . باکس دیالوگ را ببندید.
  4. بلوک تابع انتقال را دابل کلیک کنید. شمارشگر را رها کنید اما تقسیم کننده را به { ۴ ۳ ۱ } تغییر دهید مدل مطابق زیر است.
  5. اسم بلوک کنترل کننده ی PID را به کنترل کننده ی PI با دابل کلیک روی کنترل کننده PID تغییر دهید.
  6. به طور مشابه اسم بلوک تابع انتقال را به plant تغییر دهید . اکنون همه ی بلوک ها به صورت صحیح وارد می شود. مدل شماه به صورت زیر ظاهر می شود.
بیشتر بخوانید :   ۱۰ نکته مهم و ابتدایی در HTML

اتصال بلوک ها با خطوط

اکنون که بلوک ها به صورت صحیح قرار گرفته اند، اکنون آنها را به همدیگر متصل می کنید .این مراحل را دنبال کنید . موس را از پایانه خروجی بلوک Step به ورودی مثبت ورودی Sun بکشید . یک انتخاب دیگر کلیک روی Step است و سپس کنترل کلیک روی بلوک Sun جهت اتصال به همدیگر شما راید مورد زیر را مشاهده کنید.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Phase7.png

خط حاصل باید یک سر پیکانی داشته باشد. اگر سر پیکانی باز و قرمز باشد به این معنی است که به هیچ شیء دیگری متصل نیست.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Phase8.png

شما می توانید خط سنی را ادامه دهد به عنوان پایانه خروجی . اگر می خواهید خط را مجدداً بکشید یا اگر خط به پایانه اشتباه متصل است شما باید خط را حذف کنید و آن را مجدداً بکشید . برای حذف یک خط روی آن کلیک کنید آن را انتخاب کنید و روی کلید حذف فشار دهید. خطی را بکشید بلوک sun را به ورودی Gain متصل کنید. همچنین خطی از Gain به کنترل کننده PI بکشید. یک خط از کنترل کننده PI به Plant بکشید و خطی از Plant به Scope اکنون مورد زیر را می بینید.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Phase9.png

خطی باقی مانده سیگنال بازخوردی است که به خروجی Plant متصل می شود و ورودی منفی بلوک Sun را دارد . این خط به دو طریق تفاوت دارد . چون این خط کوتاهترین مسیر را دنبال نمی کند پس باید در چند مرحله کشیده شود. خطی را از بخش منفی بلوک Sun به صورت مستقیم بکشید و موس را رها کنید پس خط ناقص است. از نقطه پایانی این خط کلیک کنید و به خط بین Plant و Scope بکشید. در نهایت برچسب ها در مدل جای می گیرند تا سیگنال ها شناسایی می شوند. بر ای قرار دادن برچسب در هر جایی از مدل در نقطه پایانی که می خواهید برچسب بزنید دابل کلیک کنید.در بالای خط بلوک Step دابل کلیک کنید.چون یک متن خالی می گیرید با یک پیکان ویرایشگر که در زیر نشان داده شده است.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Phase10.png

لا را در این باکس تایپ کنید، سیگنال مرجع را نامگذاری کنید و در خارج از آن کلیک کنید. سیگنال e را نامگذاری کنید، سیگنال کنترل (u) و سیگنال خروجی (y) به همین طریق مدل نهایی به شکل زیر حاصل می شود.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Phase11.png

برای ذخیره مدلتان Save as را از منو فایل انتخاب کنید. مدل کامل شده می تواند با کلیک راست دانلود شود و سپس انتخاب Sare link .

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_FinalModel.png

شبیه سازی

اکنون مدل کامل است شما می توانید مدل را شبیه سازی کنید. Run را از منو شبیه سازی انتخاب کنید تا شبیه سازی اجرا شود. روی بلوک Scope دابل کلیک کنید تا خروجی را ببینید و شما باید مورد زیر را مشاهده کنید:

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Simulation_Scope1.png

گرفتن متغیر ها از MATLAB

در برخی موارد، پارامتر هایی مثل gain ممکن است در MATLAB محاسبه شود تا در مدل سیمولینک استفاده شود. اگر به این صورت باشد، ضروری نیست که نتیجه ی محاسبه ی MATLAB را مستقیماً وارد سیمولینک کرد. مثلا ً فرض کنید gain را در MATLAB در متغییر K محاسبه کردیم. دستور زیر را وارد کنید و به این صورت حاصل می شود. K=2.5

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Variables_GainBlock.png

این متغیر را می توان در بلوک Gain سیمولینک استفاده کرد. در مدل سیمولینک شما روی بلوک Gain دابل کلیک کنید.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Variables_Model.png

این باکس دیالگ را ببندید. توجه کنید که بلوک Gain در مدل سیمولینک متغیر K را نشان می دهد.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Variables_Scope1.png

اکنون می توانید شبیه سازی را اجرا کنید و خروجی را روی scope ببینید. نتیجه مطابق زیر است.

آموزش کار با سیمولینکhttp://ctms.engin.umich.edu/CTMS/Content/Basics/figures/SimulinkBasicsTutorial_BuildingSystems_Variables_Scope2.png

اکنون اگر هر محاسبه ای در MATLAB انجام شود تا هر کدام از متغیر های استفاده شده در مدل سیمولینک تغییر پیدا کند، شبیه سازی از مقادیر جدید در دفعه ی بعدی اجرا استفاده می کند. برای اجرای این مورد در MATLAB ، K را تغییر دهید و K=5 را وارد کنید مجدداً سیمولینک را آغاز کنید و پنجره ی Scope را باز کنید . شما خروجی زیر را خواهید دید که gain جدید و بالاتری منعکس می کند.

ساسان سروشه

نوشته‌های مرتبط

دیدگاه‌ها

*
*