ذخیره داده ها از سیمولینک

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

داده های شبیه سازی

داده‌های شبیه‌سازی می‌توانند شامل هر ترکیبی از سیگنال، زمان، خروجی، وضعیت و داده‌های ذخیره‌سازی داده باشند.

ذخیره داده‌های شبیه‌سازی شامل ذخیره مقادیر سیگنال در فضای کاری MATLAB یا در فایل MAT در طول شبیه‌سازی برای تجزیه و تحلیل بعدی و پس‌پردازش است. ذخیره داده به عنوان ثبت داده یا ذخیره داده های شبیه سازی نیز شناخته می شود.

می توانید داده ها را در چندین فرمت وارد کنید:

  • SimulationData.Dataset
  • ساختار
  • ساختار با زمان
  • سری زمانی
  • آرایه

تبدیل داده‌های ثبت‌شده در فرمت‌های دیگر را به قالب Dataset برای ساده‌سازی پس‌پردازش در نظر بگیرید. برای اطلاعات بیشتر، تبدیل مجموعه داده برای داده های ثبت شده را ببینید.

همچنین می توانید از داده های ثبت شده به عنوان ورودی برای شبیه سازی یک مدل استفاده کنید.

ثبت داده های شبیه سازی

شما می توانید از یک یا چند مورد از این تکنیک ها برای ثبت داده های شبیه سازی استفاده کنید :

  • استفاده از output در زیرسیستم ها به منظور ثبت خروجی داده ها با استفاده از تکنیک output logging ::: این روش در دسته روش هایی بدون بکارگیری بلوک در شبیه سازی محسوب می شود و با تنظیم داده مورد نظر در ساختار onfiguration در Simulink editor قابل انجام است.
  • مهمترین عملیات به منظور ذخیره داده های سیمولینک استفاده از بلوک های موجود در Simulink/simks می باشد. در اینجا بلوک هایی همچون Scope ، To file ، To workspace قرار دارند که می توانند عملیات ذخیره سازی داده ها را انجام دهند .
شکل 1 1 300x195 ذخیره داده های سیمولینک ، تابع و اسکریپت در متلب
شکل 1 ) نمایی از بلوک های زیرشاخه Simulink/sinks به منظور ذخیره یا نمایش داده ها
  • استفاده از viewer بر روی هر سیگنالی در سیمولینک : این عملیات را می توانید به صورت نمایش داده شده در شکل زیر انجام دهید.
    شکل 2 نحوه فعالسازی viewer بر روی سیگنال مورد نظر در سیمولینک متلب 300x207 ذخیره داده های سیمولینک ، تابع و اسکریپت در متلب
شکل 2 ) نحوه فعالسازی viewer بر روی یک سیگنال فرضی در سیمولینک متلب

با انجام این کار یک scope مجازی بر روی سیگنال مورد نظر به شکل زیر فعال می شود که با دابل کلیک بر روی آن می توانید سیگنال مورد نظر را نمایش دهید.
شکل 3 شکلی از scope بر روی سیگنال که بصورت مجازی فعال شده است 300x88 ذخیره داده های سیمولینک ، تابع و اسکریپت در متلب

شکل 3 ) شکلی از scope بر روی سیگنال که بصورت مجازی فعال شده است
تنظیمات بلوک scope

Scope در سیمولینک متلب یک بلوک ساده به منظور نمایش و یا ذخیره سازی داده های سیمولینک می باشد. این بلوک دارای تنظیماتی است که بایستی حتما در نظر گرفته شود. به منظور انجام این تنظیمات با دابل کلیک بر روی بلوک scope و کلیک بر روی parameters به شکل زیر ادامه می دهیم :

شکل 4 نحوه تنظیم پارامترهای بلوک scope 300x195 ذخیره داده های سیمولینک ، تابع و اسکریپت در متلب
شکل 4 ) نحوه تنظیم پارامترهای بلوک scope

حال تنظیمات بصورت شکل زیر نمایش داده می شود که در حالت دیفالت قرار دارند.

شکل ۵ نمایش تنظیمات بلوک scope در حالت دیفالت 300x260 ذخیره داده های سیمولینک ، تابع و اسکریپت در متلب

شکل 5 ) مایش تنظیمات بلوک scope در حالت دیفالت

آنچه در این تنظیمات مهم است در نظر گرفتن سه مجموعه تغییرات کلی برای آن است که اولین آن بخش General می باشد. در این بخش مهمترین تنظیم تعداد محورها می باشد که در حالت دیفالت برابر ۱ می باشد و با افزایش آن می توان تعداد سیگنال های نمایش داده شده را به صورت مستقل (و نه ادغام شده بر روی هم) نمایش داد. در همینجا بهتر است اشاره شود که به منظور ادغام دو یا چند نمودار و احتمالا مقایسه نموداری بایستی از بلوک Mux‌ در شبیه سازی استفاده کرد. این بلوک می تواند چندین نمودار را در خود بصورت برداری ادغام کرده و به scope‌ انتقال دهد که در نتیجه می توان این نمودارها را به صورت رنگ های مختلف مشاهده و مقایسه کرد.

دومین بخش تنظیمات History می باشد. این تنظیمات بصورت شکل زیر می باشد :

شکل ۶ تنظیم بخش history از تنظیمات بلوک cope 300x258 ذخیره داده های سیمولینک ، تابع و اسکریپت در متلب

شکل ۶ ) تنظیم بخش history از تنظیمات بلوک cope

اولین نکته در این تنظیم برداشتن تیک مربوط به محدودسازی ذخیره داده ها می باشد. این تنظیم باعث می شود که در انتهای شبیه سازی بتوانید تمامی نقاط نموداری را از ابتدا تا انتها مشاهده کنید. (البته استثنا در این خصوص احتمال پر شدن حافظه سیستم می باشد که در این صورت برخی اسکوپ ها ممکن است هیچ نمایشی از داده ها به شما ارائه ندهند).

دومین تنظیم این بخش امکان ذخیره داده مورد نظر در workspace (ورک اسپیس) متلب می باشد. به این منظور نیاز است تا تیک مربوطه فعال شده و سپس نام مورد نظر جهت ذخیره داده و فرمت ذخیره سازی تعیین شود. (پیشنهاد می شود به منظور رسم دقیق داده های مورد نظر فرمت مورد نظر structure with time  انتخاب شود)

سومین بخش از تنظیمات scope مربوط می شود به styles که پیشنهاد می شود بدون تغییر باقی بماند.

تنظیمات بلوک to workspace

یکی دیگر از بلوک های متداول به منظور ذخیره داده های سیمولینک در متلب استفاده از بلوک to workspace می باشد. این بلوک نمی تواند همانند بلوک scope تصویر گرافیکی از داده مورد نظر در سیمولینک ارائه دهد ولی از طرفی فضای حافظه RAM از سیستم را اشغال نکرده و باعث روانتر شدن سیمولینک در شرایط سنگین بودن شبیه سازی خواهد شد. این بلوک در زیرشاخه کتابخانه ای Simulink / Sinks قرار دارد. شکل زیر تنظیمات بلوک را نشان می دهد که با دو بار کلیک بر روی بلوک در محیط شبیه سازی نمایش داده می شود.

شکل 7 نمایش تنظیمات بلوک to workspace در محیط سیمولینک متلب 248x300 ذخیره داده های سیمولینک ، تابع و اسکریپت در متلب

شکل 7 ) نمایش تنظیمات بلوک to workspace در محیط سیمولینک متلب

دو تنظیم مهم در اینجا وجود دارد که اولین مورد نام مورد نظر برای ذخیره داده می باشد که بایستی به شکل استاندارد انتخاب شود. اما دومین و مهمترین مورد که در scope نیز تعریف شده بود فرمت انتخابی برای ذخیره داده مورد نظر می باشد. این مورد می تواند timeseries ، array ، structure و یا structure with time باشد که من همواره نوع structure with time را انتخاب می کنم چرا که رسم داده ها با این ساختار به سادگی انجام می شود و توضیح این کار در پست (کلیک کنید) تشریح شده است.

آنچه از نظر نگارنده مهم است در خصوص ذخیره داده ها از محیط سیمولینک بیان شد. حال آنکه ابزار دیگری نیز در همین کتابخانه Simulink / sinks به منظور ذخیره داده ها تعریف شده است. اما با توجه به اینکه با بکارگیری دو بلوک scope و to workspace قادر به ذخیره هر نوع داده ای از سیمولینک خواهید بود نیازی به بکارگیری سایر المان های مورد نظر نمی باشد.

ذخیره داده ها از محیط کدنویسی

محیط کدنویسی شامل فایل های script و تابع یا همان function خواهد بود. بطور کلی هر آنچه که شما در script استفاده می کنید بطور مستقیم با نام متغیر مورد نظر ذخیره خواهد شد. اما در این میان مهم است که بتوانید داده هایی که به صورت یک سری تعریف می کنید را ذخیره کنید. به این منظور نیاز است که همواره در ابتدای کار کدنویسی در script متلب آرایه های مورد نظر را تعریف کنید. این تعریف به سادگی با انجام کد زیر میسر خواهد شد.

clc

clear

close

%%

A = [];

B = [];

در اینجا توانسته ایم دو آرایه تهی را با نام های A و B در ابتدای کد تعریف کنیم. آنچه که بیان شد در حلقه های برنامه نویسی نظیر while و for و … اهمیت پیدا خواهد کرد. بطور مسلم شما نیاز دارید تا داده های به شکل آرایه خود را در این حلقه ها ذخیره کنید و سپس از آنها رسم یا پلات (plot) بگیرید و یا اینکه از آن داده ها در توابع داخل فایل script استفاده کنید. به این منظور بایستی قبل از حلقه for مورد نظر یک اندیس با مقدار اولیه صفر در برنامه تعریف کنید. در ادامه که وارد حلقه for می شوید می توانید با تغییر پله ای با گام های یک واحدی برای اندیس مورد نظر ، در طول آرایه حرکت کرده و مقادیر جدید را به آرایه اضافه کنید. این مورد در کد زیر انجام شده است :

clc

clear

close

%%

A = [];

B = [];

m = 0;

for i=0:100

   

    m = m+1;

    A(m)=rand();

    B(m)=A(m)^2;

   

end

اندیس m با مقدار اولیه صفر تعریف شده است که در حلقه for به صورت یک واحدی افزایش می یابد.

ذخیره داده ها از محیط تابع

ذخیره داده ها از محیط تابع قدری پیچیده تر است چرا که در محیط تابع داده ها بصورت خودکار در workspace متلب ذخیره نخواهند شد و شما بایستی ابتدا این مقادیر را به عنوان خروجی تابع تعریف کنید. در ادامه در فایل اسکریپت اصلی که این تابع فراخوانی شده است با نسبت دادن یک متغیر جدید نسبت به ذخیره این داده اقدام کنید. به عنوان مثال به بخشی از کد script زیر که در انتها به یک تابع ختم شده دقت کنید :

clc

clear

close all

warning(‘off’);

%% main

min = 20;

car_position = [1 1 1 1];

loading = [0 0 0 0];

pinC = [0 0 0 0];

pinH = [0 0 0 0];

unloading = zeros(4,9);

status = [0 0 0 0];

car_call = zeros(4,9);

car_assignment = [0 0 0 0];

hall_request = [0 0 0 0];

dir_hall_requst = [];

moving_status = [0 0 0 0];

Wait = [0 0 0 0];

% priority_index = [];

wait_vect = [];

dist_vect = [];

% Traffic generation

hall_requestx = Traffic_gen( min );

تابع traffic_gen دارای یک ورودی min و یک خروجی hall_requestx می باشد. آنچه بدیهی است متغیرهای داخل تابع ذخیره نخواهند شد و تنها خروجی تابع در دسترس می باشد. حال در ادامه می توانید با نسبت دادن یک متغیر فرضی خروجی تابع را ذخیره کنید. بصورت زیر :

hall_requestx = Traffic_gen( min );

x2 = hall_requestx;

حال x2 در workspace متلب برای شما ذخیره خواهد شد.

منبع : برق تِک

About برق تِک

Leave a Reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *