3.4.1 Lưu đồ chương trình chính:
START
KHỞI TẠO CÁC GIÁ TRỊ BAN ĐẦU TIMER, INTERRUPT…
TIMER TRÀN SAU 1 S NẾU CĨ NGẮT THÌ NHẢY ĐẾN NGẮT NGẮT NGỒI NGẮT TIMER1 TÍNH CƠNG SUẤT P, LƯU VÀO Ơ NHỚ, HIÊN
THỊ
LẤY MẪU 1S TRUYỀN VỀ MÁY
ĐỒ ÁN TỐT NGHIỆP GVHD:Th.S TRẦN VIẾT THẮNG
HỆ THỐNG ĐO ĐỒ THỊ PHỤ TẢI
CƠNG SUẤT 3KVA Trang39 SVYH: PHAN KHÁNH HỒNG 3.4.2 Lưu đồ chương trình ngắt ngồi (tính ):
START
NẠP GIÁ TRỊ CHO BIẾN ĐẾM, CHO PHÉP NGẮT. ĐẾM THỜI GIAN TỒN
TẠI XUNG
PHI =0 N
Y
TÍNH , LƯU VÀO BIẾN
3.4.3 Lưu đồ chương trình ngắt timer1(đọc ADC): START Cnt =0 Tăng Cnt Cnt =100; N Y
SET ADC KÊNH 1 (ÁP), SET ADC KÊNH 2 (DỊNG)
ĐỌC ADC, ĐỔI SANG MÃ LED 7 ĐOẠN
ĐỒ ÁN TỐT NGHIỆP GVHD:Th.S TRẦN VIẾT THẮNG
HỆ THỐNG ĐO ĐỒ THỊ PHỤ TẢI
CƠNG SUẤT 3KVA Trang41 SVYH: PHAN KHÁNH HỒNG 3.4.4 Lưu đồ chương trình con đổi sang mã 7 đoạn:
3.4.5 Lưu đồ chương trình con quét led:
START
END
ĐỒI U, I, P SANG 7 ĐOẠN
START
END TẮT CÁC LED
XUẤT DATA, CHO PHEP MỞ TRANSISTOR
Chương 4:
GIAO DIỆN CHƯƠNG TRÌNH ĐỒ THỊ PHỤ TẢI TRÊN WINDOWS
4.1 Tổng Quan Về Visual Basic :
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 ma.
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.
ĐỒ ÁN TỐT NGHIỆP GVHD:Th.S TRẦN VIẾT THẮNG
HỆ THỐNG ĐO ĐỒ THỊ PHỤ TẢI
CƠNG SUẤT 3KVA Trang 43 SVTH: PHAN KHÁNH HỒNG
4.2 Truyền Thơng Nối Tiếp Dù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 4.0 của Visual Basic ,điều khiển truyền thơng đã được hồ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 .
4.2.1 Điều khiển truyền thơ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 số ứng dụng cần việc chuyển nhận dữ liệu qua cổng nối tiếp .
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ổ sau 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 thơ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.
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 .
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 thơng số cho cổ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 ,…
Bảng 4.1 Các thuộc tính
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”
ĐỒ ÁN TỐT NGHIỆP GVHD:Th.S TRẦN VIẾT THẮNG
HỆ THỐNG ĐO ĐỒ THỊ PHỤ TẢI
CƠNG SUẤT 3KVA Trang 45 SVTH: PHAN KHÁNH HỒNG
‘ra lệnh cho điều khiển Mscomm1 đọc hết bộ đệm nhận khi dùng ‘lệ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 End Sub
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 truyền thơ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 4.2 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).
Kiểu dữ liệu : Integer Thuộc tính PortOpen :
Thuộc tính PortOpen đặt và trả lại trạng thái của cổng truyền thơng (đĩng hoặc mở). Thuộc tính này khơng cĩ trong thời gian thiết kế chương trình. Cú pháp của câu lệnh là :
[form.] MSComm.PortOpen [={True/ False}]
Thơng số thiết lập là True để mở cổng, cịn False để đĩng (giải phĩng) cổng và xĩa nội dung các bộ đệm nhận và truyền MSComm tự động đĩng cổng nối tiếp khi ứng dụng kết thúc (Terminated).
Trước khi dùng thuộc tính này (PortOpen), phải đặt thơng số cổng bằng thuộc tính CommPort với một giá trị hợp lệ, nếu ta quên đi thuộc tính này lỗi 68 sẽ phát sinh.
Thí dụ sau đây mở cổng truyền thơng số 1 (COM1) với tốc độ baud là 4800 baud, khơng kiểm tra tính chẵn lẻ, 8 bit dữ liệu, 1 bit stop:
Thông số tốc độ baud
110 2400 19200 57600 300 4800 28800 115200 600 9600 38400 128000 1200 14400 56000 256000
ĐỒ ÁN TỐT NGHIỆP GVHD:Th.S TRẦN VIẾT THẮNG
HỆ THỐNG ĐO ĐỒ THỊ PHỤ TẢI
CƠNG SUẤT 3KVA Trang 47 SVTH: PHAN KHÁNH HỒNG
MSComm1.Settings = “4800 ,N ,8 ,1” MSComm1.CommPort=1
MSComm1.PortOpen=True Kiểu dữ liệu : Boolean.
Các thuộc tính phục vụ việc nhập dữ liệu (Input ,InBufferCount và InBufferSize)
Thuộc tính Input :
Thuộc tính Input trả lại và xĩa bỏ một chuỗi ký tự từ bộ đệm nhận. Thuộc tính này khơng sẵn cĩ trong khi thiết kế và là chỉ đọc (Read_only) khi chạy chương trình. Cú pháp của câu lệnh là :
[form.] MSComm.Input
Thuộc tính InputLen quy định số ký tự được đọc bởi câu lệnh Input. Để xác định số các ký tự trong bộ đệm, thuộc tính InBufferCount được kiểm tra. Đặt InputLen là 0 để đọc tồn bộ nội dung của bộ đệm nhận.
Thuộc tính InputMode quyết định kiểu dữ liệu thu về qua thuộc tính Input. Nếu thuộc tính này được set là CommInputModeText thì thuộc tính Input sẽ trả về dữ liệu kiểu text vào 1 biến Variant. Nếu InputMode là comInputModeBinary thì Input sẽ trả về dữ liệu nhị phân trong một mảng các byte vào một biến Variant .
Thí dụ dưới đây chỉ ra cách đọc dữ liệu từ bộ đệm nhận.
MSComm1.InputLen= 0 ‘đọc tồn bộ nội dung của bộ đệm ‘nhận ‘kiểm tra cĩ dữ liệu hay khơng
If MSComm1.InbufferCount then ‘đọc dữ liệu
InString$ = MSComm1.Input End if
Kiểu dữ liệu Variant.
Thuộc tính InBufferSize:
Thuộc tính InBufferSize đặt và trả lại kích thước bộ đệm nhận, tính theo số byte. Cú pháp của câu lệnh là :
Thuộc tính này cĩ liên quan đến kích thước bộ đệm nhận. Giá trị mặc định là 1024 bytes. Kích thước của bộ đệm phải được đặt sao cho cĩ thể cất giữ được số lớn nhất của các ký tự sẽ được nhận trước khi chương trình ứng dụng cĩ thể đọc chúng từ bộ đệm, trừ khi ta làm việc ở chế độ bắt tay (handshaking).
Kiểu dữ liệu của thuộc tính này là Integer.
Thuộc tính InBufferCount:
Thuộc tính InBufferCount trả lại số ký tự trong bộ đệm nhận. Nĩ cũng cĩ thể được sử dụng để xĩa bộ đệm bằng cách đặt số của các ký tự bằng 0. Thuộc tính này khơng cĩ trong thời gian thiết kế chương trình (design time). Cú pháp câu lệnh như sau:
[form.]MSComm.InBufferCount [=count%]
Ta cĩ thể xĩa bộ đệm nhận bằng cách đặt thuộc tính InBufferCount = 0. Kiểu dữ liệu của thuộc tính này là Integer.
Các thuộc tính phục vụ việc xuất dữ liệu (Output ,OutBufferCount và OutBufferSize )
Thuộc tính Output:
Thuộc tính Output sẽ viết một chuỗi ký tự vào bộ đệm truyền, thuộc tính này khơng cĩ trong thời gian thiết kế chương trình. Cú pháp câu lệnh là :
[form.]MSComm.Output [=outstring$]
Thí dụ sau đây cho biết cách gửi các ký tự mà người dùng gõ vào từ bàn phím: Private Sub Form_load (KeyAscii as Integer)
MSComm1.Outport =Chr$(KeyAscii) End Sub
Thuộc tính Output cĩ thể xuất dữ liệu dạng text hay dạng binary. Để gửi dữ liệu text, ta phải khai báo một biến kiểu Variant và cho nĩ chứa chuỗi muốn gửi, sau đĩ gán biến này cho thuộc tính Output. Để gửi dữ liệu dạng binary, ta phải truyền một biến Variant chứa một mảng các byte cho thuộc tính Output .
Thơng thường, nếu ta gửi một chuỗi theo chuẩn ANSI tới ứng dụng, ta cĩ thể gửi dữ liệu dạng text. Nếu ta cĩ dữ liệu mà chứa các ký tự điều khiển được nhúng (embedded) như các ký tự NULL,… thì ta sẽ truyền dữ liệu theo dạng binary.
Kiểu dữ liệu của thuộc tính này là Variant.
Thuộc tính OutBufferSize :
Thuộc tính OutBufferSize đặt và trả lại kích thước của các ký tự trong bộ đệm truyền. Cú pháp của câu lệnh là :
ĐỒ ÁN TỐT NGHIỆP GVHD:Th.S TRẦN VIẾT THẮNG
HỆ THỐNG ĐO ĐỒ THỊ PHỤ TẢI
CƠNG SUẤT 3KVA Trang 49 SVTH: PHAN KHÁNH HỒNG
[form.] MSComm.OutBufferSize [=numbyte%]
Giá trị mặc định của thuộc tính này là 512 bytes. Khơng nên nhầm lẫn giữa hai thuộc tính OutBufferCount và OutBufferSize với nhau. Thuộc tính OutBufferCount nĩi lên số bytes hiện đang cĩ trong bộ đệm truyền, cịn OutBufferSize quy định tổng kích thước của bộ đệm truyền. Khơng nên để kích thước bộ đệm truyền quá lớn. Tuy nhiên nếu để quá nhỏ thì sẽ xảy ra hiện tượng tràn dữ liệu (trừ khi làm việc ở chế độ bắt tay). Thơng thường nên bắt đầu với kích thước bộ đệm truyền là 512 bytes. Nếu lỗi tràn xảy ra thì phải tăng kích thước bộ đệm cho thích hợp với ứng dụng hiện tại.
Kiểu dữ liệu của thuộc tính này Integer.
Thuộc tính OutBufferCount :
Thuộc tính OutBufferCount trả lại số ký tự trong bộ đệm truyền. Nhờ thuộc tính này ta cĩ thể xĩa nội dung bộ đệm truyền bằng cách đặt giá trị của OutBufferCount=0. Cú pháp của câu lệnh là :
[form.]MSComm.OutBufferCount [=value%] Kiểu dữ liệu của thuộc tính này là Integer.
Thuộc tính RTSEnable :
Thuộc tính này xác định xem liệu cĩ cho phép đường RTS hay khơng. Thơng thường tín hiệu RTS (Request To Send) được gửi từ máy tính tới MODEM để yêu cầu sự cho phép truyền dữ liệu. Cú pháp câu lệnh như sau:
[form.]Mscomm1.RTSEnable [=(True | False)]
Ta xác lập giá trị này là True để đặt đường RTS lên mức cao nếu cổng đang mở và xuống mức thấp nếu cổng đang đĩng. Đường RTS được sử dụng khi cĩ bắt tay phần cứng sử dụng RTS/CTS. Thuộc tính RTSEnable cho phép hỏi vịng đường RTS nếu ta cần xác định trạng thái của nĩ.
Kiểu dữ liệu của thuộc tính này : Boolean.
Thuộc tính CommEvent :
Thuộc tính này trả lại hầu hết sự kiện hoặc lỗi truyền thơng gần nhất. Thuộc tính