儲能變流器學習之MPPT

MPPT最大功率點追蹤技術詳解

引言

在可再生能源系統中,最大化能量捕獲效率是核心目標。無論是光伏發電系統還是儲能變流器(PCS),最大功率點追蹤(MPPT) 技術都是實現這一目標的關鍵。本文將深入探討MPPT技術的原理、實現算法及其在工程應用中的實踐要點。

什么是MPPT?

基本概念

MPPT(Maximum Power Point Tracking)是一種通過調節電力電子變換器的工作點,使能源(如光伏電池)始終工作在最大功率輸出狀態的技術。對于光伏系統而言,光伏電池的I-V和P-V曲線呈非線性特性,且隨光照強度、溫度等環境因素變化,最大功率點(MPP)也會相應移動。

PV 電池板的功率輸出取決于若干參數,例如電池板受到的輻照、電池板電壓、電池板溫度等。因此,在影響參數
值發生變化的條件下,功率輸出也在一天之中不斷變化。
下顯示了太陽能電池板的 I-V 曲線和 P-V 曲線。I-V 曲線表示電池板輸出電流與輸出電壓之間的關系。如圖中的 I-V 曲線所示,當端子短接時,電池板電流最大;當端子開路且空載時,電池板電流最小。
在這里插入圖片描述
如圖所示,當電池板電壓和電池板電流的乘積達到最大值時,從電池板獲得的最大功率表示為 PMAX。該點指定為最大功率點 (MPP)。

下圖舉例說明各項參數對太陽能電池板輸出功率的影響。這些圖形還顯示了太陽能電池板的功率輸出隨輻照度的變化。在這些圖中可觀察到,太陽能電池板的功率輸出隨輻照度的增加而增加,隨輻照度的減少而減少的情況。還要注意的是,發生 MPP 時的電池板電壓也隨著輻照度的變化而變化。
在這里插入圖片描述

為什么需要MPPT?

沒有MPPT功能的光伏系統可能工作在非最佳工作點,導致能量損失可達20%-30%。MPPT技術通過實時追蹤不斷變化的最大功率點,可顯著提高系統效率,增加能量產出。

MPPT基本原理

光伏電池的輸出特性可用以下方程描述:

I=Iph?I0[exp?(V+IRsnVt)?1]?V+IRsRsh I = I_{ph} - I_0 \left[ \exp\left(\frac{V + IR_s}{nV_t}\right) - 1 \right] - \frac{V + IR_s}{R_{sh}} I=Iph??I0?[exp(nVt?V+IRs??)?1]?Rsh?V+IRs??

其中,IphI_{ph}Iph?為光生電流,I0I_0I0?為反向飽和電流,RsR_sRs?為串聯電阻,RshR_{sh}Rsh?為并聯電阻,nnn為理想因子,VtV_tVt?為熱電壓。

最大功率點處的數學特性為:

dPdV=0 \frac{dP}{dV} = 0 dVdP?=0

MPPT算法的核心就是通過不斷調整工作點,使系統滿足這一條件。

常用MPPT算法及實現

1. 擾動觀察法(P&O)

原理

P&O算法通過周期性擾動工作點(電壓或占空比),并觀察功率變化方向來決定下一步的擾動方向。

算法流程
  1. 擾動工作點(增加或減少電壓/占空比)
  2. 測量功率變化
  3. 如果功率增加,保持相同擾動方向;如果功率減少,反轉擾動方向
  4. 重復上述過程
C語言實現代碼-基本擾動觀察法
// 擾動觀察法實現
#define DELTA_D 0.01f  // 擾動步長float prev_voltage = 0.0f;
float prev_current = 0.0f;
float prev_power = 0.0f;
float duty_cycle = 0.5f;void mppt_po_algorithm(void) {// 讀取當前電壓和電流float voltage = read_voltage();float current = read_current();float power = voltage * current;// 計算功率變化float delta_p = power - prev_power;float delta_v = voltage - prev_voltage;// 應用P&O邏輯if (delta_p > 0) {duty_cycle += (delta_v > 0) ? DELTA_D : -DELTA_D;} else {duty_cycle += (delta_v > 0) ? -DELTA_D : DELTA_D;}// 限制占空比范圍duty_cycle = (duty_cycle > 0.95f) ? 0.95f : duty_cycle;duty_cycle = (duty_cycle < 0.05f) ? 0.05f : duty_cycle;// 更新PWM并保存狀態set_duty_cycle(duty_cycle);prev_voltage = voltage;prev_current = current;prev_power = power;
}
可復用-擾動觀察法
/*** @brief MPPT(最大功率點跟蹤)算法結構體* * 該結構體包含了MPPT算法所需的所有參數和狀態變量* 實現了擾動觀察法(Perturb and Observe)MPPT算法*/
typedef struct {float32_t  Ipv;        // 當前光伏電流值float32_t  Vpv;        // 當前光伏電壓值float32_t  MaxI;       // 最大允許電流限制float32_t  MinI;       // 最小允許電流限制float32_t  Stepsize;   // MPPT步長,用于調整電流參考值float32_t  ImppOut;    // MPPT輸出的電流參考值// 內部狀態變量float32_t  Step;       // 當前步長(未使用)float32_t  PpvOld;     // 上一次的功率值float32_t  IpvOld;     // 上一次的電流值int16_t mppt_first;    // 首次運行標志位int mppt_enable;       // MPPT使能標志位
} uinv_dcdc_mppt_t;/*** @brief MPPT算法初始化函數* @param v MPPT結構體指針* * 初始化MPPT算法的狀態變量,設置首次運行標志*/
static void uinv_dcdc_mppt_init(uinv_dcdc_mppt_t *v) {v->mppt_first = 1;  // 設置首次運行標志
}/*** @brief MPPT算法主運行函數* @param v MPPT結構體指針* * 實現擾動觀察法MPPT算法:* 1. 計算當前功率點* 2. 比較當前功率與上一次功率* 3. 根據功率變化趨勢調整電流參考值* 4. 確保輸出電流在安全范圍內*/
#pragma FUNC_ALWAYS_INLINE(uinv_dcdc_mppt_run)
static void uinv_dcdc_mppt_run(uinv_dcdc_mppt_t *v) {// 計算當前功率點 P = V × Ifloat32_t P = v->Vpv * v->Ipv;// 檢查MPPT是否使能if(v->mppt_enable) {// 首次運行時的初始化if(v->mppt_first) {v->ImppOut = v->Ipv;    // 設置初始電流參考值為當前電流v->PpvOld = P;          // 保存當前功率值v->IpvOld = v->Ipv;     // 保存當前電流值v->mppt_first = 0;      // 清除首次運行標志} else {// 計算電流變化量float32_t deltaI = v->Ipv - v->IpvOld;// 擾動觀察法核心邏輯if(deltaI > 0) { // 如果電流在增加if(P > v->PpvOld) { // 且功率也在增加// 繼續增加電流(向最大功率點方向移動)v->ImppOut = v->Ipv + v->Stepsize;} else { // 但功率在減少// 減少電流(反向移動,避免越過最大功率點)v->ImppOut = v->Ipv - v->Stepsize;}} else { // 如果電流在減少if(P > v->PpvOld) { // 且功率在增加// 繼續減少電流(向最大功率點方向移動)v->ImppOut = v->Ipv - v->Stepsize;} else { // 且功率也在減少// 增加電流(反向移動,避免越過最大功率點)v->ImppOut = v->Ipv + v->Stepsize;}}}}// 電流限幅保護:確保輸出電流在安全范圍內v->ImppOut = (v->ImppOut < v->MinI) ? v->MinI : v->ImppOut;  // 下限保護v->ImppOut = (v->ImppOut > v->MaxI) ? v->MaxI : v->ImppOut;  // 上限保護// 更新歷史值,為下次計算做準備v->IpvOld = v->Ipv;  // 保存當前電流值v->PpvOld = P;       // 保存當前功率值
}#endif /* UINV_DCDC_MPPT_H_ */

代碼分析

這段代碼實現了一個**擾動觀察法(Perturb and Observe, P&O)**的MPPT(最大功率點跟蹤)算法,用于太陽能光伏系統中。以下是詳細解釋:

1. 算法原理

MPPT算法的目的是讓光伏系統始終工作在最大功率點,從而獲得最大的能量輸出。擾動觀察法的基本原理是:

  • 通過小幅擾動(改變工作電流)來觀察功率變化
  • 根據功率變化趨勢決定下一步的擾動方向
  • 逐步收斂到最大功率點

2. 核心邏輯分析

初始化階段:

  • 首次運行時,記錄當前電流和功率值作為基準

擾動觀察階段:

  • 計算當前功率:P = Vpv × Ipv
  • 比較當前功率與上一次功率的變化
  • 根據電流變化方向和功率變化趨勢決定下一步動作:
電流變化功率變化下一步動作說明
增加增加繼續增加電流向最大功率點方向移動
增加減少減少電流反向移動,避免越過最大功率點
減少增加繼續減少電流向最大功率點方向移動
減少減少增加電流反向移動,避免越過最大功率點

3. 安全保護

  • 電流限幅:確保輸出電流在MinIMaxI范圍內
  • 使能控制:通過mppt_enable標志控制算法是否運行

4. 算法特點

  • 簡單高效:實現簡單,計算量小
  • 自適應性:能夠自動跟蹤最大功率點
  • 穩定性:在最大功率點附近會有小幅振蕩,這是該算法的固有特性
C語言實現代碼-基于變步長擾動觀察法
/************************************************************************/
/*** @brief 最大功率點跟蹤算法主函數* @details 實現擾動觀察法(P&O)MPPT算法,通過調整光伏電壓參考值來尋找最大功率點*          算法包含快速搜索、動態調整、功率限制等功能*/
void MPPTTrack(void)
{float32 f32Temp0;	// 臨時變量,用于存儲最大功率值// 靜態變量,用于算法控制static int16 Counter = 0;           // 連續功率增加計數器static int16 test_dynamic_Flag = 0; // 動態測試標志位static int16 CounterPVPos = 0;      // PV電壓過高計數器static int16 CounterPVNeg = 0;      // PV電壓過低計數器static float32 Delta_MPPTStep = 4;  // MPPT步長,初始值為4V// 計算功率變化閾值,基于當前功率的0.1%g_MpptCalc.f32DeltaPowerDC = g_MpptCalc.f32PVWattCurrent * 0.001f;// 限制功率變化閾值在3-5W之間,確保算法穩定性if(g_MpptCalc.f32DeltaPowerDC < 3){g_MpptCalc.f32DeltaPowerDC = 3;}else if(g_MpptCalc.f32DeltaPowerDC > 5){g_MpptCalc.f32DeltaPowerDC = 5;}else{}// 根據當前功率調整MPPT步長,實現自適應步長控制if(g_MpptCalc.f32PVWattCurrent < 2000)  // 功率小于2kW時使用較大步長{Delta_MPPTStep = DeltaMPPTV;}else if(g_MpptCalc.f32PVWattCurrent > 4000)  // 功率大于4kW時使用較小步長{Delta_MPPTStep = 2;}else{}// 獲取兩個MPPT通道中的最大功率值f32Temp0 = MAX(g_Mppt1Calc.f32PVWattCurrent, g_Mppt2Calc.f32PVWattCurrent);// 功率限制保護:當功率超過限制時,增加電壓參考值以降低功率if((g_MpptCalc.f32PVWattCurrent > g_PActiveLimit.f32PinputAll)||(f32Temp0 > g_PActiveLimit.f32Pinput1)){// 保存歷史電壓參考值g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef;g_MpptCalc.f32PVWattOld = g_MpptCalc.f32PVWattCurrent;// 增加電壓參考值以降低功率g_MpptCalc.f32PvVoltRef +=	1;return;  // 功率限制時直接返回,不執行MPPT算法}// PV電壓范圍保護:確保PV電壓在合理范圍內if(g_MpptCalc.f32PvVoltRef > g_CalcResult.Ave.f32VPV1 + PV15V)  // 電壓過高{CounterPVPos++;if(CounterPVPos>2)  // 連續3次電壓過高,強制調整{g_MpptCalc.f32PvVoltRef  = g_CalcResult.Ave.f32VPV1  - Delta_MPPTStep;CounterPVPos = 0;}}else if(g_MpptCalc.f32PvVoltRef < g_CalcResult.Ave.f32VPV1 - PV15V)  // 電壓過低{CounterPVNeg++;if(CounterPVNeg>2)  // 連續3次電壓過低,強制調整{g_MpptCalc.f32PvVoltRef  = g_CalcResult.Ave.f32VPV1  - Delta_MPPTStep;CounterPVNeg = 0;}}else  // 電壓在正常范圍內,執行MPPT算法{// 重置電壓異常計數器CounterPVNeg = 0;CounterPVPos = 0;// 快速搜索模式:用于系統啟動時的快速定位if(1 == g_MpptCalc.u16FastSearch){// 如果電壓高于開路電壓的83%,逐步降低電壓if(g_MpptCalc.f32PvVoltRef  > (g_MpptCalc.f32PvOpenVolt * 0.83)){g_MpptCalc.f32PvVoltRef  = g_MpptCalc.f32PvVoltRef - g_MpptCalc.f32PvOpenVolt * 0.01;				}else  // 達到合適電壓范圍,退出快速搜索模式{g_MpptCalc.f32PvVoltRef  = g_MpptCalc.f32PvVoltRef  + Delta_MPPTStep;     g_MpptCalc.u16FastSearch = 0;test_dynamic_Flag = 0;Counter = 0;}// 保存歷史值g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef;g_MpptCalc.f32PVWattOld = g_MpptCalc.f32PVWattCurrent;}else  // 正常MPPT跟蹤模式{// 功率增加情況:當前功率大于等于上次功率+閾值if(g_MpptCalc.f32PVWattOld + g_MpptCalc.f32DeltaPowerDC <= g_MpptCalc.f32PVWattCurrent)             {Counter++;  // 增加連續功率增加計數if(Counter > 3)  // 連續4次功率增加,啟用動態測試模式{test_dynamic_Flag=1;Counter = 0;}// 動態測試模式:使用更精細的步長調整if(test_dynamic_Flag==1){if (g_MpptCalc.f32PvVoltRef >= g_MpptCalc.f32PvRefOld)  // 上次電壓增加{g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef;g_MpptCalc.f32PvVoltRef = g_MpptCalc.f32PvRefOld - 0.1;  // 小幅降低電壓}else if(g_MpptCalc.f32PvVoltRef < g_MpptCalc.f32PvRefOld)  // 上次電壓降低{g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef;g_MpptCalc.f32PvVoltRef = g_MpptCalc.f32PvRefOld + 0.3;  // 小幅增加電壓}else{}}else  // 正常模式:使用標準步長{	if(g_MpptCalc.f32PvVoltRef  >= g_MpptCalc.f32PvRefOld)  // 上次電壓增加{g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef;g_MpptCalc.f32PvVoltRef += Delta_MPPTStep;  // 繼續增加電壓}else  // 上次電壓降低{g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef;g_MpptCalc.f32PvVoltRef  -= Delta_MPPTStep;  // 繼續降低電壓}}g_MpptCalc.f32PVWattOld = g_MpptCalc.f32PVWattCurrent;  // 更新歷史功率值}// 功率減少情況:當前功率明顯小于上次功率else if(g_MpptCalc.f32PVWattOld > g_MpptCalc.f32PVWattCurrent + g_MpptCalc.f32DeltaPowerDC){test_dynamic_Flag = 0;  // 退出動態測試模式Counter = 0;  // 重置計數器// 反向調整電壓:與上次調整方向相反if(g_MpptCalc.f32PvVoltRef  >= g_MpptCalc.f32PvRefOld)  // 上次電壓增加{g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef;g_MpptCalc.f32PvVoltRef  -= Delta_MPPTStep;  // 降低電壓}else  // 上次電壓降低{g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef;g_MpptCalc.f32PvVoltRef  += Delta_MPPTStep;  // 增加電壓}g_MpptCalc.f32PVWattOld = g_MpptCalc.f32PVWattCurrent;}// 功率變化不明顯:使用較小步長微調else{test_dynamic_Flag = 0;  // 退出動態測試模式Counter = 0;  // 重置計數器// 使用較小步長(40%的標準步長)進行微調if(g_MpptCalc.f32PvVoltRef  >= g_MpptCalc.f32PvRefOld)  // 上次電壓增加{g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef ;g_MpptCalc.f32PvVoltRef  += (Delta_MPPTStep * 0.4);  // 小幅增加電壓}else  // 上次電壓降低{g_MpptCalc.f32PvRefOldOld = g_MpptCalc.f32PvRefOld;g_MpptCalc.f32PvRefOld = g_MpptCalc.f32PvVoltRef ;g_MpptCalc.f32PvVoltRef  -= (Delta_MPPTStep * 0.4);  // 小幅降低電壓}               }}}// 電壓下限保護:確保PV電壓不低于最小工作電壓if(g_MpptCalc.f32PvVoltRef  < PV250V + 5)  {g_MpptCalc.f32PvVoltRef  = PV250V + 5;  // 強制設置為最小工作電壓}
}
優缺點
  • 優點:實現簡單,計算量小
  • 缺點:在MPP附近振蕩,光照突變時可能誤判

2. 電導增量法(Incremental Conductance)

原理

基于最大功率點處的數學特性:dIdV=?IV\frac{dI}{dV} = -\frac{I}{V}dVdI?=?VI?

算法流程
  1. 測量當前電壓和電流
  2. 計算電導(I/V)和微分電導(dI/dV)
  3. 比較兩者關系決定調整方向
  4. 重復上述過程
C語言實現代碼
// 電導增量法實現
#define DELTA_D 0.005f
#define MIN_DV 0.01f  // 最小電壓變化閾值float prev_voltage = 0.0f;
float prev_current = 0.0f;
float duty_cycle = 0.5f;void mppt_incond_algorithm(void) {float voltage = read_voltage();float current = read_current();float delta_v = voltage - prev_voltage;if (fabs(delta_v) < MIN_DV) {// 處理小電壓變化情況float cond = current / voltage;if (fabs(cond) > 0.01f) {duty_cycle += (cond > 0) ? -DELTA_D : DELTA_D;}} else {float delta_i = current - prev_current;float inc_cond = delta_i / delta_v;float inst_cond = current / voltage;if (fabs(inc_cond + inst_cond) < 0.01f) {// 已在MPP附近} else if (inc_cond > -inst_cond) {duty_cycle -= DELTA_D;} else {duty_cycle += DELTA_D;}}// 限制和更新duty_cycle = (duty_cycle > 0.95f) ? 0.95f : duty_cycle;duty_cycle = (duty_cycle < 0.05f) ? 0.05f : duty_cycle;set_duty_cycle(duty_cycle);prev_voltage = voltage;prev_current = current;
}
優缺點
  • 優點:對光照突變響應好,穩態精度高
  • 缺點:計算復雜,對傳感器精度要求高

3. 其他算法

恒定電壓法(CV)

基于MPP電壓與開路電壓近似成比例關系的假設(Vmpp≈k?VocV_{mpp} ≈ k \cdot V_{oc}Vmpp?k?Voc?)。實現簡單但精度較低,常作為輔助啟動方法。

智能算法
  • 模糊邏輯控制:無需精確數學模型,魯棒性強
  • 神經網絡控制:需要訓練但精度高
  • 粒子群優化(PSO):適用于局部遮陰等多峰情況

工程應用實踐

單通道 vs 多通道MPPT

單通道輸入
  • 所有組串并聯接入單個MPPT通道
  • 成本低但存在"木桶效應"
  • 適合組件條件一致的場景
多通道輸入
  • 多個獨立MPPT通道,各自追蹤最佳工作點
  • 抗失配能力強,發電效率高
  • 適合復雜安裝環境(多朝向、部分遮擋)

實際應用考慮因素

  1. 采樣頻率選擇:通常10-100Hz,需在響應速度和噪聲抑制間平衡
  2. 步長設計:大的步長響應快但振蕩大,小的步長精度高但響應慢
  3. 硬件保護:過壓、過流保護必須優先于MPPT算法
  4. 啟動策略:常采用CV法提供初始工作點
  5. 軟件濾波:對采樣值進行濾波處理,提高穩定性

在儲能變流器中的應用特點

儲能變流器中的MPPT技術與光伏逆變器類似,但有以下特點:

  1. 雙向能量流動:需要考慮充放電不同模式下的MPPT策略
  2. 電池SOC影響:電池狀態可能限制MPPT的工作范圍
  3. 多源協調:需要與電網、負載等其他能源協調工作

未來發展趨勢

  1. AI與機器學習應用:提高MPPT在復雜環境下的性能
  2. 多目標優化:兼顧效率、電池壽命、電網要求等多重目標
  3. 預測性MPPT:結合天氣預報提前優化工作策略
  4. 分布式MPPT:組件級MPPT進一步提高系統效率

結論

MPPT技術是提高可再生能源系統效率的關鍵技術。在實際工程中,需要根據具體應用場景選擇合適的算法和硬件架構。對于大多數應用,改進型的P&O和IncCond算法因其在性能和復雜度間的良好平衡而成為首選。隨著技術發展,智能算法和多目標優化將成為未來發展方向。

理解MPPT不僅需要掌握算法原理,更需要結合實際工程 constraints 進行系統級優化,才能在效率、成本和可靠性間找到最佳平衡點。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94671.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qData 數據中臺完整功能介紹 —— 商業版與開源版功能對比

一、qData 數據中臺概覽 在數字化轉型的大背景下&#xff0c;數據已經成為企業最核心、最具價值的資產。qData 數據中臺&#xff0c;作為企業數據治理與應用的關鍵平臺&#xff0c;憑借高性能與創新理念脫穎而出。它秉持 “高效、安全、靈活、開放” 的設計原則&#xff0c;致力…

Xshell 自動化腳本大賽技術文章大綱

一、引言1.1 大賽背景與意義介紹 Xshell 在運維、開發等領域的廣泛應用&#xff0c;強調自動化腳本對于提升效率、減少錯誤的重要性。闡述大賽旨在激發用戶創新&#xff0c;挖掘 Xshell 自動化腳本更多潛力&#xff0c;促進技術交流與共享。1.2 目標受眾明確文章面向熟悉基本 L…

Python 數據分析學習筆記:Pandas 邏輯運算

&#x1f539; DA9&#xff1a;2020年畢業且使用Java的用戶&#x1f4cc; 題目描述篩選出 2020年畢業 且 常用語言為 Java 的用戶&#xff0c;輸出他們的全部信息&#xff0c;并設置顯示選項以完整顯示數據。? 正確代碼import pandas as pd# 讀取數據 Nowcoder pd.read_csv(N…

圖像邊緣檢測

目錄 一.圖像邊緣檢測 1.圖像邊緣檢測概述 2.Sobel算子原理與實現 3.Scharr算子 4.Laplacian算子 5.Canny邊緣檢測&#xff08;重點&#xff09; 6.效果對比 一.圖像邊緣檢測 1.圖像邊緣檢測概述 2.Sobel算子原理與實現 代碼是實現步驟&#xff1a; 邊緣檢測是圖像處…

zookeeper-znode解析

一. 數據模型&#xff1a;ZK擁有一個命名空間就像一個精簡的文件系統&#xff0c;不同的是它的命名空間中的每個節點擁有它自己或者它下面子節點相關聯的數據。ZK中必須使用絕對路徑也就是使用“/”開頭。二. znode&#xff1a;zk目錄樹中每個節點對應一個znode。每個znode維護…

Redis 高可用篇

主從復制是怎么實現的&#xff1f; 如果服務器發生了宕機&#xff0c;由于數據恢復是需要點時間&#xff0c;那么這個期間是無法服務新的請求的&#xff1b;如果這臺服務器的硬盤出現了故障&#xff0c;可能數據就都丟失了。 要避免這種單點故障&#xff0c;最好的辦法是將數據…

C++ 指針與引用面試深度解析

C 指針與引用面試深度解析面試官考察指針和引用&#xff0c;不僅是考察語法&#xff0c;更是在考察你對C中 “別名” (Aliasing) 與 “地址” (Addressing) 這兩種間接訪問機制的理解&#xff0c;以及你對 “代碼安全” 和 “接口設計” 的思考深度。第一部分&#xff1a;核心知…

LinuxC語言線程的同步與互斥

一.線程的同步與互斥1. 基礎概念:1.1 互斥&#xff1a;對共享資源的訪問&#xff0c;同一時刻只允許一個訪問者進行訪問&#xff0c;互斥具有唯一和排他性&#xff0c;互斥無法保證對共享資源的訪問順序1.2 同步: 在互斥的基礎上&#xff0c;實現對共享資源的有序訪問。2. 互斥…

Centos 7.6離線安裝docker

在內網環境下&#xff0c;一般不能聯網在線部署&#xff0c;這時候就需要以離線的方式安裝docker。本節內容主要總結一下在CentOS 7.6環境中離線安裝docker的步驟。 1、下載docker安裝包 https://pan.baidu.com/share/init?surlPaUllQZ-dwpgJ7quA5IkcQ&pwd4sfc 2、上傳到服…

生成式推薦模型的長序列特征:離線存儲

文章目錄長序列特征的例子1. Event-level features2. Sequence-level featuresAggregation FeaturesSession-based FeaturesTemporal Order Features3. User-level features4. Interaction features (between user and item/context)how to store the long term user behaviro …

Linux inode 實現機制深入分析

Linux inode 實現機制深入分析 1 Inode 基本概念與作用 Inode&#xff08;Index Node&#xff09;是 Linux 和其他類 Unix 操作系統中文件系統的核心數據結構&#xff0c;用于存儲文件或目錄的元數據&#xff08;metadata&#xff09;。每個文件或目錄都有一個唯一的 inode&…

Flask 之請求鉤子詳解:掌控請求生命周期

在構建現代 Web 應用時&#xff0c;我們常常需要在請求的不同階段自動執行一些通用邏輯&#xff0c;例如&#xff1a;記錄日志、驗證權限、連接數據庫、壓縮響應、添加安全頭等。如果在每個視圖函數中重復這些代碼&#xff0c;不僅冗余&#xff0c;而且難以維護。Flask 請求鉤子…

設計模式七大原則附C++正反例源碼

設計模式的七大原則是軟件設計的基石,它們指導開發者構建高內聚、低耦合、易維護、可擴展的系統。以下以C++為例,詳細介紹這七大原則: 一、單一職責原則(Single Responsibility Principle, SRP) 定義:一個類應該只有一個引起它變化的原因(即一個類只負責一項職責)。 …

云計算之中間件與數據庫

一、云數據庫的特性云數據庫是指被優化或部署到一個虛擬計算環境中的數據庫&#xff0c;可以實現按需付費、按需擴展、高可用性以及存儲整合等優勢。根據數據庫類型一般分為關系型數據庫和非關系型數據庫&#xff08;NoSQL數據庫&#xff09; 。云數據庫的特性序號云數據庫的特…

codeforces(1045)(div2) E. Power Boxes

E.電源箱 每次測試時限&#xff1a; 2 秒 每次測試的內存限制&#xff1a;256 兆字節 輸入&#xff1a;標準輸入 輸出&#xff1a;標準輸出 這是一個互動問題。 給你 nnn 個方格&#xff0c;索引從 111 到 nnn 。這些方格看起來完全相同&#xff0c;但是每個方格都有一個隱藏的…

4G模塊 EC200通過MQTT協議連接到阿里云

命令說明 基礎AT指令ATI顯示MT的ID信息ATCIMI查詢IMSIATQCCID查詢ICCIDATCSQ查詢信號強度ATCGATT?查詢當前PS域狀態MQTT配置指令ATQMTCFG配置MQTT可選參數ATQMTCFG配置MQTT可選參數.ATQMTOPEN打開MQTT客戶端網絡ATQMTCLOSE關閉MQTT客戶端網絡ATQMTCONN連接客戶端到MQTT服務器…

如何選擇合適的安全監測預警系統

在當今高度復雜和互聯的數字化時代&#xff0c;安全威脅無處不在且持續演變。一套高效、可靠的安全監測預警系統已成為組織保障其物理資產、數字信息和關鍵業務連續性的核心基礎設施。然而&#xff0c;面對市場上琳瑯滿目的產品和解決方案&#xff0c;如何做出符合自身需求的選…

ELK-使用logstash-output-zabbix插件實現日志通過zabbix告警

ELK-使用logstash-output-zabbix插件實現日志通過zabbix告警logstash-output-zabbix插件安裝編輯logstash配置文件在zabbix上創建模板實現的效果:elk收集上來的日志中含有報錯時(例如error等)&#xff0c;logstash過濾出來將這部分日志打到zabbix&#xff0c;再通過zabbix結合釘…

【C++游記】物種多樣——謂之多態

楓の個人主頁 你不能改變過去&#xff0c;但你可以改變未來 算法/C/數據結構/C Hello&#xff0c;這里是小楓。C語言與數據結構和算法初階兩個板塊都更新完畢&#xff0c;我們繼續來學習C的內容呀。C是接近底層有比較經典的語言&#xff0c;因此學習起來注定枯燥無味&#xf…