LabVIEW Vietnam

cancel
Showing results for 
Search instead for 
Did you mean: 

Đọc tín hiệu từ thước quang

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 đỡ

0 Kudos
Message 1 of 12
(10,097 Views)

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.

0 Kudos
Message 2 of 12
(6,709 Views)

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

0 Kudos
Message 3 of 12
(6,709 Views)

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

0 Kudos
Message 4 of 12
(6,709 Views)

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?

tq.PNG

0 Kudos
Message 5 of 12
(6,709 Views)
  • "Rate"=100Hz : Tần số lấy mẫu là 100 Hz (cứ 1/100=0.01s DAQ sẽ lấy mẫu 1 lần)
  • "Samples to read"=100: DAQ Assitant sẽ chờ đủ 100 mẫu mới xuất ra 1 lần tức là cứ mỗi 0.01s *100=1 s bạn sẽ có 100 mẫu mới.
  • Vậy bạn đã dễ hiểu hơn chưa? Còn về code của bạn thì bạn không cần đến biến hàm matlab để biến in thành out đâu bạn có thể dùng chuyển đổi trực tiếp. Dữ liệu từ DAQ assitant đưa ra đã là một array rồi nha bạn. Mình không hiểu tại sao bạn lại chỉ muốn xuất có 1 gia trị thôi? ("ô giá trị đo hiện tại" chỉ hiện thị 1 số) Nếu bạn muốn quan sát có thể dùng Graph để nối thẳng vào đầu ra của DAQ assitant.
  • Về excel, bạn có thể dùng khối "Write to Measurement File" (để tìm kiếm nhanh bạn click vào cửa sổ của Block Diagram bấm tổ hợp phím Ctrl+Space rồi diền tên đó vào), bạn có thể chọn các option ở đó. Measurement File có thể dễ dàng đọc được từ labview cũng như dễ dàng đưa xuống , và bạn có thể coi được bằng excel luôn.

  • Mình thật sự chưa nắm được tất cả những yêu cầu của bạn nên chưa đưa ra giải pháp cụ thể được. Hy vọng giúp được cho bạn.
0 Kudos
Message 6 of 12
(6,709 Views)

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!

vd2.PNG

0 Kudos
Message 7 of 12
(6,709 Views)

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ì:

  • 32 analog inputs, 500 kS/s= 500 k samples /s => chu kì lấy mẫu 0.002 ms
  • Four analog outputs, 900 kS/s = 900 k samples /s => chu kì lấy mẫu 0.0011 ms
  • 48 digital I/O lines lên tới 1 MHz = 10^6 Hz => chu kì lấy mẫu 0.001 ms

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%)

0 Kudos
Message 8 of 12
(6,709 Views)

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!

0 Kudos
Message 9 of 12
(6,709 Views)

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.

0 Kudos
Message 10 of 12
(6,709 Views)