2.5.3.2 .Điều khiển vịng kín
2.7. Ngôn ngữ lập trình Visual Basic 6.0
2.7.1.3. Các lệnh cơ bản trong Visual Basic 6
Cấu trúc lệnh:
IF Điều_kiện_1 THEN Công_việc_1
ELSEIF Điều_kiện_2 THEN Công_việc_2
GVHD: ThS. Huỳnh Minh Ngọc 37 SVTH: Đặng Ngọc Hải
ELSEIF Điều_kiện_3 THEN Công_việc_3
… ELSE
Công_việc END IF
Câu lệnh IF - THEN có thể bao gồm nhiều phát biểu ELSEIF hoặc khơng có phát biểu nàọ
Ví dụ:
IF a > 10 THEN
MsgBox “Lon hon 10” ELSEIF a > 0 THEN
MsgBox “Lon hon 0 va nho hon 10” ELSE
MsgBox “Nho hon 0” END IF
2.7.1.3.2. 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 CASE Điều_kiện_3 Lệnh … ELSE Điều_kiện Lệnh END SELECT 2.7.1.3.3 Lệnh FOR
GVHD: ThS. Huỳnh Minh Ngọc 38 SVTH: Đặng Ngọc Hải
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 NEXT Biến_đếm Ví dụ: FOR i = 1 TO 100 STEP 2 Result = Result + 1 NEXT i
Nếu bỏ qua phát biểu STEP thì xem như bước nhảy là 1 và có thể u cầu kết thúc vịng lặp FOR bằng lệnh EXIT FOR.
2.7.1.3.4 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 thoả 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.7.2 Lập trình giao tiếp cổng nối tiếp dùng Visual Basic 6.0 sử dụng Mscomm32.ocx 2.7.2.1 Mô tả 2.7.2.1 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
GVHD: ThS. Huỳnh Minh Ngọc 39 SVTH: Đặng Ngọc Hải
Hình 1.46 – Cách bổ xung ActiveX Microsoft Comm Control vào VB6
Hình 1.47 – Biểu tượng và bảng thuộc tính của ActiveX Microsoft Comm Control
2.7.2.2 Các tham số và thuộc tính 2.7.2.2.1 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
GVHD: ThS. Huỳnh Minh Ngọc 40 SVTH: Đặng Ngọc Hải
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
P: kiểm tra chẵn lẻ, với các giá trị
Giá trị Mô tả
O Ođ (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
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ệụ
2.7.2.2.2 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àỵ
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 COM1
2.7.2.2.3 PortOpen
Đặt trạng thái hay kiểm tra trạng thái đóng / mở của cổng nối tiếp. Nếu dùng 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ố nội dung của các bộ đệm truyền, nhận.
Ví dụ: Mở cổng COM1 với tốc độ truyền 9600 bps
MSComm1.Settings = "9600,N,8,1" MSComm1.CommPort = 1
GVHD: ThS. Huỳnh Minh Ngọc 41 SVTH: Đặng Ngọc Hải
2.7.2.2.4 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àọ Nếu InputLen = 0 thì sẽ đọc tồn bộ dữ liệu có trong bộ đệm.
2.7.2.2.5 InBuferSize
Cú pháp: MSComm1. InBuferSize [ = value ]
Thiết lập hoặc trả lại kích thước của bộ đệm nhận, tính = bytẹ Mặc định là 1024 bytẹ Không được nhầm lẫn với đặc tính InBufferCount là số byte đang chờ trong bộ đệm nhận.
2.7.2.2.6 InBufferCout
Cú pháp: MSComm1. InBufferCout [ = value ]
Trả lại số kí tự đang có trong bộ đệm nhận Bạn có thể xố bộ đệm nhận bằng cách đặt thuộc tính này = 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.
2.7.2.2.7 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ọị Nếu số kí tự trong bộ đệm nhận khơ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ự 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.
2.7.2.2.8 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 ANSỊ Dữ liệu nhận được sẽ là một sâụ Value=1 hay = 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 Bytẹ
GVHD: ThS. Huỳnh Minh Ngọc 42 SVTH: Đặng Ngọc Hải
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).
2.7.2.2.10 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 cho Output= variant = một mảng kiểu Bytẹ
2.7.2.2.11 OutBufferCount: trả lại số kí tự trong bộ đệm truyền. 2.7.2.2.12 OutBuferSize: giống như InBuferSize, mặc định là 512. 2.7.2.2.13 RthresHold
Cú pháp: MSComm1.Rthreshold [ = value ]
[Value] kiểu số nguyên. Thiết lập số kí tự nhận được trước khi gây lên sự kiện comEvReceivẹ Mặc định = 0 tức là khơng có sự kiện OnComm khi nhận được dữ liệụ Thiết lập = 1 tức là sự kiện OnComm xảy ra khi bất kì kí tự nào được chuyển đến bộ đệm nhận.
2.7.2.2.14 SThreshold
Thiết lập và trả lại số kí tự nhỏ nhất được cho phép trong bộ đệm gửi để xảy ra sự kiện OnComm = comEvSend . Theo mặc định giá trị này = 0 tức là khi truyền sẽ không gây ra sự kiện OnComm. Nếu thiết lập thơng số này =1 thì sự kiện OnComm xảy ra khi bộ đệm truyền rỗng. Sự kiện OnComm = comEvSend chỉ xảy ra khi mà số kí tự trong bộ đệm truyền nhỏ hơn hoặc = Sthreshold. Nếu số kí tự trong bộ đệm này ln lớn hơn
Sthreshold thì sự kiện này khơng thể xảy rạ 2.7.2.2.15 Sƣ kiện OnComm
Sự kiện OnComm được phát sinh vào bất cứ khi nào giá trị của đặc tính CommEvent thay đổị
Sự kiện : Private Sub MsComm_OnComm()
Đặc tính CommEvent chứa mã số của lỗi hay sự kiện phát sinh bởi sự kiện OnComm. Nên đặt các đặc tính Rthreshold hoặc Streshold bằng 0 để vơ hiệu bẫy sự kiện Receive and Send.
CommEvent trả lại phần lớn sự kiện giao tiếp hoặc có lỗị CommEvent xảy ra khi có
lỗi hoặc khi xảy ra sự kiện nào đó. Sau đây là một số hằng số lỗi:
Sự kiện Giá trị Miêu tả sự kiện
GVHD: ThS. Huỳnh Minh Ngọc 43 SVTH: Đặng Ngọc Hải
comEventFrame 1004 Lỗi hệ thống. Phần cứng phát hiện ra một lỗi hệ thống comEventOverrun 1006
Xảy ra khi cổng tự tràn( Overrun). Một kí tự khơng được
đọc từ phần cứng trước khi kí tự tiếp theo tới và do đó kí tự
này bị mất.
comEventRxOver 1008 Xảy ra khi bộ đệm nhận bị tràn. Khơng có đủ chỗ cho dữ liệu trong bộ đệm nhận.
comEventRxParit y
1009 Lỗi Paritỵ Phần cứng phát hiện ra một lỗi Paritỵ comEventTxFull 1010 xảy ra khi bộ đệm truyền bị đầỵ Bộ đệm truyền bị đầy
trong khi ghi dữ liệu lớn vào bộ đệm
comEventDCB 1011 Một lỗi không mong muốn khi đang khôi phục lại khối điều khiển thiết bị( DCB – Device Control Block) cho cổng
Một số sự kiện :
Sự kiện Giá trị Miêu tả sự kiện
comEvSend 1 Xảy ra khi số kí tự trong bộ đệm truyền nhỏ hơn giá trị
SthresHold.
comEvReceiv
e 2
Xảy ra khi bộ đệm nhận được số kí tự bằng giá trị RthresHold. Sự kiện này được tạo ra liên tục cho tới khi bạn dùng thuộc tính Input để lấy hết dữ liệu từ trong bộ đệm nhận.
RcomEvCTS 3 Xảy ra khi có thay đổi trong đường CTS( Clear To
Send)
comEvDSR 4
Xảy ra khi thay đổi trong đường DSR( Data Set Ready). Sự kiện này chỉ xảy ra khi đường DSR thay đổi từ 1 -> 0.
comEvCD 5 Xảy ra khi có thay đổi trong đường CD( Carrier Detect)
comEvRing 6 Phát hiện chuông (Ring).Một số UART không hỗ trợ sự
kiện nàỵ
comEvEOF 7 Xảy ra khi nhận được kí tự kết thúc file ( kí tự 26 trong
bảng mã ASCII)
2.8. Giới thiệu về ActiveX Teechart 2.8.1 Giới thiệu 2.8.1 Giới thiệu
Để sử dụng Teechart ta copy teechart7.ocx vào C:/Windows/system32, dùng Visual Basic 6.0 mở Teechart thông qua menu Project > Components
GVHD: ThS. Huỳnh Minh Ngọc 44 SVTH: Đặng Ngọc Hải
Hình 1.48 – ActiveX Teechart, biểu tượng và giao diện
Để thay đổi giao diện, thiết lập thơng số ta kích chuột phải vào giao diện trên Form và chọn Edit. Cửa sổ Editing hiện rạ
Hình 1.49 – Cửa sổ Editing và các kiểu đị thị
Tại TAB Chart/Series, ta chọn Ađ để thêm đồ thị cần hiển thị và chọn kiểu đồ thị. Ở đây hổ trợ nhiều kiểu đồ thị khác nhaụ Bỏ Check 3D để được đồ thị 2D. Kết quả sau khi chọn kiểu đồ thị Point 2D
Hình 1.50 – Đồ thị Point 2D
Ngồi ra, trong cửa sổ Editing ta có thể cài đặt các thơng số của đồ thi như Asix (trục đồ thị), Little (Nhãn, tiêu đề)…
GVHD: ThS. Huỳnh Minh Ngọc 45 SVTH: Đặng Ngọc Hải 2.8.2 Các lệnh cơ bản 2.8.2.1 Lệnh xóa đồ thị With TChart1.Series(0) .Clear End With
Tchart1 là tên của giao diện đồ thị
Series(0) là thứ tự của đồ thị. Ví dụ nếu muốn vẽ 2 đồ thị trên 1 giao diện thì thứ tự của đồ thị lần lược là Series(0), Series(1).
Clear là lệnh xóạ
2.8.2.2 Lệnh vẽ một điểm lên đồ thị With TChart1.Series(0) With TChart1.Series(0)
.AđXY timer * 10, vtecd, "", vbRed End With
AđXY là lệnh vẽ 1 điểm lên đồ thị có trục X là (timer*10) và trục Y là vtecd, đồ thị có màu vbRed (màu chuẩn của Visual Basic 6).
Hoặc lệnh vẽ đồ thị đơn giãn hơn là:
With TChart1.Series(0) .Ađ vtecd, "", vbRed End With
Ađ là lệnh vẽ 1 điểm lên đồ thị có trục Y là vtecd, trục X là điểm kế tiếp hướng tăng (giả sử trước đó đã vẽ một điểm nào đó, nếu chưa vẽ điểm nào thì X bắt đầu là 0).
GVHD: ThS. Huỳnh Minh Ngọc 46 SVTH: Đặng Ngọc Hải
CHƢƠNG 3
THIẾT KẾ VÀ THI CÔNG
3.1. Nhiệm vụ và hƣớng giải quyết 3.1.1. Nhiệm vụ 3.1.1. Nhiệm vụ
Nhiệm vụ của đồ án này là thiết kế một hệ thống thu thập dữ liệu nhiều kênh, đối tượng thu thập và giám sát là nhiệt độ lò ba lò nhiệt. Yêu cầu là chúng ta phải giám sát và điều khiển nhiệt độ ba lị nhiệt ln duy trì ở một nhiệt độ như ta mong muốn. Sử dụng vi xử lý dsPic30F4013 làm bộ điều khiển trung gian để giao tiếp máy tính.
GVHD: ThS. Huỳnh Minh Ngọc 47 SVTH: Đặng Ngọc Hải
3.1.2. Hƣớng giải quyết
Sử dụng cảm biến nhiệt độ: LM35.
Sử dụng bộ chuyển đổi A/D và D/Ạ
Sử dụng phương pháp điều khiển ON/OFF và PID.
Thiết kế và lập trình giao tiếp giữa vi xử lý dsPic30F4013 với máy vi tính và lị nhiệt.
Sử dụng ngôn ngữ visual basic để tạo giao diện và giao tiếp với vi xử lý dsPic30F4013 qua RS232.
Viết chương trình điều khiển bằng ngôn ngữ C trên phần mềm CCS.
3.2. Thiết kế phần cứng 3.2.1. Sơ đồ khối 3.2.1. Sơ đồ khối Lị nhiệt Máy tính Cảm biến nhiệt độ
GVHD: ThS. Huỳnh Minh Ngọc 48 SVTH: Đặng Ngọc Hải
Hình 3.1: Sơ đồ khối điều khiển
Vi xử lý Mạch công suất
GVHD: ThS. Huỳnh Minh Ngọc 49 SVTH: Đặng Ngọc Hải
Hình 3.2: Sơ đồ khối chi tiết hệ thống điều khiển Lò 1: Điều khiển PID
Lò 2: Điều khiển ON/OFF Lò 3: Điều khiển ON/OFF
GVHD: ThS. Huỳnh Minh Ngọc 50 SVTH: Đặng Ngọc Hải
3.2.2 Giải thích nguyên lý từng khối Máy tính: Máy tính:
Dùng ngơn ngữ lập trình Visual Basic 6.0 làm phương tiện giao tiếp. Nhiệm vụ của Visual Basic 6 là:
Tạo giao diện người dùng để giao tiếp với người sử dụng. Trên đó cho phép thay đổi giá trị nhiệt độ yêu cầu, thay đổi bộ thông số PID, vẽ đồ thị biểu diễn đáp ứng của hệ thống.
Thiết lập giao tiếp với khối Vi điều khiển qua cổng nối tiếp RS – 232. Lấy giá trị đo nhiệt đo thực tế do khối vi điều khiển truyền về để xử lý.
Từ giá trị đo nhiệt độ thực tế, gửi lệnh xuống vi xử lý để thực hiện việc điều khiển đóng/mở (on/off) lị, hay thực hiện thuật toán PID xuất giá trị độ rộng xung về khối Vi xử lý để điều khiển.
Vi điều khiển :
Dùng ngơn ngữ lập trình hợp ngữ 8051 để lập trình cho Vi điều khiển dsPic30f4013. Nhiệm vụ của khối vi điều khiển là:
Thiết lập giao tiếp với máy tính qua cổng giao tiếp nối tiếp.
Thực hiện việc lấy nhiệt độ thực tế của lò nhiệt từ bộ chuyển đổi ADC và truyền giá trị này về cho khối máy tính để xử lý.
Xuất giá trị ra bộ chuyển đổi DAC để điều khiển việc đóng/mở lị nhiệt.
Thực hiện thuật tốn điều chế độ rộng xung (PWM), xuất xung PWM và xung điều khiển nhiệt độ của lị nhiệt cho khối cơng suất. Giá trị độ rộng xung nhận được từ khối máy tính.
Mạch cơng suất: nhiệm vụ của khối này là:
Khuếch đại cơng suất từ tín hiệu điều khiển do khối vi điều khiển truyền tới để điều khiển lò nhiệt.
Max 232: Max-232 dùng để giao tiếp giữa máy tính và vi điều khiển
GVHD: ThS. Huỳnh Minh Ngọc 51 SVTH: Đặng Ngọc Hải
3.2.3. Đối tƣợng lò nhiệt thực tế
Hàm truyền của lò nhiệt được xác định bằng phương pháp thực nghiệm. Cấp nhiệt tối đa cho lị( cơng suất vào P=100%), nhiệt độ lị tăng dần.Sau thời gian nhiệt độ lị đạt giá trị bão hịạ Do đặc tính chính xác của lò nhiệt khá phức tạp nên ta xấp xỉ bằng đáp ứng gần đúng.
Ta xác định hàm truyền gần đúng của lò nhiệt dùng định nghĩa sau: ( ) ( ) ( )
C s G s
R s
Tín hiệu vào là hàm nấc đơn vị (cơng suất=100%) : R s( ) 1
S (1) Tín hiệu ra gần đúng chính là hàm: C s( ) f t T( 1) Trong đó: / 2 ( ) (1 t T ) f t K e
Thực hiện biến đổi Laplace ta được:
2 ( ) (1 ) K F s s T s ạĐặc tính chính xác của lị nhiệt b.Đặc tính gần chính xác của lị nhiệt Hình 3.3: Đặc tính của lị nhiệt
GVHD: ThS. Huỳnh Minh Ngọc 52 SVTH: Đặng Ngọc Hải Áp dụng định lý chậm trễ ta được: 1 2 ( ) (1 ) T s Ke C s s T s (2)
Từ (1) và (2) suy ra hàm truyền của lò nhiệt là:
1 2 ( ) 1 T s Ke G s T s
Cơng suất lị nhiệt thực tế:
2 2 220 . 1210 ( ) 1.21( ) 40 U P U I W KW R
Với: U: hiệu điện thế cung cấp (220V) R:là điện trở dây may so (40 Ω) Nhiệt độ đo tối đa là 2000 C
3.3 Thiết kế chi tiết 3.3.1 Khối nguồn 3.3.1 Khối nguồn
Hình 3.4 : khối nguồn
IC 7805 và thành điện áp ngõ ra 5V cung cấp cho vi điều khiển và khối giao tiếp với máy tính.
GVHD: ThS. Huỳnh Minh Ngọc 53 SVTH: Đặng Ngọc Hải
Các tụ lọc trước và sau IC ổn áp nhằm lọc các tần số cao do các mạch điều khiển