4. Chương trình trên máy tính
4.4. Giao tiếp giữa NF Control và FuzzyTech
Việc giao tiếp thể hiện qua hai phương diện : thứ nhất là fuzzyTech cĩ thể đọc tập tin mờ do NF Control tạo ra và ngược lại, NF Control cĩ thể đọc tập tin mờ do fuzzyTech tạo ra nhưng phải đúng tiêu chuẩn :
• Cĩ hai biến ngơn vào bắt buộc phải đặt tên là ET và DET, miền xác định giới hạn từ –400 đến +400.
• Cĩ một biến ngơn ngữ ra bắt buộc phải đặt tên là OUT, miền xàc định từ 0 đến 100 (tương ứng cho duty cycle).
• Mỗi biến ngơn ngữ cĩ tối đa khơng quá 9 tập mờ.
• Tập mờ ra phải cĩ dạng tam giác.
Thứ hai là NF Control tạo ra tập tin học cho fuzzyTech cĩ thể hiểu. Dị nhiên sau khi đã học xong thì lấy các số liệu đã sửa đổi đưa vào NF Control và cho NF Control giao tiếp với kit AT89C52 để hoạt động.
4.4.1. Khuơn dạng tập tin mờ
Tập tin mờ dùng để trao đổi giữa NF Control và fuzzyTech là theo chuẩn do fuzzyTech qui định : cĩ phần mở rộng là ftl (viết tắc của Fuzzy Technology Language). Thực chất của tập tin mờ là một text file mà ta cũng cĩ thể hiể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 {
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 {
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 {
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); }
} /* 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
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
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 */
Tập tin được mở đầu bằng PROJECT{ và kết thúc bởi }. Tất cả nội dung nằm trong khối này (giống như begin và end bên Pascal hay Delphi).
Đầu tiên là sơ lược về tập tin như tên, tác giả, … . Kế đến là phần khai báo biến sử dụng và loại của nĩ (vào hay ra) cùng với luật trong khối MODEL{}.
Bên trong khối MODEL, mỗi biến khai báo trong khối VARIABLE_SECTION \ LVAR bao gồm tên, đơn vị, miền xác định. Mỗi tập mờ được khai báo trong khối TERM (là con của khối LVAR) bao gồm tên tập mờ, vị trí, hình dạng.
Khối OBJECT_SECTION dùng để hiển thị đồ hoạ trên màn hình. Khối RULEBLOCK cho thấy các luật dùng trong project.
Chú thích được ghi trong cặp /* và */.
4.4.2. Khuơn dạng tập tin học
Cĩ phần mở rộng là EXP, cũng là một text file theo chuẩ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
Phần chú thích ghi sau dấu ;
(Lưu ý phiên bản mới là fuzzyTech 5.4 dùng theo chuẩn tách bằng dấu phẩy của Microsoft Excel dưới dạng tập tin *.csv chứ khơng phải bằng khoảng trống như hiện tại).
1
1 Đ
ĐIỀU KHIỂN THỰC TẾIỀU KHIỂN THỰC TẾ
Sau khi đã thiết kế và tối ưu, ta cho điều khiển theo hàm nấc ở các nhiệt độ khác nhau và sau đĩ điều khiển tổng hợp nhiều loại nhiệt độ .
Lị cho phép nhiệt độ tối đa là 250°C nên ở đây chia làm nhiều cấp điều khiển từ 100°C đến 250°C.
Kết quả đạt được khá tốt khi điều khiển theo hàm nấc. Do chỉ dùng hai tập mờ nên kết quả cho thấy sự phụ thuộc khá rõ vào giá trị nhiệt độ đặt. Tuy nhiên, đa số đều vọt lố nhỏ 10% hoặc khơng vọt lố, sai số xác lập nhỏ hơn 1°C.