CHƯƠNG V GIAO TIẾP MÁY TÍNH VỚI VI XỬ LÝ
II. Chương trình truyền thông bằng ngôn ngữ Visual Bassic 6.0
Visual Basic là ngôn ngữ lập trình trên môi trường Windows ra đời sớm nhất, và đã thực sự tạo nên một cuộc cách mạng trong công nghệ phần mềm. Cho nên khi phát hành Visual Basic 1.0 vào năm 1991, ông Bill Gates, chủ tịch hãng Microsoft đã gọi Visual Basic là một sản phẩm “đáng nể”, còn các nhân vật nổi tiếng khác trong giới công nghệ phần mềm cũng không tiếc lời khen ngợi công cụ lập trình trực quan này.
Nếu đã từng cảm thấy thực sự thích thú khi chuyển từ việc sử dụng hệ điều hành MS-DOS sang Windows thì ta cũng dễ hiểu những lời khen ngợi này. Trước đây, khi làm việc trong môi trường DOS, không ít người đã cảm thấy thực sự khó khăn với việc phải nhớ những câu lệnh để nhập vào từ dấu nhắc DOS. Windows đã giải quyết khó khăn này cho người dùng bằng cách sử dụng một giao diện đồ họa với những nút lệnh, hộp thoại chuẩn, các menu để chọn lựa…Tuy nhiên trước khi Visual Basic ra đời thì để tạo được một ứng dụng trong Windows, các lập trình viên sử dụng C phải tốn rất nhiều công sức dành cho việc tạo giao diện cho chương trình. Chỉ có việc tạo một nút lệnh không thôi đã cần phải dùng đến hàng trăm dòng mã lệnh.
Với VisualBasic, công việc tạo giao diện đã trở nên dễ dàng hơn bao giờ hết.
Chỉ với một vài thao tác click – drag đơn giản, ta đã có thể bổ sung vào các cửa sổ còn trống các lệnh đơn, các hộp văn bản, các nút lệnh, các nút tùy chọn, các nhãn, các hộp kiểm…Sau khi tạo giao diện thì công việc của ta chỉ là viết mã cho các đối tượng này (gọi là các điều khiển : Control). Như vậy, có thể nói, với Visual Basic công việc tạo giao diện đồ họa cho ứng dụng đã được Visual Basic đảm nhận.
Visual Basic cho phép ứng dụng tạo ra liên kết với các ứng dụng Windows khác rất dễ dàng, cho phép dễ dàng tạo ra các ứng dụng thiên về quản lý dữ liệu và mạng.
Visual Basic cho phép người sử dụng giao tiếp với thư viện liên kết động DLL. Điều này giúp giảm kích cỡ chương trình, tập tin thực thi và đặc biệt là làm cho chương trình có khả năng được nâng cấp dễ dàng hơn.
Visual Basic còn cung cấp một số phương pháp bẫy lỗi trong ứng dụng. Đây là một công cụ rất mạnh của Visual Basic.
2. Truyeàn thoõng noỏi tieỏp duứng visual basic
Do sự phát triển ngày càng tăng của các ứng dụng truyền thông qua cổng nối tiếp, từ phiên bản 6.0 của Visual Basic ,điều khiển truyền thông đã được hoàn chỉnh để sử dụng cho việc lập trình ghép nối máy tính qua cổng nối tiếp .Trong phần này ta sẽ tìm hiểu về điều khiển này .
a) ẹieàu khieồn truyeàn thoõng
Bình thường khi chạy phần mềm Visual Basic ta chỉ thấy có một số thành phần quen thuộc trên hộp công cụ (toolbox) .Nhưng Visual Basic cho phép nhiều thành phần có thể được bổ sung thêm vào. Điều khiển truyền thông Mscomm của Visual Basic là một trong số các đối tượng có thể được bổ sung để tham gia vào một
Trong Visual Basic 5.0 và 6.0 ta có thể bổ sung thành phần Mscomm đề cập ở trên như sau : Chọn Project => Components (Ctrl – T) ,cửa sổ sẽ xuất hiện. Điều khiển truyền thông cung cấp hai khả năng để trao đổi thông tin :
* Điều khiển sự kiện : Truyền thông điều khiển sự kiện là phương pháp tốt nhất được sử dụng trong quá trình điều khiển việc trao đổi thông tin nối tiếp khi nó giải phóng máy tính để làm các công việc khác .Trong nhiều tình huống, ta cần được thông báo về sự thay đổi. Thí dụ như ta cần biết khi có ký tự gửi đến hoặc sự thay đổi xảy ra trên đường DCD (Data Carrier Detect ) hoặc đường RTS (Request To Send).
Để làm điều đó ta sẽ sử dụng sự kiện truyền thông OnComm để bẫy và điều khiển các sự kiện. Điều khiển truyền thông còn phát hiện và điều khiển các lỗi truyền thoâng.
* Hỏi Vòng (Polling): Ta cũng có thể hỏi vòng các sự kiện và lỗi bằng cách kiểm tra giá trị của đặc tính ComEvent sau mỗi chu kỳ của chương trình để xác định xem liệu một sự kiện hoặc một lỗi đã xuất hiện. Chẳng hạn, chương trình có thể tạo vòng lặp để chờ một ký tự cần được nhận. Cứ mỗi lần như vậy, ký tự được đọc từ bộ đệm nhận. Thông thường phương pháp này được sử dụng khi chương trình có thời gian để tiến hành hỏi vòng bộ nhận thông tin, hay nói cách khác là trong các ứng dụng không lớn.
Visual Basic sử dụng các bộ điều khiển cửa sổ chuẩn cho các cổng truyền tin nối tiếp (như serialui.dll và serial.vxd ). Điều khiển truyền thông được bổ sung cho ứng dụng của một cổng nối tiếp, nói khác đi mỗi điều khiển truyền thông mà ta dùng chỉ có thể điều khiển một cổng nối tiếp. Nếu cần truy nhập nhiều cổng trong ứng dụng thì ta phải dùng nhiều điều khiển truyền thông. Địa chỉ cổng và địa chỉ ngắt có thể thay đổi nhờ Control Panel trong Windows .Các tham số (như tốc độ truyền theo bit ,chẵn lẻ ,…) đều có thể được thay đổi bằng cách lựa chọn: Control Panel =>
System => Device Manager => Port (COM và LPT) =>Port Settings. Việc thiết lập các cổng truyền thông (IRQ và địa chỉ cổng) có thể thay đổi bằng cách lựa chọn Control Panel => System => Device Manager => Port (COM và LPT) =>
Resources.
b) Thuộc tính (property)
Thành phần Comm được bổ sung vào biểu mẫu ( Form ) bất cứ lúc nào cần đến việc truyền thông nối tiếp. Theo mặc định, cổng thứ nhất tạo ra đối tượng có tên MSComm1, đối tượng ứng với cổng thứ hai được gọi là MSComm2,…Có thể nhìn thấy các đặc tính chính của đối tượng là: CommPort, DTREnable, EOFEnable, HandShaking ,InBufferSize, Index, InputLen, Inputmode, Left, Name, NullDiscard, OutBufferSize, ParityReplace, Rthreshold, RTSEnable, Settings, SThreshold, Tag, Top. Ta thấy điều khiển truyền thông có nhiều thuộc tính, nhưng để có thể làm việc với điều khiển truyền thông, trước hết ta cần hiểu kỹ các thuộc tính chính được liệt kê trong bảng sau .
Các thuộc tính Sự mô tả
CommPort Đặt và trả lại số cổng truyền thông
Input(nhập vào) Trả lại và loại bỏ các ký tự khỏi bộ đệm nhận
Output(xuất ra) Viết một xâu ký tự tới vào bộ đệm truyền
PortOpen Mở/Đóng một cổng (tùy thuộc vào thông số) và đặt thoõng soỏ cho coồng .
Settings Đặt và trả lại các tham số truyền thông như :tốc độ truyền theo bit ,chẵn lẻ ,số các bit dữ liệu ,…
Thí dụ sau đây chỉ ra cách truyền thông qua cổng nối tiếp có thể được tiến hành như thế nào bằng cách sử dụng một Modem.
Private sub Form_load()
‘biến để lưu giữ chuỗi nhập vào Dim Instring as String
‘sử dụng COM1 Mscomm11.ComPort = 1
‘9600 baud ,no parity ,8 bit data ,1 stop bit Mscomm11.Settings = ”9600 ,N,8,1”
‘ra lệnh cho điều khiển Mscomm1 đọc hết bộ đệm nhận khi dùng
‘leọnh Input
Mscomm11.InputLen = 0
‘mở cổng
Mscomm11.PortOpen = True
‘gửi lệnh attention tới MODEM
Mscomm11.Output = “ATV1Q0” & Chr$(13) ‘để chắc rằng
‘MODEM trả lời “OK”
‘đợi dữ liệu trả lời gửi về cổng nối tiếp Do
DoEvents
Buffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$ , “OK” &vbCRLF)
‘đọc dữ liệu trả lời “OK”
‘đóng cổng nối tiếp Mscomm11.PortOpen = False
Sau đây ta sẽ lần lượt tìm hiểu một số thuộc tính quan trọng của điều khiển truyeàn thoâng .
Thuộc tính Settings
Thuộc tính Settings đặt và trả lại các thông số truyền thông cho cổng RS - 232, như tốc độ baud, tính chẵn lẻ, số bit dữ liệu và số các bit dừng.
Cú pháp của câu lệnh là :
[form.]Mscomm1.Settings [=paramString$]
• Nếu paramString$ không hợp lệ (valid) thì khi mở cổng, điều khiển truyền thông sẽ phát sinh lỗi 380 ( lỗi giá trị thuộc tính không hợp lệ ).
• ParamString$ là một chuỗi chứa 4 thông số thiết lập cho cổng truyền thông RS-232 và có dạng như sau :
“BBBB ,P ,D ,S”
Ở đây BBBB xác định tốc độ baud, P là bit chỉ tính chẵn lẻ, D là số bit dữ liệu và S là số các bit dừng (stop bits). Giá trị mặc định của paramString$ là : “9600, N, 8,1”
Bảng sau đây liệt kê các giá trị baud hợp lệ :
- Số bit dữ liệu hợp lệ trong một lần truyền (khung truyền) là : 4 ,5 ,6 ,7 ,8 (default)
- Số bit Stop hợp lệ là : 1 ,1.5 ,2.
- Thí dụ sau cho phép đặt thông số cho cổng truyền ở tốc độ baud là 4800,không kiểm tra bit chẵn lẻ ,8 bit dữ liệu ,1 bit dừng :
Mscomm11.Settings =”4800 ,N ,8 ,1”
- Kiểu dữ liệu của Mscomm11.Settings là : String .
Thuộc tính CommPort
Thuộc tính này đặt và trả lại số cổng truyền thông .Cú pháp của câu lệnh là : [form.].CommPort [=portnumber%]
Trong khi thiết kế (design time) ta có thể đặt Portnumber% bằng một giá trị nằm trong khoảng từ 1 đến 16 (giá trị mặc định là 1). Trước khi dùng lệnh PortOpen phải thiết lập cổng bằng CommPort. Nếu ta dùng thuộc tính PortOpen trước khi thiết lập cổng bằng CommPort thì điều khiển truyền thông sinh ra lỗi 68 (cổng không tồn tại).