اهداف آموزش: در این آموزش شما با نحوه اسکریپت نویسی در آباکوس توسط زبان برنامه نویسی پایتون شامل دستورات مقدماتی زبان برنامهنویسی Python و مقدمات لازم جهت شروع اسکریپت نویسی (Scripting) در ABAQUS آشنا خواهید شد.
سرفصلهای این آموزش:
- رابط کاربری Abaqus/CAE و Abaqus Scripting
- اسکریپت چیست؟
- مقدمهای بر پایتون جهت اسکریپتنویسی در آباکوس
- منابع جهت کد نویسی در آباکوس
تذکر: در تاریخ 17 آبان 95 آموزشی تحت عنوان “مقدمهای بر سابروتین نویسی در آباکوس توسط فرترن – FORTRAN” در سایت درج شد.
رابط کاربری Abaqus/CAE و Abaqus Scripting
شاید دانستن این نکته برای شما جالب باشد که وقتی شما از محیط کاربری Abaqus/CAE برای ایجاد مدل هندسی و مشاهده نتایج استفاده میکنید (در اصطلاح GUI)، دستورات اجرا شده توسط شما پس از هر عملی به شکل یک کد ایجاد و ذخیره خواهد شد. این دستورات حاوی اطلاعاتی از نحوه ایجاد مدل هندسی و تغییر تنظیمات مربوطه در تمامی پنجرههایی است که در هر ماژول از آن استفاده کردهاید. GUI یا رابط کاربری آباکوس، تمامی دستورات مورد نظر را در یک زبان برنامهنویسی شیگرا به نام Python ایجاد خواهد کرد. تمامی دستورات ایجاد شده توسط هسته مرکزی یا Kernel آباکوس ترجمه شده و بر اساس تنظیمات ایجاد شده در آن، کاربر نمایش بصری از دستور صادر شده را مشاهده میکند. در واقع Kernel مغز متفکر پشت پرده Abaqus/CAE و GUI رابط کاربری بین کاربر و Kernel است.
اسکریپت چیست؟
مطابق توضیحات بالا اکنون میدانید که تمامی اعمال و دستورات شما در آباکوس در قالب خطوط دستوری ذخیره میشود. به عبارت بهتر، رابط کاربری که شما از آن استفاده میکنید تنها یک محیط بصری و گرافیکی است که تبدیل آن به کد پایتون و تفسیر کد ایجاد شده بر عهده هسته مرکزی یا همان مغز متفکر آباکوس است. محیط اسکریپتنویسی آباکوس این امکان را برای شما فراهم میکند تا به شکل مستقیم با Kernel نرمافزار ارتباط برقرار کرده و به نوعی GUI تعبیه شده را فراموش کنید. فایلی که حاوی دستورات محیط اسکریپتنویسی آباکوس است یک اسکریپت نامیده میشود. شما میتوانید از یک اسکریپت در موارد زیر استفاده کنید:
- انجام یک عمل یا دستور تکراری. برای مثال میتوانید اسکریپتی ایجاد کنید که به محض آغاز Abaqus/CAE کتابخانه کاملی از مواد مهندسی مورد نظر و پرکاربرد شما را ایجاد کند تا با ورود به ماژول Property در اختیار شما قرار گیرد. همچنین میتوانید اسکریپتی بنویسید که در ماژول Job به اجرای حل بپردازد.
- ایجاد یک مسئله پارامتریک. برای مثال، میتوانید اسکریپتی بنویسید که به شکل گام به گام به اصلاح مدل هندسی پرداخته و نتایج تحلیل را آنالیز کند. این اسکریپت میتواند به نحوی نوشته شود تا به اطلاعات خروجی دسترسی داشته، نتایج مورد نظر را نمایش دهد و دادههای خاص مورد نظر کاربر را نیز ثبت نماید.
- میتوانید از طریق اسکریپتنویسی به ایجاد و اصلاح مدلهایی بپردازید که به شکل مستقیم در Abaqus/CAE در حال ایجاد کردن آن هستید. در واقع رابط کاربری اسکریپتنویسی در آباکوس، یک API یا Application Programming Interface برای مدلهای ایجاد شده توسط کاربر است.
- دسترسی به دادههای خروجی. برای مثال، ممکن است نیاز داشته باشید تا به کمک نتایج تحلیل، پسپردازش دلخواه خودتان را ایجاد نمایید. شما میتوانید دادههای دلخواه خود را در Output Database ثبت کرده و از طریق ماژول Visualization به مشاهده نتایج دلخواهتان بپردازید.
از آنجایی که برای درک و یا نوشتن اسکریپت اختصاصی مورد نظرتان به آشنایی کامل با زبان برنامهنویسی پایتون نیاز خواهید داشت، در ادامه به شکل بسیار مقدماتی، مفاهیم اولیه زبان Python را که در اسکریپتنویسی در آباکوس به آن نیاز پیدا خواهید کرد به شما معرفی میکنیم. توصیه ما این است جهت درک کامل و جامع موضوع، به منبع معرفی شده در انتهای پست مراجعه نمایید.
مقدمهای بر پایتون (Python)
پایتون زبان برنامهنویسی متن باز یا Open Source، شیگرا و داینامیک است که کدهای نوشته شده توسط آن در محدوده وسیعی از پلتفرمها نظیر ویندوز، مک و دستگاههای قابل حمل نظیر تلفنهای همراه قابل اجرا و استفاده میباشد. پایتون را باید زبانی تفسیری و سطح بالا دانست که اولین بار در سال 1990 میلادی توسط فردی بهنام Guido van Rossum ایجاد شد. شاید Guido نیز فکر نمیکرد کار بر روی پروژه شخصی خود در زمان اوقات فراغت و بیکاری بعدها به پروژهای بسیار کارآمد و مفید تبدیل شود. اولین نسخه پایتون در سال 1991 انتشار یافت و تا سال 2000 عملا توسعه و بروزرسانی آن توسط مؤسسه ملی تحقیقات و ابتکارات (CNRI) واقع در ایالات متحده آمریکا انجام میشد؛ تا اینکه در سال 2000 تیم توسعه دهنده پایتون به آزمایشگاههای پایتون منتقل شدند.
ویژگیهایی نظیر شیگرایی، متنباز بودن، قابلیت اجرای مجازی بر روی هر پردازشگر، درونیسازی و گسترش، سهولت یادگیری و استفاده پایتون را به زبانی محبوب و پرکاربرد در میان علاقمندان حوزه برنامهنویسی تبدیل کرده است. شاید جالب باشد بدانید برنامههایی نظیر BitTorrent، Blender، Chandler، Mailman و Zope از معروفترین برنامههایی بهشمار میروند که با پایتون نوشته شدهاند.
انواع داده اولیه در پایتون
- متغیرها : به شکل ساده، متغیر نامی است که به یک مقدار نسبت داده میشود. اگر تجربه کار با زبانهای برنامهنویسی را داشته باشید میدانید که در اکثر زبانهای برنامهنویسی برای استفاده از متغیرها باید ابتدا به تعریف آنها بپردازید. در زبان پایتون برای تعریف یک متغیر کافیست آنرا مقداردهی کنید. به عبارت بهتر نیازی به تعریف جداگانه وجود ندارد.
- داده منطقی یا Boolean : متغیرهای منطقی یا در اصطلاح Logical Varaibles میتوانند یکی از دو مقدار درست (True) یا غلط (False) را در خود جای دهند (برای مثال abc= True).
- اعداد صحیح کوتاه (Plain): این نوع از داده ورودی میتواند اعداد صحیح در محدوده 2147483648- تا 2147483647 را در بر گیرد (مثال: L=5625).
- اعداد صحیح بلند (Long) : این نوع از داده، اعداد صحیح را تا جایی که حافظه اجازه دهد در خود نگهداری میکنند.
- اعداد اعشاری (Float): این نوع داده قابلیت ذخیرهسازی اعداد اعشاری را در خود دارد (مثال: Pi=3.14159).
- اعداد مختلط (Complex): به کمک این نوع داده قادر خواهید بود به کار با اعداد مختلط بپردازید (مثال: z1=2-3j).
- رشتهها (String): یکی از ویژگیهای ضروری در هر زبان برنامهنویسی قابلیت ذخیرهسازی و کار با رشتههاست. در این نوع داده نمیتوانید بهشکل مستقیم کاراکترها را تغییر دهید (مثال: string1=abaqus, string2=3ds string1+string2=abaqus3ds).
- Unicodes: این نوع از دادهها همانند رشته عمل میکنند اما فرمت ذخیرهسازی رشتهها در آن Unicode خواهد بود.
نامگذاری متغیرها در پایتون
بحث نامگذاری و استفاده از متغیرها در یک زبان برنامهنویسی از اهمیت بالایی برخوردار است. در نامگذاری متغیرها در پایتون مجاز هستید ترکیبی از حروف و اعداد را بکار گیرید. اما نکتهای که باید به آن توجه داشته باشید Case Sensitive بودن یا حساسیت زبان پایتون به بزرگی و کوچکی حروف است؛ در واقع از نظر پایتون دو متغیر Abaqus و abaqus با یکدیگر یکسان نبوده و معرف دو متغیر مجزا از نظر مقدار و حتی نوع هستند. همچنین اصول و قوانین زبان پایتون برای نامگذاری متغیرها به شکل خلاصه عبارتند از:
- نام متغیر باید با یک حرف شروع شود.
- کاراکترهایی نظیر #, $, %, ^ نباید در نامگذاری مورد استفاده قرار گیرد.
- برخی از نامها و اسامی، معرف متغیرهای رزرو شده توسط پایتون است و متغیر مورد نظر شما نباید از بین این اسامی رزرو شده باشد. بهعنوان مثال استفاده از اسامی نظیر if، for، class و … در نامگذاری متغیر مجاز نمیباشد. در صورت استفاده از هر یک از موارد فوق، برنامه از روند عادی اجرا خارج شده و متوقف میگردد.
منابع جهت اسکرپیت نویسی در آباکوس
در بخش معرفی دستورات و قواعد مربوط به زبان برنامهنویسی پایتون از کتاب “زبان برنامهنویسی پایتون، نوشته سجاد رضایی” استفاده شده است. به شما همراهان عزیز و علاقمند توصیه میکنم کتاب فوق را تهیه کرده و به مطالعه آن بپردازید. همچنین جهت آشنایی بیشتر میتوانید به سایت رسمی پایتون مراجعه فرمایید. بدیهی است تسلط شما بر اصول و قواعد حاکم بر این زبان برنامهنویسی، در اسکریپتنویسی آباکوس کارگشا و سودمند خواهد بود.
با سلام و تشکر از مطالب فوق العاده مفیدتون
یه سوالی داشتم
وقتی برای یک متریالی دو نوع خواص نوشتیم(فیلد یک و دو) و در استپ شماره یک فیلد یک رو میخوایم و در استپ شماره دو فیلد دو،
این تغییر فیلد متریال با چه دستوری انجام میشه؟
سلام و ممنون از حسن نظر شما
موضوعی که شما اشاره میکنید دو مسئله مجزاست؛ وقتی تغییر ماده داشته باشید که نتایج بخش اول به شما کمکی نخواهد کرد
فرض کنید مثلا قراره شما به یک نمونه 10 واحد جابجایی اعمال کنید؛ 5 واحد اول با ماده فیلد 1 و 5 واحد دوم با ماده فیلد 2
بعد از پایان استپ1، نتایجی که بدست اومده برای استپ 2 قابل استفاده نیست؛ چون بالطبع ماده عوض شده و بازای همان مقدار جابجایی دیگه میدان تنش مشابه حاکم نخواهد بود
در نتیجه چیزی که شما مد نظرتون هست دو مسئله کاملاً مجزاست؛ نیازی هم به کدنویسی نیست
بعد از اینکه مسئله با ماده 1 حل شد فقط در ماژول Property ماده را عوض کنید (از قبل هر دو ماده را تعریف کنید) و با یک Job مجزا حل را ادامه بدهید (که همزمان نتیجه هر دو تحلیل را داشته باشید)
سلام.وقت بخیر.من میخواهم با کد نویسی در یک مدل اباکوس تغییری ایجاد کنم و بعد از تحلیل از اطلاعات خروجی jobمورد نظرم، دیتای دلخواه (مثل جابجایی و نیروی عکس العمل) را دریافت کنم.منتها در اثر بعضی از تغییرات اعمالی job به مرحله ی کامپلیت نمیرسه و ارر میده.چطور میتونم به برنامه بفهمونم منتظر بمونه تا job من یا کامل بشه ویا ارر بده ودر هر صورت از قسمت خروجی اطلاعات موردنظر رابگیر؟به جای دستور پایین چی میتونم بذارم؟ممنون میشم اگر پاسخگو باشین.
mdb.jobs[‘myjob’].waitForCompletion
سلام
دستوری که اشاره کردید بیشتر برای در انتظار گذاشتن یک Job مورد استفاده قرار میگیره
نتایج تا جایی که حل ادامه داشته باشه ذخیره میشه؛ از منوی Report در ماژول Visualization استفاده کنید، هر اینکرمنت دلخواهی را که انتخاب کنید میتونید پارامتر مورد نظرتون را در قالب یک فایل text با پسوند rpt برای همه المانها و . . . ثبت کنید
موفق باشید . . .
اقای مهندس این دستور برای یه حلقه است.پس به نظر شما اگه ارر داد، برنامه دیتا رو تا جایی پیش رفته در فایل مورد نظر من ثبت میکنه و وارد ادامه ی حلقه میشه؟
هر اینکرمنت ار حل که جلو رفته باشه داده ها ذخیره شده اند؛ کافیه از Report برای ثبت هر مقدار دلخواهی در اینکرمنت مورد نظرتون استفاده کنید
موفق باشید . . .
متشکرم.خیلی لطف کردین
موفق باشید . . .
با سلام و تشکر بابت مطالب مفیدتون،
راستش من واسه بخشی از کارم لازم دارم یه ستون تعریف کنم که مدول الاستسیته و دانسیته به صورت تابعی خطی در ارتفاع تغییر میکنند.
واقعا ممنون میشم و لطف بزرگی میکنید اگه بتونید من رو راهنمایی کنید که چطور میتونم این رو تعریف کنم.
ممنون
سلام
میتونید از سابروتین USDFLD استفاده کنید؛ باید مختصات z نقطه انتگرالگیری را قرائت و از اون برای استفاده در مدول یانگ بهره ببرید
سلام .وقت بخیر.
اقای مهندس چطور میتونیم از quadprog یا همون quadratic programing در پایتون استفاده کنیم.ممنون میشم راهنمایی بفرمایین.
سلام
پایتون هم یک زبان برنامهنویسی مثل سایر زبانهاست؛ با اصول، دستورات و قواعد خودش
یک رابطه و فرمولبندی مشخص را شما میتونید با هر زبان برنامهنویسی که دوست دارید پیاده سازی کنید
اگر روابط و فرمولبندی را دارید در قالب پایتون در بیارید
با عرض سلام و خسته نباشید
قبل از هر چیزی از همه نویسندگان سایت و اساتید گرامی بابت مطالب آموزنده و بسیار بسیار مفیدی که قرار می دهند کمال تشکر و قدردانی را دارم و امیدوارم بدون خستگی به کارتان ادامه دهید.
آقای مهندس میخوام یک سازه فضاکار (خرپای فضایی) مدل کنم اما حدود 70 درصد المانهام کابل هستند(المان ها به صورت wire و از نوع truss 2 گرهی مدل می شود). و این کابل ها پش تنش دارند (تنش کششی اولیه) که مقدار این تنش برای هر کابل متفاوت هست.
اعمال تک تک این نیروهای پیش تنش عملا وقت گیر وا طاقت فرسا هست
با اطلاعات ابتدایی که بدست آوردم ظاهرا باید با اسکریپت نویسی این کار رو انجام بدم.
1- فهرست این دستورات رو ازکجا بدست بیارم؟
2- آیا برای این کار باید اسکریپتی بنویسم که کل فایل inp مدل رو بسازه؟ یا میتونم فقط اسکریپتی بنویسم که فقط این نیروهای پیش تنش رو اعمال بکنه؟
ممنون میشم اگه راهنمایی بفرمایین که چطور میتونم این مشکل رو حل کنم و بتوانم اسکریپت مربوطه رو بنویسم
با تشکر فراوان از شما و گروه بسیار فعال و آموزندتان.
سلام و سپاس از لطف شما
1- میتونید یک مدلسازی را خودتون شروع به انجام کنید و هر عملی که انجام دادید نگاهی به فایل پایتون ایجاد شده هم بندازید تا بتونید روند را متوجه بشید
در خصوص دستورات پایتون هم منبعی که در آخر پست اشاره کردم مفید و مختصره
2- مشکلی وجود نداره؛ میتونید در ماژول خاصی فراخوانی داشته باشید
با سلام
برای مسئله ی تیر یک سر گیردار اسکریپتی نوشتم . برای بهینه سازی نیاز دارم میزان جابه جایی یک گره را در یک فایل ذخیره کنم تا بتونم از اون در متلب استفاده کنم. ممنون میشم کدهای مربوط به ذخیره سازی نتایج در فایل متنی را بهم بگین.
با تشکر
سلام
از منوی Report در ماژول Visualization استفاده کنید، هر اینکرمنت دلخواهی را که انتخاب کنید میتونید پارامتر مورد نظرتون را در قالب یک فایل text با پسوند rpt برای همه المانها و . . . ثبت کنید
موفق باشید . . .
با سلام
ببخشید من میخواستم یک زبان برنامه نویسی یاد بگیرم که هم بتونم تو مطلب کد بنویسم هم تو آباکوس و… کدوم زبان رو یاد بگیرم؟ منظورم اینه که شاملترین و جامع ترین زبان کدومه که با کمی تغییر بشه تو نرم افزارهای مهندسی برنامه نویسی کرد؟
با تشکر
سلام
سؤال شما چندان معقول نیست و نمیشه یک جواب کلی بهش داد؛ این موضوع کاملا به هدف شما از کدنویسی برمیگرده
در همین آباکوس از زبان فرترن استفاده شده و شما باید سابروتینها را با زبان فرترن بنویسید اما برای اسکریپت نویسی در آباکوس باید از پایتون استفاده کنید
یکی از پرکاربردترین زبانها که در مکانیک هم به وقور مورد استفاده قرار میگیره فرترن هست، فرترن یک زبان سطح بالا محسوب میشه و مزایای خودش را داره (هسته اصلی محاسبات آباکوس و انسیس هم به همین زبان هست)، در حوزه CFD فرترن یکی از بهترین گزینه ها به شمار میره
در نقطه مقابل برای مسائل مکاترونیک و رباتیک شما مجبور به استفاده از زبانهایی مثل C و ++C هستید
همینطور که مشاهده میکنید نسخه واحدی وجود نداره، ولی اگر روی یک زبان مسلط باشید فراگیری زبانهای دیگر در حد آموزش فرامین و دستورها خواهد بود
موفق باشید . . .
سلام برای اسکریپت نویسی در اباکوس فقط قسمت پایین صفحه هست که میشه در انجا نوشت؟ منظورم اینه که مثل متلب نمیشه توی یک نوت جدا گانه نوشت بعد از انجا ران کرد
سلام
برای نوشتن و ذخیره کردن که مشکلی نیست
میتونید در یک نرمافزار مثل Sublime Text بنویسید و ذخیره کنید
ولی اجرا باید در محیط آباکوس باشه
سلام خدمت شما
میخواستم بدونم من میخوام یه بار سینوسی با چرخه خیلی بالا به مدلم اعمال کنم( از هزار چرخه تا یک میلیون چرخه)، اول اینکه این موضوع با amplitude امکان داره؟ اگه نه باید چکار کنم دقیقا؟
ممنونم ازتون
سلام
میتونید از یک اسکریپت پایتون کمک بگیرید
amplitude ممکنه ولی خب در اون تعداد اصلا مهندسی و فنی نیست
سلام ممنون از مطالب مفیدتون. من یک مدل دارم که بارگذاری اون تابعی از تغییرمکان لحظه ای توی نقطه ای است. برای این کار از چه سابروتینی باید استفاده کنم?
سلام
DLOAD
ممنون بابت پاسخگویی تون.
به نظر شما نمیشه از فیلد معادلاتی (expression field) تو ماژول Load استفاده کرد؟ البته با توجه به این که بار مد نظر من “فشار گاز” توی یک دستگاه سیلندر و پیستون هست که از دو طرف تغییرمکان داره و با فشرده شدن پیستون ها فشار گاز طبق رابطه ای افزایش می یابد و البته تغییرمکان دو پیستون متفاوت هست.
با تشکر
اگر بارگذاری شما رابطه خاصی بر حسب دستگاه مختصات داره میتونید استفاده کنید (مثلاً P= 2*X + 3*Y؛ P فشار است و XوY هم معرف مختصات)
سلام آیا expression field در طول تحلیل هم عملکرد خودشو داره? یعنی اگر من به یک نقطه باری رو اعمال کنم و یک رابطه بر اساس متغیر های X y z بهش بدم و در طول تحلیل این نقطه حرکت کنه آیا بارش هم طبق رابطه عوض میشه?
ممنون.
سلام
خیر
سلام. از اینکه خیلی سوال میپرسم عرض پوزش دارم.
ببخشید من باری رو که میخوام به مدلم وارد کنم به حرکت دو نقطه با مختصات متفاوت بستگی داره. یعنی در طول تحلیل با حرکت این دو نقطه بار تغییر میکند. یعنی یه معادله ای مثل P=(Xa-Xb)*Cte که a , b دو نقطه مورد نظر باشند. که این معادله در طول تحلیل دچار تغییر می شود. من برای این بار میتونم از سابروتین DLoad استفاده کنم یا اینکه باید کد پایتون براش بنویسم.
خیلی ممنون.
میتونید از dload استفاده کنید
با سلام.
من می خواستم بدونم چطوری می تونم به وسیله ی کد نویسی پایتون از فایل odb نتایج رو استخراج کنم؟
با تشکر
سلام
در قالب یک کامنت امکان پاسخ وجود داره به نظرتون؟!
مطمئناً خیر. گفتم شاید بتونید بهم لینک خاصی معرفی کنید.
خیر متأسفانه
اگر لینک خاصی بود حتماً به اشتراک میگذاشتم
با سلام .
ببخشید آیا جنابعالی انجام پروژه های مربوط به آباکوس و اسکریپت نویسی را برای دیگران قبول می کنید؟
ممنون میشم در اسرع وقت جواب بدهید.
سلام
خیر
سلام. در منوی کرکره ای model، گزینه edit keywords وجود دارد که در آن دستورات انجام شده توسط کاربر در آباکوس به شکل کد نوشته می شود. آیا این قسمت همان اسکریپت نویس با پایتون هست یا چیز دیگری هست؟
سلام
خیر؛ متفاوته
سلام در پایتون ضرب داخلی وجود دارد ؟
برنامه ای که من در اباکوس می نویسم مر بوط به رسم یک شکل حرارتی است که باHFL که در انتهای رسم معمولی بدون کد نویسی بدست می اید مر بوط می شود .یعنی من بهHFLدر ابتدای کارم(رسم هندسی) نیاز دارم اما در انتها بدست می اید.چطور این کد را بنویسم؟
سلام
بله
>>> vector1 = (2,3,5)
>>> vector2 = (3,4,6)
>>> sum(p*q for p,q in zip(vector1, vector2))
48
نمونه ضرب داخلی
در خصوص پروژه شما نظری ندارم
وقتی اسکریپت را ران می کنیم در کدام قسمت خطاها را ببینیم
پایین محیط کاری
سلام خسته نباشید
برای اباکوس 14 کدوم ورژن فرترن و ویژوال بهتر لینک میشه؟ یا بهتر نیست اباکوس جدیدتر نصب کنم؟
سلام
Fortran composer XE 2013
visual studio 2012
سلام. ممنون از مطالب مفیدتان.
ببخشید در فایل .jnl به طور مثال پس از مشخص کردن مرکز و نقاطی بر ای رسم قوس ، یکسری مشخصات دیگری نیز نشان داده میشود:
mdb.models[‘Model-1’].sketches[‘__profile__’].CoincidentConstraint(
addUndoState=False, entity1=
mdb.models[‘Model-1’].sketches[‘__profile__’].vertices[4], entity2=
mdb.models[‘Model-1’].sketches[‘__profile__’].geometry[3])
mdb.models[‘Model-1’].sketches[‘__profile__’].CoincidentConstraint(
addUndoState=False, entity1=
mdb.models[‘Model-1’].sketches[‘__profile__’].vertices[2], entity2=
mdb.models[‘Model-1’].sketches[‘__profile__’].geometry[3])
mdb.models[‘Model-1’].sketches[‘__profile__’].CoincidentConstraint(
addUndoState=False, entity1=
mdb.models[‘Model-1’].sketches[‘__profile__’].vertices[3], entity2=
mdb.models[‘Model-1’].sketches[‘__profile__’].geometry[3])
ممنون میشم لطفا توضیح بدید این ها چه ویژگی هایی از طرح رسم شده را بیان می کند؟
سلام
مورد خاصی نیست
یکسری دستورات شناخته شده برای آباکوس که مثلاً مدل یا پارتی که شما روی آن کار میکنید تعیین میکنه