راهنمای کامل متغیرهای متن و قوانین طراحی سفارشی در KiCad - قسمت 31 آموزش KiCad

Kicad قسمت 31
13 بازدید
۱۴۰۴-۰۳-۱۸
12 دقیقه

متغیرهای متن

Kicad از متغیرهای متن پشتیبانی می‌کند. این قابلیت به شما اجازه می‌دهد تا نام متغیر را با یک‌رشته متن تعریف شده جایگزین کنید. این جایگزینی هر جایی که نام متغیر در داخل متن جایگزینی متغیر $ {VARIABLENAME} استفاده شود اتفاق می‌افتد.

شما می‌توانید متغیرهای متن پروژه را در پنجره‌های board setup و شماتیک تعریف کنید. متغیرهای متن پروژه برای کل پروژه تعریف شده‌اند؛ بنابراین متغیر متن پروژه‌ای که در ویرایشگر شماتیک تعریف شده است می‌تواند در ویرایشگر برد نیز استفاده شود.

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

نام متغیر

توضیح

COMMENT1 – COMMENT9

محتویات فیلد Comment<n> صفحه ترسیم

COMPANY

محتویات فیلد Company صفحه ترسیم

CURRENT_DATE

تاریخ امروز به فرمت ISO

FILENAME

نام فایل برد به همراه یک پسوند فایل

FILEPATH

مسیر کامل فایل برد به همراه یک پسوند

ISSUE_DATE

محتویات فیلد Issue Date صفحه ترسیم

KICAD_VERSION

ورژن کنونی Kicad. این متغیر تنها در فیلدهای صفحه ترسیم موجود هست.

LAYER

لایه شی. در فیلدهای فوت‌پرینت این لایه فوت‌پرینت والد (parent) است. در فیلدهای صفحه ترسیم این مورد به لایه ترسیم مقرر می‌شود.

PAPER

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

PROJECTNAME

نام پروژه بدون یک پسوند فایل

REVISION

محتویات فیلد Revision برگه ترسیم

TITLE

محتویات فیلد Title برگه ترسیم

<variablename>

محتویات متغیر متن پروژه <variablename>.

<fieldname>

محتویات فیلد فوت‌پرینت <fieldname>. فیلدها تنها می‌توانند از داخل شی والد (parent) خود در دسترس قرار بگیرند بنابراین فیلدهای فوت‌پرینت می‌توانند از دیگر فیلدها یا متن داخل فوت‌پرینت در دسترس باشند. هر دو فیلدهای فوت‌پرینت داخلی و فیلدهای تعریفی کاربر از سمبل مربوطه در دسترس هستند. فیلدهای فوت‌پرینت داخلی از تمامی حروف بزرگ استفاده می‌کنند. برای مثال برای دسترسی به یک مقدار فوت‌پرینت از ${VALUE} استفاده کنید.

فیلدهای فوت‌پرینت داخلی موارد زیر هستند:

FOOTPRINT_LIBRARY, FOOTPRINT_NAME, LAYER, NET_CLASS(<pad_number>), NET_NAME(<pad_number>), PIN_NAME(<pad_number>), REFERENCE, SHORT_NET_NAME(<pad_number>), VALUE.

<refdes>:<fieldname>

محتویات فیلد <fieldname> در <refdes> فوت‌پرینت.

هر دو فیلدهای تعریفی کاربر و فوت‌پرینت داخلی از سمبل مربوطه موجود هستند. فیلدهای فوت‌پرینت داخلی از لغات بزرگ استفاده می‌کنند. برای مثال به منظور دسترسی به مقدار U1 از ${U1:VALUE} استفاده کنید. فیلدهای فوت‌پرینت داخلی موارد زیر هستند:

FOOTPRINT_LIBRARY, FOOTPRINT_NAME, LAYER, NET_CLASS(<pad_number>), NET_NAME(<pad_number>), PIN_NAME(<pad_number>), REFERENCE, SHORT_NET_NAME(<pad_number>), VALUE.

قوانین طراحی سفارشی

سیستم قانون طراحی سفارشی Kicad امکان ایجاد قوانین طراحی که نسبت به قوانین کلی و عمومی در صفحه Constraints پنجره Board Setup مشخص‌تر هستند را فراهم می‌کند. قوانین طراحی سفارشی کاربردهای وسیعی دارند؛ اما در کل آنها به‌منظور اعمال قوانین خاصی به یک قسمت برد مثل یک گره خاص یا کلاس گره، یک منطقه خاص و یا یک فوت‌پرینت خاص استفاده می‌شوند.

قوانین طراحی در یک فایل جداگانه با پسوند Kicad_dru ذخیره می‌شوند. زمانی که شما شروع به اضافه‌کردن قوانین سفارشی به یک پروژه می‌کنید این فایل به شکل خودکار به یک پروژه اضافه می‌شود. اگر شما در حال استفاده‌کردن از قوانین سفارشی در طراحی خود هستید، زمانی که بک‌آپ می‌گیرید یا به یک سیستم کنترل ورژن کامیت می‌کنید (نرم‌افزار Git) از ذخیره‌شدن فایل kicad_dru به همراه kicad_pcb و kicad_pro اطمینان حاصل کنید.

✅ نکته

فایل kicad_dru به شکل خودکار توسط kicad مدیریت شده و نباید توسط یک ویرایشگر متن خارجی ویرایش شود. همیشه از صفحه Custom Rules در پنجره Board Setup به‌منظور ویرایش قوانین طراحی سفارشی استفاده کنید.

ویرایشگر قوانین سفارشی

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

ویرایشگر قوانین سفارشی تکمیل‌سازی خودکار حساس به متن را نیز فراهم می‌آورد تا خصوصیات و لغات کلیدی معتبر را به شما پیشنهاد بدهد. منوی پیشنهاد تکمیل‌سازی به شکل خودکار ظاهر می‌شود هرچند که به شکل دستی با فشردن کلید Ctrl+Space نیز می‌تواند باز شود.

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

متن قانون سفارشی

زبان قانون سفارشی در KiCad مبتنی بر عبارات S است و امکان تعریف قوانین طراحی پیشرفته‌ای را فراهم می‌کند که با محدودیت‌های داخلی پیش‌فرض قابل بیان نیستند. هر قانون شامل یک condition (برای تعیین موارد تطابق) و یک constraint (برای اعمال محدودیت) است.

قواعد نگارشی این زبان شامل موارد زیر است:

  • از پرانتزها برای تعریف ساختار استفاده می‌شود که باید به‌درستی جفت باشند.

  • کلمات کلیدی و مقادیر با فاصله (space، تب، یا newline) از هم جدا می‌شوند.

  • رشته‌های بدون فاصله می‌توانند بدون نقل‌قول نوشته شوند؛ اما رشته‌های دارای فاصله باید با یا محصور شوند.

  • نقل‌قول‌های تودرتو با ترکیب ” و ‘ قابل استفاده هستند.

  • استفاده از خطوط جدید بین بندها ضروری نیست اما برای خوانایی توصیه می‌شود.

در مستندات، مقادیر داخل < > اجباری و مقادیر داخل [ ] اختیاری یا وابسته به شرایط هستند.

فایل Custom Rules باید با یک هدر ورژن که ورژن زبان قوانین را تعریف می‌کند شروع شود. از Kicad 8.0 ورژن 1. است. متن هدر ورژن (version <number>)  می باشد. بنابراین در Kicad 8.0 هدر باید بخواند:

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

مثال: اگر قانونی برای فاصله ترک‌ها در گره HV دارید و قانونی دیگر برای همه اشیای داخل یک منطقه، قانون مربوط به HV باید پایین‌تر (یعنی بعدتر) نوشته شود تا اول بررسی شود.

هر قانون شامل موارد زیر است:

  • یک نام (برای نمایش در گزارش DRC)

  • یک یا چند بند constraint (برای تعریف محدودیت)

  • بند condition (اختیاری، برای تعیین هدف قانون)

  • بند layer (اختیاری، برای مشخص‌کردن لایه‌ها)

  • بند severity (اختیاری، برای تعیین شدت خطا)

فایل قوانین سفارشی ممکن است شامل کامنت‌ها برای توصیف قوانین باشند. کامنت‌ها به‌وسیله هر خط که با کاراکتر # شروع می‌شوند (شامل فاصله نمی‌شود) نشان داده می‌شوند. شما می‌توانید ctrl + / را برای کامنت کردن و یا از کامنت برداشته‌شدن خطوط به شکل خودکار فشار دهید.

بند (Clause) لایه

بند layer تعیین می‌کند که قانون بر روی چه لایه‌ای عمل می‌کند. درحالی‌که لایه اشیا می‌توانند در بند condition همان‌طور که در زیر توضیح داده شده آزمایش شوند، استفاده از بند layer بهره‌وری  بیشتری دارد.

مقدار در بند layer می‌تواند نام هر لایه بردی باشد، لغات کلیدی میان‌بر outer برای تطابق‌دادن لایه‌های مسی بالا و پایین (F.Cu و B.Cu) و inner برای تطابق‌دادن هر لایه مسی داخلی است.

اگر بند layer حذف شود قانون به‌تمامی لایه‌ها اعمال خواهد شد.

تعدادی مثال:

بند میزان شدت

بند severity هر موقع قانون نقض شود، شدت نقض DRC را تعیین می‌کند.

مقادیر ممکن error , warning, ignore  و exclusion هستند. قوانین نادیده گرفته شده توسط مسیریاب تعاملی نظارت نمی‌شوند و نقض قوانین در پنجره DRC نشان داده نمی‌شوند اگرچه قوانین نادیده گرفته شده برای منطبق کردن ارزیابی می‌شوند و بنابراین هنوز می‌توانند قوانین قبلی را باطل کنند. قوانین Errors, warnings و excluded همگی توسط مسیریاب تعاملی نظارت می‌شوند و نقض قوانین زمانی که فیلترهای مناسب انتخاب شده باشند در پنجره DRC نمایش داده می‌شوند.

✅ نکته مهم

تنظیم کردن شدت قوانین به ignore، قانون را غیرفعال نمی‌کند بلکه تنها تاثیرات آن غیرفعال می‌شود. قانون همچنان ارزیابی شده و هنوز هم می‌تواند قوانین گذشته را باطل کند.

بندهای Condition

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

در شرایط، اشیای در حال بررسی با نمادهای A و B شناخته می‌شوند و ترتیب آن‌ها اهمیتی ندارد. شرط باید به یک مقدار بولین (true یا false) ختم شود. اگر نتیجه true باشد، قانون روی آن جفت شی اعمال می‌شود.

هر شی دارای ویژگی‌ها (properties) و توابع (functions) خاصی است که می‌توان در شرط‌ها استفاده کرد. قالب نوشتار به شکل <object>.<property> یا <object>.<function>(arguments) است.

✅ نکته

وقتی که شما <object>. را در ویرایشگر متن تایپ می‌کنید (A. , B., AB.) یک لیست تکمیل‌سازی خودکار باز خواهد شد که شامل تمام خصوصیات شی که می‌تواند استفاده شود است.

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

==

مساوی با

!=

مساوی نیست با

>, >=

بزرگتر یا بزرگتر مساوی

<, <=

کوچکتر یا کوچکتر مساوی

&&

و

||

یا

!

نفی (تکی)

برای مثال A.NetClass == ‘HV’ تنها به مواردی اعمال می‌شود که بخشی از کلاس گره “HV” هستند و A.NetClass != B.NetClass  به مواردی اعمال می‌شود که در کلاس‌های گره متفاوتی هستند. پرانتزها می‌توانند برای شفاف‌کردن ترتیب عملیات ها در عبارات پیچیده استفاده بشوند؛ اما وجودشان الزامی نیست. تمامی عملگرهای بولین دارای اولیت مشابهی هستند و به ترتیب چپ به راست ارزیابی می‌شوند.

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

mm

Millimeters

mil, th

Thousandths of an inch (mils)

in, “

Inches

deg

Degrees

rad

Radians

✅ نکته

واحدهای استفاده شده در قوانین طراحی مستقل از واحدهای نمایش در ویرایشگر PCB هستند.

شروط عددی می‌توانند از عبارات ریاضی ساده استفاده کنند برای مثال (condition “A.Hole_Size_X == 1.0mm + 0.1mm”).

بندهای Constraint

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

محدودیت‌ها معمولاً شامل مقادیر حداقل (min)، حداکثر (max) و بهینه (opt) هستند. مقادیر min و max برای بررسی‌های DRC به کار می‌روند و مقدار opt برای ارائه مقدار پیش‌فرض مناسب در برخی ابزارها (مثل مسیریاب زوج تفاضلی) استفاده می‌شود. تا زمانی که مقدار بین min و max باشد، خطایی تولید نمی‌شود.

این مقادیر به‌صورت (min <مقدار>)، (opt <مقدار>)، و (max <مقدار>) تعریف می‌شوند. همچنین می‌توان از عبارات ساده‌ی ریاضی در تعیین مقدار عددی محدودیت‌ها استفاده کرد، مانند:

نوع محدودیتنوع گزاره (Argument)توصیف
annular_widthmin/opt/maxضخامت حلقه ویاها را بررسی می‌کند.
assertionboolean expressionصحیح بودن عبارت بولین را بررسی می‌کند. اگر عبارت صحیح نباشد یک خطای DRC تولید خواهد شد. این عبارت می‌تواند از هر خصوصیت لیست شده در بخش Object Properties استفاده کند.
clearanceminفاصله الکتریکی بین اشیا مسی با گره‌های متفاوت را مشخص می‌کند. (اگر دوست دارید فاصله بین اشیا را سوای نوع گره مشخص کنید، physical_clearance را ببینید.) به‌منظور مجاز کردن اشیا مسی برای هم مرز شدن و برخورد داشتن، یک محدودیت فاصله با مقداری کمتر از صفر وارد کنید (مثلاً -1 ).
connection_widthminضخامت اتصالات بین پدها و مناطق را بررسی می‌کند. برای هر اتصال پدی که باریک‌تر از مقدار min باشد یک خطا تولید خواهد شد.
courtyard_clearanceminفاصله بین حریم فوت‌پرینت را بررسی کرده و درصورتی‌که فاصله دو حریم کمتر از مقدار min باشد یک خطای ارور تولید خواهد شد. اگر فوت‌پرینتی دارای یک‌شکل حریم نباشد هیچ خطایی از این محدودیت تولید نخواهد شد. به‌منظور مجاز کردن حریم اشیا برای هم مرز شدن یا برخورد یک محدودیت courtyard_clearance با مقدار min کمتر از صفر (برای مثال -1) ایجاد کنید.
diff_pair_gapmin/opt/maxفاصله بین ترک‌های کوپل یا مزدوج شده در یک زوج تفاضلی را بررسی می‌کند. ترک‌های کوپل شده بخش‌هایی هستند که با همدیگر موازی هستند. فاصله زوج تفاضلی روی قسمت‌های کوپل نشده یک زوج تفاضلی (برای مثال پایه گیری از یک قطعه) تست و امتحان نمی‌شود.
diff_pair_uncoupledmaxفاصله‌ای که در آن یک زوج تفاضلی از دیگر پلاریته ترک در جفت کوپل نشده کشیده می‌شود (برای مثال جایی که جفت از یک قطعه پایه گیری می‌شود یا هنگامی که در عبور از شی دیگری مثل یک ویا کوپلاژ خود را از دست می‌دهد.)
disallow
  • track
  • via
  • micro_via
  • buried_via
  • pad
  • zone
  • text
  • graphic
  • hole
  • footprint
عدم مجاز بودن یک یا چند شی که با فاصله از هم جدا می‌شوند را تعیین می‌کند. برای مثال (constraint disallow track) یا (constraint disallow track via pad). اگر یک شی از این نوع با شرط قانون منطبق شود، یک خطای DRC تولید خواهد شد. این محدودیت به‌مانند قانون keepout منطقه است با این تفاوت که می‌تواند برای محدودیت‌های keepout مشخص‌تری استفاده شود.
edge_clearancemin/opt/maxفاصله بین اشیا و لبه برد را بررسی می‌کند. این مورد می‌تواند به‌عنوان “تلرانس ساخت” متصور شود؛ زیرا که لبه برد شامل تمام آیتم‌های گرافیکی روی لایه Edge.Cuts و نیز هر سوراخ پد بیضی گون خواهد بود. به‌منظور مجاز دانستن هم مرزی و برخورد با لبه برد، محدودیت edge_clearance با مقدار min کمتر از صفر ایجاد کنید.
hole_clearanceminفاصله بین یک سوراخ پد یا ویا و اشیا مسی با یک گره متفاوت را بررسی می‌کند. فاصله از قطر سوراخ اندازه‌گیری می‌شود و نه مرکز آن.
hole_sizemin/maxاندازه (قطر) یک سوراخ در پد یا ویا را بررسی می‌کند. برای سوراخ‌های بیضی گون، قطر کوچک‌تر (minor) در برابر مقدار min (اگر وارد شده باشد) امتحان خواهد شد و قطر بزرگ‌تر (major) در برابر مقدار max امتحان خواهد شد (اگر معین شده باشد).
hole_to_holeminفاصله بین سوراخ‌های پد که به شکل مکانیکی سوراخ‌کاری شدند و ویاها را بررسی می‌کند. این فاصله بین قطرهای سوراخ اندازه‌گیری می‌شود و نه بین مرکز آنها. این محدودیت تنها برای محافظت از مته هست. فاصله بین ویاهای میکرو سوراخ شده با لیزر و دیگر سوراخ‌های مته‌کاری شده غیرمکانیکی بررسی نشده و فاصله بین اشکال بیضی گون و دیگر سوراخ‌های مته‌کاری شده با روش غیرمکانیکی نیز بررسی نمی‌شوند.
lengthmin/maxطول مسیر کشیده شده کل برای گره‌هایی که منطبق با شرط قانون هستند را بررسی می‌کند. درصورتی‌که هر گره از مقدار min کمتر بوده و از مقدار max بیشتر باشد یک خطای ارور تولید می‌شود. این محدودیت یک طول هدف را نیز معین می‌کند که توسط ابزار تنظیم طول برای هر گره‌ای که این قانون روی آن منطبق باشد قابل تنظیم است.
min_resolved_spokes0, 1, 2, 3, 4حداقل تعداد اتصالات یک پد (اسپوک‌ها) را بررسی می‌کند. اگر تعداد اسپوک‌های متصل به یک پد کمتر از مقدار تعیین شده باشد، خطا ایجاد می‌شود.
physical_clearanceminفاصله بین دو شیء روی هر لایه، حتی غیرمسی، را بررسی می‌کند. این تست عمومی‌تر است اما نسبت به تست clearance کندتر است.

اطلاعات
13
0
0
لینک و اشتراک
profile

Alex

متخصص الکترونیک

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
خانواده سیسوگ
سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer

نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله