در قسمت قبلی از سری آموزش LinuxCNC، نحوه نصب نرم افزار و راه اندازی لینوکس CNC رو توضیح دادیم، حالا در این قسمت میخوایم سراغ کار با کانفیگ های نرم افزار بریم و اون رو برای خودمون شخصی سازی کنیم.
همونطور که در قسمت قبل گفتیم دوتا از فایل های مهمی که تنظیمات ما در اون ذخیره میشه فایل های ini و hal هستند، پس از باز کردن نرم افزار برای بار اول، یک کپی از کانفیگی که انتخاب کردیم در پوشه home ما در پوشه linuxcnc کپی میشه و یک شورتکات هم برای اجرای مستقیم کانفیگ ما در دستکاپ ساخته میشه، اگر این شورتکات رو بررسی کنیم میبینیم که در اصل داره این دستور رو اجرا میکنه.
1 | /usr/bin/linuxcnc '/home/mahdi2001h/linuxcnc/configs/sim.axis/axis.ini' |
با توجه به این موضوع نقطه شروع ما برای بررسی فایل ini هست، در ادامه این فایل رو بررسی میکنیم.
فایل INI
یک فایل ini از سه جز اصلی تشکیل شده که شامل موارد زیر میشه.
- کامنت
- بخش
- متغیر
کامنت ها
خطوطی که با ; یا # شروع میشند به عنوان کامنت در نظر گرفته میشند، به طور مثال:
1 2 3 4 5 6 | ; This is my mill configuration file. # I set it up on January 12, 2012 INCORRECT = value # and a comment # Correct Comment CORRECT = value |
شاید برای شما مفید باشد: آموزش الکترونیک از 0 تا 100
بخش ها (Sections)
در فایل ini بخش های مختلفی از نرم افزار قابل تنظیم هستند که پارامتر های هر کدوم رو در Section مربوطه مقدار دهی میکنیم، هر بخش هم به صورت [THIS_SECTION] از بقیه جدا میشه و پارامتر های هر SECTION از [THIS_SECTION] قبلی شروع شده و تا [THIS_SECTION] بعدی ادامه داره.
در ادامه section های مختلف فایل ini رو بررسی میکنیم.
- EMC : متغیر های کلی
- DISPLAY : مرتبط با رابط کاربری (نوع رابط کاربری، مقدار های اولیه که نمایش داده میشه و …)
- RS274NGC : مرتبط با RS274NGC که برنامه پردازش G code در لینوکس سی ان سی است.
- EMCMOT : تنظیماتی که توسط کنترلر real time استفاده میشه (سادش اینکه مثلا میگه حلقه های اصلی برنامه هر چند میکرو یا میلی ثانیه اجرا میشند و بستگی به پیچیدگی دستگاه و سرعت سیستم داره تنظیمش)
- HAL : آدرس فایل های HAL و تنظیمات مربوطه رو داره.
- APPLICATIONS : اجرای نرم افزار های دیگه هنگام اجرای linuxCNC
توضیحات بیشتر در این لینک موجود هست و ما اصلی هاش رو بررسی کردیم.
متغیر های پرکاربرد
بخش DISPLAY
در بخش DISPLAY از این متغیر ها استفاده زیادی میشه.
1 2 3 4 5 6 7 | # Highest value that will be allowed for feed override, 1.0 = 100% MAX_FEED_OVERRIDE = 1.2 MAX_SPINDLE_OVERRIDE = 1.0 MAX_LINEAR_VELOCITY = 5 DEFAULT_LINEAR_VELOCITY = .25 DEFAULT_SPINDLE_SPEED = 200 |
از اینها میتونید جهت تنظیم این پارامتر ها در GUI استفاده کنید و حداکثر اونها رو تغییر بدید.
این متغیر هم برای تغییر پله های حرکت استفاده میشه.
1 | INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in |
با این دو متغیر میتونید تصویری که در هنگام باز شدن نرم افزار نشون داده میشه رو تغییر بدید و زمان نمایشش رو هم مشخص کنید.
1 2 3 | # Introductory graphic INTRO_GRAPHIC = linuxcnc.gif INTRO_TIME = 5 |
بعد از تغییر اسم تصویر به تصویر دلخواهتون، تصویر رو هم در همون پوشه ای که فایل ini هست در کتار بقیه فایل ها قرار بدید.
این متغیر فایل g code پیشفرضی که هنگام باز شدن نرم افزار در پیش نمایش نشون داده میشه رو مشخص میکنه.
1 | OPEN_FILE = ngcFiles/ScaledFull.ngc |
به جای این فایل میاد
بخش HAL
در این متغیر ها اسم فایل های HAL که در برنامه استفاده میشه رو مشخص میکنیم.
1 2 3 | HALFILE = core_sim.hal HALFILE = sim_spindle_encoder.hal HALFILE = axis_manualtoolchange.hal |
بخش TRAJ
با کمک این دو متغیر میتونید تعداد محور هاتون و نام اونها رو مشخص کنید.
1 2 | AXES = 2 COORDINATES = X Y |
با این دو متغیر میتونید واحد اندازه گیری طول و درجه رو مشخص کنید.
1 2 3 | LINEAR_UNITS = inch #LINEAR_UNITS = mm ANGULAR_UNITS = degree |
بخش JOINT و AXIS
پارامتر های این دو بخش رو معمولا باید بگردید ببینید کجا ها و توسط کدوم بخش ها استفاده شدند 🙂 ولی معمولا در فایل های HAL استفاده میشند و یا توسط GUI برای مقدار دهی یکسری پارامتر ها.
شاید برای شما مفید باشد: آموزش رزبری پای به صورت 100% رایگان
فایل HAL
HAL در ابتدا به این دلیل طراحی شد که پیکربندی سخت افزار های مختلف برای LinuxCNC آسون باشه و واقعا هم همینکار رو میکنه. اصلیت فایل های HAL هم بر اساس طراحی های سنتی هست، انگار که میخواید دو سر دو تا سیم رو به هم وصل کنید، فقط فرقش اینه که با کد این کارو انجام میدید!
هر سیستمی از چندین جز تشکیل شده، مثلا در دستگاه CNC، میکرو سوییچ، درایور موتور، کلید های فشاری، انکودر ها و … جز های مختلف آن هستند. برای اتصال این بخش ها به هم کافیه اونها رو انتخاب و سیم کشی کنیم تا کار انجام بشه.
اتصالات بالا رو تصور کنید، همین کار به صورت کد در یک فایل HAL به صورت زیر انجام میشه.
1 2 | net signal-blue component.0.pin1-in component.1.pin1-out net signal-red component.0.pin3-out component.1.pin3-in component.1.pin4-in |
برای شروع ابتدا فایل های زیر رو که در فایل axis.ini معرفی شده بررسی کنید تا یه ذهنیتی پیدا کنید.
1 2 3 4 | # list of hal config files to run through halcmd # files are executed in the order in which they appear HALFILE = core_sim.hal HALFILE = sim_spindle_encoder.hal |
مفاهیم HAL
اگر HAL رو زبان برنامه نویسی در نظر بگیریم منظور از مفاهیم همون حلقه، دستورات شرطی، متغیر ها و .. هست که HAL مفاهیم مختص خودش رو داره، در ادامه اون ها رو بررسی میکنیم.
Component
به تصویری که بالاتر قرار داده شده نگاه کنید، منظور از یک component هر بخش از سخت افزار یا نرم افزار هست که در فایل HAL قابل فراخوانیه . به طور مثال ما یک کارت توسعه داریم که میخوایم اون رو در نرم افزار اضافه کنیم، اون کارت توسعه باید یک درایوری داشته باشه که روی سیستم نصب بشه و با کد های HAL بتونه ارتباط بگیره، بعد از برقراری ارتباط اون کارت توسعه ما میتونه شامل چندین component باشه مثلا یک کامپوننت stepgen که کار اون تولید پالس برای کنترل استپر موتور هست و یا کامپوننت pwmgen که میتونه برای کنترل سرعت اسپیندل استفاده بشه.
Parameter
اغلب سخت افزار ها بخشی برای تنظیم دارند، به طور مثال یک درایور استپر جامپر هایی برای مشخص کردن میکرو استپ ها داره یا پتانسیومتری برای تعیین حداکثر جریان، در HAL هم Component ها دارای دو نوع پارامتر هستند یک نوع ورودی که به کمک آن تنظیم میشند و یک نوع خروجی که وضعیت کامپوننت رو نشون میدند.
Pin
اگر همون مثال درایور استپر رو در نظر بگیریم در اینجا پینها همون پایه های خروجی درایور هستند که به استپر وصل میشند، در حقیقت از pin ها جهت اتصال component های به همدیگه استفاده میشه.
Signal
سیگنال ها حکم سیمی رو دارند که دوتا پین رو به هم وصل میکنند .
هنگام استفاده از سخت افزار واقعی، هیچ وقت خروجی رله ۲۴ ولت رو به ورودی آنالوگ اسپیندل وصل نمیکنیم، پین های HAL هم رفتار مشابهی دارند و انواع مختلفی دارند که هر پین فقط به هم نوع خودش میتونه وصل بشه.
انواع پین
- bit : فقط دو حالت صفر یا یک
- float : اعداد اعشاری
- u32 : عدد صحیح ۳۲ بیتی بدون علامت
- s32 : عدد صحیح ۳۲ بیتی با علامت
Function
در اجزای سخت افزار واقعی خروجی بلافاصله با توجه به ورودی تغییر میکنه، مثلا هر موقع که موتور ولتاژ برسه شروع به حرکت میکنه اما توی HAL برای اینکه سیگنال از یک پین به پین دیگه منتقل بشه لازم هست که نرم افزار اونها رو پردازش کنه، به همین دلیل هر کامپوننت شامل یکسری تابع هست که با فراخوانی اون توابع هر کدوم مقادیر یکسری پین های اون کامپوننت رو بروز میکنند.
Thread
گفتیم که توابع یک کامپوننت مقادیر پین های مرتبط رو بروز میکنند اما خود توابع هم نیاز به فراخوانی دارند و اینکار با تعریف thread انجام میشه و هر thread در بازه های مشخصی اجرا میشه.
فعلا تا همینجا توضیح HAL کافی هست، در ادامه لازمه که خودتون بقیه توضیحات HAL رو از این لینک بررسی کنید.
برای تمرین بیشتر هم همین فایل های HAL ی که در کانفیگ axis.ini معرفی شده رو بررسی کامل کنید و نتایج اونها رو با کمک نرم افزار HAL Configuration بررسی کنید. (از منوی machine -> show Hal Configuration قابل دسترسی هست.)
خدا پدر مادرتو بیامرزه به امید ابادی کردن ایران مخصوصا صنعتش به دست ما جوون ها
اگه یه وقت ناامید شدی بدون که کارت بسیار با ارزشه
یاعلی
ممنون از شما 🙂
عالی ، یعنی 100 تا سایت خارجی و فوروم خود linuxcnc بری هم به این خوبی نیس
در انتظار ادامه ی پارت ها
لطف دارید 🙂
بسیار عالی اگر در پروسه آموزش اشاره کنید که چطور میشه سیستم رو برای یک سی ان سی مثلا 5 محوره کانفیگ کرد و کجا به این تنظیمات ربط داره ممنون میشم
کل تنظیماتی که باید برای cnc یک محور تا ۹ محور انجام بدید داخل همین فایل های ini و hal هست
در همین قسمت بخشی از پارامتر های مربوطه رو اشاره کردیم که در قسمت های بعد دقیق تر توضیح داده میشه
عالی، منتظر ادامه مطالب هستیم
خسته نباشید
ممنون از شما 🙂