建模與仿真:單機無窮大系統(tǒng)實戰(zhàn)與避坑指南)
簡介一份整理自于群教授《MATLAB_Simulink電力系統(tǒng)建模與仿真》的學(xué)習(xí)資料面向電力系統(tǒng)從業(yè)者、工程師與科研人員幫助讀者系統(tǒng)掌握基于MATLAB/Simulink的建模與仿真方法。內(nèi)容從MATLAB基本語法、數(shù)據(jù)類型與控制結(jié)構(gòu)講起逐步過渡到Simulink圖形化建模界面與工作流程隨后深入電力系統(tǒng)核心元件如發(fā)電機、變壓器、線路、負(fù)荷的模塊配置與參數(shù)設(shè)置并講解同步發(fā)電機勵磁控制、系統(tǒng)頻率調(diào)整等動態(tài)過程的建模方法。教程還覆蓋仿真時間步長、初始條件設(shè)置、結(jié)果分析與可視化以及電網(wǎng)故障分析、新能源并網(wǎng)等實際案例可用于課程學(xué)習(xí)、課題研究或工程驗證。壓縮包為zip格式整體大小約24.93MB屬于教程文檔類資料便于按章節(jié)翻閱。目前已有4803人學(xué)習(xí)下載適合初學(xué)者系統(tǒng)入門也為中高級研究者提供參考。1. 電力系統(tǒng)建模與仿真為什么我勸你先別繞開 Simulink電力系統(tǒng)建模與仿真很多人一上手就想著純寫 M 腳本把發(fā)電機、變壓器和線路的微分方程組自己排一遍結(jié)果被數(shù)值穩(wěn)定性問題按在地上反復(fù)摩擦。標(biāo)題里的“于群 MATLAB_Simulink電力系統(tǒng)建模與仿真”對應(yīng)的是 MATLAB 文檔體系里 Simulink / Simscape Electrical 這條完整鏈路你不是從零寫求解器而是把元件模型拖進畫布、填對參數(shù)、設(shè)好求解器然后讓波形替你說話。這套方法特別適合三類人剛進電力系統(tǒng)方向的碩博生需要快速驗證控制或保護策略的工程師以及想把“建模過程”本身留成可追溯 matlab 文檔的團隊。它解決的痛點很直接——讓拓?fù)淇梢?、參?shù)可查、運行可持續(xù)改。2. 把 MATLAB 文檔當(dāng)成地圖Simulink 電力系統(tǒng)建模的選型與初始化動手建模型之前先記住一個原則Simulink 建模最大的資產(chǎn)不是畫布上的線而是 MATLAB 文檔里那套“每個模塊、每個參數(shù)都有據(jù)可查”的體系。很多人對著模型改半天轉(zhuǎn)發(fā)給同事卻連“這個參數(shù)為什么設(shè) 0.1”都講不清原因就是一開始把文檔扔到一邊。于群這套資料的真實價值恰恰是把“查文檔、改參數(shù)、看波形”串成一條可以反復(fù)走的流程。下面從選型、環(huán)境檢查和文檔用法三個層面展開。2.1 為什么選 Simulink 而不是純 M 腳本模型本身就是文檔純 M 腳本建模不是不能做而是維護成本太高。電力系統(tǒng)暫態(tài)仿真至少包含同步電機、變壓器磁路、線路分布參數(shù)、斷路器動作和故障模塊每個對象都要自己搭方程光三相坐標(biāo)變換和相序網(wǎng)絡(luò)就要處理半天。Simulink 的 Specialized Power Systems 庫舊稱 SimPowerSystems把這一層封裝好了同步電機模塊內(nèi)部實現(xiàn)了 Park 方程和機械運動方程三相變壓器建模時自動處理聯(lián)結(jié)組別和漏抗線路支持 PI 模型和分布參數(shù)模型。你要做的不是重新推導(dǎo)公式而是選擇與實際電網(wǎng)一致的元件模型。更重要的是“模型即可執(zhí)行文檔”。把一個持續(xù)改進的 Simulink 模型放到團隊環(huán)境里別人看拓?fù)浣Y(jié)構(gòu)就能理解方案再配合 MATLAB 文檔中的模塊參數(shù)頁每個參數(shù)都能回溯到官方定義。相比 M 腳本只能用注釋和變量名提示Simulink 的圖形化表達更適合電力系統(tǒng)這樣多端口、多耦合的仿真對象。后續(xù)做故障分析、保護整定或控制器驗證模型的復(fù)用性都會比腳本高很多。這就是我為什么一上來就強調(diào)選型先想清楚用什么建模再看怎么建。Simulink 特別適合“既要能出波形又要方便給別人講清楚”的場景如果你只是做一個純算法推導(dǎo)、不涉及元件交互的課題那反而沒必要拖出 SimulinkM 腳本更快??上Ф鄶?shù)電力系統(tǒng)題目都繞不開電磁暫態(tài)和機械暫態(tài)的耦合所以 Simulink 才是多數(shù)人的第一選擇。等到了多機系統(tǒng)、微網(wǎng)或交直流混合電網(wǎng)階段你會發(fā)現(xiàn)團隊協(xié)作時大家認(rèn)的也是 Simulink 模型而不是一堆散落的 m 文件。2.2 用命令行把工具箱和環(huán)境檢查清楚少進一個黑匣子建模前先別急著拖模塊先回答三個問題Simulink 裝了嗎Simscape Electrical 裝了嗎授權(quán)里有沒有 Simscape Electrical 的 License這三個問題的答案直接決定后面能做多少事。很多人在命令行里敲了sim才看到一連串 toolbox missing那才是真翻車。與其到時候后悔不如一開始就把環(huán)境查清楚。常見做法是打開 MATLAB先敲這一段% 檢查三個最關(guān)鍵的環(huán)境項 ver(Simulink) % 輸出 Simulink 版本信息 ver(Simscape) % 輸出 Simscape 基礎(chǔ)庫版本 license(test, Simscape_Electrical) % 有授權(quán)返回 1沒有返回 0邏輯很簡單ver是 MATLAB 查已安裝工具箱的函數(shù)license是查許可狀態(tài)的函數(shù)。第二行里的Simscape是基礎(chǔ)庫第三行的Simscape_Electrical是電力系統(tǒng)專業(yè)庫注意這個工具箱在不同版本的 MATLAB 文檔里也可能寫成 “Simscape Electrical Toolbox”。如果幫助文檔里搜“電力系統(tǒng)”老資料叫 SimPowerSystems新資料叫 Specialized Power Systems路徑其實指向同一個地方別被名字繞暈。如果你的環(huán)境沒有Simscape_Electrical后面所有電源、電機、變壓器模塊都拉不出來。這里有一條判斷依據(jù)powerlib這個函數(shù)能直接打開專用元件庫如果它能運行說明環(huán)境基本就位如果它報“庫不存在”多半是缺少工具箱回到 MATLAB 安裝器里補裝并重新激活即可。補裝的時候注意MATLAB 安裝器里不同工具箱的勾選是獨立的光裝了 MATLAB 主包不等于裝了 Simscape這一步很容易被忽略。除了環(huán)境檢查我一般還會打開 MATLAB 文檔首頁把 “Simscape Electrical Toolbox 功能列表” 掃一遍。文檔里的庫分類列表就是最好的索引Machines電機、ElementsRLC 元件、Power Electronics電力電子、Sources電源、Measurements測量等。你要找的發(fā)電機和變壓器分布在 Machines 和 Elements 下故障模塊則在 Circuit Breakers 一類。先瀏覽這個列表等建模型時就能少走彎路。這個功能列表比任何入門教程都準(zhǔn)確因為它隨版本實時更新比我記憶中的庫路徑可靠得多。提示R202x 之后“SimPowerSystems”這個名字在新文檔里基本不再出現(xiàn)統(tǒng)一走 Simscape Electrical 的 Specialized Power Systems。搜索資料時優(yōu)先搜“Specialized Power Systems”否則容易查到十年前的老界面對不上號。2.3 最快路徑先改官方示例再自己搭模型環(huán)境檢查完不要從一個空白模型開始硬建。MATLAB 文檔里有一個很實用的習(xí)慣每個模塊頁都帶 “Examples”每個示例模型都可以下載并打開修改參數(shù)存成自己的模型。我自己的流程是先找到最接近需求的官方示例另存為項目文件然后一層層拆掉不要的部分保留電機、變壓器和線路再替換成自己的參數(shù)。具體執(zhí)行可以用命令行也可以純操作 GUI% 打開電力系統(tǒng)專用元件庫并在瀏覽器中查三相故障模塊 powerlib doc(simscape/three-phase-fault) % 若路徑報錯直接在文檔搜索框輸入 three phase fault這兩行命令的作用是powerlib打開可視化庫方便手動查看模塊doc打開的是模塊的官方幫助頁。官方幫助頁里通常包含參數(shù)定義、數(shù)學(xué)描述和至少一個可復(fù)制的例子這是新手最容易忽略的 matlab 文檔入口。很多模塊的 mask 參數(shù)也就是雙擊模塊后那一堆輸入框在幫助頁里有逐項解釋遠(yuǎn)比在論壇里搜零散的中文回答靠譜。在“先抄后改”的階段注意一個細(xì)節(jié)官方示例往往依賴某些回調(diào)腳本InitFcn或基礎(chǔ)工作區(qū)變量另存到新文件夾后要把這些依賴一起帶走或者在模型回調(diào)里用edit查看腳本內(nèi)容。如果漏了這一步模型在新目錄下打開會報 “Undefined variable”然后你就開始了一場和黑匣子的戰(zhàn)斗。我一般會在模型屬性里查看 “Callbacks” 中每一行確認(rèn)沒有隱藏的初始化代碼再繼續(xù)改。更穩(wěn)妥的做法是直接搜索evalin(base, ...)這類調(diào)用凡是出現(xiàn)了就要么把變量搬進模型工作區(qū)要么把腳本作為模型的一個初始化文件放進同一目錄。這一章的最終目的是讓你建立起“Simulink 模型 matlab 文檔 示例代碼”三位一體的工作習(xí)慣。選型要落在 Simulink 上環(huán)境要確認(rèn)到工具箱級別建模要先從官方示例入手。有了這個地基下一章搭出來的單機無窮大系統(tǒng)才不是空中樓閣。3. 搭一個單機無窮大系統(tǒng)Simulink 電力系統(tǒng)建模仿真的最小閉環(huán)先從結(jié)論說起我不建議你上來就搭三機九節(jié)點或 IEEE 39 節(jié)點系統(tǒng)。電力系統(tǒng)建模與仿真的第一道坎是“看懂一個簡單系統(tǒng)的全部環(huán)節(jié)”單機無窮大系統(tǒng)剛好覆蓋同步電機、變壓器、輸電線路、無窮大母線、短路故障五個要素而且發(fā)散時你只有少數(shù)幾個懷疑點不會像大系統(tǒng)那樣無從下手。把這一步跑通后面再擴展到多機系統(tǒng)才有底。3.1 為什么單機無窮大系統(tǒng)是最合適的起步對象單機無窮大系統(tǒng)Single Machine Infinite BusSMIB本質(zhì)上是一個理想化概念一臺同步發(fā)電機經(jīng)變壓器和線路接到一個容量遠(yuǎn)大于單機的電網(wǎng)母線電壓和頻率被視為恒定。它不會出現(xiàn)在真實電網(wǎng)里但在仿真里是驗證電機模型、勵磁控制和暫態(tài)穩(wěn)定性的最小單元。很多教科書、包括于群那套電力系統(tǒng)建模與仿真資料中第一步都是這個東西因為你能直觀看到故障前、故障中、故障切除后的電流變化和電壓跌落。具體到 Simulink 建模SMIB 需要四類元件同步電機的機械和電氣接口雙繞組變壓器線路等值電路以及代表電網(wǎng)的無窮大母線。你在元件庫里選機型時??吹絊ynchronous Machine pu Standard它內(nèi)部包含阻尼繞組、勵磁繞組和機械運動方程變壓器選Three-Phase Transformer (Two Windings)線路選Three-Phase PI Section Line或Distributed Parameters Line。少數(shù)情況下還要加Three-Phase V-I Measurement和Three-Phase Fault來完成測量和故障注入。為什么要用無窮大母線而不是直接接一個電壓源因為無窮大母線不僅提供額定電壓還隱式地提供一個短路容量足夠大的戴維南等值電源。你若只用理想電壓源忽略短路容量故障時節(jié)點電壓會被源拉死波形看起來完全不對。Simulink 里的Three-Phase Source模塊可以設(shè)置短路容量設(shè)成無窮大時短路容量一般比發(fā)電機容量高 10 倍以上算是一個簡單的工程經(jīng)驗。同步電機的內(nèi)部參數(shù)中慣性常數(shù)和電抗是后續(xù)穩(wěn)定分析的重點第一次建模型不用改得太精細(xì)等你要復(fù)現(xiàn)功角搖擺曲線時再逐個調(diào)。3.2 元件擺放與接線順序一個可以抄的模型拓?fù)湎旅孢@套順序是我自己在空白模型上操作的常規(guī)套路你可以直接照抄也可以根據(jù)手頭參數(shù)調(diào)整。新建一個 Simulink 模型按下面順序逐步添加元件每加一個就先雙擊查看 mask 參數(shù)避免后面連線時找不到端口。第一步放 Powergui。沒有 PowerguiSpecialized Power Systems 里的電機、變壓器可能啟動不了初始化。Powergui 在庫路徑Simscape / Electrical / Specialized Power Systems / Powergui下也可以直接在命令窗口執(zhí)行powerlib然后從庫窗口把 Powergui 拖入模型。第二步放同步電機。選Synchronous Machine pu Standard設(shè)置額定視在功率200e6單位 VA額定線電壓10e3單位 V頻率 50Hz。如果你是驗證保護或穩(wěn)定不用把內(nèi)部電抗改到特別精確先使用默認(rèn)的標(biāo)幺值參數(shù)后面要細(xì)調(diào)時再看X_d、X_d、T等參數(shù)。真正要改的往往是“機械輸入”和“電氣接口”的類型。第三步放變壓器。使用Three-Phase Transformer (Two Windings)把一次側(cè)接到電機端口二次側(cè)接到線路。聯(lián)結(jié)組別建議用 Yn-D也就是一次側(cè)星形帶中性點、二次側(cè)三角形。這樣后續(xù)做單相接地故障時零序電流有流通路徑如果兩側(cè)都用星形不接地單相短路故障根本仿不像。這是一個經(jīng)常被忽略的坑先記下來。第四步放線路。先用Three-Phase PI Section Line簡化為一段集中參數(shù)線路長度給 100km正序電阻和電感用默認(rèn)典型值。分布式參數(shù)線路更適合長距離分析但對初學(xué)來說 PI 模型更容易理解波形也更容易檢查。線路模塊的“頻變參數(shù)”選項在電力系統(tǒng)暫態(tài)中會更準(zhǔn)確但仿真速度會明顯變慢初學(xué)階段先不要開。第五步放無窮大母線。用Three-Phase Source電壓等級與變壓器二次側(cè)一致頻率 50Hz短路容量設(shè)為10e9VA也就是 10GVA 左右。如果母線電壓等級需要 110kV那變壓器的二次側(cè)和線路參數(shù)也要同步改成 110kV 等級別讓一次側(cè) 10kV 的發(fā)電機和 110kV 母線直接相連。第六步放測量與故障。Three-Phase V-I Measurement可以串在線路和母線之間Three-Phase Fault放在測量點之后設(shè)置切換時間[0.2 0.3]表示 0.2 秒發(fā)生短路、0.3 秒被斷路器切除。如果你習(xí)慣用腳本控制流程可以用下面這段把 Powergui 放進去% 新建一個測試模型并添加 Powergui 塊庫路徑以本機 powerlib 為準(zhǔn) mdl smib_demo; new_system(mdl); add_block(simscape/Electrical/Specialized Power Systems/Powergui, [mdl /Powergui]); open_system(mdl);這段腳本里new_system創(chuàng)建空白模型add_block的源路徑以你本機庫為準(zhǔn)——如果你的版本里路徑分層有差異先運行powerlib找到 Powergui 的完整路徑再替換。用腳本建立模型的好處是可控和可重現(xiàn)這也是 matlab 文檔里推廣的一種做法把“手工點擊”變成“代碼記錄”以后換機器、換版本重跑腳本就能得到同一套模型骨架。3.3 Powergui 與第一個波形仿真前要放好的三個關(guān)鍵參數(shù)所有元件都拖進來之后不是直接點綠色運行按鈕就能看到漂亮波形。第一次跑 SMIB我先調(diào)三個地方Powergui 的仿真類型、同步電機的初始條件、故障模塊的切換時間。第一Powergui 里選擇Continuous仿真類型并在通用參數(shù)里把系統(tǒng)頻率設(shè)為 50Hz。Specialized Power Systems 很多模塊依賴這個頻率計算感抗和容抗如果你默認(rèn)是 60Hz而線路參數(shù)按 50Hz 輸入波形會出現(xiàn)頻率偏移初看很難定位。第二同步電機的穩(wěn)態(tài)初始條件必須初始化。在 Powergui 里打開Machines Initialization工具輸入發(fā)電機的有功、無功和機端電壓再讓工具自動計算初始狀態(tài)值。這一步不做仿真從頭開始就以非穩(wěn)態(tài)為起點電壓和電流會跳變甚至直接 NaN。很多人第一次建電機模型就栽在這里后面排查半天才發(fā)現(xiàn)是初始化問題。第三故障模塊的觸發(fā)時間。Three-Phase Fault的切換時間參數(shù)寫成[0.2 0.3]也可以寫作0.2 0.3。不要設(shè)置成[0.2 inf]因為無窮大表示故障永遠(yuǎn)不清除你看到的只是永久性短路的暫態(tài)而不是完整的“故障→切除→恢復(fù)”過程。下面是一段可以直接跑的參數(shù)和仿真腳本% 設(shè)置模型級參數(shù)并運行仿真 set_param(smib_demo/Powergui, SimulationMode, continuous, Freq, 50); set_param(smib_demo/Three-Phase Fault, SwitchingTimes, 0.2 0.3); % 參數(shù)名以當(dāng)期文檔為準(zhǔn) simOut sim(smib_demo, StopTime, 1.0);代碼里set_param第一行把 Powergui 的仿真模式設(shè)為連續(xù)并鎖定 50Hz第二行設(shè)置故障塊的切換時間sim命令啟動仿真并返回輸出對象。你需要在測量模塊上右鍵把 “Voltage” 和 “Current” 信號標(biāo)記為 Log Selected Signals才能讓simOut里真正帶出波形數(shù)據(jù)。StopTime設(shè)為 1 秒意思是仿真窗口覆蓋故障前 0.2 秒、故障中 0.1 秒和切除后的恢復(fù)過程既能看到暫態(tài)峰值也不至于跑得太慢。如果打開 Scope 直接看波形注意觀察三個特征故障發(fā)生瞬間電流是否抬升故障切除后電壓是否恢復(fù)恢復(fù)過程中是否存在衰減振蕩。這三個特征驗證模型沒建錯后面再做控制策略或保護整定才有意義。第一次建模型請先把故障塊斷開先跑一個無故障穩(wěn)態(tài)確認(rèn)電壓電流都是正弦再切入故障。這個習(xí)慣能省下大量排查時間。4. 常見問題排查步長、外部模式與參數(shù)設(shè)置踩坑記錄這部分是這套建模資料里我認(rèn)為最值錢的內(nèi)容。很多人問“為什么我的模型跑出來全是 NaN”基本都不是模型原理錯了而是求解器、外部模式或故障設(shè)置里某一個細(xì)節(jié)沒配對。下面按排查頻率給出四組說明和五條踩坑記錄。4.1 求解器選擇與步長為什么我的仿真一開始就 NaNSimulink 默認(rèn)求解器是 ode45屬于顯式 Runge-Kutta 方法適合一般連續(xù)系統(tǒng)。但電力系統(tǒng)暫態(tài)仿真帶有明顯的剛性特征電磁暫態(tài)時間常數(shù)在毫秒級機電暫態(tài)時間常數(shù)在數(shù)十毫秒到秒級比值相差很大。此時 ode45 為了穩(wěn)定會不斷把步長壓到很小仿真卡頓且容易在剛性點附近發(fā)散導(dǎo)致剛開始就跑 NaN。這不是模型錯了而是求解器不適合。我一般把電力系統(tǒng)仿真首選ode23t或ode15s。ode23t適合中等剛性的問題在 50Hz 電力系統(tǒng)暫態(tài)里表現(xiàn)穩(wěn)定ode15s適合剛性更強、且對階數(shù)要求不高的場景。兩者的共同點是隱式求解可以用相對大的步長保持?jǐn)?shù)值穩(wěn)定代價是單步計算稍慢但在整體效率上明顯優(yōu)于顯式求解器。求解器類型適用場景常見誤用ode45顯式 RK光滑的非剛性系統(tǒng)直接套在電機故障模型上步長崩潰ode23t隱式梯形中等剛性電力系統(tǒng)暫態(tài)適合大多數(shù) SMIB 和暫態(tài)場景ode15s隱式多步強剛性、含電力電子開關(guān)步長過小的話也會慢到無法忍受ode23顯式 RK低精度、無突兀開關(guān)帶斷路器動作后容易超調(diào)模型配置建議用代碼固定% 固定求解器與最大步長防止其他人亂改 cs getActiveConfigSet(smib_demo); set_param(cs, Solver, ode23t); % 中等剛性首選 set_param(cs, MaxStep, 1e-3); % 限制最大步長保證采樣精度 set_param(cs, RelTol, 1e-3); % 相對誤差默認(rèn) 1e-3 即可這里getActiveConfigSet從模型拿到配置對象set_param對它寫入三個參數(shù)求解器、最大步長、相對誤差。MaxStep1e-3表示求解器最長走 1 毫秒一步對 50Hz 系統(tǒng)意味著每個周波走 20 個點足夠看波形也不會把計算量拉爆。若你想看更細(xì)的暫態(tài)比如斷路器開斷時刻的電壓尖峰把MaxStep降到1e-4多花一點時間換取更平滑的曲線我自己在保護分析時偶爾會這樣用。4.2 Simulink 外部模式在線調(diào)參但別一開頭就用外部模式External Mode是 Simulink 與外部目標(biāo)機通信的仿真運行模式適用于快速原型驗證宿主 MATLAB 把模型編譯后下載到目標(biāo)機運行同時可以在線修改參數(shù)、看波形。對于電力系統(tǒng)實時仿真常見做法是配一臺實時目標(biāo)機或 Simulink Desktop Real-Time 環(huán)境先離線驗證再進入外部模式做信號級測試。但我的建議是剛接觸電力系統(tǒng)建模先不要碰外部模式。原因很簡單外部模式的調(diào)試鏈路等于多了一個黑匣子——模型、實時目標(biāo)機、通信、時鐘任何一個環(huán)節(jié)出問題都會讓你誤以為電力系統(tǒng)模型錯了。先把 Normal 模式跑通保存好一組穩(wěn)定波形再升級到外部模式心里才有底。如果確實要用外部模式步驟一般是三件事在模型設(shè)置里把仿真模式改為External選擇實時目標(biāo)文件如 slrealtime 對應(yīng)文件或桌面目標(biāo)再點“構(gòu)建并連接”。用腳本做代碼生成時也可以這樣控制但注意區(qū)分兩種目標(biāo)文件% 以 ERT 目標(biāo)生成嵌入式 C 代碼不是外部模式 cfg getActiveConfigSet(smib_demo); set_param(cfg, SystemTargetFile, ert.tlc); % 嵌入式代碼目標(biāo) set_param(cfg, GenCodeOnly, on); % 只生成代碼不運行 slbuild(smib_demo);這段腳本生成的是一份可在嵌入式處理器上編譯的 C 代碼輸出文件通常在模型的slprj目錄下GenCodeOnlyon表示不繼續(xù)編譯生成可執(zhí)行文件。如果你要做外部模式應(yīng)該把目標(biāo)文件換成實時仿真目標(biāo)并在運行時設(shè)置里打開外部模式通信。很多人在論壇上遇到的“外部模式連接失敗”往往是沒有按目標(biāo)機手冊選擇正確的目標(biāo)文件就開始點連接結(jié)果一直在兜圈子。注意常規(guī)模型里出現(xiàn)From Workspace模塊、evalin回調(diào)或基礎(chǔ)工作區(qū)變量時代碼生成和外部模式都可能失敗。凡是準(zhǔn)備生成代碼的模型參數(shù)盡量改成模型工作區(qū)或 MATLAB 參數(shù)對象這是個長期主義做法。4.3 三個必須調(diào)對的位置故障相、短路容量和故障時刻三相故障模塊不是只能做三相短路。它的界面里有一組故障相選擇復(fù)選框默認(rèn)三個勾全都打上做的是 ABC 三相短路接地。想做單相接地、兩相短路或兩相接地必須手動取消或勾選對應(yīng)相。這個細(xì)節(jié)常被忽略不少人以為放一個 Three-Phase Fault 就能模擬所有故障類型結(jié)果看到的波形永遠(yuǎn)是三相對稱短路和論文里的不對稱故障對不上。無窮大母線的短路容量同樣關(guān)鍵。Three-Phase Source 模塊除了電壓和頻率還有一個短路容量參數(shù)我一開始就用默認(rèn)值結(jié)果故障電流小得離譜。把短路容量設(shè)到發(fā)電機容量的 10 倍以上才算接近“無窮大”的含義如果需要更精確可以從潮流計算中獲得戴維南等值參數(shù)再填寫。故障時刻則要注意寫在模塊“切換時間”而非“仿真時間”里。很多人以為仿真開始時間即故障時刻其實模塊內(nèi)部使用獨立的切換時間默認(rèn)可能是[Inf]表示不動作。你需要在參數(shù)里寫成[0.2 0.3]并且仿真的StopTime必須大于 0.3否則根本看不到切除后的恢復(fù)過程。4.4 五條踩坑記錄每一條都是血淚經(jīng)驗以下是五條真實高頻的踩坑記錄全部按“現(xiàn)象 → 原因 → 解決”組織排查時可以按順序?qū)φ?。?1 條一仿真就 NaN波形直接飛到 1e30。原因 90% 是同步電機沒有正確初始化。很多第一次建 SMIB 的人直接給電機一個電壓然后點運行Powergui 還沒參與初始化電機內(nèi)部狀態(tài)和網(wǎng)絡(luò)節(jié)點電壓不匹配第一步就把微分方程解開碰破了。解決在 Powergui 的Tools Initial State Setting里選擇Set Initial States或打開Machines Initialization工具自動求一次穩(wěn)態(tài)初始值再刪掉故障塊重跑一次穩(wěn)態(tài)物理通道。若仍發(fā)散檢查母線是否有接地路徑——變壓器二次側(cè)為星形不接地時單相短路也沒有完整通路先改成 Yn-Δ 接法。第 2 條波形在高頻處出現(xiàn)鋸齒毛刺且毛刺集中在故障切除時刻。原因通常是斷路器以理想開關(guān)模型瞬間切換電流等效于在仿真頻域引入了極高頻率分量而MaxStep太大求解器沒有在開關(guān)瞬間附近細(xì)分步長。解決把MaxStep由1e-3調(diào)到1e-4并在故障塊參數(shù)里打開Breaker resistance串聯(lián)一個很小的阻尼電阻典型為 0.01Ω抑制電流斬斷引發(fā)的數(shù)值振蕩。注意不要用連續(xù)變阻來模擬斷路器那會改變故障電流峰值。第 3 條想做單相接地卻只能得到三相短路。原因Three-Phase Fault 的故障相默認(rèn)三相全選你沒有取消不需要的相。解決雙擊故障塊找到故障類型或故障相選擇只勾選 Phase A同時接地路徑選擇ground或經(jīng)過阻抗接地。如果模型中變壓器一次側(cè)為三角形聯(lián)結(jié)零序電流沒有路徑單相接地仿真結(jié)果也不真實這一步需要回看變壓器聯(lián)結(jié)組別。第 4 條外部模式連接提示 Target Not Responding。原因目標(biāo)機配置不對或者模型里含有From Workspace、To Workspace這類不適合實時運行的塊代碼生成在目標(biāo)機上被卡住。解決先把模型仿真模式切回 Normal確認(rèn)離線仿真完全正常再用“代碼生成”按鈕先編譯一次觀察是否報缺少變量最后再切到 External 并按目標(biāo)機的文檔檢查通信端口和 IP。不要同時打開多個外部模式會話同一個目標(biāo)通常只允許一個宿主連接。第 5 條生成 C 代碼時報 “Undefined variable” 或 “Missing Parameter”。原因你的 Simulink 模型里仍有大量參數(shù)存在于基礎(chǔ)工作區(qū)代碼生成時目標(biāo)機沒有 MATLAB 環(huán)境訪問不到這些變量。解決把需要生成代碼的參數(shù)改為模型工作區(qū)Model Workspace對象或在 MATLAB 里使用Simulink.Parameter并設(shè)置StorageClass為ExportedGlobal同時檢查模型回調(diào)中是否有隱藏的evalin(base, ...)調(diào)用并清除。這個習(xí)慣最好在搭模型時就養(yǎng)成而不是等生成代碼階段再補課。5. 進階用 SimulationInput 批量掃描把模型變成可交付的 matlab 文檔最后這部分寫點能提升效率的東西參數(shù)批量掃描與結(jié)果文檔化。別小看這一步多數(shù) Simulink 電力系統(tǒng)項目最大的工作量不是“搭模型”而是“調(diào)參數(shù)和解釋波形”。手動改一次參數(shù)、運行一次、截圖一次做十個工況就要花掉一整天用腳本批量跑十分鐘能把幾十個工況跑完還能把結(jié)果統(tǒng)一導(dǎo)成一個數(shù)據(jù)文件交給下游同事。Simulink 官方支持的核心方式是Simulink.SimulationInput數(shù)組配合sim或parsim并行運行。它的價值在于不修改模型內(nèi)部任何參數(shù)而是在運行前注入變量從而保持原始模型不被“玩壞”。代碼是這樣的% 故障時刻批量掃描比較 0.15s 和 0.25s 短路的暫態(tài)響應(yīng) mdl smib_demo; simin(1) Simulink.SimulationInput(mdl); simin(1) simin(1).setVariable(fault_time, 0.15); simin(2) Simulink.SimulationInput(mdl); simin(2) simin(2).setVariable(fault_time, 0.25); out parsim(simin, ShowSimulationManager, on);這段代碼里Simulink.SimulationInput為每個工況創(chuàng)建一個獨立運行實例setVariable注入你要掃的參數(shù)parsim并行運行所有實例并返回結(jié)果數(shù)組。注意故障塊內(nèi)部要寫成使用fault_time變量的形式例如切換時間寫成[fault_time fault_time0.1]而不是硬編碼數(shù)值。parsim并行時每個工作進程都要能訪問模型和變量不要在循環(huán)里用assignin(base, ...)那個在并行場景下大概率失敗。跑完之后最容易被忽略的是結(jié)果整理。out里的每個Simulink.SimulationOutput都帶logsout需要手動提取波形和指標(biāo)拼成一個表格或數(shù)據(jù)集% 提取每輪掃描中的電壓波形和峰值 for i 1:numel(out) V out(i).logsout.getElement(Vabc).Values; % 電壓波形 peak max(abs(V.Data(:,1))); % 找第一相最大電壓 fprintf(Case %d: 電壓峰值 %.2f V\n, i, peak); end這里getElement取得已記錄的信號Values.Data是采樣矩陣?yán)ㄌ柪锏?:,1)取第一相。把峰值、時間和工況參數(shù)一并存入array2table最后導(dǎo)出 CSV整個流程就可以復(fù)制到報告中。文檔落地我通常用publish或slreportgen庫把 M 腳本轉(zhuǎn)成帶波形的 HTML 或 PDF這就是標(biāo)題里所謂 “matlab 文檔” 的一種交付形態(tài)。我自己的習(xí)慣是在每個項目目錄下放一個run_cases.m把模型名、參數(shù)表、仿真腳本、結(jié)果導(dǎo)出寫在同一份文件里并把對應(yīng)的 Simulink 模型以.slx形式連同備份快照都存在同一目錄。這樣哪怕三個月后回看也能清楚某個波形對應(yīng)哪個工況。以前我吃過一個虧模型跑通了但沒把參數(shù)掃描邏輯留在腳本里結(jié)果評審時要重?fù)Q故障時間對著 GUI 找半天從此我把所有能腳本化的環(huán)節(jié)都腳本化了。數(shù)據(jù)不丟、參數(shù)可查、一次跑完才是 Simulink 電力系統(tǒng)建模與仿真真正的收尾標(biāo)準(zhǔn)。希望這一篇能幫你少踩幾個一樣的坑也希望你能早點把模型變成一個能傳承的 matlab 文檔。本文還有配套的精品資源點擊獲取