
في البداية ، خططت لأقصر نفسي على وظيفتين (
واحدة أو
اثنتين ) حول تجارب CNC الخاصة بي. ولكن ، اتضح أن الموضوع مثير للاهتمام للكثيرين ، لذلك ، ما زلت أتحدث عنه قليلاً. في هذا المنشور ، سنتحدث عن كتابة برنامج محلي الصنع للسيطرة على الهواة باستخدام الحاسب الآلي.
مقدمة
لا أعرف إذا ما تمكنت من تحفيز شخص ما في المنشورات الأولى ، لكن بعض التعليقات التي أعطيتها أنا شخصًا جيدًا للتفكير. شكر
خاص إلى
evilruff لصورته المختبرية وللفيديو مع
الكورية بارد . بعد مشاهدة الاثنين ، لم يعد يبدو مقصورة القفاز في الطابق السفلي مريحة للغاية.
جمع قوته ، في نهاية الأسبوع ، أحضر شيئًا غامضًا يذكرنا بالنظام وأخيراً فعل شيئين كان سيفعلهما قبل نصف عام.
أولاً ، استبدل قطعة من الخشب الرقائقي الذي كان بمثابة طاولة ذبيحة. لقد استعملت هذا الخشب الرقائقي من لحظة شراء الماكينة ، وقم بفك الفراغات عليها باستخدام البراغي وإنشاء جميع أنواع التصميمات المجنونة من العصي والأوتاد. كل ذلك حتى لا يذهب الجزء في رحلة غير متوقعة أثناء الطحن.
ربما يحتاج شخص ما إلى اختراق حياة: لقد صنعوا طاولة جديدة من لوحة سطح بلاستيكية (تباع في كاستوراما):

انه انسحب لوحات مباشرة إلى الجدول الألومنيوم الأصلي. كانت المكافأة أخاديد ملائمة لمشابك الشغل والتثبيت السريع لجدول الحشو. استغرق كل شيء عن كل شيء بضع ساعات و ~ 1100r.
وثانياً ، أخيرًا كتب برنامجًا أكثر أو أقل قابلية للاستخدام لإدارة وظائف CNC غير القياسية. ستكون هذه هي القصة الرئيسية.
بيان المشكلة
يعد G-code للعمليات الموضحة في
الجزء الثاني هو الأسهل. ومع ذلك ، لا يمكن استدعاء عملية الإعداد نفسها بسرعة.
كيف حدث هذا
على سبيل المثال ، بالنسبة للمادة المضافة ، كان من الضروري: معرفة عرض اللوحة ، وحساب عدد الثقوب التي يجب أن تكون ، وحساب المسافة الدقيقة بينها ، وإنشاء ملف ، وكتابة رمز g ، وتحميله في Mach3. يستغرق كل هذا ، في أحسن الأحوال ، حوالي 15 - 20 دقيقة. في هذا الضوء ، تتناقص بشكل كبير مزايا الجهاز الرقمي بالمقارنة مع أداة اليد ، والتي في الوقت نفسه يمكن أن تحدث مجموعة كاملة من الثقوب.
ما أردت الحصول عليه
في حالة المادة المضافة نفسها ، أردت أن أحصل على برنامج حيث ، في واجهة بسيطة للغاية ، أود أن أدخل عرض وسمك اللوحة واضغط على الزر لبدء عملية حفر العدد المطلوب من ثقوب الحشو في نفس المسافة من بعضها البعض.
ابحث عن حل
أول ما يتبادر إلى الذهن هو كتابة برنامج مستقل يتفاعل مباشرة مع منفذ متوازي. أظهر googling السريع أن مهمة الكتابة إلى lpt قابلة للحل تمامًا ، ولكن الشيطان ، كما تعلمون ، يختبئ بالتفصيل. مع مزيد من الدراسة لهذه القضية ، أدركت أنه يمكنك أن تتعثر هنا بجدية ولفترة طويلة. علاوة على ذلك ، فإن مثل هذا الحل لن يكون مرنًا: بالنسبة لجهاز آخر ، على سبيل المثال مع USB ، لن ينجح.
كان هناك خيار للتعامل مع Mach3 SDK. في عملية جمع المعلومات حول إنشاء المكونات الإضافية ، واجهت حلاً مثيراً للاهتمام. وصفت كيفية استخدام آليات OLE يمكنك سحب Mach3 من تطبيق جهة خارجية. لست خبيرًا في تقنيات Microsoft ، لكن بعد عرض قطري للدليل على Mach3 SDK ، إذا فهمت الفكرة الرئيسية بشكل صحيح ، فلا توجد رصاصة فضية ، تستخدم الإضافات نفس الأساليب العامة لكائنات Mach3 COM. لم أكن سأعيد رسم واجهة Mach3 ، لذلك كان الاختلاف الوحيد للمستخدم بين المكون الإضافي وتطبيق standalon هو أن البرنامج المساعد يمكن الوصول إليه من قائمة Mach3 ، والتطبيق من خلال الرمز الموجود على سطح مكتب XP.
تطبيق منفصل يبدو الأفضل بالنسبة لي. في هذه الحالة ، من الناحية النظرية ، يمكنني تشغيل البرنامج فورًا بعد تحميل جهاز الكمبيوتر ، والذي سيؤدي إلى تحميل Mach3 بقاطرة بخارية (بدلاً من تحميل Mach3 أولاً ثم الحفر في قائمته لتشغيل المكون الإضافي).
التقاط صابر
كانت آخر مرة اضطررت فيها إلى كتابة تطبيق سطح مكتب أصلي لنظام Windows في عام ، في عام 2006 ، وكان في دلفي. منذ ذلك الحين ، استهلكت تقنيات الويب الخاصة بي باستخدام نظام Linux. لذلك ، لم يكن لديّ الآن أي تفضيلات خاصة بأي لغة لنحت برنامج Windows. تم العثور على المثال البسيط الموجود في C # ، تم اختيار هذه اللغة كأرنب تجريبي.
لن أقوم بنشر جميع رمز التطبيق الناتج هنا (إذا كنت ترغب في ذلك ، يمكنك العثور عليه على github باستخدام الرابط الموجود أسفل المنشور). سأشرح لك الأشياء الأساسية. جميع التجارب التي أجريتها على جهاز افتراضي مع WinXP SP3 و VS 2003 و Mach3 الإصدار R3.043.062. بالنسبة لأولئك الذين يعتقدون أنه من الأفضل رؤية
رابط الفيديو على Youtube مرة واحدة ، وهذا ما فهمته. أدناه هو نسخة من الضوء.
التحضير
- ل Visual Studio لالتقاط مكون Mach3 بشكل صحيح ، يجب أن يتم تسجيله بشكل صحيح في التسجيل. للقيام بذلك ، قم بتنزيل الملف Mach3Registry.reg
- إطلاق Mach3Registry.reg
- نبدأ VS ، نقوم بإنشاء مشروع تطبيق نافذة في C #
- في كتلة Solution Explorer ، انقر بزر الماوس الأيمن على المراجع ، حدد Add Reference من القائمة. في النافذة التي تفتح ، انقر فوق استعراض وابحث عن Mach3.exe

إذا كان كل شيء صحيحًا ، فيجب أن يظهر سطر في قائمة المراجع ، والذي كان يعتقد أن Mach4 ... - 5. بعد ذلك ، ارسم واجهة المستخدم ، وشنق المعالجات ، وقم بتنفيذ الخوارزميات ...
التفاعل مع Mach3
نحن نربط المكتبات اللازمة ، ونعلن المتغيرات (Form1.cs)
... using System.Runtime.InteropServices; using Mach4;
الاستخدام:
GetMachInstance();
يمكن عرض أكواد الأزرار وقيم المعلمات على الويكي:
OEM_DROs و
OEM_Buttons (ليس لديهم ويكي ، لا يتم عرض قيم المعلمات في الجدول ، لقد بحثت في علامة التبويب "عرض المصدر").
كان الإصدار الأول من البرنامج يعمل على هذا النحو: وفقًا للمعلمات المحددة ، تم إنشاء g-code والذي كان يتم تنفيذه من خلال كل إطار على حدة (أي سطراً سطراً) بواسطة طريقة
_mInst.Code . وكان ذلك خطأي. في بيئة تصحيح الأخطاء على جهاز افتراضي ، كل شيء سار على ما يرام. في Mach3 ، ركضت الأرقام الصحيحة في الإحداثيات. ولكن كانت هناك مشاكل عند النقل إلى جهاز كمبيوتر. تحرك العربة بشكل صحيح ، لكن المغزل لم يعمل.
يبدو أن إدارة جهاز التوجيه والمغزل في Mach يعمل في مؤشرات ترابط مختلفة. اتضح أن أوامر الحركة (G ...) قد تم تنفيذها بالتتابع لأنها دخلت طريقة _mInst.Code في مؤشر ترابط واحد ، وأوامر التحكم في المغزل (M3 ، M5) ، بغض النظر عن الأولى ، تم تنفيذها في مؤشر ترابط آخر. ونتيجة لذلك ، تم تشغيل المغزل (M3) وإيقافه على الفور (M5) ، بينما كان نقل العربة يأخذ مجراه الطبيعي.
جربت خيارات مختلفة ، تأخيرات متصلة ، حاولت دفع عنصر تحكم g-code بأكمله في سطر واحد وأرسله في قطعة واحدة إلى _mInst.Code. كنتيجة لذلك ، استقرت على الحل "على الجبهة": أنا ببساطة أقود الشفرة التي تم إنشاؤها إلى ملف ، وأفتح هذا الملف برمجيًا في Mach3 وهناك أضغط على زر "ابدأ" برمجيًا. مقتطف من رمز العمل:
_mInst.LoadFile("C:\\tmp\\gcode.txt"); System.Threading.Thread.Sleep(2000); _mInst.DoOEMButton(1000);
هناك حاجة إلى توقف مؤقت بين تنزيل ملف والضغط على زر حتى يتمكن Mach من فتح الملف. ربما هناك طريقة أكثر أناقة. إذا كان أي شخص يعرف ، اكتب التعليقات.
ومن بين المزايا الإضافية لهذا الحل أنه يمكنك الآن ملاحظة التصور لعملية المعالجة في واجهة Mach.
ما حدث في نهاية المطاف
علاوة على ذلك ، باختصار حول التطبيق الناتج. بشكل منفصل ، سأتحدث عن واجهة المستخدم لكل عملية.
قص

كل شيء شفاف تماما هنا. هناك حاجة إلى المعلمة S للتعويض عن الحجم L إذا لم تكن قطعة العمل ثابتة عند نقطة الصفر على طول X (أو على طول Y عند القطع على طول).
المضافة
للإضافات ، 2 التكوينات المفاجئة ممكنة. الأول مع طاحونة لحفر ثقوب النهاية. والثاني مع المغزل المعتاد للحفر في طائرة الدرع (لسبب ما أنا أطلق عليه "المضاف الأمامي").
الوجه المضاف

مع المضافات النهائية ، من المهم أن تحدد بدقة الصفر في الزاوية اليمنى السفلى من الشغل (لديّ زاوية التوقف الجانبية والجدول هناك). مع التمرين على الخشب ، هذا ليس بالأمر الصعب - فهناك نصيحة حادة تحتاج إلى الوصول إلى هذه الزاوية. إصلاح الشغل على الطاولة ، أضعه في المثقاب.
دون تغيير الجهاز بالطريقة نفسها ، أقوم بعمل ثقوب متبادلة عن طريق تثبيت الشغل رأسياً:
هناك حاجة إلى المعلمة X من أجل توصيل الألواح ذات الأطوال المختلفة (على سبيل المثال ، عندما تكون الألواح السفلية والعلوية للخزانة أكبر من الألواح الجانبية بسمك الأبواب).
المضاف الأمامي

معدات الجبهة هي مغزل منتظم. يتم استخدام هذا النوع من المواد المضافة عندما تحتاج إلى حفر ثقوب في سطح أفقي ، ليس فقط على طول الحواف ولكن أيضًا في مكان ما في الوسط. على سبيل المثال ، إذا كان هناك عدة مقصورات في الخزانة وبجانب الجدران الجانبية ، فهناك حجرات داخلية. إذا كانت اللوحة أطول من طول الماكينة ، فيمكن صنع المادة المضافة في مجموعتين بدوران 180 درجة للجزء. في هذه الحالة ، المعلمة X مفيدة أيضًا.
تحول

بالنسبة لي ، لم تكن الصعوبة الرئيسية في إعداد كود g مع مسار الدوران هو الإفراط في الحد الأقصى لعمق الانغماس للقرص. الحقيقة هي أنه عند الخروج من إنكسكيب يتم الحصول على سطر واحد ويحدث الدوران في مسار واحد. لهذا السبب ، كان علي إنشاء رمز منفصل لأسطوانة الشغل وبعد ذلك تم إطلاق المقطع الرئيسي الذي ينشئ النموذج. وكانت هناك بعض القيود على هذا النموذج. على وجه الخصوص ، كان من الضروري التأكد من أن المسار لم يذهب عميقًا جدًا. حاولت عدم تجاوز 10 - 15 ملم من مستوى الاسطوانة الأصلية.
تم حل كل هذه المشاكل في البرنامج الجديد. يعمل مثل هذا: قم بتحميل رمز g "الخام" الذي تم الحصول عليه من Inkscape ، واضبط حجم جانب شريط قطعة العمل وأشير إلى الحد الأقصى لعمق المعالجة في 1 تمريرة (كلما كان الخشب أصعبًا ، قل هذا العمق). بناءً على مصدر g-code والمعلمات ، سيقوم البرنامج بحساب مسار آمن وإرساله إلى CNC.
الخطط المستقبلية
قام البرنامج بتبسيط الروتين إلى حد كبير ، لكنه لا يزال بعيدًا عن الكمال. أولاً ، سيكون من الضروري تحسين الخوارزمية لحفر الثقوب العميقة (يتم انسداد الحفر بالرقائق وارتفاع درجة الحرارة ، وتحتاج إلى التأرجح للخلف وللأمام). ثانياً ، جاءت الفكرة لإنشاء مكتبة لتحويل الأشكال. أي العديد من النماذج القياسية (مثل الأسطوانة ، المخروط ، الدبوس المتداول ، إلخ) مع القدرة على ضبط الأبعاد دون الحاجة إلى إنشاء مسارات في برامج الجهات الخارجية.
المراجع
→
Mach3Registry.reg→
Mach3 SDK وغيرها من البرامج→
مستودع المشروع على جيثب (أعتذر عن الحاروفيك على عضادات المعمارية مقدما - وهذا هو أول برنامج لي في C #).