2.3.1. Cơ sở lựa chọn ngơn ngữ lập trình
Ngày nay, để lập trình cho các ứng dụng đo lường, điều khiển, người lập trình thường dùng một số ngơn ngữ lập trình như ASSEMBLY, C++, Basic…
Trong đĩ, Assembly là một ngơn ngữ cấp thấp. Ưu điểm của hợp ngữ Assembly là: mã gọn, ít chiếm dung lượng bộ nhớ, hoạt động với tốc độ nhanh, và nĩ cĩ hiệu suất tốt hơn so với các chương trình viết bằng ngơn ngữ bậc cao khác nhưng nhược điểm của nĩ là mỗi câu lệnh chương trình tương ứng với một chỉ lệnh mà bộ xử lý cĩ thể thực hiện được nên thường được sử dụng để viết những chương trình điều khiển đơn giản, lĩnh vực hẹp.
Ngơn ngữ C++ và Basic là ngơn ngữ lập trình bậc cao. Tuy nhiên, việc lập trình trong Visual C++ (VC++) tương đối khĩ hơn Visual Basic (VB) nhất là cho người mới tìm hiểu. Người lập trình thường sử dụng VC++ trong viết các chương trình chuyên sâu như lập trình phần mềm,…cịn VB thường được dùng để viết chương trình cho các ứng dụng điều khiển bởi sự đơn giản, tiện lợi trong việc xây dựng các màn hình đồ họa mà vẫn đảm bảo yêu cầu sử dụng. Các thuộc tính của các Control như Edit box trong VC++ khơng được truy cập trực tiếp như Textbox trong VB mà phải tự tạo ra chúng. Ví dụ để gán và hiển thị một chuỗi hay số lên Edit box phải thực hiện gán và cập nhật dữ liệu qua các biến trung gian. Điều đĩ thực sự là khơng cần thiết với những chương trình điều khiển.
Từ những cơ sở trên mà em lựa chọn ngơn ngữ lập trình Visual Basic 6 cho viết chương trình hỗ trợ điều khiển và thu nhập dữ liệu cho BĐT điện tử yêu cầu.
2.3.2. Ngơn ngữ lập trình Visual Basic 6.0 2.3.2.1. Khái quát về Visual Basic 6.0 2.3.2.1. Khái quát về Visual Basic 6.0
Ngơn ngữ lập trình Visual Basic 6.0 được giới thiệu vào năm 1988được xem là cơng cụ phát triển phần mềm nhanh chĩng và hiệu quả để lập trình trên Microsoft Windows. Visual Basic là ngơn ngữ lập trình phổ dụng trên thế giới hiện nay. Nĩ bổ sung một số tính năng, ngơn ngữ đã được mong đợi từ lâu của người sử dụng, tăng cường năng lực cho việc đánh chỉ mục và các tính năng cơ sở dữ liệu mạnh hơn.
Mặt khác, điểm tiện lợi khi dùng Visual Basic chính là ở chỗ tiết kiệm thời gian và cơng sức so với các ngơn ngữ lập trình khác, khi xây dựng cùng một ứng dụng.
Visual Basic gắn liền với khái niệm lập trình trực quan (Visual) nghĩa là khi thiết kế chương trình ta nhìn thấy ngay kết quả của từng thao tác và giao diện khi chương trình thực hiện. Đây là yếu tố thuận lợi lớn so với các ngơn ngữ lập trình khác. Visual Basic cho phép ta chỉnh sửa đơn giản, nhanh chĩng. Màu sắc, kích thước, hình dáng của các đối tượng đều cĩ mặt trong ứng dụng.
Khi viết chương trình Visual Basic phải trải qua 02 bước: + Thiết kế giao diện (Visual Programming).
+ Viết lệnh (Code Programming).
2.3.2.2. Thiết kế giao diện
Do Visual Basic là một ngơn ngữ lập trình hướng đối tượng rất đơn giản, bằng cách đưa các đối tượng vào Form và tiến hành thay đổi một số thuộc tính của các đối tượng đĩ.
Form: Form là biểu mẫu của mỗi ứng dụng Visual Basic. Ta dùng Form nhằm định vị và sắp xếp các bộ phận trên nĩ khi thiết kế các phần giao tiếp với người dùng. Ta cĩ thể xem Form như là một bộ phận mà mà nĩ cĩ thể chứa các bộ phận khác. Form chính của ứng dụng, các thành phần của nĩ tương tác với các Form khác và các bộ phận của chúng tạo nên giao tiếp cho ứng dụng. Form chính là giao diện chính của ứng dụng, các Form khác cĩ thể chứa hộp thoại, hiển thị cho nhập dữ liệu.
Khi thiết kế một chương trình tức là tạo ra một hay nhiều cửa sổ cho chương trình đĩ. Một chương trình Windows ban đầu thường cĩ một cửa sổ chính và trong quá trình làm việc cĩ thể phát triển thêm nhiều cửa sổ con. Khi ta gọi Visual Basic, ban đầu luơn cĩ một Form cho thiết kế:
Tools Box (Hộp cơng cụ): Bản thân hộp cơng cụ chỉ chứa các biểu tượng biểu thị cho các điều khiển mà ta cĩ thể bổ sung vào biểu mẫu, đĩ là bảng chứa các đối tượng được định nghĩa sẵn của Visual Basic. Các đối tượng này được sử dụng trong Form để tạo thành giao diện cho các chương trình ứng dụng của Visual Basic. Cịn các đối tượng trong thanh cơng cụ sau là thơng dụng nhất:
Scroll Bar (Thanh cuốn): Các thanh cuốn được dùng để nhận nhập liệu hoặc hiển thị kết xuất khi ta khơng quan tâm đến giá trị chính xác của một đối tượng, nhưng lại quan tâm đến sự thay đổi nhỏ hay lớn.
Option Button Control (Nút chọn): Đối tượng nút chọn cho phép người dùng chọn một trong những lựa chọn đưa ra. Như vậy, tại một thời điểm chỉ cĩ một trong các nút chọn được chọn.
Check Box (Hộp kiểm tra): Đối tượng hộp kiểm tra cho phép người dùng kiểm tra một hay nhiều điều kiện của chương trình ứng dụng. Như vậy, tại một thời điểm cĩ thể cĩ nhiều hộp kiểm tra được đánh dấu.
Label (Nhãn): Đối tượng nhãn cho phép người dùng gán nhãn một bộ phận nào đĩ của giao diện cho chương trình ứng dụng. Dùng các nhãn để hiển thị thơng tin khơng muốn người dùng thay đổi.
Text Box (Hộp soạn thảo): Đối tượng Text Box cho phép người dùng đưa các chuỗi kí tự vào Form. Thuộc tính quan trọng nhất của Text Box là thuộc tính Text cho biết nội dung của hộp Text Box.
Command Button (Nút lệnh): Đối tượng Command Button cho phép ta quyết định thực thi một cơng việc nào đĩ khi người dùng click hoạt nĩ.
Properties Windows (cửa sổ thuộc tính): Properties Windows là nơi chứa danh sách các thuộc tính của một đối tượng cụ thể. Các thuộc tính này cĩ thể thay đổi được để phù hợp với yêu cầu về giao diện của nĩ.
Các thuộc tính cơ bản của các đối tượng trong Visual Basic 6.0
- Name: Tên của đối tượng, mỗi đối tượng phải cĩ tên khác nhau. - Caption: hiển thị nội dung trên cửa sổ thiết kế.
- Tab Index: thứ tự chuyển đến khi nhấn phím. - Tab Font: chọn font hiển thị trên đối tượng. - Backcolor, Forecolor: chọn màu hiển thị.
- Value: giá trị của đối tượng (dùng cho Check box và Option để xác định trạng thái được chọn hay khơng chọn).
- Text: nội dung chứa trong một Text box.
- MultiLine: cho phép hiện nhiều dịng trên Text box hay khơng. - Enable: cho phép đối tượng hoạt động hay khơng.
- Duration: xác định thời gian Timer tràn (đơn vị là ms). Các sự kiện cơ bản của các đối tượng trên VB 6.0:
- Form_Load: xảy ra mỗi khi mở một Form.
- Click: Xảy ra khi thực hiện nhấn chuột trái trên đối tượng. - Timer: xảy ra mỗi khi Timer tràn.
2.3.2.3. Viết lệnh cho các đối tượng
Dùng các lệnh của Visual Basic để quy định cách ứng xử cho mỗi Form và cho mỗi Control. Chỉ viết Form như vậy tức là ta đã tạo nên một dự án bao gồm tất cả các yếu tố để tạo nên chương trình.
a. Các kiểu dữ liệu cơ bản trong Visual Basic
Cĩ rất nhiều kiểu dữ liệu như: Kiểu dữ liệu số, chuỗi và Boolean. Thực tế Visual Basic quản lý 14 kiểu dữ liệu chuẩn, ta cũng cĩ thể định nghĩa các kiểu biến riêng, các kiểu thường dùng để điều tác dữ liệu là:
Kiểu String: Các biến chuỗi [String] lưu giữ kí tự, một chuỗi cĩ thể cĩ một hay nhiều kí tự. Tất nhiên, biến lưu trữ được gọi là một biến chuỗi. Trên lý thuyết, các biến chuỗi cĩ thể lưu trữ khoảng hai tỷ ký tự. Trong thực tế, một máy cụ thể cĩ thể lưu trữ ít hơn, đĩ là do các hạn chế của bộ nhớ, các yêu cầu phần việc chung của Windows hoặc số dung lượng chung của biểu mẫu.
Kiếu Integer: Các biến số nguyên integer lưu giữ các giá trị số nguyên tương đối nhỏ (Giữa - 32768 và +32767). Số học và số nguyên tuy nhanh song cịn bị hạn chế trong phạm vi này. Dấu định danh được dùng là dấu “ % “ .
Kiếu Long integer: Các biến số nguyên dài Long integer lưu trữ các số nguyên (giữa -2,147,483 và +2,147,483,647). Dấu định danh được dùng là dấu “&”.
Kiếu Single Precition: Kiểu biến này lưu trữ con số ở mức xấp xỉ, chúng cĩ thể là phân số và chỉ cĩ thể đảm ảo độ chính xác ở mức 7 chữ số. Dấu định danh được dùng là dấu “!”.
Kiếu Double Precition: Kiểu dữ liệu chính đơi [Double - Precition] khi cần các con số cĩ tới 16 vị trí độ chính xác và cho phép cỡ hơn 300 chữ số. Các phép tính cũng là xấp xỉ cho kiểu biến này, chỉ cĩ thể căn cứ vào 16 chữ số đầu. Ngoài ra với các con số chính đơn, phép tính thực hiện tương đối chậm, chủ yếu được dùng trong hộp tính khoa học trong Visual Basic. Dấu định danh dùng trong biến chính đơn là dấu “ # ”. Phải dùng dấu # tại cuối con số thực tế, nhất là khi cĩ tương đối ít chữ số, bởi bằng khơng Visual Basic sẽ mặc nhận ý ta muốn dùng biến với độ chính xác hạn chế của một số chính đơn, chính xác hơn nếu ta viết: Adouble Precition Variable # = 12345#.
Kiểu Currency: Các biến kiểu này được thiết kế để tránh một số vấn đề trong khi chuyển từ phân số nhị phân thành các phân số thập phân khơng thể tạo 1/10 từ số tổ hợp (1/2, 1/4, 1/8, 1/16). Kiểu Currency cĩ thể cĩ 4 chữ số về bên phải của vị trí thập phân và lên đến 14 chữ số về bên trái của dấu chấm thập phân. Dấu định danh được dùng là dấu “ @ ”.
Kiểu Date: Kiểu dữ liệu ngày tháng là một phương cách tiện dụng để lưu trữ thơng tin cả ngày tháng lẫn giờ khắc cho bất kỳ thời điểm nào giữa nửa đêm ngày 1 tháng giêng năm 100 đến nửa đêm ngày 31 tháng 12 năm 1999. ta phải cho phép gán các biến ngày tháng bằng dấu #. Ví dụ: Ngày = # January, 1,2000#.
b. Các lệnh cơ bản trong Visual Basic 6.0 Lệnh IF – THEN – ELSE
Cấu trúc lệnh:
IF < điều kiện 1> THEN Cơng việc 1
ELSE IF < điều kiện 2 > THEN Cơng việc 2
… ELSE
Cơng việc END IF
Câu lệnh IF – THEN cĩ thể bao gồm nhiều phát biểu ELSE IF hoặc khơng cĩ phát biểu nào.
Lệnh SELECT CASE
Trong trường hợp cĩ nhiều lựa chọn cho một biểu thức điều kiện, ta cĩ thể thay bằng lệnh SELECT CASE.
Cấu trúc lệnh:
SELECT CASE < Biểu thức điều kiện > CASE < điều kiện 1 > < Lệnh> CASE < điều kiện 2 > < Lệnh> …
ELSE < điều kiện > < Lệnh > END SELECT
Lệnh FOR
FOR để tạo vịng lặp xác định trước số lần lặp. Cấu trúc lệnh:
FOR <Biến đếm > = <Giá trị đầu> TO <Giá trị cuối> STEP < Bước nhảy > <Lệnh>
Nếu bỏ qua phát biểu STEP thì xem như bước nhảy là 1 và cĩ thể yêu cầu kết thúc vịng lặp FOR bằng lệnh EXIT FOR.
Lệnh DO
Lệnh DO dùng để tạo vịng lặp vơ tận và chỉ kết thúc khi điều kiện kiểm tra thỏa mãn. Lệnh DO cĩ 2 dạng: kiểm tra điều kiện trước khi thực hiện vịng lặp và sau khi thực hiện vịng lặp.
Cấu trúc lệnh:
DO
< Lệnh >
LOOP WHILE < điều kiện >
Hay:
DO WHILE < điều kiện > < Lệnh >
LOOP
2.3.2.4. Giao tiếp cổng nối tiếp dùng Visual Basic 6.0 sử dụng MSComm32.ocx a. Mơ tả a. Mơ tả
Việc truyền thơng nối tiếp trên Windows được thực hiện thơng qua một ActiveX cĩ sẵn là Microsoft Comm Control. ActiveX này được lưu trữ trong file MSCOMM32.OCX.
ActiveX MSComm được bổ sung vào một Visual Basic Project thơng qua Menu Project > Components.
Hình 2.23 – Cách bổ sung ActiveX Microsoft Comm Control vào VB 6.0
Hình 2.24 – Biểu tượng và bảng thuộc tính của ActiveX Microsoft Comm Control
b. Các tham số và thuộc tính Settings
Xác định các tham số cho cổng nối tiếp. Cú pháp: MSComm1. Settings = ParamString MSComm1: tên đối tượng.
BBBB: tốc độ truyền dữ liệu (bps) trong đĩ các giá trị hợp lệ là: 110 2400 38400
300 9600 (mặc định) 56000 600 14400 188000 1200 19200 256000
Bảng 2.9 – Giá trị hợp lệ của tốc độ truyền dữ liệu
P: kiểm tra chẵn lẻ, với các giá trị:
Giá trị Mơ tả O Odd ( kiểm tra lẻ) E Even (Kiểm tra chẵn) M Mark (luơn bằng 1)
S Space (luơn bằng 0) N Khơng kiểm tra
Bảng 2.10 – Giá trị kiểm tra chẵn lẻ
D: số bit dữ liệu (4, 5, 6, 7 hay 8), mặc định là 8 bit. S: số bit Stop (1, 1.5, 2)
Ví dụ: MSComm1.Settings = “9600, N, 8, 1” sẽ xác định tốc độ truyền 9600bps, khơng kiểm tra parity với 1 bit Stop và 8 bit dữ liệu.
CommPort
Xác định số thứ tự của cổng truyền thơng. Cần phải thiết lập thơng số này trước khi mở cổng. Sẽ cĩ lỗi “error 68 (Device unavailable) nếu như khơng mở được cổng này.
Cú pháp: MSComm1.CommPort = PortNumber
PortNumber là giá trị nằm trong khoảng từ 1 đến 16, mặc định là 1. Ví dụ: MSComm1.CommPort = 1 xác định sử dụng COM 1
PortOpen
thuộc tính này để mở cổng nối tiếp thì phải sử dụng trước 2 thuộc tính Settings và CommPort.
Cú pháp: MSComm1.PortOpen = True/ False
Giá trị xác định là True sẽ thực hiện mở cổng và False để đĩng cổng, đồng thời xĩa của các bộ đệm truyền nhận.
Ví dụ: Mở cổng COM1 với tốc độ truyền 9600bps MSComm1.Settings = “9600,N,8,1”
MSComm1.CommPort = 1 MSComm1.PortOpen = True
Input
Nhận một chuỗi ký tự và xĩa khỏi bộ đệm. Nếu InputMode là ComInputModeText thì giá trị trả về sẽ là một xâu tức cĩ kiểu String, dữ liệu dạng text trong một biến kiểu Variant. Nếu InputMode = ComInputModeBinary thì thuộc tính này sẽ trả lại dữ liệu dạng nhị phân dưới dạng một mảng kiểu byte trong một biến Variant.
Cú pháp: InputString = MSComm1.Input
Thuộc tính này kết hợp với InputLen để xác định số ký tự đọc vào. Nếu InputLen = 0 thì sẽ đọc toàn bộ dữ liệu cĩ trong bộ đệm.
InBufferSize
Cú pháp: MSComm1.InBufferSize [=value]
Thiết lập hoặc trả lại kích thước của bộ đệm nhận, tính bằng byte. Mặc định là 1024 byte. Khơng được nhầm lẫn với đặc tính InBufferCount là số byte đang chờ trong bộ đệm nhận.
InBufferCount
Cú pháp: MSComm1.InBufferCount [=value]
Trả lại số ký tự đang cĩ trong bộ đệm nhận, cĩ thể xĩa bộ đệm nhận bằng cách đặt thuộc tính này bằng 0. Khơng nhầm với thuộc tính InBufferSize là tổng kích thước của bộ đệm nhận.
InputLen
Cú pháp: MSComm1.InputLen [=value]
Thiết lập hoặc trả lại số byte mỗi lần thuộc tính Input đọc trong bộ đệm nhận. Mặc định giá trị value = 0, tức là thuộc tính Input sẽ đọc hết nội dung của bộ đệm nhận khi thuộc tính này được gọi. Nếu số ký tự trong bộ đệm nhận khơng bằng InputLen thì thuộc tính Input sẽ trả lại ký tự rỗng “”. Vì thế cần phải chọn cách kiểm tra InBufferCount để chắc chắn số ký tự yêu cầu đã cĩ đủ trước khi dùng lệnh Input. Tính chất này rất là cĩ ích khi đọc dữ liệu một máy mà dữ liệu ra được định dạng bằng các khối cĩ kích thước cố định.
InputMode
Cú pháp: MSComm1.InputMode [=value]
Value = 0 hay ComInputModeText dữ liệu nhận được dạng văn bản kiểu ký tự theo chuẩn ANSI. Dữ liệu nhận được sẽ là một xâu. Value = 1 hay bằng ComInputModeBinary dùng nhận mọi kiểu dữ liệu như ký tự điều khiển nhúng, ký tự NULL,… Giá trị nhận được từ Input sẽ là một mảng kiểu Byte.
NullDiscard
Cú pháp: MSComm1.NullDiscard [=value]
Tính chất này quyết định ký tự trống cĩ được truyền từ cổng đến bộ đệm nhận hay khơng. Nếu value = True, ký tự này khơng được truyền. Value = False ký tự trống sẽ được truyền. Ký tự trống được định nghĩa theo chuẩn ASCII là ký tự 0 – chr$(0).
Output
Ghi dữ liệu vào bộ đệm truyền, cĩ thể truyền kiểu text hoặc kiểu nhị phân. Nếu truyền bằng kiểu text thì cho một biến Variant kiểu String, nếu truyền kiểu nhị phân thì cho Output = Variant bằng một mảng kiểu Byte.
OutBuferCount: trả lại số ký tự trong bộ đệm truyền.