05-25-2014 03:23 AM
Em đang đọc tín hiệu từ thước quang Mitutoyo dùng DAQ Assistant ->Acquire Signals -> Position -> Linear
Em muốn hỏi :
- Thông số "Rate" ảnh hưởng như thế nào đến quá trình đọc tín hiệu?
- Em muốn lấy giá trị để xử lý tiếp. Nhưng giá trị "Samples to read" em chỉ chỉnh được tới giá trị 400(cao hơn không chạy).
- Thời gian giữa những giá trị trả về khi "export data to excel" là bao nhiêu? Trong phần cài đặt không thấy thông số này
Hiện tại em đang sử dụng card NI USB 6343 và dùng conter Ctr1 để đọc giá trị
Mong mọi người giúp đỡ
05-25-2014 11:50 AM
Chào bạn xarixanh,
Bạn có thể chia sẻ datasheet/specification của thước quang Mitutoyo được không? Mình muốn biết tín hiệu đầu ra của nó như thế nào.
05-25-2014 11:20 PM
Dòng thước quang đang sử dụng không tìm thấy datasheet
Nhưng theo tài liệu thì nó có 5 chân:
- 3 chân xung A,B,Z trả về tín hiệu xung vuông ( đã test bằng oscilloscope )
- 1 chân 5V và 1 chân GND
Vấn đề là không thể lưu giá trị trả về của thước quang ( dùng DAQ Assistant ->Acquire Signals -> Position -> Linear. Sử dụng tùy chọn "1 Sample")
Em muốn giá trị trả về từ thước quang được lưu thành một file excel
05-26-2014 05:52 AM
Chào bạn,
Nếu bạn chọn 1 sample (On demand) thì mỗi lần bạn gọi hàm DAQ Assistant nó sẽ lấy giá trị vị trí 1 lần. Vì thế, nếu bạn muốn đo liên tục thì phải đưa hàm DAQ Assistant vào vòng lặp. Khoảng cách thời gian giữa những lần đo phụ thuộc vào việc timing vòng lặp.
Còn nếu bạn chọn 1 sample (HW Timed), N Samples, Continuous Samples thì USB-6343 sẽ sử dụng clock trên phần cứng để lấy mẫu (vị trí). Vì thế tốc độ lấy mẫu gần như chính xác tuyệt đối. Trong chế độ này thì Rate là tốc độ lấy mẫu (bao nhiêu mẫu trên giây) và Samples to read là số lượng mẫu cần lấy mỗi lần bạn gọi hàm DAQ Assistant.
Nếu bạn có thể miêu tả cụ thể yêu cầu bài toán của bạn thì mình sẽ giúp tư vấn thêm.
Phạm Đăng Khoa
Applications Engineer
National Instruments
05-26-2014 01:38 PM
Cảm ơn anh
Em đã thực hiện được. Nhưng phải dùng thêm hàm trong Matlab
Cấu trúc chương trình là dùng một vòng lặp For Loop với N là số mẫu cần lấy
Chương trình dùng thêm một biến global dạng mảng để lưu giá trị mỗi lần DAQ Assistant đọc về.
Block Diagram ở hình phía dưới. Không biết có cách nào ngắn gọn hơn không?(Vì mỗi lần chạy chương trình phải làm thủ công việc xuất dữ liệu ra excel bằng cách "export data to exccel")
Bài toán của hiện giờ là điều khiển động cơ và lấy tín hiệu từ thước quang cùng một lúc. Em chưa đồng bộ được 2 chương trình nên khi lấy giá trị về thường có một vài giá trị đầu tiên của mảng = 0
Và như anh nói thì giá trị "Rate " là tốc độ lấy mẫu. Nếu chọn giá trị "Rate" = 100(tức là lấy 100 mẫu/s) và "Samples to read" =100 thì mỗi lần hàm DAQ Assitant chạy 1s. Như vậy không biết có đúng không?
05-26-2014 08:07 PM
05-27-2014 05:00 AM
Yêu cầu hiện tại của em là:
Cấp n vòng lặp (có thể dùng for hoặc while). Em cần cấp một số xung (từ 10 - 50 xung) trong mỗi vòng lặp (thời gian thực hiện mỗi vòng lặp là 1ms). Sau đó thay đổi số xung (vẫn trong khoảng từ 10 - 50 xung) trong vòng lặp tiếp theo (1ms)
Thực nghiệm cho thấy khoảng thời gian giữa 2 vòng lặp là khoảng 100ms.
Cho em hỏi phần cứng của Card usb 6343 có để đáp ứng được : Thời gian1 lần cấp xung là 1ms hay không (VD như trong trường hợp ở hình đính kèm)?
Thanks!
05-27-2014
08:38 AM
- last edited on
03-27-2025
11:35 AM
by
Content Cleaner
Phần cứng không có vấn đề gì đâu nha bạn. Theo https://www.ni.com/en-us/shop/model/usb-6343.html
thì:
Nếu bạn thấy chậm thì có thể là do code của bạn không thích hợp, cụ thể là thời gian xử lý của máy tính không đáp ứng kịp. (Thường thì để wait=1ms có khả năng CPU của bạn sẽ load 100%)
05-28-2014 02:55 AM
Vậy có cách nào để đảm bảo 1 vòng lặp là 1ms hay ko?
Dù cho giá trị tại "wait time" = 0 thì vẫn thấy hiện tượng bị delay
Chức năng của "wait time" theo em tìm hiểu là dùng để dùng bộ thời gian.
Nếu cài đặt một giá trị cho "wait time" ví dụ = 1. Thì mỗi chu kì vòng lặp sẽ là 1ms hay là công việc trong vòng lặp chạy xong rồi chờ tiếp 1ms nữa mới chạy tiếp chu kì thứ 2.
Thanks!
05-28-2014 10:24 AM
Khối "wait (ms)" là đã đủ rồi bạn ạ. Nếu bạn để là wait= x ms thì vòng lặp đó sẽ đúng x ms, nếu code trong vòng lặp hoàn thành trước x ms, vòng lặp sẽ tự động sleep và chờ đúng x ms mới hoạt động tiếp. NHƯNG, nếu code của bạn hoàn thành lâu hơn x ms thì bó tay, vòng lặp sẽ hoàn thành hết code mới tiếp tục. Vì thế, như mình đã đề cập.
Nếu bạn thấy chậm thì có thể là do code của bạn không thích hợp, cụ thể là thời gian xử lý của máy tính không đáp ứng kịp.
Để tối ưu hoá hệ thống bạn nên chọn khoảng thời gian phù hợp hơn hoặc sử dụng những kĩ thuật khác, ví dụ như tạo vòng lặp khác xử lý song song (phần ghi vào excel không nên bỏ chung với phần xử lý và thu thập dữ liệu).
Hy vọng giải đáp được thắc mắc của bạn.
p/s: kiến thức về labview của mình cũng mới chỉ một ít thôi. Mình hiểu gì nói đó, mong bạn thông cảm.