Lập trình dùng Matlab

Một phần của tài liệu Bài giảng điều khiển bằng máy tính (Trang 127 - 137)

Như đã giới thiệu về giao tiếp nối tiếp giữa Matlab với thiết bị ngoại vi qua cổng nối tiếp ở phầntrên. Sau đây ta sẽtổng hợp lại một số bài viết về lập trình giao tiếp RS232 trên PC bằng phần mềm Matlab.

Đối tượng Serial Object

Việc giao tiếp này cũng không quá khó khăn. Đã giao tiếp thành công trên ngoại vi. Để bắt đầu kiểm tratrước tiên ta hãy đấu tắt 2 chân 2 và 3 (TX và RX) của cổng COM lại.

Đầu tiên sẽ đưa ra môt chương trình đơn giản, cơ bản trong đó thiết lập một vài tham số, còn chi tiết về thiết lập tham số nó thế nào và ý nghĩa ra sao.

Ví dụ đầu tiêngiới thiệu cách tạo đối tượng, kết nối, viêt hàm callback. Tạo đối tượng:

Chúng ta gõ lệnh và kết quả hiện luôn (nhớ là kcó dấu ; ở cuối lệnh Chương trình:

Serial Port Object : Serial-COM1 Communication Settings Port: COM1 BaudRate: 9600 Terminator: 'LF' Communication State Status: closed RecordStatus: off Read/Write State TransferStatus: idle BytesAvailable: 0 ValuesReceived: 0 ValuesSent: 0

Như vậy đối tượng là Serial-COM1, tốc độ 9600,..

Tiếp theo, chúng ta xem các tham số của đối tượng như thế nào bằng lệnh get(s): Chương trình: >> get(s) ByteOrder = littleEndian BytesAvailable = 0 BytesAvailableFcn = BytesAvailableFcnCount = 48 BytesAvailableFcnMode = terminator BytesToOutput = 0 ErrorFcn = InputBufferSize = 512 Name = Serial-COM1 ObjectVisibility = on OutputBufferSize = 512 OutputEmptyFcn = RecordDetail = compact RecordMode = overwrite RecordName = record.txt RecordStatus = off Status = closed

Tag = Timeout = 10 TimerFcn = TimerPeriod = 1 TransferStatus = idle Type = serial UserData = [] ValuesReceived = 0 ValuesSent = 0

SERIAL specific properties: BaudRate = 9600 BreakInterruptFcn = DataBits = 8 DataTerminalReady = on FlowControl = none Parity = none PinStatus = [1x1 struct] PinStatusFcn = Port = COM1 ReadAsyncMode = continuous RequestToSend = on StopBits = 1 Terminator = LF

Ta thấy là có rất nhiều tham số trong chương trình nhưng chúng ta ở đây quan tâm đến tham số: BytesAvailableFcn tham số này chưa thiết lập. Tham số này chính là hàm callback mà nó sẽ gọi khi có byte nhận được ở bộ đệm nhận.Vậy chúng ta viết hàm này chính là viết hàm OnComm đáp ứng sự kiện ReceiveEvent như trong MSCOMM của MS vậy.

Thiết lập này phải thực hiện trước khi mở cổng để giao tiếp, nên chúng ta sẽ viết hàm callback trước. Bạn viết 1 m-file với tên Serial_Callback.m như sau:

function Serial_Callback(obj,event) ind = fscanf(obj)

Cú pháp của hàm callback như trên với obj là đối tượng kiểu Serial như trên. Hàm có tác dụng đọc dữ liệu và hiển thị luôn kết quả lên command window.

>> s.BytesAvailableFcn = @Serial_Callback; Tiếp theo chúng ta bắt đầu giao tiếp:

>>fopen(s);

>>fprintf(s,"chao cac ban");

Sau đó ta sẽ xem kết quả thế nào, và thử truyền các kí tự khác xem bằng lệnh fprintf(s,...), hoặc thử với vi xử lý xem nó truyền lên các bạn sẽ thấy rất rõ ràng. Khi không giao tiếp nữa thì đóng cổng lại:

>>fclose(s);

Chương trình giao tiếp RS232

Đây là chương trình viết dùng GUI, kiểm tra kết nối với mạch FPGA Spartan 3E rồi.

Cách dùng:

a/ Chọn tham số cho RS232 rùi ấn nút Connect để bắt đầu kết nối với RS232. b/ Nhập dữ liệu vào ô TX vànhấn nút Send để gửi dữ liệu.

c/ Để thay đổi tham số (tốc độ, ..) cho RS232 thì phải nhấn Disconnect trước rồi mới chỉnh tham số. Sau đó quay lại bước 1.

Hình 4.18 Chương trình RS232 Communication

Chú ýđây là chương trình viết dưới dạng mở, tức là ta có thể thêm code vào các hàm để phục vụ mục đích của mình. Đó chính là các hàm ngắt nhận, ngắt gửi,... BytesAvailableFcnCount là số byte nhận được trong bộ đệm nhận trước khi xảy ra ngắt nhận.

- function ByteAvailable_Callback(obj, event) - function OutputEmpty_Callback(obj, event) - function Error_Callback (obj, event)

- function PinStatus_Callback(obj, event) - function Timer_Callback (obj,event)

- function BreakInterrupt_Callback(obj, event)

Khi ta muốn thao tác với dữ liệu vừa nhận được thì điều chỉnhthêm code trong hàm sau: function ByteAvailable_Callback(obj, event)

Ví dụ tiếp theo ta sẽ thiết kế giao diện GUI trong Matlab.

1. Mở phần mềm Matlab, gõ lệnh sau vào cửa sổ Command

>> guide

Hình 4.19 Cửa sổ GUIDE Quick Start trong Matlab

Trong cửa sổ GUIDE Quick Start có nhiều lựa chọn theo một trong các khuân mẫu sau:

Create New GUI: Tạo một hộp thoại GUI mới theo một trong các loại sau

 Blank GUI (Default): Hộp thoại GUI trống không có một điều khiển uicontrol nào cả.

 GUI with Uicontrols: Hộp thoại GUI với một vài uicontrol như button, ... Chương trình có thể chạy ngay.

 GUI with Axes and Menu: Hộp thoại GUI với một uicontrol axes và button, các menu để hiển thị đồ thị.

 Modal Question Dialog: Hộp thoại đặt câu hỏi Yes, No. Open Existing GUI: mở một project có sẵn.

Trong hướng dẫn này, ta sẽtạo một project mới nên sẽ chọn Blank GUI

2. Cửa sổ GUI

Hình 4.20 Giao diện GUI trong Matlab

Giao diện rất giống với các chương trình lập trình giao diện như Visual Basic, Visual C++, ... ta di chuột qua các biểu tượng ở bên trái sẽ thấy tên của các điều khiển. Ở đây ta giới thiệuqua một vài điều khiển hay dùng:

 Push Button: giống như nút Command Button trong VB. Là các nút bấm như nút OK, Cancel mà ta vẫn bấm.

 Slider : Thanh trượt có một con trượt chạy trên đó.  Radio Button : Nút nhỏ hình tròn để chọn lựa  Check Box  Edit Text  Static Text  Pop-up Menu  List Box  Axes  Panel  Button Group  ActiveX Control  Toggle Button

Còn menu thì quan trọng nhất là menu Tools có:

 Run (Ctr + T) : nhấn vào để chạy chương trình mà ta đã viết. Có lỗi là hiện ra báo ngay

 Align Object: dùng để làm cho các điều khiển sắp xếp gọn đẹp theo ý mình như cùng căn lề bên trái, ...

 Grid and Rulers : dùng để cấu hình về lưới trong giao diện vì nó sẽ coi giao diện như một ma trận các ô vuông nhỏ, ta sẽ thay đổi giá trị này để cho các điều khiển có thể thảở đâu tùy ý cho đẹp.

 Menu Editor : trình này để tạo menu cho điều khiển

 Tab Order Editor : sắp xếp Tab order là thứ tự khi ta nhấn phím Tab  Gui Options : lựa chọn cho giao diện GUI.

Các bạn nên vào menu Help để xem hướng dẫn thêm trong Help.

Các bạn save dưới tên: TUT01, khi đó đồng thời xuất hiện cửa sổ Editor và đang mở file TUT01.m của bạn. Trong thư mục bạn save sẽ có 2 file là:

 TUT01.fig : file này chứa giao diện của chương trình

 TUT01.m : file chứa các mã thực thi cho chương trình như các hàm khởi tạo, các hàm callback,... (sẽ nói chi tiết vào bài khác).

3. Kéo thả các điều khiển

Ta sẽ làm một ví dụ tiếp theo bằng cách kéo vào trong giao diện 2 edit box, 1 static box và 1 Push Button.

Hình 4.21 Giao diện tạo nút bấm

Chương trình có chức năng khi nhấn vào nút bấm thì kết quả của phép tính cộng giữa 2 số được gõ vào 2 ô sẽ hiện lên trong Static Text.

4. Thay đổi các thuộc tính của các điều khiển

Click đúp vào Edit Text bên trái để xuất hiện cửa sổ các thuộc tính của điều khiển. Có thể sắp xếp theo chức năng hoặc theo thứ tự A-Z của tên thuộc tính bằng nút hiện ở gõ bên trái.

Hình 4.22 Thay đổi các thuộc tính

Thuộc tính quan trọng của Edit Box bao gồm:

 Tag: đây là thuộc tính giống như Caption trong Visual Basic để đặt tên điều khiển. Dùng tên này có thể thao tác đến các thuộc tính của đối tượng. Mình đặt tên là: editStr1.

 String : là xâu kí tự hiện lênEdit Box. Các bạn xóa cái này đi.

Tương tự, thay đổi thuộc tính tag của Edit Box thứ 2 thành editStr2. Static Box cũng tương tự thành staticStr3.

5. Viết lệnh cho chương trình

Ví dụ trong chương trình có tác dụng khi nhấn vào nút Push Button sẽ hiện lên kết quả ở Static Box. Vì thế nên sẽ phải viết vào hàm nào mà khi nhấn vào Push Button sẽ gọi. Chính là hàm Callback. Điều khiển nào cũng có hàm callback, như hàm ngắt trong vi điều khiển vậy.

Click chuột phải vào nút Calculate chọn Callback. Trong này còn một số hàm nữa sẽ tính sau.

Hình 4.23 Giao diện chọn hàm callbacks

Nhìn vào định nghĩa của hàm trong Editor ta sẽ thấy là: hàm này được thực hiện khi nhấn vào nút buttonCalculate.

Hàm có một số tham số:

 hObject : handle của điều khiển buttonCalculate  eventdata

 handles : là một cấu trúc chứa tất cả các điều khiển và dữ liệu người dùng. Dùng hàmnày để truy suất các điều khiển khác.

Qua thuộc tính tag của các điều khiển ta sẽ truy suất đến thuộc tính string của các điều khiển editStr1, editStr2,editStr3 bằng lệnh get và set.

get(handles.tag_dieu_khien, 'ten thuoc tinh');

set(handles.tag_dieu_khien, 'ten_thuoc_tinh', gia_tri);

và hàm quan trọng nữa biến từ string sang số là hàm: str2num và num2str để biến trở lại.

Vậy chúng ta sẽ viết hàm như sau:

Nhấn nút Run kiểm tra kết quả

Một phần của tài liệu Bài giảng điều khiển bằng máy tính (Trang 127 - 137)

Tải bản đầy đủ (PDF)

(155 trang)