Luận án Nghiên cứu giám sát ổn định hệ thống điện trong thời gian thực
Trong bối cảnh hiện nay để đáp ứng nhu cầu tăng trưởng của phụ tải điện
và an ninh năng lượng để ổn định phát triển kinh tế, nhiều loại hình nhà máy
điện đã và đang được xây dựng và đấu nối vào làm việc trong hệ thống điện
(HTĐ). Bên cạnh đó cấu trúc của hệ thống điện ngày càng phức tạp: số nút tăng
lên, vận hành mạch vòng kín, Trong quá trình vận hành, trào lưu công suất
trên các đường dây truyền tải thường xuyên thay đổi theo sự thay đổi của phụ
tải tiêu thụ và công suất phát của các nhà máy điện. Khi công suất truyền tải
vượt quá giới hạn cho phép sẽ dẫn đến sụp đổ điện áp và nặng nề hơn sẽ gây
mất ổn định và tan rã HTĐ. Trên thế giới có rất nhiều nước đã xảy ra sự cố tan
rã HTĐ liên quan đến ổn định của hệ thống, ví dụ gần đây về vấn đề ổn định
điện áp đã xảy ra các sự cố được đánh giá rất nghiêm trọng vào năm 2003 tại
Mỹ - Canada và Ý. Sự cố mất điện tại Mỹ - Canada ảnh hưởng đến một khu
vực khoảng 50 triệu khách hàng với sản lượng công suất bị cắt khoảng 61,8
MW trong gần hai ngày. Ước tính tổng thiệt hại khoảng từ 4 đến 10 tỷ đô la
Mỹ. Tại Canada là một khoản lỗ ròng với khoảng 18,9 triệu giờ làm việc, và
các lô hàng sản xuất tại Ontario đã giảm 2,3 tỷ đô la Canada [1]. Ở Việt Nam,
theo thống kê trong thời gian qua trên HTĐ 500kV Việt Nam đã có nhiều sự cố
mất điện lớn, diện rộng có liên quan hiện tượng dao động công suất lớn, mất
ổn định điện áp hoặc sụp đổ điện áp xảy ra vào các ngày 17/05/2005,
27/12/2006, 04/09/2007, 29/03/2009, 18/06/2009, 25/07/2009, 08/07/2010 và
22/5/2013 [2], [3]. Như vậy các sự cố sụp đổ HTĐ đều gây ra các vấn đề xã hội
và tổn thất kinh tế nghiêm trọng, chi phí rất lớn.
Tóm tắt nội dung tài liệu: Luận án Nghiên cứu giám sát ổn định hệ thống điện trong thời gian thực
BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
PHẠM VĂN KIÊN
NGHIÊN CỨU GIÁM SÁT ỔN ĐỊNH
HỆ THỐNG ĐIỆN TRONG THỜI GIAN THỰC
LUẬN ÁN TIẾN SĨ KỸ THUẬT
Đà Nẵng - 2018
BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
PHẠM VĂN KIÊN
NGHIÊN CỨU GIÁM SÁT ỔN ĐỊNH
HỆ THỐNG ĐIỆN TRONG THỜI GIAN THỰC
CHUYÊN NGÀNH: KỸ THUẬT ĐIỆN
MÃ SỐ: 62.52.02.02
LUẬN ÁN TIẾN SĨ KỸ THUẬT
Người hướng dẫn khoa học:
1. PGS.TS. Ngô Văn Dưỡng
2. GS. TS Lê Kim Hùng
Đà Nẵng - 2018
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. Những số
liệu, kết quả nêu trong luận án là trung thực và chưa được ai công bố trong bất
kỳ công trình nào khác.
Tác giả luận án
Phạm Văn Kiên
ii
MỤC LỤC
LỜI CAM ĐOAN........................................................................................................i
MỤC LỤC ................................................................................................................. ii
DANH MỤC CÁC CHỮ VIẾT TẮT ......................................................................vi
DANH MỤC CÁC HÌNH ....................................................................................... vii
DANH MỤC CÁC BẢNG ......................................................................................... x
TRANG THÔNG TIN VỀ LUẬN ÁN.....................................................................xi
DISSERTATION INFORMATION .................................................................... xiii
MỞ ĐẦU ..................................................................................................................... 1
1. Tính cấp thiết của đề tài nghiên cứu ....................................................................... 1
2. Mục đích nghiên cứu ............................................................................................... 2
3. Đối tượng và phạm vi nghiên cứu ........................................................................... 3
4. Cách tiếp cận và phương pháp nghiên cứu ............................................................. 4
5. Nội dung nghiên cứu ............................................................................................... 8
6. Ý nghĩa khoa học và thực tiễn của luận án ............................................................. 8
CHƯƠNG 1 10
TỔNG QUAN VỀ CÁC PHƯƠNG PHÁP TÍNH TOÁN, PHÂN TÍCH VÀ
ĐÁNH GIÁ ỔN ĐỊNH CỦA HTĐ ........................................................................... 10
1.1. Mở đầu ............................................................................................................... 10
1.2. Các phương pháp tính toán, phân tích và đánh giá ổn định HTĐ ...................... 12
1.2.1. Phương pháp tính toán theo tiêu chuẩn năng lượng ................................. 13
1.2.2. Đánh giá ổn định theo tiêu chuẩn Lyapunov ............................................ 15
1.2.3. Phương pháp phân tích đường cong PV và QV ....................................... 17
1.2.4. Phương pháp phân tích độ nhạy VQ (VQ Sensitivity Analysis) và phân
tích trạng thái QV (QV Modal Analysis) ........................................................... 21
1.2.5. Phương pháp đánh giá theo chỉ số ổn định ............................................... 24
1.2.6. Các tiêu chuẩn thực dụng Markovits ........................................................ 28
1.3. Đề xuất phương pháp nghiên cứu ...................................................................... 30
iii
1.4. Kết luận chương ................................................................................................. 36
CHƯƠNG 2 37
PHƯƠNG PHÁP XÂY DỰNG MIỀN LÀM VIỆC CHO PHÉP THEO ĐIỀU
KIỆN GIỚI HẠN ỔN ĐỊNH TRONG MẶT PHẲNG CÔNG SUẤT ................. 37
2.1. Mở đầu ............................................................................................................... 37
2.2. Phương pháp tính toán đẳng trị sơ đồ HTĐ ....................................................... 38
2.2.1. Hệ phương trình trạng thái HTĐ ở chế độ xác lập ................................... 38
2.2.2. Đề xuất phương pháp GMAT để tính toán đẳng trị sơ đồ HTĐ .............. 41
2.3. Chương trình tính toán đẳng trị sơ đồ sử dụng phương pháp GEMAT ............. 44
2.3.1. Xây dựng lưu đồ thuật toán chương trình ................................................ 44
2.3.2. Chương trình tính toán đẳng trị sơ đồ HTĐ ............................................. 46
2.4. Xây dựng miền làm việc ổn định trong MPCS của HTĐ phức tạp ................... 50
2.5. Xây dựng chương trình miền làm việc cho phép theo điều kiện giới hạn ổn định
điện áp trong mặt phẳng công suất ............................................................................ 59
2.5.1. Xây dựng lưu đồ thuật toán chương trình miền làm việc cho phép theo
điều kiện giới hạn ổn định điện áp trong mặt phẳng công suất .......................... 59
2.5.2. Xây dựng chương trình miền làm việc cho phép theo điều kiện giới hạn
ổn định điện áp trong mặt phẳng công suất ........................................................ 61
2.5.3. Đánh giá độ tin cậy của chương trình ....................................................... 63
2.6. Kết luận chương ................................................................................................. 69
CHƯƠNG 3 71
PHƯƠNG PHÁP ĐÁNH GIÁ MỨC ĐỘ ỔN ĐỊNH CỦA HỆ THỐNG ĐIỆN THEO
CÁC YẾU TỐ BẤT ĐỊNH ...................................................................................... 71
3.1. Mở đầu ............................................................................................................... 71
3.2. Tính chất ngẫu nhiên của các thông số vận hành và cấu trúc HTĐ ................... 73
3.2.1. Hàm phân phối nhị thức (Binomial Distribution) ..................................... 74
3.2.2. Hàm phân phối Poisson (Poisson Distribution)........................................ 74
3.2.3. Hàm phân phối chuẩn (Normal Distribution) ........................................... 75
3.2.4. Hàm Weibull ............................................................................................. 77
iv
3.3. Phương pháp xây dựng miền làm việc cho phép trong MPCS theo các thông tin
bất định của HTĐ ...................................................................................................... 77
3.3.1. Thuật toán xây dựng miền làm việc cho phép trong MPCS theo các thông
tin bất định của HTĐ .......................................................................................... 77
3.3.2. Phương pháp xác định số điểm cắt đường đặc tính giới hạn .................... 80
3.4. Xây dựng chương trình xác định vùng làm việc nguy hiểm trong MPCS của
công suất nút phụ tải ................................................................................................. 81
3.4.1. Xây dựng chương trình xác định vùng làm việc nguy hiểm .................... 81
3.4.2. Áp dụng tính toán cho sơ đồ IEEE 39 nút ................................................ 84
3.5. Kết luận chương ................................................................................................. 90
CHƯƠNG 4 92
ÁP DỤNG XÂY DỰNG CHƯƠNG TRÌNH GIÁM SÁT ỔN ĐỊNH CHO HTĐ
500KV VIỆT NAM THEO CÁC YẾU TỐ BẤT ĐỊNH ........................................ 92
4.1. Hiện trạng và tổng thể quy hoạch HTĐ 500kV Việt Nam đến 2025 ................. 92
4.1.1. Hiện trạng vận hành HTĐ 500kV ............................................................ 92
4.1.2. Quy hoạch HTĐ 500kV đến 2025 ............................................................ 94
4.2. Thông số vận hành các TBA 500kV Việt Nam ................................................. 96
4.2.1. Thực trạng Cung – Cầu điện năng ............................................................ 96
4.2.2. Thu thập, xử lý số liệu và xác định qui luật ngẫu nhiên của công suất các
nút phụ tải ........................................................................................................... 98
4.3. Xây dựng bộ số liệu ngẫu nhiên công suất P, Q cho các nút phụ tải tại các TBA
500kV .................................................................................................................... 98
4.4. Áp dụng để tính toán xác định vùng làm việc nguy hiểm của công suất phụ tải
trong MPCS cho HTĐ 500kV Việt Nam ................................................................ 100
4.4.1. Sơ đồ HTĐ .............................................................................................. 100
4.4.2. Thông số các phần tử của hệ thống ........................................................ 100
4.4.3. Chọn chế độ vận hành cơ bản ................................................................. 100
4.4.4. Áp dụng để tính toán xác định vùng làm việc nguy hiểm của công suất
phụ tải trong MPCS cho HTĐ 500kV Việt Nam ............................................. 102
v
4.5. Phân tích, đánh giá mức độ ổn định của HTĐ 500kV Việt Nam .................... 105
4.6. Kết luận chương ............................................................................................... 109
KẾT LUẬN VÀ KIẾN NGHỊ 111
1. Kết luận ............................................................................................................... 111
2. Kiến nghị ............................................................................................................. 113
DANH MỤC CÁC CÔNG TRÌNH ĐÃ CÔNG BỐ 1
DANH MỤC TÀI LIỆU THAM KHẢO 2
PHỤ LỤC i
Phụ lục 1: So sánh kết quả tính toán, phân tích ổn định cho sơ đồ IEEE39 nút ..........i
Phụ lục 2: Tổng trở các nhánh đường dây và máy biến áp sơ đồ IEEE39 nút ........... v
Phụ lục 3: Kết quả phân tích các số liệu thống kê phụ tải tại các TBA 500kV Việt
Nam 2016 ...................................................................................................................vi
Phụ lục 4: Thông số HTĐ 500kV Việt Nam ......................................................... xxiii
Phụ lục 5: Kết quả tính toán phân tích áp dụng cho HTĐ 500kV Việt Nam đến 2025
................................................................................................................................. xxx
Phụ lục 6: Các mã code chính sử dụng trong luận án ................................................ li
vi
DANH MỤC CÁC CHỮ VIẾT TẮT
ĐTSĐ Đẳng trị sơ đồ
ĐZ Đường dây
EVNNPT Tổng công ty truyền tải điện quốc gia
GDP Gross Domestic Product
GIS Gas Insulation Switchgear
HTĐ Hệ thống điện
MBA Máy biến áp
MFĐ Máy phát điện
MLVOĐ Miền làm việc ổn định
MPCS Mặt phẳng công suất
NCKH Nghiên cứu khoa học
NCSS Phần mềm thống kê của hãng NCSS
PS Power system
PSS/ADEPT Power System Simulator / Advanced Distribution Engineering
Productivity Tool
PSSE Power System Simulator for Engineering
R Phần mềm thống kê mã nguồn mở
SAS Statistical Analysis Systems
SCADA Supervisory Control and Data Acquisition
SPSS Statistical Product and Services Solutions
TBA Trạm biến áp
TĐK Tự động điều chỉnh kích từ máy phát điện
SCA Siêu cao áp
vii
DANH MỤC CÁC HÌNH
Hình 1. Các bài báo công bố quốc tế về ổn định HTĐ từ 1950-2017 (theo Google
Scholar) 5
Hình 1.1. Mô hình HTĐ đơn giản (a) và đặc tính công suất của Tuabin-MFĐ (b)
13
Hình 1.2. Mô hình HTĐ tại nút phụ tải (a) và đặc tính công suất phản kháng các
máy phát và phụ tải (b) 14
Hình 1.3. Sơ đồ thay thế HTĐ của hình 1.1 17
Hình 1.4. Đường đặc tính PV xét với các dạng tải và cos 2 khác nhau [2] 18
Hình 1.5. Sơ đồ hệ thống điện đơn giản (a) và sơ đồ tính toán phân tích (b). 19
Hình 1.6. Đường cong QV ứng với các chế độ vận hành khác nhau [2] 19
Hình 1.7. Mô hình đường dây truyền tải 25
Hình 1.9. PVSM theo công suất phụ tải tại nút j xét cho sơ đồ IEEE 14 nút 27
Hình 1.8. Mô hình HTĐ nối với nút j (a) và sơ đồ thay thế tương đương (b) 27
Hình 1.10. Sơ đồ HTĐ có cấu trúc bất kỳ (a) và sơ đồ đẳng trị hình tia (b) 31
Hình 1.11. Miền làm việc cho phép trong MPCS xét ở chế độ bình thường (a) và chế
độ nặng nề nhất (b) 32
Hình 1.12. Miền làm việc cho phép trong MPCS xét đến các yếu tố bất định của HTĐ
34
Hình 2.1. Sơ đồ đẳng trị HTĐ (a) và miền làm việc ổn định của công suất phụ tải
trong MPCS (b) 38
Hình 2.2. Sơ đồ thay thế tương đương HTĐ IEEE 9 nút (a) và sơ đồ đẳng trị về nút
phụ tải cần quan tâm (b) 41
Hình 2.3. Kết quả tính toán đẳng trị sơ đồ HTĐ dùng phương pháp GEMAT 44
Hình 2.4. Lưu đồ thuật toán đẳng trị sơ đồ thay thế HTĐ dùng phương pháp
GEMAT 45
Hình 2.5. Giao diện chương trình tính đẳng trị sơ đồ. 47
Hình 2.6. Giao diện nhập thông tin nút (a), nhánh ĐZ (b), MBA (c) và thiết bị bù
viii
(d) 47
Hình 2.7. Mở sơ đồ HTĐ đã có sẵn trong cơ sở dữ liệu 48
Hình 2.8. Giao diện nhập Thông tin về các phần tử của HTĐ vào thư viện 49
Hình 2.9. Giao diện database (a) và sơ đồ nguyên lý của HTĐ(b) 49
Hình 2.10. Bảng kết quả tính đẳng trị của HTĐ 50
Hình 2.11. Sơ đồ đẳng trị hình tia của HTĐ có F nguồn cung cấp. 51
Hình 2.12. Thuật toán tính toán và xây dựng miền làm việc nguy hiểm 60
Hình 2.13. Giao diện chương trình (a) và đường cong giới hạn ổn định tĩnh (b) cho
sơ đồ IEEE 39 nút 61
Hình 2.14. Kết quả tính toán tại nút 25 sơ đồ IEEE 39 nút khi phụ tải làm việc trong
vùng ổn định (a) và cách xác định hệ số dự trữ ổn định tĩnh (b) 62
Hình 2.15. Sơ đồ HTĐ IEEE 9 nút 63
Hình 2.16. Giao diện chương trình tính toán cho sơ đồ IEEE 9 nút 65
Hình 2.17. Bảng hiển thị và hai khối chứa các thiết bị mô phỏng 67
Hình 2.18. Giao diện màn hình giám sát trên máy tính kết nối với mô hình 67
Hình 2.19. Miền làm việc ổn định trong MPCS P-Q xét tại nút 5 68
Hình 3.1. Miền làm việc cho phép trong MPCS theo tiêu chuẩn ổn định dQ/dU<0
khi không xét đến yếu tố bất định (a) và xét đến yếu tố bất định (b) 72
Hình 3.2. Đồ thị hàm mật độ hàm phân phối Gaussian 75
Hình 3.3. Các điểm cắt do đoạn OM3 tạo ra trong vùng nguy hiểm 78
Hình 3.4. Lưu đồ thuật toán xây dựng miền làm việc ổn định của công suất phụ tải
trong MPCS khi xét đến yếu tố bất định 79
Hình 3.5. Xác định tọa độ điểm cắt trong vùng nguy hiểm 81
Hình 3.6. Giao diện của chương trình 82
Hình 3.7. Giao diện nhập số liệu Nút, nhánh DZ và nhánh MBA 82
Hình 3.8. Giao diện nhập số ngẫu nhiên 82
Hình 3.9. Kết quả tính toán các đại lượng thay thế 83
Hình 3.10. Kết quả ma trận trạng thái của HTĐ IEEE 39 nút 83
Hình 3.11. Sơ đồ HTĐ IEEE 39 Nút 84
ix
Hình 3.12. Sơ đồ nguyên lý HTĐ IEEE 39 Nút 88
Hình 3.13. Vùng làm việc nguy hiểm của công suất nút phụ tải 25 88
Hình 4.1. Sơ đồ hiện trạng HTĐ 500kV Việt Nam tính đến tháng 8/2017 93
Hình 4.2. Sơ đồ quy hoạch HTĐ 500kV Việt Nam giai đoạn 20162025 95
Hình 4.3. Biểu đồ phụ tải điển hình ngày từ Thứ 2 đến Chủ nhật năm 2016 96
Hình 4.4. Biểu đồ năng lượng ngày các tháng của HTĐ quốc gia 97
Hình 4.5. Tình hình nguồn cung điện tại Việt Nam giai đoạn 2001-2016 và dự
phòng theo quy hoạch điện VII đến 2030 97
H ... ode) and
(SimpleGraph.DefaultNodeClass = TRhomboidalNode);
ObjectsRhomboid.Enabled := not IsReadonly;
end;
procedure TMainForm.ObjectsRhomboidExecute(Sender: TObject);
begin
SimpleGraph.DefaultNodeClass := TRhomboidalNode;
SimpleGraph.CommandMode := cmInsertNode;
end;
xci
procedure TMainForm.ObjectsPentagonUpdate(Sender: TObject);
begin
ObjectsPentagon.Checked :=(SimpleGraph.CommandMode = cmInsertNode) and
(SimpleGraph.DefaultNodeClass = TPentagonalNode);
ObjectsPentagon.Enabled := not IsReadonly;
end;
procedure TMainForm.ObjectsPentagonExecute(Sender: TObject);
begin
SimpleGraph.DefaultNodeClass := TPentagonalNode;
SimpleGraph.CommandMode := cmInsertNode;
end;
procedure TMainForm.ObjectsHexagonUpdate(Sender: TObject);
begin
ObjectsHexagon.Checked :=(SimpleGraph.CommandMode = cmInsertNode) and
(SimpleGraph.DefaultNodeClass = THexagonalNode);
ObjectsHexagon.Enabled := not IsReadonly;
end;
procedure TMainForm.ObjectsHexagonExecute(Sender: TObject);
begin
SimpleGraph.DefaultNodeClass := THexagonalNode;
SimpleGraph.CommandMode := cmInsertNode;
end;
procedure TMainForm.ObjectsLinkUpdate(Sender: TObject);
begin
ObjectsLink.Checked :=(SimpleGraph.CommandMode = cmInsertLink);
ObjectsLink.Enabled := not IsReadonly;
end;
procedure TMainForm.ObjectsLinkExecute(Sender: TObject);
begin
SimpleGraph.CommandMode := cmInsertLink;
end;
procedure TMainForm.ViewZoomInUpdate(Sender: TObject);
begin
ViewZoomIn.Enabled := (SimpleGraph.Zoom < High(TZoom));
end;
procedure TMainForm.ViewZoomInExecute(Sender: TObject);
begin
SimpleGraph.ChangeZoomBy(+10, zoCenter);
end;
procedure TMainForm.ViewZoomOutUpdate(Sender: TObject);
begin
ViewZoomOut.Enabled := (SimpleGraph.Zoom > Low(TZoom));
end;
procedure TMainForm.ViewZoomOutExecute(Sender: TObject);
begin
SimpleGraph.ChangeZoomBy(-10, zoCenter);
end;
procedure TMainForm.ViewActualSizeUpdate(Sender: TObject);
begin
ViewActualSize.Enabled := (SimpleGraph.Zoom 100);
end;
procedure TMainForm.ViewActualSizeExecute(Sender: TObject);
begin
SimpleGraph.ChangeZoom(100, zoTopLeft);
end;
procedure TMainForm.ViewWholeGraphUpdate(Sender: TObject);
begin
ViewWholeGraph.Enabled := (SimpleGraph.Objects.Count > 0);
end;
procedure TMainForm.ViewWholeGraphExecute(Sender: TObject);
begin
SimpleGraph.ZoomGraph;
end;
procedure TMainForm.ViewGridUpdate(Sender: TObject);
begin
ViewGrid.Checked := SimpleGraph.ShowGrid;
end;
procedure TMainForm.ViewGridExecute(Sender: TObject);
begin
xcii
SimpleGraph.ShowGrid := not SimpleGraph.ShowGrid;
end;
procedure TMainForm.ViewFixScrollsUpdate(Sender: TObject);
begin
ViewFixScrolls.Checked := SimpleGraph.FixedScrollBars;
end;
procedure TMainForm.ViewFixScrollsExecute(Sender: TObject);
begin
SimpleGraph.FixedScrollBars := not SimpleGraph.FixedScrollBars;
end;
procedure TMainForm.ViewTransparentUpdate(Sender: TObject);
begin
ViewTransparent.Checked := SimpleGraph.Transparent;
end;
procedure TMainForm.ViewTransparentExecute(Sender: TObject);
begin
SimpleGraph.Transparent := not SimpleGraph.Transparent;
end;
procedure TMainForm.ViewPanUpdate(Sender: TObject);
begin
ViewPan.Checked := (SimpleGraph.CommandMode = cmPan);
ViewPan.Enabled := (SimpleGraph.HorzScrollBar.IsScrollBarVisible or
SimpleGraph.VertScrollBar.IsScrollBarVisible);
end;
procedure TMainForm.ViewPanExecute(Sender: TObject);
begin
SimpleGraph.CommandMode := cmPan;
end;
procedure TMainForm.HelpAboutExecute(Sender: TObject);
begin
with TAbout.Create(Application) do
try
ShowModal;
finally
Free;
end;
end;
procedure TMainForm.HelpUsageExecute(Sender: TObject);
begin
THelpOnActions.Execute;
end;
procedure TMainForm.OptionsConfirmHookLinkExecute(Sender: TObject);
begin
OptionsConfirmHookLink.Checked := not OptionsConfirmHookLink.Checked;
end;
procedure TMainForm.OptionsConfirmDeletionExecute(Sender: TObject);
begin
OptionsConfirmDeletion.Checked := not OptionsConfirmDeletion.Checked;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject;var CanClose: Boolean);
begin
if IsGraphSaved then
begin
SimpleGraph.Clear;
CanClose := True;
end
else
CanClose := False;
end;
procedure TMainForm.cbxFontSizeChange(Sender: TObject);
begin
cbxFontSize.Tag := StrToIntDef(cbxFontSize.Text, cbxFontSize.Tag);
SimpleGraph.ForEachObject(ForEachCallback, FEO_SETFONTSIZE, True);
end;
procedure TMainForm.cbxFontNameChange(Sender: TObject);
begin
cbxFontName.Text := cbxFontName.Items[cbxFontName.ItemIndex];
SimpleGraph.ForEachObject(ForEachCallback, FEO_SETFONTFACE, True);
end;
xciii
procedure TMainForm.LinkRemovePointExecute(Sender: TObject);
begin
with TGraphLink(SimpleGraph.SelectedObjects[0]) do
RemovePoint(LinkRemovePoint.Tag);
end;
procedure TMainForm.LinkAddPointExecute(Sender: TObject);
begin
with TGraphLink(SimpleGraph.SelectedObjects[0]) do
AddBreakPoint(TargetPt);
end;
procedure TMainForm.LinkGrowExecute(Sender: TObject);
begin
SimpleGraph.ForEachObject(ForEachCallback, FEO_GROW25, True);
end;
procedure TMainForm.LinkShrinkExecute(Sender: TObject);
begin
SimpleGraph.ForEachObject(ForEachCallback, FEO_SHRINK25, True);
end;
procedure TMainForm.LinkRotateCWExecute(Sender: TObject);
begin
SimpleGraph.ForEachObject(ForEachCallback, FEO_ROTATE90CW, True);
end;
procedure TMainForm.LinkRotateCCWExecute(Sender: TObject);
begin
SimpleGraph.ForEachObject(ForEachCallback, FEO_ROTATE90CCW, True);
end;
procedure TMainForm.LinkReverseExecute(Sender: TObject);
begin
SimpleGraph.ForEachObject(ForEachCallback, FEO_REVERSEDIRECTION, True);
end;
procedure TMainForm.ObjectsPopupPopup(Sender: TObject);
var
HT: DWORD;
Index: Integer;
Link: TGraphLink;
begin
if (SimpleGraph.SelectedObjects.Count = 1) and
(SimpleGraph.SelectedObjects[0] is TGraphLink) then
begin
LinkRemovePoint.Visible := True;
LinkAddPoint.Visible := True;
LinkGrow.Visible := True;
LinkShrink.Visible := True;
LinkRotateCW.Visible := True;
LinkRotateCCW.Visible := True;
LinkReverse.Visible := True;
TargetPt := SimpleGraph.CursorPos;
Link := TGraphLink(SimpleGraph.SelectedObjects[0]);
HT := Link.HitTest(TargetPt);
Index := HiWord(HT);
LinkRemovePoint.Enabled := ((HT and GHT_POINT) 0) and not
Link.IsFixedPoint(Index, False);
LinkRemovePoint.Tag := Index;
LinkAddPoint.Enabled := ((HT and GHT_LINE) 0) and not (gloFixedBreakPoints
in Link.LinkOptions);
LinkGrow.Enabled := Link.CanMove;
LinkShrink.Enabled := Link.CanMove;
LinkRotateCW.Enabled := Link.CanMove;
LinkRotateCCW.Enabled := Link.CanMove;
end
else
begin
LinkRemovePoint.Visible := False;
LinkAddPoint.Visible := False;
LinkGrow.Visible := False;
LinkShrink.Visible := False;
LinkRotateCW.Visible := False;
LinkRotateCCW.Visible := False;
LinkReverse.Visible := False;
xciv
end;
end;
procedure TMainForm.SimpleGraphDblClick(Sender: TObject);
begin
EditProperties.Execute;
end;
procedure TMainForm.SimpleGraphNodeDblClick(Graph: TSimpleGraph;
Node: TGraphNode);
begin
EditProperties.Execute;
end;
procedure TMainForm.SimpleGraphLinkDblClick(Graph: TSimpleGraph;
Link: TGraphLink);
begin
EditProperties.Execute;
end;
procedure TMainForm.SimpleGraphObjectDblClick(Graph: TSimpleGraph;
GraphObject: TGraphObject);
begin
EditProperties.Execute;
end;
procedure TMainForm.SimpleGraphGraphChange(Sender: TObject);
begin
if SimpleGraph.Modified then
StatusBar.Panels[4].Text := SModified
else
StatusBar.Panels[4].Text := '';
end;
procedure TMainForm.SimpleGraphZoomChange(Sender: TObject);
begin
StatusBar.Panels[5].Text := Format('%d%%', [SimpleGraph.Zoom]);
end;
procedure TMainForm.SimpleGraphCommandModeChange(Sender: TObject);
begin
case SimpleGraph.CommandMode of
cmViewOnly:
StatusBar.Panels[0].Text := SViewOnly;
cmPan:
StatusBar.Panels[0].Text := SPan;
cmEdit:
StatusBar.Panels[0].Text := SEditing;
cmInsertLink:
StatusBar.Panels[0].Text := SInsertingLink;
cmInsertNode:
StatusBar.Panels[0].Text := SInsertingNode;
end;
end;
procedure TMainForm.SimpleGraphNodeMoveResize(Graph: TSimpleGraph;
Node: TGraphNode);
begin
if Node.Selected and (SimpleGraph.SelectedObjects.Count = 1) then
begin
StatusBar.Panels[1].Text := Format('(%d, %d)', [Node.Left, Node.Top]);
StatusBar.Panels[2].Text := Format('%d x %d', [Node.Width, Node.Height]);
end;
end;
procedure TMainForm.SimpleGraphObjectSelect(Graph: TSimpleGraph;
GraphObject: TGraphObject);
begin
if SimpleGraph.SelectedObjects.Count = 1 then
SimpleGraphObjectChange(Graph, SimpleGraph.SelectedObjects[0])
else
begin
StatusBar.Panels[1].Text := '';
StatusBar.Panels[2].Text := '';
if SimpleGraph.SelectedObjects.Count > 1 then
StatusBar.Panels[3].Text := Format(SMultiSelect,
[SimpleGraph.SelectedObjects.Count])
else
xcv
StatusBar.Panels[3].Text := '';
end;
end;
procedure TMainForm.SimpleGraphInfoTip(Graph: TSimpleGraph;
GraphObject: TGraphObject; var InfoTip: String);
const
Hooked: array[Boolean] of String = ('', SHooked);
begin
if GraphObject.IsLink then
with TGraphLink(GraphObject) do
begin
InfoTip := Format(SLinkInfo, [Text,
Points[0].X, Points[0].Y, Hooked[Assigned(Source)],
Points[PointCount - 1].X, Points[PointCount - 1].Y,
Hooked[Assigned(Target)],
PointCount - 2]);
end
else
with TGraphNode(GraphObject) do
begin
InfoTip := Format(SNodeInfo, [PrettyNodeClassName(ClassName),
Text, Left, Top, Width, Height,
TGraphNode(GraphObject).LinkInputCount,
TGraphNode(GraphObject).LinkOutputCount]);
end;
end;
procedure TMainForm.SimpleGraphCanHookLink(Graph: TSimpleGraph;
GraphObject: TGraphObject; Link: TGraphLink; Index: Integer;
var CanHook: Boolean);
const
StartEndPoints: array[Boolean] of String = (SStartPoint, SEndPoint);
var
MsgText: String;
LinkName, ObjectName: String;
begin
if OptionsConfirmHookLink.Checked and not Link.Dragging and CanHook then
begin
LinkName := Link.Text;
if LinkName = '' then LinkName := SNoName;
ObjectName := GraphObject.Text;
if ObjectName = '' then ObjectName := SNoName;
MsgText := Format(SCanHook, [StartEndPoints[Index 0], LinkName,
ObjectName]);
CanHook := (MessageDlg(MsgText, mtConfirmation, [mbYes, mbNo], 0) = mrYes);
end;
end;
procedure TMainForm.SimpleGraphCanLinkObjects(Graph: TSimpleGraph;
Link: TGraphLink; Source, Target: TGraphObject; var CanLink: Boolean);
var
MsgText: String;
LinkName, SourceName, TargetName: String;
begin
if OptionsConfirmHookLink.Checked and not Link.Dragging and CanLink then
begin
LinkName := Link.Text;
if LinkName = '' then LinkName := SNoName;
SourceName := Source.Text;
if SourceName = '' then SourceName := SNoName;
TargetName := Target.Text;
if TargetName = '' then TargetName := SNoName;
MsgText := Format(SCanLink, [SourceName, TargetName, LinkName]);
CanLink := (MessageDlg(MsgText, mtConfirmation, [mbYes, mbNo], 0) = mrYes);
end;
end;
procedure TMainForm.SimpleGraphObjectChange(Graph: TSimpleGraph; GraphObject:
TGraphObject);
var
PosFirstLine: Integer;
begin
xcvi
if (SimpleGraph.SelectedObjects.Count = 1) and (SimpleGraph.SelectedObjects[0]
= GraphObject) then
begin
cbxFontName.Text := GraphObject.Font.Name;
cbxFontSize.Text := IntToStr(GraphObject.Font.Size);
FormatBold.Checked := (fsBold in GraphObject.Font.Style);
FormatItalic.Checked := (fsItalic in GraphObject.Font.Style);
FormatUnderline.Checked := (fsUnderline in GraphObject.Font.Style);
if GraphObject is TGraphNode then
with TGraphNode(GraphObject) do
begin
FormatAlignLeft.Checked := (Alignment = taLeftJustify);
FormatCenter.Checked := (Alignment = taCenter);
FormatAlignRight.Checked := (Alignment = taRightJustify);
FormatAlignTop.Checked := (Layout = tlTop);
FormatVCenter.Checked := (Layout = tlCenter);
FormatAlignBottom.Checked := (Layout = tlBottom);
StatusBar.Panels[1].Text := Format('(%d, %d)', [Left, Top]);
StatusBar.Panels[2].Text := Format('%d x %d', [Width, Height]);
PosFirstLine := Pos(#$D#$A, Text);
if PosFirstLine 0 then
StatusBar.Panels[3].Text := Copy(Text, 1, PosFirstLine)
else
StatusBar.Panels[3].Text := Text;
end
else
with TGraphLink(GraphObject) do
begin
StatusBar.Panels[1].Text := '';
StatusBar.Panels[2].Text := Format(SNumOfPoints, [PointCount]);
StatusBar.Panels[3].Text := Text;
end;
end;
end;
procedure TMainForm.SimpleGraphObjectInitInstance(Graph: TSimpleGraph;
GraphObject: TGraphObject);
var
FontStyle: TFontStyles;
begin
FontStyle := [];
if FormatBold.Checked then
Include(FontStyle, fsBold);
if FormatItalic.Checked then
Include(FontStyle, fsItalic);
if FormatUnderline.Checked then
Include(FontStyle, fsUnderline);
with GraphObject.Font do
begin
if cbxFontName.Text '' then
Name := cbxFontName.Text;
Size := cbxFontSize.Tag;
Style := FontStyle;
end;
if GraphObject is TGraphNode then
begin
if FormatAlignLeft.Checked then
TGraphNode(GraphObject).Alignment := taLeftJustify
else if FormatAlignRight.Checked then
TGraphNode(GraphObject).Alignment := taRightJustify
else
TGraphNode(GraphObject).Alignment := taCenter;
if FormatAlignTop.Checked then
TGraphNode(GraphObject).Layout := tlTop
else if FormatAlignBottom.Checked then
TGraphNode(GraphObject).Layout := tlBottom
else
TGraphNode(GraphObject).Layout := tlCenter;
end;
end;
xcvii
procedure TMainForm.SimpleGraphMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
with SimpleGraph.ClientToGraph(X, Y) do
StatusBar.Panels[6].Text := Format('(%d, %d)', [X, Y]);
end;
procedure TMainForm.SimpleGraphMouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
var
I: Integer;
begin
MousePos := SimpleGraph.ScreenToClient(MousePos);
if PtInRect(SimpleGraph.ClientRect, MousePos) then
begin
for I := 1 to 5 do
begin
SimpleGraph.ChangeZoomBy(-1, zoCursor);
SimpleGraph.Update;
end;
Handled := True;
end;
end;
procedure TMainForm.SimpleGraphMouseWheelUp(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
var
I: Integer;
begin
MousePos := SimpleGraph.ScreenToClient(MousePos);
if PtInRect(SimpleGraph.ClientRect, MousePos) then
begin
for I := 1 to 5 do
begin
SimpleGraph.ChangeZoomBy(+1, zoCursor);
SimpleGraph.Update;
end;
Handled := True;
end;
end;
end.
i www.efg2.com/Lab/Mathematics/ComplexMath.htm
File đính kèm:
luan_an_nghien_cuu_giam_sat_on_dinh_he_thong_dien_trong_thoi.pdf
Dong gop moi cua Luan an_PVKien (Viet_Anh).pdf
TOM TAT TIENG ANH_PVKien(Final).pdf
TOM TAT TIENG VIET_PVKien(Final).pdf
Trich yeu luan an_PVKien (Viet_Anh).pdf

