BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ TP. HCM
---------------------------
NGUYỄN ANH TUẤN
XÂY DỰNG MÔ HÌNH HỆ THỐNG HVAC ĐIỀU KHIỂN BẰNG BMS
LUẬN VĂN THẠC SĨ
Chuyên ngành : Kỹ Thuật Điện Mã số ngành: 60 52 02 02
TP. HỒ CHÍ MINH, tháng 02 năm 2013
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ TP. HCM ---------------------------
NGUYỄN ANH TUẤN
XÂY DỰNG MÔ HÌNH HỆ THỐNG HVAC ĐIỀU KHIỂN BẰNG BMS
LUẬN VĂN THẠC SĨ
Chuyên ngành : Kỹ Thuật Điện Mã số ngành: 60 52 02 02
HƯỚNG DẪN KHOA HỌC: PGS.TS. Nguyễn Hoàng Việt
TP. HỒ CHÍ MINH, tháng 02 năm 2013
CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ TP. HCM
Cán bộ hướng dẫn khoa học : PGS.TS. NGUYỄN HOÀNG VIỆT
(Ghi rõ họ, tên, học hàm, học vị và chữ ký)
Luận văn Thạc sĩ được bảo vệ tại Trường Đại học Kỹ thuật Công nghệ
TP. HCM ngày 02 tháng 02 năm 2013
Thành phần Hội đồng đánh giá Luận văn Thạc sĩ gồm:
(Ghi rõ họ, tên, học hàm, học vị của Hội đồng chấm bảo vệ Luận văn Thạc sĩ)
1. TS. Ngô Cao Cường Chủ tịch hội đồng
2. PGS.TS. Lê Kim Hùng Phản biện 1
3. TS. Trần Vinh Tịnh Phản biện 2
4. PGS.TS. Phan Thị Thanh Bình Ủy viên
5. TS. Huỳnh Châu Duy Ủy viên – thư ký
Xác nhận của Chủ tịch Hội đồng đánh giá Luận sau khi Luận văn đã được
sửa chữa (nếu có).
Chủ tịch Hội đồng đánh giá LV
TS. Ngô Cao Cường
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐH KỸ THUẬT CÔNG NGHỆ TP. HCM PHÒNG QLKH - ĐTSĐH
Độc lập - Tự do - Hạnh phúc
TP. HCM, ngày 29 tháng 12 năm 2012
NHIỆM VỤ LUẬN VĂN THẠC SĨ
Họ tên học viên: NGUYỄN ANH TUẤN Giới tính: Nam
Ngày, tháng, năm sinh: 08/05/1978 Nơi sinh: Vĩnh Long
MSHV: 1181031065 Chuyên ngành: Kỹ Thuật Điện
I- TÊN ĐỀ TÀI:
XÂY DỰNG MÔ HÌNH HỆ THỐNG HVAC ĐIỀU KHIỂN BẰNG BMS
II- NHIỆM VỤ VÀ NỘI DUNG:
- Nghiên cứu về hệ thống điều khiển BMS trong tòa nhà (Building Management
System)
- Nghiên cứu về hệ thống điều hòa thông gió (HVAC)
- Nghiên cứu về lập trình MikroC cho vi điều khiển pic 18f4550
- Xây dựng mô hình hệ thống HVAC điều khiển bằng MBS
III- NGÀY GIAO NHIỆM VỤ: 21/06/2012
IV- NGÀY HOÀN THÀNH NHIỆM VỤ: 29/12/2012
V- CÁN BỘ HƯỚNG DẪN: PGS.TS. NGUYỄN HOÀNG VIỆT
CÁN BỘ HƯỚNG DẪN KHOA QUẢN LÝ CHUYÊN NGÀNH
(Họ tên và chữ ký) (Họ tên và chữ ký)
Nguyễn Hoàng Việt
i
LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi. Các số liệu, kết
quả nêu trong Luận văn là trung thực và chưa từng được ai công bố trong bất kỳ
công trình nào khác.
Tôi xin cam đoan rằng mọi sự giúp đỡ cho việc thực hiện Luận văn này đã
được cảm ơn và các thông tin trích dẫn trong Luận văn đã được chỉ rõ nguồn gốc.
Học viên thực hiện Luận văn
Nguyễn Anh Tuấn
ii
LỜI CÁM ƠN
Trong quá trình thực hiện luận văn, tuy gặp nhiều khó khăn, nhưng nhờ sự hướng dẫn tận tình của PGS.TS. Nguyễn Hoàng Việt, tôi đã hoàn thành luận văn đúng thời gian quy định. Để hoàn thành cuốn luận văn này, tôi xin bày tỏa lòng biết ơn sâu sắc đối với PGS.TS. Nguyễn Hoàng Việt, thầy là người tận tâm hết lòng vì học viên,
hướng dẫn nhiệt tình và cung cấp cho tôi những tài liệu vô cùng quý giá trong thời gian
thực hiện luận văn.
Xin chân thành cám ơn tập thể thầy cô giáo trường đại học Kỹ Thuật Công Nghệ TP. Hồ Chí Minh, đã giảng dạy và truyền đạt kiến thức cho tôi, giúp tôi học tập và nghiện cứu trong quá trình học cao học tại trường.
Xin chân thành cảm ơn Ban giám hiệu, Phòng quản lý khoa học - Đào tạo sau đại học trường đại học Kỹ Thuật Công Nghệ TP. Hồ Chí Minh, đã giúp đỡ, tạo điều kiện thuận lợi cho tôi trong quá trình học tập và làm luận văn cao học tại trường .
Xin chân thành cảm ơn các anh, chị đồng nghiệp đã hỗ trợ, giúp đỡ cho tôi trong
quá trình thực hiện luận văn.
Xin chân thành cảm ơn các anh, chị học viên cao học ngành “Kỹ thuật điện” đã
đóng góp ý kiến cho tôi trong quá trình thực hiện luận văn này.
TP. Hồ Chí Minh, tháng 12 năm 2012
Người Thực hiện
Nguyễn Anh Tuấn
iii
TÓM TẮT LUẬN VĂN
Hiện nay, các hệ thống điều hoà không khí HVAC ( Heating Ventilating and
Air Conditioning) và BMS (Building Management System) được sử dụng phổ biến trong các tòa nhà cao tầng. Hệ thống trao đổi nhiệt trung tâm là các WCH (Water
Chiller) và các FCU( Fan Coil Unit), AHU(Air Handling Unit). Trong luận văn này,
tôi đi sâu vào nghiên cứu xây dựng mô hình hệ thống HVAC làm lạnh bằng nư ớc, các
FCU ( Fan Coil Unit) và BMS (Building Management System) điều khiển giám sát
thiết bị từ máy tính giống theo thực tế.
Luận văn này, được nghiên cứu với phần cứng điều khiển chủ yếu sử dụng vi
điều khiển pic 18f4550 và được lập trình bởi mikroC. Tr ong đó, bao gồm giám sát và
điều khiển nhiệt độ khu vực làm lạnh, nhiệt độ nước giải nhiệt, nhiệt độ nước làm lạnh,
lượng CO2 trong không khí, điều khiển thiết bị và đèn chiếu sáng theo thời gian thực
hoặc thời gian tùy chọn của người vận hành hoặc chủ đầu tư. Trong đó, giao diện màn hình điều khiển thiết bị từ máy tính được thiết kế với hình ảnh 3D theo thiết bị thực tế.
Do đó, làm cho người vận hành dễ giám sát và điều khiển thiết bị.
Luận văn chủ yếu tập trung xây dựng mô hình hệ thống HVAC điều khiển bằng
BMS được thu gọn lại với đầu đủ các chi tiết như là một hệ thống trong thức tế và thể
hiện đầy đủ các thông số và trạng thái hoạt động của hệ thống.
Thông qua luận văn này, tôi cũng hy vọng sẽ cung cấp một mô hình và kiến
thức hữu ích cho các kỹ sư, sinh viên .v.v… đang học tập và nghiên cứu về hệ thống
HVAC điều khiển bằng BMS.
iv
ABSTRACT
Today, the air-conditioning systems HVAC (Heating Ventilating and Air
Conditioning) and BMS (Building Management System) is widely used in buildings.
Heat exchange system center is WCH (Water Chiller) and FCU (Fan Coil Unit), AHU
(Air Handling Unit). In this essay, I am going into research modeling HVAC system
water-cooled, the FCU (Fan Coil Unit) and BMS (Building Management System)
controller surveillance equipment from computer the same as the fact.
This thesis, I research with hardware drivers mainly use pic 18f4550
microcontroller and programmed by MikroC. In there, including supervise and area
cold temperature control, hot water temperature control, cold water temperature
control, the amount of CO2 in the air, lighting and devices control real-time or time
option of the operator or investor. In there, the interface display devices control from
the computer designed with real 3D images. Therefore, the operator easily to view
and devices control.
This thesis is to make HVAC control system model by BMS control. The
model is the compact with all the details as a system in fact and fully display
parameters and status activities of the system.
Through this thesis, I hope to provide a useful model and knowledge for engineers
and students. Etc. The peoples are learning and research about HVAC systems the
BMS controlled.
v
MỤC LỤC
Trang Tên đề mục
Lời cam đoan ............................................................................................................... i
Lời cảm ơn ...................................................................................................................ii
Tóm tắt luận văn .........................................................................................................iii
Abstract .......................................................................................................................iv
Mục lục .........................................................................................................................v
Danh mục các từ viết tắt .............................................................................................xi
Danh mục các bảng biểu ........................................................................................... xii
Danh mục các sơ đồ, hình ảnh ..................................................................................xiii
Chương 1: Mở đầu ....................................................................................................1
1.1. Đặt vấn đề .........................................................................................................1
1.2. Tính cấp thiết của đề tài ..................................................................................2
1.3. Mục tiêu đề tài ..................................................................................................2
1.4. Nội dung nghiên cứu .......................................................................................2
1.5. Phương pháp luận ............................................................................................3
1.6. Phương pháp nghiên cứu .................................................................................3
1.7. .................................................................3 Tình hình nghiên cứu trên thế giới
1.8. Tình hình nghiên cứu trong nước ..................................................................5
1.9. Nội dung luận văn ............................................................................................5
vi
Chương 2: Tổng quan về hệ thống BMS (Building Management System).... 6
2.1. BMS là gì? ............................................................................................... 6
2.1.1. Đối tượng quản lý của BMS .............................................................. 7
2.1.2. Tính năng của BMS ........................................................................... 7
2.1.3. Lợi ích mang lại từ BMS ................................................................... 8
2.2. Ưu điểm của hệ thống BMS ..................................................................... 8
2.2.1. Quản lý hiệu quả, tiết kiệm nhân công .............................................. 8
2.2.2. Duy trì và tối ưu hóa môi trường ....................................................... 9
2.2.3. Tiết kiệm năng lượng, nhiên liệu ....................................................... 9
2.2.4. Đảm bảo các yêu cầu an toàn ............................................................ 9
2.2.5. Nâng cao sự thuận tiện cho con người sử dụng ................................. 9
2.3. Cấu hình hệ thống BMS .......................................................................... 10
2.3.1. Bộ điều khiển cấp vùng .................................................................... 10
2.3.2. Bộ điều khiển cấp hệ thống .............................................................. 10
2.3.3. Bộ xử lý cấp hoạt động ..................................................................... 11
2.3.4. Bộ xử lý cấp quản lý ......................................................................... 12
2.4. Thiết bị điều khiển tự động ..................................................................... 12
2.4.1. Thiết bị điều khiển điện .................................................................... 12
2.4.2. Thiết bị điều khiển điện tử ................................................................ 13
2.4.3. Bộ điều khiển kỹ thuật số trực tiếp DDC ......................................... 13
2.4.4. Phần tử thông minh ........................................................................... 15
vii
2.5. Cơ sở điều khiển tự động ........................................................................ 16
2.5.1. Tổng quan về điều khiển tự động ..................................................... 16
2.5.2. Ứng dụng thiết bị điều khiển tự động ............................................... 17
Chương 3: Tổng quan về hệ thống điều hòa- thông gió (HVAC) ................ 19
3.1. Hệ thống HVAC là gì? ........................................................................... 19
3.2. Điều hòa không khí AHU ........................................................................ 20
3.2.1. Máy điều hòa không khí ngoài trời .................................................. 20
3.2.2. Bộ điều khiển lưu lượng gió cố định (CAV) .................................... 21
3.2.3. Bộ điều khiển lưu lượng gió có điều khiển (VAV) .......................... 21
3.2.4. Điều hòa không khí cục bộ ............................................................... 22
3.2.5. Dàn quạt lạnh (FCU) ........................................................................ 23
3.3. Hệ thống máy làm lạnh ........................................................................... 23
3.3.1. Hệ thống bơm đơn ống kín ............................................................... 24
3.3.2. Hệ thống bể chứa ống mở ................................................................. 24
3.4. Điều khiển tự động HVAC...................................................................... 25
3.4.1. Điều khiển nhiệt độ phòng (khí đầu vào và khí hồi lưu) .................. 25
3.4.2. Điều khiển bậc thang nhiệt độ khí đầu vào ...................................... 27
3.4.3. Điều khiển giới hạn nhiệt độ khí đầu vào ......................................... 27
Chương 4: Các chuẩn truyền thông và cảm biến thông dụng .................... 28
4.1. Chuẩn truyền thông RS-232.................................................................... 28
4.2. Chuẩn truyền thông RS-485.................................................................... 30
4.3. Cảm biến nhiệt độ ................................................................................... 31
viii
4.4. Cảm biến CO2 ......................................................................................... 33
4.5. Van điện từ (Motorize valve) .................................................................. 33
Chương 5: Ngôn ngữ lập trình ....................................................................... 35
5.1. Ngôn ngữ lập trình MikroC ..................................................................... 35
5.1.1. Giới thiệu về MikroC cho vi điều khiển PIC .................................... 35
5.1.2. ............................................................................ 36 Tạo 1 Project mới
5.1.3. Giới thiệu về vi điều khiển PIC18F4550 .......................................... 37
5.1.4. Sơ đồ chân ........................................................................................ 38
5.2. Ngôn ngữ lập trình Delphi ..................................................................... 39
5.2.1. Tổng quan về Delphi ........................................................................ 39
5.2.2. Môi trường phát triển tích hợp của Delphi ....................................... 40
5.2.2.1.Cửa sổ chính của Delphi ................................................................... 41
5.2.2.2.Cửa sổ thiết kế biểu mẫu .................................................................. 42
5.2.2.3.Cửa sổ liệt kê các đối tượng dạng cây (Object TreeView)............... 43
5.2.2.4.Cửa sổ các thuộc tính và sự kiện của đối tựng (Object Inspector)... 43
5.2.2.5.Cửa sổ soạn thảo mã lệnh ................................................................. 44
5.2.3. Các kiểu dữ liệu sơ cấp chuẩn, lệnh đơn .......................................... 45
5.2.3.1.Các kiểu dữ liệu sơ cấp (Simple type) .............................................. 45
5.2.3.2.Lệnh đơn (Simple statement) .......................................................... 48
5.2.4. Các lệnh có cấu trúc .......................................................................... 49
5.2.4.1.Lệnh ghép (Compound statement) ................................................... 49
5.2.4.2.Lệnh cấu trúc rẽ nhánh ..................................................................... 50
ix
5.2.4.3.Lệnh lặp có số lần xác định truớc .................................................... 53
5.2.4.4.Lệnh lặp có số lần không xác định truớc .......................................... 54
Chương 6: Xây dựng mô hình điều khiển hệ thống HVAC bằng BMS ..... 56
6.1. Xây dựng mô hình phần cứng ................................................................. 56
6.1.1. Thiết kế sơ đồ mạch điều khiển chính .............................................. 56
6.1.1.1.Sơ đồ nguyên lý ............................................................................... 56
6.1.1.2.Sơ đồ mạch in .................................................................................. 57
6.1.1.3.Lắp ráp linh kiện ............................................................................... 58
6.1.2. Thiết kế sơ đồ mạch rơ le đóng, cắt .................................................. 58
6.1.2.1.Sơ đồ nguyên lý ................................................................................ 58
6.1.2.2.Sơ đồ mạch in ................................................................................... 59
6.1.2.3.Lắp ráp linh kiện ............................................................................... 59
6.1.3. Thiết kế sơ đồ mạch hồi tiếp tín hiệu ............................................... 60
6.1.3.1.Sơ đồ nguyên lý ................................................................................ 60
6.1.3.2.Sơ đồ mạch in ................................................................................... 60
6.1.3.3.Lắp ráp linh kiện ............................................................................... 61
6.2. Thiết kế sơ đổ điều khiển ....................................................................... 61
6.2.1. Thiết kế mạch động lực ................................................................... 61
6.2.2. Thiết kế mạch điều khiển .................................................................. 62
6.3. Xây dựng mô hình hệ thống HVAC ....................................................... 63
6.3.1. Hình ảnh mô hình ............................................................................. 63
6.3.2. Thiết bị trong mô hình hệ thống HVAC ........................................... 63
x
6.3.3. Mục đích của mô hình hệ thống HVAC ........................................... 64
6.4. Lưu đồ giải thuật .................................................................................... 65
6.4.1. Lưu đồ giải thuật kiểm tra giờ ON/OFF cho hệ thống Chiller ........ 65
6.4.2. Lưu đồ giải thuật kiểm tra giờ ON/OFF cho Damper ..................... 66
6.4.3. Lưu đồ giải thuật kiểm tra ON/OFF cho đèn ................................... 67
6.5. Kết quả mô phỏng đạt được của mô hình hệ thống HVAC ................... 68
6.6. Nhận xét .................................................................................................. 84
Chương 7: Kết luận và hướng nghiên cứu phát triển .................................. 85
Phụ lục
xi
DANH MỤC CÁC TỪ VIẾT TẮT
- BMS: Building Management System: Hệ thống quản lý tòa nhà
- HVAC: Heating, Ventilation, and Air Conditioning: Sưởi ấm, thông gió và
điều hòa không khí .
- AHU: Air Handling Unit: Thiết bị quạt- giàn lạnh trung tâm
- FCU: Fan Coil Unit: Thiết bị quạt- giàn lạnh cục bộ
- DDC: Direct Digital Controler: Bộ điều khiển kỹ thuật số trực tiếp
- CHL: Chiller - hệ thống làm lạnh bằng nước
- CHWP: Chiller Water Pump - Bơm đẩy nước lạnh
- CWP: Cooling Water Pump - Bơm đẩy nước giải nhiệt
- CT: Cooling Tower -Tháp giải nhiệt
- TWS: Tower Water Supply- Nước từ máy đưa đến tháp giải nhiệt
- TWR: Tower Water Return- Nước từ tháp giải nhiệt về máy
- CHWS: Chiller Water Supply- Nước lạnh từ Chiller đưa đi - CHWR: Chiller Water Return- Nước lạnh đưa về Chiller làm lạnh tiế p
xii
DANH MỤC CÁC BẢNG BIỂU
Trang
Bảng 5.1: Bảng mô tả các chức năng chân của PIC18F4550 ............................ 39 Bảng 5.2: Bảng kiểu số nguyên.......................................................................... 45
Bảng 5.3: Bảng các kiểu số nguyên ................................................................... 45 Bảng 5.4: Bảng mã ASCII với 128 ký tự chuẩn ................................................ 46
Bảng 5.5: Bảng các từ khóa kiểu thực .............................................................. 47
Bảng 5.6: Bảng kiểu logic .................................................................................. 48
xiii
DANH MỤC CÁC LƯU ĐỒ, HÌNH ẢNH
Trang 6 Hình 2.1: Tổng quát về BMS
12 Hình 2.2: Sơ đồ điều khiển máy điều hòa không khí
13 Hình 2.3: Bộ điều khiển trực tiếp DDC
15 Hình 2.4: Sơ đồ kết nối bộ điều khiển trực tiếp (DDC)
16 Hình 2.5: Sơ đồ kết nối hệ thống điều khiển trung tâm
17 Hình 2.6: Thay đổi thông số đặt theo thời gian
19
20 Hình 3.1: Hệ thống HVAC Hình 3.2: Máy điều hòa không khí ngoài trời
21 Hình 3.3: Bộ điều khiển lưu lượng gió CAV
21 Hình 3.4: Bộ điều khiển lưu lượng gió VAV
22
23 Hình 3.5: Điều hòa không khí cục bộ Hình 3.6: Quạt dàn lạnh (FCU)
24 Hình 3.7: Hệ thống bơm ống kín
24 Hình 3.8: Hệ thống bể chứa ống mở
25 Hình 3.9: Điều khiển van nước nóng và lạnh
26 Hình 3.10: Điều khiển van nước nóng, lạnh và làm mát khí trời
29 Hình 4.1: Cổng COM 9 chân
33 Hình 4.2: Cảm biến CO2
33 Hình 4.3: Van điện từ
35 Hình 5.1: Giao diện phần mềm MikroC
36 Hình 5.2: Tạo 1 project mới
37 Hình 5.3: cửa sổ project mới
37 Hình 5.4: Hình vi điều khiển pic 18f4550
38 Hình 5.5: Sơ đồ chân vi điều khiển pic 18f4550
40 Hình 5.6: Giao diện dự án tạo mới trong Delphi 7.0
xiv
41 Hình 5.7: Thanh thực đơn chính
41 Hình 5.8: Các thanh công cụ
41 Hình 5.9: Bảng chứa các thành phần tro ng thẻ Standard
Hình 5.10: Các Components 42
43 Hình 5.11: Cửa sổ liệt kê các đối tuợng dạng cây trên frmPTB1
43 Hình 5.12: thẻ Properties của Form và thẻ Events của Button
44 Hình 5.13: Cửa sổ soạn thảo mã lệnh cho form unit untPtb1.Pas
49 Hình 5.14: Ví dụ minh họa lệnh goto và khai báo nhãn - label
56 Hình 6.1: Sơ đồ nguyên lý mạch điều khiển chính
57 Hình 6.2: Sơ đồ mạch in mạch điều khiển chính
58 Hình 6.3: Lắp ráp linh kiện
58 Hình 6.4: Sơ đồ nguyên lý mạch rơle đóng , cắt
59 Hình 6.5: Sơ đồ m ạch in rơle đóng, cắt
59
60 Hình 6.6: Hình lắp ráp linh kiện rơle đóng, cắt Hình 6.7: Sơ đồ nguyên lý mạch hồi tiếp tín hiệu
60 Hình 6.8: Sơ đồ mạch in mạch hồi tiếp tín hiệu
61 Hình 6.9: Sơ đồ mạch lắp ráp linh kiện mạch hồi tiếp tín hiệu
61 Hình 6.10: Sơ đồ mạch động lực
62 Hình 6.11: Sơ đồ mạch điều khiển
63 Hình 6.12: Mô hình hệ thống HVAC
Hình 6.13: Lưu đồ giải thuật kiểm tra giờ ON/OFF của hệ thống 65 Chiller
66 Hình 6.14: Lưu đồ giải thuật kiểm tra ON/OFF Damper
67
Hình 6.15: Lưu đồ giải thuật kiểm tra ON/OFF đèn Hình 6.16: Kết nối phần mềm với mô hình điều khiển hệ thống 68 Chiller
69 Hình 6.17: Hiển thị nhiệt độ trên LCD board mạch
Hình 6.18: Hiển thị nhiệt độ trên giao diện màn hình Chiller 69 System
xv
70
71 Hình 6.19: Chuyển công tắc trên bảng điều khiển sang “AUTO” Hình 6.20: Cài đặt nhiệt độ nước làm lạnh và nước giải nhiệt
72 Hình 6.21: Hệ thống Chiller hoạt động chế độ “AUTO”
73 Hình 6.22: nhiệt độ thay đổi theo thời gian (lần 1)
73 Hình 6.23: nhiệt độ thay đổi theo thời gian (lần 2)
74 Hình 6.24: Chiller “OFF” khi nhiệt độ làm lạnh nhỏ hơn nhiệt độ đặt
Hình 6.25: Quạt giải nhiệt “OFF” khi nhiệt độ nước nhỏ hơn nhiệt độ 75 đặt
76 Hình 6.26: Điều khiển Chiller System chuyển từ “AUTO” sang :ON”
77 Hình 6.27: Điều khiển Chiller System chuyển từ “OFF” sang :ON”
77 Hình 6.28: Chiller System ở trạng thái “OFF”
78 Hình 6.29: FCU (quạt dàn lạnh) chạy theo nhiệt độ đặt
79 Hình 6.30: FCU (quạt dàn lạnh) hoạt động ở trạng thái “ON”
80 Hình 6.31: FCU (quạt dàn lạnh) ở trạng thái “O FF”
81 Hình 6.32: Trạng thái Damper ở chế độ “AUTO”
81 Hình 6.33: Trạng thái Damper ở chế độ “ON”
82 Hình 6.34: Trạng thái Damper ở chế độ “OFF”
82 Hình 6.35: Đèn ở trạng thái “AUTO”
83 Hình 6.36: Đèn ở trạng thái “ON”
83 Hình 6.37:Đèn ở trạng thái “ OFF”
1
Chương 1
MỞ ĐẦU
1.1. Đặt vấn đề
Trên thế giới, các hệ thống thông minh, tự động điều khiển đã được áp dụng
trong các công trình xây dựng công nghiệp, dân dụng từ rất sớm và cho thấy những
đóng góp quan trọng của nó không thể phủ nhận. Các hệ thống kỹ thuật tự động gọi
chung là hệ thống quản lý tòa nhà (BMS – Building Management System).
Một hệ thống tự động hoàn chỉnh sẽ cung cấp cho công trình một giải pháp
điều khiển, quản lý điều kiện làm việc của các thiết bị như động cơ điện, nhiệt độ,
độ ẩm, lưu thông không khí, chiếu sáng, các hệ thống an ninh, báo cháy, quản lý hệ
thống thiết bị kỹ thuật, tiết kiệm năng lượng tiêu thụ cho công trình, thân thiện hơn
với môi trường.
Bên cạnh đó, hệ thống điều hòa, thông gió (HVAC), hệ thống lạnh trung tâm
làm lạnh bằng nước (Water Chiller) là không thể thiếu trong một tòa nhà cao tầng
bởi khả năng làm lạnh với hiệu suất cao, tiết kiệm chi phí.
Ở Việt Nam, những năm gần đây cũng không khó để nhận ra những đóng
góp của các hệ thống tự động trong các công trình công nghiệp và dân dụng. Những
khái niệm về quản lý tòa nhà, tiết kiệm năng lượng công trình, bảo vệ môi trường…
không còn quá mới mẻ. Tuy nhiên, mức độ áp dụng các hệ thống này nói chung vẫn
có giới hạn, chưa thực sự sâu và rộng. Điều này sẽ thay đổi nhanh chóng trong
những năm tới đây, khi nhịp độ xây dựng những công trình hiện đại ngày càng cao,
khi những hệ thống tự động hóa tòa nhà ngày càng có năng lực và độ tin cậy lớn
hơn, lợi ích của việc áp dụng những hệ thống này ngày càng rõ nét.
Luận văn này, đi sâu vào nghiên cứu xây dựng mô hình điều khiển hệ thống
HVAC bằng BMS dựa trên khả năng tự lập trình điều khiển bằng vi điều khiển pic
18f4550 với ngôn ngữ lập trình MikroC và Delphi, với tính năng tương tự như BMS
của các hãng Siemens, Honeywell, Yamatake,.... Kết quả nghiên cứu sẽ đưa ra một
cách nhìn tổng quát hơn về ứng dụng BMS trong việc điều khiển và giám sát hệ
2
thống của tòa nhà và có thể là công cụ hữu ích cho những sinh viên đang học tập và
nghiên cứu về BMS điều khiển hệ thống HVAC.
1.2. Tính cấp thiết của đề tài
Vấn đề tiết kiệm năng lượng, thân thiện với môi trường và tự động hóa trong
điều khiển và giám sát các thiết bị sử dụng điện nói chung là một trong những giải
pháp hàng đầu trong sự nghiệp công nghiệp hóa và hiện đại hóa ở Việt Nam hiện
nay. Do đó, luận văn này đưa ra một mô hình điều khiển hệ thống HVAC bằng
BMS đáp ứng yêu cầu điều khiển thực tế nêu trên.
Với phương pháp điều khiển bằng BMS, con người có khả năng giám sát các
thông số của thiết bị như nhiệt độ, CO2, tình trạng hoạt động hoặc sự cố của các
máy móc từ màn hình máy tính trung tâm. Từ đó, người ta đưa ra chế độ vận hành,
điều khiển một cách hợp lý với độ chính xác cao.
1.3. Mục tiêu của đề tài
Đây là một trong những phương pháp điều khiển và giám sát thiết bị có khả
năng tự động hóa cao. Với khả năng yêu cầu về tự động hóa ngày càng cao trong
sản suất và đời sống thì việc ứng dụng điều khiển bằng BMS là hết sức cần thiết.
Trong điều kiện hiện nay, với nhịp độ xây dựng nhà cao tầng ngày càng phát
triển. Cho nên việc sử dụng các hệ thống lạnh trung tâm, điều hòa không khí và
thông gió là không thể thiếu. Do đó, giải pháp điều khiển, khả năng giám sát thiết
bị, giám sát các thông số trong hệ thống lạnh sẽ được nghiên cứu trong luận văn
này.
Trong luận văn này, chúng tôi tập trung nghiên cứu xây dựng mô hình hệ
thống HVAC, mô hình phần cứng BMS và thiết lập giao diện phần mềm điều khiển
từ màn hình máy tính đối với hệ thống HVAC.
1.4. Nội dung nghiên cứu
- Nghiên cứu cấu tạo, nguyên lý hoạt động của hệ thống điều hòa, thông gió (HVAC)
- Nghiên cứu mô hình phần cứng của BMS
- Nghiên cứu mô hình phần mềm điều khiển BMS
- Nghiên cứu ngôn ngữ lập trình MikroC, để lập trình cho phần cứng của BMS
3
- Nghiên cứu ngôn ngữ lập trình Delphi, để lập trình phần mềm điều khiển của BMS
- Nghiên cứu các chuẩn truyền thông thông dụng RS-232, RS-485
- Nghiên cứu các loại cảm biến nhiệt độ, cảm biến CO2, van điện từ
- Đánh giá hiệu quả mô hình HVAC điều khiển bằng BMS
1.5. Phương pháp luận
- Luận văn là tài liệu tham khảo có giá trị cho những ai quan tâm, nghiên cứu đến hệ
thống điều hòa, thông gió và hệ thống điều khiển BMS.
- Đây là một trong những phương pháp điều khiển và giám sát thiết bị có khả năng tự
động hóa cao. Với khả năng yêu cầu về tự động hóa ngày càng cao trong sản suất và
đời sống thì việc ứng dụng điều khiển bằng BMS là hết sức cần thiết.
- Luận văn này cung cấp một mô hình điều khiển hệ thống điều hòa, thông gió bằng
BMS có thể ứng dụng trong thực tiễn.
1.6. Phương pháp nghiên cứu
- Thu thập và đọc hiểu các tài liệu liên quan từ cán bộ hướng dẫn, sách, các bài báo
và internet.v.v…
- Nghiên cứu nguyên lý hoạt động hệ thống điều hòa, thông gió
- Nghiên cứu phần mềm MikroC và Delphi
- Nghiên cứu phần cứng và phần mềm điều khiển BMS một số hãng trên thế giới.
- Xây dựng mô hình điều khiển hệ thống điều hòa, thông gió bằng BMS
- Lập trình phần mềm, kết nối phần cứng và chạy thử.
- Đánh giá hiệu quả của việc điều khiển hệ thống điều hòa, thông gió bằng BMS
1.7. Tình hình nghiên cứu trên thế giới
Hệ thống HVAC (heating, ventilating air conditioning) là hệ thống quan
trọng trọng hệ BMS. Nó là hệ thống điều hòa không khí, thông gió của một tòa nhà.
Hệ thống HVAC có thể được chia làm hai mảng là: Điều hòa và thông gió.
Hệ thống điều hòa thông thường hiện nay trên thế giới được chia thành hai
hệ thống: Hệ thống điều hòa sử dụng máy lạnh Chiller và hệ thống điều hòa bán
trung tâm VRV.
4
Hệ thống điều hòa được điều khiển tại phòng điều hành trung tâm thông qua
các màn hình hiển thị thông số. Để kiểm soát nhiệt độ và độ ẩm trong các khu vực,
tất cả các khu vực được làm mát bởi các máy điều hòa không khí, khu công cộng,
các phòng máy đều được lắp đặt các bộ cảm biến nhiệt độ và độ ẩm của không khí
trong phòng, điều này cho phép quản lý được nhiệt độ toàn bộ các khu vực của tòa
nhà.
Việc điều khiển điều hòa dựa trên các nguyên tắc hoạt động của nó, quy trình
được thực hiện như sau:
- Duy trì môi trường sạch: Các bộ lọc giúp hệ thống duy trì chất lượng không
khí, lọc sạch bụi bẩn trong không khí được đưa đến đầu vào của điều hòa
- Điều chỉnh nhiệt độ, làm mát, hút ẩm: Máy điều hòa vận hành để thực hiện
việc gia công khí, khi nhận biết được các tín hiệu về nhiệt độ khí, độ ẩm trong
phòng, sau khi không khí qua giàn trao đổi nhiệt hệ thống sẽ tự động điều khiển
nhiệt độ, độ ẩm thông qua việc đóng mở các van.
- Điều chỉnh nồng độ khí CO2 : đối với việc làm sạch không khí, nếu chỉ dựa
vào các bộ lọc khí thì chưa đủ, trong môi trường hoạt động của con người cũng như
của máy móc luôn sản sinh ra nguồn khí thải CO2. Khi nồng độ khí này trong các
khu vực tăng cao, con người sẽ cảm thấy mệt mỏi và khó chịu, năng suất lao động
giảm. Để quản lý được chất lượng không khí, trong các máy điều hòa được lắp các
bộ cảm biến nồng độ khí CO2 tại đường ống gió hồi hoặc được lắp đặt tại các
phòng do các máy điều hòa chịu trách nhiệm xử lý không khí. Tín hiệu cảm biến
nồng độ CO2 của từng khu vực cụ thể sẽ được xử lý và điều chỉnh phù hợp thông
qua việc đóng mở các van trộn khí tươi.
Tất cả các thông tin về chế độ hoạt động, tình trạng của thiết bị trong quá
trình vận hành được cập nhật tới các máy tính điều khiển, các thông tin này được
lưu giữ để sử dụng lâu dài.
*KẾT LUẬN: Hệ thống điều hòa, thông khí quyết định trực tiếp đến môi trường
sống, hoạt động trong tòa nhà. Vì thế, các hệ thống điều hòa thông gió luôn là mối
quan tâm của các chủ đầu tư về chất lượng hệ thống, giá thành…
5
1.8. Tình hình nghiên cứu trong nước
Ở Việt Nam ngày nay, việc xây dựng các tòa nhà cao tầng làm công sở, trung
tâm thương mại, khách sạn,… ngày càng trở nên phổ biến. Chúng trở nên hiện đại,
tiện nghi để phục vụ các yêu cầu ngày càng cao của con người. Giải pháp kết hợp
hệ thống các thiết bị cơ điện tử sử dụng trong tòa nhà với công nghệ tự động hóa
nhằm đem lại khả năng tự hoạt động của các hệ thống như: hệ thống điều hòa, thông
gió, hệ thống chiếu sáng, hệ thống báo cháy, camera,… đã không còn là đi ều mới
mẽ nữa. Tuy nhiên, vấn đề sống còn của giải pháp này lại nằm ở chỗ làm sao có thể
quản lý chung trong một hệ thống thống nhất. Các hệ thống tự động hóa tòa nhà
(BMS- Building Management System) đã ra đời để giải quyết bài toán này.
Nhiệm vụ chính của hệ thống BMS là điều khiển, giám sát, quản lý các thiết
bị cơ, điện trong một tòa nhà cao tầng, giúp cho việc vận hành, bảo dưỡng và quản
lý tòa nhà một cách thuận tiện, an toàn và tiết kiệm.
Hệ thống MBS được phát triển dựa trên nền kiến trúc của một hệ điều khiển
phân tán với các bộ điều khiển số trực tiếp (DDC- Direct Digital Controler) được
kết nối với hệ thống mạng tầng, các bộ điều khiển, định tuyết cấp cao hơn liên kết
các DDC với hệ thống mạng của tòa nhà.
1.9. Nội dung luận văn
Nội dung luận văn gồm 7 chương:
Chương 1: Mở đầu
Chương 2: Tổng quan về hệ thống BMS (Building Management System)
Chương 3: Tổng quan về hệ thống điều hòa, thông gió (HVAC)
Chương 4: Các chuẩn truyền thông và cảm biến thông dụng
Chương 5: Ngôn ngữ lập trình
Chương 6: Xây dựng mô hình điều khiển HVAC bằng BMS
Chương 7: Kết luận và hướng nghiên cứu phát triển
6
Chương 2
TỔNG QUAN VỀ HỆ THỐNG BMS
(Building Management System)
2.1. BMS là gì?
Hình 2.1: Tổng quát về BMS
BMS là viết tắt của cụm từ (Building Management System). Là một hệ thống
đồng bộ cho phép điều khiển và quản lý mọi hệ thống kỹ thuật trong toà nhà như hệ thống điện, hệ thống cung cấp nước sinh hoạt, điều hoà thông gió, cảnh báo môi
trường, an ninh, báo cháy – chữa cháy v.v…, đảm bảo cho việc vận hành các thiết bị trong tòa nhà được chính xác, kịp thời .
BMS thực hiện tốt các nhiệm vụ điều khiển vận hành hệ thống, là môi trường
thu nhận, quản lý toàn bộ các thông số kỹ thuật của thiết bị, các hệ thống kết nối tới.
Thông qua trao đổi thông tin, BMS điều khiển vận hành các thiết bị chấp hành của
7
từng hệ thống kỹ thuật khác nhau hoạt động theo yêu cầu của người quản lý, đảm
bảo các yếu tố kỹ thuật cũng như các yếu tố an toàn, an ninh…
2.1.1. Đối tượng quản lý của BMS
Trạm phân phối điện Máy phát điện dự phòng Hệ thống chiếu sáng Hệ thống điều hoà và thông gió Hệ thống cấp nước sinh hoạt Hệ thống báo cháy Hệ thống chữa cháy Hệ thống thang máy Hệ thống âm thanh công cộng Hệ thống thẻ kiểm soát ra vào Hệ thống an ninh
2.1.2. Tính năng của BMS
Cho phép các tiện ích (thiết bị thông minh) trong tòa nhà hoạt động một cách
đồng bộ, chính xác theo đúng yêu cầu của người điều hành.
Cho phép điều khiển các ứng dụng trong tòa nhà thông qua cáp điều khiển và
giao thức mạng.
Kết nối các hệ thống kỹ thuật như an ninh, báo cháy… qua cổng giao diện
mở của hệ thống với các ngôn ngữ giao diện theo tiêu chuẩn quốc tế Giám sát được môi trường không khí, môi trường làm việc của con người
Tổng hợp, báo cáo thông tin.
Cảnh báo sự cố, đưa ra những tín hiệu cảnh báo kịp thời trước khi có những
sự cố.
Quản lý dữ liệu gồm soạn thảo chương trình, quản lý cơ sở dữ liệu, chương
trình soạn thảo đồ hoạ, lưu trữ và sao lưu dữ liệu.
8
Hệ thống BMS linh hoạt, có khả năng mở rộng với các giải pháp sẵn sàng
đáp ứng với mọi yêu cầu.
2.1.3. Lợi ích mang lại từ BMS
Lợi ích lớn nhất của hệ thống quản lý toà nhà là cung cấp cho người dùng một
môi trường thoải mái, an toàn và thuận tiện. Ngoài ra người dùng cũng như chủ
sở hữu có thể tiết kiệm năng lượng và giảm thiểu nhân lực lao động, đảm bảo các
thiết bị luôn làm việc tốt, độ bền cao. BMS rõ ràng tạo ra những lợi thế vượt trội
như sau:
Đơn giản hóa và tự động hóa vận hành các thủ tục, chức năng có tính lặp
đi lặp lại.
Quản lý tốt hơn các thiết bị trong tòa nhà nhờ hệ thống lưu trữ dữ liệu, chương trình bảo trì bảo dưỡng và hệ thống tự động báo cáo cảnh báo. Giảm sự cố và phản ứng nhanh đối với các yêu cầu của khách hàng hay
khi xảy ra sự cố.
Giảm chi phí năng lượng nhờ tính năng quản lý tập trung điều khiển và
quản lý năng lượng.
Giảm chi phí nhân công và thời gian đào tạo nhân viên vận hành – cách sử dụng dễ hiểu, mô hình quản lý được thể hiện trực quan trên máy tính cho
phép giảm tối đa chi phí dành cho nhân sự và đào tạo.
Dễ dàng nâng cấp, linh hoạt trong việc lập trình theo nhu cầu, kích thước,
tổ chức và các yêu cầu mở rộng khác nhau.
2.2. Ưu điểm của hệ thống BMS
2.2.1. Quản lý hiệu quả, tiết kiệm nhân công
Hệ thống BMS cho phép quản lý một cách toàn diện một số lượng lớn dữ
liệu và trợ giúp thực thi việc quản lý tinh vi hơn với một đội ngũ nhân viên ít hơn.
Hệ thống máy móc tự động làm thay và trợ giúp con người trong nhiều việc.
Do việc tích hợp cho phép điều khiển khối lượng lớn dữ liệu, nên việc vận
hành toà nhà và các thiết bị có thể thực hiện được bởi một số ít nhân công.
9
2.2.2. Duy trì và tối ưu hóa môi trường
Nhiệt độ, độ ẩm, khí CO2, độ sạch, ánh sáng..v..v..sẽ được hệ thống kiểm
soát ở giá trị tốt nhất cho con người hoạt động.
2.2.3. Tiết kiệm năng lượng, nhiên liệu
Hệ thống BMS giúp kiểm soát chính xác tải nhiệt yêu cầu, đồng thời đáp ứng
tối ưu cho nhu cầu sử dụng. Điều này giúp kiểm soát thất thoát năng lượng, đem lại
hiệu quả kinh tế cao.
Sử dụng hiệu quả năng lượng tự nhiên và hạn chế lãng phí các nguồn nguyên
liệu, dùng các biện pháp như điều khiển và duy trì nhiệt độ được đặt trước hoặc sử
dụng khí trời khi cần thiết kiểm soát tải trong tòa nhà.
Đặc biệt, hệ thống điều khiển máy điều hoà không khí cho phép tạo môi
trường dễ chịu nhất cho người, chống lãng phí năng lượng nhờ điều khiển tối ưu và
liên tục duy trì ưu điểm này.
2.2.4. Đảm bảo các yêu cầu an toàn
Khả năng tích hợp chung với các hệ thống security như camera giám sát
(CCTV), kiểm soát ra vào (Access control) giúp đảm bảo tòa nhà luôn được theo
dõi và phản ứng tự động với các mối nguy.
Bằng việc tập trung thông tin toàn bộ các thiết bị về đơn vị xử lý trung tâm,
ta có thể dễ dàng xác định trạng thái của thiết bị, vận hành và khắc phục các sự cố
như mất điện, hỏng, cháy. Với hệ thống an ninh tích hợp, ta có thể yên tâm về sự an
toàn của người sử dụng trong toà nhà, bảo mật thông tin cá nhân mà không làm mất
sự thoải mái.
2.2.5. Nâng cao sự thuận tiện cho con người sử dụng
Với BMS, các chỉ thị về điều chỉnh nhiệt độ, ánh sáng, âm thanh, kiểm soát
vùng đều được thực hiện dễ dàng hơn. Thậm chí cũng không cần nhiều người để tác
động vì hệ thống máy tính tập trung và kết nối internet có thể giúp ra chỉ lệnh ở bất
kỳ đâu.
Việc tích hợp nhiều tính năng trong các thiết bị giúp người dùng luôn cảm
nhận được sự thoải mái. Ví dụ, luôn có thể thoải mái ra vào suốt 24 giờ, cài đặt
10
nhiệt độ dễ dàng, đặt chế độ thời gian, theo dõi trạng thái thời tiết bên ngoài và
thông tin quản lý, điều hành của toà nhà
2.3. Cấu hình hệ thống BMS
Bộ điều khiến sử dụng vi xử lý tạo nên cấu hình theo kiểu cấp bậc cho hệ
thống BMS hay còn gọi là lớp (tier) của bộ xử lý.
2.3.1. Bộ điều khiển cấp vùng
Đây là bộ điều khiển sử dụng bộ vi xử lý, cung cấp khả năng điều khiển trực
tiếp tới các thiết nằm trong phạm vi cấp vùng, như bơm nhiệt, hộp điều lượng gió
(VAV – Variable Air Volume), thiết bị cấp gió đơn vùng. Bộ điều khiển cấp này
cũng có thể sử dụng phần mềm quản lý năng lượng.
Tại cấp xử lý vùng, cảm biến liên lạc trực tiếp với thiết bị được điều khiển.
Một bus liên lạc làm phương tiện kết nối các bộ điều khiển, do vậy các điểm thông
tin giữa các bộ điều khiển có thể chia sẻ cho nhau và chia sẻ với các bộ xử lý tại hệ
thống và ở cấp xử lý hoạt động. Các bộ điều khiển cấp vùng tiêu biểu có một cổng
hoặc kênh giao tiếp để hỗ trợ sử dụng thiết bị đầu cuối di động trong quá trình thiết
lập ban đầu và cả những lần điều chỉnh sau đó.
2.3.2. Bộ điều khiển cấp hệ thống
Bộ điều khiển cấp này có công suất lớn hơn bộ điều khiển cấp vùng nếu xét trên phương diện các điểm, vòng DDC và chương trình đi ều khiển. Bộ điều khiển
cấp hệ thống thường được dùng để điều khiển các thiết bị cơ khí như các hệ cung
cấp khí, hệ VAV trung tâm và hệ thống làm mát. Ngoài ra, nó còn thực thi điều
khiển ánh sáng.
Bộ điều khiển tại cấp này giao tiếp trực tiếp với các thiết bị được điều khiển
thông qua actuator và cảm biến, hoặc giao tiếp gián tiếp thông qua các bus liên lạc
với bộ điều khiển cấp vùng. Bộ điều khiển cấp hệ thống có một cổng để kết nối với
các thiết bị đầu cuối lập trình và vận hành cầm tay trong suốt quá trình cài đặt ban
đầu và cả các lần điều chỉnh sau này.
Khi bộ điều khiển cấp hệ thống được kết nối với bộ xử lý cấp hoạt động,
những thay đổi chương trình điều khiển thường được thực thi ở bộ xử lý cấp hoạt
11
động và sau đó tải xuống bộ điều khiển. Bộ điều khiển cấp hệ thống cũng cung cấp
khả năng dự phòng trong trường hợp liên lạc bị đứt bằng chế độ hoạt động độc lập.
Một số kiểu bộ điều khiển cấp hệ thống cũng cung cấp chế độ bảo vệ an toàn cho
toàn bộ tài sản thông qua tín hiệu cảnh báo hỏa hoạn, cảnh báo an ninh, bảo mật
truy cập.
2.3.3. Bộ xử lý cấp hoạt động
Bộ xử lý cấp này giao tiếp chủ yếu với vận hành viên hệ BMCS. Trong mọi
ứng
dụng, nó thường là PC được trang bị màn hình hiển thị và các bảng mạch có chức
năng ‘plug-in’ cho thiết bị vận hành bổ sung, printer, mở rộng bộ nhớ và bus liên
lạc. Bộ xử lý cấp này thường có phần mềm ứng dụng, để:
- Bảo đảm an ninh hệ thống: Hạn chế truy cập và hoạt động cho những người
có thẩm quyền.
- Xâm nhập hệ thống: Cho phép những người có thẩm quyền chọn và lấy dữ
liệu thông qua PC và một số thiết bị khác.
- Định dạng dữ liệu: Tập hợp các điểm hệ thống ngẫu nhiên thành định dạng
nhóm logic để hiện thị và in ấn.
- Lập trình tùy biến: Phát triển các chương trình DDC theo nhu cầu tại cấp độ
hoạt động rồi tải xuống từng bộ điều khiển cấp hệ thống và cấp vùng chuyên
biệt hoặc từ xa.
- Đồ họa: Kết hợp với dữ liệu động về hệ thống xây dựng các màn hình đồ họa
theo yêu cầu.
- Report chuẩn: Tự động cung cấp các report chuẩn theo định kỳ và theo yêu
cầu hoạt động.
- Report theo yêu cầu: Là các bảng dữ liệu, file định dạng Word, và quản lý cơ
sở dữ liệu.
- Quản lý bảo trì: Tự động lên lịch bảo trì thiết bị dựa trên dữ liệu về lịch sử
thiết bị và thời gian hoạt động.
12
- Tích hợp hệ thống: Cung cấp cổng liên lạc và chức năng điều khiển cho các
hệ thống phụ (HVAC, cứu hỏa, an ninh, điều khiển truy cập.v.v...)
2.3.4. Bộ xử lý cấp quản lý
Đây là cấp cao nhất trong cấu trúc của hệ BMS. Nó thực thi điều khiển và
quản lý thông qua các hệ thống phụ. Tại cấp này, vận hành viên có thể yêu cầu dữ
liệu và ra lệnh tới các điểm từ bất kỳ đâu trong hệ thống. Vận hành hoạt động
thường nhật là chức năng thông thường của bộ xử lý cấp hoạt động. Tuy nhiên,
điều khiển toàn bộ có thể được chuyển sang cho bộ xử lý cấp quản lý trong những
trường hợp khẩn cấp.
Bộ xử lý cấp quản lý thu thập, lưu trữ, xử lý dữ liệu như mức độ tiêu thụ điện
năng, chi phí vận hành và hoạt động cảnh báo, các báo cáo để làm cơ sở hoạt định
quản lý và vận hành lâu dài.
2.4. Thiết bị điều khiển tự động
2.4.1. Thiết bị điều khiển điện
Hình 2.2: Sơ đồ điều khiển máy điều hòa không khí
Các phần tử cảm biến, bộ điều khiển và thiết bị cài đặt được thiết kế thành
một khối. Phương thức này đọc về các thay đổi nhiệt độ và độ ẩm khi ống xếp hoặc
13
màng ngăn có dịch chuyển cơ học và trực tiếp điều khiển các phần tử cuối như van
động cơ, van điều tiết khí động cơ, máy làm ẩm hoặc máy nén v.v.
Điện năng dùng để truyền tín hiệu hoặc làm nguồn cho các dịch chuyển cơ
học. Cả hai loại lắp trong phòng hoặc trong ống để xác định nhiệt độ, độ ẩm, áp
suất và các biến số khác. Có kết cấu đơn giản và dễ sử dụng. Do đó, thiết bị đơn
giản và giá thành thấp. Phương pháp này được ứng dụng khi không đòi hỏi độ
chính xác quá cao.
2.4.2. Thiết bị điều khiển điện tử
Trong các thiết bị điều khiển điện tử, các bộ điều khiển và phần tử cảm biến
đặt cách xa nhau. Các bộ điều khiển thường được lắp trên các tủ điều khiển trong
phòng điều khiển.
Vì bộ điều khiển điện tử dùng các mạch điện tử (mạch số), nên có thể xử lý
các giá trị đo khác nhau như nhiệt độ, độ ẩm, áp suất, lưu tốc, CO2, tỷ trọng v.v.
và đáp ứng điều khiển chính xác cao, hiển thị và cho phép xác lập các giá trị đo từ
xa. Do đầu ra là các tín hiệu đa dụng, nên cần sử dụng các bộ chuyển đổi như bộ
lựa chọn cao/thấp, bộ điều chế tỷ lệ hoặc các thiết bị bổ trợ khác, ngoài ra các bộ
điều khiển điện tử có thể được sử dụng như các bộ điều khiển lựa chọn hoặc điều
khiển giới hạn.
- Bộ lựa chọn cao /thấp: Thiết bị lựa chọn tín hiệu lớn (hoặc bé) từ hai tín hiệu
đầu vào và gửi ra.
- Bộ điều chế tỷ lệ: Thiết bị xuất tín hiệu ra, biến đổi điểm đầu, cuối hoặc tốc
độ thay đổi của các tín hiệu vào.
2.4.3. Bộ điều khiển kỹ thuật số trực tiếp DDC
Hình 2.3: Bộ điều khiển trực tiếp DDC
14
Theo định nghĩa của hiệp hội sản xuất thiết bị đo lường điện Nhật Bản, DDC
là "quá trình điều khiển, trong đó các chức năng của bộ điều khiển được thực
hiện bởi một thiết bị số". Tuy nhiên, ở đây, DDC là "một bộ điều khiển, trong đó
tích hợp chức năng hệ điều khiển tự động và chức năng giám sát từ xa sử dụng bộ
vi xử lý để xử lý dữ liệu". Các đặc điểm của DDC, cấu trúc mẫu, so sánh với thiết
bị điện tử được liệt kê dưới đây.
- Cài đặt, hiển thị và xử lý, khử lỗi trong quá trình truyền và tính toán, cho
phép đo lường và điều khiển ở độ chính xác cao.
- Tất cả các tín hiệu vào và ra đều được chuyển về thiết bị giám sát trung tâm,
có thể quản lý chính xác và chi tiết hơn.
- DDC cho phép điều khiển và quản lý phân tán tới từng đơn vị, không chỉ cho
các máy điều hòa khí mà còn với các dàn lạnh (FCU), các khối VAV (đơn vị
thể tích khí thay đổi) và các máy làm lạnh.
- Chức năng truyền phát cùng được tích hợp. Chỉ yêu cầu một cảm biến vừa
thực hiện đo lường vừa điều khiển.
- Thành phần có chức năng tự chẩn đoán cho phép phản ứng nhanh khi phát
sinh lỗi.
- Thiết bị cài đặt màn hình LCD và các cảm biến không dây có thể kết nối dễ
dàng giúp điều khiển dễ dàng.
- Chương trình dễ dàng bổ sung và sửa đổi để thích ứng với các thay đổi
trong phòng, chẳng hạn khi dịch chuyển các bộ phận, thiết bị.
- Chức năng điều khiển và trạm kiểm soát từ xa được tích hợp trong bộ điều
khiển để tiết kiệm diện tích tủ điều khiển.
- Dễ dàng nâng cấp và bổ sung các cảm biến và các điều khiển cuối cùng loại.
Có khả năng truyền phát tín hiệu tín hiệu vào ra của cảm biến và các phần tử
điều khiển cuối.
15
Hình 2.4: Sơ đồ kết nối bộ điều khiển trực tiếp (DDC)
2.4.4. Phần tử thông minh
Để bổ sung chức năng cho DDC, người ta tạo ra chuỗi phần tử là các thiết bị
cấp trường cung cấp thông tin bản thân thiết bị và điều kiện điều khiển. Đặc tính và
cấu hình mẫu của chúng được chỉ ra dưới đây.
- Truyền tất cả các tín hiệu vào/ra tới BMS trung tâm thông qua kênh truyền
thông SA-net. Tốc độ truyền dữ liệu tốt hơn trên đường dây thường.
- Từ cảm biến nhiệt độ phòng đến van điều khiển, các thiết bị chính trong
điều khiển AHU đều nằm trong thành phần chuỗi.
- ACTIVAL PLUS là một thành phần trong chuỗi phần tử thông minh. Đây là
van điều khiển động cơ với chức năng đo lường và điều khiển lưu lượng để
điều khiển vận tốc dòng nước lạnh và nóng bằng cách đo lưu lượng chứ
không chỉ điều chỉnh độ mở của van.
- ACTIVAL PLUS tính toán lưu lượng bằng cách đo độ chênh áp, đo được bởi
cảm biến áp suất lắp bên trong, nhân với Cv, tính bởi vị trí mở van nhân với
một hằng số.
16
- Màn hình LCD lắp trên tường để hiển thị giá trị đo của áp suất, nhiệt độ, tốc
độ dòng tính được từ ACTIVAL PLUS.
Hình 2.5: Sơ đồ kết nối hệ thống điều khiển trung tâm
2.5. Cơ sở điều khiển tự động
Phần này trình bày cơ sở điều khiển tự động, các yếu tố quan trọng trong
điều khiển máy điều hòa không khí như nhiệt độ, độ ẩm, áp suất, lưu tốc.v.v...
2.5.1. Tổng quan về điều khiển tự động
Đối với một hệ thống điều khiển, sự thay đổi các yếu tố bên ngoài như nhiệt
độ, độ bức xạ mặt trời và những thay đổi trong phòng như số người đều được xem
như những nhiễu loạn. Nếu không có thay đổi nào của các điều kiện bên trong cũng
như bên ngoài thì một khi van (phần tử điều khiển cuối) được đóng ở chế độ vị trí
tối ưu, nhiệt độ sẽ được giữ không đổi. Tuy nhiên luôn có sự dao động của các điều
kiện bên trong, bên ngoài, do vậy chúng ta luôn cần đến điều khiển tự động.
17
Hình 2.6: Thay đổi thông số đặt theo thời gian
Khi có sự thay đổi do đặt lại nhiệt độ hoặc do các nhiễu loạn sẽ có một giai
đoạn trễ xảy ra trong hệ thống cho đến khi các tác động được thực hiện và nhiệt độ
thực tế của phòng bắt đầu thay đổi. Giai đoạn này được gọi là độ trễ. Thời gian từ
khi nhiệt độ bắt đầu thay đổi đến khi ổn định được gọi là hằng số thời gian.
Yêu cầu về chất lượng của hệ điều khiển tự động gồm tốc độ phản ứng và độ
ổn định. Tốc độ phản ứng nhanh nghĩa là đ ạt được giá trị điều chỉnh càng nhanh
càng tốt. Còn độ ổn định được đánh giá bằng khả năng duy trì không đổi giá trị
đã điều chỉnh. Để thiết kế hệ điều khiển tự động, chức năng và chất lượng phải
được xác định phù hợp với đặc điểm ứng dụng và ngân sách.
2.5.2. Ứng dụng thiết bị điều khiển tự động
Theo nguyên lý hoạt động và cấu tạo, các thiết bị điều khiển tự động trong
hệ thống điều hòa không khí được phân loại như sau:
- Điều khiển điện
- Điều khiển điện tử
- Điều khiển khí nén
- Điều khiển điện-khí nén
- Điều khiển kỹ thuật số trực tiếp (DDC)
Ở Nhật Bản, so với Mỹ và Châu Âu, phương pháp khí nén/điện-khí nén sử
dụng áp lực chất khí làm tín hiệu đầu vào được ứng dụng rất ít, ví dụ như trong
điều khiển máy làm lạnh hoặc hệ thống chống nổ với các van lớn, hoặc tại các bệnh
viện nơi sử dụng rất nhiều van điều chỉnh.
18
Trong các thiết bị điều khiển điện, các phần tử cơ khí như tấm ngăn hoặc các
đĩa nhựa được sử dụng ,các phần tử cảm biến và phần tử điều khiển được kết hợp
trong một khối riêng biệt. Những thiết bị này thường được sử dụng vì sự thuận tiện
và giá thành sản phẩm thấp.
Tuy nhiên, người ta chờ đợi sự thay thế các thiết bị điện bằng các sản phẩm
số hóa điện tử với những tính năng tương tự. Những bộ vi xử lý đã nhanh chóng
được ứng dụng trong các thiết bị điện tử, nhưng các bộ điều khiển số trực tiếp DDC
mới là các bộ được sử dụng rộng rãi. Về cơ bản bộ điều khiển số trực tiếp DDC là
thiết bị có nhiều chức năng và tiện lợi nhờ khả năng truyền thông với hệ thống quản
lý toà nhà chính. Đó là điểm khác biệt so với các thiết bị điện tử có tích hợp bộ vi
xử lý.
19
Chương 3
TỔNG QUAN VỀ
HỆ THỐNG ĐIỀU HÒA - THÔNG GIÓ (HVAC)
3.1. Hệ thống HVAC là gì?
Hình 3.1: Hệ thống HVAC
HVAC là viết tắt của Heating, Ventilation, and Air Conditioning (sưởi ấm,
thông gió và điều hòa không khí). Đề cập đến công nghệ môi trường trong nhà h oặc
20
ô tô. Thiết kế hệ thống HVAC là một chuyên ngành chính của kỹ thuật cơ khí, dựa
trên các nguyên tắc của nhiệt động lực học, cơ học chất lỏng, truyền nhiệt và làm
lạnh. Đôi khi nó được thêm vào chữ viết tắt của lĩnh vực như HVAC & R hoặc
HVACR, hoặc thông gió được giảm xuống như trong HACR (chẳng hạn như việc
chỉ định HACR-đánh giá bộ phận ngắt mạch).
HVAC là quan trọng trong việc thiết kế các phương tiện truyền thông để các
tòa nhà văn phòng và công nghiệp lớn như tòa nhà chọc trời và trong các môi
trường biển, chẳng hạn như bể cá, nơi có điều kiện xây dựng an toàn và lành mạnh
được quy định đối với nhiệt độ và độ ẩm, bằng cách sử dụng “không khí trong lành
từ bên ngoài.
3.2. Điều hòa không khí AHU
Các hệ điều hòa không khí được chia thành ba hệ chính: điều hòa không khí
ngoài trời, trong phòng hoặc quanh phòng, phụ thuộc vào tải trọng đặt lên mỗi máy
điều hòa không khí.
Tùy từng hệ thống điều hòa không khí, ta có các loại AHU khác nhau. Có
nhiều cách khác nhau để phân loại AHU.
3.2.1. Máy điều hòa không khí ngoài trời
Hình 3.2: Máy điều hòa không khí ngoài trời
Trong AHU này, chỉ khí trời được hút vào và xử lý mà không có khí hồi lưu
trả về hệ thống.
Trong một số trường hợp người ta thêm vào các máy trao đổi nhiệt tổng.
Khối này phù hợp để kết hợp với các dàn quạt lạnh, dùng cho các phòng đơn trong
khách sạn hoặc bệnh viện và các AHU trên mỗi tầng trong các toà nhà văn phòng.
Trong loại này, điều khiển được thực hiện dựa trên nhiệt độ khí cung cấp và nhiệt
độ đọng sương.
21
Tuy nhiên cũng có thể không sử dụng các bộ chuyển đổi nhiệt khi làm mát
không khí nếu thời tiết trong mùa thuận lợi.
3.2.2. Bộ điều khiển lưu lượng gió cố định (CAV)
Hình 3.3: Bộ điều khiển lưu lượng gió CAV
Phương pháp này để xử lý tải phòng (khí hồi lưu) và tải khí trời (khí ngoài),
hoặc chỉ tải phòng và phân bố lượng khí không đổi đó trong các ống. Người ta sử
dụng ống nóng/lạnh hoặc kết hợp của ống nóng và ống lạnh.
Phương pháp này điều khiển những khu vực có đặc tính tải không đổi và
được sử dụng rộng rãi, từ những khu rộng lớn như nhà hát hoặc trung tâm thương
mại, không gian trong các toà nhà từ nhỏ đến trung bình, tới các toà nhà lớn và cho
tứng tầng. Bộ điều khiển lưu lượng gió cố định AHU thực hiện điều khiển nhiệt độ
và độ ẩm của các phòng bằng việc điều chỉnh lượng khí trả về từng phòng. Nó
cũng điều khiển nhiệt phòng và nồng độ CO2 bằng cách kiểm soát tải khí trời và
điều chỉnh lượng khí trời lấy vào.
3.2.3. Bộ điều khiển lưu lượng gió có điều khiển (VAV)
Hình 3.4: Bộ điều khiển lưu lượng gió VAV
Phương pháp này chia nhỏ vùng điều khiển thành các vùng chịu tải như
nhau, dùng các khối điều khiển lưu lượng gió đơn để ổn định chúng, dùng biến tần
22
để giảm khối lượng khí tổng cộng của AHU v.v. So sánh với bộ điều khiển lưu
lượng gió cố định AHU, các bộ điều lưu lượng gió có điều khiển AHU có thể điều
khiển các khu vực này tốt hơn do tính đến tải ở từng khu vực nhỏ vì thế có khả năng
tiết kiệm năng lượng.
Phương pháp này phù hợp cho các toà nhà công sở từ trung bình đến lớn với
diện tích cần xử lý không khí rộng và quan tâm đến yếu tố giá thành. Các bộ điều
lưu lượng gió có điều khiển AHU điều khiển nhiệt độ từng khu vực nhỏ, điều khiển
nhiệt độ khí cấp, khối lượng khí quạt.
Chúng cũng điều khiển khí trời và mật độ CO2 giống như các bộ điều khiển
lưu lượng gió cố định AHU. Tùy từng hệ thống điều hòa không khí, ta có các loại
AHU khác nhau. Có nhiều cách khác nhau để phân loại AHU.
3.2.4. Điều hòa không khí cục bộ
Đây là thiết bị đặt trong phòng có gắn thêm máy nén. Có hai loại: máy nén
lạnh kèm máy sấy điện và loại bơm nhiệt. Ngoài ra cũng có loại dùng nguồn nước
hoặc một số loại kết hợp.
Hình 3.5: Điều hòa không khí cục bộ
Phương pháp này dùng chủ yếu để điều hòa không khí cho những nơi có đặc tính tải và thời gian vận hành đặc trưng, các phòng máy tính, kho chứa, văn phòng
cỡ nhỏ. Trong các hệ điều hoà không khí cục bộ, thực hiện điều khiển bật/tắt các
khối điều hành máy nén tương ứng với nhiệt độ phòng v.v..
23
3.2.5. Dàn quạt lạnh (FCU)
Hình 3.6: Quạt dàn lạnh (FCU)
Máy điều hoà không khí thu gọn gồm một quạt, một ống dẫn và một bộ lọc,
v.v. Nói chung, nó không hút khí trời vào hoặc thực hiện phun ẩm, mà đơn giản là
thực hiện tuần hoàn không khí. Có các loại đặt trên sàn, treo lên trần và dạng khối
xách theo.
Phương pháp này sẽ phù hợp cho các phòng trong khách sạn, bệnh viện hoặc
hành lang các toà nhà văn phòng. FCU đi ều hoà nhiệt độ phòng hoặc khối khí trả
về bằng cách điều chỉnh các van độc lập hoặc nhóm (cho các vùng). Chúng có thể
dùng để tối ưu tải chung với các máy điều hòa không khí trong hoặc ngoài cũng như
thực hiện điều khiển tiết kiệm năng lượng.
3.3. Hệ thống máy làm lạnh
Có nhiều loại máy làm lạnh có cấu tạo và nguyên lý hoạt động khác nhau
như máy lạnh kiểu hút, kiểu bơm nhiệt và kiểu nồi đun. Các thiết bị bổ trợ gồm bơm
nước nóng/lạnh, bơm nước mát và tháp giải nhiệt. Cũng có thể phân loại máy làm
lạnh theo kiểu ống kín, ống mở, phương pháp nhận DHC (làm lạnh và sấy nóng
khu vực) và kiểu máy lạnh đơn lẻ của các bộ điều hoà khí cục bộ.
Tài liệu này trình bày kiểu ống kín và mở. Phương pháp ống kín được chia thành phương pháp dòng không đổi và dòng thay đổi. Trong phương pháp dòng
không đổi, nước nóng/lạnh cấp cho toàn bộ toà nhà với tốc độ không đổi được điểu
khiển bằng van ba ngả theo tải trong các máy điều hòa không khí. Phương pháp
dòng thay đổi, dòng cấp nước nóng/lạnh thay đổi theo điều chỉnh của van hai ngả
24
theo tải. Phần này chủ yếu mô tả phương pháp dòng thay đổi, cho phép tiết kiệm
năng lượng hơn.
3.3.1. Hệ thống bơm đơn ống kín
Hình 3.7: Hệ thống bơm ống kín
Phương pháp này cũng gọi là hệ bơm thứ cấp hoặc bơm kép. Bơm sơ cấp
điều khiển phần đầu hệ máy lạnh, bơm thứ cấp chia sẻ tải ở phần đầu cân bằng với
tải máy điều hòa. Dù chi phí ban đầu và không gian lắp đặt lớn hơn so với hệ bơm
đơn nhưng có thể tiết kiệm năng lượng bằng việc sử dụng bơm thứ cấp riêng biệt
cho từng hệ máy lạnh và điều khiển các khối vận hành. Phương thức này dùng chủ
yếu cho các toà nhà cỡ trung bình tới lớn.
Hệ bơm đôi điều khiển số bơm thứ cấp vận hành theo lưu lượng và điều
khiển van bypass hoặc các bộ chuyển đổi theo áp suất chênh lệch phía trước và sau
các bơm.
3.3.2. Hệ thống bể chứa ống mở
Hình 3.8: Hệ thống bể chứa ống mở
25
Hệ thống này sử dụng các tấm kép và các thùng làm bể chứa nước nóng/lạnh
từ máy làm lạnh (chủ yếu là kiểu động cơ) và trực tiếp cung cấp cho các máy điều
hòa không khí v.v. Để tiết kiệm năng lượng, hệ thống sử dụng năng lượng ngoài giờ
cao điểm hoặc ngưng chạy thiết bị trong giờ cao điểm để hạ giá thành và nâng cao
hiệu quả sử dụng nguồn điện. Nó cũng được sử dụng như một hệ dự phòng để hồi
nhiệt hoặc trong các trường hợp máy lạnh hỏng hóc.
Dù hệ thống này đòi hỏi đầu tư ban đầu tốn kém để lắp đặt các bể nước, bơm
thứ cấp, cũng như đo đạc chống sói mòn, nhưng nó rất tiết kiệm khi sử dụng. Hệ
dùng chủ yếu cho các toà nhà lớn hoặc các trung tâm máy tính.
3.4. Điều khiển tự động HVAC
(Sấy nóng cuộn đơn)
(Làm mát cuộn đơn)
3.4.1. Điều khiển nhiệt độ phòng (khí đầu vào và khí hồi lưu)
ở m n a V
Van nước nóng
Van nước lạnh
100%
0%
Nhiệt độ phòng
Điểm đặt sấy nóng
Điểm đặt làm lạnh
Điểm đặt nhiệt độ chính (cuộn kép)
Hình 3.9: Điều khiển van nước nóng và lạnh
- Xác định nhiệt độ phòng bằng cảm biến nhiệt và điều khiển tỉ lệ các van
nước nóng, lạnh. Khi sử dụng DDC, có thể điều khiển tích phân.
- Trong phương pháp cuộn đơn, tác động của mỗi van chỉ nằm bên trong
26
đường nét đứt ở hình trên.
- Vị trí điểm đặt trong phương pháp cuộn kép được biểu diễn trên hình bên.
Khi sử dụng các bộ DDC, các điểm đặt chính, điểm đặt sấy nóng và làm mát
(Sấy nóng cuộn đơn)
(Làm mát cuộn đơn)
có thể được đặt theo yêu cầu.
ở m n a V
Van nước lạnh
Van nước nóng
Van điều tiết khí trời
100%
Mở tối thiểu
0%
Nhiệt độ phòng
Điểm đặt sấy nóng
Điểm đặt làm mát khí trời
Điểm đặt làm lạnh
Điểm đặt nhiệt độ chính (cuộn kép)
Hình 3.10: Điều khiển van nước nóng, lạnh và làm mát khí trời
- Xác định nhiệt độ phòng bằng cảm biến nhiệt, điều khiển tỉ lệ các van nước
nóng, lạnh, van điều tiết khí trời/khí hồi lưu /khí thải (khi làm mát khí trời).
Khi sử dụng thiết bị điện tử và các bộ DDC, có thể thực hiện điều khiển tích
phân.
- Sử dụng năng lượng tự nhiên thực hiện làm mát khí trời khi việc hút khí vào
có hiệu quả.
- Khi có một bộ trao đổi nhiệt tổng cộng, hệ thống chuyển thành ống bypass
hoặc vận hành động cơ liên tục trong quá trình làm mát. Khi khí trời thoả
27
mãn các điều kiện sau đây, việc hút khí vào có hiệu quả.
Nhiệt độ khí trời < Nhiệt độ phòng (so sánh nhiệt độ) Nhiệt độ khí trời > Nhiệt độ giới hạn dưới của điểm đặt (so với tải độ ẩm) Nhiệt độ đọng sương ngoài trời < Nhiệt độ đọng sương giới hạn trên của
điểm đặt (so với tải sấy khô)
- Đảm bảo độ mở nhỏ nhất cho đầu hút khí trời để đảm bảo đúng với lượng
khí trời và mật độ CO2 như thiết kế.
3.4.2. Điều khiển bậc thang nhiệt độ khí đầu vào
Thay đổi điểm đặt nhiệt độ khí đầu vào để điều khiển nhiệt độ đầu vào giúp điều
khiển nhiệt độ đầu ra của phòng và điểm đặt nhiệt độ phòng. Do đó, có thể giảm độ
trễ và các nhiễu loạn.
3.4.3. Điều khiển giới hạn nhiệt độ khí đầu vào
Chức năng này điều khiển nhiệt độ khí đầu vào trong các giới hạn cao và thấp.
Điều này để tránh quá nhiệt khi sấy nóng, tránh phân tầng nhiệt độ và ngưng tụ ở
đầu ra khi làm mát.
28
Chương 4
CÁC CHUẨN TRUYỀN THÔNG
VÀ CẢM BIẾN THÔNG DỤNG
Trong hệ thống điều khiển, tự động cho tòa nhà chúng ta thường bắt gặp các
thuật ngữ như : BACnet, LONtalk, Modbus, KNX, Profibus...Chúng được gọi là các
chuẩn giao tiếp dữ liệu (data communication protocol). Về mặt khái niệm có thể
liên hệ chúng với chuẩn giao tiếp TCP/IP phổ biến trong thế giới mạng, IT.
Cần phần biệt các chuẩn giao tiếp (giao thức) này không phải là hardware
(phần cứng), software (phần mềm) hay firmware. Chuẩn giao tiếp là một khái niệm
trừu tượng. Nó là một tập hợp các quy định, các khuôn khổ được tiêu chuẩn hóa mà
người ta cần theo nó một cách nghiêm ngặt khi thiết lập các quá trình truyền nhận
dữ liệu (data). Có thể hiểu đó là cách mà các thiết bị tự động dùng để trao đổi thông
tin cho nhau.
Một cách dễ hiểu chúng ta có thể liên hệ chuẩn giao tiếp trong hệ thống tự
động với ngôn ngữ của con người. Ngôn ngữ là công cụ để 2 người có thể giao tiếp
và hiểu được tư tưởng của người kia. Chuẩn giao tiếp cũng giống thế, nó là công cụ
để 2 thiết bị có thể "hiểu" được nhau. Ngôn ngữ người sử dụng đơn vị là các chữ
cái, ghép chữ cái lại thành các từ, đặt các từ lại theo một cấu trúc được quy ước thì
tạo thành 1 câu có ý nghĩa. Chuẩn giao tiếp, tương tự, sử dụng đơn vị là các bit,
byte dữ liệu, ghép chúng lại cho ra các biến, sự thay đổi giá trị các thuộc tính trong
một đối tượng theo một "quy định" lập sẵn sẽ giúp trao đổi thông tin.
Giao tiếp giữa máy tính với thiết bị ngoại vi là việc trao đổi dữ liệu giữa máy
tính với một hay nhiều thiết bị ngoại vi. Máy tính có nhiều cổng vào ra (I/O) để
thực hiện chức năng trên.
4.1. Chuẩn truyền thông RS-232
Để bảo đảm sự tương thích giữa các thiết bị truyền dữ liệu nối tiếp do các
hãng khác nhau sản xuất, năm 1960 hiệp hội Công Nghiệp Điện Tử EIA đã xây
29
dựng một chuẩn giao diện được gọi là RS232. Năm 1963, chuẩn này được cải tiến
và gọi là RS232A, RS232B và RS232C vào những năm 1965 và 1969. Ngày nay,
RS232 là chuẩn giao diện I/O được sử dụng rộng rãi nhất. Tuy nhiên, do chuẩn này
ra đời khá lâu, trước khi có họ mạch vi điện tử TTL, vì vậy các mức điện áp vào/ra
không tương thích với TTL. Ở RS232, mức “1” tương ứng từ -3V ÷ -25V, còn mức
“0” tương ứng từ 3V ÷ 25V, khoảng từ -3V ÷ +3V không xác định. Do đó để nối
RS232 với máy tính đều phải qua bộ biến đổi điện áp như MAX232 để chuyển
mức logic TTL sang mức điện áp của RS232 và ngược lại. Nhìn chung, các chip IC
MAX232 được dùng để điều khiển đường truyền.
Cổng nối tiếp chuẩn RS232 là giao tiếp phổ biến rộng rãi nhất, nó còn gọi là
cổng COM. Cổng này truyền dữ liệu dưới dạng nối tiếp theo một tốc độ do người
lập trình quy định (thường là 1200, 2400, 4800, 9600bps…). Cổng nối tiếp chuẩn
RS232 không phải là hệ thống Bus, do đó nó cho phép dễ dàng tạo ra liên kết dưới
hình thức điểm giữa 2 thiết bị cần trao đổi thông tin với nhau. Chiều dai dữ liệu
truyền đi có thể là 7 hoặc 8 bit, và kèm theo các bit Start, Stop, Parity để tạo thành
một khung truyền (Frame). Do việc truyền dữ liệu là nối tiếp nên tốc độ truyền bị
hạn chế do đó nó thường không được sử dụng trong những ứng dụng cần tốc độ
truyền cao
Khung truyền dữ liệu như sau:
Start bit D0 D1 D2 D3 D4 D5 D6 D7 Parity bit Stop bit
Hình 4.1: Cổng COM 9 chân
Ý nghĩa của các chân quan trọng được mô tả dưới đây:
RXD (receive Data): Đường nhận dữ liệu.
30
TXD (Transmit Data): Đường gửi dữ liệu. DTR (Data Terminal Ready): Báo DTE sẵn sàng .Chân DTR thường ở trạng thái ON khi thiết bị đầu cuối sẵn sàng thiết lập kênh truyền thông (tự động
quay số hay tự động trả lời). DTR ở trạng thái OFF chỉ khi thiết bị đầu cuối
không muốn DCE của nó chấp nhận lời gọi từ xa.
DSR (Data Set Ready): Báo DCE sẵn sàng, ở chế độ trả lời, 1 tone trả lời và
DSR ON sau 2 giây khi Modem nhấc máy.
DCD (Data Carrier Detect): Tín hiệu này tích cực khi Modem nhận được tín
hiệu từ trạm từ xa và nó duy trì trong suốt quá trình liên kết.
RTS (Request To Send): Đường RTS kiểm soát chiều truyền dữ liệu. Khi một trạm cần gửi dữ liệu, nó đóng mạch RTS sang ON để báo hiệu với
modem của nó.
CTS (Clear To Send): Khi CTS chuyển sang ON, Modem xác nhận là DTE
có thể truyền số liệu. Quá trình ngược lại nếu đổi chiều truyền số liệu RI (Ring Indicator): Khi modem nhận được tín hiệu chuông, RI chuyển
ON/OFF một cách tuần tự với chuông điện thoại để báo hiệu cho trạm đầu
cuối. Tín hiệu này chỉ thị rằng một modem xa yêu cầu thiết lập liên kết dial-
up.
4.2. Chuẩn truyền thông RS-485
Khi thực hiện truyền thông tin ở tốc độ cao hoặc qua một khoảng cách lớn
trong môi trường thực, phương pháp đơn cực (single ended) thường không thích
hợp. Việc truyền dẫn dữ liệu vi sai (hay tín hiệu vi sai cân bằng) cho kết quả lớn
hơn trong phần lớn trường hợp. Tín hiệu vi sai có thể loại bỏ ảnh hưởng do sự thay
đổi khi nối đất và giảm nhiễu có thể xuất hiện như điện áp chung trên mạng.
Tuy nhiên, đối với một mạng multi-network thực chất gồm nhiều mạch phát
và nhận cùng nối vào một đường dây bus chung, mỗi node đều có thể phát và nhận
data thì RS485 đáp ứng được yêu cầu này. Chuẩn RS485 cho phép 32 mạch truyền
và nhận cùng nối vào đường dây bus đơn (với bộ repeater tự động và các bộ truyền/
nhận trở kháng cao, giới hạn này có thể mở rộng lên tới 256 node trên một mạng).
31
Bên cạnh đó, RS485 còn có thể chịu được các xung đột data (data collision) và các
điều kiện lỗi trên đường truyền.
Để giải quyết vấn đề xung đột data thường xuất hiện trên mạng multi-drop
network, các đơn vị phần cứng (converters, repeaters, micro-prosessor controls)
được thiết kế luôn duy trì ở trạng thái nhận cho đến khi chúng ta sẳn sàng truyền
data. Một node master sẽ kích khởi một yêu cầu truyền đến một slave node bằng
cách định địa chỉ node đó. Phần cứng phát hiện bit start của ký tự được truyền và tự
động cho phép bộ truyền làm việc. Sau khi một ký tự được truyền đi, phần cứng sẽ
trở về trạng thái nhận sau một vài micro giây. Khi có ký tự mới cần gởi, bộ truyền
sẽ tự động được kích lại. Như vậy, một slave node đã được định địa chỉ có thể đáp
ứng ngay lập tức mà không cần thực hiện một khoảng delay dài để tránh xung đột.
4.3. Cảm biến nhiệt độ
Cảm biến nhiệt độ là dụng cụ chuyển đổi đại lượng nhiệt thành các đại lượng
vật lý khác như: điện áp, dòng điện, áp xuất, độ nở dài, độ giãn nở khối, điện trở,
v.v.... Cảm biến nhiệt độ là phần tử không thể thiếu trong bất kỳ hệ thống đo lường
và điều khiển nhiệt độ nào. Cảm biến nhiệt độ có khả năng nhận biết được tín hiệu
được tín hiệu nhiệt độ một cách chính xác và chuyển đổi thành tín hiệu có thể đo
lường được như điện áp, dòng điện, điện trở, thể tích áp suất.v.v....
Khoảng làm việc: là khoảng nhiệt độ mà cảm biến có khả năng tác động khi chưa bị bão hòa. Khoảng làm việc cao hay thấp là do tính chất cấu tạo và
s
tính lý hóa của từng loại cảm biến quy định.
df dx
Độ nhạy: được định nghĩa bởi biểu thức:
Với: df: sự thay đổi đại lượng đo của cảm biến
dx: sự thay đổi đại lượng vật lý.
Ngưỡng độ nhạy: là mức thấp nhất mà cảm biến có thể phát hiện được.
Tính trễ: còn gọi là quán tính của cảm biến. Tính trễ của cảm biến tạo ra sai
số của phép đo. Tốc độ thay đổi của đại lượng đo phải phù hợp với tính trễ
của cảm biến. Nếu đại lượng đo thay đổi quá nhanh mà quán tính của cảm
32
biến lớn thì không thể đo chính xác được. Mọi cảm biến đều có tính trễ do
ảnh hưởng của vỏ bảo vệ.
Các loại cảm biến nhiệt thông dụng: cảm biến nhiệt trên thực tế có nhiều loại khác nhau, cấu tạo khác nhau, ứng dụng khác nhau. Nhưng chúng có
chung đặc điểm là xác định nhiệt độ của vật chất.
- Cặp nhiệt điện: là dụng cụ đo nhiệt độ thường được sử dụng rộng rãi trong
công nghiệp. Cơ sở chế tạo cặp nhiệt điện dựa trên các nguyên lý sau:
o Hiệu ứng Thomson: qua một dây dẫn có dòng điện I và hiệu nhiệt trên
dây là T1 - T2 thì sẽ có một sự hấp thụ hay tỏa nhiệt.
o Hiệu ứng Pentier: khi có dòng điện đi qua một mối nối của hai dây dẫn
thì tại vị trí mối nối thì sẽ có sự hấp thụ hay tỏa nhiệt.
o Hiệu ứng Seebeck: trong một dây dẫn bất kỳ, khi có sự chênh lệch nhiệt
độ tại một điểm thì ngay tại điểm đó sẽ xuất hiện một suất điện động.
o Định luật Macmut: trong một mạch điện kín của dây dẫn đồng nhất bất
kỳ, sự phân bố nhiệt độ ra sao, suất điện động tổng cộng của mạch luôn
bằng không.
- Nhiệt kế điện trở: nguyên lý làm việc của nhiệt kế là dựa vào sự thay đổi
điện trở theo nhiệt độ của các vật liệu dẫn điện. Có 2 loại nhiệt điện trở:
o Nhiệt điện trở kim loại: thường có hệ số nhiệt lớn, điện trở xuất lớn, tính
ổn định lý hóa tốt và tính thuần khiết của nhiệt trở kim loại.
o Nhiệt điện trở bán dẫn: thường được chế tạo bằng bán dẫn thermistor.
Thành phần chính của thermistor là bột của các oxit kim loại hoặc các
hỗn hợp tinh chế như MgAl2O4 ,Zn2TiO4. Nói chung, nhiệt điện trở bán
Nhiệt điện trở Pct: là loại nhiệt điện trở có hệ số nhiệt dương, nghĩa là
dẫn được chia làm 2 loại:
Nhiệt điện trở Nct: thành phần chính là bột kim loại như: MnAl2O4 và
nhiệt độ tăng thì đi ện trở giảm.
Zn2TiO4. Độ tin cậy của nhiệt điện trở bán dẫn phụ thuộc vào độ tinh
khiết của vật liệu chế tạo.
33
- IC cảm biến nhiệt độ: đây là mạch tích hợp nhận tín hiệu nhiệt độ chuyển đổi
thành điện, cho phép đo ở dạng điện áp hay dòng điện. Một số IC cảm biến
thông dụng là: LX5700, LX135, LM235, LM335, AD590, LM134.v.v...
4.4. Cảm biến CO2
Hình 4.2: Cảm biến CO2
Hệ thống thông gió điều khiển theo yêu cầu DCV (demand - cotrol
ventilation) dựa trên CO2 tương đối tiết kiệm chi phí cho những không gian không liên tục và có tỉ lệ chiếm chỗ dễ thay đổi như phòng hội thảo, thính phòng, nhà hát,
phòng học hay sân bay v.v... Các ứng dụng điển hình khác của công nghệ này là ở
các bệnh viện, casino, nơi người quản lý mong muốn có thể đảm bảo sự thông gió
cần thiết và cần phải nhận được cảnh báo sớm khi có sự cố xảy ra. Cảm biến CO2
thường được gắn trên tường hay có thể tích hợp trong bộ điều nhiệt khả trình.
4.5. Van điện từ (Motorize valve)
Hình 4.3: Van điện từ
Van điện từ trên thực tế có nhiều loại, nhưng cấu tạo khác biệt nhau, nhìn
chung chúng đều dựa trên một nguyên lý cơ bản là có một cuộn điện, trong đó có
34
một lõi săt và một lò so nén vào lõi sắt đó, lõi sắt đó lại tỳ vào đầu một gioăng cao
su. Như vậy, bình thường không có điện thì lò so ép vào lõi sắt, để đóng van, khi
đưa điện vào, cuộn dây sinh ra từ trường hút lõi sắt ra, từ trường này đủ mạnh thắng
được lò so, khi đó van mở ra. Ví dụ các loại van điện từ thường gặp như van cấp
nước máy giặt, van xả nước máy giặt, van đảo chiều của điều hòa không khí.v.v...
Trong hệ thống điều hòa không khí và thông gió, về nguyên tắc hoạt động
của van điện từ nó chịu sự điều khiển của hệ thống BMS, tên của của nó được gọi là
MOTORIZED VALVE. Nó có tác dụng ON/OFF các hệ ống dẫn nhiệt, dẫn khí
cung cấp và chịu sự điều khiển từ bảng điều chỉnh nhiệt độ, bảng này còn điều
khiển tốc độ của quạt trong FCU và nhận tín hiệu từ tủ DDC mà đóng mở tiếp điểm
tác động lên van. Tủ DDC này được lập trình dạng tín hiệu số DI, DO, AI, AO có
trách nhiệm xử lý số do máy tính đưa tới.
Van điện từ (solenoid valve) có nhiều loại: loại 2 ngả, 3 ngả, 5 ngả. Loại
dùng cho khí nén, dùng cho nước, gaz, hơi nước. Loại thường đóng (NC), loại
thường mở (NO), thường đóng: khi chưa có điện thì van đóng, khi có điện thì mở;
loại thường mở thì ngược lại. Điện áp cuộn hút: 24VDC, 110VAC, 220VAC...
35
Chương 5
NGÔN NGỮ LẬP TRÌNH
5.1. Ngôn ngữ lập trình MikroC
5.1.1. Giới thiệu về MikroC cho vi điều khiển PIC
Hình 5.1: Giao diện phần mềm MikroC
MikroC cho PIC là một công cụ mạnh mẽ, tính năng phong phú, phát triển cho vi điều khiển PIC. Nó được thiết kế để cung cấp cho các lập trình với các giải pháp dễ nhất có thể để phát triển các ứng dụng cho các hệ thống nhúng, mà không
ảnh hưởng hiệu suất hoặc điều khiển.
PIC và C phù hợp với nhau sau đây: PIC là con chip 8 -bit phổ biến nhất trên
thế giới, được sử dụng trong một loạt các ứng dụng, và C, được đánh giá cao về
hiệu quả của nó, là sự lựa chọn tự nhiên để phát triển các hệ thống nhúng. MikroC
cho PIC cung cấp một sự tương thích thành công tính năng IDE, trình biên dịch
ANSI compliant tiên tiến, rộng tập hợp các thư viện phần cứng, tài liệu toàn diện,
và rất nhiều sẵn sàng để chạy.
36
5.1.2. Tạo 1 Project mới
File / New / New Project sẽ xuất hiện hình sau
Bấm next
Bấm next tiếp
Bấm next
Hình 5.2: Tạo 1 project mới
37
Bấm Next tiếp tục rồi bấm finish
Hình 5.3: cửa sổ project mới
Chúng ta cần phải chọn các thông số ở cửa sổ project mới này.
5.1.3. Giới thiệu về vi điều khiển PIC18F4550
Hình 5.4: Hình vi điều khiển pic 18f4550
PIC18F4550 là một vi xử lý cơ bản đa chức năng và rẻ. Nó là sản phẩm của
họ vi xử lý PIC thông dụng của công ty Microchip của Mỹ có trụ sở đặt tại
Chandler, Arizona (Mỹ).
Điểm riêng biệt của vi xử lý PI C18F4550 là nó là một trong những PIC hỗ
trợ toàn thể cho USB, nghĩa là có USB gắn trong có sẵn các chân đầu ra để nối trực
tiếp với máy tính mà không cần mạch kéo hay bất cứ mạch gắn ngoài nào khác .
Hỗ trợ tinh thể và dao động ký nhiều tần số như đầu vào và bộ cân bằng nên
bộ xử lý có thể hoạt động với tần số 48 MHz của dao động ký độc lập khi kết nối.
38
Khi kết thúc hoạt động thì chỉnh dao động ký được kết nối (thông qua các bit cấu hình). Làm việc với tốc độ 48 MHz là điều kiện tiên quyết để chuyển sang ch e độ toàn tốc nhỏ' cổng USB. Vì vậy, driver USB chuyển sang chế độ toàn tốc (1.5
Mbyte/giây) qua USB và tương thích với chuẩn USB 2.0. Nó cũng có 35 chân
vào/ra số chung (xem sơ đồ chân ở phần dưới) và có sẵn vỏ bọc gồm DIP -40 nên
rất thuận tiện cho nhà phát triển và những người nghiệp dư quan tâm .
Với bộ nhớ, có 32kb Flash lưu trữ chương trình, 2kb bộ nhớ SRAM bay hơi
và 256 byte EEPROM (bộ nhớ không bay hơi) để lưu trữ dài hạn dữ liệu như cấu
hình ...
Các chỉ thị dài 1 byte với một số ngoại lệ dài 2 byte (CALL, MOVFF,
GOTO LSFR). Sử dụng ca che đường ống để thực thi mã bằng việc khiến các chỉ
thị liên tiếp hoạt động trong 4 xung (độ dài xung) và có 4 lần nhảy xung được thêm
vào.
Các đặc tính đáng chú ý khác là có đồng hồ, ngắt (đồng hồ gắn trong và gắn ngoài) với hai mức ưu tiên và dùng cả hai mức như bộ so sánh tương tự kèm theo
với bộ phát điện the chuẩn có 16 mức (hữu ích khi dùng trigger ở mức phần cứng).
Cuối cùng, CHIP cũng có một bộ chuyển đổi tương tự 10 bit nhưng dao động
ký không đủ yêu cầu về tốc độ cao cần thiết. Vì vậy, máy phát dao động có tốc độ
48 MHz giữa thời gian trễ do truyền tải và các ngắt khác (vòng lặp ...). Không thể
đạt được tốc độ lớn hơn 200 kHz.
5.1.4. Sơ đồ chân
Hình 5.5: Sơ đồ chân vi điều khiển pic 18f4550
39
Hình trên là sơ đồ chân của PIC18F4550 trong hộp DIP-40. Đặc biệt, có thể
nhận ra chân D- và D+ từ kết nối USB (chân 23 và 24).
Bảng 5.1: Bảng mô tả các chức năng chân của PIC18F4550
Chân Hướng Mô tả chức năng và các đặc tính
AN0-AN12 13 kênh Input, Analog, AN6 và AN7 còn dùng I
cho lập trình dữ liệu và xung clock vào.
VDD Nguồn dương cho môđun tương tự
VSS Nguồn Ground cho modul tương tự
I CLKI Lối vào của xung Clock ngoài, luôn kết hợp với
chân OSC1
CLKO O Lối ra của bộ dao động tinh thể, nối với tinh thể
hoặc bộ cộng hưởng trong che độ dao động thạch
anh. Giống như CKLO trong che độ RC hoặc EC.
Luôn kết hợp với chân chức năng OSC2.
RA0-RA6 I/O Port A
RB0-RB7 I/O Port B
RC0-RC7 I/O Port C
RD0-RD7 I/O Port D
Để hiểu rõ chức năng nhiệm vụ của từng chân vi điều khiển Pic 18f4550, chúng ta
tham khảo bảng Data sheet theo địa chỉ sau:
http://ww1.microchip.com/downloads/en/devicedoc/39632e.pdf
5.2. Ngôn ngữ lập trình Delphi
5.2.1. Tổng quan về Delphi
Delphi là một ngôn ngữ lập trình cấp cao, có trình biên dịch hoàn hảo, hỗ trợ
mạnh về các kiểu dữ liệu có cấu trúc và thiết kế dựa trên nền tảng ngôn ngữ lập
trình huớng đối tuợng (OOP: Object-Oriented Programming) của Borland Pascal.
Ngày nay, Delphi đã đuợc phát triển thành môi truờng xây dựng ứng dụng tức thời
RAD (Rapid Application Development). Từ những công cụ của RAD, bạn có thể
giải quyết những vấn đề phức tạp trong qua trình phát triển phần mềm như: lập trình
40
(Database), Internet ứng dụng về cơ sở dữ liệu lập trình mạng và
(Internet/Networking), lập trình Multimedia (Animation, sound), lập trình trò chơi
(Game) cũng như đồ họa (Graphic) hoặc lập trình hệ thống, v.v… không những trên
nền Windows mà còn cho cả Linux và .NET. Trong luận văn này, chúng tôi chỉ
giới thiệu các khái niệm của Delphi trong phạm vi hệ điều hành Windows. Với khả
năng mạnh như vậy của Delphi, bạn an tâm khi dùng nó để triển khai các ứng dụng
của bạn ở quy mô nhỏ hay lớn. Điều cần quan tâm ở Delphi là một ngôn ngữ rất
thân thiện với nguời dùng, phù hợp cho những nguời bắt đầu làm quen với nó cũng
như những nhà lập trình chuyên nghiệp.
5.2.2. Môi trường phát triển tích hợp của Delphi
Môi truờng soạn thảo và thiết kế ứng dụng của Delphi 7 chia ra làm 5 phần: Cửa sổ
chính của chương trình Delphi, cửa sổ thiết kế biểu mẫu (Form designer), cửa sổ liệt
kê các thành phần, đối tượng dạng cây (Object TreeView), cửa sổ thiết lập thuộc
tính đối tuợng (Object Inspector), và cửa sổ soạn thảo mã lệnh (Code Editor). Với
môi truờng IDE này, bạn sẽ có một giao diện (Interface) để thiết kế (Design), biên
dịch (Compile) và gỡ lỗi (Debug).
Hình 5.6: Giao diện dự án tạo mới trong Delphi 7.0
Cửa sổ chính của Delphi 7.0
Cửa sổ thiết kế biểu mẫu
Cửa sổ liệt kê các đối tượng dạng cây
Cửa sổ các thuộc tính và sự kiện của đối tựng
Cửa sổ soạn thảo mã lệnh
41
5.2.2.1. Cửa sổ chính của Delphi
Cửa sổ chính của Delphi chính là cửa sổ có thanh tiêu đề chứa tên dự án
(Project name) mà bạn đang phát triển, nó bao gồm thực đơn chính (Main menu),
Thực đơn chính (Main menu)
thanh công cụ (Toolbar), và bảng thành phần (Component palette).
Hình 5.7: Thanh thực đơn chính
Bao gồm các thực đơn thả xuống (Drop-down menu) như: File, Edit, Search,
View,… và Help. Trong mỗi menu thả xuống có nhiều chức năng khác nhau như:
mở một dự án mới, lưu dự án, biên dịch, gỡ lỗi, chạy chương trình,… mà luận văn
Thanh công cụ (Toolbar)
sẽ trình bày chi tiết ở phần sau.
Hình 5.8: Các thanh công cụ
Trong Delphi có nhiều thanh công cụ, như: thanh công cụ chuẩn (Standard),
thanh gỡ lỗi (Debug), thanh hiển thị (View),… Mỗi nút (Button) trên thanh công cụ
thuờng là một thao tác hay một lệnh mà khi ta Click vào nó sẽ thi hành, ví dụ như:
Bảng chứa các thành phần của Delphi (Component Palette)
Biên dịch (Compile), chạy (Run) hoặc kết thúc chạy chương trình (Program Reset).
Hình 5.9: Bảng chứa các thành phần trong thẻ Standard
42
Thành phần (Component), hay còn đuợc gọi là điều khiển, chính là đối tuợng
có sẵn trong Delphi mà bạn có thể thao tác trên nó trong thời điểm thiết kế form. Có
2 loại thành phần, đó là thành phần trực quan (visual component): nhìn thấy khi
chạy chương trình, và thành phần không trực quan (nonvisual component): không
nhìn thấy khi chạy chuong trình. Mỗi thành phần có một số tính chất riêng, và đuợc
quản lý thông qua các thuộc tính (Properties), sự kiện (Events) và các phương thức
(Methods). Các thuộc tính này giúp bạn có thể quản lý và điều khiển chương trình
của bạn. Khi bạn đặt một thành phần lên form, thì nó sẽ xuất hiện trong cửa sổ
Object TreeView và Object Inspector, sẽ đuợc trình bày ở phần sau. Trong bảng
chứa các thành phần có nhiều thẻ (tab) khác nhau, như thẻ Standard, Addition,
Win32, System, Data Access, ADO, Internet, Rave, Server,… Trên mỗi thẻ chứa
các biểu tuợng (icon) đại diện cho các thành phần.
5.2.2.2. Cửa sổ thiết kế biểu mẫu
Khi bạn tạo một dự án mới, môi truờng phát triển tích hợp IDE của Delphi sẽ
tự tạo ra một biểu mẫu mới (Form) để bạn tùy ý thiết lập các giá trị của thuộc tính
dựa trên Properties, và các thủ tục sự kiện dựa vào Events, được xác định trong
Object Inspector, cho việc thiết kế chương trình. Trong hầu hết truờng hợp, một dự
án thuờng có ít nhất một form. Cùng với các thành phần trên bảng thành phần, bạn
sẽ thiết kế đuợc một giao diện cho chương trình mà bạn đang xây dựng là thân thiện
nhất cho nguời sử dụng.
Hình 5.10: Các Components
43
Các giá trị của form và các giá trị của các component đặt trên form đuợc lưu
trong tập tin form (form file) và có phần mở rộng .dfm, với phần tên được xác định
giống như phần tên của đơn vị chương trình form. Tập tin form này chứa đựng các
giá trị của form cũng như các giá trị của các component mà ta đặt trên form trong
quá trình thiết kế.
5.2.2.3. Cửa sổ liệt kê các đối tượng dạng cây (Object TreeView)
Hình 5.11: Cửa sổ liệt kê các đối tuợng dạng cây trên frmPTB1
Object TreeView liệt kê các thành phần trực quan và không trực quan mà
bạn đặtchúng trên form hiện hành. Mỗi thời điểm chỉ có một form duy nhất đuợc
liệt kê.
5.2.2.4. Cửa sổ các thuộc tính và sự kiện của đối tựng (Object Inspector)
Hình 5.12: thẻ Properties của Form và thẻ Events của Button
44
Cửa sổ Object Inspector của form hay component đều có 2 thẻ: Properties và
Events. Thẻ Properties dùng để xác định các tính chất của đối tuợng nói chung
(Form, component) hiện hành một cách trực quan, chẳng hạn như Caption, Name,
Position, Visible,… Thẻ Events dùng để lập trình sự kiện: xác định những đáp ứng
của đối tuợng khi nhận tác động từ chuột (Mouse) hoặc bàn phím (Keyboard) như:
nhắp chuột (OnClick), đóng cửa sổ (OnClose), gõ phím Enter (OnEnter),… thông
qua các thủ tục sự kiện. Khi thay đổi các giá trị trong thẻ Properties trong quá trình
thiết kế, thì mã lệnh tương ứng của đối tuợng sẽ đuợc thay đổi theo trong cửa sổ
soạn thảo mã lệnh.
5.2.2.5. Cửa sổ soạn thảo mã lệnh
Hình 5.13: Cửa sổ soạn thảo mã lệnh cho form unit untPtb1.Pas
Mỗi một form trong dự án đuợc quản lý trong một tập tin đơn vị chương
trình (Unitfile/ Form unit), tên tập tin của form unit này đuợc đặt tên trong qua trình
lưu (Save) và có phần mở rộng là .pas, nội dung của tập tin form unit này chứa
đựng các khai báo thông thuờng của unit (sẽ đề cập chi tiết phần sau) cũng như các
hàm sự kiện tương ứng cho form và các component trên nó.
Để chuyển đổi giữa cửa sổ soạn thảo mã lệnh với cửa sổ thiết kế biểu mẫu, ta
sử dụng chức nang View/Toggle Form/Unit từ main menu hoặc gõ phím chức năng
45
F12. Ví dụ 1: Trong project “Giai phuong trinh bac nhat” ở trên, ta lưu unit file với
tên untPtb1.Pas và form file sẽ đuợc tự động đặt theo là untPtb1.dfm.
5.2.3. Các kiểu dữ liệu sơ cấp chuẩn, lệnh đơn
Kiểu số nguyên (Integer)
5.2.3.1. Các kiểu dữ liệu sơ cấp (Simple type)
Kiểu số nguyên biểu diễn một tập hợp con các số. Delphi phân làm hai loại số
nguyên được định nghĩa bởi các từ khóa như sau:
Bảng 5.2: Bảng kiểu số nguyên
Từ khóa Phạm vi Kích thước
Integer -2147483648..2147483647 Số nguyên có dấu 32 bit
Cardinal 0..4294967295 Số nguyên dương 32 bit
Trong đó, kiểu Integer còn đuợc chia ra thành một số tập con được định nghĩa
bởi các từ khóa sau:
Bảng 5.3: Bảng các kiểu số nguyên
Từ khóa Phạm vi Kích thước
Shortint -128..127 Số nguyên có dấu 8 bit
Smallint -32768..32767 Số nguyên có dấu 16 bit
Longint -2147483648..2147483647 Số nguyên có dấu 32 bit
Int64 -2^63..2^63-1 Số nguyên có dấu 64 bit
Byte 0..255 Số nguyên duong 8 bit
Word 0..65535 Số nguyên duong 16 bit
Kiểu ký tự (Char)
Longword 0..4294967295 Số nguyên duong 32 bit
Kiểu ký tự cơ bản bao gồm AnsiChar và WideChar. AnsiChar là kiểu ký tự
thông thuờng, chiếm kích thuớc một byte (tương tự bộ ký tự ASCII). WideChar là
kiểu ký tự hai byte, là kiểu ký tự dùng để biểu diễn bộ mã Unicode cho tập hợp ký
tự.
Tuy nhiên, ta vẫn có thể khai báo sử dụng kiểu ký tự với từ khóa Char. Và trên
thực tế thì kiểu Char tương đương với kiểu AnsiChar. Ngoài Char và AnsiChar,
46
Delphi còn hỗ trợ tập ký tự một byte thông qua các kiểu: PChar, PAnsiChar và
AnsiString. Tương tự thì Delphi cũng hỗ trợ tập ký tự Unicode (ngoài kiểu
WideChar) thông qua các kiểu: PWideChar, WideString.
Một ký tự được viết trong cặp dấu nháy đơn (''). Ðể tiện trao đổi thông tin cần
phải sắp xếp, đánh số các ký tự, mỗi cách sắp xếp như vậy gọi là bảng mã. Bảng mã
thông dụng hiện nay là bảng mã ASCII (American Standard Code for Information
Interchange). Hệ mã ASCII dùng nhóm 7 bit hoặc 8 bit để biểu diễn tối đa 128
hoặc 256 ký tự khác nhau và mã hóa theo ký tự liên tục theo cơ số 16.
Bảng 5.4: Bảng mã ASCII với 128 ký tự chuẩn
Hex 0 1 2 3 4 5 6 7
NUL DLE SP @ 0 P p ` 0
16 32 48 64 80 96 112 0
SOH DC1 ! 1 Q q a A 1
17 33 49 65 81 97 113 1
STX DC2 2 R r b B 2 “
18 34 50 66 82 98 114 2
DC3 # 3 S s c C 3
19 35 51 67 83 99 115 3
DC4 $ 4 T t d D 4
20 36 52 68 84 100 116 4
NAK % 5 U u e E 5
21 37 53 69 85 101 117 5
SYN & 6 V v f F 6
22 38 54 70 86 102 118 6
BEL ETB 7 W w g G 7 ‘
23 39 55 71 87 103 119 7
BS CAN ( 8 X x h H 8
24 40 56 72 88 104 120 8
47
I HT EM ) 9 y Y i 9
9 25 41 57 73 89 105 121
J SUB * : z Z j A LF
10 26 42 58 74 90 106 122
K ESC + ; { [ k B VT
11 27 43 59 75 91 107 123
L FS , < | \ l C FF
12 28 44 60 76 92 108 124
M GS - = } ] m D CR
13 29 45 61 77 93 109 125
N SO RS . > ~ ^ n E
14 30 46 62 78 94 110 126
O SI US / ? _ o DEL F
Kiểu số thực (Real type)
15 31 47 63 79 95 111 127
Ở Delphi, kiểu số thực biểu diễn một tập hợp các số mang dấu chấm động
(float, real). Kích thuớc của nó tùy thuộc vào từ khóa mà chúng ta sử dụng trong
khai báo.
Bảng 5.5: Bảng các từ khóa kiểu thực
Từ khóa Phạm vi Kích thước (byte)
Real48 2.9 x 10^-39 .. 1.7 x 10^38 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 8
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 10
Comp -2^63+1 .. 2^63 -1 8
Currency -922337203685477.5808.. 8
922337203685477.5807
Kiểu logic (Boolean)
48
Một dữ liệu thuộc kiểu boolean là một đại lượng có thể nhận được một trong
hai giá trị logic là true (đúng) và false (sai). Delphi cung cấp 4 kiểu boolean sau:
Bảng 5.6: Bảng kiểu logic
Từ khóa Kích thước (byte)
Boolean 1
ByteBool 1
WordBool 2
LongBool 4
Trong đó, kiểu Boolean là kiểu tương thích với kiểu Boolean của Pascal và
được ưa thích hơn cả. Một giá trị kiểu ByteBool, LongBool hoặc WordBool được
xem là true nếu nó có giá trị khác 0, nguợc lại là false.
5.2.3.2. Lệnh đơn (Simple statement)
Lệnh đơn là lệnh không chứa bất kỳ câu lệnh nào khác. Các lệnh đơn bao gồm: lệnh
Lệnh gán (Assignment statement)
gán, lệnh gọi hàm và thủ tục, lệnh nhảy (goto).
Một trong các lệnh đơn giản và cơ bản nhất của Delphi là lệnh gán. Mục đích
của lệnh này là gán cho một biến đã khai báo một giá trị nào đó cùng kiểu (hay
tương thích) với biến.
Cú pháp của lệnh gán là:
Biến := biểu_thức;
Lệnh gán sẽ đặt lại giá trị hiện hành của biến bằng giá trị mới nằm bên phải
Lệnh gọi thủ tục và hàm
toán tử gán (dấu hiệu :=).
Trong lập trình OOP, thuật ngữ hàm (Function), thủ tục (Procedure) và phương
thức (Method) là khái niệm quen thuộc với nguời lập trình. Để các bạn có thể nắm
bắt được kiến thức lập trình trong Delphi, luận văn này đưa ra khái niệm một cách
ngắn gọn như sau:
49
Hàm và thủ tục được gọi chung là chương trình con. Hàm được xây dựng thông
qua tên hàm và danh sách các tham số hình thức nếu có, mỗi hàm thì luôn trả về
duy nhất một giá trị. Còn thủ tục thì có tên thủ tục và danh sách các tham số hình
thức nếu có. Khác với hàm, thủ tục không trả về một giá trị nào cả, nó thuờng bao
gồm một dãy các câu lệnh cần được thực hiện một cách tuần tự để giải quyết một
công việc nào đó.
Bạn cần phân ra 2 giai đoạn rõ ràng: Xây dựng chương trình con, và sử dụng
Lệnh Goto
chương trình con.
Từ thân chương trình con, bạn có thể sử dụng lệnh goto để chuyển huớng thực hiện
chương trình tới một vị trí bất kỳ thông qua một nhãn đã được khai báo truớc.
Goto nhãn; Cú pháp lệnh goto:
Label Tên_nhãn; Với nhãn được khai báo với cú pháp sau:
Lệnh goto là lệnh nhảy không điều kiện, nó chuyển huớng thực thi của chương trình
đến vị trí mà nhãn đang đứng.
Trong cách lập trình OOP, lệnh goto tỏ ra bị lỗi thời và rất ít khi được người lập
trình sử dụng.
Ví dụ: Minh họa lệnh goto để tính biểu thức a/b.
Từ File/New/Other, DClick vào Console Application để mở ra mộ dự án mới và
nhập các dòng lệnh để hoàn chỉnh như hình sau:
Hình 5.14: Ví dụ minh họa lệnh goto và khai báo nhãn - label
50
5.2.4. Các lệnh có cấu trúc
5.2.4.1. Lệnh ghép (Compound statement)
Một nhóm câu lệnh đơn được đặt giữa từ khoá begin ... end; sẽ tạo thành một
câu lệnh ghép.
Trong Pascal ta có thể đặt các lệnh ghép con trong các lệnh ghép lớn hơn bao
ngoài của nó và có thể hiểu tương tự như cấu trúc ngoặc đơn ( ) trong các biểu thức
Toán học.
* Sơ đồ:
begin
Lệnh 1;
Lệnh 2;
...
Lệnh n;
end;
Ở sơ đồ minh họa trên ta thấy các lệnh được nhóm lại thành từng khối (block).
Một khối lệnh bắt đầu bằng begin và chấm dứt ở end; Trong một khối lệnh cũng có
thể có các khối lệnh con nằm trong nó. Một khối chuong trình thuờng được dùng
nhóm từ 2 lệnh đơn trở lên để tạo thành một công việc của các lệnh có cấu trúc, bạn
sẽ gặp khái niệm này trong các ví dụ ở các phần sau.
5.2.4.2. Lệnh cấu trúc rẽ nhánh
Lệnh có cấu trúc rẽ nhánh được sử dụng trong truờng hợp chương trình chỉ cần
Lệnh if ... then
chọn một trong các công việc để thực hiện tại một thời điểm.
Cú pháp:
if < điều_kiện> then công_việc;
Ý nghĩa:
♦ Nếu điều_kiện có giá trị đúng thì sẽ thực hiện công_việc rồi kết thúc lệnh.
♦ Nguợc lại (điều kiện có giá trị sai) thì sẽ bỏ qua công_việc và kết thúc lệnh.
Ví dụ 1: Đoạn chương trình sau mô tả cách thực hiện lệnh if ... then
51
begin
{ Lệnh mô tả một câu lệnh if ..then đơn giản với điều kiện luôn có giá trị True và
chương trình thực hiện công việc chỉ có 1 lệnh đơn }
if true then
ShowMessage( ' Dieu kien dung.' );
// Lệnh này giống như lệnh trên nhưng chương trình thực hiện công việc bao gồm
2 lệnh
if (1 = 1) or ( true >= false) then //điều kiện có trị đúng
begin //bắt đầu lệnh ghép
ShowMessage( ' Dieu kien dung ' );
ShowMessage( ' Chao cac ban den voi Delphi - phiên bản 7.0' );
end; //hết lệnh ghép
if 'Delphi' = 'Java' then // điều kiện có giá trị sai
ShowMessage( ' Oh, dieu kien sai. Lenh se bi bo qua ' );
Lệnh if ... then ... else
end;
Cú pháp:
if <điều kiện> then
công_việc_1
else
công_việc_2;
Ý nghĩa:
♦ Nếu điều kiện đúng thì thực hiện công việc1 (không thực hiện công việc 2).
♦ Nguợc lại (điều kiện sai) thì sẽ thực hiện công việc 2 (không thực hiện công việc
1).
Chú ý:
- Điều kiện là một biểu thức Boolean (có giá trị đúng: True hoặc sai: False).
- Nếu công việc sau then hoặc sau else có nhiều hơn một lệnh thì ta phải gói lại
trong ghép begin ... end;
52
- Toàn bộ lệnh if ... then ... else xem như một lệnh đơn.
- Lệnh đứng truớc từ khóa else thì không có dấu chấm phẩy (;) ở cuối lệnh.
Ví dụ 2: Đoạn chương trình sau mô tả cách thực hiện lệnh if ... then ... else
var x: single;
begin
if 4>=4 then
begin
x := 2*sin(PI/2)/sqrt(9);
ShowMessage( ' x = ' + FormatFloat('0.000', x);
end //không có dấu ;
else ShowMessage( 'Dieu kien sai');
// Kết quả hiển thị giá trị biến x = 0.667
// Các lệnh If lồng vào nhau
if true then
if false then ShowMessage(' I ' )
else ShowMessage(' LOVE ' )
else ShowMessage(' DELPHI ' );
end;
Lệnh Case ... of
// Kết quả hiển thị từ: LOVE
Cú pháp, ý nghĩa
Case
GT1 : công_việc_1 ; // Nếu biểu_thức = GT1 (giá trị 1) thì thực hiện
công_việc_1,
GT2 : công_việc_2 ; // nếu biểu_thức = GT2 thì thực hiện công_việc_2,
…
GTn : công_việc_n ; // nếu biểu_thức = GTn thì thực hiện công_việc_n
[else công_việc_0 ;] //Ngược lại sẽ thực hiện công_việc_0
End; //end case
53
Chú ý:
- Lệnh Case ... of có thể không có else
- Biểu thức trong Case... of phải có kiểu dữ liệu rời rạc/đếm được như: Integer,
Char,...
- Nếu muốn ứng với nhiều giá trị khác nhau của biểu thức mà máy vẫn thi hành
một Công_việc thì các giá trị này có thể viết trên cùng một hàng cách nhau bởi dấu
phẩy (,): k1, k2, ..., kp : công_việc;
Ví dụ: Đoạn chương trình sau mô tả cách sử dụng lệnh Case ... of
var color: integer ;
begin
color := StrToInt(InputBox('Hop nhap lieu', 'Nhap so tu 1 den 5','1'));
case color of
1, 2: ShowMessage('Mau do');
3, 4: ShowMessage('Mau trang');
5: ShowMessage('Mau xanh');
end;
end;
5.2.4.3. Lệnh lặp có số lần xác định truớc
Lệnh lặp for cho phép chương trình thực hiện công việc nhiều lần và với số lần lặp
đã biết trước. Lệnh for có 2 dạng:
For ... to ... do : đếm lên
Cú pháp For ... to ... do : đếm lên
và For ... downto ... do : đếm xuống.
for < biến_đếm := trị_đầu > to < trị_cuối > do công_việc;
Ý nghia lưu đồ:
Đầu tiên kiểm tra trị đầu nhỏ hơn hoặc bằng trị cuối không? Nếu:
+ Sai, kết thúc lệnh.
+ Đúng, thì thực hiện công việc và tăng biến đếm lên 1, sau đó kiểm tra biến
đếm có còn nhỏ hơn hoặc bằng trị cuối không? Nếu đúng thì lặp lại việc thực hiện
54
công việc cho đến khi biến đếm không còn nhỏ hơn hoặc bằng trị cuối nữa thì thoát
khỏi vòng lặp và kết thúc lệnh.
Chú ý: Biến đếm, trị đầu, trị cuối là kiểu dữ liệu đếm được (rời rạc) như: số
Cú pháp For ... downto ... do : đếm xuống
nguyên, Char, kiểu liệt kê (Enum).
for < biến_đếm := trị_đầu > downto < trị_cuối > do công_việc;
Ý nghĩa: Tương tự như đếm lên. Lặp đếm xuống có trị_đầu >= trị cuối, mỗi lần lặp
biến đếm tự động giảm xuống 1.
Lệnh lặp while .. do
5.2.4.4. Lệnh lặp có số lần không xác định truớc
Lệnh lặp while..do là vòng lặp kiểm tra điều kiện trước và thực hiện công việc sau.
Nó cho phép chương trình thực hiện công việc nhiều lần và với số lần lặp không
được xác định trước.
Cú pháp tổng quát
while <điều_kiện> do công_việc;
Ý nghĩa
Đầu tiên là kiểm tra điều kiện, nếu điều kiện đúng thì thực hiện công việc, rồi quay
trở về điều kiện để kiểm tra. Vòng lặp sẽ cứ tiếp tục cho đến khi điều kiện không
còn đúng nữa thì sẽ kết thúc lệnh.
Chú ý
Điều kiện trong cấu trúc lặp while … do là một biểu thức trả về giá trị kết quả có
Lệnh lặp Repeat ... until
kiểu Boolean (kết quả chỉ có 2 giá trị là đúng (True) hoặc Sai (False)).
Lệnh lặp repeat ... until là vòng lặp thực hiện công việc trước, kiểm tra điều kiện
sau. Nó cho phép chương trình thực hiện công việc nhiều lần và với số lần lặp
không được xác định truớc.
Cú pháp
repeat
công_việc;
55
until điều_kiện;
Ý nghĩa:
Lệnh lặp repeat ... until sẽ tiếp tục thực hiện công việc cho đến khi điều kiện được
thỏa, nghĩa là khi điều kiện có giá trị True thì sẽ thoát khỏi vòng lặp.
Chú ý:
- Trong lệnh lặp repeat..until, nếu công việc có từ hai lệnh trở lên thì không nhất
thiết phải dùng cặp từ khóa begin ... end; để nhóm các lệnh đơn này lại.
- Trong lệnh lặp while ... do, do điều kiện được kiểm tra đầu tiên nên công việc có
thể không được thực hiện lần nào. Còn trong lệnh lặp repeat ... until thì công việc
được thực hiện trước và điều kiện sau từ khóa until được kiểm tra sau nên công việc
được thực hiện ít nhất một lần.
56
Chương 6
XÂY DỰNG MÔ HÌNH ĐIỀU KHIỂN
HỆ THỐNG HVAC BẰNG BMS
6.1. Xây dựng mô hình phần cứng
6.1.1. Thiết kế sơ đồ mạch điều khiển chính
6.1.1.1. Sơ đồ nguyên lý
Hình 6.1: Mạch điều khiển chính
57
Ghi chú:
J1: nguồn 12VDC
S1: Nút nhấn Reset
S2: Nút nhấn Mode
S3: Nút nhấn Tăng
S4: Nút nhấn Giảm
S5: Nút nhấn Enter
R1, R2, R3: Điện trở thanh 10K
SV 1-1 đến SV 1-6: Dùng để nạp cho vi điều điển PIC 18f4550
PIC 18f4550: vi điều khiển dùng để xử lý lệnh
JP1: Jack xuất tín hiệu điều khiển Cooling Fan, Chiller Water Pump, Cooling Water
Pump, Chiller, FCU
JP2: Jack xuất tín hiệu điều khiển Lighting, Damper và báo trạng thái FCU, Chiller
water pump, Cooling water pump và Chiller
RJ45: cổng kết nốt truyền dữ liệu
CO2 sensor: cảm biến CO2
T1-T5: cảm biến nhiệt độ
6.1.1.2. Sơ đồ mạch in
Hình 6.2: Sơ đồ mạch in mạch điều khiển chính
58
6.1.1.3. Lắp ráp linh kiện
Hình 6.3: Lắp ráp linh kiện
6.1.2. Thiết kế sơ đồ mạch rơ le đóng, cắt
6.1.2.1. Sơ đồ nguyên lý
Hình 6.4: Sơ đồ nguyên lý mạch rơle đóng, cắt rơ le
59
Ghi chú:
OK1 - OK6: các opto triac
T2 – T7: các triac
T1: Transistor C1815
Relay1 – Relay 7: Relay điều khiển Cooling Fan, Chiller Water Pump, Cooling
water pump, Chiller, FCU, Damper, Lighting
R1 – R13: 1k
R14 – R20: 470
6.1.2.2. Sơ đồ mạch in
Hình 6.5: Sơ đồ mạch in rơle đóng cắt
6.1.2.3. Lắp ráp linh kiện
Hình 6.6: Hình lắp ráp linh kiện rơle đóng cắt
60
6.1.3. Thiết kế sơ đồ mạch hồi tiếp tín hiệu
6.1.3.1. Sơ đồ nguyên lý
Hình 6.7: Sơ đồ nguyên lý mạch hồi tiếp tín hiệu
Ghi chú:
OK1 – OK7: là các opto transistor
X1-2: +5VDC
X1-1: GND
R1 – R14: Các điện trở 1k
JP1: Báo các trạng thái hồi tiếp
6.1.3.2. Sơ đồ mạch in
Hình 6.8: Sơ đồ mạch in mạch hồi tiếp tín hiệu
61
6.1.3.3. Lắp ráp linh kiện
Hình 6.9: Sơ đồ mạch lắp ráp linh kiện mạch hồi tiếp tín hiệu
6.2. Thiết kế sơ đồ điều khiển
6.2.1. Thiết kế mạch động lực
Hình 6.10: Sơ đồ mạch động lực
62
Mạch điều khiển BMS
6.2.2. Thiết kế mạch điều khiển
Hình 6.11: Sơ đồ mạch điều khiển
63
6.3. Xây dựng mô hình hệ thống HVAC
6.3.1. Hình ảnh mô hình
Quạt giải nhiệt
Tháp giải nhiệt
Nơi cấp lạnh
Quạt dàn lạnh
Bồn chứa nước làm lạnh
Bồn chứa nước giải nhiệt
Máy nén Bảng điều khiển Bơm nước giải nhiệt Bơm nước lạnh
Hình 6.12: Mô hình hệ thống HVAC
6.3.2. Thiết bị trong mô hình hệ thống HVAC Máy nén làm lạnh (ký hiệu là “CHL” như trong phần mềm điều khiển)
Bồn chứa nước giải nhiệt dàn nóng
Bồn chứa nước làm lạnh
Bơm nước giải nhiệt dàn nóng (ký hiệu là “CWP” như trong phần mềm điều
khiển)
Bơm nước lạnh từ bầu chứa nước lạnh (ký hiệu là “CHWP” như trong phần
mềm điều khiển)
Dàn lạnh và quạt dàn lạnh: dùng để cung cấp lạnh cho những nơi cần sử dụng
64
(ký hiệu là “FCU” như trong phần mềm điều khiển)
Tháp giải nhiệt và quạt tháp giải nhiệt: dùng để giải nhiệt cho dàn nóng của máy
nén làm lạnh (ký hiệu là “CT” như trong phần mềm điều khiển)
Cảm biến CO2 và cửa lấy gió dùng để điều hòa lượng không khí thích hợp
trong phòng.
Các cảm biến nhiệt độ được gắn trên đường ống để báo trạng thái nhiệt độ đi và
về.
Các rơ le dùng để đóng, mở các bơm và các nút nhất điều khiển
6.3.3. Mục đích của mô hình hệ thống HVAC
Mô hình hệ thống HVAC phải đảm bảo các yêu cầu về điều hòa không khí
và thông gió, làm cho môi trường làm việc, sinh hoạt của con người không bị thiếu
oxy và hàm lượng CO2 trong không khí nằm trong khoảng cho phép (từ 40ppm đến
45ppm).
Mô hình hệ thống HVAC có thể điều khiển tự động hoặc không tự động,
kiểm soát được nhiệt độ môi và tự động cấp gió từ ngoài vào nếu môi trường làm
lạnh có hàm lượng CO2 lớn hơn 45ppm (tức 45 phân tử CO2 trên 1.000.000 phân
tử khí).
65
6.4. Lưu đồ giải thuật
6.4.1. Lưu đồ giải thuật kiểm tra giờ ON/OFF cho hệ thống Chiller
Hình 6.13: Lưu đồ giải thuật kiểm tra giờ ON/OFF của hệ thống Chiller
66
6.4.2. Lưu đồ giải thuật kiểm tra ON/OFF Damper
Hình 6.14: Lưu đồ giải thuật kiểm tra ON/OFF Damper
67
6.4.3. Lưu đồ giải thuật kiểm tra ON/OFF đèn
Hình 6.15: Lưu đồ giải thuật kiểm tra ON/OFF đèn
68
6.5. Kết quả mô phỏng đạt được của mô hình hệ thống HVAC
Mô hình hệ thống HVAC có thể cài đặt nhiệt độ, hiển thị nhiệt độ, CO2 và
chọn các trạng thái điều khiển hệ thống “ON”, “OFF”, “AUTO” từ màn hình LCD
trên board.
Mô hình hệ thống HVAC có thể kết nối với máy tính để điều khiển thông
qua phần mềm và giao diện được lập trình sẵn.
Mô hình hệ thống HVAC có thể tự động chạy và tắt theo thời gian đã chọn của người vận hành. Tự động ngưng cấp lạnh khi môi trường làm lạnh đã đạt đến
nhiệt độ đặt trước.
Các kết quả đạt được từ mô hình như sau:
Điều khiển hệ thống Chiller System “AUTO”
Ta mở giao diện hệ thống chiller từ máy tính và mở MCB nguồn trên bảng điều
khiển đồng thời kết nối dây điều khiển từ bảng điều khiển đến máy tính như hình
sau
Hình 6.16: Kết nối phần mềm với mô hình điều khiển hệ thống Chiller
Nhiệt độ nước lạnh, nước giải nhiệt và nhiệt độ phòng sẽ hiển thị trên màn hình
LCD của board mạch và trên màn hình giao diện máy tính như hình dưới đây
69
Hình 6.17: Hiển thị nhiệt độ trên LCD board mạch
Hiển thị nhiệt độ nước giải nhiệt
Hiển thị nhiệt độ nước làm lạnh
Hình 6.18: Hiển thị nhiệt độ trên giao diện màn hình Chiller System
70
Trong đó: CWS Temp 290C: báo trạng thái nhiệt độ nước giải nhiệt từ chiller đến tháp giải
nhiệt CWR Temp 290C: báo trạng thái nhiệt độ nước giải nhiệt từ tháp giải nhiệt về
chiller CHWS Temp 290C: báo trạng thái nước làm lạnh từ chiller cấp cho FCU (quạt dàn
lạnh) để làm lạnh khu vực cần làm lạnh CHWR Temp 290C: báo trạng thái nước làm lạnh từ FCU (quạt dàn lạnh) về
chiller để chiller làm lạnh.
Chuyển công tắc trên bảng điều khiển sang “AUTO”.
Bảng điều khiển công tắc chuyển sang “AUTO”
Hình 6.19: Chuyển công tắc trên bảng điều khiển sang “AUTO”
Từ giao diện màn hình hệ thống chiller trên máy tính, ta cài đặt nhiệt độ và
thời gian như sau
71
Cài đặt nhiệt độ nước giải nhiệt
Cài đặt thời gian “ON” và “OFF” hệ thống
Thời gian thực Cài đặt nhiệt độ nước làm lạnh
Hình 6.20: Cài đặt nhiệt độ nước làm lạnh và nước giải nhiệt
- Cài đặt nhiệt độ nước làm lạnh (như hình trên 100C), chú ý nhiệt độ cài đặt
nước làm lạnh của hệ thống phải nhỏ hơn nhiệt độ CHWS Temp tại thời đó
thì hệ thống mới tự động được.
- Cài đặt nhiệt độ làm mát cho nước giải nhiệt (như hình sau là 260C), chú ý
nhiệt độ cài đặt làm mát nước phải nhỏ hơn nhiệt độ thực CWS Temp tại
thời điểm đó thì quạt Colling mới hoạt động.
- Cài đặt thời gian mở hệ thống và thời gian tắt hệ thống (như hình sau thời
gian mở hệ thống 8h0 và thời gian tắt hệ thống 23h0). Thời gian thực là
12h27 (thời gian thực phài nằm trong khoảng Time ON và Time OFF thì hệ
thống mới tự động được)
Từ giao diện màn hình máy tính ta chọn Chiller system “AUTO”
- Chiller (CHL): chuyển sang “Auto” và hoạt động (rơ le máy nén làm lạnh
sáng đèn)
72
- Bơm nước lạnh (CHWP): chuyển sang “Auto” và hoạt động (rơ le bơm nước
lạnh sáng đèn)
- Bơm nước giải nhiệt (CWP): chuyển sang “Auto” và hoạt động (rơ le bơm
nước giải nhiệt sáng đèn)
- Quạt giải nhiệt nước (CT): chuyển sang “Auto” và Hoạt động (rơ le quạt giải
nhiệt sáng đèn)
- FCU: chuyển sang “Auto” và hoạt động (rơ le quạt dàn lạnh sáng đèn)
Cài đặt nhiệt độ nước giải nhiệt
Hệ thống hoạt động chế độ “AUTO”
Thời gian thực Cài đặt nhiệt độ nước làm lạnh
Hình 6.21: Hệ thống Chiller hoạt động chế độ “AUTO”
73
Quan sát sự thay đổi nhiệt độ theo thời gian
Nhiệt độ nước giải nhiệt thay đổi
Nhiệt độ nước làm lạnh thay đổi
Hình 6.22: nhiệt độ thay đổi theo thời gian (lần 1)
Nhiệt độ nước thay đổi theo thời gian
Nhiệt độ nước lạnh thay đổi theo thời gian
Hình 6.23: nhiệt độ thay đổi theo thời gian (lần 2)
74
Khi nhiệt độ nước làm lạnh nhỏ hơn nhiệt độ cài đặt thì chiller “OFF”
Trạng thái chiller “OFF”
Nhiệt độ cài đặt
Nhiệt độ làm lạnh
Rơ le Chiller “OFF”
Hình 6.24: Chiller “OFF” khi nhiệt độ làm lạnh nhỏ hơn nhiệt độ đặt
75
Khi nhiệt độ nước giải nhiệt nhỏ hơn nhiệt độ đặt thì quạt giải nhiệt “OFF”
Nhiệt độ đặt
Rơ le quạt giải nhiệt “OFF”
Nhiệt độ nước giải nhiệt
Hình 6.25: Quạt giải nhiệt “OFF” khi nhiệt độ nước nhỏ hơn nhiệt độ đặt
Điều khiển hệ thống Chiller System “ON”
- Từ giao diện màn hình máy tính Chiller System “AUTO”chuyển sang “ON”.
Nếu Chiller (CHL), Bơm mước lạnh (CHWP), Bơm nước giải nhiệt (CWP),
Quạt giải nhiệt nước (CT) ban đầu ở trang thái “AUTO” thì khi chuyển
Chiller System sang “ON” vẫn hoạt động bình thường. Nhưng không tự động
tắt mở theo thời gian “Time ON” và thời gian tắt “Time OFF” và cũng không
76
tắt theo nhiệt độ khi nhiệt độ tại thời điểm đó nhỏ hơn nhiệt độ cài đặt, mà
trạng thái nhiệt độ thay đổi tại mọi thời điểm vẫn hiển thị
ON ON ON ON ON
Trạng thái Chiller System “ON”
Hiển thị nhiệt độ
Hiển thị nhiệt độ
Hình 6.26: Điều khiển Chiller System chuyển từ “AUTO” sang :ON”
- Từ giao diện màn hình máy tính Chiller System “OFF”chuyển sang
“ON”.Nếu Chiller (CHL), Bơm mước lạnh (CHWP), Bơm nước giải nhiệt
(CWP), Quạt giải nhiệt nước (CT) ban đầu ở trạng thái “OFF” khi ta chuyển
Chiller Systen sang “ON” thì ta phải mơ “ON” từng thiết bị và không tự
động mở theo thời gian “Time ON” và tắt theo thời gian “Time OFF” và
cũng không tắt theo nhiệt độ khi nhiệt độ tại thời điểm đó nhỏ hơn nhiệt độ
77
cài đặt, mà trạng thái nhiệt độ thay đổi tại mọi thời điểm vẫn hiển thị
Trang thái Chiller System “ON”
Hiển thị nhiệt độ
Hiển thị nhiệt độ Mở “ON” từng thiết bị
Hình 6.27: Điều khiển Chiller System chuyển từ “OFF” sang :ON”
Điều khiển hệ thống Chiller System “OFF”
Từ giao diện màn hình hệt thống Chiller ta chọn Chiller System ta chọn “OFF” thì
Trạng thái Chiller System “OFF”
toàn bộ thiết bị trong hệ thống Chiller đều “OFF”
Trạng thái “OFF”
Hình 6.28: Chiller System ở trạng thái “OFF”
78
Điều khiển FCU “AUTO” - Lưu ý FCU (quạt dàn lạnh) sẽ tự động chạy khi hệ thống Chiller System
“AUTO”, nhiệt độ phòng (nhiệt độ nơi cần làm lạnh) lớn hơn nhiệt độ cài đặt
ON
Nhiệt độ phòng cài đặt
ON
Nhiệt độ phòng tại thời điểm
Hình 6.29: FCU (quạt dàn lạnh) chạy theo nhiệt độ đặt
79
Điều khiển FCU “ON”
- Lưu ý FCU (quạt dàn lạnh) chạy “ON” khi hệ thống Chiller System “ON”,
và không tự động tắt theo nhiệt độ cài đặt. Nhưng nhiệt độ phòng vẫn hiển
thị trên màn hình
Hiển thị nhiệt độ Hiển thị nhiệt phòng độ phòng
Trạng thái FCU “ON” Trạng thái FCU “ON”
Hình 6.30: FCU (quạt dàn lạnh) hoạt động ở trạng thái “ON”
80
Điều khiển FCU “OFF”
Nếu FCU chọn trạng thái “OFF” thì sẽ luôn luôn tắt
OFF
Hình 6.27: FCU luôn tắt khi chọn “OFF” FCU “OFF”
Trạng thái FCU “OFF”
Hình 6.31: FCU (quạt dàn lạnh) ở trạng thái “OFF”
- Nếu Damper chọn “AUTO” khi lượng CO2 trong khu vực làm lạnh lớn hơn
lượng CO2 cài đặt thì mở cửa gió cấp không khí từ ngoài vào. Ngược lại thì
đóng cửa gió.
81
Cửa gió mở CO2 khu vực làm lạnh
CO2 cài đặt
Damper “AUTO”
Hình 6.32: Trạng thái Damper ở chế độ “AUTO”
- Nếu Damper chọn “ON” thì luôn luôn mở cửa gió và không tác động theo
CO2 cài đặt, nhưng vẫn hiển thị CO2 trong khi vực làm lạnh
Cửa gió mở Hiển thị CO2 khu vực làm lạnh
Damper “ON”
Hình 6.33: Trạng thái Damper ở chế độ “ON”
82
- Nếu Damper chọn “OFF” thì luôn luôn đóng cửa gió và không tác động theo
CO2 cài đặt, nhưng vẫn hiển thị CO2 trong khi vực làm lạnh
Cửa gió đóng Hiển thị nhiệt độ khu cực làm lạnh
Damper “OFF”
Hình 6.34: Trạng thái Damper ở chế độ “OFF”
Điều khiển đèn ở trạng thái “AUTO”
- Từ giao diện màn hình Light Control chọn “AUTO” thì đèn sẽ mở theo thời
gian Time ON và tắt theo thời gian Time OFF. Nếu thời gian thực nằm trong
khoảng Time ON và Time OFF thì đèn sáng. Ngược lại đèn tắt.
Đèn sáng
Trạng thái đèn “AUTO”
Thời gian set
Thời gian thực
Hình 6.35: Đèn ở trạng thái “AUTO”
83
Điều khiển đèn ở trạng thái “ON”
Từ giao diện màn hình Light Control chọn “ON” thì đèn luôn luôn sáng và không
phụ thuộc vào thời gian đặt
đèn sáng
Trạng thái đèn “ON”
Hình 6.36: Đèn ở trạng thái “ON”
Điều khiển đèn ở trạng thái “OFF”
Từ giao diện màn hình Light Control chọn “OFF” thì đèn luôn luôn tắt
Trạng thái đèn “OFF” Đèn tắt
Hình 6.37:Đèn ở trạng thái “OFF”
84
6.6. Nhận xét
Trong quá trình thực hiện mô hình phần cứng và phần mềm, tôi không thể
tránh khỏi những khó khăn vì kiến thức còn giới hạn. Nhưng nhờ sự giúp đỡ của
giáo viên hướng dẫn và các bạn đồng nghiệp, tôi đã hoàn thành được yêu cầu đặt ra
của đề tài.
Tuy nhiên, trong bước đầu mô phỏng có xảy ra những sai số hay bị nhiễu,
nhưng dần dần đã khắc phục được và hệ thống hoạt động tương đối ổn định.
Thông qua đề tài này, tôi cũng đư ợc cung cấp thêm nhiều kiến thức về BMS,
hệ thống HVAC.v.v… có thể giúp ích cho công việc của tôi. Đồng thời đây cũng là
tài liệu tham khảo bổ ích cho các bạn sinh viên đang học tập và nghiên cứu về hệ
thống BMS.
85
Chương 7
KẾT LUẬN VÀ HƯỚNG NGHIÊN CỨU PHÁT TRIỂN
Đây là một đề tài có tính chất thực tế cao, có thể ứng dụng trong các tòa nhà
cao tầng có sử dụng BMS để điều khiển và giám sát thiết bị. Trong đề tài này, tôi
chỉ thực hiện một phần trong hệ thống BMS là xây dựng mô hình điều khiển hệ
thống HVAC bằng BMS. Ngoài ra BMS còn ứng dụng điều khiển và giám sát các
hệ thống khác trong tòa nhà như: hệ thống phòng cháy chữa cháy, hệ thống phân
phối điện hạ thế, hệ thống máy phát, hệ thống phát thanh, hệ thống camera, hệ
thống cấp nước sinh hoạt và xử lý nước thải.v.v…
Tuy nhiên, để hoàn thiện một hệ thống BMS có đầy đủ các tính năng nêu
trên thì phải cần nhiều thời gian để nghiên cứu. Cho nên, sau này nếu có điều kiện
tôi sẽ nghiên cứu và phát triển thêm đề tài này với đầy đủ các hệ thống có thể ứng
dụng trong tòa nhà cao tầng.
Với thời gian giới hạn và kiến thức còn hạn chế, do đó trong quá trình thực
hiện đề tài không tránh khỏi những sai sót. Tôi mong được sự góp ý từ các thầy cô,
bạn bè đồng nghiệp và các bạn sinh viên.
86
TÀI LIỆU THAM KHẢO
[1] TS. Nguyễn Trung Hòa. Hướng dẫn thiết kế hệ thống quản lý tòa nhà. Nhà
xuất bản Xây Dựng.
[2] ThS. Vũ Duy Linh, ThS. Nguyễn Nhị Gia Vinh, ThS. Lê Thị Diễm. Lý thuyết
lập trình căn bản Delphi. Trường ĐH Cần Thơ – năm 2010.
[3] Nguyễn Đình Phú. Vi điều khiển lý thuyết và thực hành. Trường ĐH Sư Phạm
Kỹ Thuật TP. HCM.
[4] Những ví dụ trong lập trình Delphi - Distributed by Diễn đàn Tin học –
http://www.diendantinhoc.net
[5] Hermann Merz , Thomas Hansemann, Christof Hübner. Building Automation.
Communication Systems with EIB/KNX, LON and BACnet.
[6] Stephen L. Herman, Bennie L. Sparkman. Electricity & Controls for
HVAC/R.
[7] The reading text for this course was originally written by Steven T. Taylor, P.E.vIt was then partially revised by Ross Montgomery P.E.vbefore being edited and partly rewritten by Robert McDowall P.Eng. Fundamentals of HVAC Control Systems.
www.mikroc.com
[8] [9] http://www.diendantinhoc.net
[10] http://ww1.microchip.com/downloads/en/devicedoc/39632e.pdf
PHỤ LỤC
1. Cảm biến Co2
2. Lập trình phần mềm bằng ngôn ngữ MikroC cho các phần cứng vi điều
khiển Pic 18f4550
- Dùng để hiển thị nhiệt độ các cảm biến, lưu lượng CO2 trong không khí,
chọn các trạng thái điều khiển “ON”, “OFF”, “AUTO” cho hệ thống và đưa
tính hiệu điều khiển cho các bơm hoạt động.
- Nội dung lập trình
//***************************************************************
// De tai: Xay Dung Mo Hinh Dieu Khien He Thong HVAC Bang BMS
// Tac gia: Nguyen Anh Tuan
// Ngay: 20-9-2012
// ket noi voi LCD: PORTD D2 - D7 noi voi chan RS - D7 cua LCD
// PORTE RE2 - DS18x20
//****************** Ghi chú các biến trong hệ thống*****************
// add = 1 ; hvac_mode 1 off; 2 Auto; 3 On
// add = 2 ; chwp_mode 1 off; 2 Auto; 3 On
// add = 3 ; cwp_mode 1 off; 2 Auto; 3 On
// add = 4 ; ct_mode 1 off; 2 Auto; 3 On
// add = 5 ; chiller_mode 1 off; 2 Auto; 3 On
// add = 6 ; damper_mode 1 off; 2 Auto; 3 On
// add = 7 ; FCU_mode 1 off; 2 Auto; 3 On
// add = 8 ; light_mode 1 off; 2 Auto; 3 On
// add = 9 ; run_hvac 1 off; 2 On
// add = 20 ; run_light 1 off; 2 On
// add = 10; CHWS temp set
// add = 11; TWR temp set
// add = 12; room temp set
// add = 13; CO2 sensor
// add = 34; h_on_hvac
// add = 35; m_on_hvac
// add = 36; h_off_hvac
// add = 37; m_off_hvac
// add = 14; h_on_light
// add = 15; m_on_light
// add = 16; h_off_light
// add = 17; m_off_light
// RD0 : Chiller
// RD1 : FCU
// RC0 : cooling_fan
// RC1 : chwp
// RC2 : cwp
// RB1 : damper
// RB2 : light
//******************Định nghĩa các chân điều khiển*******************
#include "built_in.h"
portb.f2 #define light // Điều khiển đèn
portd.f0 #define chiller // Điều khiển chiller (máy nén làm lạnh)
portd.f1 #define FCU // Điều khiển FCU (quạt dàn lạnh)
#define cooling_fan portc.f0 // Điều khiển quạt giải nhiệt
portc.f1 #define chwp // Điều khiển bơm nước lạnh (CHWP)
portc.f2 #define cwp // Điều khiển bơm giải nhiệt (CWP)
portb.f1 #define damper // Điều khiển motor cửa gió (damper)
portb #define status // Chọn trạng thái điều khiển hệ thống
//--- Set TEMP_RESOLUTION to the corresponding resolution of your DS18x20
sensor:
// 18S20, 1820: 9 (default setting; can be 9,10,11,or 12)
const unsigned short TEMP_RESOLUTION = 12;
const int RES_FACTOR_1[4] = {5000, 2500, 1250, 625};
const unsigned int RES_FACTOR_2[4] = {0x0001, 0x0003, 0x0007, 0x000F};
const unsigned int RES_FACTOR_3[4] = {0x8000, 0xC000, 0xE000, 0xF000};
unsigned temp,temp2;
unsigned short j, RES_SHIFT;
char oldstate = 0, i = 0;
unsigned int mode=0, add=0, v,u, k, l, m, chwr_temp, tws_temp, x, y=0,
L5=0, L6=0, L7=0, L8=0, temp_set, hvac_mode, chwp_mode,
cwp_mode,FCU_mode,
ct_mode, chiller_mode, temp_res,light_mode,damper_mode,run_hvac,
chws_temp,
chws_temp_set,run_light,h_on_light,m_on_light,h_off_light,m_off_light,
twr_temp, twr_temp_set,FCU_status,damper_status,light_status,
room_temp, room_temp_set,old_mm_hvac,
CO2, CO2_set,h_on_hvac,m_on_hvac,h_off_hvac,m_off_hvac,Time,hh,mm;
//***************************************************************
char * R_Trim(char *str1)
{
while (*str1 == ' ')
str1++;
return str1;
}
//*************************************************************
void Display_Temperature1(unsigned int temp) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
unsigned int temp_whole, temp_fraction;
unsigned short i;
char text[8];
// Isolate the fraction and make it a 4-digit decimal integer (for display)
temp_fraction = temp & RES_FACTOR_2[RES_SHIFT - 1];
temp_fraction = temp_fraction * RES_FACTOR_1[RES_SHIFT - 1];
//portc = temp_fraction;
// Handle the whole part of temperature value
temp_whole = temp;
// Is temperature negative?
if ((temp_whole & 0x8000) != 0u) i = 1; // Yes, i = 1
else i = 0; // No, i = 0
// PORTC = i;
// Remove the fractional part
temp_whole >>= RES_SHIFT;
chws_temp = temp_whole;
chws_temp_set = Eeprom_Read (10);
chiller_mode = Eeprom_Read (5);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
FCU_mode = Eeprom_Read (7);
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " CHWS temp: ");
IntToStr(temp_whole,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}//~
//***************************************************************
void Display_Temperature2(unsigned int temp) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
unsigned int temp_whole, temp_fraction;
unsigned short i;
char text[8];
// Isolate the fraction and make it a 4-digit decimal integer (for display)
temp_fraction = temp & RES_FACTOR_2[RES_SHIFT - 1];
temp_fraction = temp_fraction * RES_FACTOR_1[RES_SHIFT - 1];
//portc = temp_fraction;
// Handle the whole part of temperature value
temp_whole = temp;
// Is temperature negative?
if ((temp_whole & 0x8000) != 0u) i = 1; // Yes, i = 1
else i = 0; // No, i = 0
// PORTC = i;
// Remove the fractional part
temp_whole >>= RES_SHIFT;
chwr_temp = temp_whole;
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " CHWR temp: ");
IntToStr(temp_whole,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}//~
//***************************************************************
void Display_Temperature3(unsigned int temp) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
unsigned int temp_whole, temp_fraction;
unsigned short i;
char text[8];
// Isolate the fraction and make it a 4-digit decimal integer (for display)
temp_fraction = temp & RES_FACTOR_2[RES_SHIFT - 1];
temp_fraction = temp_fraction * RES_FACTOR_1[RES_SHIFT - 1];
//portc = temp_fraction;
// Handle the whole part of temperature value
temp_whole = temp;
// Is temperature negative?
if ((temp_whole & 0x8000) != 0u) i = 1; // Yes, i = 1
else i = 0; // No, i = 0
// PORTC = i;
// Remove the fractional part
temp_whole >>= RES_SHIFT;
tws_temp = temp_whole;
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " CWS temp: ");
IntToStr(temp_whole,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}//~
//***************************************************************
void Display_Temperature4(unsigned int temp) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
unsigned int temp_whole, temp_fraction;
unsigned short i;
char text[8];
// Isolate the fraction and make it a 4-digit decimal integer (for display)
temp_fraction = temp & RES_FACTOR_2[RES_SHIFT - 1];
temp_fraction = temp_fraction * RES_FACTOR_1[RES_SHIFT - 1];
//portc = temp_fraction;
// Handle the whole part of temperature value
temp_whole = temp;
// Is temperature negative?
if ((temp_whole & 0x8000) != 0u) i = 1; // Yes, i = 1
else i = 0; // No, i = 0
// Remove the fractional part
temp_whole >>= RES_SHIFT;
twr_temp = temp_whole;
twr_temp_set = Eeprom_Read (11);
ct_mode = Eeprom_Read (4);
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " CWR temp: ");
IntToStr(temp_whole,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}//~
//***************************************************************
void Display_Temperature5(unsigned int temp) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
unsigned int temp_whole, temp_fraction;
unsigned short i;
char text[8];
// Isolate the fraction and make it a 4-digit decimal integer (for display)
temp_fraction = temp & RES_FACTOR_2[RES_SHIFT - 1];
temp_fraction = temp_fraction * RES_FACTOR_1[RES_SHIFT - 1];
//portc = temp_fraction;
// Handle the whole part of temperature value
temp_whole = temp;
// Is temperature negative?
if ((temp_whole & 0x8000) != 0u) i = 1; // Yes, i = 1
else i = 0; // No, i = 0
// Remove the fractional part
temp_whole >>= RES_SHIFT;
room_temp = temp_whole;
room_temp_set = Eeprom_Read (12);
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " Room temp: ");
IntToStr(temp_whole,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}//~
//***************************************************************
void check_button()
{
char text[8];
read_mode_bt:
//***************************************************************
if (Button(&PORTB, 0, 1, 1)) oldstate = 1; // Mode
if (oldstate && Button(&PORTB, 0, 1, 0))
{ Delay_ms(250);
mode = mode + 1;
if (mode == 6){mode = 0;}
//**************************************************************
if (mode == 1)
{
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " HVAC SYSTEM ");
Lcd_Out(2, 1, "Status:");
add = 1;
hvac_mode = Eeprom_Read (add);
if (hvac_mode == 1) // Print Status
{Lcd_Out(2, 10, "OFF "); }
if (hvac_mode == 2)
{Lcd_Out(2, 10, "AUTO");} // Print Status
if (hvac_mode == 3)
{Lcd_Out(2, 10, "ON ");} // Print Status
}
//****************************************************************
if (mode == 2)
{
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " CHWS temp ");
Lcd_Out(2, 1, "Set :");
add = 10;
temp_set = Eeprom_Read (add);
IntToStr(temp_set,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}
//***************************************************************
if (mode == 3)
{
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " CWR temp ");
Lcd_Out(2, 1, "Set :");
add = 11;
temp_set = Eeprom_Read (add);
IntToStr(temp_set,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}
//*****************
if (mode == 4)
{
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " Room temp ");
Lcd_Out(2, 1, "Set :");
add = 12;
temp_set = Eeprom_Read (add);
IntToStr(temp_set,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}
//****************************************************************
if (mode == 5)
{
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " CO2 sensor ");
Lcd_Out(2, 1, "Set :");
add = 13;
temp_set = Eeprom_Read (add);
IntToStr(temp_set,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp('p'); // Print 'C' for Centigrades
Lcd_Chr_Cp('p'); // Print 'C' for Centigrades
Lcd_Chr_Cp('m'); // Print 'C' for Centigrades
}
//***************************************************************
}
//***************************************************************
if (mode == 0){goto ex_read_bt;}
//******************************************************
if (Button(&PORTE, 0, 1, 1)) oldstate = 1; // Inc
if (oldstate && Button(&PORTE, 0, 1, 0))
{ Delay_ms(200);
if (mode == 1)
{ add = 1; hvac_mode = Eeprom_Read (add);
hvac_mode = hvac_mode + 1;
if(hvac_mode == 1) { Lcd_Out(2, 10, "OFF ");} //Status}
if(hvac_mode == 2) { Lcd_Out(2, 10, "AUTO");}//Status}
if(hvac_mode == 3) { Lcd_Out(2, 10, "ON ");} //Status}
if(hvac_mode == 4) {hvac_mode = 1; Lcd_Out(2, 10, "OFF ");} //Status}
if (hvac_mode == 1) // OFF
{ Eeprom_Write (2, 1);
Eeprom_Write (3, 1);
Eeprom_Write (4, 1);
Eeprom_Write (5, 1);
Eeprom_Write (6, 1);
Eeprom_Write (7, 1);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
}
if (hvac_mode == 2) // Auto
{ Eeprom_Write (2, 2);
Eeprom_Write (3, 2);
Eeprom_Write (4, 2);
Eeprom_Write (5, 2);
Eeprom_Write (6, 2);
Eeprom_Write (7, 2);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
}
if (hvac_mode == 3) // Auto
{ Eeprom_Write (2, 2);
Eeprom_Write (3, 2);
Eeprom_Write (4, 2);
Eeprom_Write (5, 2);
Eeprom_Write (6, 2);
Eeprom_Write (7, 2);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
}
Eeprom_Write (add, hvac_mode); goto ex_inc;
}
if (mode == 5)
{
temp_set = Eeprom_Read (add);
temp_set = temp_set + 1;
if (temp_set == 100) {temp_set = 0;}
Eeprom_Write (add, temp_set);
oldstate = 0;
IntToStr(temp_set,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp('p'); // Print 'C' for Centigrades
Lcd_Chr_Cp('p'); // Print 'C' for Centigrades
Lcd_Chr_Cp('m'); // Print 'C' for Centigrades
goto ex_inc;
}
temp_set = Eeprom_Read (add);
temp_set = temp_set + 1;
if (temp_set == 100) {temp_set = 0;}
Eeprom_Write (add, temp_set);
oldstate = 0;
IntToStr(temp_set,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}
ex_inc:
//****************************************************************
if (Button(&PORTE, 2, 1, 1)) oldstate = 1; // Dec
if (oldstate && Button(&PORTE, 2, 1, 0))
{ Delay_ms(200);
if (mode == 1)
{ add = 1; hvac_mode = Eeprom_Read (add);
hvac_mode = hvac_mode - 1;
if(hvac_mode == 1) { Lcd_Out(2, 10, "OFF ");} //Status}
if(hvac_mode == 2) { Lcd_Out(2, 10, "AUTO");}//Status}
if(hvac_mode == 3) { Lcd_Out(2, 10, "ON ");} //Status}
if(hvac_mode == 0) {hvac_mode = 3; Lcd_Out(2, 10, "ON ");} //Status}
if (hvac_mode == 1) // OFF
{ Eeprom_Write (2, 1);
Eeprom_Write (3, 1);
Eeprom_Write (4, 1);
Eeprom_Write (5, 1);
Eeprom_Write (6, 1);
Eeprom_Write (7, 1);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
}
if (hvac_mode == 2) // Auto
{ Eeprom_Write (2, 2);
Eeprom_Write (3, 2);
Eeprom_Write (4, 2);
Eeprom_Write (5, 2);
Eeprom_Write (6, 2);
Eeprom_Write (7, 2);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
}
if (hvac_mode == 3) // Auto
{ Eeprom_Write (2, 2);
Eeprom_Write (3, 2);
Eeprom_Write (4, 2);
Eeprom_Write (5, 2);
Eeprom_Write (6, 2);
Eeprom_Write (7, 2);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
}
Eeprom_Write (add, hvac_mode); goto ex_dec;
}
if (mode == 5)
{
temp_set = Eeprom_Read (add);
temp_set = temp_set - 1;
if (temp_set == -1) {temp_set = 99;}
Eeprom_Write (add, temp_set);
oldstate = 0;
IntToStr(temp_set,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp('p'); // Print 'C' for Centigrades
Lcd_Chr_Cp('p'); // Print 'C' for Centigrades
Lcd_Chr_Cp('m'); // Print 'C' for Centigrades
goto ex_dec;
}
temp_set = Eeprom_Read (add);
temp_set = temp_set - 1;
if (temp_set == -1) {temp_set = 99;}
Eeprom_Write (add, temp_set);
oldstate = 0;
IntToStr(temp_set,text); // Convert whole part to string
Lcd_Out(2, 6, text); // Print whole part on LCD
Lcd_Chr_Cp(223);
Lcd_Chr_Cp('C'); // Print 'C' for Centigrades
}
ex_dec:
//*************************************************************
if (Button(&PORTE, 1, 1, 1)) oldstate = 1; // Enter
if (oldstate && Button(&PORTE, 1, 1, 0)) {
Delay_ms(250);
mode = 0;
add = 0;
}
ex_read_bt:
if (mode != 0){goto read_mode_bt;}
}
//*************************************************************
void temp_rec1()
{
Ow_Reset(&PORTA,1); // Onewire reset signal
Ow_Write(&PORTA,1,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,1,0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA,1);
Ow_Write(&PORTA,1,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,1,0xBE); // Issue command READ_SCRATCHPAD
j = Ow_Read(&PORTA,1); // Get temperature LSB
temp = Ow_Read(&PORTA,1); // Get temperature MSB
temp <<= 8; temp += j; // Form the result
Display_Temperature1(temp); // Format and display result on LCD
}
//**************************************************************
void temp_rec2()
{
Ow_Reset(&PORTA,2); // Onewire reset signal
Ow_Write(&PORTA,2,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,2,0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA,2);
Ow_Write(&PORTA,2,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,2,0xBE); // Issue command READ_SCRATCHPAD
j = Ow_Read(&PORTA,2); // Get temperature LSB
temp = Ow_Read(&PORTA,2); // Get temperature MSB
temp <<= 8; temp += j; // Form the result
Display_Temperature2(temp); // Format and display result on LCD
}
//***************************************************************
void temp_rec3()
{
Ow_Reset(&PORTA,3); // Onewire reset signal
Ow_Write(&PORTA,3,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,3,0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA,3);
Ow_Write(&PORTA,3,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,3,0xBE); // Issue command READ_SCRATCHPAD
j = Ow_Read(&PORTA,3); // Get temperature LSB
temp = Ow_Read(&PORTA,3); // Get temperature MSB
temp <<= 8; temp += j; // Form the result
Display_Temperature3(temp); // Format and display result on LCD
}
//***************************************************************
void temp_rec4()
{
Ow_Reset(&PORTA,4); // Onewire reset signal
Ow_Write(&PORTA,4,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,4,0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA,4);
Ow_Write(&PORTA,4,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,4,0xBE); // Issue command READ_SCRATCHPAD
j = Ow_Read(&PORTA,4); // Get temperature LSB
temp = Ow_Read(&PORTA,4); // Get temperature MSB
temp <<= 8; temp += j; // Form the result
Display_Temperature4(temp); // Format and display result on LCD
}
//***************************************************************
void temp_rec5()
{
Ow_Reset(&PORTA,5); // Onewire reset signal
Ow_Write(&PORTA,5,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,5,0x44); // Issue command CONVERT_T
Delay_us(120);
Ow_Reset(&PORTA,5);
Ow_Write(&PORTA,5,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTA,5,0xBE); // Issue command READ_SCRATCHPAD
j = Ow_Read(&PORTA,5); // Get temperature LSB
temp = Ow_Read(&PORTA,5); // Get temperature MSB
temp <<= 8; temp += j; // Form the result
Display_Temperature5(temp); // Format and display result on LCD
}
//***************************************************************
void read_CO2()
{
char text[8];
temp_res = Adc_Read(0); // Get results of AD conversion RA0
CO2 = (temp_res)/12;
Lcd_Cmd(Lcd_CLEAR); // Clear display
Lcd_Out(1, 1, " CO2 sensor: ");
IntToStr(CO2,text); // Convert CO2 part to string
Lcd_Out(2, 6, text); // Print CO2 part on LCD
Lcd_Chr_Cp('p'); // Print p
Lcd_Chr_Cp('p'); // Print p
Lcd_Chr_Cp('m'); // Print m
CO2_set = Eeprom_Read (13);
}
//***************************************************************
void check_on_off()
{
//******* Schedules for hvac system *********************
if ((hh >= h_on_hvac)&&(hh <= h_off_hvac))
{
if (mm >= m_on_hvac)
{run_hvac = 2;}
}
if (hh == h_off_hvac)
{
if (mm >= m_off_hvac)
{run_hvac = 1;}
if (mm < m_off_hvac)
{run_hvac = 2;}
}
if ((hh == h_on_hvac)&&(hh == h_off_hvac))
{
if ((mm >= m_on_hvac)&&(mm < m_off_hvac))
{run_hvac = 2;}
if ((mm < m_on_hvac)||(mm >= m_off_hvac))
{run_hvac = 1;}
}
if ((hh == h_on_hvac)&&(hh < h_off_hvac))
{
if (mm >= m_on_hvac)
{run_hvac = 2;}
if (mm < m_on_hvac)
{run_hvac = 1;}
}
if ((hh > h_on_hvac)&&(hh < h_off_hvac)) {run_hvac = 2;}
if ((hh < h_on_hvac)||(hh > h_off_hvac)) {run_hvac = 1;}
//******* Schedules for lighting system *********************
if ((hh >= h_on_light)&&(hh <= h_off_light))
{
if (mm >= m_on_light)
{run_light = 2;}
}
if (hh == h_off_light)
{
if (mm >= m_off_light)
{run_light = 1;}
if (mm < m_off_light)
{run_light = 2;}
}
if ((hh == h_on_light)&&(hh == h_on_light))
{
if ((mm >= m_on_light)&&(mm < m_off_light))
{run_light = 2;}
if ((mm < m_on_light)||(mm >= m_off_light))
{run_light = 1;}
}
if ((hh == h_on_light)&&(hh < h_off_light))
{
if (mm >= m_on_light)
{run_light = 2;}
if (mm < m_on_light)
{run_light = 1;}
}
if ((hh > h_on_light)&&(hh < h_off_light)) {run_light = 2;}
if ((hh < h_on_light)||(hh > h_off_light)) {run_light = 1;}
//****************************************************************
if (light_mode == 1) { light = 0; light_status = 0; } // OFF
if (light_mode == 3) { light = 1; light_status = 1; } // ON
if (light_mode == 2) // Auto
{
if (run_light == 1) {light = 0; light_status = 0;}
if (run_light == 2) {light = 1; light_status = 1;}
}
if (hvac_mode == 1) // OFF
{
chiller = 0;
cooling_fan = 0;
chwp = 0;
cwp = 0;
FCU = 0;
damper = 0; damper_status = 0;
}
if (hvac_mode == 2) // Auto
{
if (run_hvac == 2)
{
if (chwp_mode == 1) {chwp = 0;}
if (chwp_mode == 2) {chwp = 1;}
if (chwp_mode == 3) {chwp = 1;}
if (cwp_mode == 1) {cwp = 0;}
if (cwp_mode == 2) {cwp = 1;}
if (cwp_mode == 3) {cwp = 1;}
if (chiller_mode == 1) { chiller = 0;}
if (chiller_mode == 3) { chiller = 1;}
if (chiller_mode == 2)
{if (chws_temp >= chws_temp_set) {chiller = 1;}
else chiller = 0;
}
if (ct_mode == 1) { cooling_fan = 0;}
if (ct_mode == 3) { cooling_fan = 1;}
if (ct_mode == 2)
{if (twr_temp >= twr_temp_set) {cooling_fan = 1;}
else cooling_fan = 0;
}
if (FCU_mode == 1) {FCU = 0;}
if (FCU_mode == 3) {FCU = 1;}
if (FCU_mode == 2)
{if (room_temp >= room_temp_set) {FCU = 1; }
else FCU = 0;
}
if (damper_mode == 1) {damper = 0; damper_status = 0;}
if (damper_mode == 3) {damper = 1; damper_status = 1;}
if (damper_mode == 2)
{if (CO2 >= CO2_set) { damper = 1; damper_status = 1; }
else {damper = 0; damper_status = 0;}
}
}
if (run_hvac == 1)
{
chiller = 0;
cooling_fan = 0;
chwp = 0;
cwp = 0;
FCU = 0;
damper = 0; damper_status = 0;
}
}
if (hvac_mode == 3) // ON
{
if (chwp_mode == 1) {chwp = 0;}
if (chwp_mode == 2) {chwp = 1;}
if (chwp_mode == 3) {chwp = 1;}
if (cwp_mode == 1) {cwp = 0;}
if (cwp_mode == 2) {cwp = 1;}
if (cwp_mode == 3) {cwp = 1;}
if (chiller_mode == 1) { chiller = 0;}
if (chiller_mode == 3) { chiller = 1;}
if (chiller_mode == 2)
{if (chws_temp >= chws_temp_set) {chiller = 1;}
else chiller = 0;
}
if (ct_mode == 1) { cooling_fan = 0;}
if (ct_mode == 3) { cooling_fan = 1;}
if (ct_mode == 2)
{if (twr_temp >= twr_temp_set) {cooling_fan = 1;}
else cooling_fan = 0;
}
if (FCU_mode == 1) {FCU = 0;}
if (FCU_mode == 3) {FCU = 1;}
if (FCU_mode == 2)
{if (room_temp >= room_temp_set) {FCU = 1; }
else FCU = 0;
}
if (damper_mode == 1) {damper = 0; damper_status = 0;}
if (damper_mode == 3) {damper = 1; damper_status = 1;}
if (damper_mode == 2)
{if (CO2 >= CO2_set) { damper = 1; damper_status = 1; }
else {damper = 0; damper_status = 0;}
}
}
}
//**************************************************************
void delay()
{
L5 = L5 + 1;
check_button();
check_on_off();
if (L5 == 250) {L5 = 0; L6 = L6 + 1;}
if (L6 == 7) {L6 = 0; L7 = L7 + 1;}
if (L7 == 7) {L7 = 0; }
switch (L7)
{
case 0: { if (L5 == 0)
{if (L6 == 0)
{temp_rec1();}}break;}
case 1: { if (L5 == 0)
{if (L6 == 1)
{temp_rec2();}}break;}
case 2: { if (L5 == 0)
{if (L6 == 2)
{temp_rec3();}}break;}
case 3: { if (L5 == 0)
{if (L6 == 3)
{temp_rec4();}}break;}
case 4: { if (L5 == 0)
{if (L6 == 4)
{temp_rec5();}}break;}
case 5: { if (L5 == 0)
{if (L6 == 5)
{read_CO2();}}break;}
case 6: { if (L5 == 0)
{if (L6 == 6)
{read_CO2();}}break;}
}
}
//***************************************************************
void main()
{
ADCON1=0x0E; // configure AD for RA0 pin
//--- PORTE is input
PORTE = 0xFF;
TRISE = 0x0F;
//--- PORTA is input
PORTA = 11111111;
TRISA = 0xFF; // PORTA is input
PORTB = 0x11111001;
TRISB = 0x11111001;
PORTC = 0x11000000;
TRISC = 0x11000000;
UCON<3>=0;
UCFG<3>=1;
PORTD = 0; // 0x3F
TRISD = 0; // 0x3F
//--- Initialize LCD on PORTD and prepare for output
LCD_Init(&PORTD);
LCD_Cmd(LCD_CURSOR_OFF);
usart_init(9600);
hvac_mode = Eeprom_Read (1);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
light_mode = Eeprom_Read (8);
run_hvac = Eeprom_Read (9);
run_light = Eeprom_Read (20);
h_on_hvac = Eeprom_Read (34);
m_on_hvac = Eeprom_Read (35);
h_off_hvac = Eeprom_Read (36);
m_off_hvac = Eeprom_Read (37);
h_on_light = Eeprom_Read (14);
m_on_light = Eeprom_Read (15);
h_off_light = Eeprom_Read (16);
m_off_light = Eeprom_Read (17);
hh = 23;
mm = 59;
//***************************************************************
do { // main loop
loop1:
if (Usart_Data_Ready())
{ m = Usart_Read(); }
else {
delay();
add = 1;
hvac_mode = Eeprom_Read (add);
goto loop1;}
if (m == 82) // READ
{
Usart_write(chws_temp); // goi nhiet do "Nuoc lanh di" ve may tinh
Usart_write(chwr_temp);
Usart_write(twr_temp);
Usart_write(tws_temp);
Usart_write(chws_temp_set);
Usart_write(twr_temp_set);
v = status;
Usart_write(v);
Usart_write(hvac_mode); // goi "hvac_mode" ve may tinh
Usart_write(chiller_mode);
Usart_write(chwp_mode);
Usart_write(cwp_mode);
Usart_write(ct_mode);
Usart_write(h_on_hvac);
Usart_write(m_on_hvac);
Usart_write(h_off_hvac);
Usart_write(m_off_hvac);
PORTB.F3 = 1;
PORTB.F4 = 1;
PORTB.F5 = 1;
PORTB.F6 = 1;
PORTB.F7 = 1;
}
if (m == 70) // FCU
{
Usart_write(room_temp); // goi "room_temp" ve may tinh
Usart_write(room_temp_set);
Usart_write(CO2);
Usart_write(CO2_set);
v = status;
Usart_write(v);
Usart_write(damper_mode); // goi "damper_mode" ve may tinh
Usart_write(damper_status); // goi "damper_status" ve may tinh
Usart_write(FCU_mode); // goi "FCU_mode" ve may tinh
PORTB.F3 = 1;
PORTB.F4 = 1;
PORTB.F5 = 1;
PORTB.F6 = 1;
PORTB.F7 = 1;
}
if (m == 83) // SYSTEM Set mode for System
{re_hvac_mode:
if (Usart_Data_Ready())
{hvac_mode = Usart_Read();
Eeprom_Write (1, hvac_mode);
if (hvac_mode == 1) // OFF
{ Eeprom_Write (2, 1);
Eeprom_Write (3, 1);
Eeprom_Write (4, 1);
Eeprom_Write (5, 1);
Eeprom_Write (6, 1);
Eeprom_Write (7, 1);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
}
if (hvac_mode == 2) // Auto
{ Eeprom_Write (2, 2);
Eeprom_Write (3, 2);
Eeprom_Write (4, 2);
Eeprom_Write (5, 2);
Eeprom_Write (6, 2);
Eeprom_Write (7, 2);
chwp_mode = Eeprom_Read (2);
cwp_mode = Eeprom_Read (3);
ct_mode = Eeprom_Read (4);
chiller_mode = Eeprom_Read (5);
damper_mode = Eeprom_Read (6);
FCU_mode = Eeprom_Read (7);
}
}
else {goto re_hvac_mode;}
}
if (m == 67) // C Set mode for CHWP
{re_chwp_mode:
if (Usart_Data_Ready())
{chwp_mode = Usart_Read();
Eeprom_Write (2, chwp_mode);
}
else {goto re_chwp_mode;}
}
if (m == 87) // W Set mode for CWP
{re_cwp_mode:
if (Usart_Data_Ready())
{cwp_mode = Usart_Read();
Eeprom_Write (3, cwp_mode);
}
else {goto re_cwp_mode;}
}
if (m == 84) // T Set mode for CT
{re_ct_mode:
if (Usart_Data_Ready())
{ct_mode = Usart_Read();
Eeprom_Write (4, ct_mode);
}
else {goto re_ct_mode;}
}
if (m == 76) // L Set mode for CHL
{ch_mode:
if (Usart_Data_Ready())
{chiller_mode = Usart_Read();
Eeprom_Write (5, chiller_mode);
}
else {goto ch_mode;}
}
if (m == 65) // A Set temp for CHWS
{chws_temp_set_ready:
if (Usart_Data_Ready())
{chws_temp_set = Usart_Read();
Eeprom_Write (10, chws_temp_set); }
else {goto chws_temp_set_ready;}
}
if (m == 66) // B Set temp for CWR
{twr_temp_set_ready:
if (Usart_Data_Ready())
{twr_temp_set = Usart_Read();
Eeprom_Write (11, twr_temp_set); }
else {goto twr_temp_set_ready;}
}
if (m == 68) // D Set temp for Room
{room_temp_set_ready:
if (Usart_Data_Ready())
{room_temp_set = Usart_Read();
Eeprom_Write (12, room_temp_set); }
else {goto room_temp_set_ready;}
}
if (m == 69) // E Set level for CO2
{CO2_set_ready:
if (Usart_Data_Ready())
{CO2_set = Usart_Read();
Eeprom_Write (13, CO2_set); }
else {goto CO2_set_ready;}
}
if (m == 71) // G Set time ON/OFF for hvac
{G_ready:
if (Usart_Data_Ready())
{h_on_hvac = Usart_Read();
Eeprom_Write (34, h_on_hvac); }
else {goto G_ready;}
}
if (m == 72) // H Set time ON/OFF for hvac
{H_ready:
if (Usart_Data_Ready())
{m_on_hvac = Usart_Read();
Eeprom_Write (35, m_on_hvac); }
else {goto H_ready;}
}
if (m == 73) // I Set time ON/OFF for hvac
{I_ready:
if (Usart_Data_Ready())
{h_off_hvac = Usart_Read();
Eeprom_Write (36, h_off_hvac); }
else {goto I_ready;}
}
if (m == 74) // J Set time ON/OFF for hvac
{J_ready:
if (Usart_Data_Ready())
{m_off_hvac = Usart_Read();
Eeprom_Write (37, m_off_hvac); }
else {goto J_ready;}
}
if (m == 75) // K
{
Usart_write(light_mode); // goi "light_mode" ve may tinh
Usart_write(light_status); // goi "light_status" ve may tinh
Usart_write(h_on_light); // goi "h_on_light" ve may tinh
Usart_write(m_on_light); // goi "m_on_light" ve may tinh
Usart_write(h_off_light); // goi "h_off_light" ve may tinh
Usart_write(m_off_light); // goi "m_off_light" ve may tinh
}
if (m == 77) // M Set time for SYSTEM ON/OFF
{
M_ready:
if (Usart_Data_Ready())
{Time = Usart_Read();
hh = Time;
}
else {goto M_ready;}
}
if (m == 90) // Z Set time for SYSTEM ON/OFF
{
Z_ready:
if (Usart_Data_Ready())
{Time = Usart_Read();
mm = Time;
}
else {goto Z_ready;}
}
if (m == 78) // N Set mode for FCU
{re_fcu_mode:
if (Usart_Data_Ready())
{FCU_mode = Usart_Read();
Eeprom_Write (7, FCU_mode);
}
else {goto re_fcu_mode;}
}
if (m == 79) // O Set mode for damper
{re_damper_mode:
if (Usart_Data_Ready())
{damper_mode = Usart_Read();
Eeprom_Write (6, damper_mode);
}
else {goto re_damper_mode;}
}
if (m == 80) // P Set mode for light
{re_lighting_mode:
if (Usart_Data_Ready())
{light_mode = Usart_Read();
Eeprom_Write (8, light_mode);
}
else {goto re_lighting_mode;}
}
if (m == 81) // Q Set time ON/OFF for light
{Q_ready:
if (Usart_Data_Ready())
{h_on_light = Usart_Read();
Eeprom_Write (14, h_on_light);}
else {goto Q_ready;}
}
if (m == 85) // U Set time ON/OFF for light
{U_ready:
if (Usart_Data_Ready())
{m_on_light = Usart_Read();
Eeprom_Write (15, m_on_light);}
else {goto U_ready;}
}
if (m == 86) // V Set time ON/OFF for light
{V_ready:
if (Usart_Data_Ready())
{h_off_light = Usart_Read();
Eeprom_Write (16, h_off_light); }
else {goto V_ready;}
}
if (m == 89) // Y Set time ON/OFF for light
{Y_ready:
if (Usart_Data_Ready())
{m_off_light = Usart_Read();
Eeprom_Write (17, m_off_light); }
else {goto Y_ready;}
}
}
//****************************************************************
while (1);
}//*********************End program********************************
3. Giao diện màn hình chính của BMS
Lập trình điều khiển các nút trong giao diện màn hình chính của BMS
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus, StdCtrls, ComDrv32;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
User1: TMenuItem;
Login1: TMenuItem;
Logout1: TMenuItem;
Exit1: TMenuItem;
Edit1: TMenuItem;
Help1: TMenuItem;
About1: TMenuItem;
Image1: TImage;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
CommPortDriver1: TCommPortDriver;
Timer1: TTimer;
Lightsystem1: TMenuItem;
HVACsystem1: TMenuItem;
FCUsystem1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Auto1Click(Sender: TObject);
procedure Man1Click(Sender: TObject);
procedure OFFClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure Lightsystem1Click(Sender: TObject);
procedure FCUsystem1Click(Sender: TObject);
procedure HVACsystem1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DateTime : TDateTime;
// year, month, day: word;
hour, min, sec, msec: Word;
Form1: TForm1;
implementation
uses StatusWP, Chiller, Lighting, AHU, FCU, PAH, Power, KWH, About;
{$R *.DFM}
procedure delay(ms:longint);
var
mytime:longint;
begin
mytime:=gettickcount + ms;
while gettickcount < mytime do
application.ProcessMessages;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form3.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form5.Show;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Form6.Show;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
Form7.Show;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
Form8.Show;
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
Form9.Show;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Auto1Click(Sender: TObject);
begin
CommPortDriver1.Connect;
CommPortDriver1.SendString('S');
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
end;
procedure TForm1.Man1Click(Sender: TObject);
begin
CommPortDriver1.Connect;
CommPortDriver1.SendString('S');
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
end;
procedure TForm1.OFFClick(Sender: TObject);
begin
CommPortDriver1.Connect;
CommPortDriver1.SendString('S');
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption := 'BMS ' + TimeToStr(Time);
end;
procedure TForm1.About1Click(Sender: TObject);
begin
Form10.Show;
end;
procedure TForm1.Lightsystem1Click(Sender: TObject);
begin
Form4.Show;
end;
procedure TForm1.FCUsystem1Click(Sender: TObject);
begin
Form6.Show;
end;
procedure TForm1.HVACsystem1Click(Sender: TObject);
begin
Form3.Show;
end;
end.
4. Giao diện màn hình điều khiển hệ thống Chiller
Lập trình điều khiển các nút trong giao diện màn hình điều khiển chiller
unit Chiller;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, ComDrv32, StdCtrls;
type
TForm3 = class(TForm)
Image40: TImage;
Label2: TLabel;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
Image6: TImage;
Image7: TImage;
Image8: TImage;
Image9: TImage;
Image10: TImage;
Image11: TImage;
Image12: TImage;
Image13: TImage;
Image14: TImage;
Image15: TImage;
Image16: TImage;
Button1: TButton;
Edit1: TEdit;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
CommPortDriver1: TCommPortDriver;
Timer1: TTimer;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label4: TLabel;
Label5: TLabel;
Label3: TLabel;
ComboBox3: TComboBox;
Label7: TLabel;
Label8: TLabel;
ComboBox4: TComboBox;
ComboBox5: TComboBox;
GroupBox1: TGroupBox;
Label1: TLabel;
ComboBox6: TComboBox;
ComboBox7: TComboBox;
ComboBox8: TComboBox;
ComboBox9: TComboBox;
Label6: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
ComboBox10: TComboBox;
Label13: TLabel;
ComboBox11: TComboBox;
Label14: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
procedure ComboBox5Change(Sender: TObject);
procedure ComboBox6Change(Sender: TObject);
procedure ComboBox7Change(Sender: TObject);
procedure ComboBox8Change(Sender: TObject);
procedure ComboBox9Change(Sender: TObject);
procedure ComboBox10Change(Sender: TObject);
procedure ComboBox11Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//***************************************************************
var
b,e,f,g,h,i,j,k,l,m,n,dk,du,ng,dem,hh,mm,h_on,m_on,h_off,m_off:byte;
chws_temp_set,cwr_temp_set:byte;
hvac_mode,chiller_mode,chwp_mode,cwp_mode,ct_mode,hh_board,mm_board:byt
e;
daychuyen:array[1..4,1..8] of byte;
ma:array[1..8] of byte;
DateTime : TDateTime;
// year, month, day: word;
hour, min, sec, msec: Word;
Form3: TForm3;
implementation
{$R *.DFM}
//**************************************************************
procedure delay(ms:longint);
var
mytime:longint;
begin
mytime:=gettickcount + ms;
while gettickcount < mytime do
application.ProcessMessages;
end;
//**************************************************************
procedure TForm3.Timer1Timer(Sender: TObject);
begin
CommPortDriver1.Connect;
CommPortDriver1.SendString('R');
CommPortDriver1.ReadByte(e);
CommPortDriver1.ReadByte(f);
CommPortDriver1.ReadByte(g);
CommPortDriver1.ReadByte(h);
CommPortDriver1.ReadByte(j);
CommPortDriver1.ReadByte(k);
CommPortDriver1.ReadByte(l);
CommPortDriver1.ReadByte(hvac_mode);
CommPortDriver1.ReadByte(chiller_mode);
CommPortDriver1.ReadByte(chwp_mode);
CommPortDriver1.ReadByte(cwp_mode);
CommPortDriver1.ReadByte(ct_mode);
CommPortDriver1.ReadByte(h_on); // delay(3);
CommPortDriver1.ReadByte(m_on); // delay(3);
CommPortDriver1.ReadByte(h_off); // delay(10);
CommPortDriver1.ReadByte(m_off); // delay(10);
// CommPortDriver1.ReadByte(hh_board); // delay(10);
// CommPortDriver1.ReadByte(mm_board); // delay(10);
CommPortDriver1.Disconnect;
edit1.text:=IntToStr(e);
edit2.text:=IntToStr(f);
edit3.text:=IntToStr(g);
edit4.text:=IntToStr(h);
ComboBox7.text:=IntToStr(j);
// edit6.text:=IntToStr(k);
ComboBox6.text:=IntToStr(k);
ComboBox8.text:=IntToStr(h_on);
ComboBox9.text:=IntToStr(m_on);
ComboBox10.text:=IntToStr(h_off);
ComboBox11.text:=IntToStr(m_off);
if (hvac_mode = 1) then
ComboBox1.text:='OFF';
if (hvac_mode = 2) then
ComboBox1.text:='Auto';
if (hvac_mode = 3) then
ComboBox1.text:='ON';
if (chwp_mode = 1) then
ComboBox2.text:='OFF';
if (chwp_mode = 2) then
ComboBox2.text:='Auto';
if (chwp_mode = 3) then
ComboBox2.text:='ON';
if (cwp_mode = 1) then
ComboBox3.text:='OFF';
if (cwp_mode = 2) then
ComboBox3.text:='Auto';
if (cwp_mode = 3) then
ComboBox3.text:='ON';
if (ct_mode = 1) then
ComboBox4.text:='OFF';
if (ct_mode = 2) then
ComboBox4.text:='Auto';
if (ct_mode = 3) then
ComboBox4.text:='ON';
if (chiller_mode = 1) then
ComboBox5.text:='OFF';
if (chiller_mode = 2) then
ComboBox5.text:='Auto';
if (chiller_mode = 3) then
ComboBox5.text:='ON';
// Caption := 'Chiller ' + TimeToStr(Time); // convert the time into a string
// Label14.Caption:= TimeToStr(Time); // ok
Label14.Caption := 'Time: ' + TimeToStr(Time);
// edit2.text:=DateToStr(Date);
// edit1.text:=TimeToStr(Time);
DecodeTime( time, hour, min, sec, msec );
// if (sec = 0) then
begin
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('M'); // delay(1);
CommPortDriver1.SendByte(hour); // delay(1);
CommPortDriver1.Disconnect;
end;
// if (sec = 1) then
begin
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('Z'); // delay(1);
CommPortDriver1.SendByte(min); // delay(1);
CommPortDriver1.Disconnect;
end;
// Label15.Caption := 'Gio : ' + IntToStr(hour);
// Label16.Caption := 'Phut: ' + IntToStr(min);
// Label17.Caption := 'Giay: ' + IntToStr(sec);
// Label18.Caption := 'hh: ' + IntToStr(hh_board);
// Label19.Caption := 'mm: ' + IntToStr(mm_board);
ng:=l;
dem:=1;
for dem:=1 to 8 do begin
du:=ng mod 2;
ng:=ng div 2;
ma[dem]:=du;
end;
b:=b+1;
if (b=4) then
begin
b:=1;
end;
//------------------------------------------------------------------------------------------------
//****************************************************************
if ma[4]=0 then
begin
if (b=1) then
begin
image10.Visible :=true;
image11.Visible :=false;
image12.Visible :=false;
end;
// delay(110);
if (b=2) then
begin
image10.Visible :=false;
image11.Visible :=true;
image12.Visible :=false;
end;
// delay(110);
if (b=3) then
begin
image10.Visible :=false;
image11.Visible :=false;
image12.Visible :=true;
end;
// delay(110);
end
else begin
image9.Visible:=true;
image10.Visible:=False;
image11.Visible:=False;
image12.Visible:=False;
end;
//****************************************************************
if ma[5]=0 then
begin
image14.Visible :=true;
end
else begin
image14.Visible:=False;
end;
//*****************************************************************
if ma[6]=0 then
begin
if (b=1) then
begin
image3.Visible :=true;
image16.Visible :=true;
image4.Visible :=false;
image5.Visible :=false;
end;
// delay(110);
if (b=2) then
begin
image16.Visible :=true;
image3.Visible :=false;
image4.Visible :=true;
image5.Visible :=false;
end;
// delay(110);
if (b=3) then
begin
image16.Visible :=true;
image3.Visible :=false;
image4.Visible :=false;
image5.Visible :=true;
end;
delay(110); //
end
else begin
image2.Visible:=true;
image3.Visible:=False;
image4.Visible:=False;
image5.Visible:=False;
image16.Visible :=false;
end;
//*****************************************************************
if ma[7]=0 then
begin
if (b=1) then
begin
image6.Visible :=true;
image7.Visible :=false;
image8.Visible :=false;
end;
// delay(110);
if (b=2) then
begin
image6.Visible :=false;
image7.Visible :=true;
image8.Visible :=false;
end;
// delay(110);
if (b=3) then
begin
image6.Visible :=false;
image7.Visible :=false;
image8.Visible :=true;
end;
// delay(110);
end
else begin
image6.Visible:=true;
image7.Visible:=False;
image8.Visible:=False;
end;
//**************************************************************
end;
//**************************************************************
procedure TForm3.Button1Click(Sender: TObject);
begin
Close;
end;
//**************************************************************
procedure TForm3.ComboBox1Change(Sender: TObject);
begin
// if (ComboBox1.Text='Schedule') then
// Form6.Show;
if (ComboBox1.Text='Auto') then
begin
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('S'); // delay(1);
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
ComboBox2.Text:=('Auto');
ComboBox3.Text:=('Auto');
ComboBox4.Text:=('Auto');
ComboBox5.Text:=('Auto');
end;
if (ComboBox1.Text='ON') then
begin
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('S'); // delay(5);
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
end;
if (ComboBox1.Text='OFF') then
begin
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('S'); // delay(5);
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
ComboBox2.Text:=('OFF');
ComboBox3.Text:=('OFF');
ComboBox4.Text:=('OFF');
ComboBox5.Text:=('OFF');
end;
end;
//**************************************************************
procedure TForm3.ComboBox2Change(Sender: TObject);
begin
if (ComboBox2.Text='Auto') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('C'); // delay(1);
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
if (ComboBox2.Text='ON') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('C'); // delay(5);
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
if (ComboBox2.Text='OFF') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('C'); // delay(5);
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
end;
//**************************************************************
procedure TForm3.ComboBox3Change(Sender: TObject);
begin
if (ComboBox3.Text='Auto') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('W'); // delay(1);
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
if (ComboBox3.Text='ON') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('W'); // delay(5);
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
if (ComboBox3.Text='OFF') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('W'); // delay(5);
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
end;
//*************************************************************
procedure TForm3.ComboBox4Change(Sender: TObject);
begin
if (ComboBox4.Text='Auto') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('T'); // delay(1);
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
if (ComboBox4.Text='ON') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('T'); // delay(5);
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
if (ComboBox4.Text='OFF') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('T'); // delay(5);
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
end;
//**************************************************************
procedure TForm3.ComboBox5Change(Sender: TObject);
begin
if (ComboBox5.Text='Auto') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('L'); // delay(1);
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
if (ComboBox5.Text='ON') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('L'); // delay(5);
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
if (ComboBox5.Text='OFF') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('L'); // delay(5);
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
end;
//**************************************************************
procedure TForm3.ComboBox6Change(Sender: TObject);
begin
cwr_temp_set:=StrToInt(ComboBox6.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('B'); // delay(1);
CommPortDriver1.SendByte(cwr_temp_set); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm3.ComboBox7Change(Sender: TObject);
begin
chws_temp_set:=StrToInt(ComboBox7.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('A'); // delay(1);
CommPortDriver1.SendByte(chws_temp_set); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm3.ComboBox8Change(Sender: TObject);
begin
h_on:=StrToInt(ComboBox8.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('G'); // delay(1);
CommPortDriver1.SendByte(h_on); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm3.ComboBox9Change(Sender: TObject);
begin
m_on:=StrToInt(ComboBox9.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('H'); // delay(1);
CommPortDriver1.SendByte(m_on); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm3.ComboBox10Change(Sender: TObject);
begin
h_off:=StrToInt(ComboBox10.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('I'); // delay(1);
CommPortDriver1.SendByte(h_off); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm3.ComboBox11Change(Sender: TObject);
begin
m_off:=StrToInt(ComboBox11.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('J'); // delay(1);
CommPortDriver1.SendByte(m_off); // delay(1);
CommPortDriver1.Disconnect;
end;
end. //*********************End program**************************
5. Giao diện màn hình điều khiển FCU
Lập trình điều khiển các nút trong giao diện màn hình điều khiển FCU
unit FCU;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComDrv32;
type
TForm6 = class(TForm)
Image1: TImage;
Image2: TImage;
Label1: TLabel;
Edit2: TEdit;
Edit4: TEdit;
Image40: TImage;
Button1: TButton;
CommPortDriver1: TCommPortDriver;
Timer1: TTimer;
Label2: TLabel;
Image3: TImage;
Image4: TImage;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Label3: TLabel;
ComboBox3: TComboBox;
Label4: TLabel;
Label5: TLabel;
ComboBox4: TComboBox;
Image5: TImage;
Image6: TImage;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
b,e,f,g,h,i,j,k,l,m,n,dk,du,ng,dem:byte;
room_temp_set,co2_set,damper_mode,FCU_mode,damper_status:byte;
ma:array[1..8] of byte;
implementation
{$R *.DFM}
//**************************************************************
procedure TForm6.Timer1Timer(Sender: TObject);
begin
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('F'); // delay(3);
CommPortDriver1.ReadByte(i); // delay(10);
CommPortDriver1.ReadByte(j); // delay(10);
CommPortDriver1.ReadByte(k); // delay(10);
CommPortDriver1.ReadByte(l); // delay(10);
CommPortDriver1.ReadByte(m);
CommPortDriver1.ReadByte(damper_mode);
CommPortDriver1.ReadByte(damper_status);
CommPortDriver1.ReadByte(FCU_mode);
CommPortDriver1.Disconnect;
edit2.text:=IntToStr(i);
ComboBox1.text:=IntToStr(j);
edit4.text:=IntToStr(k);
ComboBox2.text:=IntToStr(l);
if (damper_status = 1) then
begin
image5.Visible :=false;
image6.Visible :=true;
end
else begin
image5.Visible :=true;
image6.Visible :=false;
end;
if (damper_mode = 1) then
begin
ComboBox4.text:='OFF';
// image6.Visible :=false;
// image5.Visible :=true;
end;
if (damper_mode = 2) then
ComboBox4.text:='Auto';
if (damper_mode = 3) then
begin
ComboBox4.text:='ON';
// image6.Visible :=true;
// image5.Visible :=false;
end;
if (FCU_mode = 1) then
ComboBox3.text:='OFF';
if (FCU_mode = 2) then
ComboBox3.text:='Auto';
if (FCU_mode = 3) then
ComboBox3.text:='ON';
ng:=m;
dem:=1;
for dem:=1 to 8 do begin
du:=ng mod 2;
ng:=ng div 2;
ma[dem]:=du;
end;
b:=b+1;
if (b=4) then
begin
b:=1;
end;
//---------------------------------------------------------------------------------------------
//**************************************************************
if ma[8]=0 then
begin
if (b=1) then
begin
image2.Visible :=true;
image3.Visible :=false;
image4.Visible :=false;
end;
// delay(110);
if (b=2) then
begin
image2.Visible :=false;
image3.Visible :=true;
image4.Visible :=false;
end;
// delay(110);
if (b=3) then
begin
image2.Visible :=false;
image3.Visible :=false;
image4.Visible :=true;
end;
// delay(110);
end
else begin
image2.Visible:=False;
image3.Visible:=False;
image4.Visible:=False;
end;
//****************************************************************
end;
//****************************************************************
procedure TForm6.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm6.ComboBox1Change(Sender: TObject);
begin
room_temp_set:=StrToInt(ComboBox1.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('D'); // delay(1);
CommPortDriver1.SendByte(room_temp_set); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm6.ComboBox2Change(Sender: TObject);
begin
co2_set:=StrToInt(ComboBox2.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('E'); // delay(1);
CommPortDriver1.SendByte(co2_set); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm6.ComboBox3Change(Sender: TObject);
begin
if (ComboBox3.Text='Auto') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('N'); // delay(1);
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
if (ComboBox3.Text='ON') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('N'); // delay(5);
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
if (ComboBox3.Text='OFF') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('N'); // delay(5);
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
end;
procedure TForm6.ComboBox4Change(Sender: TObject);
begin
if (ComboBox4.Text='Auto') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('O'); // delay(1);
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
if (ComboBox4.Text='ON') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('O'); // delay(5);
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
if (ComboBox4.Text='OFF') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('O'); // delay(5);
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
end;
end.
6. Giao diện màn hình điều khiển đèn
Lập trình điều khiển các nút trong giao diện màn hình điều khiển đèn
unit Lighting;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComDrv32;
type
TForm4 = class(TForm)
GroupBox1: TGroupBox;
ComboBox1: TComboBox;
CommPortDriver1: TCommPortDriver;
Timer1: TTimer;
Image40: TImage;
Button1: TButton;
GroupBox2: TGroupBox;
Image1: TImage;
Image2: TImage;
GroupBox3: TGroupBox;
Label1: TLabel;
Label2: TLabel;
ComboBox2: TComboBox;
Label3: TLabel;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
Label4: TLabel;
ComboBox5: TComboBox;
Label5: TLabel;
procedure ComboBox1Change(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
procedure ComboBox5Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
light_mode,light_status,h_on,m_on,h_off,m_off:byte;
Form4: TForm4;
implementation
{$R *.DFM}
procedure TForm4.ComboBox1Change(Sender: TObject);
begin
if (ComboBox1.Text='Auto') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('P'); // delay(1);
CommPortDriver1.SendByte(2);
CommPortDriver1.Disconnect;
if (ComboBox1.Text='ON') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('P'); // delay(5);
CommPortDriver1.SendByte(3);
CommPortDriver1.Disconnect;
if (ComboBox1.Text='OFF') then
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('P'); // delay(5);
CommPortDriver1.SendByte(1);
CommPortDriver1.Disconnect;
end;
procedure TForm4.Timer1Timer(Sender: TObject);
begin
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('K'); // delay(3);
CommPortDriver1.ReadByte(light_mode);
CommPortDriver1.ReadByte(light_status);
CommPortDriver1.ReadByte(h_on); // delay(3);
CommPortDriver1.ReadByte(m_on); // delay(3);
CommPortDriver1.ReadByte(h_off); // delay(10);
CommPortDriver1.ReadByte(m_off); // delay(10);
CommPortDriver1.Disconnect;
ComboBox2.text:=IntToStr(h_on);
ComboBox3.text:=IntToStr(m_on);
ComboBox4.text:=IntToStr(h_off);
ComboBox5.text:=IntToStr(m_off);
// Caption := 'Light ' + TimeToStr(Time); // convert the time into a string
// Label14.Caption:= TimeToStr(Time); // ok
Label5.Caption := 'Time: ' + TimeToStr(Time);
if (light_status = 1) then
begin
image2.Visible :=false;
image1.Visible :=true;
end
else begin
image2.Visible :=true;
image1.Visible :=false;
end;
if (light_mode = 1) then
ComboBox1.text:='OFF';
if (light_mode = 2) then
ComboBox1.text:='Auto';
if (light_mode = 3) then
ComboBox1.text:='ON';
end;
procedure TForm4.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm4.ComboBox2Change(Sender: TObject);
begin
h_on:=StrToInt(ComboBox2.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('Q'); // delay(1);
CommPortDriver1.SendByte(h_on); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm4.ComboBox3Change(Sender: TObject);
begin
m_on:=StrToInt(ComboBox3.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('U'); // delay(1);
CommPortDriver1.SendByte(m_on); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm4.ComboBox4Change(Sender: TObject);
begin
h_off:=StrToInt(ComboBox4.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('V'); // delay(1);
CommPortDriver1.SendByte(h_off); // delay(1);
CommPortDriver1.Disconnect;
end;
procedure TForm4.ComboBox5Change(Sender: TObject);
begin
m_off:=StrToInt(ComboBox5.Text);
CommPortDriver1.Connect; // delay(1);
CommPortDriver1.SendString('Y'); // delay(1);
CommPortDriver1.SendByte(m_off); // delay(1);
CommPortDriver1.Disconnect;
end;
end.