Ưùng dụng NeuroFuzzy trong điều khiển nhiệt độ
LỜI CẢM ƠN
Xin chân thành cảm ơn tất cả các thầy cơ trong trường ĐH Kỹ Thuật đã dạy dỗ cho đến ngày hơm nay, đặc biệt là các thầy cơ trong bộ mơn Điều Khiển Tự Động.
Xin chân thành cảm ơn văn phịng bộ mơn, đặc biệt là cơ Ngọc đã tạo điều kiện giúp đỡ trong suốt quá trình thực hiện luận văn tốt nghiệp.
Xin chân thành cảm ơn thầy Lê Tuấn Anh, người đã gợi ý và hướng dẫn thực hiện luận văn tốt nghiệp.
Và xin cảm ơn tất cả những người đã gián tiếp tạo điều kiện thuận lợi trong quá trình làm luận văn tốt nghiệp.
Dù đã cố rất gắng nhưng vẫn khơng tránh khỏi sai sĩt, xin được học hỏi những lời chỉ dẫn. Xin cảm ơn rất nhiều.
LỜI TỰA
Đề tài này được thực hiện trong khuơn khổ một mơn học do trường ĐH Kỹ Thuật qui định với số tín chỉ là 10. Thơng qua đĩ, sinh viên cĩ một học kỳ để tự học, tự đánh giá khả năng của mình và trình bày thành luận văn dựa trên những hiểu biết của mình.
Tên của đề tài là ứng dụng NeuroFuzzy để điều khiển nhiệt độ cho thấy đề tài khơng mới nhưng phương pháp điều khiển thì rất mới : đĩ là ứng dụng NeuroFuzzy, một lĩnh vực cịn khá mới mẽ trong điều khiển tự động, là sự kết hợp của hai lĩnh vực trí khơn nhân tạo : logic mờ và mạng neuron nhằm tận dụng ưu điểm của cả hai. Nhằm để chứng tỏ ưu điểm của phương pháp này, đề tài điều khiển một đối tượng cụ thể là một lị nướng dân dụng.
Luận văn trình bày đề tài được chia làm 5 phần lớn :
ã Phần 1 : Giới thiệu.
ã Phần 2 : Lý thuyết.
ã Phần 3 : Thiết kế.
ã Phần 4 : Kết qua điều khiển.
ã Phần 5 : tài liệu tham khảo.
Trong mỗi phần cĩ nhiều chương nhỏ trải rộng từ hệ thống, phần cứng, phần mềm với tổng số trang là 183.
Do lượng nội dung viết thì nhiều mà khuôn khổ luận văn cĩ giới hạn nên chỉ trình bày các giải thuật mà khơng trình bày chương trình. Tuy nhiên, nếu muốn tham khảo thì sử dụng đĩa CD-ROM kèm theo cĩ chứa chương trình nguồn lẫn chương trình đã biên dịch (cho phép cài lên máy tính).
Thực ra tác giả cịn muốn trình bày nhiều hơn nữa nhưng đành phải rút gọn nên khơng thốt khỏi tình trạng thiếu trước hụt sau. Ngồi ra, do mỗi phần được viết trong các khoản thời gian khác nhau nên không tránh khỏi vấn đề không nhất quán trong trình bày. Lối văn phong cũng khơng được khoa học cho lắm.
Mong rằng người đọc sẽ thơng cảm mà bỏ qua những thiếu sĩt đĩ. Xin chân thành cảm ơn.
MỤC LỤC
Phần 1. Giới thiệu 9
Chương 1. Giới thiệu đề tài 10
1. Nhiệm vụ của đề tài 11
2. Thực hiện 11
Phần 2. Lý thuyết 12
Chương 1. Logic mờ 13
1. Sơ lược về logic mờ 13
1.1. Quá trình phát triển của logic mờ 13
1.2. Cơ sở tốn học của logic mờ 13
1.3. Logic mờ là logic của con người 16
1.4. So sánh logic mờ với lý thuyết xác suất thống kê 16
2. Các khái niệm dùng trong logic mờ 17
2.1. Tập hợp mờ và độ phụ thuộc 17
2.2. Hàm phụ thuộc 18
2.3. Biến ngơn ngữ 18
2.4. Luật mờ 19
3. Tính tốn mờ 19
3.1. Mờ hĩa 19
3.2. Tính luật mờ 19
3.3. Suy luận mờ 20
3.4. Giải mờ 21
Chương 2. Mạng Neuron 23
1. Sơ lược về mạng neuron 23
1.1. Quá trình phát triển 23
1.2. Mạng neuron là gì ? 24
1.3. Cấu trúc của não 24
2. Mơ hình hĩa mạng neuron 26
2.1. Yêu cầu khi lập mơ hình một neuron 26
2.2. Lập mơ hình neuron 26
3. Học hỏi trong mạng neuron 28
4. Giải thuật học perceptron 30
4.1. Mơ tả giải thuật 30
4.2. Phân loại với mơ hình perceptron 31
4.3. Tĩm tắt giải thuật 33
4.4. Hạn chế 34
4.5. Nhận xét 34
5. Giải thuật học delta 35
5.1. Đạo hàm 35
5.2. Mơ tả luật học delta 36
5.3. Một số hàm truyền và đạo hàm của nĩ 37
5.4. Tĩm tắt giải thuật 38
6. Giải thuật delta tổng quát 39
6.1. Mơ hình perceptron đa tầng 39
6.2. Luật học delta tổng quát 39
6.3. Tĩm tắt giải thuật 41
7. Độ hiệu quả của mạng neuron 41
Chương 3. NeuroFuzzy 44
1. Sơ lược về NeuroFuzzy 44
2. Kết hợp neuron và mờ 45
2.1. Biểu diễn luật If-Then theo cấu trúc mạng neuron 45
2.2. Neuron mờ 48
3. Học hỏi trong NeuroFuzzy 50
3.1. Sửa đổi hàm phụ thuộc 51
4. Nhận xét 54
Chương 4. Vi điều khiển 55
1. Vi điều khiển họ MCS-51 55
2. Vi điều khiển AT89C52 56
2.1. Cấu tạo chân 56
2.2. Sơ đồ khối 57
2.3. Mơ tả chức năng các chân 57
2.4. Các thanh ghi chức năng 59
2.5. Bộ nhớ dữ liệu 61
2.6. Đặc tính bộ dao động 62
2.7. Chế độ lười 62
2.8. Chế độ hạ nguồn 62
2.9. Trạng thái của một số chân trong chế độ hạ nguồn và chế độ lười 62
2.10. Các thơng số kỹ thuật 63
Chương 5. ADC ICL7109CPL 67
1. Sơ lược các phương pháp biến đổi AD 67
1.1. Biến đổi AD dùng bộ biến đổi DA 67
1.2. Bộ biến đổi Flash AD 70
1.3. Bộ biến đổi AD theo hàm dốc dạng lên xuống 71
1.4. Bộ biến đổi AD dùng chuyển đổi áp sang tần số 71
1.5. Bộ biến đổi AD theo tích phân hai độ dốc 71
2. ICL7109CPL 72
2.1. Cấu tạo chân 73
2.2. Mơ tả chức năng các chân 73
2.3. Quá trình biến đổi AD 75
2.4. Lựa chọn giá trị 76
2.5. Giao tiếp trực tiếp với ICL7109CPL 77
Chương 6. MAX232 78
1. Chuẩn RS-232-C 78
1.1. Các đầu nối 80
1.2. Mơ tả chân 80
2. MAX232 và họ IC dùng biến đổi TTLRS-232-C 81
2.1. Cấu tạo chân 81
2.2. Mơ tả chức năng chân 81
2.3. Sơ đồ khối và mạch tiêu biểu 81
Chương 7. Các IC khác 83
1. OP07 83
2. MOC3020 83
3. RAM 6264 84
4. Chốt 74573 84
5. BTA16 84
Chương 8. Thermocouple 85
1. Sơ lược về các dụng cụ đo nhiệt độ 85
1.1. Buổi ban đầu của thiết bị đo nhiệt độ 85
1.2. Các loại cảm biến hiện tại 86
2. Thermocouple 87
2.1. Hiệu ứng Seebeck 87
2.2. Cách đo hiệu điện thế 88
2.3. Bù nhiệt mơi trường 90
2.4. Các loại thermocouple 90
2.5. Một số nhiệt độ chuẩn 91
Phần 3. Thiết kế 92
Chương 1. Phần cứng 93
1. Cấu trúc tổng quát 93
2. Khối xử lý trung tâm 94
3. Phân vùng địa chỉ 96
4. Khối bộ nhớ và nguồn backup 97
5. Khối hiển thị 98
6. Khối biến đổi AD 102
7. Khối cảm biến và gia cơng 105
8. Khối bàn phím 108
8.1. Chương trình con GET_KEY 109
8.2. Chương trình con IN_HEX 111
9. Truyền thơng nối tiếp 112
10. Khối mạch cơng suất 114
11. Nguồn cung cấp 115
12. Cách cân chỉnh mạch 115
13. Xử lý 16-bit trên vi điều khiển 8-bit 118
13.1 Chương trình con cộng 16-bit 119
13.2. Chương trình con đổi dấu một số 119
13.3. Chương trình con nhân số 16-bit cho số 8-bit 119
13.4. Chương trình con chia số 16-bit cho số 8-bit 120
Chương 2. Hệ thống 122
1. Thiết kế hệ mờ 122
1.1. Các nguyên tắc trong thiết kế 122
1.2. Thiết kế hệ mờ cho điều khiển nhiệt độ 125
1.3. Thiết kế hệ luật 126
1.4. Tính luật và giải mờ 127
2. Thiết kế hệ NeuroFuzzy 127
2.1. Tập dữ liệu học 127
2.2. Thay đổi hệ mờ 127
Chương 3. Phần mềm 129
1. Pha hoạt động 129
1.1. Khuơn dạng luật của hệ 130
1.2. Giải thuật điều khiển 130
1.3. Xử lý mờ 131
1.4. Tính độ phụ thuộc 132
1.5. Giải mờ theo CoM 136
2. Pha học 137
3. Chương trình trên kit AT89C52 137
3.1. Nhập dữ liệu 139
3.2. Hoạt động 144
3.3 Phân bố tài nguyên 145
3.4. RAM ngoại 147
4. Chương trình trên máy tính 149
4.1. Qui định kiểu dữ liệu 150
4.2. Giới thiệu chương trình NF Control 151
4.3. Giới thiệu chương trình fuzzyTech 156
4.4. Giao tiếp giữa NF Control và FuzzyTech 160
Phần 4. Kết quả điều khiển 171
Chương 1. Điều khiển thực tế 172
1. Điều khiển 100C 173
2. Điều khiển 125C 174
3. Điều khiển 150C 175
4. Điều khiển 175C 176
5. Điều khiển 200C 177
6. Điều khiển 225C 178
7. Điều khiển 250C 179
8. Điều khiển tổng hợp lần thứ nhất 180
9. Điều khiển tổng hợp lần thứ hai 181
Phần 5. Tài liệu tham khảo 182
186 trang |
Chia sẻ: banmai | Lượt xem: 1843 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Ứng dụng NeuroFuzzy trong điều khiển nhiệt độ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
[t]
1
mCm(OUT) = 0, "m
Tính ñoä phuï thuoäc mBj(DET)
Keát thuùc
m(OUT) = min[mAi(ET); mBj(DET)]
m(OUT) = m(OUT).DoSn
1
mCm(OUT) = max[mCm(OUT); m(OUT)]
Soá luaät = Toång soá luaät ?
Soá luaät = soá luaät + 1
Ñuùng
Sai
Giaûi môø theo CoM
Tính ñoä phuï thuoäc mAi(ET)
Phaàn ñaàu tieân laø phaàn chuaån bò : tính ET, DET, vaø chuyeån giaù trò töø nhieät ñoä hieän taïi leân nhieät ñoä ôû böôùc tröôùc nhaèm chuaån bò cho laàn xöû lyù sau. Phaàn naøy cuõng chuaån bò caùc ñoä phuï thuoäc cuûa taäp môø OUT : thieát laäp veà 0 cho pheùp laáy Max sau naøy vaø chuaån bò boä ñeám soá luaät.
Keá keán laø moät voøng laëp xöû lyù laàn löôït caùc luaät trong heä luaät cho ñeán heát.
Thaân voøng laëp laøm nhieäm vuï tính ñoä phuï thuoäc cuûa caùc taäp môø vaøo (ET, DET), laáy Min vaø nhaân cho ñoä hoã trôï. Hôïp thaønh theo pheùp Max.
Sau khi ñaõ tính xong heä luaät, giaûi môø theo phöông phaùp CoM.
1.4. Tính ñoä phuï thuoäc
Töø hai giaù trò vaät lyù ET vaø DET, ta suy ra ñoä phuï thuoäc cuûa taäp môø theo haøm phuï thuoäc. Phaàn thieát keá heä thoáng ta chæ söû duïng 4 loaïi haøm phuï thuoäc coù daïng chöõ S, daïng chöõ Z, daïng tam giaùc vaø daïng hình thang.
Daïng chöõ Z
Daïng tam giaùc
Daïng hình thang
Daïng chöõ S
Giaûi thuaät :
Baét ñaàu
Haøm daïng chöõ Z ?
Haøm daïng tam giaùc ?
Haøm daïng hình thang ?
Keát thuùc
Tính ñoä phuï thuoäc daïng chöõ Z
Tính ñoä phuï thuoäc daïng tam giaùc
Tính ñoä phuï thuoäc daïng hình thang
Tính ñoä phuï thuoäc daïng chöõ S
Ñuùng
Ñuùng
Ñuùng
Sai
Sai
Sai
Ñeå toång quaùt, ta goïi x laø giaù trò vaät lyù caàn tính ñoä phuï thuoäc (x coù theå laø ET hay DET) vaø moãi khi tính ñoä phuï thuoäc ñoái vôùi moät taäp môø naøo ñoù thì ta ñöa caùc thoâng soá veà taäp môø ñoù vaøo. Caùc thoâng soá veà taäp môø laàn löôït xeùt sau ñaây.
1.4.1. Tính ñoä phuï thuoäc theo haøm daïng chöõ Z
x1
x2
Haøm daïng chöõ Z ñöôïc xem nhö ñaëc tröng bôûi hai ñieåm x1 vaø x2. Neáu ñaïi löôïng caàn tính ñoä phuï thuoäc nhoû hôn x1 thì ñoä phuï thuoäc laø 1. Neáu ñaïi löôïng caàn tính lôùn hôn x1 nhöng nhoû hôn x2 thì tính ñoä phuï thuoäc theo haøm doác xuoáng. Coøn neáu giaù trò caàn tính lôùn hôn x2 thì ñoä phuï thuoäc baèng 0.
Giaûi thuaät :
1.4.2. Tính ñoä phuï thuoäc theo haøm daïng tam giaùc
Baét ñaàu
x < x1
Keát thuùc
Tính ñoä phuï thuoäc haøm doác xuoáng
m(x) = 1
x < x2
m(x) = 0
Ñuùng
Sai
Sai
Ñuùng
x1
x2
x3
Ñöôïc ñaëc tröng bôûi 3 ñieåm : x1, x2, vaø x3.
- Neáu x £ x1 hay x ³ x3 thì m(x) = 0.
- Neáu x1 < x < x2 thì tính ñoä phuï thuoäc theo haøm doác leân.
- Neáu x = x2 thì m(x) = 1.
- Neáu x2 < x < x3 thì tính ñoä phuï thuoäc theo haøm doác xuoáng.
Baét ñaàu
x < x1
Keát thuùc
Tính ñoä phuï thuoäc haøm doác leân
m(x) = 0
x < x2
m(x) = 0
Ñuùng
Ñuùng
Sai
Sai
x < x3
Sai
Ñuùng
Tính ñoä phuï thuoäc haøm doác xuoáng
Sai
Giaûi thuaät :
1.4.3. Tính ñoä phuï thuoäc theo haøm daïng hình thang
x1
x2
x3
x4
Ñaëc tröng haøm phuï thuoäc theo daïng hình thang bôûi 4 ñieåm : x1, x2, x3, vaø x4. Tuøy theo giaù trò vaøo x maø coù caùc tröôøng hôïp sau ñaây xaûy ra :
- Neáu x £ x1 hay x ³ x4 thì m(x) = 0.
- Neáu x1 < x < x2 thì tính ñoä phuï thuoäc theo haøm doác leân.
- Neáu x2 £ x £ x3 thì m(x) = 1.
- Neáu x3 < x < x4 thì tính ñoä phuï thuoäc theo haøm doác xuoáng.
Baét ñaàu
x < x1
Keát thuùc
Tính ñoä phuï thuoäc haøm doác leân
m(x) = 0
x < x2
m(x) = 0
Ñuùng
Ñuùng
Sai
Sai
x < x4
Sai
Ñuùng
Tính ñoä phuï thuoäc haøm doác xuoáng
Sai
x < x3
Sai
m(x) = 1
Ñuùng
Giaûi thuaät :
x1
x2
1.4.4. Tính ñoä phuï thuoäc theo haøm daïng chöõ S
Cuõng töông töï nhö haøm daïng chöõ Z, haøm daïng chöõ S ñöôïc ñaëc tröng bôûi hai ñieåm x1 vaø x2. Trong giaûi thuaät caàn thay m(x) = 0 thaønh m(x) = 1 vaø ngöôïc laïi. Theâm nöõa, thay vì goïi chöông trình con tính haøm doác xuoáng thì ta goïi chöông trình con tính haøm doác leân.
Giaûi thuaät :
Baét ñaàu
x < x1
Keát thuùc
Tính ñoä phuï thuoäc haøm doác leân
m(x) = 0
x < x2
m(x) = 1
Ñuùng
Sai
Sai
Ñuùng
Deã thaáy raèng trong caùc chöông trình tính ñoä phuï thuoäc theo nhöõng daïng haøm treân ñeàu goïi hai chöông trình con laø chöông trình tính ñoä phuï thuoäc theo haøm doác leân vaø chöông trình tính ñoä phuï thuoäc theo haøm doác xuoáng.
Caùc chöông trình con naøy ñeàu caàn 2 ñieåm xA vaø xB ñeå xaùc ñònh ñoä phuï thuoäc cuûa moät ñieåm x naèm giöõa.
Veà baûn chaát thì caùc chöông trình con naøy tính döïa theo nguyeân lyù ñoaïn thaúng tyû leä trong hai tam giaùc ñoàng daïng.
xB
xA
x
1
0
m(x)
1.4.5. Tính ñoä phuï thuoäc theo haøm doác leân
Ñoä phuï thuoäc :
1.4.6. Tính ñoä phuï thuoäc theo haøm doác xuoáng
xB
xA
x
1
0
m(x)
Töông töï nhö haøm doác leân, ta coù :
1.5. Giaûi môø theo CoM
Caùc taäp môø ra cuûa bieán ngoân ngöõ OUT ñöôïc ñònh nghóa theo daïng singleton, moãi taäp coù moät vò trí cuûa noù trong khoaûng [0%;100%].
…
…
…
…
xi
…
…
0
%
m
m(xi)
100
Giaû söû coù n taäp môø, taäp môø Ai coù vò trí laø xi vaø ñoä phuï thuoäc laø m(xi). Theá thì :
2. pha hoïc
Do trong giaûi thuaät hoïc duøng pheùp laáy ñaïo haøm naèm ngoaøi khaû naêng cuûa ngöôøi thöïc hieän neân phaàn naøy khoâng ñöôïc thieát keá maø söû duïng moät chöông trình teân laø fuzzyTech cuûa Inform Software Corporation.
Khi ñieàu khieån döïa treân heä luaät chöa toát thì ta toái öu hoùa heä baèng caùch eùp buoäc heä hoïc nhöõng haønh vi mong muoán khi gaëp tröôøng hôïp qui ñònh. Quaù trình naøy ñöôïc thöïc hieän off-line treân phaàn meàm fuzzyTech.
Sau ñoù döïa treân caùc thoâng soá ñaõ söûa ñoåi sau quaù trình hoïc, ta caäp nhaät laïi heä môø vaø cho heä ñieàu khieån theo pha hoaït ñoäng.
3. chöông trình treân kit at89c52
Chöông trình naïp saún treân kit AT89C52 cho pheùp kit ñieàu khieån nhieät ñoä theo giaûi thuaät môø. Ngoaøi ra chöông trình coøn coù theâm khaû naêng laáy ñaëc tính haøm hôû cuûa loø nhaèm hoã trôï nhöõng ai muoán ñieàu khieån theo phöông phaùp khaùc nhö PID chaúng haïn. Ñaây laø quaù trình ño nhieät ñoä theo moät duty cycle ñaët tröôùc.
Nhö vaäy, coù 4 cheá ñoä hoaït ñoäng treân kit AT89C52 : baûn thaân kit AT89C52 ngoaøi thieát keá nhaèm muïc ñích thu thaäp vaø ñieàu khieån nhieät ñoä thì coøn cho pheùp maùy tính thu thaäp vaø ñieàu khieån nhieät ñoä thoâng qua kit.
Baét ñaàu
Coù aán phím ?
1
Xöû lyù phím
2
3
Ñuùng
Sai
Maùy tính truyeàn döõ lieääu ?
1
Xöû lyù döõ lieäu truyeàn
2
3
Ñuùng
Sai
Ño nhieät ñoä ?
Ño nhieät ñoä
Döøng ?
Ñieàu khieån nhieät ñoä ?
Maùy tính ño nhieät ñoä ?
Ñieàu khieån nhieät ñoä
Döøng ?
Maùy tính ño
nhieät ñoä
Maùy tính ñieàu
khieån nhieät ñoä
Döøng ?
Döøng ?
Sai
Sai
Sai
Sai
Sai
Sai
Sai
Ñuùng
Ñuùng
Ñuùng
Ñuùng
Ñuùng
Ñuùng
Ñuùng
Chöông trình chính treân kit laø moät voøng laëp khoâng coù ñieåm keát thuùc : khi chöa xöû lyù hoaëc ñaõ xöû lyù xong moät nhieäm vuï thì noù trôû veà traïng thaùi chôø.
Coù hai caùch ñeå nhaäp döõ lieäu cho kit laø thoâng qua baøn phím hay truyeàn töø maùy tính xuoáng. Trong caû hai caùch ñeàu yeâu caàu nhaäp cheá ñoä hoaït ñoäng vaø caùc thoâng soá cho cheá ñoä ñoù (neáu coù) nhö sau :
Cheá ñoä ño nhieät ñoä (laáy ñaëc tính haøm hôû) baèng kit nhaäp thoâng soá laø duty cycle.
Cheá ñoä ñieàu khieån nhieät ñoä baèng kit coù hai löïa choïn : moät laø söû duïng caùc taäp môø maëc ñònh ñaõ chöùa saün treân kit, hay laø söû duïng caùc taäp môø khaùc thì caàn nhaäp caùc thoâng soá nhö soá taäp môø treân moät bieán ngoân ngöõ, caùc ñieåm ñaëc tröng cho moät taäp môø (seõ noùi sau), vaø heä luaät (coù theå duøng maùy tính cho thao taùc naøy thay vì nhaäp baèng phím : sau khi ñaõ taïo caùc taäp môø vaø luaät treân maùy tính thì cho noù truyeàn xuoáng theo cheá ñoä kit ñieàu khieån). Cuoái cuøng laø nhaäp giaù trò nhieät ñoä ñaët.
Cheá ñoä ño hay ñieàu khieån baèng maùy tính : nhaäp caùc thoâng soá hoaøn toaøn treân maùy tính. Khi ñoù, maùy tính seõ tính toaùn vaø kích taét hay môû loø taïi nhöõng thôøi ñieåm töông öùng caùc giaù trò ñaõ tính toaùn.
Sau khi ñaõ nhaäp döõ lieäu xong thì tuøy theo cheá ñoä yeâu caàu maø kit goïi moät chöông trình con töông öùng. Trong quaù trình ñieàu khieån, neáu coù leänh döøng thì kit seõ quay laïi traïng thaùi ban ñaàu, chôø cho moät quaù trình môùi.
3.1. Nhaäp döõ lieäu
Quaù trình nhaäp döõ lieäu laø moät quaù trình chôø thoâng qua voøng laëp. Trong ñoù rieâng quaù trình ñoïc phím cuõng laø moät quaù trình chôø thoâng qua voøng laëp (do khoâng duøng ngaét). Vaø cuõng caàn phaân bieät giöõa nhaäp döõ lieäu thoâng qua baøn phím hay thoâng qua maùy tính. Do vaäy ngoaøi vieäc phaân boá khung thôøi gian hôïp lyù coøn phaûi ñònh nghóa theâm moät côø goïi laø SIOflag nhaèm ñeå kieåm tra hieän taïi ñang nhaäp theo cheá ñoä naøo (thoâng qua baøn phím hay truyeàn töø maùy tính xuoáng) vaø tuøy theo ñoù maø xöû lyù töông öùng.
Trong vieäc phaân boá khung thôøi gian hôïp lyù, raát khoù ñeå vöøa queùt phím vöøa queùt led (neáu duøng voøng laëp). Do ñoù, ta chæ söû duïng voøng laëp cho queùt phím, coøn vieäc queùt led söû duïng haún moät ngaét timer (duøng timer2). Truyeàn noái tieáp cuõng duøng moät ngaét.
Nhö vaäy traïng thaùi ñaàu tieân trong kit laø lieân tuïc queùt phím ñeå kieåm tra xem coù moät phím naøo ñoù ñöôïc aán xuoáng hay khoâng vaø xöû lyù töông öùng. Neáu maùy tính coù truyeàn döõ lieäu xuoáng thì chöông trình phuïc vuï ngaét töông öùng seõ laøm vieäc, xong quaù trình thì baät côø SIOflag roài thoaùt khoûi chöông trình phuïc vuï ngaét. Chöông trình queùt phím nhaän thaáy côø SIOflag ñaõ ñöôïc baät thì cuõng thoaùt khoûi chöông trình queùt phím , chuyeån sang quaù trình ñieàu khieån.
3.1.1. Xöû lyù phím
Moät khi ñaõ ñoïc phím thì töùc laø nhaäp döõ lieäu baèng baøn phím, nhö vaäy chæ coù hai cheá ñoä hoaït ñoäng laø ño vaø ñieàu khieån baèng kit.
Maëc ñònh choïn cheá ñoä laø ñieàu khieån (hieån thò chöõ Control treân caùc led). Neáu muoán thay ñoåi thì nhaán phím Select (led seõ chuyeån ñoåi hieån thò töø Control sang Measure hay ngöôïc laïi moãi khi nhaán phím Select), coøn neáu chaáp nhaän moät cheá ñoä naøo ñoù (theo caùc töø hieån thò treân led) thì nhaán phím Enter.
Neáu queùt phím thaáy coù phím aán thì xöû lyù, nhöng neáu khoâng coù thì tröôùc khi baét ñaàu quaù trình queùt phím môùi phaûi kieåm tra xem SIOflag coù baät hay khoâng. Neáu SIOflag baät (töùc laø ñaõ nhaäp döõ lieäu roài thoâng qua maùy tính) thì thoaùt, coøn neáu khoâng thì môùi baét ñaàu quaù trình queùt phím môùi.
Baét ñaàu
Hieån thò chöõ Control
Coù phím aán ?
Phím = Enter ?
Phím = Select ?
Hieån thò chöõ Measure
Coù phím aán ?
Phím = Enter ?
Phím = Select ?
SIOflag = 1 ?
Xöû lyù phím theo cheá ñoä Control
SIOflag = 1 ?
Xöû lyù phím theo cheá ñoä Measure
Ñuùng
Ñuùng
Ñuùng
Ñuùng
Sai
Sai
Sai
Ñuùng
Sai
Ñuùng
Sai
Sai
Sai
Ñuùng
Sai
Ñuùng
Keát thuùc
3.1.2. Xöû lyù phím theo cheá ñoä Measure
Baét ñaàu
Hieån thò chöõ Duty Cycle
Laáy giaù trò
Caát vaøo bieán Duty Cycle
Keát thuùc
Ñôn giaûn laø laáy giaù trò duty cycle cho quaù trình ño.
3.1.3. Xöû lyù phím theo cheá ñoä Control
Phaân bieät hai loaïi laø ñieàu khieån theo caùc taäp môø maëc ñònh hay caùc taäp môø khaùc. Tuy nhieân, vieäc nhaäp thoâng soá cho caùc taäp môø vaø luaät laø moät ñieàu khoâng neân laøm qua baøn phím bôûi vì toán thôøi gian vaø coâng söùc voâ ích (giaû söû trung bình moãi bieán ngoân ngöõ coù 7 taäp môø thì seõ phaûi nhaäp 2x(7x4) + 7 = 63 giaù trò vaø giaû söû coù 49 luaät thì nhaäp theâm 49x4 = 196 giaù trò nöõa). Thay vì vaäy, ta taïo caùc taäp môø vaø luaät treân maùy tính roài truyeàn xuoáng theo cheá ñoä kit ñieàu khieån. Moät khi ñaõ coù caùc thoâng soá toái öu thì ta chöùa treân kit saún nhö laø maëc ñònh.
Vì vaäy, ôû phaàn thieát keá khoâng quan taâm ñeán vieäc nhaäp caùc giaù trò naøy thoâng qua baøn phím maø chæ coù moät löïa choïn laø laáy caùc taäp môø theo maëc ñònh.
3.1.4. Ñoïc giaù trò
Baét ñaàu
Phím = 0..9 ?
Caát soá thöù nhaát
Phím = 0..9 ?
Con troû = 2
Ñoïc phím
Caát soá thöù hai
Phím = . ?
Ghi nhaän vò trí
Con troû = 1
Ñoïc phím
1
Ñuùng
Ñuùng
Sai
Sai
2
3
4
Ñuùng
Sai
Trong quaù trình nhaäp döõ lieäu thoâng qua baøn phím, sau khi ñaõ choïn cheá ñoä thì ta seõ nhaäp giaù trò cho caùc döõ lieäu. Giaûi thuaät sau ñaây cho thaáy quaù trình ñoïc döõ lieäu nhaäp töø baøn phím.
Phím = Enter ?
1
Ñuùng
2
3
4
5
Phím = <- ?
Phím = Clear ?
Ñuùng
Sai
Sai
Sai
Ñuùng
Phím = 0..9 ?
Con troû = 3
Ñoïc phím
Caát soá thöù ba
Phím = . ?
Ghi nhaän vò trí
Ñuùng
Sai
Ñuùng
Sai
Phím = Enter ?
6
Ñuùng
7
5
Phím = <- ?
Phím = Clear ?
Ñuùng
Sai
Sai
Sai
Ñuùng
Ñaõ ghi nhaän vò trí ?
Sai
7
6
7
Phím = 0..9 ?
Con troû = 4
Ñoïc phím
Caát soá thöù tö
Phím = . ?
Ghi nhaän vò trí
Ñuùng
Sai
Ñuùng
Sai
Phím = Enter ?
9
Ñuùng
8
5
Phím = <- ?
Phím = Clear ?
Ñuùng
Sai
Sai
Sai
Ñuùng
Ñaõ ghi nhaän vò trí ?
Sai
8
4
9
Ñoïc phím
Phím = Enter ?
5
Phím = <- ?
Phím = Clear ?
Sai
Sai
Sai
Ñuùng
Ñuùng
Ñuùng
8
Moät khi ñaõ aán phím Enter thì chöông trình ñi vaøo traïng thaùi soá 5, ôû ñoù döïa vaøo bieán con troû vaø vò trí daáu chaám thaäp phaân maø tính ra soá ñaõ nhaäp. Tuøy vaøo thoâng soá maø kieåm tra coù quaù taàm hay khoâng. Neáu khoâng coù quaù taàm thì thoaùt, ngöôïc laïi thoâng baùo yeâu caàu nhaäp laïi.
3.1.5. Qui ñònh phím
Maõ
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Gaùn
0
1
2
3
4
5
6
7
8
9
.
Clear
<-
Enter
Select
Run
3.1.6. Nhaäp döõ lieäu thoâng qua maùy tính
Laø moät quaù trình trao ñoåi giöõa maùy tính vaø kit qua moät phöông thöùc ñöôïc ñònh tröôùc. Coù theå toùm taét nhö sau :
Maùy tính göûi yeâu caàu thieát laäp ñöôøng truyeàn baèng caùch göûi moät byte coù giaù trò do ngöôøi thieát keá qui ñònh.
Kit traû lôøi saún saøng baèng caùch göûi laïi byte coù giaù trò do ngöôøi thieát keá qui ñònh.
Neáu maùy tính nhaän ñöôïc byte traû lôøi thì böôùc qua böôùc keá tieáp. Coøn neáu sau moät khoaûng thôøi gian maø maùy tính khoâng nhaän ñöôïc byte traû lôøi (do ñöôøng hoaëc do khoâng keát noái, kit khoâng ñöôïc cung caáp ñieän, …) thì maùy tính thoâng baùo khoâng theå keát noái vaø yeâu caàu ngöôøi duøng kieåm tra laïi.
Baét ñaàu truyeàn, maùy tính göûi byte chæ cheá ñoä hoaït ñoäng vaø sau ñoù laø caùc döï lieäu töông öùng vôùi cheá ñoä ñoù.
Sau khi truyeàn xong döõ lieäu, maùy tính baùo keát thuùc baèng caùch göûi moät byte coù giaù trò do ngöôøi thieát keá qui ñònh.
Neáu cheá ñoä hoaït ñoäng thuoäc loaïi maùy tính ño hay maùy tính ñieàu khieån thì trong quaù trình hoaït ñoäng, kit seõ göûi giaù trò nhieät doä ño ñöôïc, coøn maùy tính thì seõ göûi byte baùo hieäu taèt hay môû loø tuøy theo giaù trò cuûa byte do ngöôøi thieát keá qui ñònh.
3.2. Hoaït ñoäng
Sau khi ñaõ thieát laäp döõ lieäu xong, kit ñi vaøo hoaït ñoäng.
Neáu cheá ñoä laø ño nhieät ñoä baèng kit thì seõ duøng timer0 ñeå kích theo chu kyø vaù taét theo duty cycle ñaõ thieát laäp.
Neáu laø ñieàu khieån nhieät ñoä baèng kit thì duøng timer0 kích theo chu kyø, xöû lyù döõ lieäu taïo ra duty cycle töông öùng roài kieåm tra ñeå taét loø theo duty cycle ñoù. Quaù trình xöû lyù döïa theo giaûi thuaät xöû lyù môø ñaõ trình baøy ôû treân.
Coøn neáu cheá ñoä laø maùy tính ño hay maùy tính ñieàu khieån thì laøm theo nhöõng gì maùy tính yeâu caàu.
Do vaäy, caàn qui ñònh cuï theå chöùc naêng cuûa töøng thaønh phaàn hay coøn goïi laø phaân boá taøi nguyeân.
3.3. Phaân boá taøi nguyeân
Trong quaù trình thieát keá, ta phaûi qui ñònh chöùc naêng cuûa moãi vuøng nhôù, timer, soá byte cho bieán vaø vò trí cuûa noù, …
3.3.1. Timer coù taát caû 3 timer treân AT89C52 ñöôïc qui ñònh chöùc naêng nhö sau
Timer0 duøng cho taét loø theo Duty Cycle vaø taïo chu kyø xöû lyù. Chia khoaûng thôøi gian xöû lyù ra 1000 laàn vaø laáy keát quaû ñoù laøm thôøi gian ngaét cuûa timer.
Ví duï : giaû söû thôøi gian laáy maãu vaø xöû lyù laø 3 giaây thì timer0 seõ ngaét moãi 3ms.
Qui ñònh bieán Thousand goàm 2 byte chöùa giaù trò ñeám cho thôøi gian laáy maãu vaø xöû lyù. Baét ñaàu vôùi Thousand = 1000, moãi laàn timer0 ngaét thì giaûm Thousand ñi 1, ñeán khi Thousand = 0 thì baùo hieäu ñaõ ñeán thôøi gian laáy maãu baèng caùch baät côø ProcessFlag, vaø khôûi taïo laïi Thousand = 1000.
Ta cuõng qui ñònh bieán DC_Current goàm 2 byte chöùa giaù trò cho Duty Cycle. Khi chöông trình xöû lyù xong thì löu keát quaû giaûi môø vaøo bieán naøy, moãi laàn timer0 ngaét thì giaûm DC_Current ñi 1, ñeán khi DC_Current = 0 thì ñaõ ñuû thôøi gian töông öùng neân taét loø.
Baét ñaàu
Taét loø
Keát thuùc
DC_Current = 0 ?
Dec(DC_Current)
Thousand = 0 ?
ProcessFlag = 1
Thousand = 1000
Dec(Thousand)
Ñuùng
Ñuùng
Sai
Sai
Giaûi thuaät cho chöông trình phuïc vuï ngaét timer0 :
Timer1 duøng ñeå taïo Baudrate cho truyeàn thoâng noái tieáp, chi tieát veà caùch taïo ñaõ noùi trong phaàn thieát keá kit AT89C52.
ÔÛ ñaây duøng Baudrate = 9600 neân :
MOV SCON,#11010000B ;UART 9-BIT, ENABLE REN
MOV TMOD,#21H ;TIMER1 8-BIT AUTORELOAD, TIMER0 16-BIT
MOV TH1,#(-3) ;9600 BAUD
MOV TL1,TH1
SETB TR1 ;START
Trong truyeàn thoâng noái tieáp, ta söû duïng phöông thöùc truyeàn 1 bit start, 8 bit döõ lieäu, 1 bit parity chaún, vaø 1 bit stop. Nhö vaäy, ngoaøi bit start vaø stop thì ta phaûi truyeàn 9 bit neân thieát laäp cheá ñoä truyeàn treân AT89C52 ôû mode 3 (SM1 = 1, SM0 = 0).
Timer2 duøng cho queùt led theo khoaûng thôøi gian coá ñònh laø 2,5ms.
Neáu ñang hoaït ñoäng thì seõ hieån thò giaù trò nhieät ñoä ño treân 4 led thaáp vaø giaù trò Duty Cycle treân 3 led cao. Ngöôïc laïi seõ hieån thò moät soá töø nhö wait, …
Baét ñaàu
Ñoïc nhieät ñoä
Chuyeån thaønh soá BCD
Löu vaøo vuøng ñeäm 4 LED thaáp
Ñang hoaït ñoäng ?
Pointer = Led6 ?
Hieån thò Led6
Pointer = Led5
Ñoïc Duty Cycle
Chuyeån thaønh soá BCD
Löu vaøo vuøng ñeäm 3 LED cao
Ñuùng
Ñuùng
Sai
Pointer = Led5 ?
1
Sai
Sai
Hieån thò Led5
Pointer = Led4
Ñuùng
2
Keát thuùc
Pointer = Led4 ?
Hieån thò Led4
Pointer = Led3
Ñuùng
Pointer = Led1 ?
1
Sai
Hieån thò Led1
Pointer = Led0
Ñuùng
2
Hieån thò Led0
Pointer = Led6
Sai
3.3.2. RAM on-chip
Vuøng RAM on-chip coù dung löôïng laø 256 byte chia laøm hai vuøng nhoû : vuøng thaáp töø 00H – 7FH vaø vuøng cao töø 80H – FFH.
Vuøng thaáp chöùa bieán vaø côø duøng trong tính toaùn hay thieát laäp traïng thaùi. Neáu laø bieán 2 byte thì byte cao seõ ôû ñòa chæ nhoû hôn byte thaáp.
00H
07H
Bank 0
(R0 ¸ R7)
Caùc thanh ghi tieän duïng cho tính toaùn.
08H
0FH
Led Buffer
Vuøng ñeäm chöùa döõ lieäu caàn xuaát ra led.
10H
2FH
Flags
Vuøng caùc côø traïng thaùi do ngöôøi laäp trình ñònh nghóa.
30H
7FH
Variable
Vuøng caùc bieán do ngöôøi laäp trình ñònh nghóa.
Vuøng cao ñöôïc gaùn cho stack, ñòa chæ 80H baét ñaàu vuøng stack.
3.4. RAM ngoaïi
Chöông trình xöû lyù môø (duøng giaûi thuaät ôû phaàn 1.3) caàn caùc döõ lieäu nhö vò trí caùc taäp môø, luaät, ñoä hoã trôï, … neân ta duøng vuøng RAM ngoaïi töø ñòa chæ 0000H ñeán 1FFFH ñeå löu tröõ döõ lieäu cho xöû lyù môø.
Ñaàu vaøo caùc taäp môø ñaàu vaøo ñöôïc ñaëc tröng bôûi caùc ñieåm ñaëc bieät : daïng chöõ S vaø Z caàn 2 ñieåm, daïng tam giaùc caàn 3 ñieåm, daïng hình thang caàn 4 ñieåm.
Ñeå cho toång quaùt, ta laáy soá ñieåm lôùn nhaát laøm soá ñieåm chung thì moãi taäp môø (baát keå hình daïng) caàn 8 byte (4 ñieåm, moãi ñieåm laø giaù trò 2 byte). Ngoaøi ra ta caàn theâm moät byte ñeå chæ hình daïng cuûa taäp môø neân toång soá byte daønh cho moät taäp môø ñaàu vaøo laø 9 byte.
Chieàu taêng ñòa chæ vuøng nhôù
Hình daïng
1 byte
(High)
Ñieåm 1
(Low)
2 byte
(High)
Ñieåm 2
(Low)
2 byte
(High)
Ñieåm 3
(Low)
2 byte
(High)
Ñieåm 4
(Low)
2 byte
Ñieåm 1
Ñieåm 3
Ñieåm 2
Hình daïng = 0
Ñieåm 1
Ñieåm 2
Hình daïng = 1
Ñieåm 1
Ñieåm 2
Ñieåm 3
Ñieåm 4
Ñieåm 1
Ñieåm 2
Hình daïng = 2
Hình daïng = 3
Hình daïng taäp môø vaø vò trí caùc ñieåm :
Trong tröôøng hôïp soá ñieåm ít, nhö daïng chöõ S chæ coù ñieåm 1 vaø ñieåm 2 thì ñieåm 3 vaø ñieåm 4 seõ khoâng ñöôïc xeùt tôùi.
Ñaàu ra caùc taäp môø ñaàu ra duøng daïng singleton neân chæ caàn 1 ñieåm (mang giaù trò 2 byte) ñònh vò trí cuûa noù.
Chieàu taêng ñòa chæ vuøng nhôù
(High)
Ñieåm
(Low)
2 byte
Luaät môø luaät cho ôû daïng :
Ri : If ET = Ai And DET = Bj Then OUT = Cm With DoSn
Þ caàn 4 byte cho moät luaät : 1 byte chæ taäp môø Ai cuûa ET, moät byte chæ taäp môø Bj cuûa DET, moät byte chæ taäp môø Cm cuûa OUT vaø moät byte cho DoSn.
Chieàu taêng ñòa chæ vuøng nhôù
Ai
1 byte
Bj
1 byte
Cm
1 byte
DoSn
1 byte
Toång hôïp do vuøng nhôù coù giôùi haïn cuõng nhö khoâng caàn thieát phaûi thieát keá nhieàu taäp môø treân moät bieán ngoân ngöõ neân chöông trình haïn cheá soá taäp môø cho moãi bieán laø 9 Þ toång soá luaät coù theå coù laø 9x9x9 = 729 luaät.
0000H
005AH
A1
. . .
A9
9 taäp x 9 byte = 81 byte
005BH
00A1H
B1
. . .
B9
9 taäp x 9 byte = 81 byte
00A2H
00AAH
C1
. . .
C9
9 taäp x 2 byte = 18 byte
00ABH
. . .
R1
. . .
. . .
n luaät x 4 byte = 4n byte
Do khuoân khoå luaän vaên coù giôùi haïn neân phaàn treân ñaây chæ trình baøy caùc giaûi thuaät, ñònh nghóa kieåu döõ lieäu vaø phaân vuøng boä nhôù. Chöông trình coù theå tìm thaáy treân CD-ROM keøm theo.
4. chöông trình treân maùy tính
Ñöôïc vieát baèng Delphi5 cho moâi tröôøng Windows 32-bit, NF Control coù dung löôïng khoaûng hôn 1MB cho pheùp ta laøm vieäc tieän lôïi hôn (dó nhieân laø trong giai ñoaïn giaùm saùt hay thöû nghieäm chöù khi ñaõ thaønh saûn phaåm thì khoâng leõ phaûi keøm maùy tính theo saûn phaåm ?. Khi ñoù chæ moät mình kit AT89C52 laøm vieäc ñoäc laäp).
Cuøng moät giaûi thuaät xöû lyù môø ôû phaàn 1.3 nhö kit AT89C52 nhöng phaàn xöû lyù nheï nhaøng hôn do khoâng phaûi quan taâm ñeán vieäc phaân vuøng döõ lieäu (khoâng caàn phaûi saép bieán naøy naèm ôû ñaâu, laáy maát maáy byte cho noù – chæ ñôn giaûn ñònh nghóa kieåu döõ lieäu coù caáu truùc roài döïa treân ñoù maø haønh ñoäng), toác ñoä xöû lyù cuõng nhanh hôn.
Coù theå nhaäp döõ lieäu hoaït ñoäng cho kit thoâng qua chöông trình :
Neáu thu thaäp nhieät ñoä hay ñieàu khieån baèng kit thì chöông trình seõ chuyeån döõ lieäu (Duty Cycle neáu laáy ñaëc tính haøm hôû vaø caùc taäp môø, luaät, nhieät ñoä ñaët neáu ñieàu khieån).
Neáu laáy ñaëc tính haøm hôû hay ñieàu khieån baèng maùy tính thì chöông trình seõ ñoïc nhieät ñoä, xöû lyù roài xuaát xung kích taét hay môû loø.
Ngoaøi ra chöông trình coøn coù chöùc naêng ñoïc hay taïo taäp tin môø theo chuaån cuûa chöông trình FuzzyTech (duøng cho pha hoïc), khaû naêng taïo ra taäp tin döõ lieäu hoïc vaø hieån thò caùc thoâng soá hoaït ñoäng döôùi daïng ñoà thò. Neáu trong giai ñoaïn thöû nghieäm, chöông trình cho pheùp naïp taäp tin daïng maõ maùy (*.bin) xuoáng kit.
4.1. Qui ñònh kieåu döõ lieäu
Caùc taäp môø ñöôïc ñaëc tröng bôûi caùc ñieåm vaø hình daïng, luaät ñöôïc ñaëc tröng bôûi taâp môø vaøo, taäp môø ra, ñoä hoã trôï, … töùc moãi thaønh phaàn laø moät kieåu döõ lieäu coù caáu truùc.
4.1.1. Caáu truùc döõ lieäu cuûa taäp môø vaøo (ET, DET).
Nhö ta ñaõ bieát, moãi taäp môø baát keå hình daïng ñöôïc qui ñònh bôûi 4 ñieåm ñaëc tröng (tuy nhieân tuøy theo daïng taäp môø maø coù theå boû moät soá ñieåm phía sau) neân caáu truùc cuûa moät taäp môø seõ laø :
Term = record
TermName: String;
Shape: byte;
PointHeigh: array[1..4] of byte;
PointBase: array[1..4] of SmallInt;
end;
Trong ñoù, Termname laø teân cuûa taäp môø, chæ caàn thieát khi hieån thò vaø khi trao ñoåi taäp tin vôùi chöông trình fuzzyTech. Shape chæ hình daïng taäp môø theo qui ñònh ñaõ noùi ôû phaàn 3.4. PointHeigh vaø PointBase töông öùng vôùi vò trí vaø ñoä phuï thuoäc cuûa ñieåm ñaëc tröng (0 hay 1 theo ñoä phuï thuoäc Û 0 hay 100 theo caùch xöû lyù trong chöông trình).
Xeùt treân toaøn bieán ngoân ngöõ thì cho pheùp toái ña 9 taäp môø moãi bieán neân ta chæ duøng moät maûng 9 taäp môø cho moät bieán maø thoâi :
LVAR = record
MinRange, MaxRange: SmallInt;
TermNumber: byte;
TermSet: array[1..9] of Term;
end;
[MinRange,MaxRange] laø mieàn xaùc ñònh cuûa bieán ngoân ngöõ. Termnumber laø soá taäp môø coù trong bieán ngoân ngöõ vaø Termset laø maûng caùc taäp môø ñoù.
4.1.2. Caáu truùc döõ lieäu cho taäp môø ra (OUT)
Moät taäp môø ra chæ caàn hai ñieåm ñaëc tröng bôûi vì ta duøng kieåu singleton. Tuy nhieân, do caàn phaûi giao tieáp vôùi chöông trình fuzzytech neân caàn phaûi töông thích veà caùc qui ñònh. Trong chöông trình fuzzyTech khoâng qui ñònh kieåu singleton nhöng tính nhö singleton khi duøng giaûi môø kieåu CoM. Do vaäy ta vaãn duøng kieäu caáu truùc döõ lieäu cho caùc taäp môø vaøo ñoái vôùi taäp môø ra nhöng phaûi duøng taäp môø daïng tam giaùc vaø laáy vò trí ñænh cuûa tam giaùc chính laø vò trí cuûa singleton.
4.1.3. Caáu truùc döõ lieäu cuûa luaät
Chæ goàm caùc kyù töï (chuoãi) chæ taäp môø naøo cuûa ET, DET ôû phaàn if, caùc kyù töï (chuoãi) chæ taäp môø naøo cuûa OUT ôû phaàn Then, vaø theâm giaù trò hoã trôï (cuõng duøng ôû daïng caùc kyù töï ñeå deã hieån thò treân maøn hình, nhöng khi tính thì phaûi chuyeån sang giaù trò soá duøng haøm StrToInt chaúng haïn).
Rule = record
ETRule, DETRule, OUTRule, DoS: string;
end;
4.2. Giôùi thieäu chöông trình NF Control
Tieâu ñeà
Thanh menu
Thanh coâng cuï
Thanh traïng thaùi
Khi môùi baét ñaàu, chöông trình seõ hieån thò nhö sau :
Sau khi môû moät taäp tin vaø hình daïng caùc menu :
Treân thanh coâng cuï, ta coù theå nhaán caùc nuùt nhö SP cho nhieät ñoä ñaët, ET cho thieát laäp caùc taäp môø cuûa bieán ET, … hay tröïc tieáp double click leân caùc bieåu töôïng töông öùng treân hình, hoaëc choïn qua menu. Ví nhö môû taäp môø ET :
Thay ñoåi teân cuûa taäp môø baèng caùch nhaán Ñoåi teân.
Coù theå thay ñoåi vò trí caùc taäp môû baèng caùch nhaäp tröïc tieáp vaøo caùc khung töông öùng . Hay coù theå choïn theo double click vaøo khung ñoà thò ñeå choïn maëc ñònh (seõ raûi ñeåu treân mieàn xaùc ñònh).
Baûng luaät :
Ñaët giaù trò :
Khi truyeàn döõ lieäu :
Thieát laäp coång noái tieáp :
Hieån thò caùc thoâng soá khi ñieàu khieån hay khi môû moät ñoà thò ñaõ ñieàu khieån töø tröôùc :
Cho pheùp löu caùc thoâng soá cuûa quaù trình hoaït ñoäng duøng ñeå hieån thò treân ñoà thò hay sau naøy toái öu quaù trình. Phaàn môû roäng cuûa taäp tin naøy laø gph. Ñaây laø moät taäp tin coù caáu truùc, goàm hai phaàn :
Phaàn ñaàu laø vaên baûn cho thaáy teân ngöôøi taïo vaø loaïi (coù hai loaïi).
Phaàn keát tieáp laø döõ lieäu daïng maõ nhò phaân.
Taäp tin ñöôïc chia laøm hai loaïi (cuøng phaàn môû roäng) :
4.2.1. Ño nhieät ñoä
Phaàn môû ñaàu laø :
NF Control GraphFile - Copyright (C) by Le Phuoc Thanh.
Style : Measure Mode.
Tieáp theo laø nhieät ñoä ño vaø duty cycle (moãi loaïi 2 byte).
MeasureGraph = record
Measure, Duty: SmallInt;
end;
4.2.2. Ñieàu khieån nhieät ñoä
Phaàn môû ñaàu laø :
NF Control GraphFile - Copyright (C) by Le Phuoc Thanh.
Style : Control Mode.
Tieáp theo laø nhieät ñoä ñaët, nhieät ñoä ño, sai leäch nhieät ñoä, toác ñoä bieán thieân nhieät ñoä vaø duty cycle (moãi loaïi 2 byte).
ControlGraph = record
SetPoint, Measure, Error, ErrRate, Duty: SmallInt;
end;
4.2.3. Taïo taäp tin hoïc
Giaû söû ta thaáy taïi moät ñieåm naøo ñoù, duty cycle caàn coù giaù trò laø 25% trong khi ñieàu khieån laø 21,5% chaúng haïn. Ta nhaáp nuùt phaûi chuoät vaøo ñieåm ñoù :
Nhaäp giaù trò 25 vaøo khung DC, NF Control seõ ghi nhaän ñieàu naøy. sau khi ñaõ thieát laäp ñaày ñuû thì löu taäp tin ñeå sau naøy chöông trình fuzzyTech duøng ñeán.
Taäp tin ñöôïc löu seõ coù phaàn môû roäng laø exp. Khuoân daïng taäp tin naøy seõ noùi trong phaàn 4.4.2
Coù theå caøi ñaët hay xem maõ nguoàn cuûa NF Control töø ñóa CD keøm theâm, khoâng coù maõ nguoàn trong taøi lieäu naøy do raát daøi.
4.3. Giôùi thieäu phaàn meàm fuzzyTech
Phieân baûn hieän coù laø baûn Demo 5.31, khoâng cho pheùp löu taäp tin vaø taïo ra maõ duøng cho vi ñieàu khieån, PLC, C, … do ñoù vieäc NF Control cho pheùp löu taäp tin cuïng laø ñieàu hay : taïo taäp tin treân NF Control, vaøo fuzzyTech môû taäp tin ñoù roài cho hoïc theo maïng Neuron.
Chöông trình fuzzyTech cho pheùp moâ phoûng môø, hoïc theo NeuroFuzzy, phaân cuïm theo Cluster. Ngoaøi ra coøn coù theå ñieàu khieån tröïc tieáp thoâng kit theo chuaån qui ñònh vaø coù theå taïo ra chöông trình cho caùc vi ñieàu khieån, PLC hay chöông trình maõ C, … . Hôn nöõa neáu vieát chöông trình theo höôùng cuûa fuzzyTECH thì coù theå taän duïng hai thö vieän ñoäng laø fuzzy Runtime Control (ActiveX) vaø fuzzy Runtime DLL (NF Control vieát chöông trình ñieàu khieån rieâng cho phuø hôïp kit AT89C52 ñaõ thieát keá, khoâng duøng nhöõng thaønh phaàn naøy). Tuy nhieân baûn Demo download töø internet khoâng cho pheùp löu taäp tin, taïo maõ neân khoâng theå duøng baûn fuzzyTech naøy trong ñieàu khieån maø chæ duøng ñeå hoïc nhaèm toái öu hoùa quaù trình taïo beâ NF Control.
Dó nhieân fuzzyTech laø moät chöông trình maïnh vaø ña naêng hôn NF Control (bôûi vì do moät caû coâng ty laøm ra - Inform Corporation), tuy nhieân noù chæ thöïc söï maïnh khi mua baûn chính thöùc hay khi crack ñöôïc chöông trình.
Khi môû chöông trình, fuzzyTech coù daïng nhö sau :
Khung laøm vieäc hieån thò theo hai daïng : daïng hình caây vaø daïng hình khoái. Coù theå double click tröïc tieáp treân khoái hay treânnhaùnh cuûa caáy ñeå hieån thò ñoái töôïng töông öùng.
Menu file cho caùc thao taùc veà taäp tin.
Menu Edit vaø view cho laøm vieäc treân moäi tröôøng fuzzyTech.
Menu Debug duøng ñeå moâ phoûng hay ñieàu khieån.
Menu Tool cho pheùp taïo maõ, hoïc baèng NeuroFuzzy hay phaân cuïm vôùi Cluster. Ngoaøi ra coù theå choïn baûn hoaït ñoäng (MCU Edition, Professional edition, …).
Menu Window cho hieån thò hay taét cöûa soå hieån thò treân maøn hình.
Khi moâ phoûng (nhaán nuùt hình con reäp treân thanh coâng cuï hay thoâng qua menu) thì chöông trình cho pheùp thay ñoåi giaù trò vaø hieån thò keát quaû qua nhieàu phöông dieän nhö giaù trò soá, taäp môû taùc ñoäng, luaät ñang ñieàu khieån, …
Cho pheùp hieån thò maët ñieàu khieån cuûa project ñang laøm :
Phaân tích luaät taùc ñoäng :
Nhaán vaøo Tool-Neuro-Learning cho thao taùc hoïc baèng caùch choïn moät taäp tín döõ lieäu hoïc (*.EXP ñoái vôùi phieân baûn 5.31 – NF Control cho pheùp taïo ra taäp tin naøy).
Ñoù laø moät soá chi tieát veà fuzzyTech, coù theå caøi ñaët baûn Demo 5.31g töø CD keøm theo.
4.4. Giao tieáp giöõa NF Control vaø fuzzyTech
Vieäc giao tieáp theå hieän qua hai phöông dieän : thöù nhaát laø fuzzyTech coù theå ñoïc taäp tin môø do NF Control taïo ra vaø ngöôïc laïi, NF Control coù theå ñoïc taäp tin môø do fuzzyTech taïo ra nhöng phaûi ñuùng tieâu chuaån :
Coù hai bieán ngoân vaøo baét buoäc phaûi ñaët teân laø ET vaø DET, mieàn xaùc ñònh giôùi haïn töø –400 ñeán +400.
Coù moät bieán ngoân ngöõ ra baét buoäc phaûi ñaët teân laø OUT, mieàn xaøc ñònh töø 0 ñeán 100 (töông öùng cho duty cycle).
Moãi bieán ngoân ngöõ coù toái ña khoâng quaù 9 taäp môø.
Taäp môø ra phaûi coù daïng tam giaùc.
Thöù hai laø NF Control taïo ra taäp tin hoïc cho fuzzyTech coù theå hieåu. Dò nhieân sau khi ñaõ hoïc xong thì laáy caùc soá lieäu ñaõ söûa ñoåi ñöa vaøo NF Control vaø cho NF Control giao tieáp vôùi kit AT89C52 ñeå hoaït ñoäng.
4.4.1. Khuoân daïng taäp tin môø
Taäp tin môø duøng ñeå trao ñoåi giöõa NF Control vaø fuzzyTech laø theo chuaån do fuzzyTech qui ñònh : coù phaàn môû roäng laø ftl (vieát taéc cuûa Fuzzy Technology Language). Thöïc chaát cuûa taäp tin môø laø moät text file maø ta cuõng coù theå hieåu :
PROJECT {
NAME = Oven Control;
AUTHOR = NF Control Software;
MODEL {
VARIABLE_SECTION {
LVAR {
NAME = ET;
BASEVAR = C_degree;
LVRANGE = MIN(-5.000000), MAX(5.000000),
MINDEF(0), MAXDEF(65535),
DEFAULT_OUTPUT(0.000000);
RESOLUTION = XGRID(0.100000), YGRID(0.100000),
SHOWGRID (ON), SNAPTOGRID(OFF);
COLOR = RED (255), GREEN (0), BLUE (0);
TERM {
TERMNAME = ET1;
POINTS = (-5.000000, 1.00000),
(-4.500000, 1.00000),
(-3.000000, 0.00000),
(5.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (255), GREEN (0), BLUE (0);
}
TERM {
TERMNAME = ET2;
POINTS = (-5.000000, 0.00000),
(-4.500000, 0.00000),
(-3.000000, 1.00000),
(-1.500000, 0.00000),
(5.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (128), BLUE (0);
}
TERM {
TERMNAME = ET3;
POINTS = (-5.000000, 0.00000),
(-3.000000, 0.00000),
(-1.500000, 1.00000),
(0.000000, 0.00000),
(5.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (0), BLUE (255);
}
TERM {
TERMNAME = ET4;
POINTS = (-5.000000, 0.00000),
(-1.500000, 0.00000),
(0.000000, 1.00000),
(1.500000, 0.00000),
(5.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (128), GREEN (0), BLUE (0);
}
TERM {
TERMNAME = ET5;
POINTS = (-5.000000, 0.00000),
(0.000000, 0.00000),
(1.500000, 1.00000),
(3.000000, 0.00000),
(5.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (128), BLUE (128);
}
TERM {
TERMNAME = ET6;
POINTS = (-5.000000, 0.00000),
(1.500000, 0.00000),
(3.000000, 1.00000),
(4.500000, 0.00000),
(5.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (0), BLUE (128);
}
TERM {
TERMNAME = ET7;
POINTS = (-5.000000, 0.00000),
(3.000000, 0.00000),
(4.500000, 1.00000),
(5.000000, 1.00000);
SHAPE = LINEAR;
COLOR = RED (255), GREEN (0), BLUE (128);
}
} /* LVAR */
LVAR {
NAME = DET;
BASEVAR = C_per_T;
LVRANGE = MIN(-1.200000), MAX(1.200000),
MINDEF(0), MAXDEF(65535),
DEFAULT_OUTPUT(0.000000);
RESOLUTION = XGRID(0.100000), YGRID(0.100000),
SHOWGRID (ON), SNAPTOGRID(OFF);
COLOR = RED (0), GREEN (255), BLUE (0);
TERM {
TERMNAME = NB;
POINTS = (-1.200000, 1.00000),
(-0.900000, 1.00000),
(-0.600000, 0.00000),
(1.200000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (255), GREEN (0), BLUE (0);
}
TERM {
TERMNAME = NM;
POINTS = (-1.200000, 0.00000),
(-0.900000, 0.00000),
(-0.600000, 1.00000),
(-0.300000, 0.00000),
(1.200000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (128), BLUE (0);
}
TERM {
TERMNAME = NS;
POINTS = (-1.200000, 0.00000),
(-0.600000, 0.00000),
(-0.300000, 1.00000),
(0.000000, 0.00000),
(1.200000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (0), BLUE (255);
}
TERM {
TERMNAME = ZE;
POINTS = (-1.200000, 0.00000),
(-0.300000, 0.00000),
(0.000000, 1.00000),
(0.300000, 0.00000),
(1.200000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (128), GREEN (0), BLUE (0);
}
TERM {
TERMNAME = PS;
POINTS = (-1.200000, 0.00000),
(0.000000, 0.00000),
(0.300000, 1.00000),
(0.600000, 0.00000),
(1.200000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (128), BLUE (128);
}
TERM {
TERMNAME = PM;
POINTS = (-1.200000, 0.00000),
(0.300000, 0.00000),
(0.600000, 1.00000),
(0.900000, 0.00000),
(1.200000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (0), BLUE (128);
}
TERM {
TERMNAME = PB;
POINTS = (-1.200000, 0.00000),
(0.600000, 0.00000),
(0.900000, 1.00000),
(1.200000, 1.00000);
SHAPE = LINEAR;
COLOR = RED (255), GREEN (0), BLUE (128);
}
} /* LVAR */
LVAR {
NAME = OUT;
BASEVAR = Percent;
LVRANGE = MIN(0.000000), MAX(100.000000),
MINDEF(0), MAXDEF(65535),
DEFAULT_OUTPUT(0.000000);
RESOLUTION = XGRID(0.100000), YGRID(0.100000),
SHOWGRID (ON), SNAPTOGRID(OFF);
COLOR = RED (0), GREEN (0), BLUE (255);
TERM {
TERMNAME = OUT1;
POINTS = (0.000000, 1.00000),
(12.500000, 0.00000),
(100.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (255), GREEN (0), BLUE (0);
}
TERM {
TERMNAME = OUT2;
POINTS = (0.000000, 0.00000),
(12.500000, 1.00000),
(25.000000, 0.00000),
(100.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (128), BLUE (0);
}
TERM {
TERMNAME = OUT3;
POINTS = (0.000000, 0.00000),
(12.500000, 0.00000),
(25.000000, 1.00000),
(37.500000, 0.00000),
(100.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (0), BLUE (255);
}
TERM {
TERMNAME = OUT4;
POINTS = (0.000000, 0.00000),
(25.000000, 0.00000),
(37.500000, 1.00000),
(50.000000, 0.00000),
(100.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (128), GREEN (0), BLUE (0);
}
TERM {
TERMNAME = OUT5;
POINTS = (0.000000, 0.00000),
(37.500000, 0.00000),
(50.000000, 1.00000),
(62.500000, 0.00000),
(100.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (128), BLUE (128);
}
TERM {
TERMNAME = OUT6;
POINTS = (0.000000, 0.00000),
(50.000000, 0.00000),
(62.500000, 1.00000),
(75.000000, 0.00000),
(100.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (0), BLUE (128);
}
TERM {
TERMNAME = OUT7;
POINTS = (0.000000, 0.00000),
(62.500000, 0.00000),
(75.000000, 1.00000),
(87.500000, 0.00000),
(100.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (255), GREEN (0), BLUE (128);
}
TERM {
TERMNAME = OUT8;
POINTS = (0.000000, 0.00000),
(75.000000, 0.00000),
(87.500000, 1.00000),
(100.000000, 0.00000);
SHAPE = LINEAR;
COLOR = RED (255), GREEN (0), BLUE (255);
}
TERM {
TERMNAME = OUT9;
POINTS = (0.000000, 0.00000),
(87.500000, 0.00000),
(100.000000, 1.00000);
SHAPE = LINEAR;
COLOR = RED (0), GREEN (255), BLUE (0);
}
} /* LVAR */
} /* VARIABLE_SECTION */
OBJECT_SECTION {
INTERFACE {
INPUT = (ET, CMBF);
POS = -217, -5;
RANGECHECK = ON;
}
INTERFACE {
INPUT = (DET, CMBF);
POS = -217, -155;
RANGECHECK = ON;
}
INTERFACE {
OUTPUT = (OUT, COM);
POS = 80, -83;
RANGECHECK = ON;
}
RULEBLOCK {
NAME = Rule;
INPUT = ET, DET;
OUTPUT = OUT;
AGGREGATION = (MIN_MAX, PAR (0.000000));
COMPOSITION = (GAMMA, PAR (0.000000));
RESULT_AGGR = MAX;
POS = -77, -111;
RULES {
IF ET = ET1
AND DET = NB
THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET1
AND DET = NM
THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET1
AND DET = NS
THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET1
AND DET = ZE
THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET1
AND DET = PS
THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET1
AND DET = PM
THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET1
AND DET = PB
THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET2
AND DET = NB
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET2
AND DET = NM
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET2
AND DET = NS
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET2
AND DET = ZE
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET2
AND DET = PS
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET2
AND DET = PM
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET2
AND DET = PB
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET3
AND DET = NB
THEN OUT = OUT1 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET3
AND DET = NM
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET3
AND DET = NS
THEN OUT = OUT3 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET3
AND DET = ZE
THEN OUT = OUT4 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET3
AND DET = PS
THEN OUT = OUT5 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET3
AND DET = PM
THEN OUT = OUT6 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET3
AND DET = PB
THEN OUT = OUT7 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET4
AND DET = NB
THEN OUT = OUT2 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET4
AND DET = NM
THEN OUT = OUT3 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET4
AND DET = NS
THEN OUT = OUT4 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET4
AND DET = ZE
THEN OUT = OUT5 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET4
AND DET = PS
THEN OUT = OUT6 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET4
AND DET = PM
THEN OUT = OUT7 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET4
AND DET = PB
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET5
AND DET = NB
THEN OUT = OUT3 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET5
AND DET = NM
THEN OUT = OUT4 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET5
AND DET = NS
THEN OUT = OUT5 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET5
AND DET = ZE
THEN OUT = OUT6 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET5
AND DET = PS
THEN OUT = OUT7 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET5
AND DET = PM
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET5
AND DET = PM
THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET6
AND DET = NB
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET6
AND DET = NM
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET6
AND DET = NS
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET6
AND DET = ZE
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET6
AND DET = PS
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET6
AND DET = PM
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET6
AND DET = PB
THEN OUT = OUT8 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET7
AND DET = NB
THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET7
AND DET = NM
THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET7
AND DET = NS
THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET7
AND DET = ZE
THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET7
AND DET = PS
THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET7
AND DET = PM
THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00);
IF ET = ET7
AND DET = PB
THEN OUT = OUT9 WITH 1.000000 : OPEN (0.00, 1.00);
} /* RULES */
}
} /* OBJECT_SECTION */
} /* MODEL */
} /* PROJECT */
Taäp tin ñöôïc môû ñaàu baèng PROJECT{ vaø keát thuùc bôûi }. Taát caû noäi dung naèm trong khoái naøy (gioáng nhö begin vaø end beân Pascal hay Delphi).
Ñaàu tieân laø sô löôïc veà taäp tin nhö teân, taùc giaû, … . Keá ñeán laø phaàn khai baùo bieán söû duïng vaø loaïi cuûa noù (vaøo hay ra) cuøng vôùi luaät trong khoái MODEL{}.
Beân trong khoái MODEL, moãi bieán khai baùo trong khoái VARIABLE_SECTION \ LVAR bao goàm teân, ñôn vò, mieàn xaùc ñònh. Moãi taäp môø ñöôïc khai baùo trong khoái TERM (laø con cuûa khoái LVAR) bao goàm teân taäp môø, vò trí, hình daïng.
Khoái OBJECT_SECTION duøng ñeå hieån thò ñoà hoaï treân maøn hình.
Khoái RULEBLOCK cho thaáy caùc luaät duøng trong project.
Chuù thích ñöôïc ghi trong caëp /* vaø */.
4.4.2. Khuoân daïng taäp tin hoïc
Coù phaàn môû roäng laø EXP, cuõng laø moät text file theo chuaån do fuzzyTech qui ñònh :
;Training Data Set - Created by NF Control Software.
ET DET OUT
;----------------------------------------------
Sample1 1.0 0.2 71.0
Sample2 -0.1 0.6 69.0
Sample3 -0.3 0.4 65.0
Phaàn chuù thích ghi sau daáu ;
(Löu yù phieân baûn môùi laø fuzzyTech 5.4 duøng theo chuaån taùch baèng daáu phaåy cuûa Microsoft Excel döôùi daïng taäp tin *.csv chöù khoâng phaûi baèng khoaûng troáng nhö hieän taïi).
1
Ñieàu khieån thöïc teá
Sau khi ñaõ thieát keá vaø toái öu, ta cho ñieàu khieån theo haøm naác ôû caùc nhieät ñoä khaùc nhau vaø sau ñoù ñieàu khieån toång hôïp nhieàu loaïi nhieät ñoä .
Loø cho pheùp nhieät ñoä toái ña laø 250°C neân ôû ñaây chia laøm nhieàu caáp ñieàu khieån töø 100°C ñeán 250°C.
Keát quaû ñaït ñöôïc khaù toát khi ñieàu khieån theo haøm naác. Do chæ duøng hai taäp môø neân keát quaû cho thaáy söï phuï thuoäc khaù roõ vaøo giaù trò nhieät ñoä ñaët. Tuy nhieân, ña soá ñeàu voït loá nhoû 10% hoaëc khoâng voït loá, sai soá xaùc laäp nhoû hôn 1°C.
Vì chöa thöû ñieàu khieån theo haøm doác neân khoâng bieát keát quaû nhö theá naøo.
8,2°C
0,4°C
1. ñieàu khieån 100°C
Ñaët giaù trò nhieät ñoä ñaët laø 100°C. Keát quaû thu ñöôïc nhö sau :
Vôùi chu kyø laáy maãu vaø ñieàu khieån laø 3s.
Caùc thoâng soá thu ñöôïc :
Thôøi gian leân : 70x3 = 210 giaây = 3,5 phuùt (vôùi nhieät ñoä ban ñaàu laø 28°C).
Ñoä voït loá :
Thôøi gian xaùc laäp (theo chuaån 5%) laø 145x3 = 435 giaây = 7 phuùt 15 giaây.
Thôøi gian xaùc laäp (theo chuaån 2%) laø 220x3 = 660 giaây = 11 phuùt.
Sai soá xaùc laäp laø 0,4°C = 0,4%.
Ñöôøng beân döôùi laø duty cycle töông öùng.
7,7°C
0,6°C
2. ñieàu khieån 125°C
Ñaët giaù trò nhieät ñoä ñaët laø 125°C. Keát quaû thu ñöôïc nhö sau :
Vôùi chu kyø laáy maãu vaø ñieàu khieån laø 3s.
Caùc thoâng soá thu ñöôïc :
Thôøi gian leân : 70x3 = 210 giaây = 3,5 phuùt (vôùi nhieät ñoä ban ñaàu laø 37°C).
Ñoä voït loá :
Thôøi gian xaùc laäp (theo chuaån 5%) laø 125x3 = 375 giaây = 6 phuùt 15 giaây.
Thôøi gian xaùc laäp (theo chuaån 2%) laø 203x3 = 609 giaây = 10 phuùt 9 giaây.
Sai soá xaùc laäp laø 0,6°C = 0,48%.
Ñöôøng beân döôùi laø duty cycle töông öùng.
5,1°C
0,4°C
3. ñieàu khieån 150°C
Ñaët giaù trò nhieät ñoä ñaët laø 150°C. Keát quaû thu ñöôïc nhö sau :
Vôùi chu kyø laáy maãu vaø ñieàu khieån laø 3s.
Caùc thoâng soá thu ñöôïc :
Thôøi gian leân : 90x3 = 270 giaây = 4,5 phuùt (vôùi nhieät ñoä ban ñaàu laø 38°C).
Ñoä voït loá :
Thôøi gian xaùc laäp (theo chuaån 5%) laø 96x3 = 288 giaây = 4 phuùt 48 giaây.
Thôøi gian xaùc laäp (theo chuaån 2%) laø 145x3 = 435 giaây = 7 phuùt 15 giaây.
Sai soá xaùc laäp laø 0,4°C = 0,267%.
Ñöôøng beân döôùi laø duty cycle töông öùng.
4. ñieàu khieån 175°C
3,9°C
0,3°C
Ñaët giaù trò nhieät ñoä ñaët laø 175°C. Keát quaû thu ñöôïc nhö sau :
Vôùi chu kyø laáy maãu vaø ñieàu khieån laø 3s.
Caùc thoâng soá thu ñöôïc :
Thôøi gian leân : 99x3 = 297 giaây = 6 phuùt 57 giaây (vôùi nhieät ñoä ban ñaàu laø 42°C).
Ñoä voït loá :
Thôøi gian xaùc laäp (theo chuaån 5%) laø 106x3 = 318 giaây = 5 phuùt 18 giaây.
Thôøi gian xaùc laäp (theo chuaån 2%) laø 144x3 = 432 giaây = 7 phuùt 12 giaây.
Sai soá xaùc laäp laø 0,3°C = 0,17%.
Ñöôøng beân döôùi laø duty cycle töông öùng.
5. ñieàu khieån 200°C
2,0°C
0,1°C
Ñaët giaù trò nhieät ñoä ñaët laø 200°C. Keát quaû thu ñöôïc nhö sau :
Vôùi chu kyø laáy maãu vaø ñieàu khieån laø 3s.
Caùc thoâng soá thu ñöôïc :
Thôøi gian leân : 130x3 = 390 giaây = 6,5 phuùt (vôùi nhieät ñoä ban ñaàu laø 39°C).
Ñoä voït loá :
Thôøi gian xaùc laäp (theo chuaån 5%) laø 142x3 = 426 giaây = 7 phuùt 6 giaây.
Thôøi gian xaùc laäp (theo chuaån 2%) laø 152x3 = 456 giaây = 7 phuùt 36 giaây.
Sai soá xaùc laäp laø 0,1°C = 0,05%.
Ñöôøng beân döôùi laø duty cycle töông öùng.
6. ñieàu khieån 225°C
0,9°C
0,3°C
Ñaët giaù trò nhieät ñoä ñaët laø 225°C. Keát quaû thu ñöôïc nhö sau :
Vôùi chu kyø laáy maãu vaø ñieàu khieån laø 3s.
Caùc thoâng soá thu ñöôïc :
Thôøi gian leân : 167x3 = 501 giaây = 8 phuùt 21 giaây (vôùi nhieät ñoä ban ñaàu laø 37°C).
Ñoä voït loá :
Thôøi gian xaùc laäp (theo chuaån 5%) laø 181x3 = 543 giaây = 9 phuùt 3 giaây.
Thôøi gian xaùc laäp (theo chuaån 2%) laø 194x3 = 582 giaây = 9 phuùt 42 giaây.
Sai soá xaùc laäp laø 0,3°C = 0,13%.
Ñöôøng beân döôùi laø duty cycle töông öùng.
7. ñieàu khieån 250°C
0,6°C
Ñaët giaù trò nhieät ñoä ñaët laø 250°C. Keát quaû thu ñöôïc nhö sau :
Vôùi chu kyø laáy maãu vaø ñieàu khieån laø 3s.
Caùc thoâng soá thu ñöôïc :
Thôøi gian leân : 192x3 = 576 giaây = 9 phuùt 36 giaây (vôùi nhieät ñoä ban ñaàu laø 30°C).
Ñoä voït loá : khoâng coù voït loá
Thôøi gian xaùc laäp (theo chuaån 5%) laø 216x3 = 648 giaây = 10 phuùt 48 giaây.
Thôøi gian xaùc laäp (theo chuaån 2%) laø 234x3 = 702 giaây = 11 phuùt 42 giaây.
Sai soá xaùc laäp laø 0,6°C = 0,24%.
Ñöôøng beân döôùi laø duty cycle töông öùng.
8. ñieàu khieån toång hôïp laàn thöù nhaát
Ñaët giaù trò nhieät ñoä laàn löôït laø 250°C, 225°C, 175°C. Keát quaû thu ñöôïc nhö sau :
9. ñieàu khieån toång hôïp laàn thöù hai
Ñaët giaù trò nhieät ñoä laàn löôït laø 100°C, 150°C vaø 200°C. Keát quaû thu ñöôïc nhö sau :
Nhaän xeùt : keát quaû ñieàu khieån toát neân neáu coù phaùt trieån theâm thì chæ chænh cho tinh hôn chuùt nöõa maø thoâi.
Thöïc ra tham voïng cuûa taùc giaû raát lôùn : muoán bieán chöông trình NF Control thaønh moät chöông trình maãu toång quaùt cho ñieàu khieån loø nhieät, töùc laø coù ñaày ñuû caùc phöông phaùp ñieàu khieån nhö On-Off, PID, PID töï chænh ñònh, môø vaø NeuroFuzzy coù saún chöùc naêng hoïc treân chöông trình, khoâng phaûi döïa vaøo chöông trình fuzzyTech. Khi ñoù, coù theå noùi laø khoâng caàn laøm veà ñeà taøi naøy nöõa.
Tuy nhieân do thôøi gian coù haïn vaø söùc ngöôøi coù haïn neân chæ thöïc hieän ñöôïc theo yeâu caàu ñeà taøi maø khoâng theå môû roäng theâm. Ñaønh goïi laø gôïi yù cho caùc baïn sinh vieân khoùa sau vaäy.
1. Ñieàu khieån töï ñoäng (quyeån 1,2) – Nguyeãn Thò Phöông Haø – Nhaø xuaát baûn khoa hoïc vaø kyõ thuaät – 1996.
2. Giaùo trình caûm bieán – Phan Quoác Phoâ, Hoaøng Ñình Chieán – Nhaø xuaát baûn khoa hoïc vaø kyõ thuaät – 2000.
3. Lyù thuyeát ñieàu khieån môø – Phan Xuaân Minh, Nguyeãn Doaõn Phöôùc – Nhaø xuaát baûn khoa hoïc vaø kyõ thuaät – 1999.
4. Höôùng daãn thí nghieäm vi xöû lyù – Boä moân kyõ thuaät ñieän töû – 1999.
5. Höôùng daãn thí nghieäm ñieàu khieån töï ñoäng 1, 2 – Boä moân Ñieàu khieån töï ñoäng.
6. The 8051 Microcontroller – I. Schott MacKenzie – Prentice Hall – 1995.
7. Fuzzy logic with engineer application – Timothy J. Ross – McGraw Hill – 1997.
8. The temperature handbook – Copyright by Omega Engineering Inc., 1995.
9. Fuzzy Logic – Robert Fulleùr.
10. Neural network – Robert Fulleùr.
11. NeuroFuzzy – Robert Fulleùr.
12. IEC 1131 – Programmable controllers – Part 7 – Fuzzy Control Programming – 1997.
13. Seminar chuyeân ñeà Maïng neuron vaø giaûi thuaät – Le Chí Nieäm – Khoa coâng ngheä thoâng tin – 1996.
14. Soå tay cho ngöôøi laäp trình PC – Julio Sanchez, Maria P. Canton – Nhaø xuaát baûn thoáng keâ – 1997.
15. Digital System : Principles and Applications – Ronald J. Tocci – Prentice Hall – 1991.
16. Delphi4 – Kent Reidorrph - Borland Press – Sams Publishing.
17. LS Data sheet – Motorola.
Vaø moät soá saùch khaùc cuõng nhö taøi lieäu download treân internet qua moät soá website nhö :
vaø coøn nhieàu nöõa (coù theå duøng coâng cuï search cuûa Yahoo, ñaùnh töø Fuzzy hay NeuroFuzzy).
Các file đính kèm theo tài liệu này:
- DO AN LVTNungdung NeuroFuzzy dkhien t bang KIT 89c52.doc