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