Nhưng đây không phải chỉ là chỗ nối với máy in mà khi sử dụng máy tính vào việc khác, như truyền dữ liệu từ máy tính tới một thiết bị khác, hay điều khiển thiết bị bằng máy tính thì việc
Trang 1NỘI DUNG Trang
Chương 2 CƠ SỞ LÝ THUYẾT VỀ MÁY TÍNH VÀ GIAO TIẾP 1
2.1.2 Nguyên lý hoạt động của các thành phần trong máy tính 1
2.2.1 Giao tiếp song song – giao tiếp qua cổng máy in 5
2.3.5 Định dạng và phương thức truyền dữ liệu nối tiếp 10
2.4 Khái quát về giao tiếp nối tiếp trong Matlab 13 2.4.1 Trình tự thực hiện giao tiếp giữa thiết bị với cổng nối tiếp 13 2.4.2 Thiết lập và hiển thị các thuộc tính cấu hình 14
Trang 22.8 Ghi thông tin lên đĩa 31
Chương 3 CƠ SỞ LÝ THUYẾT VỀØ LINH KIỆN THIẾT KẾ BỘ GIAO
TIẾP
34
3.1 Giới thiệu khái quát về họ vi điều khiển MSC-51 34
3.3 Hoạt động của bộ định thời và cách ngắt 45
Chương 4 KHẢO SÁT HỆ THỐNG ĐIỀU KHIỂN ĐỘNG CƠ 61
4.1 Cấu trúc hệ thống điều khiển lập trình và thuật toán điều
khiển
61
4.1.1 Sơ đồ cấu trúc và các khối chức năng 61
4.2.2 Cảm biến áp suất tuyệt đối trên đường ống nạp 70
4.4.7 Cảm biến tốc độ động cơ và vị trí piston 74
Trang 34.3.3 Cấu trúc ECU 79
4.4.3 Điều khiển chế độ không tải và kiểm soát khí thải 94
4.6.5 Những ứng dụng và hạn chế của máy quét dữ liệu nối tiếp trong
Chương 5 THIẾT KẾ GIAO DIỆN GIAO TIẾP BẰNG MATLAB 103
5.3.3 Thiết lập thuộc tính cho các thành phần 108
Trang 45.6 Ứng dụng thiết kế giao diện giao tiếp 123
5.6.3 Thiết kế hộp thoại hiển thị thông báo kết thúc chương trình 133
Chương 6 THIẾT KẾ BỘ GIAO TIẾP 134
6.1.4 Thực nghiệm xác định đặc tuyến làm việc của các cảm biến trên
động cơ
136
Chương 7 THỰC NGHIỆM 146
7.4.2 Nhập dữ liệu điều khiển động cơ từ máy tính 151
Chương 8 KẾT LUẬN VÀ ĐỀ NGHỊ
Phụ lục 1 Chương trình Matlab sử dụng trong giao diện và giao tiếp
Phụ lục 2 Chương trình vi điều khiển của bộ giao tiếp
Phụ lục 3 Bảng thông số dữ liệu động cơ theo thực nghiệm
Trang 5Chương 1:
DẪN NHẬP
1.1 Đặt vấn đề
Đã hơn 118 năm kể từ khi chiếc ô tô đầu tiên trên thế giới ra đời, đến nay ô tô đã trở thành một phương tiện vận chuyển cần thiết không gì thay thế được trong xã hội loài người So với các phương tiện giao thông khác, ô tô có vị trí vô cùng quan trọng vì tỉ lệ hành khách tham gia giao thông bằng đường bộ cao hơn hẳn so với các loại phương tiện giao thông khác, hằng năm tỷ lệ tăng trưởng trong sản xuất ôtô đạt xấp xỉ 3%
Cùng với xu hướng phát triển của thế giới, khoa học kỹ thuật và công nghệ cũng phát triển không ngừng, nhiều thành tựu nổi bật góp phần thúc đẩy sự phát triển các ngành công nghiệp Nền công nghiệp ô tô cũng không nằm ngoài quy luật đó, từ những năm 80 của thế kỷ XX, công nghệ điện tử đã được ứng dụng trên ô tô dần dần thay thế các cơ cấu điều khiển bằng cơ khí Qua nhiều thập niên, điện tử trở thành một trong những nhân tố quan trọng không thể thiếu được trên ô tô Nó không những giúp động cơ ô tô điều khiển chính xác hơn nhằm giảm ô nhiễm môi trường, tiết kiệm nhiên liệu, tăng công suất động cơ mà còn là thước đo giá trị về tính êm dịu, mức độ tiện nghi của chiếc ô tô hiện đại, từ đó, quyết định khả năng sống còn của chiếc ô tô đó
Song song với việc hiện đại hóa chiếc ô tô ngày càng hoàn hảo hơn thì vấn đề bảo trì, chẩn đoán, sửa chữa cũng ngày càng phức tạp hơn Với những chiếc ô tô hiện đại hiện nay, lượng dữ liệu điều khiển xe ngày càng nhiều Vì vậy, chẩn đoán, sửa chữa theo phương pháp thủ công đã trở nên hết sức khó khăn nếu không muốn nói là không tưởng Do đó, để giúp cho người kỹ thuật viên thực hiện tốt công việc chẩn đoán và sữa chữa, các ô tô đời mới đã trang bị hệ thống tự chẩn đoán Tuy nhiên, hệ thống tự chẩn đoán chỉ phát hiện được lỗi hệ thống khi các tín hiệu nằm ngoài khoảng xác định cho phép Vì thế, khi tín hiệu đó sai lệch với thực tế nhưng vẫn nằm trong khoảng xác định đó thì hệ thống tự chẩn đoán vẫn không phát hiện được Điều này dẫn đến động cơ hoạt động không đạt hiệu quả cao
Mặt khác, với cương vị là người giáo viên kỹ thuật, người nghiên cứu luôn mong muốn đạt hiệu quả cao trong công tác giảng dạy Ngoài kiến thức chuyên môn, lòng say mê công việc cộng với phương pháp sư phạm hiện đại thì thiết bị dạy học cũng góp phần rất lớn trong việc nâng cao hiệu quả giảng dạy, đặc biệt là giảng dạy kỹ thuật Nghiên cứu, thiết kế, chế tạo mô hình dạy học là một minh chứng cụ thể và đề tài này cũng không ngoài mục đích đó Sản phẩm của đề tài là mô hình dạy học minh họa sự thay đổi các thông số động cơ và đặc biệt là ảnh hưởng của các tín hiệu đầu vào đến hoạt động của động cơ như thế nào
Song song với công tác giảng dạy, công tác nghiên cứu của người giáo viên kỹ thuật cũng không kém phần quan trọng Hầu hết các dữ liệu điều khiển động cơ
Trang 6được xác định từ thực nghiệm Nhưng do tín hiệu đầu vào khá nhiều, thiết bị trong nước còn khiêm tốn nên chúng ta không thể xác định được sự ảnh hưởng của từng tín hiệu đến các chế độ hoạt động của động cơ Điều này ảnh hưởng rất lớn đến công tác nghiên cứu
Với những trăn trở, khúc mắt trong chuyên môn cùng với khát vọng nâng cao trình độ, cải tiến, phát triển kỹ thuật Người nghiên cứu đã tìm được hướng giải
quyết trong đề tài: “Nghiên cứu, thiết kế, chế tạo mạch giao tiếp giữa máy tính và ECU điều khiển động cơ “ do PGS TS Đỗ Văn Dũng hướng dẫn Đề tài này được thực hiện với ba nội dung chính:
Nghiên cứu lý thuyết về giao tiếp giữa máy tính và động cơ bằng Matlab
Thiết kế bộ giao tiếp giữa máy tính cá nhân và ECU điều khiển động
cơ
Chế tạo bộ giao tiếp giữa máy tính cá nhân và ECU điều khiển động cơ
1.2 Mục tiêu và nhiệm vụ
Đề tài “Nghiên cứu, thiết kế, chế tạo mạch giao tiếp giữa máy tính và ECU điều khiển động cơ “ nhằm thiết kế và chế tạo mạch giao tiếp hai chiều giữa máy tính và ECU điều khiển động cơ nhằm hiển thị các thông số hoạt động của động
cơ, đồng thời, điều khiển động cơ từ máy tính Việc tính toán mô phỏng và điều khiển động cơ được thực hiện thông qua phần mềm Matlab Trên cơ sở mạch giao tiếp này, ta có thể phát triển thành các thiết bị chẩn đoán và sửa chữa động cơ
Các bước thực hiện đề tài:
Nghiên cứu cấu trúc vi điều khiển
Nghiên cứu nguôn ngữ lập trình Assembly
Nghiên cứu cấu trúc máy tính cá nhân
Khảo sát các dạng dữ liệu của động cơ
Nghiên cứu về truyền dữ liệu nối tiếp trong Matlab
Nghiên cứu thiết kế giao diện giao tiếp bằng Matlab
Nghiên cứu thiết kế phần cứng bộ giao tiếp
Lập trình vi điều khiển bằng ngôn ngữ Assembly
Lập trình điều khiển giao diện giao tiếp bằng Matlab
Thực nghiệm và kiểm tra độ chính xác của của thí nghiệm thông qua máy chẩn đoán
1.3 Phạm vi nghiên cứu
Do chủng loại động cơ khá đa dạng và thời gian thực hiện đề tài có hạn, người nghiên cứu chỉ tập trung thực hiện trong phạm vi sau:
Nghiên cứu cơ sở lý thuyết về linh kiện thiết kế bộ giao tiếp và ngôn ngữ lập trình Assembly
Trang 7Khảo sát các dạng tín hiệu trên hệ thống điều khiển động cơ
Nghiên cứu cơ sở lý thuyết về cấu trúc máy tính và phương pháp truyền dữ liệu nối tiếp trong Matlab Thiết kế giao diện và lập trình giao tiếp bằng Matlab
Ứng dụng lý thuyết này, thiết kế, chế tạo bộ giao tiếp giữa máy tính cá nhân và ECU điều khiển động cơ 4E-FE trên xe Toyota corolla với giao diện giao tiếp bằng Matlab Sau đó, tiến hành thực nghiệm để so sánh với thiết bị đã có để đánh giá khả năng ổn định và mức độ chính xác của thiết bị
1.4 Đối tượng nghiên cứu
Đề tài này liên quan đến bốn đối tượng chính:
Hệ thống điều khiển động cơ bằng điện tử
Cấu trúc máy tính và phương phương pháp truyền dữ liệu nối tiếp
Thiết kế giao diện và giao tiếp thông qua việc ứng dụng phần mềm Matlab
Mạch giao tiếp giữa máy tính và ECU
1.5 Phương pháp nghiên cứu
Để thực hiện đề tài, tác giả đã vận dụng nhiều phương pháp nghiên cứu khác nhau:
Phương pháp tham khảo tài liệu: từ Internet, các sách chuyên ngành ô tô, điện tử, tin học, …
Phương pháp thực nghiệm: Đo các thông số từ động cơ thực tế và tiến hành xử lý số liệu đo
Phương pháp thử và sai: ứng dụng trong thiết kế mạch, lập trình vi điều khiển và lập trình Matlab
1.6 Ứng dụng thực tiễn
Đề tài hoàn thành là cơ sở lý thuyết (đã qua kiểm chứng là sản phẩm đề tài) của việc ứng dụng điều khiển động cơ bằng máy tính cá nhân với chương trình Matlab, là nền tảng cho việc phát triển ứng dụng Matlab trong tính toán, mô phỏng, và điều khiển
Sản phẩm của đề tài là mô hình ứng dụng hữu ích, tăng tính trực quan trong công tác giảng dạy kỹ thuật, đặc biệt là vấn đề điều khiển động cơ Vì vậy sản phẩm có thể ứng dụng rộng rãi cho các trường đại học, cao đẳng, công nhân kỹ thuật, …
Sản phẩm đề tài có thể ứng dụng kiểm tra, chẩn đoán, sửa chữa các xe ô tô hiện đại
Ngoài ra, nếu đề tài được tiếp tục phát triển, thì sản phẩm có thể được ứng dụng làm thiết bị thí nghiệm động cơ và ô tô
1.7 Điểm mới của luận văn
Trang 8Đề tài là bước đột phá trong việc ứng dụng phần mềm Matlab, một phần mềm rất mạnh về đồ họa, tính toán, mô phỏng toán học các hệ thống, điều khiển, giao tiếp, … để điều khiển giao tiếp giữa động cơ và máy tính mà hiện nay chưa có công trình nào nghiên cứu, hoặc chỉ dừng lại ở từng ứng dụng đơn chiếc Đề tài này thành công đã mở cho tác giả hướng phát triển mới là kết hợp các phần tính toán, điều khiển trong Matlab có thể tiến hành đo đạc, lựa chọn thông số tối ưu của động cơ Hay nói cách khác, đề tài có thể phát triển thành thiết bị thí nghiệm để xác định bảng đồ dữ liệu tối ưu cho động cơ
1.8 Bố cục của luận văn
Với nội dụng đề tài như đã trình bày, luận văn được trình bày theo bố cục sau:
Chương 1. Dẫn nhập
Giới thiệu về đề tài, tầm quan trọng đề tài, giới hạn đề tài
Chương 2 Cơ sở lý thuyết về máy tính và giao tiếp
Trình bày về cấu trúc máy tính và phương thức truyền dữ liệu nối tiếp trong Matlab
Chương 3 Cơ sở lý thuyết về linh kiện thiết kế bộ giao tiếp
Trình bày lý thuyết về cấu trúc vi điều khiển, ngôn ngữ assembly và các linh kiện liên quan
Chương 4 Khảo sát các tín hiệu của hệ thống điều khiển động cơ
Trình bày dạng xung của các tín hiệu trong hệ thống điều khiển động cơ
Chương 5 Thiết kế giao diện giao tiếp bằng matlab
Trình bày lý thuyết thiết kế giao diện bằng matlab và ứng dụng trong thiết kế giao diện giao tiếp của đề tài
Chương 6 Thiết kế bộ giao tiếp
Trình bày phương pháp thiết kế và nội dung thiết kế bộ giao tiếp và sản phẩm thiết kế
Trình bày bảng số liệu thực nghiệm
Trang 9Chương 2:
CƠ SỞ LÝ THUYẾT VỀ MÁY TÍNH VÀ GIAO TIẾP
2.1 KIẾN TRÚC MÁY TÍNH TỔNG QUÁT
2.1.1 Sơ đồ khối tổng quát máy tính
Một máy tính có ba khối chức năng chính:
I/O
CPU
MEM
Hình 2.1 Sơ đồ khối chức năng
CPU (Central Processing Unit): Xử lý các thông tin và điều khiển toàn
bộ hoạt động của một máy tính Có chức năng đọc lệnh, phân tích lệnh, thực hiện lệnh
MEM (Memory) khối bộ nhớ: Lưu trữ thông tin, chứa chương trình, được
đọc dữ liệu
I/O (Input/ Output) khối ngoại vi: Trao đổi thông tin giữa máy tính và
môi trường bên ngoài
Để máy tính hoạt động thì ba khối chức năng này phải liên kết chặt chẽ với nhau
2.1.2 Nguyên lý hoạt động của các thành phần trong máy tính
Control Unit (CU)
Arithmetic Logic Unit (ALU)
Khối bộ nhớ (Memory- MEM)
Hình 2.2 Sơ đồ tổng quát hoạt động của máy tính
Thanh ghi (Register): là thiết bị có khả năng lưu trữ thông tin trong kỹ
thuật số
Các loại thanh ghi nằm trong bộ xử lý trung tâm phục vụ cho hoạt động xử lý thông tin Bao gồm các thanh ghi sau:
Trang 10- Thanh ghi lệnh: Chứa các câu lệnh đọc vào
- Thanh ghi dữ liệu: Chứa dữ liệu đọc và ghi
- Thanh ghi điều khiển: Chứa các tín hiệu điều khiển
- Thanh ghi trạng thái (Flag Register): Chứa các cờ như cờ Zero, cờ nhớ …
Bộ nhớ
- Bộ nhớ được xây dựng từ các ô nhớ được ghép lại liên tục nhau để tạo thành vùng nhớ
- Kích thước mỗi ô nhớ là một byte
- Mỗi ô nhớ được gán cho một địa chỉ có thứ tự để phân biệt chúng với nhau Mỗi ô nhớ có 2 thông tin khác nhau là: Địa chỉ (@) ô nhớ và nội dung ô nhớ
- Ô nhớ có 2 hoạt động khác nhau là đọc dữ liệu và ghi dữ liệu Dữ liệu trong bộ nhớ được lưu trữ ở dạng số nhị phân
- Các loại bộ nhớ:
+ Bộ nhớ chỉ đọc ROM (Read Only Memory)
+ Bộ nhớ ghi đọc RAM (Random Access Memory)
Sơ đồ khối bộ nhớ như sau:
Thanh ghi dữ liệuThanh ghi địa chỉ
Khối giải mã
Hình 2.3 Sơ đồ cấu trúc bộ nhớ
Quá trình đọc dữ liệu diễn ra theo trình tự sau:
- Gởi địa chỉ (@) của ô nhớ cần đọc đến thanh ghi địa chỉ
- Khối giải mã có nhiệm vụ phân tích địa chỉ trong thanh địa chỉ để tìm ra
ô nhớ tương ứng với địa chỉ truyền vào
- Gởi tín hiệu điều khiển yêu cầu đọc đến bộ nhớ
- Gởi nội dung ô nhớ đã xác định địa chỉ đến thanh ghi dữ liệu
- Lấy dữ liệu trong thanh ghi dữ liệu
Trang 11Quá trình ghi dữ liệu diễn ra theo trình tự sau:
- Gởi địa chỉ đến thanh ghi địa chỉ
- Gởi dữ liệu cần ghi đến thanh ghi dữ liệu
- Gởi tín hiệu cần ghi đến bộ nhớ
- Chuyển nội dung của thanh ghi dữ liệu vào ô nhớ đã xác định địa chỉ ROM: Chứa những chương trình khởi động hệ thống, chương trình chứa trong ROM được định sẵn tại thời điểm chế tạo vì thông tin trong ROM không thay đổi được Đối với ROM thì thông tin đã ghi vào ROM vẫn tồn tại ngay cả khi không có nguồn điện CPU có thể đọc trực tiếp dễ dàng các thông tin chứa trong ROM
Bộ xử lý trung tâm
Nhiệm vụ của bộ xử lý trung tâm như sau:
- Đọc lệnh, thực hiện lệnh
- Các thuật toán số học và luận lý
- Kiểm tra trạng thái hoạt động của các khối chức năng trong máy tính cũng như gởi các tín hiệu điều khiển trong các khối chức năng này gồm các khối chức năng nhỏ sau:
+ Đơn vị điều khiển (Control Unit)
+ Đơn vị số học luận lý (ALU: Arithmetic Logic Unit)
Đơn vị điều khiển (CU)
@
PC
Thanh ghi lệnh
Điều khiểnMạch tuần tựï
Hình 2.4 Cấu trúc của CPU
- PC (Program Counter: Bộ đếm chương trình): Là thanh ghi chứa địa chỉ
câu lệnh cần đọc Giá trị đầu tiên tuỳ thuộc vào CPU cung cấp để quyết định xem
vị trí chương trình được đặt ở vị trí nào trong bộ nhớ Nội dung của bộ đếm sẽ tăng lên sau mỗi câu lệnh được đọc để chuyển qua câu lệnh kế tiếp
- Thanh ghi lệnh (Instruction Register): Chứa nội dung câu lệnh được đọc
- Mạch tuần tự (Sequencer): Có chức năng sau:
+ Phân tích câu lệnh và gởi các tín hiệu điều khiển để thực hiện câu lệnh
+ Phát tín hiệu đọc lệnh và tín hiệu điều khiển khác
Trang 12Đơn vị số học luận lý ALU: thực hiện phép toán số học và luận lý
Để xác định phép toán cần có đủ các thông tin như: toán hạng, phép toán, kết quả, vì vậy sinh ra dạng thức lệnh 3@ như sau
Mã lệnh Nội dung, Địa chỉ toán hạng Địa chỉ kết quả
OP3 OP2
OP1Opcode
Khối ngoại vi (I/O)
Trong giai đoạn đầu tiên của máy tính, các thiết bị ngoại vi nối trực tiếp với CPU và bộ nhớ (MEM) CPU nhận trực tiếp tín hiệu của các thiết bị ngoại vi cho nên cấu trúc máy tính rất đơn giản nhưng làm giảm hiệu suất sử dụng CPU vì CPU phải tốn nhiều thời gian phục vụ cho các thiết bị ngoại vi Để giảm thời gian CPU phục vụ cho thiết bị ngoại vi, các khối giao tiếp đã ra đời Các khối này trực tiếp quản lý và điều hành tất các các hoạt động liên quan đến thiết bị ngoại vi Khối giao tiếp nhận chỉ thị từ CPU để biết thực hiện nhiệm vụ gì
Khối giao tiếp Khối giao tiếp
Hình 2.5 Sơ đồ hoạt động khối ngoại vi
Khối giao tiếp (Interface)
-1+1
Hình 2.6 Sơ đồ hoạt động khối giao tiếp
Khối giao tiếp bao gồm:
- Thanh ghi địa chỉ đầu: Chứa địa chỉ dữ liệu đầu tiên của khối
Trang 13- Thanh ghi Counter: Chứa số byte dữ liệu khối
- Cờ hướng (Direction flag): Có 2 hướng là hướng tăng và hướng giảm trong việc truyền khối dữ liệu
Bộ giao tiếp dựa vào 3 thanh ghi trên để truy xuất dữ liệu
Nội dung của 3 thanh ghi được CPU gởi đến khối giao tiếp, công việc này được coi như chỉ thị được gởi đi từ khối vi xử lý trung tâm đến khối giao tiếp Công việc gửi thông tin được gọi là lập trình khối giao tiếp
Mỗi lần truy xuất 1 byte dữ liệu thì nội dung thanh ghi counter giảm xuống
1 Khi nội dung thanh ghi này bằng 0 thì quá trình truy xuất dữ liệu kết thúc
Sau mỗi lần truy xuất dữ liệu, thanh ghi địa chỉ đầu sẽ tăng 1 hoặc giảm 1 tùy thuộc vào cờ hướng tăng hay giảm
2.2 CHUẨN GIAO TIẾP MÁY TÍNH
2.2.1 Giao tiếp song song - giao tiếp qua cổng máy in
Việc nối máy in với máy tính được thực hiện qua ổ cắm 15 chân phía sau máy tính Nhưng đây không phải chỉ là chỗ nối với máy in mà khi sử dụng máy tính vào việc khác, như truyền dữ liệu từ máy tính tới một thiết bị khác, hay điều khiển thiết bị bằng máy tính thì việc ghép nối cũng được ghép nối qua cổng máy in
Qua cổng này dữ liệu được truyền đi song song, nên đôi khi còn được gọi là cổng ghép nối song song và tốc độ truyền cũng đạt đến mức đáng kể Tất cả các đường dẫn của cổng máy in đều tương thích với TTL Nghĩa là chúng đều cung cấp mức điện áp nằm giữa 0V đến 5V Do đó, ta cần lưu ý là các đường dẫn vào cổng này không được đặt mức điện áp quá lớn
Khoảng cách cực đại giữa cổâng song song của máy tính PC và thiết bị ngoại
vi bị hạn chế vì điện dung ký sinh và hiện tượng cảm ứng giữa các đường dẫn có thể làm biến dạng tín hiệu Khoảng cách giới hạn là 8m, thông thường chỉ cỡ 1,5m – 2m Mặc khác, dữ liệu trao đổi qua cổng song song chỉ theo một chiều Đây là hạn chế đáng kể khi sử dụng cổng song song vào mục đích đo lường Để khắc phục hạn chế trên ta phải lắp thêm card giao diện song song hai hướng
2.2.2 Giao tiếp qua slot card (có địa chỉ từ 300 31fh)
Trong máy tính người ta chế tạo sẵn các slot cho phép người sử dụng tính năng của máy vi tính bằng cách gắn thêm các thiết bị vào nó
Mỗi slot đều có các đường dữ liệu (data), địa chỉ (address), các đường +5V, – 5V, + 12V, -12V và các đường điều khiển như CLK, IRQ, RESET, /IOW, IOR,…
Vì vậy, nếu thiết kế mạch giao tiếp qua slot sẽ giảm được rất nhiều linh kiện, giảm được bộ nguồn bên ngoài, dễ điều khiển, giá thành thấp và đồng thời tốc độ truyền dữ liệu cũng khá nhanh
Tuy nhiên, bên cạnh những ưu điểm nó cũng có những nhược điểm như: do slot card giao tiếp được gắn bên trong máy nên cách giao tiếp này khó nhận được
Trang 14dữ liệu từ bên ngoài Nó bị hạn chế về khoảng cách làm việc đồng thời mỗi lần sử dụng phải mở ráp máy gây bất tiện cho người sử dụng
2.2.3 Giao tiếp nối tiếp qua cổng RS-232
Cổng nối tiếp RS-232 là một loại giao diện phổ biến rộng rãi nhất, ta còn gọi là cổng COM1, COM2 để tự do cho các ứng dụng khác nhau
Giống như cổng máy in, cổng nối tiếp RS-232 cũng được sử dụng rất thuận tiện trong việc ghép nối máy tính với các thiết bị ngoại vi Việc truyền dữ liệu qua cổng RS-232 được tiến hành theo cách nối tiếp, nghĩa là các bít dữ liệu được gởi đi nối tiếp nhau trên một đường dẫn
Trước hết, loại truyền này có khả năng dùng cho những khoảng cách lớn hơn, bởi khả năng gây nhiễu nhỏ hơn nhiều so với cổng song song Việc dùng cổng song song có một nhược điểm đáng kể là cáp truyền nhiều sợi nên đắt tiền, hơn nữa mức tín hiệu nằm trong khoảng 0 5V không thích ứng với khoảng cách lớn
2.3 TỔNG QUAN VỀ CỔNG NỐI TIẾP
2.3.1 Khái niệm về giao tiếp nối tiếp
Giao tiếp nối tiếp là giao thức thông dụng nhất cho việc giao tiếp giữa hai hay nhiều thiết bị Thông thường, một thiết bị là một máy tính, trong khi thiết bị khác có thể là một bộ kết nối, một máy in, một máy vi tính khác hoặc là một máy hiển thị sóng,…
Cổng nối tiếp truyền và nhận những byte thông tin dưới dạng nối tiếp nhau – trong một thời điểm chỉ nhận một bít dữ liệu Những byte này được truyền đi dưới dạng nhị phân (dạng số) hoặc dạng văn bản (text)
2.3.2 Tiêu chuẩn giao tiếp cổng nối tiếp
Hiệp hội công nghiệp viễn thông (Telecommunications Industry Assosiation
- TIA) đưa ra tiêu chuẩn giao tiếp nối tiếp dùng cho việc kết nối hai thiết bị, được chỉ rõ bằng tiêu chuẩn TIA/EIA-232
Tiêu chuẩn giao tiếp cổng nối tiếp đầu tiên là RS–232 (Recommended Standard number 232) Thuật ngữ “RS–232” vẫn được sử dụng phổ biến và có các đặc tính sau:
- Tốc độ truyền bít và độ dài cáp lớn nhất
- Tên gọi, những đặc tính về điện và các hàm tín hiệu
- Các đầu nối và chức năng của các chân
Sự giao tiếp chủ yếu được thực hiện với 3 chân: Chân truyền dữ liệu, chân nhận dữ liệu và chân mát Các chân khác dùng để điều khiển dòng dữ liệu, nhưng không bắt buộc
Những dạng chuẩn khác như là RS–485 cũng tương tự như RS-232 nhưng được thêm vào một số chức năng như: Tốc độ truyền bít cao hơn, chiều dài của cáp dài hơn và số thiết bị có thể kết nối nhiều hơn (256 thiết bị)
Trang 152.3.3 Phương pháp kết nối thiết bị
2.3.3.1 Chức năng các chân
Các cổng nối tiếp gồm hai loại tín hiệu, tín hiệu dữ liệu và tín hiệu điều khiển, để hỗ trợ những loại tín hiệu này cũng như tín hiệu mass, chuẩn RS-232 có
25 chân để kết nối Tuy nhiên, hầu hết các máy tính cá nhân chỉ sử dụng đầu nối 9 chân để kết nối Thực tế, chỉ có 3 chân được sử dụng cho việc giao tiếp cổng nối tiếp: Một chân nhận dữ liệu, một chân truyền dữõ liệu và một chân nối mát Sơ đồ chân của bộ kết nối 9 chân và 25 chân của một DTE được thể hiện ở hình 2.7
Hình 2.7 Sơ đồ chân cổng COM 9 chân và 25 chân
Chức năng của từng chân trong đầu nối 9 chân và 25 chân từ cổng nối tiếp được mô tả bảng 2-1
Bảng 2-1 Chức năng các chân trong cổng nối tiếp
Chân Chân
(25 chân) (9 chân) Ký hiệu Chức năng Loại tín hiệu
8 1 CD Phát tín hiệu mang dữ liệu Điều khiển
20 4 DTR Báo dữ liệu đầu cuối sẵn sàng Điều khiển
2.3.3.2 Phương pháp kết nối
Chuẩn RS–232 xác định hai thiết bị được kết nối với một cáp nối tiếp như là thiết bị dữ liệu đầu cuối (Data Terminal Equipment - DTE) và Thiết bị dữ liệu mạch đầu cuối (Data Circuit-terminating Equipment - DCE) Thuật ngữ này phản
ánh chuẩn RS-232 như là một chuẩn giao tiếp giữa một máy tính và một modem
Trang 16Do RS-232 chủ yếu sử dụng cho việc kết nối giữa một DTE tới một DCE, những chân trong các giắc nối được nối thẳng với nhau Chẳng hạn như: chân 1 của DTE được nối với chân 1 của DCE và chân 2 đuợc nối với chân 2, … Hình 2.8 giới thiệu sơ đồ kết nối nối tiếp giữa DTE và DCE sử dụng chân truyền dữ liệu (TD) và chân nhận dữ liệu (RD)
Hình 2.8 Sơ đồ kết nối giữa DTE và DCE
Nếu muốn kết nối hai DTE hoặc hai DCE với nhau, sử dụng một cáp nối tiếp thẳng thì chân TD, RD trên thiết bị này lần lượt được kết nối với chân TD, RD trên thiết bị kia, vì vậy việc giao tiếp sẽ không thực hiện được Do đó, để kết nối hai thiết bị giống nhau chúng ta phải sử dụng một bộ cáp nối tiếp hai máy tính (không cần modem) như hình 2.9
Hình 2.9 Sơ đồ kết nối giữa hai DTE (hay hai DCE) với nhau
Chú ý: Có thể kết nối nhiều thiết bị RS-422 hoặc RS-485 tới một cổng nối tiếp Nếu có một bộ chuyển đổi RS-232/RS-485 thì có thể dùng cổng nối tiếp
Matlab cho những thiết bị này
2.3.4 Trạng thái tín hiệu
Trong truyền nối tiếp, các tín hiệu có hai trạng thái: Trạng thái tích cực và trạng thái không tích cực Trạng thái tích cực tương ứng với giá trị nhị phân là 1 hay được mô tả mức logic 1, ON, TRUE hoặc một dấu (x) Trạng thái không tích cực tương ứng với giá trị nhị phân là 0 hay được mô tả như là logic 0, OFF, FALSE, ø một ký tự rỗng ( ) hoặc là một điểm
Đối với tín hiệu dữ liệu, trạng thái tín hiệu là “ON” khi điện áp tín hiệu nhận được nhỏ hơn –3V, trạng thái tín hiệu là “OFF” khi điện áp tín hiệu nhận được lớn hơn +3V Đối với tín hiệu điều khiển, trạng thái tín hiệu là “ON” khi điện áp tín hiệu nhận được lớn hơn +3V, trạng thái tín hiệu là “OFF” khi điện áp tín hiệu nhận được nhỏ hơn -3V Điện áp giữa –3V và +3V được gọi là vùng chuyển tiếp, ở vùng này trạng thái tín hiệu không được xác định
Trang 17Để đưa tín hiệu này đạt trang thái “ON” thiết bị điều khiển hạ thấp giá trị dành cho chân dữ liệu và nâng cao giá trị dành cho chân điều khiển Ngược lại, để đưa tín hiệu tới trạng thái “OFF”, thiết bị điều khiển nâng cao giá trị cho chân dữ liệu và hạ thấp giá trị cho chân điều khiển Hình 2.10 biểu diễn trạng thái “ON” và “OFF” cho một tín hiệu dữ liệu và một tín hiệu điều khiển
Hình 2.10 Trạng thái tín hiệu của các chân trong cổng nối tiếp
Chân TD mang dữ liệu từ DTE truyền tới một DCE Ngược lại, chân RD nhận dữ liệu từ một DCE do một DTE truyền
2.3.4.2 Chân điều khiển
Các chân điều khiển của cổng nối tiếp 9 chân bao gồm RTS và CTS, DTR và DSR, CD và RI chúng được dùng để:
- Xác định tình trạng của tín hiệu
- Điều khiển dòng dữ liệu
Chân RTS và CTS: Cặp chân RTS và CTS được dùng để báo hiệu thiết
bị đã sẵn sàng gởi hay nhận dữ liệu Kiểu điều khiển dòng dữ liệu này được dùng để ngăn cản sự mất mát dữ liệu trong suốt thời gian truyền và được gọi là thiết lập quan hệ bắt tay phần cứng (hardware handshaking) Sau khi thực hiện kết nối giữa DTE và DCE chúng được hoạt động theo trình tự sau:
- DTE xác nhận chân RTS để báo cho DCE biết nó đã sẵn sàng để nhận dữ liệu
Trang 18- DCE xác nhận chân CTS báo hiệu đã xóa sạch để gởi dữ liệu từ chân
TD, nếu dữ liệu có chiều dài không vượt quá giới hạn cho phép thì chân CTS không được xác nhận
- Dữ liệu được truyền từ chân TD tới DTE, nếu dữ liệu có chiều dài không vượt quá giới hạn cho phép thì DTE không xác nhận tín hiệu từ chân CTS Vì vậy quá trình truyền dữ liệu không được tiếp tục
Chân DTR và DSR: Nhiều thiết bị sử dụng chân DSR và DTR để báo
tình trạng kết nối và nguồn cung cấp Tín hiệu của những thiết bị được kết nối dùng DTR và DSR hoạt động theo hai bước:
- DTE xác nhận chân DTR để yêu cầu sự kết nối DCE với đường truyền
- DCE xác nhận chân DSR để báo hiệu tình trạng đã kết nối, DCE không xác nhận chân DSR khi không được kết nối với đường truyền
Đầu tiên chân DTR và DSR được thiết kế nhằm thay thế phương pháp kết nối bắt tay phần cứng, tuy nhiên, theo phương thức này chỉ sử dụng chân RTS và CTS mà không dùng chân DSR và DTR
Chân CD và RI: Được sử dụng để báo hiệu trạng thái tín hiệu sẵn sàng
trong suốt quá trình kết nối giữa hai bộ kết nối
Chân CD dùng để báo hiệu tình trạng kết nối giữa hai modem hoặc tín hiệu
sóng dạng số Chân CD được xác nhận khi DCE nhận tín hiệu với tần số thích hợp, ngược lại, không xác nhận nếu như DCE không nhận được tín hiệu thích hợp
Chân RI được dùng để báo hiệu sự hiện diện của một tín hiệu chuông RI được xác nhận khi DCE nhận một tín hiệu chuông, ngược lại, không được xác nhận khi DCE không nhận tín hiệu chuông
2.3.5 Định dạng và phương thức truyền dữ liệu nối tiếp
2.3.5.1 Định dạng dữ liệu
Dạng dữ liệu nối tiếp gồm một bít khởi đầu, ở giữa là 5 đến 8 bít dữ liệu và cuối cùng là 1 hoặc 2 bít dừng, cũng có thể có thêm một bít chẵn lẻ nằm trước bít dừng Dạng dữ liệu nối tiếp truyền được minh hoạ trong sơ đồ hình 2.11
Hình 2.11 Giao thức truyền nối tiếp
Định dạng dữ liệu nối tiếp thường được biểu diễn ký hiệu như sau: số bít dữ liệu – bít chẵn lẻ – số bít dừng Chẳng hạn, ký hiệu 8–N-1 có nghĩa là 8 bít dữ liệu, không có bít chẵn lẻ, một bít dừng Trong khi 7-E-2 có nghĩa là 7 bít dữ liệu – có bít chẵn lẻ và 2 bít dừng
Trang 19Những bít dữ liệu thường được biểu diễn như một ký tự bởi những bít này thường đại diện cho một ký tự mã ASCII Những bít còn lại được gọi là những bít khung bởi chúng chỉ có chức năng đóng khung bít dữ liệu
Chú ý: Khi truyền dữ liệu, thiết bị nhận và thiết bị truyền phải có cùng định dạng dữ liệu
2.3.5.2 Phương thức truyền dữ liệu
Tiêu chuẩn RS-232 cung cấp 2 loại định chuẩn truyền thông: Đồng bộ và bất đồng bộ
Với định chuẩn đồng bộ, tất cả những bít truyền được đồng bộ hóa với một
xung clock Đầu tiên, hai thiết bị phải được đồng bộ hóa với nhau và sau đó tiếp
tục gửi những ký tự đồng bộ hóa Ngay cả khi không truyền dữ liệu, dòng bít không đổi được truyền đi để các thiết bị xác định được trạng thái làm việc của nhau trong bất kỳ thời điểm nào Mỗi bít được gửi hoặc là dữ liệu thực hoặc là một ký tự rỗng (vô ích) Phương pháp truyền đồng bộ cho phép tốc độ truyền dữ liệu nhanh hơn phương pháp bất đồng bộ do không thêm vào các bít khung để xác định điểm bắt đầu và kết thúc của mỗi byte dữ liệu
Với giao thức bất đồng bộ, mỗi thiết bị sử dụng xung clock riêng của nó trong các bytes dữ liệu, dữ liệu được truyền ở bất kỳ thời điểm nào Do đó, thay vì trong truyền đồng bộ người ta sử dụng thời gian để đồng bộ hóa các bít dữ liệu, trong truyền bất đồng bộ người ta sử dụng phương pháp định dạng dữ liệu Điển hình, dữ liệu truyền được đồng bộ hóa bằng cách sử dụng bít khởi đầu và một hoặc nhiều bít kết thúc để báo hiệu kết thúc một byte dữ liệu
Với việc thêm vào các bít khung này là nguyên nhân làm cho phương pháp truyền bất đồng bộ chậm hơn truyền đồng bộ Tuy nhiên, nó có lợi thế lớn là bộ xử lý không phải xử lý các ký tự rỗng được thêm vào như trong truyền đồng bộ Hiện nay, hầu hết những cổng nối tiếp sử dụng phương pháp truyền dữ liệu bất đồng bộ
2.3.6 Nguyên lý truyền dữ liệu
Dữ liệu nối tiếp được truyền từng bít một và theo thứ tự truyền như sau:
1 Bít khởi đầu được truyền với giá trị 0
2 Truyền các bít dữ liệu
3 Bít dữ liệu đầu tiên thì tương ứng với bít có trọng số nhỏ nhất (LSB), trong khi bít dữ liệu cuối cùng tương ứng với bít có trọng số lớn nhất (MSB)
4 Bít chẵn lẻ (nếu có) được truyền tiếp theo
5 Một hoặc hai bít dừng được truyền, mỗi lần truyền với giá trị là 1 Số bít truyền trong một giây được gọi là tốc độ baud Những bít được truyền bao gồm bít khởi đầu, các bít dữ liệu, bít chẵn lẻ (nếu có) và những bít dừng
Bít khởi đầu và những bít dừng
Trong giao tiếp đồng bộ và bất đồng bộ, hầu hết những cổng nối tiếp truyền theo phương pháp bất đồng bộ Điều này có nghĩa là các byte dữ liệu truyền phải
Trang 20được xác định bằng bít khởi đầu và bít kết thúc Bít khởi đầu báo hiệu byte dữ liệu bắt đầu truyền và những bít kết thúc báo hiệu byte dữ liệu đã truyền thành công Quá trình nhận dạng byte theo định dạng dữ liệu nối tiếp được tiến hành theo các bước sau:
1 Khi một chân cổng nối tiếp rỗng (dữ liệu không được truyền) thì nó
ở trạng thái “ON”
2 Khi dữ liệu được truyền, chân cổng nối tiếp chuyển sang trạng thái
“OFF” nhờ có bít khởi đầu
3 Chân cổng nối tiếp chuyển trở lại trạng thái “ON” nhờ có bít dừng, báo hiệu kết thúc quá trình truyền một byte dữ liệu
Các bít dữ liệu
Bít dữ liệu truyền qua cổng nối tiếp có thể là những dòng lệnh, tín hiệu cảm
biến, các câu thông báo lỗi, v v Dữ liệu truyền có thể ở dạng nhị phân hoặc mã ASCII
Hầu hết, truyền dữ liệu nối tiếp sử dụng từ 5 đến 8 bít dữ liệu Dữ liệu dạng nhị phân đặc trưng là truyền 8 bít Dữ liệu dạng văn bản truyền là 7 bít hoặc 8 bít Nếu dữ liệu dựa vào bộ kí tự ASCII với 27 hay 128 ký tự khác nhau thì số bít tối thiểu phải đạt được là 7 bít, bít thứ 8 nếu có phải có giá trị là 0 Nếu như dữ liệu dựa vào bộ kí tự ASCII mở rộng với 28 hay 256 ký tự khác nhau thì số bít truyền tối thiểu là 8 bít
Bít chẵn lẻ
Bít chẵn lẻ dùng để kiểm tra những lỗi đơn giản trong quá trình truyền dữ liệu Các loại kiểm tra chẵn lẻ mô tả trong bảng 2-2
Bảng 2-2 Chức năng các loại bít chẵn lẻ
Even Các bít dữ liệu cộng với bít chẵn lẻ tạo thành số chẵn Mark Bít chẵn lẻ luôn có giá trị bằng 1
Odd Các bít dữ liệu cộng với bít chẵn lẻ tạo thành số lẻ
Space Bít chẵn lẻ luôn có giá trị bằng 0
Quy trình kiểm tra bằng bít chẵn lẻ được thực hiện như sau:
- Thiết bị truyền đặt bít chẵn lẻ là 0 hoặc 1 tùy thuộc vào giá trị bít dữ liệu và loại bít kiểm tra chẵn lẻ đã chọn
- Thiết bị nhận, kiểm tra nếu như bít chẵn lẻ phù hợp với dữ liệu được truyền thì những bít dữ liệu được chấp nhận, ngược lại sẽ báo lỗi
Chú ý: Việc kiểm tra bít chẵn lẻ có thể phát hiện khi chỉ cần một bít bị lỗi Nhưng dữ liệu truyền vẫn có thể được chấp nhận nếu lỗi xảy ra ở nhiều bít Ví dụ: giả sử, để truyền bít dữ liệu gồm 01110001 tới máy tính Nếu ta chọn bít chẵn lẻ là
Trang 21even, thiết bị truyền tạo ra một số chẵn của 1 và bít chẵn lẻ có giá trị là 0 Nếu ta
chọn bít chẵn lẻ là odd, thiết bị truyền tạo ra một số lẻ của 1 và bít chẵn lẻ có giá
trị là 1
Do khả năng phát hiện lỗi bằng việc kiểm tra Mark và Space là rất nhỏ nên
ít khi sử dụng bít chẵn lẻ
2.4 KHÁI QUÁT VỀ GIAO TIẾP NỐI TIẾP TRONG MATLAB
Giao tiếp nối tiếp trong MATLAB cung cấp phương pháp truy xuất đến thiết
bị ngoại vi như là bộ kết nối, máy in, … Được thực hiện qua cổng nối tiếp của máy
vi tính Việc giao tiếp này được thiết lập thông qua cổng nối tiếp, cổng nối tiếp này cung cấp những chức năng và thuộc tính cho phép ta có thể:
- Thiết lập cấu hình giao tiếp nối tiếp
- Sử dụng những chân điều khiển cổng nối tiếp
- Viết và đọc dữ liệu
- Sử dụng những sự kiện (events) và những hàm callbacks
- Lưu thông tin lên đĩa
Giao tiếp nối tiếp trong Matlab được hỗ trợ trên những hệ điều hành Microsoft Windows, Linux, và Sun Solaris
2.4.1 Trình tự thực hiện giao tiếp giữa thiết bị với cổng nối tiếp
1 Tạo một cổng nối tiếp – Có thể tạo cổng nối tiếp bằng cách sử dụng các hàm tạo cổng nối tiếp serial
Ta cũng có thể hiệu chỉnh các thuộc tính trong suốt quá trình tạo đối tượng Đặc biệt, có thể hiệu chỉnh các thuộc tính của cổng nối tiếp như tốc độ baud, số bít dữ liệu, …
2 Kết nối thiết bị – Để kết nối cổng nối tiếp đến thiết bị, sử dụng hàm
fopen Sau khi đối tượng được kết nối, có thể thay đổi giá trị mặc định của thiết bị bằng cách hiệu chỉnh những giá trị thuộc tính riêng như đọc dữ liệu, viết dữ liệu
3 Hiệu chỉnh thuộc tính – Để thiết lập hoạt động của cổng nối tiếp như mong muốn, cần hiệu chỉnh các giá trị thuộc tính với hàm set hay dấu chấm Ngoài
ra, có thể hiệu chỉnh nhiều thuộc tính tại cùng một thời điểm trong suốt quá trình tạo cổng nối tiếp hoặc sau khi tạo cổng nối tiếp
4 Viết và đọc dữ liệu – Có thể viết dữ liệu tới thiết bị với hàm fprintf hoặc
fwrite và đọc dữ liệu từ thiết bị sử dụng hàm fgetl, fread, fscanf hoặc là readasync
Cổng nối tiếp xử lý theo giá trị được thiết lập trước đó hoặc là giá trị mặc định
5 Dừng kết nối và ngắt thiết bị – Khi không sử dụng cổng nối tiếp, ta nên ngưng kết nối với thiết bị, sử dụng hàm fclose; xóa khỏi bộ nhớ, sử dụng hàm delete và xóa khỏi vùng làm việc Matlab (workspace) sử dụng lệnh clear
Trang 222.4.2 Thiết lập và hiển thị các thuộc tính cấu hình
Từ những giá trị thuộc tính riêng, có thể thiết lập những đáp ứng của cổng
nối tiếp theo mong muốn Đồng thời, có thể hiển thị những giá trị này bằng hàm set,
get hay dấu chấm (.).
2.4.2.1 Hiển thị tên và giá trị thuộc tính
Khi cổng nối tiếp được tạo ra, sử dụng hàm set để hiển thị tất cả những thuộc
tính cấu hình Ngoài ra, nếu một thuộc tính có tập hợp hữu hạn những giá trị chuỗi thì tập hợp này cũng được hiển thị:
s = serial('COM1');
set(s)
Để hiển thị một giá trị hiện hành cho một thuộc tính, chúng ta khai báo tên
thuộc tính đó trong lệnh get
ans = 'none' 'idle'
Có thể dùng dấu chấm để hiển thị giá trị thuộc tính riêng
Để hiệu chỉnh những giá trị cho nhiều thuộc tính, chúng ta có thể khai báo
nhiều cặp tên/ giá trị thuộc tính trong lệnh set
set(s,'DataBíts',7,'Name','Test1-serial')
Thực tế, ta có thể hiệu chỉnh một hoặc nhiều thuộc tính ở bất kỳ thời điểm nào trong khi cổng nối tiếp đã được khởi tạo – kể cả trong suốt quá trình tạo đối tượng Tuy nhiên, một vài thuộc tính không thể hiệu chỉnh trong khi đối tượng được kết nối đến thiết bị hoặc trong thời gian ghi thông tin lên đĩa
2.4.2.2 Xác định tên thuộc tính
Tên thuộc tính của cổng nối tiếp có nhiều cách ký hiệu Điều này làm cho tên thuộc tính dễ đọc hơn và có thể sử dụng bất cứ tình huống nào nếu chúng ta muốn xác định tên thuộc tính Vì thế, chúng ta có thể sử dụng tên đầy đủ hoặc tên rút gọn Ví dụ, chúng ta có thể hiệu chỉnh thuộc tính tốc độ BAUD bằng ba cách sau:
Trang 23set(s,'BaudRate',4800) set(s,'baudrate',4800) set(s,'BAUD',4800)
Chú ý: Khi chúng ta dùng nhiều tên thuộc tính trong M-file, nên sử dụng tên đầy đủ để ngăn ngừa những vấn đề nhầm lẫn tên với phiên bản khác của Matlab
2.4.2.3 Những giá trị thuộc tính mặc định
Tất cả những thuộc tính cấu hình đều có một giá trị mặc định, nếu không xác lập lại giá trị thuộc tính đó thì chúng sẽ sử dụng giá trị mặc định
Nếu một thuộc tính có nhiều giá trị lựa chọn thì giá trị nào nằm trong dấu {} là giá trị mặc định Chẳng hạn, giá trị mặc định để cho thuộc tính chẵn lẻ là none
set(s,'Parity') [ {none} | odd | even | mark | space ]
2.5 THIẾT LẬP CỔNG GIAO TIẾP VỚI MATLAB
2.5.1 Tạo cổng nối tiếp
Để tạo một cổng nối tiếp ta dùng hàm serial Hàm serial yêu cầu tên của
cổng nối tiếp được kết nối tới thiết bị như là một đối số đầu vào Ngoài ra, có thể hiệu chỉnh những giá trị thuộc tính trong suốt quá trình tạo đối tượng Ví dụ, để tạo đối tượng cổng nối tiếp kết hợp với cổng nối tiếp COM1
Bảng 2-3 Mô tả thuộc tính chung
Name (tên) Xác định tên đối tượng cổng nối tiếp
Port (cổng) Xác định tên cổng nối tiếp trên hệ điều hành sử dụng Type (loại) Xác định loại đối tượng
Có thể hiển thị giá trị của những thuộc tính đối tượng s với hàm get
get(s,{'Name','Port','Type'}) ans = 'Serial-COM1' 'COM1' 'serial'
2.5.1.1 Thiết lập thuộc tính cấu hình trong quá trình tạo đối tượng
Trong suốt quá trình tạo đối tượng, có thể thiết lập lại cấu hình thuộc tính
cổng nối tiếp hàm Serial chấp nhận những tên và giá trị thuộc tính trong cùng một định dạng như hàm set Ví dụ, thiết lập cặp tên / giá trị thuộc tính
Trang 24s = serial('COM1','BaudRate',4800,'Parity','even');
Nếu tên thuộc tính thiết lập không phù hợp thì sẽ không tạo được đối tượng Tuy nhiên, nếu có một vài giá trị thuộc tính thiết lập không hợp lệ (ví dụ: Baudrate đặt ở 50) thì đối tượng vẫn được tạo ra nhưng giá trị không hợp lệ này được hiển thị
đến khi thực hiện kết nối đối tượng và thiết bị với hàm fopen
2.5.1.2 Hiển thị đối tượng cổng nối tiếp
Đối tượng cổng nối tiếp hiển thị những thông tin tóm tắt quan trọng về cấu hình và trạng thái bằng 3 cách sau:
- Gõ tên biến của cổng nối tiếp tại command line
- Không dùng dấu chấm phẩy (;) khi đang tạo một đối tượng cổng nối tiếp
- Không dùng dấu chấm phẩy (;) khi đang cấu hình những thuộc tính sử dụng ký hiệu dấu chấm (.)
Các thuộc tính cơ bản và trạng thái làm việc của đối tượng cổng nối tiếp s được hiển thị
Đối tượng cổng nối tiếp: Serial-COM1
Đặc tính cổng nối tiếp
Port: COM1 BaudRate: 9600 Terminator: 'LF' Trạng thái cổng nối tiếp
Status: closed RecordStatus: off Trạng thái truyền và nhận dữ liệu
TransferStatus: idle BytesAvailable: 0 ValuesReceived: 0 ValuesSent: 0
2.5.1 3 Tạo nhiều đối tượng cổng nối tiếp
Trong Matlab, để thiết lập nhiều đối tượng cổng nối tiếp, ta tạo chúng trong một cấu trúc mảng Ví dụ: Để tạo các đối tượng cổng nối tiếp là s1 và s2
Trang 25Ma trận đối tượng cổng nối tiếp chứa các thuộc tính cổng nối tiếp được mô tả trong bảng 2-4
Bảng 2-4 Thuộc tính cổng nối tiếp
Có thể tạo ma trận cột y như sau:
y = [s1;s2];
Chú ý: Không thể tạo một ma trận của những đối tượng cổng nối tiếp Ví dụ: Chỉ có thể tạo được một vectơ hàng hoặc cột của những đối tượng cổng nối tiếp mà không thể tạo ma trận
z = [s1 s2;s1 s2];
??? Error using ==> serial/vertcat % lỗi sử dụng hàm serial/vertcat
2.5.2 Kết nối thiết bị
Trước khi sử dụng đối tượng cổng nối tiếp để viết và đọc dữ liệu, phải nối thiết bị với cổng nối tiếp được chỉ định trong hàm serial Để kết nối một đối tượng
cổng nối tiếp tới thiết bị, dùng hàm fopen
fopen(s) Một vài thuộc tính chỉ đọc trong khi đối tượng cổng nối tiếp đã được kết nối và phải được thiết lập cấu hình trước khi sử dụng lệnh fopen Chẳng hạn như những thuộc tính InputBufferSize và OutputBufferSize
Chú ý: Ta có thể cùng lúc tạo nhiều đối tượng cổng nối tiếp với một cổng nối tiếp Tuy nhiên, chỉ nên kết nối một đối tượng cổng nối tiếp với một cổng nối tiếp
Để kiểm tra tình trạng kết nối thuộc tính Status của đối tượng cổng nối tiếp và thiết bị, thực hiện như sau:
s.Status ans = open Khi việc kết nối giữa đối tượng cổng nối tiếp và thiết bị hoàn tất chúng ta có thể viết và đọc dữ liệu từ thiết bị đó
2.5.3 Thiết lập cấu hình giao tiếp
Trước khi viết và đọc dữ liệu thì cấu hình của cả đối tượng cổng nối tiếp và thiết bị phải giống nhau Cấu hình đường truyền cổng nối tiếp bao gồm những giá trị cho thuộc tính điều khiển tốc độ baud và định dạng dữ liệu nối tiếp Những thuộc tính được mô tả trong bảng 2-5:
Bảng 2-5 Thuộc tính truyền thông
Trang 26Tên thuộc tính Mô tả
BaudRate Tốc độ truyền dữ liệu baud (bít/s)
DataBits Số bít dữ liệu được truyền trong một chuỗi nối tiếp Parity Loại bít chẵn lẻ sử dụng
StopBits Số bít dừng sử dụng hiện thị kết thúc một byte dữ liệu Terminator Hiển thị định dạng khi in
BaudRate: Là tốc độ truyền bít (bao gồm cả bít khởi đầu, bít chẵn lẻ
(nếu có) và bít kết thúc) trong một giây Tốc độ baud tiêu chuẩn trong Matlab gồm:
110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200, 128000 và 256000 Giá trị mặc định là 9600 Baud
DataBit: Số bít dữ liệu truyền trong một chuỗi nối tiếp bằng Matlab có
thể là 5, 6, 7 hoặc 8 bít Khi truyền các chuỗi ký tự ASCII thì số bít truyền dữ liệu phải ít nhất là 7 bít Khi truyền các dữ liệu số, yêu cầu số bít truyền dữ liệu là 8 bít Định dạng truyền 5 hoặc 7 bít dữ liệu chỉ ứng dụng đối với các thiết bị giao tiếp
đặc biệt Giá trị mặc định của Databit trong Matlab là 8 bít
Parity: Bít chẵn lẻ dùng để kiểm tra những lỗi đơn giản trong quá trình
truyền dữ liệu Bít chẵn lẻ có thể chọn là Even, Mark, Odd hoặc Space
StopBits: Dùng để báo hiệu kết thúc quá trính truyền một byte dữ liệu
Bít dừng có thể chọn là 1, 1.5 hoặc 2 bít
Terminator: Mô tả định dạng ký tự khi in Thiết lập Terminator là số
nguyên (từ 0 đến 127) biểu thị mã ký tự ASCII hoặc là một ký tự ASCII
Bảng 2-6 Mô tả các loại định dạng ký tự cuối (ký tự định dạng in)
Loại định dạng Chức năng
LF (13) Xuống dòng trước khi hiển thị dòng mới
CR (10) Hiển thị dòng mới bắt đầu từ đầu dòng
CR\LF Hiển thị dòng mới bắt đầu từ đầu dòng và dòng tiếp theo
sẽ xuống dòng
LF\CR Xuống dòng trước khi hiển thị dòng mới và dòng mới này
được bắt đầu ở đầu dòng
2.5.4 Viết và đọc dữ liệu
Tùy theo ứng dụng cổng nối tiếp, khi viết và đọc dữ liệu có 3 vấn đề chính cần quan tâm:
- Sẽ đọc và viết dữ liệu từ các hàm truy xuất dữ liệu được thực hiện trong cửa sổ command line hay không?
- Dạng dữ liệu được truyền là nhị phân (số) hay văn bản?
Trang 27- Với những điều kiện nào thì việc đọc và viết hoàn tất?
Quá trình viết và đọc dữ liệu không đồng bộ có hai thuận lợi chính:
Trong khi đang viết và đọc dữ liệu có thể thực thi công việc khác Ngoài ra, còn sử dụng được tất cả những thuộc tính hỗ trợ trong hàm callback
Do các chân đọc và viết độc lập, nên có thể đọc và viết dữ liệu đồng thời với nhau Quá trình đọc và viết dữ liệu được minh họa trên hình 2.12
Hình 2.12 Sơ đồ truy xuất dữ liệu trong Matlab
2.5.4.1 Viết dữ liệu
Những hàm liên quan đến viết dữ liệu được mô tả trong bảng 2-7:
Bảng 2-7 Những hàm liên quan đến viết dữ liệu
fprintf Viết dữ liệu dạng text đến thiết bị
fwrite Viết dữ liệu dạng số đến thiết bị
stopasync Ngừng việc thi hành đọc và viết dữ liệu không đồng bộ Những thuộc tính liên quan đến viết dữ liệu được mô tả trong bảng 2-8:
Bảng 2-8 Những thuộc tính liên quan đến viết dữ liệu
BytesToOutput Số byte hiện có trong outputbuffer
OutputBufferSize Kích thước lớn nhất của outputbuffer
Timeout Thời gian chờ để hoàn thành thao tác đọc và viết dữ liệu TransferStatus Báo trạng thái đọc hoặc viết dữ liệu không đồng bộ đang
tiến hành ValuesSent Tổng số giá trị viết đến thiết bị
Dòng dữ liệu truyền khi viết (Data flow)
OutputBuffer là bộ nhớ máy tính được chỉ định bởi đối tượng cổng nối tiếp để lưu trữ dữ liệu được viết tới thiết bị Khi viết dữ liệu tới thiết bị, dòng dữ liệu đi theo hai bước:
Trang 28- Dữ liệu được chỉ định bởi hàm fwrite sẽ được gởi tới outputbuffer (bộ
nhớ tạm thời khi truyền dữ liệu) (hình 2.13)
Hình 2.13 Sơ đồ truyền dữ liệu đến outputbuffer
- Dữ liệu trong outputbuffer sẽ được gởi tới thiết bị (hình 2.14)
Hình 2.14 Sơ đồ truyền dữ liệu từ outputbuffer đến thiết bị
Thuộc tính OutputBufferSize chỉ rõ số byte lớn nhất có thể lưu trữ trong outputbuffer Thuộc tính BytesToOutput cho biết số byte hiện hữu trong outputbuffer Những thuộc tính này có giá trị mặc định như sau:
s = serial('COM1');
get(s,{'OutputBufferSize','BytesToOutput'})
ans = [512] [0]
Nếu viết dữ liệu nhiều hơn so với dung lượng của Outputbuffer thì quá trình
viết dữ liệu sẽ không thực hiện và sẽ báo lỗi
Viết dữ liệu văn bản
Sử dụng hàm fprintf để viết dữ liệu văn bản đến thiết bị Dữ liệu văn bản có
thể là những lệnh thiết lập lại cấu hình thiết bị, báo thiết bị tiếp tục nhận dữ liệu hoặc trạng thái thông tin
Theo mặc định, fprintf chỉ viết dữ liệu bằng định dạng chuỗi Do nhiều thiết
bị cổng nối tiếp chỉ chấp nhận những lệnh có dạng văn bản Tuy nhiên, cũng có thể tạo nhiều định dạng khác
Chúng ta có thể xác định số giá trị được gởi tới thiết bị với thuộc tính ValuesSent
Trang 29s ValuesSent
ans = 20
Chú ý: Giá trị thuộc tính ValuesSent bao gồm cả ký tự định dạng kiểu in vì mỗi lần xuất hiện “\n” trong dòng lệnh gởi tới thiết bị, nó được thay thế bởi giá trị thuộc tính ký tự định dạng kiểu in (Terminator property value)
s.Terminator
ans = LF Giá trị mặc định của ký tự định dạng kiểu in (Terminator) là ký tự xuống dòng
Theo mặc định fprintf truyền dữ liệu theo phương pháp đồng bộ Vì vậy, sẽ gây trở ngại cho Matlab command line cho tới khi quá trình truyền hoàn tất Để ghi
dữ liệu văn bản không đồng bộ tới thiết bị, trong hàm fprintf phải khai báo async
như là thông số vào
fprintf(s,'Display:Contrast 45','async')
Có thể xác định trạng thái hoạt động của truyền không đồng bộ với thuộc tính TransferStatus Nếu không thực hiện việc truyền và nhận dữ liệu thì TransferStatus nhàn rỗi (idle)
s.TransferStatus
Một thao tác ghi đồng bộ hay không đồng bộ sử dụng fprintf hoàn tất khi:
- Xác nhận dữ liệu được ghi
- Thời gian được xác định qua thuộc tính Timeout
Ngoài ra, cũng có thể ngừng một thao tác ghi không đồng bộ với hàm
stopasync.
Viết dữ liệu nhị phân
Dùng hàm fwrite để viết dữ liệu nhị phân đến thiết bị Viết dữ liệu nhị phân
nghĩa là viết dữ liệu có dạng số Chẳng hạn, chúng ta cần truyền các thông số của một số thiết bị đo
Chú ý: Một vài thiết bị cổng nối tiếp chỉ chấp nhận những lệnh có định
dạng văn bản (text-based) Do đó, chúng ta nên dùng hàm fprintf cho tất cả các
thao tác viết dữ liệu
Theo mặc định, fwrite dịch những giá trị sử dụng độ chính xác uchar Tuy
nhiên, ta có thể định lại theo nhiều độ chính xác khác nhau
Theo mặc định, fwrite cũng viết dữ liệu theo kiểu đồng bộ Vì vậy, để ghi dữ liệu nhị phân không đồng bộ tới thiết bị, chúng ta phải khai báo async như những thông số vào tới fwrite
fwrite(s,120,'async')
Trang 302.5.4.2 Đọc dữ liệu
Những thuộc tính liên quan đến đọc dữ liệu được mô tả trong bảng 2-9:
Bảng 2-9 Những thuộc tính liên quan việc đọc dữ liệu
BytesAvailable Số byte hiện có trong inputbuffer
InputBufferSize Kích thước lớn nhất của inputbuffer
ReadAsyncMode Xác định thao tác đọc dữ liệu không đồng bộ là continuous
Dòng dữ liệu truyền khi đọc
Inputbuffer là bộ nhớ máy tính được định bởi đối tượng cổng nối tiếp để lưu dữ liệu đọc từ thiết bị Khi đọc dữ liệu từ thiết bị, dòng dữ liệu được truyền theo 2 bước sau:
- Dữ liệu đọc từ thiết bị được lưu trữ trong inputbuffer (hình 2.15)
Hình 2.15 Sơ đồ đọc dữ liệu từ thiết bị đến inputbuffer
- Dữ liệu trong inputbuffer được trả về biến Matlab nhờ hàm đọc dữ liệu (hình 2.16)
Hình 2.16 Sơ đồ đọc dữ liệu từ inputbuffer để hiển thị
Trang 31Thuộc tính InputBufferSize xác định số byte lớn nhất có thể lưu trữ trong inputbuffer Thuộc tính BytesAvailable báo số byte hiện hữu có thể đọc trong inputbuffer Giá trị mặc định cho những thuộc tính này được mô tả như sau
Đọc dữ liệu văn bản
Sử dụng các hàm fgetl, fgets, và fscanf để đọc dữ liệu có định dạng văn bản
từ thiết bị
s = serial('COM1');
fopen(s) fprintf(s,'*IDN?') out = fscanf(s)
Theo mặc định, fscanf đọc dữ liệu dùng định dạng ký tự bởi dữ liệu trả về
của nhiều thiết bị cổng nối tiếp có dạng văn bản Tuy nhiên, có thể thiết lập lại nhiều định dạng khác
Có thể xác định số giá trị đọc được từ thiết bị – bao gồm ký tự định dạng kiểu in – với thuộc tính ValuesReceived
s.ValuesReceived
ans = 56 Các hàm đọc dữ liệu trên có thể đọc đồng bộ và bất đồng bộ nhưng cho dù thao tác đọc là đồng bộ hay bất đồng bộ thì với thuộc tính ReadAsyncMode chúng
ta có thể thiết lập ReadAsyncMode là “continuous” hay “manual”
Nếu ReadAsyncMode là “continuous” (giá trị mặc định), đối tượng cổng nối tiếp liên tục yêu cầu thiết bị xác định sự hiện diện của dữ liệu để đọc Nếu có sự hiện diện của dữ liệu thì nó tự động đọc dữ liệu không đồng bộ và lưu trong InputBuffer Để truyền dữ liệu từ InputBuffer tới MATLAB, dùng hàm đọc đồng
bộ như là fgetl hay fscanf Nếu dữ liệu có trong InputBuffer, những hàm này có giá
trị trả về rất nhanh
Trang 32này, phải sử dụng hàm readasync Sau đó, sử dụng một trong những hàm đọc đồng
bộ để chuyển dữ liệu từ InputBuffer tới MATLAB
s.TransferStatus ans =idle
Qui tắt để hoàn tất một thao tác đọc với fscanf
Quá trình đọc dữ liệu với hàm fscanf ngăn cản việc truy nhập tới Matlab
command cho tới khi:
- Ký tự định dạng kiểu in của thuộc tính Terminator được đọc
- Hết thời gian timeout do thuộc tính TimeOut quy định
- Số giá trị xác định được đọc
- InputBuffer đã đầy
Đọc dữ liệu nhị phân
Hàm fread dùng để đọc dữ liệu nhị phân từ thiết bị Đọc dữ liệu nhị phân
nghĩa là giá trị trả về cho Matlab là có dạng số
Giá trị mặc định của thuộc tính ReadAsyncMode là “continuous”, nên dữ liệu không đồng bộ được gởi đến InputBuffer ngay khi nó hiện diện trong thiết bị Số giá trị đọc được có thể hiển thị khi dùng thuộc tính BytesAvailable
s.BytesAvailable
ans = 69 Chuyển dữ liệu về Matlab có thể sử dụng bất kỳ một trong những hàm đọc
đồng bộ nào Tuy nhiên, nếu dùng fgetl, fgets, hoặc fscanf thì phải gọi hàm hai lần
bởi có hai ký tự định dạng kiểu in được lưu trữ trong inputbuffer Nếu dùng hàm
fread thì chúng ta có thể trả về tất cả dữ liệu đến Matlab trong một lần gọi hàm
Theo mặt định, hàm fread trả về những giá trị số trong những ma trận với độ
chính xác theo định dạng double Tuy nhiên, cũng có thể thiết lập lại với độï chính
Trang 33xác khác nhau và có thể chuyển đổi dữ liệu số thành văn bản sử dụng hàm char
của Matlab
out = fread(s,69);
val = char(out)'
Xem dữ liệu ảnh bitmap
Để xem dữ liệu ảnh định dạng bitmap ta thực hiện theo những bước sau:
- Mở một tập tin ở ổ đĩa
- Viết dữ liệu tới tập tin ổ đĩa
- Đóng tập tin ổ đĩa
- Đọc dữ liệu vào Matlab dùng hàm imread
- Chỉnh tỷ lệ và hiển thị dữ liệu dùng hàm imagesc
Chú ý: Những phiên bản tập tin I/O của hàm fopen, fwrite, fclose được sử dụng
mymap = [0 0 0; 1 1 1];
colormap(mymap)
2.5.5 Ngưng kết nối và ngắt thiết bị
Khi không sử dụng đối tượng cổng nối tiếp trong thời gian dài, chúng ta nên ngưng kết nối với thiết bị và ngắt nó khỏi môi trường MATLAB bằng cách tách đối tượng khỏi bộ nhớ và vùng làm việc
Ngưng kết nối đối tượng cổng nối tiếp
Khi không cần truyền thông với thiết bị nữa, chúng ta nên ngưng kết nối với
đối tượng cổng nối tiếp dùng hàm fclose
fclose(s)
Ngắt khỏi môi trường MATLAB 7
Khi không cần truyền thông với thiết bị nữa, chúng ta nên xóa khỏi bộ nhớ
với hàm delete
delete(s)
Trước khi dùng hàm delete phải ngưng kết nối đối tượng cổng nối tiếp từ thiết bị với hàm fclose
Trang 34Một đối tượng cổng nối tiếp đã được xóa thì không hợp lệ, điều này nghĩa là chúng ta không thể kết nối nó tới thiết bị Trong trường hợp này, chúng ta nên ngắt
đối tượng khỏi vùng làm việc MATLAB bằng lệnh clear
clear s
2.6 SỰ KIỆN (EVENTS) VÀ HÀM CALLBACKS
Matlab hỗ trợ nâng cao khả năng và tính linh họat của ứng dụng cổng nối tiếp bằng việc dùng những sự kiện (event) Khi có một điều kiện xảy ra, một sự kiện sẽ xuất hiện và tạo ra một hoặc nhiều callback
Trong khi đối tượng cổng nối tiếp được kết nối với thiết bị, chúng ta có thể sử dụng những sự kiện (events) để hiển thị một thông báo, dữ liệu hiển thị, phân tích dữ liệu, v.v… Callbacks được điều khiển qua những thuộc tính callback và những hàm trong callback Tất cả các loại sự kiện đều có thuộc tính callback tương ứng Những hàm callback là những hàm chứa trong M-file, vì vậy chúng ta có thể lập trình lại cho phù hợp với từng ứng dụng
Khi thực thi một sự kiện trong callback, ta xác định tên hàm callback trong M-file cũng như giá trị thuộc tính callback tương ứng của nó
2.6.1 Loại sự kiện và thuộc tính callback
Những loại sự kiện cổng nối tiếp và những thuộc tính callback được mô tả bảng 2-10
Bảng 2-10 Những loại sự kiện cổng nối tiếp và những thuộc tính callback
Các loại sự kiện Các thuộc tính tương ứng
BytesAvailableFcnCount BytesAvailableFcnMode Error ErrorFcn
Timer TimerFcn
TimerPeriod
Sự kiện Break–interrupt: Một sự kiện ngắt – sự gián đoạn phát ra tức
thời sau khi một ngắt được tạo ra bởi cổng nối tiếp Cổng nối tiếp phát ra một ngắt khi dữ liệu nhận được ở trong trạng thái không tích cực (inactive) lâu hơn thời gian truyền một ký tự
Trang 35Sự kiện này thực thi hàm callback được chỉ định trong thuộc tính BreakInterruptFcn, nó có thể tạo ra ngay cả khi đọc và viết đồng bộ hay không đồng bộ
Sự kiện Bytes–Available: Một sự kiện byte hiện hữu phát ra tức thời sau
khi số byte được định trước xuất hiện trong inputbuffer hay xuất hiện ký tự định dạng kiểu in tùy theo thuộc tính BytesAvailableFcnMode
Nếu như BytesAvailableFcnMode là “byte” thì sự kiện những byte hiện hữu chỉ thực thi hàm callback khi số byte được chỉ định theo BytesAvailableFcnCount được lưu trữ trong inputbuffer Nếu BytesAvailableFcnMode là “terminal” thì hàm callback chỉ thực thi khi quá trình đọc ký tự định dạng kiểu in trong thuộc tính
“terminal” hoàn tất
Sự kiện này chỉ phát ra trong suốt quá trình đọc không đồng bộ
Sự kiện Error: Một sự kiện lỗi được phát ra tức thời khi lỗi xuất hiện
Sự kiện này thi hành hàm callback được chỉ định trong thuộc tính ErrorFcn Lỗi chỉ phát ra trong suốt quá trình đọc và viết không đồng bộ
Sự kiện lỗi được phát ra khi hiện tượng timeout xảy ra Hiện tượng timeout xuất hiện khi trong một thao tác đọc hoặc viết dữ liệu không thành công trong khoảng thời gian được xác định trong thuộc tính Timeout Sự kiện lỗi sẽ không được phát ra khi thiết lập các giá trị thuộc tính không hợp lệ
Sự kiện output–empty: Một sự kiện Output-Empty được phát ra lập tức
khi outputbuffer rỗng
Sự kiện này thi hành hàm callback được chỉ định trong thuộc tính OutputEmptyFcn Nó chỉ phát ra trong suốt thời gian thực hiện một thao tác viết không đồng bộ
Sự kiện Pin Status: Sự kiện trạng thái chân phát ra ngay khi trạng thái
các chân CD, CTS, DSR, RI biến đổi
Sự kiện này thi hành hàm callback đã được chỉ định trong thuộc tính PinStatusFcn Nó có thể được phát ra trong cả những thao tác đọc và viết đồng bộ hay không đồng bộ
Sự kiện Time: Một sự kiện đồng hồ thời gian phát ra khi vượt quá thời
gian được chỉ định trong thuộc tính TimerPeriod Thời gian này bắt đầu tính khi đối tượng cổng nối tiếp được kết nối tới thiết bị
Sự kiện này thi hành hàm callback đã được chỉ định trong thuộc tính TimerFcn Chú ý rằng, có một số sự kiện đồng hồ thời gian có thể không xử lý nếu như hệ thống máy tính hoạt động quá chậm hoặc giá trị TimerPeriod quá nhỏ
2.6.2 Lưu trữ thông tin sự kiện
Thông tin sự kiện có thể lưu trữ trong một hàm callback hoặc trong một tập tin lưu trữ Thông tin sự kiện được lưu trữ trong hàm callback dùng hai trường khác
Trang 36nhau: loại (Type) và dữ liệu (Data) Type chứa loại biến cố, trong khi trường dữ liệu chứa thông tin cụ thể của sự kiện
Những loại và giá trị sự kiện cho trong trường Type và Data được liệt kê trong bảng 2-11
Bảng 2-11 Thông tin sự kiện
Type BreakInterrupt Break interrupt
Data.AbsTime day-month-year hour:minute:second Type BytesAvailable
Data.AbsTime day-month-year hour:minute:second Type PinStatus
Data.AbsTime day-month-year hour:minute:second Data.Pin CarrierDetect, ClearToSend, DataSetReady,
or RingIndicator Pin status
Data.PinValue on or off Type Timer Timer
Data.AbsTime day-month-year hour:minute:second
Trường AbsTime: AbsTime được định nghĩa cho tất cả những sự kiện và
báo hiệu thời gian xuất hiện sự kiện Thời gian này được khai báo lại trong đồng hồ theo dạng
Ngày - tháng - năm giờ: phút: giây
Trường Pin: Được sử dụng cho sự kiện trạng thái chân để báo hiệu sự
thay đổi trạng thái các chân CD , CTS , DSR , RI
Trường PinValue: Được sử dụng cho sự kiện trạng thái chân để báo
hiệu trạng thái của các chân CD, CTS, DSR, RI Các giá trị chân có thể là ON hoặc OFF
Trường Message: Được sử dụng cho sự kiện lỗi để lưu trữ thông báo mô
tả lỗi, nó sẽ phát ra khi xuất hiện lỗi
Trang 372.6.3 Tạo và thực thi các hàm callback
Khi một sự kiện xảy ra, có thể chỉ định hàm callback để được thực thi sự kiện đó bằng việc dùng tên của M-file hay giá trị thuộc tính callback tương ứng Ngoài ra, cũng có thể tạo hàm callback như hàm điều khiển (function handle) hoặc như một phần tử mảng của chuỗi
Ví dụ: Để thi hành hàm mycallback khi ký tự định dạng kiểu in được đọc:
function mycallback(obj,event)
2.7 SỬ DỤNG NHỮNG CHÂN ĐIỀU KHIỂN
Đối với cổng nối tiếp 9 chân, có 6 chân điều khiển Những chân điều khiển này có thể:
- Báo hiệu trạng thái kết nối thiết bị
- Điều khiển dòng dữ liệu
Những thuộc tính tương ứng với những chân điều khiển cổng nối tiếp mô tả bảng 2.12
Bảng 2-12 Các thuộc tính của chân điều khiển
DataTerminalReady Xác định tình trạng chân DTR
FlowControl Xác định phương pháp điều khiển luồng dữ liệu sử dụng PinStatus Hiển thị trạng thái chân CD, CTS, DSR, and RI
RequestToSend Xác định trạng thái chân RTS pin
2.7.1 Báo hiệu trạng thái kết nối thiết bị
DTE (máy tính) và DCE (thiết bị) thường sử dụng các chân CD, DSR, RI, DTR để báo hiệu sự kết nối giữa những thiết bị và đối tượng cổng nối tiếp, sau đó có thể bắt đầu viết và đọc dữ liệu khi sự kết nối được thiết lập
Với thuộc tính PinStatus, có thể giám sát trạng thái của các chân CD, DSR,
RI Tương tự, cũng có thể xác định trạng thái của chân DTR với thuộc tính DataTerminalReady
Trang 382.7.2 Điều khiển dòng dữ liệu
Điều khiển dòng dữ liệu hay bắt tay là một phương pháp sử dụng giao tiếp giữa một DCE và một DTE để ngăn ngừa dữ liệu bị mất trong suốt quá trình truyền Chẳng hạn, máy tính chỉ có thể nhận một lượng dữ liệu giới hạn trước khi nó được xử lý Khi giới hạn này đạt được, một tín hiệu bắt tay được truyền tới DCE để ngừng gởi dữ liệu Khi máy tính có thể nhận tiếp dữ liệu mới, tín hiệu bắt tay khác được truyền tới DCE để lại tiếp tục gởi dữ liệu
Dòng dữ liệu nếu được hỗ trợ của thiết bị, có thể điều khiển bằng một trong những phương pháp sau:
- Bắt tay phần cứng (hardware handshaking)
- Bắt tay phần mềm (software handshaking)
Phương pháp điều khiển dòng dữ liệu có thể thiết lập từ thuộc tính
FlowControl Nếu như FlowControl là “hardware” thì dòng dữ liệu được điều khiển theo kiểu bắt tay phần cứng Nếu như FlowControl là “software” thì luồng dữ liệu được điều khiển theo kiểu bắt tay phần mềm Nếu như FlowControl là “none” thì
không sử dụng phương pháp bắt tay nào
2.7.2.1 Bắt tay phần cứng (Hardware Handshaking)
Bắt tay phần cứng: Dùng các chân điều khiển của cổng nối tiếp để điều khiển dòng dữ liệu Trong hầu hết các trường hợp đều sử dụng các chân RTS và CTS
Nếu như FlowControl là Hardware thì các chân RTS và CTS được quản lý tự
động bởi DTE và DCE Trong thuộc tính PinStatus có thể khai báo lại giá trị chân CTS và cũng có thể thiết lập lại giá trị chân RTS trong thuộc tính RequestToSend
Chú ý: Một vài thiết bị cũng sử dụng chân DTR và DSR cho việc bắt tay phần cứng Tuy nhiên, đó là những chân tiêu biểu dùng để báo hiệu hệ thống sẵn sàng truyền thông mà không dùng để điều khiển truyền dữ liệu Trong matlab, bắt tay phần cứng luôn sử dụng những chân RTS và CTS
Nếu thiết bị không dùng tiêu chuẩn bắt tay phần cứng, chúng ta cần phải
thiết lập lại thuộc tính RequestToSend Trong trường hợp này, nên thiết lập
FlowControl là none Nếu FlowControl là hardware thì giá trị RequestToSend được
chỉ định có thể không thực hiện đúng
2.7.2.2 Bắt tay phần mềm (Software Handshaking)
Bắt tay phần mềm: Dùng những ký tự ASCII xác định để điều khiển dòng dữ liệu Những ký tự này Xon và Xoff (XON và XOFF) được mô tả bảng 2-13
Bảng 2-13 Những ký tự điều khiển trong bắt tay phần mềm
Trang 39Xoff (XOFF) 19 Ngừng truyền dữ liệu
Khi dùng bắt tay phần mềm những ký tự gởi trên đường truyền giống như gởi dữ liệu thông thường Do đó, chúng ta chỉ cần những chân TD, RD và GND
Bất lợi chính khi sử dụng bắt tay phần mềm là chúng ta không thể viết ký tự Xon hoặc Xoff trong khi dữ liệu cần viết tới thiết bị là dữ liệu số Bởi dữ liệu số được phép chứa số 17 hoặc 19, điều này làm chúng không thể phân biệt giữa những ký tự điều khiển và dữ liệu Tuy nhiên, trong khi dữ liệu đang đọc không đồng bộ từ thiết bị chúng ta vẫn có thể viết Xon hoặc Xoff bởi chúng ta đang dùng cả hai chân TD và RD
2.8 GHI THÔNG TIN LÊN ĐĨA
Trong khi đối tượng cổng nối tiếp được kết nối với thiết bị, ta có thể ghi thông tin này thành một tập tin trên đĩa Nội dung thông tin ghi được bao gồm:
- Số lượng giá trị được viết tới thiết bị, số lượng giá trị được đọc từ thiết bị, và kiểu giá trị dữ liệu
- Dữ liệu được viết tới thiết bị và dữ liệu đọc từ thiết bị
- Thông tin sự kiện
Ghi thông tin lên đĩa cung cấp một bản ghi thông tin của cổng nối tiếp, là một phương pháp gỡ lỗi dễ dàng cho chương trình ứng dụng Trong Matlab hàm
record được dùng để ghi thông tin lên một tập tin trên đĩa Các thuộc tính tương ứng với việc ghi thông tin lên đĩa được trình bày ở bảng 2-14:
Bảng 2-14 Thuộc tính ghi
Tên thuộc tính Mô tả
RecordDetail Chỉ lượng thông tin được lưu đến tập tin ghi
RecordMode Chỉ có dữ liệu và thông tin sự kiện được lưu đến một hoặc
nhiều tập tin ghi RecordName Chỉ tên của tập tin ghi
RecordStatus Báo hiệu khi dữ liệu và thông tin sự kiện được lưu vào tập
tin ghi
2.8.1 Phương pháp ghi tập tin
Khi bắt đầu ghi với hàm record, thuộc tính RecordMode xác định nếu tập tin
ghi mới thì tập tin mới được tạo ra hoặc nếu thông tin mới thì đuợc ghi tiếp theo trong tập tin ghi hiện hành
Có thể thiết lập RecordMode để ghi đè, ghi tiếp theo, hoặc theo chỉ mục
Nếu như RecordMode là overwrite thì tập tin được ghi đè lên tập tin cũ Nếu như RecordMode là append, thì thông tin mới được ghi tiếp theo tập tin được xác định trong RecordName Nếu như RecordMode là index thì một tập tin mới được ghi
trên đĩa nhưng không đè lên tập tin trước
Trang 402.8.2 Xác định tên tập tin
Để xác định tên của tập tin ghi ta dùng thuộc tính RecordName Ta có thể xác định bất kỳ loại giá trị nào đối với RecordName – Bao gồm đường dẫn thư mục
– Tên tập tin Ngoài ra, Nếu như RecordMode là index thì tên tập tin phải theo
những qui tắt sau:
- Những tên chỉ mục tập tin có dạng số Con số này đứng trước phần mở rộng của tên tập tin và được tăng lên 1 cho tập tin ghi kế tiếp
- Nếu như tên tập tin ban đầu không chỉ rõ con số nào thì tên tập tin ghi đầu tiên không có con số đi theo Ví dụ, nếu như RecordName là myfile.txt thì myfile.txt là tên của tập tin ghi đầu tiên, myfile01.txt là tên của tập tin ghi thứ hai, v.v…
- RecordName được cập nhật sau khi tập tin ghi đóng
- Nếu như tên tập tin được chỉ định đã tồn tại rồi thì tập tin tồn tại đó bị ghi đè
2.8.3 Định dạng tập tin
Tập tin ghi là một tập tin ASCII chứa đựng một hồ sơ của một hoặc nhiều phiên bản cổng nối tiếp Thuộc tính RecordDetail xác định lượng thông tin trong tập tin ghi
RecordDetail có thể chọn là “compact” hay “verbose” Nếu chọn compact thì
nội dung tập tin sẽ ghi gồm: Số lượng giá trị viết tới thiết bị, số lượng giá trị đọc từ
thiết bị, kiểu giá trị dữ liệu và thông tin sự kiện Nếu chọn verbose thì nội dung tập
tin sẽ ghi là: Những thông tin trước đó cũng như dữ liệu được truyền tới thiết bị và truyền đi từ thiết bị
Dữ liệu nhị phân với độ chính xác: uchar, schar, (u)int8, (u)int16 hoặc
(u)int32 được ghi theo định dạng hệ đếm 16(hexadecimal)
2.9 LƯU VÀ XUẤT DỮ LIỆU
Có thể lưu những đối tượng cổng nối tiếp tới MAT-file như chọn bất kỳ sự
thay đổi nào trong vùng làm việc (workspace) – sử dụng lệnh save Giả sử để tạo đối tượng cổng nối tiếp s kết hợp với cổng nối tiếp COM1, thiết lập các giá trị
thuộc tính và thực hiện một thao tác viết và đọc:
s = serial('COM1');
s.BaudRate = 19200;
s.Tag = 'My serial object';
fopen(s) fprintf(s, '*IDN?') out = fscanf(s);