1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Lập trình tự động thiết kế Auto CAD bằng ngôn ngữ Auto LISP

25 205 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 25
Dung lượng 1,08 MB
File đính kèm BTL_Nguyen Trong Da.rar (842 KB)

Nội dung

Tài liệu bài tập lớn tự động thiết kế chi tiết mặt bích bằng ngôn ngữ lập trình Auto LISP, có đầy đủ file đã lập trình, thuật toán và mô tả chi tiết, tải về chỉ việc chạy. Nếu cần giao lưu học hỏi trao đổi có thể kết bạn zalo trao đổi,...

Bài tập lớn Tự động hóa Thiết kế BÀI TẬP LỚN TỰ ĐỘNG HÓA THIẾT KẾ ĐỀ BÀI: SỬ DỤNG NGƠN NGỮ AUTOLISP THIẾT KẾ CHƯƠNG TRÌNH VẼ MẶT BÍCH THƯỜNG 2D THEO TIÊU CHUẨN JIS 40K SINH VIÊN TH: NGUYỄN TRỌNG ĐÀ GIẢNG VIÊN HD: TRƯƠNG TIẾN PHÁT HẢI PHÒNG 2013 Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế MỤC LỤC CHƯƠNG TỔNG QUAN CHUNG .4 Lý chọn Mục đích Kết đạt .4 CHƯƠNG XÂY DỰNG CHƯƠNG TRÌNH .5 Cơ sở lý thuyết Phân tích số liệu chọn phương án thiết kế Nhận biết nhu cầu Xác định vấn đề Tổng hợp .6 Thực Thiết kế .7 Thử nghiệm chương trình 21 Hướng dẫn sử dụng 23 Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế DANH MỤC HÌNH VẼ Hình 1.1: Kết tính tốn Hình 2.2: Tiêu chuẩn JIS Hình 2.3: Thử nghiệm với ND=25, hình chiếu đứng 21 Hình 2.4: Thử nghiệm với ND=25, hình chiếu 22 Hình 2.5 Thử nghiệm với ND=250, hình chiếu đứng 22 Hình 2.6: Thử nghiệm với ND=250, hình chiếu 23 Hình 2.7: Bước 24 Hình 2.8: Bước 24 Hình 2.9: Bước 25 Hình 2.10: Bước 25 Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế CHƯƠNG TỔNG QUAN CHUNG Lý chọn Đối với tàu hệ thống đường ống chiếm vị trí quan trọng hàng đầu Nó truyền dẫn công chất phục vụ cho hệ động lực, cân tàu, cứu hỏa, sinh hoạt, … Trên tàu số lượng đường ống lớn, việc tính tốn, thiết kế, bố trí, lựa chọn tiêu chuẩn đường ơng vấn đề khó nhiều thời gian Từ vấn đề, yêu cầu đặt xây dựng chương trình tự động hóa việc vẽ bích thường theo tiêu chuẩn JIS Mục đích Vẽ nhanh, xác bích thường theo tiêu chuẩn JIS Phục vụ cho trình thiết kế, học tập nghiên cứu Kết đạt Ta xây dựng chương trình Autolisp cho việc vẽ bích thường theo tiêu chuẩn JIS với giao diện người dùng thân thiện Hình 1.1: Kết tính tốn Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế CHƯƠNG XÂY DỰNG CHƯƠNG TRÌNH Cơ sở lý thuyết Dựa vào tiêu chuẩn: Hình 2.2: Tiêu chuẩn JIS Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế Phân tích số liệu chọn phương án thiết kế Nhận biết nhu cầu Các tàu đại ngày trang bị hệ thống ống phức tạp tiêu chuẩn hóa có kích thước, đường kính, xác định trước Việc thiết kế thực thủ công tay hay máy tính tốn nhiều thời gian tiền bạc gây nhàm chán sai sót với kỹ sư thiết kế.Chính nhu cầu chương trình tự động thiết kế chi tiết hệ thống ông cao Xác định vấn đề Ở có hai vấn đề cần xác định người sử dụng tự động hóa người thực tự động hóa : Người sử dụng tự động hóa cần biết số vấn đề sau : - Người sử dụng chương trình kí sư thiết kế, sinh viên, giảng viên, họ người có kiến thức chuyên môn cao kiến thức phần mềm AutoCAD AutoLISP họ điều chỉnh chương trình cho phù hợp với thói quen u cầu sử dụng Người thực tự động hóa cần có số vân đề sau : - Người thực tự động hóa sinh viên cần biết AutoCAD AutoLISP, khai thác sử dụng tính ưu việt Ngồi người dùng phải cập nhập tin tức, tài liệu sản phẩm thiết kế tự động hóa - Cơ sở thiết kế phải có đủ phần mềm trang thiết bị sử dụng khai thác phần mềm dự định thiết kế - Khả tài đòi hỏi người thực phải có đủ tài để cập nhậm phần mềm hay tài liệu xoay quanh phần mềm thiết kế sản phẩm thiết kế Tổng hợp Từ phân tích ta xây dựng chương trình tự động vẽ mặt bích thường theo tiêu chuẩn JIS 40K ngơn ngữ lập trình AUTOLISP ứng dụng AUTOCAD sử dụng giao diện người dùng Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế Thực 2.1.1.1 Xem xét, nghiên cứu trình sản phẩm tự động hóa tương tự - Cần học hỏi từ sản phẩm q trình tự động hóa tương tự để bắt đầu cách hướng, tránh cách lỗi gặp phải thực 2.1.1.2 Học hỏi người có kinh nhiệm - Tiếp thu kinh nghiệm người khác, để tích lũy kiến thức cho thân nhằm thực chương trình tự động hóa cách hiệu 2.1.1.3 Ứng dụng công nghệ - Người thực phải nghiên cứu nhiều công nghệ kết hợp với tính sáng tạo trí tuệ thân, đưa lựa chọn công nghệ hợp lý Thiết kế 2.1.1.4 Code lệnh mô tả hộp thoại begin: dialog{ label = "Flange"; :spacer{width=20;} :boxed_row { label = "Insert point"; :edit_box {label = "&X_Axis";key = "edit_X";edit_width = 4;} :edit_box {label = "&Y_Axis";key = "edit_Y";edit_width = 4;} } :boxed_row { label = "Nominal Diameter"; :popup_list { label = "Select nomial diameter: "; edit_width = 6; key = "edit_code"; value = "0"; list = "\n10 \n15 \n20 \n25 \n32 \n40 \n50 \n65 \n80 \n100 \n125 \n150 \n200 \n250"; } } :boxed_row { label = "Orthographic projection"; :radio_button {label="Front"; key = "rd";value = "1";} :radio_button {label="Bottom"; key = "rd_f";value = "0";} } Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế :boxed_row { label = "Rotate angle"; :edit_box {label = "Enter rotate angle: ";edit_width = 6;key = "angl";value = "0";} } ok_cancel_err; } 2.1.1.5 Code lệnh thực (defun c:da (/ DCL_ID) (command "_limits" "0,0" "297,210") (command "layer" "set" "0" "") (setq DCL_ID (load_dialog "bd.DCL")) (if (not (new_dialog "begin" DCL_ID)) (exit) ) (if (= (numberp X) T) (set_tile "edit_X" (rtos X)) ) (if (= (numberp Y) T) (set_tile "edit_Y" (rtos Y)) ) (if (= (numberp angl) T) (set_tile "angl" (rtos angl)) ) (if (= (numberp code) T) (set_tile "edit_code" (rtos code)) ) (if (= (numberp rd1) T) (set_tile "rd" (rtos rd1)) ) (if (= (numberp rd2) T) (set_tile "rd_f" (rtos rd2)) ) (action_tile "edit_X" "(setq X (atof (get_tile \"edit_X\")))" ) (action_tile "edit_Y" "(setq Y (atof (get_tile \"edit_Y\")))" ) (action_tile "angl" "(setq angl (atof (get_tile \"angl\")))" ) (action_tile "edit_code" Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế "(setq code (atof (get_tile \"edit_code\")))" ) (action_tile "rd" "(setq rx (atof (get_tile \"rd\")))") (action_tile "rd_f" "(setq rx (atof (get_tile \"rd_f\")))") (action_tile "accept" "(done_dialog 1)") (action_tile "rd" "(setq rd1 (atoi $value)) (setq rd2 0)") (action_tile "rd_f" "(setq rd2 (atoi $value)) (setq rd1 0)") (action_tile "cancel" "(done_dialog 1) (exit)") (start_dialog) (unload_dialog DCL_ID) (setq A1 (list x y 0)) (cond ((= code 0) (setq OD 8.65) (setq d0 8.9) (setq D 55) (setq t1 18) (setq TL 26) (setq a 17) (setq b 19) (setq r 5) (setq f 1) (setq g 26) (setq dn 0) (setq C 37.5) (setq BL 4) (setq h 9.5) (setq S1 14) (setq m 6) (setq S2 14) (setq n 5) ) ((= code 1) (setq OD 10.85) (setq d0 11.1) (setq D 57.5) (setq t1 20) (setq TL 30) (setq a 19.5) (setq b 21.5) (setq r 5) (setq f 1) (setq g 27.5) (setq dn 0) (setq C 40) Nguyễn Trọng Đà Page 7/10/2019 Bài tập lớn Tự động hóa Thiết kế (setq (setq (setq (setq (setq (setq BL 4) h 9.5) S1 16.25) m 6) S2 16.25) n 5) ) ((= code 2) (setq OD 13.6) (setq d0 13.85) (setq D 60) (setq t1 20) (setq TL 30) (setq a 22.5) (setq b 24.5) (setq r 5) (setq f 1) (setq g 30) (setq dn 0) (setq C 42.5) (setq BL 4) (setq h 9.5) (setq S1 19) (setq m 6) (setq S2 19) (setq n 5) ) ((= code 3) (setq OD 17.25) (setq d0 17.25) (setq D 65) (setq t1 22) (setq TL 32) (setq a 27.5) (setq b 29.5) (setq r 5) (setq f 1) (setq g 35) (setq dn 0) (setq C 47.5) (setq BL 4) (setq h 9.5) (setq S1 23.9) (setq m 6) (setq S2 23.9) (setq n 5) ) ((= code 4) (setq OD 21.35) Nguyễn Trọng Đà Page 10 7/10/2019 Bài tập lớn Tự động hóa Thiết kế (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq d0 21.6) D 70) t1 24) TL 35) a 32) b 34) r 3) f 2) g 40) dn 0) C 52.5) BL 4) h 9.5) S1 28.25) m 6) S2 28.25) n 5) ) ((= code 5) (setq OD 24.3) (setq d0 24.55) (setq D 80) (setq t1 24) (setq TL 35) (setq a 35) (setq b 37) (setq r 6) (setq f 2) (setq g 45) (setq dn 0) (setq C 60) (setq BL 4) (setq h 11.5) (setq S1 31.25) (setq m 6) (setq S2 31.25) (setq n 5) ) ((= code 6) (setq OD 30.25) (setq d0 30.55) (setq D 82.5) (setq t1 26) (setq TL 38) (setq a 43) (setq b 45) (setq r 6) (setq f 2) (setq g 52.5) Nguyễn Trọng Đà Page 11 7/10/2019 Bài tập lớn Tự động hóa Thiết kế (setq (setq (setq (setq (setq (setq (setq (setq dn 0) C 65) BL 8) h 9.5) S1 37.25) m 6) S2 37.25) n 5.5) ) ((= code 7) (setq OD 38.15) (setq d0 38.55) (setq D 100) (setq t1 30) (setq TL 44) (setq a 53) (setq b 55) (setq r 8) (setq f 2) (setq g 65) (setq dn 31.15) (setq C 80) (setq BL 8) (setq h 11.5) (setq S1 45.75) (setq m 7) (setq S2 45.75) (setq n 7) ) ((= code 8) (setq OD 44.55) (setq d0 45.15) (setq D 105) (setq t1 32) (setq TL 46) (setq a 59) (setq b 62) (setq r 8) (setq f 2) (setq g 70) (setq dn 36.95) (setq C 85) (setq BL 8) (setq h 11.5) (setq S1 52.75) (setq m 7.5) (setq S2 52.75) (setq n 7) ) Nguyễn Trọng Đà Page 12 7/10/2019 Bài tập lớn Tự động hóa Thiết kế ((= code 9) (setq OD 57.15) (setq d0 57.75) (setq D 125) (setq t1 36) (setq TL 52) (setq a 72.5) (setq b 75.5) (setq r 8) (setq f 2) (setq g 82.5) (setq dn 48.55) (setq C 102.5) (setq BL 8) (setq h 12.5) (setq S1 66.5) (setq m 8.5) (setq S2 66.5) (setq n 7) ) ((= code 10) (setq OD 69.9) (setq d0 70.7) (setq D 150) (setq t1 40) (setq TL 58) (setq a 91) (setq b 94) (setq r 8) (setq f 2) (setq g 100) (setq dn 60.4) (setq C 125) (setq BL 8) (setq h 13.5) (setq S1 80.25) (setq m 9.5) (setq S2 80.25) (setq n 7) ) ((= code 11) (setq OD 82.6) (setq d0 83.5) (setq D 177.5) (setq t1 44) (setq TL 64) (setq a 100) (setq b 104) (setq r 8) Nguyễn Trọng Đà Page 13 7/10/2019 Bài tập lớn Tự động hóa Thiết kế (setq (setq (setq (setq (setq (setq (setq (setq (setq (setq f 2) g 120) dn 71.6) C 147.5) BL 12) h 16.5) S1 94) m 11) S2 94) n 7) ) ((= code 12) (setq OD 108.15) (setq d0 109.1) (setq D 202.5) (setq t1 50) (setq TL 72) (setq a 127.5) (setq b 131.5) (setq r 8) (setq f 2) (setq g 145) (setq dn 95.45) (setq C 172.5) (setq BL 12) (setq h 16.5) (setq S1 121.5) (setq m 13) (setq S2 121.5) (setq n 7) ) ((= code 13) (setq OD 133.7) (setq d0 134.75) (setq D 237.5) (setq t1 56) (setq TL 80) (setq a 155) (setq b 159) (setq r 10) (setq f 2) (setq g 177.5) (setq dn 118.6) (setq C 205) (setq BL 12) (setq h 16.5) (setq S1 149) (setq m 15) (setq S2 149) Nguyễn Trọng Đà Page 14 7/10/2019 Bài tập lớn Tự động hóa Thiết kế (setq n 7) ) ) (cond (( code 7) (cond ((= rd1 1) (setq A2 (polar A1 S2)) (setq A3 (polar A1 g)) (setq AT3 (polar A3 (/ pi 2) f)) (setq A4 (polar AT3 f)) (setq A5 (polar AT3 (- D g))) (setq A6 (polar A5 (/ pi 2) (- t1 f))) (setq A7 (polar A6 (- pi) (- D (+ a r)))) (setq AT7 (polar A7 (- pi) r)) (setq A8 (polar AT7 (/ pi 2) r)) (setq A10 (polar A1 (/ pi 2) TL)) (setq A11 (polar A10 (- pi) S1)) (setq A12 (polar A10 (- pi) a)) (setq AT9 (polar A10 S1)) (setq A9 (polar A10 a)) (setq A13 (polar A12 (- (/ pi 2)) (- TL (+ t1 r)))) (setq AT14 (polar A13 (- (/ pi 2)) r)) (setq A14 (polar AT14 (- pi) r)) (setq A15 (polar A14 (- pi) (- D (+ a r)))) (setq A16 (polar A15 (- (/ pi 2)) (- t1 f))) (setq A17 (polar A16 (- D (+ g f)))) (setq AT18 (polar A17 f)) (setq A18 (polar AT18 (- (/ pi 2)) f)) (setq A19 (polar A1 (- pi) S2)) (setq D1 (polar A1 C)) (setq D2 (polar D1 (/ pi 2) f)) (setq D3 (polar D1 (/ pi 2) t1)) (setq D4 (polar D3 (/ pi 2) 10)) (setq D5 (polar D2 (- (/ pi 2)) 10)) (setq L5 (polar D3 (- pi) h)) (setq L6 (polar D3 h)) (setq L7 (polar D2 (- pi) h)) (setq L8 (polar D2 h)) (setq DX1 (polar A1 (- pi) C)) (setq DX2 (polar DX1 (/ pi 2) f)) (setq DX3 (polar DX1 (/ pi 2) t1)) (setq DX4 (polar DX3 (/ pi 2) 10)) (setq DX5 (polar DX2 (- (/ pi 2)) 10)) (setq LX5 (polar DX3 (- pi) h)) (setq LX6 (polar DX3 h)) Nguyễn Trọng Đà Page 18 7/10/2019 Bài tập lớn Tự động hóa Thiết kế (setq LX7 (polar DX2 (- pi) h)) (setq LX8 (polar DX2 h)) (setq AT10 (polar A10 (/ pi 2) 10)) (setq AT1 (polar A1 (- (/ pi 2)) 10)) (setq B3 (polar A1 (/ pi 2) (- TL m))) (setq B2 (polar B3 d0)) (setq B4 (polar B3 (- pi) d0)) (setq B5 (polar B4 (- (/ pi 2)) (- TL (+ m (+ n (- d0 dn)))))) (setq B1 (polar B2 (- (/ pi 2)) (- TL (+ m (+ n (- d0 dn)))))) (setq M1 (polar L8 (/ pi 4) 1)) (setq M2 (polar A16 (/ pi 4) 1)) (setq K1 (polar A1 (- pi) dn)) (setq K2 (polar K1 (/ pi 2) n)) (setq KD1 (polar A1 dn)) (setq KD2 (polar KD1 (/ pi 2) n)) (command "_zoom" "_c" A1 (* D)) (command "layer" "set" "0" "") (command "_line" A3 A1 "") (command "_arc" A4 "e" A3 "r" f) (command "_line" A5 A4 "") (command "_line" A6 A5 "") (command "_line" A7 A6 "") (command "_arc" A8 "e" A7 "r" r) (command "_line" A9 A8 "") (command "_line" A10 A9 "") (command "_line" A12 A10 "") (command "_line" A12 A13 "") (command "_arc" A14 "e" A13 "r" r) (command "_line" A15 A14 "") (command "_line" A16 A15 "") (command "_line" A17 A16 "") (command "_arc" A18 "e" A17 "r" f) (command "_line" A18 A1 "") (command "_line" L5 L7 "") (command "_line" L6 L8 "") (command "_line" LX5 LX7 "") (command "_line" LX6 LX8 "") (command "_line" B1 B2 "") (command "_line" B1 B5 "") (command "_line" B4 B5 "") (command "_line" B4 B2 "") (command "_arc" A11 "e" B4 "r" m) (command "_arc" B2 "e" AT9 "r" m) (command "layer" "m" "2" "c" "2" "" "l" "center" "" "") (command "_line" D4 D5 "") (command "_line" DX4 DX5 "") Nguyễn Trọng Đà Page 19 7/10/2019 Bài tập lớn Tự động hóa Thiết kế "") "") "") (command (command (command (command (command (command (command (command (command "_line" AT10 AT1 "") "layer" "set" "0" "") "_line" K1 K2 "") "_line" KD1 KD2 "") "_line" K2 KD2 "") "_arc" B5 "e" K2 "r" (- d0 dn)) "_arc" KD2 "e" B1 "r" (- d0 dn)) "_zoom" "_c" A1 (* D)) "layer" "m" "3" "c" "3" "" "l" "" "" (command "bhatch" "p" "ansi31" (/ TL 10) "0" m1 (command "bhatch" "p" "ansi31" (/ TL 10) "0" m2 (command "bhatch" "p" "ansi31" (/ TL 10) "0" AT18 "") (command "bhatch" "p" "ansi31" (/ TL 10) "0" AT3 "") (setq AO10 (polar AT10 D)) (setq AO1 (polar AT1 (- pi) D)) (setq obj (ssget "_C" AO10 AO1)) (command "_rotate" obj "" A1 angl) ) ((= rd2 1) (setq i 1) (setq GOC (/ (* pi) BL)) (setq DT1 (polar A1 (+ D 10))) (setq DT2 (polar A1 (- pi) (+ D 10))) (setq DT3 (polar A1 (/ pi 2) (+ D 10))) (setq DT4 (polar A1 (- (/ pi 2)) (+ D 10))) (command "_zoom" "_c" A1 (* D)) (command "layer" "set" "0" "") (command "_circle" A1 D) (command "_circle" A1 d0) (command "_circle" A1 S1) (command "_circle" A1 a) (command "layer" "m" "2" "c" "2" "" "l" "center" "" "") (command "layer" "set" "2" "") (command "_circle" A1 C) (command "layer" "new" "4" "color" "4" "4" "ltype" "hidden" "4" "") (command "layer" "set" "4" "") (command "_circle" A1 g) (command "_zoom" "_c" A1 (* D)) (command "layer" "set" "2" "") (command "_line" DT1 DT2 "") (command "_line" DT3 DT4 "") Nguyễn Trọng Đà Page 20 7/10/2019 Bài tập lớn Tự động hóa Thiết kế ) (repeat BL (setq LO (polar A1 (* i goc) C)) (command "layer" "set" "0" "") (command "_circle" LO h) (command "layer" "set" "2" "") (setq DTH1 (polar A1 (* i goc) (+ C (* h)))) (setq DTH2 (polar A1 (* i goc) (- C (* h)))) (command "_line" DTH1 DTH2 "") (setq i (+ i 1)) ) ) ) ) ) Thử nghiệm chương trình 2.1.1.6 Thử nghiệm chương trình vẽ mặt bích có đường kính danh nghĩa 25mm, vẽ hình chiếu đứng: Hình 2.3: Thử nghiệm với ND=25, hình chiếu đứng Nguyễn Trọng Đà Page 21 7/10/2019 Bài tập lớn Tự động hóa Thiết kế 2.1.1.7 Thử nghiệm chương trình vẽ mặt bích có đường kính danh nghĩa 25mm, vẽ hình chiếu bằng: Hình 2.4: Thử nghiệm với ND=25, hình chiếu 2.1.1.8 Thử nghiệm chương trình vẽ mặt bích có đường kính danh nghĩa 250mm, vẽ hình chiếu đứng: Hình 2.5 Thử nghiệm với ND=250, hình chiếu đứng Nguyễn Trọng Đà Page 22 7/10/2019 Bài tập lớn Tự động hóa Thiết kế 2.1.1.9 Thử nghiệm chương trình vẽ mặt bích có đường kính danh nghĩa 250mm, vẽ hình chiếu bằng: Hình 2.6: Thử nghiệm với ND=250, hình chiếu 2.1.1.10 Kết luận Các hình vẽ kích thước mặt bích chương trình vẽ trùng khớp toàn toàn với tiêu chuẩn JIS 40K Chương trình thiết kế xác đưa vào sử dụng Hướng dẫn sử dụng Bước 1: Copy file db.DCl vào thư mục Support Autocad Bước 2: Mở chương trình Autocad Sau vào Tool -> AutoLISP -> Load Application -> Chọn đường dẫn đến file Flange.LSP -> Nhấn Load Nguyễn Trọng Đà Page 23 7/10/2019 Bài tập lớn Tự động hóa Thiết kế Hình 2.7: Bước Hộp thoại Load/Unload Application => Chọn đường dẫn đến file Flange.LSP -> Nhấn Load Hình 2.8: Bước Bước Tắt hết chức truy bắt điểm OSNAP, POLAR, ORTHOR Nguyễn Trọng Đà Page 24 7/10/2019 Bài tập lớn Tự động hóa Thiết kế Hình 2.9: Bước Bước 3: Tại dòng lệnh ACAD gõ lệnh DA sau thực yêu cầu hộp thoại Hình 2.10: Bước Nguyễn Trọng Đà Page 25 7/10/2019

Ngày đăng: 10/07/2019, 21:28

TỪ KHÓA LIÊN QUAN

w