Đến nội dung


Hình ảnh
- - - - -

Nhờ soát giúp CT autolisp về cơ khí


  • Please log in to reply
3 replies to this topic

#1 roberto

roberto

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 17 February 2008 - 10:00 AM

Tôi viết hộ cậu em ct mô phỏng đường chạy dụng cụ của file .NC xuất từ MasterCam cho bộ điều khiển CNC Fanuc. Tôi học lập Autolisp đã từ năm 1996 và sau đó không dùng nữa. Do thời gian quá lâu không lập trình và đầu óc mu mẫn đi rồi soát mãi vẫn chưa tìm ra lỗi. Nhờ các cao thu soát hộ, mô tả sơ bộ như sau:
Ct "drawn_main"- drawnc.lsp là mô phỏng file *.NC (2 file dinh kem "pad.nc" "sy8402.nc")
http://www.cadviet.c.../New_Folder.rar
cụ thể là chỉ vẽ cung tròn và đường thẳng lấy dữ liệu từ file .NC thôi.
một số hàm lấy từ "cutxy.lsp"
Khi chạy CT khi được khi không hoặc chi chạy được 1 lần chạy tiếp lần 2 thì lỗi, mở bản vẽ mới load lại thì lại chạy được 1 lần.

thêm nữa các biến hệ thống (system variable) tôi quên hết rồi, thực hiện phép toán ví dụ: (/ 3 4) kết quả = 0, đọc help và set thử biến mãi không được.
Tôi mất 2 tuần để viết CT này mà tôi lại không có nhiều thời gian (2h/ ngày) mong các bạn giúp
Xin cam on
Roberto Nguyen
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 17 February 2008 - 12:55 PM

Sau khi xem file lisp của bạn, tôi thấy 2 nguyên nhân gây lỗi và không ổn định trong chương trình bạn như sau:

1. Sử dụng hàm findfile trong trường hợp tổng quát:
Trong modul Rapid move point của bạn sử dụng dòng mã gán lsp-path (vl-filename-directory (findfile "cutxy.lsp")) để tìm thư mục chứa file cutxy.lsp. Hàm findfile thực tế chỉ tìm trong các thư mục Support File Search Path của Tool > Option > File mà thôi. Còn khi nằm ở thư mục khác thì hàm này sẽ không tìm thấy và trả về nil. Vì vậy thay bằng dòng lệnh đó, bạn hãy gán lsp-path thành tên thư mục luôn ví dụ lsp-path "C:\\temp\\New Folder".

2. Không tắt osnap khi sử dụng hàm command:
Lỗi này khiến modul Convert NC > DWG của bạn chỉ chạy đúng khi file chưa có đối tượng nào (lần chạy đầu tiên). Sang lần chạy thứ 2, đối tượng đã có nên chương trình sẽ 'vẽ' sai do tọa độ các đối tượng bị dính vào nhau.
Để khắc phục điều này, bạn thêm dòng mã: (setq oldos (getvar "osmode"))(setvar "osmode" 0) vào đầu chương trình và thêm dòng mã (setvar "osmode" oldos) vào cuối chương trình. Hoặc trước khi chạy chương trình bạn tắt osnap đi (bằng phím F3).

Sau khi thực hiện như trên, tôi thấy các modul của chương trình chạy ổn định, không báo lỗi nhưng không biết có chạy đúng không.


Về phép chia, bạn hãy sử dụng: (/ 3.0 4) hoặc (/ (float 3) 4) để lấy giá trị thực của phép chia.
  • 0

#3 roberto

roberto

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 17 February 2008 - 02:26 PM

Cám ơn bạn Nguyen Hoanh, tôi cũng nghĩ là lỗi do biến hệ thống nào đó nhưng không biết là biến nào, tôi ra soát ct nửa ngày mà không tìm ra lỗi, bây giờ thi ok rồi.

xin hỏi thêm.
Nếu khi đặt đường dẫn cố định, khi người sử dụng thay đổi thư mục thì sẽ gây lỗi có cách nào khắc phục không? ví dụ đổi "C:\\temp\\New Folder" thành "D:\\temp\\New Folder", Bởi vì các modul tiếp phải đọc file dữ liệu rất nhiều. Hay phải viết 1 function kiểm tra và bắt người dùng chỉ ra đường dẫn?

Trước đây tôi học lập trình R12 for dos thì thực hiện (/ 3 4) để lấy giá trị thực chỉ cần setvar xxxxxx , lâu quá rồi không nhớ nổi, các phiên bản về sau thi không biết thế nào vi tôi không sử dụng từ năm 1997 đến bây giờ.
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 17 February 2008 - 03:28 PM

xin hỏi thêm.
Nếu khi đặt đường dẫn cố định, khi người sử dụng thay đổi thư mục thì sẽ gây lỗi có cách nào khắc phục không? ví dụ đổi "C:\\temp\\New Folder" thành "D:\\temp\\New Folder", Bởi vì các modul tiếp phải đọc file dữ liệu rất nhiều. Hay phải viết 1 function kiểm tra và bắt người dùng chỉ ra đường dẫn?

Tôi thường xử lý cách này như sau:

1. Lưu đường dẫn file vào một biến của config (bằng hàm getcfg và setcfg) trong acad. Đây là cách lưu dữ liệu đơn giản và không liên quan đến các đường dẫn.

2. Lúc khởi động lệnh, gán đường dẫn file bằng biến config đã lưu. Kiểm tra đường dẫn vừa gán có tồn tại không? nếu không tồn tại thì bắt người sử dụng chỉ định lại đường dẫn và save nó vào config.

Nói thì hơi lằng nhằng, nhưng lệnh thì rất đơn giản như sau:

(setq lsp-path (getcfg "AppData/roberto/tenfile"))
(while (or (not lsp-path) (not (vl-file-directory-p lsp-path)))
(setq lsp-path (getstring t "\nVao duong dan toi file: "))
(if (vl-file-directory-p lsp-path) (setcfg "AppData/roberto/tenfile" lsp-path))
)

  • 1