Nghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trục

136 434 0
Nghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trục

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Nghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trụcNghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trụcNghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trụcNghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trụcNghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trụcNghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trụcNghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trụcNghiên cứu xây dựng phương pháp nội suy theo thời gian thực các biên dạng tự do trong tạo hình bề mặt chi tiết gia công trên máy công cụ CNC 3 trục

LỜI CAM ĐOAN Tôi xin cam đoan công trình nghiên cứu riêng tơi Tất số liệu kết nghiên cứu luận án trung thực chưa công bố cơng trình nghiên cứu khác Người hướng dẫn khoa học Nghiên cứu sinh GS TSKH Bành Tiến Long Nguyễn Hữu Quang i LỜI CẢM ƠN Tôi xin gửi lời cảm ơn chân thành sâu sắc tới GS TSKH NGND Bành Tiến Long, người Thầy hết lịng hướng dẫn động viên tơi hồn thành luận án Tôi xin chân thành cảm ơn Bộ môn Gia công vật liệu Dụng cụ công nghiệp, Viện Cơ khí, Trường Đại học Bách khoa Hà Nội tạo điều kiện thuận lợi giúp đỡ hồn thành luận án Tơi xin gửi lời cảm ơn tới gia đình, bạn bè, đồng nghiệp, người luôn giúp đỡ ủng hộ Hà nội, ngày … tháng … năm 2017 Nghiên cứu sinh Nguyễn Hữu Quang ii MỤC LỤC DANH MỤC CÁC CHỮ VIẾT TẮT vi DANH MỤC CÁC KÝ HIỆU vii DANH MỤC CÁC BẢNG ix DANH MỤC CÁC HÌNH VẼ VÀ ĐỒ THỊ x MỞ ĐẦU CHƯƠNG TỔNG QUAN 1.1 Khái quát hệ thống điều khiển số CNC phương pháp nội suy NURBS Cấu trúc điều khiển số CNC Chức nội suy máy công cụ điều khiển số CNC Gia công CNC chi tiết với biên dạng bề mặt tự 10 Phương pháp nội suy biên dạng tự NURBS theo thời gian thực (nội suy NURBS) 14 1.2 Tổng quan tình hình nghiên cứu phương pháp nội suy biên dạng tự NURBS theo thời gian thực hệ thống điều khiển số CNC 16 Kết luận chương 23 CHƯƠNG PHƯƠNG PHÁP BIỂU DIỄN ĐƯỜNG VÀ MẶT TRONG CÁC HỆ CAD/CAM SỬ DỤNG PHƯƠNG TRÌNH THAM SỐ NURBS 24 2.1 Đường NURBS 24 Hàm sở B-spline 24 Định nghĩa đường NURBS 26 Một số trường hợp đặc biệt đường NURBS 28 Đường NURBS phép chiếu xuyên tâm 30 2.2 Thuật toán chèn nút thuật toán DeBoor 31 2.3 Đạo hàm cấp cấp hai đường NURBS 35 2.4 Một số tính chất hình học vi phân đường NURBS 37 2.5 Phương pháp tham số biểu diễn bề mặt hệ CAD/CAM 39 Kết luận chương 41 CHƯƠNG XÂY DỰNG PHƯƠNG PHÁP NỘI SUY THEO THỜI GIAN THỰC CÁC BIÊN DẠNG TỰ DO NURBS 43 3.1 Giới thiệu 43 iii 3.2 Nguyên lý nội suy biên dạng tự NURBS theo thời gian thực 43 3.3 Đánh giá sai số nội suy 46 3.4 Yêu cầu điều khiển tốc độ tiến dao nội suy biên dạng tự NURBS theo thời gian thực 48 3.5 Các điều kiện giới hạn tốc độ tiến dao chuyển động nội suy 49 Điều kiện giới hạn sai số nội suy 49 Điều kiện đảm bảo giới hạn gia tốc hướng tâm 50 Điều kiện đảm bảo giới hạn gia tốc tiếp tuyến 50 Điều kiện tổng hợp giới hạn tốc độ tiến dao 51 Khó khăn điều khiển tốc độ tiến dao qua vùng giới hạn 53 3.6 Phương pháp điều khiển tốc độ tiến dao 53 Những vị trí “quan trọng” biên dạng tự NURBS 54 So sánh miền ảnh hưởng hai điểm “quan trọng” 56 Tiền xử lý biên dạng tự NURBS 57 Thuật tốn tính tốc độ tiến dao theo thời gian thực 59 3.7 Đề xuất phương pháp nội suy biên dạng tự NURBS theo thời gian thực 61 3.8 Tính chiều dài đường NURBS 62 3.9 Kết mô 63 Mô nội suy biên dạng chữ alpha 63 Mô nội suy biên dạng NURBS phức tạp - biên dạng hình cánh bướm 69 Mơ nội suy biên dạng đường trịn theo phương pháp nội suy NURBS 71 Kết luận chương 74 CHƯƠNG NGHIÊN CỨU PHÁT TRIỂN PHẦN MỀM NỘI SUY BIÊN DẠNG TỰ DO NURBS THEO THỜI GIAN THỰC DỰA TRÊN HỆ ĐIỀU KHIỂN CÓ KIẾN TRÚC MỞ 75 4.1 Giới thiệu hệ điều khiển có kiến trúc mở (OAC - Open Architecture Controller) 75 4.2 Hệ điều khiển số có kiến trúc mở - LinuxCNC 77 4.3 Phát triển phần mềm nội suy biên dạng tự NURBS theo thời gian thực 80 Xây dựng cấu trúc liệu 81 Xây dựng hàm xử lý mức thấp 82 Xây dựng hàm xử lý mức cao 86 Mã lệnh nội suy NURBS: G6.2 87 iv Kết phát triển phần mềm nội suy NURBS 88 4.4 Giao diện CAD/CAM cho phần mềm nội suy NURBS 88 4.5 Kết thử nghiệm phần mềm nội suy NURBS 91 Thử nghiệm 1: Gia công biên dạng phức tạp biểu diễn đường NURBS 93 Thử nghiệm 2: Gia công biên dạng phức tạp biểu diễn nhiều đường NURBS 97 Thử nghiệm 3: Gia công biên dạng đường thân khai 99 Kết luận chương 103 KẾT LUẬN VÀ KIẾN NGHỊ 105 TÀI LIỆU THAM KHẢO 108 DANH MỤC CÁC CƠNG TRÌNH Đà CƠNG BỐ CỦA LUẬN ÁN 111 PHỤ LỤC 112 Phụ lục 1: Thơng số NURBS biên dạng hình cánh bướm 112 Phụ lục 2: Chương trình mơ phần mềm Matlab 113 Phụ lục 3: Chương trình xuất file NC sử dụng định dạng G6.2 để mô tả biên dạng NURBS, phát triển môi trường RhinoScript phần mềm Rhinoceros 116 Phụ lục 4: Một số cấu trúc liệu chương trình phát triển cho phần mềm nội suy NURBS 118 v DANH MỤC CÁC CHỮ VIẾT TẮT Chữ viết tắt 2D, 3D, 2.5D CAD/CAM NC CNC DNC NCK MMI PLC BLU DDA OAC STEP STEP-NC SERCOS NURBS ADCBI ADCAI CC CL APT Giải thích ý nghĩa Các chữ viết tắt số chiều công nghệ gia công CNC Computer Aided Design / Computer Aided Manufacturing Thiết kế / Sản xuất với hỗ trợ máy tính Numerical Control Điều khiển số Computerized Numerical Control Điều khiển số tảng máy tính Direct Numerical Control Numerical Control Kernel Lõi điều khiển số Man Machine Interface Giao diện người máy Programmable Logic Controller Bộ điều khiển logic khả trình Basic Length Unit Độ phân giải vị trí hệ thống điều khiển số Digital Differential Analyzer Mạch tích phân cứng, sử dụng thời kỳ đầu nội suy Open Architecture Controller Hệ điều khiển số có kiến trúc mở STandard for the Exchange of Product model data Tiêu chuẩn định dạng liệu mơ hình sản phẩm Mơ hình trao đổi liệu hệ CAD/CAM CNC tương thích với chuẩn STEP SErial Realtime COmmunication System Hệ thống truyền thông số phục vụ trao đổi liệu điều khiển CNC thiết bị điều khiển truyền động Non-Uniform Rational B-Spline Một mơ hình tham số biểu diễn đường mặt hệ CAD/CAM Accelleration/Deccelleration Control Before Interpolation Điều khiển tăng tốc, giảm tốc trước nội suy Accelleration/Deccelleration Control After Interpolation Điều khiển tăng tốc, giảm tốc sau nội suy Cutter Contact Vị trí tiếp xúc dụng cụ phôi Cutter Location Vị trí tâm dụng cụ Automatically Programmed Tool Ngơn ngữ định nghĩa đường dụng cụ máy CNC vi DANH MỤC CÁC KÝ HIỆU Các đại lượng vector ký hiệu chữ in đậm (ví dụ, P, C, …) Các đại lượng vô hướng ký hiệu chữ in thường (ví dụ, V, A,…) A Phép tính biên độ vector A, B Phép tính tích vơ hướng hai vector AB Phép tính tích có hướng hai vector AT Phép tính chuyển vị vector a Phép tính giá trị tuyệt đối đại lượng vô hướng d dt Phép tính đạo hàm theo biến thời gian, t d du Phép tính đạo hàm theo biến tham số, u m Đơn vị đo chiều dài: mét mm Đơn vị đo chiều dài: mili-mét (10-3 m) µm Đơn vị đo chiều dài: micro-mét (10-6 m) s Đơn vị đo thời gian: giây ms Đon vị đo thời gian: mili-giây mm/min Đơn vị đo tốc độ: mili-mét/phút mm/s Đơn vị đo tốc độ: mili-mét/giây mm/s2 Đơn vị đo gia tốc: mili-mét/giây bình phương 1/mm Đơn vị đo độ cong V chord (u ) Giá trị giới hạn tốc độ tiến dao vị trí C(u ) nhằm đảm bảo điều kiện sai số nội suy Vkchord Giá trị V chord (uk ) V acc (u ) Giá trị giới hạn tốc độ tiến dao vị trí C(u ) nhằm đảm bảo điều kiện gia tốc hướng tâm Vkacc Giá trị V acc (uk ) Vmax Tốc độ tiến dao lập trình chương trình NC (đã nhân với hệ số điều chỉnh người vận hành máy) Vr (u ) Giá trị nhỏ giá trị V chord (u ) , V acc (u ) , Vmax vii Vr ,k Giá trị Vr (uk ) At (u ) Gia tốc tiếp tuyến vị trí C(u ) At ,k Giá trị At (uk ) An (u ) Gia tốc hướng tâm vị trí C(u ) An ,k Giá trị An (uk ) At ,max Giá trị giới hạn gia tốc tiếp tuyến An ,max Giá trị giới hạn gia tốc hướng tâm emax Giá trị giới hạn sai số nội suy L(u ) Chiều dài đường NURBS từ vị trí bắt đầu tới vị trí C(u ) T Chu kỳ nội suy (ms) viii DANH MỤC CÁC BẢNG Bảng 1.1: Chức nội suy đường NURBS điều khiển CNC thương mại 22 Bảng 3.1: Các thông số NURBS biên dạng chữ alpha 63 Bảng 3.2: Các tham số chương trình mơ nội suy biên dạng chữ alpha 64 Bảng 3.3: Giá trị tham số điểm “quan trọng” điểm có độ cong lớn cục biên dạng chữ alpha Vmax  50(mm/s) 64 Bảng 3.4: Các tham số sử dụng chương trình mơ nội suy NURBS với biên dạng hình cánh bướm 70 Bảng 3.5: Các thông số NURBS biên dạng đường tròn 71 Bảng 3.6: Các tham số sử dụng chương trình mơ nội suy NURBS với biên dạng đường tròn 72 Bảng 4.1: Quy ước cách đặt tên số biến sử dụng hàm xử lý mức thấp 83 Bảng 4.2: Thời gian gia công biên dạng cánh bướm theo phương pháp nội suy NURBS (mã G6.2) phương pháp nội suy tuyến tính (mã G01) 97 Bảng 4.3: Thời gian gia công biên dạng thân khai theo phương pháp nội suy NURBS (mã G6.2) phương pháp nội suy tuyến tính (mã G01) 102 ix DANH MỤC CÁC HÌNH VẼ VÀ ĐỒ THỊ Hình 1.1: Các thành phần hệ thống điều khiển số Hình 1.2: Luồng thơng tin hệ thống điều khiển số CNC Hình 1.3: Hai phương án thực chuyển động điểm-điểm từ vị trí A tới vị trí B Hình 1.4: Phối hợp tốc độ trục thành phần chuyển động nội suy Hình 1.5: Minh họa chuyển động nội suy tuyến tính nội suy cung trịn Hình 1.6: Xấp xỉ biên dạng phức tạp chuỗi đoạn thẳng Hình 1.7: Biểu đồ hình thang (a) Tốc độ tiến dao; (b) Gia tốc tiếp tuyến; (c) Biểu đồ hình thang suy biến thành biểu đồ tam giác Hình 1.8: Một số kiểu đường dụng cụ gia công bề mặt tự máy cơng cụ CNC 10 Hình 1.9: Độ phân giải liệu đường dụng cụ 11 Hình 1.10: Giao diện STEP-NC điều khiển CNC, cho phép xử lý nhiều thông tin chi tiết gia công 13 Hình 1.11: So sánh phương pháp nội suy tuyến tính xấp xỉ phương pháp nội suy NURBS 14 Hình 1.12: Giao diện phần mềm chuyển đổi từ chương trình NC phần mềm CAM thơng dụng tạo (với mã G1) thành chương trình NC sử dụng định dạng NURBS công bố [50] 16 Hình 1.13: Cấu trúc nội suy NURBS [16] 19 Hình 1.14: Biểu đồ tốc độ vị trí xung đột trình bày [20] 21 Hình 1.15: Tổng hợp kết nghiên cứu phương pháp nội suy biên dạng tự NURBS theo thời gian thực 22 Hình 2.1: Các hàm sở B-spline bậc với vector tham số nút U={0,0,1,2,3,4,4} 25 Hình 2.2: Các hàm sở B-spline bậc với vector tham số nút U={0,0,0,1,2,3,4,4,4} 25 Hình 2.3: Các hàm sở B-spline bậc với vector tham số nút U={0,0,0,0,1,2,3,4,4,4,4} 25 Hình 2.4: Minh họa việc hình thành đường NURBS 26 Hình 2.5: Điều chỉnh hình dạng đường NURBS thơng qua điểm điều khiển trọng số 27 Hình 2.6: Biểu diễn góc phần tư đường trịn dạng đường Bezier phân thức 29 Hình 2.7: Minh họa đường Bezier với bậc khác 29 Hình 2.8: Ứng dụng đường Bezier việc thiết kế font chữ 30 Hình 2.9: Quan hệ đường NURBS phép chiếu xuyên tâm 31 Hình 2.10: Các điểm điều khiển tính thuật tốn DeBoor 34 Hình 2.11: Minh họa thuật toán DeBoor 35 x [36] Piegl L, Tiller W (1996) The NURBS book, 2nd ed Springer, New York [37] Pritschow G, Altintas Y, Jovane F, Koren Y, Mitsuishi M, Takata S, van Brussel H, Weck M, Yamazaki K (2001) Open controller architecture–past, present and future CIRP Ann - Manuf Technol, 50, 463–470 [38] Quarteroni A, Saleri F (2006) Scientific Computing with MATLAB and Octave, 2nd ed Springer-Verlag Berlin Heidelberg, Berlin [39] Shpitalni M, Koren Y, Lo CC (1994) Realtime curve interpolators Comput Des, 26, 832–838 [40] Staroveški T, Brezak D, Udiljak T (2013) LinuxCNC - The enhanced machine controller: Application and an overview Teh Vjesn, 20, 1103–1110 [41] Staroveški T, Brezak D, Udiljak T, Majetić D (2009) Implementation of a Linuxbased CNC open control system In: CIM2009 pp 209–216 [42] Suh S-H, Kang SK, Chung D-H, Stroud I (2008) Theory and Design of CNC Systems Springer, London [43] Tikhon M, Ko TJ, Lee SH, Sool Kim H (2004) NURBS interpolator for constant material removal rate in open NC machine tools Int J Mach Tools Manuf, 44, 237– 245 [44] Tsai M-C, Cheng C-W (2003) A Real-Time Predictor-Corrector Interpolator for CNC Machining J Manuf Sci Eng, 125, 449-460 [45] Tsai M-S, Nien H-W, Yau H-T (2008) Development of an integrated look-ahead dynamics-based NURBS interpolator for high precision machinery Comput Des, 40, 554–566 [46] Valvo ELO, Drago S, Chimica I, Meccanica I, Scienze V (2014) An Efficient NURBS Path Generator for a Open Source CNC In: Recent Adv Mech Eng pp 173–180 [47] Wang GZ (2011) The Real-Time Look-Ahead NURBS Curve Interpolation Algorithm Adv Eng Forum, 2–3, 523–526 [48] Wang J Bin, Yau HT (2014) Universal real-time NURBS interpolator on a PC-based controller Int J Adv Manuf Technol, 71, 497–507 [49] Xu RZ, Xie L, Li CX, Du DS (2008) Adaptive parametric interpolation scheme with limited acceleration and jerk values for NC machining Int J Adv Manuf Technol, 36, 343–354 [50] Yau H-T, Kuo M-J (2001) NURBS machining and feed rate adjustment for high-speed cutting of complex sculptured surfaces Int J Prod Res, 39, 21–41 [51] Yeh SS, Hsu PL (1999) Speed-controlled interpolator for machining parametric curves Comput Des, 31, 349–357 [52] Yeh SS, Hsu PL (2002) Adaptive-feedrate interpolation for parametric curves with a confined chord error Comput Des, 34, 229–237 [53] Yong T, Narayanaswami R (2003) A parametric interpolator with confined chord errors, acceleration and deceleration for NC machining Comput Des, 35, 1249– 1259 [54] Zhiming X, Jincheng C, Zhengjin F (2002) Performance evaluation of a real-time interpolation algorithm for NURBS curves Int J Adv Manuf Technol, 20, 270–276 110 DANH MỤC CÁC CƠNG TRÌNH Đà CƠNG BỐ CỦA LUẬN ÁN Bành Tiến Long, Nguyễn Hữu Quang (2016) Phương pháp nội suy đường cong NURBS theo thời gian thực hệ thống điều khiển số CNC Tạp chí Khoa học cơng nghệ trường đại học kỹ thuật, số 114, trang 48-53 Nguyễn Hữu Quang, Bành Tiến Long (2016) Phương pháp nội suy NURBS kết hợp chức điều khiển tăng tốc, giảm tốc hệ thống CNC Kỷ yếu Hội nghị Khoa học Cơng nghệ tồn quốc Cơ khí-Động lực 2016, trang 108–113 Nguyễn Hữu Quang, Bành Tiến Long (2016) Một phương pháp giới hạn sai số biên dạng nội suy đường NURBS theo thời gian thực hệ thống điều khiển số CNC Hội thảo quốc gia Khoa học công nghệ & Vật liệu tiên tiến ứng dụng (STAM2016), 12/2016 Nguyễn Hữu Quang, Bành Tiến Long, Phạm Văn Đông (2017) Phát triển chức nội suy đường NURBS theo thời gian thực dựa hệ điều khiển CNC kiểu PCbased Tạp chí Khoa học công nghệ trường Đại học Công nghiệp Hà Nội, số 38, trang 239-243 Nguyễn Hữu Quang, Bành Tiến Long (2017) Nghiên cứu phát triển thuật toán nội suy đường NURBS theo thời gian thực hệ thống CNC trục Tạp chí Cơ khí Việt Nam, số 1-2 năm 2017, trang 13-16 Nguyen Huu Quang, Banh Tien Long (2017) A method of real-time NURBS interpolation with confined chord error for CNC systems Tạp chí Khoa học công nghệ -Viện Hàn lâm khoa học công nghệ Việt Nam, 55 (5), 650-657 111 PHỤ LỤC Phụ lục 1: Thơng số NURBS biên dạng hình cánh bướm Bậc đường NURBS hình cánh bướm: Số điểm điều khiển: 51 Số tham số nút: 56 Tọa độ điểm điều khiển (mm): (54.493, 52.139, 0), (55.507, 52.139, 0), (56.082, 49.615, 0), (56.780, 44.971, 0), (69.575, 51.358, 0), (77.786, 58.573, 0), (90.526, 67.081, 0), (105.973, 63.801, 0), (100.400, 47.326, 0), (94.567, 39.913, 0), (92.369, 30.485, 0), (83.440, 33.757, 0), (91.892, 28.509, 0), (89.444, 20.393, 0), (83.218, 15.446, 0), (87.621, 4.830, 0), (80.945, 9.267, 0), (79.834, 14.535, 0), (76.074, 8.522, 0), (70.183, 12.550, 0), (64.171, 16.865, 0), (59.993, 22.122, 0), (55.680, 36.359, 0), (56.925, 24.995, 0), (59.765, 19.828, 0), (54.493, 14.940, 0), (49.220, 19.828, 0), (52.060, 24.994, 0), (53.305, 36.359, 0), (48.992, 22.122, 0), (44.814, 16.865, 0), (38.802, 12.551, 0), (32.911, 8.521, 0), (29.152, 14.535, 0), (28.040, 9.267, 0), (21.364, 4.830, 0), (25.768, 15.447, 0), (19.539, 20.391, 0), (17.097, 28.512, 0), (25.537, 33.750, 0), (16.602, 30.496, 0), (14.199, 39.803, 0), (8.668, 47.408, 0), (3.000, 63.794, 0), (18.465, 67.084, 0), (31.197, 58.572, 0), (39.411, 51.358, 0), (52.204, 44.971, 0), (52.904, 49.614, 0), (53.478, 52.139, 0), (54.492, 52.139, 0) Trọng số điểm điều khiển: [1.0, 1.0, 1.0, 1.2, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 5.0, 3.0, 1.0, 1.1, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.1, 1.0000, 3.0, 5.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.2, 1.0, 1.0, 1.0] Vector tham số nút: [0, 0, 0, 0, 0.0083, 0.0150, 0.0361, 0.0855, 0.1293, 0.1509, 0.1931, 0.2273, 0.2561, 0.2692, 0.2889, 0.3170, 0.3316, 0.3482, 0.3553, 0.3649, 0.3837, 0.4269, 0.4510, 0.4660, 0.4891, 0.5000, 0.5109, 0.5340, 0.5489, 0.5731, 0.6163, 0.6351, 0.6447, 0.6518, 0.6683, 0.6830, 0.7111, 0.7307, 0.7439, 0.7729, 0.8069, 0.8491, 0.8707, 0.9145, 0.9639, 0.9850, 0.9917, 1, 1, 1, 1] 112 0.2435, 0.4005, 0.5994, 0.7565, Phụ lục 2: Chương trình mơ phần mềm Matlab Chương trình mơ phần mềm Matlab sử dụng luận án bao gồm hai hàm pre_process.m realtime_process.m Ngồi ra, cịn số hàm khác hỗ trợ thực tính tốn xử lý biên dạng đường NURBS Đặc biệt, tính tốn đường NURBS dựa thư viện NURBS Toolbox phát triển bởi tác giả Mark Spink chia sẻ server File Exchange công ty MathWorks (công ty phát triển phần mềm Matlab) Trong phụ lục trình bày mã nguồn hàm pre_process.m realtime_process.m, với mục đích thể thuật tốn tiền xử lý nội suy theo thời gian thực biên dạng tự NURBS dạng cài đặt phần mềm Matlab function mark = pre_process(nrb, Vmax, Amax, emax, T) % Ham pre_proces thuc hien cac tinh toan tien xu ly % nrb : Cau truc du lieu mo ta duong Nurbs % Vmax: Toc yeu cau chuong trinh NC % Amax: Gia tri gioi han gia toc tiep tuyen va gia toc % huong tam % emax: Gia tri gioi han sai so noi suy % T : Chu ky noi suy % mark: Du lieu cua cac diem “quan trong” duoc tinh boi % thuat toan tien xu ly mark.u = nrb.knots(1); mark.V = 0; u = nrb.knots(1); Vold = 0; while u < nrb.knots(end) disp(['u = ', num2str(u)]) [C,C1,C2] = curve_eval(nrb,u); K=vecmag(veccross(C1,C2))/(vecmag(C1)^3); V_chord = 2/T*sqrt(1/K/K - (1/K - emax)*(1/K - emax)); V_acc = sqrt(Amax/K); V = min([Vmax, V_chord, V_acc]); A = (V - Vold)/T; if A < (-Amax) dtg = find_len(nrb, mark(end).u , u); Lmin = (mark(end).V * mark(end).V - V*V)/2/Amax; if dtg >= Lmin %Luu diem mark moi mark(end+1).u = u; mark(end).V = V; else %Over-write diem mark cu mark(end).u = u; mark(end).V = V; end end u = u + V * T / vecmag(C1); Vold = V; end mark(end+1).u = nrb.knots(end); 113 mark(end).V = 0; ue = mark(end).u; Ve = mark(end).V; ind = []; while ue > mark(1).u for i = length(mark):-1:1 if mark(i).u >= ue continue; end dtg = find_len(nrb, mark(i).u, ue); Lmin = (mark(i).V * mark(i).V - Ve * Ve)/2/Amax; if dtg < Lmin ind(end+1)=i; else ue = mark(i).u; Ve = mark(i).V; break; end end mark(ind)=[]; ind = []; end for i = 1:(length(mark)-1) mark(i).S = find_len(nrb, mark(i).u, mark(i+1).u); end mark(end).S=0; end %end pre_process() %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [C,E,V,A,u] = realtime_process(nrb,Vmax,Amax,emax,T,mark) % Ham realtime_process thuc hien cac tinh toan noi suy theo % thoi gian thuc % nrb : Cau truc du lieu mo ta duong Nurbs % Vmax: Toc yeu cau chuong trinh NC % Amax: Gia tri gioi han gia toc tiep tuyen va gia toc % huong tam % emax: Gia tri gioi han sai so noi suy % T : Chu ky noi suy % mark: Du lieu cua cac diem “quan trong” duoc tinh boi % thuat toan tien xu ly % C : Toa cac diem noi suy % E : Mang gia tri sai so noi suy % V : Mang gia tri toc tien dao % A : Mang gia tri gia toc tiep tuyen % u : Mang gia tri tham so u duoc tinh boi thuat toan % noi suy theo thoi gian thuc k = 1; u = nrb.knots(1); while u(k) = mark(num).u) && (u(k) < mark(num+1).u) 114 dx = find_len(nrb, u(k), mark(num+1).u); Vf = mark(num+1).V; V_la = sqrt(2*Amax*dx + Vf*Vf); break; end end [C(:,k),C1,C2] = curve_eval(nrb,u(k)); K=vecmag(veccross(C1,C2))/(vecmag(C1)^3); V_chord = 2/T*sqrt(1/K/K - (1/K - emax)*(1/K - emax)); V_acc = sqrt(Amax/K); V(k) = min([Vmax, V_la, V_chord, V_acc]); if k==1 A(k) = V(k)/T; else A(k) = (V(k) - V(k-1))/T; end if A(k) > Amax A(k) = Amax; if k==1 V(k) = A(k)*T; else V(k) = V(k-1) + A(k)*T; end elseif A(k) < -Amax A(k) = -Amax; V(k) = V(k-1) + A(k)*T; end if k > && (u(k-1) < u(k)) E(k-1) = find_cerr(nrb, u(k-1), u(k)); end dist = V(k) * T; % Xap xi Taylor bac nhat u(k+1) = u(k) + dist/vecmag(C1); % % % % k end end Xap xi Taylor bac hai u(k+1) = u(k) + dist/vecmag(C1) + 0.5*A(k)*T*T/vecmag(C1) 0.5*dist*dist*vecdot(C1,C2)/(vecmag(C1)^4); = k+1; %end of while %end of real_process() 115 Phụ lục 3: Chương trình xuất file NC sử dụng định dạng G6.2 để mô tả biên dạng NURBS, phát triển môi trường RhinoScript phần mềm Rhinoceros Sub ' ' ' CreateNCCode() This routine export a NC file in G6.2 format from a NURBS curve in Rhinoceros @QuangNH - BKHN - 2017 'Pick a curve object Dim strObject strObject = Rhino.GetObject("Select NURBS", 4) If IsNull(strObject) Then Exit Sub 'Get the curve's control points Dim arrPoints, intCount arrPoints = Rhino.CurvePoints(strObject) intCount = Rhino.CurvePointCount(strObject) If Not IsArray(arrPoints) Then Exit Sub 'Get the curve's weight values Dim arrWeights arrWeights = Rhino.CurveWeights(strObject) If Not IsArray(arrWeights) Then Exit Sub 'Get the curve's knot values Dim arrKnots arrKnots = Rhino.CurveKnots(strObject) If Not IsArray(arrKnots) Then Exit Sub 'Get the curve's degree Dim intDegree intDegree = Rhino.CurveDegree(strObject) 'Prompt the user to specify a file name Dim strFilter, strFileName strFilter = " File NC (*.ngc)|*.ngc|All Files (*.*)|*.*||" strFileName = Rhino.SaveFileName("Save Code NC ", strFilter) If IsNull(strFileName) Then Exit Sub 'Get the file system object Dim objFSO, objStream Set objFSO = CreateObject("Scripting.FileSystemObject") 'Open a text file to write to On Error Resume Next Set objStream = objFSO.CreateTextFile(strFileName, True) If Err Then MsgBox Err.Description Exit Sub End If objStream.WriteLine("G21 G40 G54 G90 G94") objStream.WriteLine("# = 20") objStream.WriteLine("# = 0") objStream.WriteLine("# = [# + 2]") 116 objStream.WriteLine("# = 100") objStream.WriteLine("G0 Z#") 'Write each point as text to the file Dim strPoint, strText, dblWeight, Gcode Gcode=Split(Rhino.Pt2Str(arrPoints(0)),",") objStream.WriteLine("X"+Gcode(0)+" Y"+Gcode(1)) objStream.WriteLine("G1 Z[# + #] F100") objStream.WriteLine("M1") objStream.WriteLine("G6.2 X"+Gcode(0)+" Y"+Gcode(1)+" R" + CStr(arrWeights(0))+" K" + CStr(arrKnots(0))+" P" + CStr(intDegree+1)+"F#") For I =1 To intCount-1 Gcode=Split(Rhino.Pt2Str(arrPoints(I)),",") objStream.WriteLine(" X"+Gcode(0)+" Y"+Gcode(1)+" R"+ CStr(arrWeights(I))+" K" + CStr(arrKnots(I-1))) Next For I = intCount-1 To intCount+intDegree - objStream.WriteLine("K" + CStr(arrKnots(intCount-1))) Next objStream.WriteLine("M1") objStream.WriteLine("G1 Z# F100") objStream.WriteLine("M2") End Sub CreateNCCode 117 Phụ lục 4: Một số cấu trúc liệu chương trình phát triển cho phần mềm nội suy NURBS Trong phần trình bày số cấu trúc liệu chương trình phát triển cho phần mềm nội suy NURBS đặt file nurbs.h nurbs.c Đây cấu trúc liệu chương trình thực thuật tốn xử lý đường NURBS, sử dụng các vị trí khác phần mềm nội suy NURBS /************************************************************/ /* nurbs.h * Created on: Dec 1, 2016 * Author: quang */ #ifndef NURBS_H_ #define NURBS_H_ #ifdef cplusplus extern "C" { #endif #define #define #define #define P_MAX 10 COEFS_MAX_SIZE 100 KNOTS_MAX_SIZE 110 DEFAULT_NURBS_QUEUE_SIZE 10 typedef struct { double X, Y, Z; }Point3D; typedef struct { double X,Y,Z,W; }Point4D; typedef struct { Point4D coefs[COEFS_MAX_SIZE]; Point4D dcoefs[COEFS_MAX_SIZE - 1]; double knots[KNOTS_MAX_SIZE]; //knot unsigned int number; //number of coefs (eg n+1) unsigned int order; double target; //length of NURBS curve }nurbs_info_t; typedef struct { nurbs_info_t *queue; int size; int _len; int start, end; int allFull; } NURBS_QUEUE_STRUCT; typedef struct{ Point4D unsigned int *data; size; 118 unsigned int unsigned int }COEFS_BUFFER; head, tail; allFull; typedef struct{ double *data; unsigned int size; unsigned int head, tail; unsigned int allFull; }KNOTS_BUFFER; unsigned int nrbFindSpan(unsigned int n, unsigned int p, const double *U, double u); void nrbFindSpanMult(unsigned int n, unsigned int p, const double *U, double u, unsigned int *k, unsigned int *s); void nrbBasisFuns(unsigned int p, const double *U, double u, unsigned int k, double *N); void nrbAllBasisFuns(unsigned int p, const double *U, double u, unsigned int k, double N[][P_MAX]); void nrb4DCurvePoint(unsigned int n, unsigned int p, const double *U, const Point4D *Pw, double u, Point4D *Cw); void nrb4DCurvePointByCornerCut(unsigned int n, unsigned int p, const double *U, const Point4D *Pw, double u, Point4D *Cw); void nrb3DFrom4D(const Point4D *Cw, Point3D *C); void nrb4DCurveDerivCpts(unsigned int n, unsigned int p, const double *U, const Point4D *Pw, Point4D *PK); void nrb3DCurveDerivs(unsigned int n,unsigned int p,const double *U,const Point4D *Pw,const Point4D *PK,double u, Point3D *C); void nrb3DCurveDerivs2(unsigned int n, unsigned int p, const double *U, const Point4D *Pw, const Point4D *PK, const Point4D *PKK, double u, Point3D *C); double vecmag(const Point3D *C); double vecmag2(const Point3D *C); double vecdot(const Point3D *C1, const Point3D *C2); void veccross(const Point3D *C1, const Point3D *C2, Point3D *C); #ifdef cplusplus } #endif #endif /* NURBS_H_ */ /************************************************************/ /* nurbs.c * Created on: Dec 1, 2016 Author: quang */ #include #include "nurbs.h" #include "rtapi.h" /************************************************************/ 119 //Mot so ky hieu duoc su dung: // m: number of knot values minus // n: number of control points minus // p: degree // U: knot vector // u: parametric value for evaluating the curve // N: array (1D or 2D) of non-vanishing basis function values // k: knot span index, u(k) = U[k+1])) { if(u < U[k]) high = k; else low = k; k = (low + high) / 2; } return k; } void nrbFindSpanMult(unsigned int n, unsigned int p, const double *U, double u, unsigned int *k, unsigned int *s) { unsigned int low, high, mid; if(u==U[n+1]) { *k = n; *s = p; return; } low = p; high = n+1; mid = (low + high) / 2; while((u < U[mid]) || (u >= U[mid+1])) { if(u < U[mid]) high = mid; else low = mid; mid = (low + high) / 2; } *k = mid; *s = 0; while((mid>0) && (u==U[mid])) { (*s)++; mid ; } } 120 void nrbBasisFuns(unsigned int p, const double *U, double u, unsigned int k, double *N) { unsigned int j,r; double left[P_MAX], right[P_MAX]; double temp, saved; N[0] = 1.0; for(j=1; jX = Pw[0].X; Cw->Y = Pw[0].Y; Cw->Z = Pw[0].Z; Cw->W = Pw[0].W; return; } else if(u==U[n+p+1]) { Cw->X = Pw[n].X; Cw->Y = Pw[n].Y; Cw->Z = Pw[n].Z; Cw->W = Pw[n].W; return; } nrbFindSpanMult(n,p,U,u,&k,&s); r = p - s; if(r == 0) { Cw->X = Cw->Y = Cw->Z = Cw->W = return; Pw[k-p].X; Pw[k-p].Y; Pw[k-p].Z; Pw[k-p].W; } for(i=0; iZ = Rw[0].Z; Cw->W = Rw[0].W; return; } void nrb3DFrom4D(const { if(Cw->W == 0) { return; } else { C->X = Cw->X / C->Y = Cw->Y / C->Z = Cw->Z / } } Point4D *Cw, Point3D *C) Cw->W; Cw->W; Cw->W; void nrb4DCurveDerivCpts(unsigned int n, unsigned int p, const double *U, const Point4D *Pw, Point4D *PK) { unsigned int i; for(i = 0; i < n; i++) { PK[i].X = p * (Pw[i+1].X - Pw[i].X) / (U[i+p+1] - U[i+1]); PK[i].Y = p * (Pw[i+1].Y - Pw[i].Y) / (U[i+p+1] - U[i+1]); PK[i].Z = p * (Pw[i+1].Z - Pw[i].Z) / (U[i+p+1] - U[i+1]); PK[i].W = p * (Pw[i+1].W - Pw[i].W) / (U[i+p+1] - U[i+1]); } } void nrb3DCurveDerivs(unsigned int n, unsigned int p, const double *U, const Point4D *Pw, const Point4D *PK, double u, Point3D *C) { Point4D Cw[2] = {{0,0,0,0}, {0,0,0,0}}; nrb4DCurvePointByCornerCut(n,p,U,Pw,u,&Cw[0]); nrb4DCurvePointByCornerCut(n-1,p-1,U+1,PK,u,&Cw[1]); C[0].X = Cw[0].X / Cw[0].W; C[0].Y = Cw[0].Y / Cw[0].W; C[0].Z = Cw[0].Z / Cw[0].W; C[1].X = (Cw[1].X - Cw[1].W * C[0].X) / Cw[0].W; C[1].Y = (Cw[1].Y - Cw[1].W * C[0].Y) / Cw[0].W; C[1].Z = (Cw[1].Z - Cw[1].W * C[0].Z) / Cw[0].W; } 123 void nrb3DCurveDerivs2(unsigned int n, unsigned int p, const double *U, const Point4D *Pw, const Point4D *PK, const Point4D *PKK, double u, Point3D *C) { Point4D Cw[3] = {{0,0,0,0}, {0,0,0,0}, {0,0,0,0}}; nrb4DCurvePointByCornerCut(n,p,U,Pw,u,&Cw[0]); nrb4DCurvePointByCornerCut(n-1,p-1,U+1,PK,u,&Cw[1]); nrb4DCurvePointByCornerCut(n-2,p-2,U+2,PKK,u,&Cw[2]); C[0].X = Cw[0].X / Cw[0].W; C[0].Y = Cw[0].Y / Cw[0].W; C[0].Z = Cw[0].Z / Cw[0].W; C[1].X = (Cw[1].X - Cw[1].W * C[0].X) / Cw[0].W; C[1].Y = (Cw[1].Y - Cw[1].W * C[0].Y) / Cw[0].W; C[1].Z = (Cw[1].Z - Cw[1].W * C[0].Z) / Cw[0].W; C[2].X = (Cw[2].X - * Cw[1].W * C[1].X - Cw[2].W * C[0].X) / Cw[0].W; C[2].Y = (Cw[2].Y - * Cw[1].W * C[1].Y - Cw[2].W * C[0].Y) / Cw[0].W; C[2].Z = (Cw[2].Z - * Cw[1].W * C[1].Z - Cw[2].W * C[0].Z) / Cw[0].W; } double vecmag(const Point3D *C) { return sqrt(C->X * C->X + C->Y * C->Y + C->Z * C->Z); } double vecmag2(const Point3D *C) { return (C->X * C->X + C->Y * C->Y + C->Z * C->Z); } double vecdot(const Point3D *C1, const Point3D *C2) { return (C1->X * C2->X + C1->Y * C2->Y + C1->Z * C2->Z); } void veccross(const Point3D *C1, { C->X = C1->Y * C2->Z - C1->Z C->Y = C1->Z * C2->X - C1->X C->Z = C1->X * C2->Y - C1->Y } const Point3D *C2, Point3D *C) * C2->Y; * C2->Z; * C2->X; 124 ... tạp máy công cụ CNC Đối tượng, phạm vi phương pháp nghiên cứu Luận án nghiên cứu phương pháp nội suy theo thời gian thực biên dạng tự tạo hình bề mặt chi tiết gia công máy công cụ CNC Các biên dạng. .. Chức nội suy máy công cụ điều khiển số CNC Gia công CNC chi tiết với biên dạng bề mặt tự 10 Phương pháp nội suy biên dạng tự NURBS theo thời gian thực (nội suy NURBS) ... cơng máy cơng cụ CNC trục? ?? Mục đích nghiên cứu Nghiên cứu phương pháp nội suy theo thời gian thực biên dạng tự nhằm đáp ứng yêu cầu ngày cao suất chất lượng gia cơng tạo hình bề mặt chi tiết

Ngày đăng: 22/11/2017, 15:50

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan