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 of // Xét giá trị của biểu thức:

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.