首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Visio 電氣拓撲分析:停電模擬邏輯與動態著色實作

     編輯:關於C#

電氣圖紙的停電分析是配電自動化系統的核心功能。本文揭示如何將 Visio 圖形轉為拓撲模型,以電源為起點進行深度優先搜尋,建立樹狀拓撲結構,並依通電狀態動態著色(綠=有電、紅=無電),支援開關分合閘即時模擬。

核心資料結構:關聯表

將圖形連接關係持久化至資料庫:

Equipment (設備ID)ConnectionShapes (關聯設備ID集合)
1 (電源/飛達)-1, 2
21, 3, 8, 7, 10
32, 4, 11
......

-1 代表虛擬根節點(電源輸入端)。斷開開關視為樹葉節點,不再向下遞迴。

拓撲樹建立演算法(遞迴 DFS)

  1. 從 ConnectionShapes 找含 -1 的設備 → 根節點(如 ID=1)。
  2. 對根節點的每個關聯設備,排除上游節點後遞迴展開下游。
  3. 每筆記錄存入 ID, PID, BelongTo, LoginIP,構成倒置樹。

逐步展開範例


// 初始:根節點
ID  PID
1   -1

// 展開 1 的下游:2
ID  PID
1   -1
2   1

// 展開 2 的下游:3,8,7,10(排除上游 1)
ID  PID
1   -1
2   1
3   2
8   2
7   2
10  2

// 繼續展開 3 → 4,11;4 → 5,12;5 → 6,13...
// 最終得到完整拓撲樹

動態著色與即時模擬


// 取得有電設備 ID 清單
List poweredIds = powerCutBLL.RunPowerCutAnalyzing(app, selectedShape, ref msg);

foreach (string idStr in poweredIds) {
    int shapeId = int.Parse(idStr);
    Shape shape = visDoc.Pages[1].Shapes.ItemFromID[shapeId];
    shape.CellsU["LineColor"].ResultIU = (double)VisDefaultColors.visDarkGreen; // 綠色
    Application.DoEvents(); // 強制 UI 重繪
    Thread.Sleep(500);      // 動畫延遲
}
// 無電設備著黑/紅
shape.CellsU["LineColor"].ResultIU = (double)VisDefaultColors.visBlack;

關鍵技術點

  • Application.DoEvents() 讓訊息迴圈處理重繪,實現逐步動畫效果。
  • 拓撲模型與圖形分離,支援多使用者並行分析(LoginIP 隔離)。
  • BelongTo 欄位支援多電源並聯場景(構建多棵樹)。
  • 斷路器分閘時自動截斷下游分支,模擬真實停電範圍。

此架構已成功應用於配電網圖形化管理系統,支援千節點級拓撲即時分析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved