python的工业过程控制场景模拟第三十八篇:实现超驰选择控制逻辑正常工况运行压力调节,超压自动切入泄压保护回路。
超驰选择控制仿真系统 —— 基于 OOP 的压力调节与泄压保护实战正常工况下你希望压力平稳超压工况下你只希望别炸。这两种目标没法用同一个PID同时满足——你需要一个裁判来决定此刻该听谁的。这就是超驰选择控制。—— 哈尔滨工程大学《工业过程控制》课程核心思想一、实际应用场景描述在石油化工、天然气处理、锅炉系统等高压工艺中压力安全是生死攸关的问题。正常情况下控制系统追求压力平稳但当压力逼近设备极限时一切平稳都得让位于泄压。┌──────────────────────────────────────────────┐│ 超驰选择控制器 (Override Selector) ││ ││ ┌─────────────┐ ┌─────────────┐ ││ │ 正常回路 PID │ │ 保护回路 PID │ ││ │ 压力调节 │ │ 超压保护 │ ││ │ (追求平稳) │ │ (追求安全) │ ││ └──────┬──────┘ └──────┬──────┘ ││ │ │ ││ └────────┬───────────┘ ││ ▼ ││ LOW SELECT (低选) ││ 或 HIGH SELECT (高选) │└───────────────────┬──────────────────────────┘│▼┌──────────────────┐│ 泄压阀 / 调节阀 │└──────────────────┘典型工艺案例工艺 正常控制 保护目标 选择器类型天然气压缩机出口 调节回流量控压力 超压开泄放阀 低选选较小MV反应釜 进料阀控压力 超压开安全阀旁路 高选选较大MV锅炉汽包 给水阀控压力 超压减负荷 低选分馏塔顶 冷回流控压力 不凝气排放 高选哈尔滨工程大学《工业过程控制》课程彭秀艳教授主讲国家级一流本科课程在第八章选择性控制系统中系统讲解了超驰控制的设计原理。课程明确指出选择性控制的核心是在多个控制器输出中选择一个作为执行机构的指令。超驰控制是选择性控制的一种特殊形式——正常控制器负责好日子保护控制器负责坏日子选择器就是那个切换开关。二、引入痛点2.1 现场的真实困境场景 现场发生了什么 根因超压险肇 压力到了8.5MPa调节阀还在往里进料 正常PID不知道危险临近来回震荡 选择器频繁切换阀门一开一关像抽风 两个PID输出接近无滞环保护滞后 安全阀都起跳了控制阀还没动 保护回路PID参数不对误操作 检修后忘了投用超驰结果超压 缺少状态指示和仿真验证教学难点 学生不理解为什么用低选而不是切换开关 没有直观的动态演示2.2 核心矛盾正常PID的目标是消除偏差——压力高了就开大出料阀。但如果压力已经高到危险的程度你需要的不是慢慢调节而是立刻大开泄压阀。这两个目标对应的PID参数完全不同甚至输出方向相反。- 正常回路Kp适中、Ti较短 → 平稳跟踪- 保护回路Kp大、Ti极短 → 快速响应超压- 两者输出需要自动选择不能靠操作员手动切2.3 我们要解决什么用一段Python程序纯数学仿真一个超驰选择控制系统实现1. 双PID并行 —— 正常压力调节 超压保护2. 选择器逻辑 —— 低选Low Select或高选High Select3. 切换滞环 —— 防止在两个输出接近时频繁切换4. 状态追踪 —— 记录当前由哪个回路主导5. 可视化 —— 四轴曲线压力/正常MV/保护MV/选中MV6. 面向对象设计 —— 分层清晰可扩展三、核心逻辑讲解3.1 理论基础超驰选择控制本工具基于哈工程《工业过程控制》第八章选择性控制系统① 超驰控制定义在一个控制系统中设置两个或多个控制器它们的输出接到一个选择器上选择器根据实际工况自动选择其中一个控制器的输出送给执行机构。② 选择器类型类型 逻辑 适用场景低选 (Low Select, LS) 选较小的MV 超压保护——选更开的那个信号高选 (High Select, HS) 选较大的MV 防抽空保护——选更关的那个信号③ 为什么超压用低选正常回路PID: 压力高 → 输出增大 → 阀门开大 → 降压保护回路PID: 压力超高 → 输出更大 → 阀门全开 → 快速降压低选器: 谁输出小就选谁?等等——如果输出越大阀门开越大那应该是选大的才对?关键在于阀门类型!- 如果是气开阀(FC): MV大开度大 → 超压需要大MV → 应该高选- 如果是气关阀(FO): MV小开度大 → 超压需要小MV → 应该低选本项目假设: 泄压阀为气关阀(FO) → 超压时需要MV最小 → 低选④ 切换滞环Hysteresis问题: 正常MV50.1, 保护MV50.0 → 选保护; 下一刻正常MV49.9 → 选正常→ 频繁切换!解决: 加入滞环从高选切换到低选: 差值 切换阈值(如0.5%)才切从低选切换到高选: 差值 切换阈值才切3.2 压力过程模型正常工况: 进料阀开度 → 罐内压力上升泄压工况: 泄压阀开度 → 罐内压力下降物料平衡: dP/dt (F_in - F_out) / C_v简化: 一阶惯性 积分3.3 仿真流程图┌──────────────────────────────┐│ 仿真主循环 │└──────────────┬───────────────┘│┌──────────────▼───────────────┐│ ① 压力过程仿真 ││ 计算当前压力 PV │└──────────────┬───────────────┘│┌──────────────▼───────────────┐│ ② 两个PID并行计算 ││ 正常PID: 控压力到设定值 ││ 保护PID: 控压力远离危险限 │└──────────────┬───────────────┘│┌──────────────▼───────────────┐│ ③ 选择器 (低选/高选滞环) ││ 决定最终 MV │└──────────────┬───────────────┘│┌──────────────▼───────────────┐│ ④ 执行机构 ││ MV → 泄压阀开度 │└──────────────┬───────────────┘│┌──────────────▼───────────────┐│ ⑤ 记录 统计 ││ 切换次数/超调/安全评估 │└──────────────────────────────┘四、代码讲解面向对象设计4.1 类结构总览类名 职责 设计模式SelectorConfig 选择器配置值对象 值对象PressureProcessParams 压力过程参数值对象 值对象PIDParams PID参数值对象 值对象Selector 选择器低选/高选滞环 策略模式PressureProcess 压力过程模型 封装PIDController 位置式PID含抗积分饱和 封装OverrideController 超驰控制器双PID选择 组合OverrideSimulator 仿真引擎 编排器PerformanceEvaluator 性能评估器 策略模式Plotter 曲线绘制 封装4.2 配置层from dataclasses import dataclassfrom enum import Enumclass SelectType(Enum):选择器类型LOW_SELECT low_select # 低选 (LS)HIGH_SELECT high_select # 高选 (HS)dataclass(frozenTrue)class SelectorConfig:选择器配置 —— 值对象select_type: SelectType SelectType.LOW_SELECThysteresis: float 0.5 # 切换滞环 (%)normal_label: str Normal_PIDprotect_label: str Protect_PIDdataclass(frozenTrue)class PressureProcessParams:压力过程参数volume: float 10.0 # 容器容积 (m³)p_ambient: float 0.1 # 环境压力 (MPa)p_normal: float 2.0 # 正常工作压力 (MPa)p_high_limit: float 2.8 # 高压报警限 (MPa)p_emergency: float 3.2 # 紧急泄放限 (MPa)p_max: float 3.5 # 设备最大允许压力 (MPa)valve_gain: float 0.03 # 阀门增益 (MPa/%)disturbance_gain: float 0.02 # 扰动增益dt: float 1.0 # 仿真步长 (s)sim_duration: float 1200.0 # 仿真时长 (s) 20分钟dataclass(frozenTrue)class PIDParams:PID参数Kp: float 1.0Ti: float 10.0Td: float 2.0dt: float 1.0mv_min: float 0.0mv_max: float 100.0anti_windup: bool True4.3 选择器核心算法class Selector:选择器 —— 策略模式低选(LS): 输出 min(MV1, MV2)高选(HS): 输出 max(MV1, MV2)带滞环切换防止频繁振荡def __init__(self, config: SelectorConfig):self.cfg configself._active config.normal_label # 当前激活的控制器self._last_output 50.0def select(self, mv_normal: float, mv_protect: float) - tuple:执行选择Args:mv_normal: 正常回路输出mv_protect: 保护回路输出Returns:(selected_mv, active_label)diff mv_normal - mv_protectif self.cfg.select_type SelectType.LOW_SELECT:# 低选: 正常情况选正常回路if self._active self.cfg.normal_label:# 当前正常回路主导 → 保护回路比正常回路小多少才切?if diff self.cfg.hysteresis:self._active self.cfg.protect_labelelse:# 当前保护回路主导 → 正常回路比保护回路小多少才切回?if diff -self.cfg.hysteresis:self._active self.cfg.normal_labelselected min(mv_normal, mv_protect)else: # HIGH_SELECTif self._active self.cfg.normal_label:if diff -self.cfg.hysteresis:self._active self.cfg.protect_labelelse:if diff self.cfg.hysteresis:self._active self.cfg.normal_labelselected max(mv_normal, mv_protect)self._last_output selectedreturn selected, self._activedef reset(self):self._active self.cfg.normal_labelself._last_output 50.0亮点- 滞环逻辑只有当差值超过阈值时才切换避免抖动- 状态追踪_active 记录当前哪个回路在主导- 可扩展新增选择策略只需加一个分支4.4 压力过程模型class PressureProcess:压力过程模型 —— 容器充放气简化模型物理方程:dP/dt (F_in - F_out) / V × K其中:F_in 进料流量 (由扰动或进料阀决定)F_out 泄压流量 (由泄压阀开度决定)def __init__(self, params: PressureProcessParams):self.p paramsself.pressure params.p_normalself._relief_valve 0.0self._inlet_valve 50.0def set_relief_valve(self, pos: float):设置泄压阀开度 (%)self._relief_valve max(0.0, min(100.0, pos))def set_inlet_valve(self, pos: float):设置进料阀开度 (%)self._inlet_valve max(0.0, min(100.0, pos))def step(self, disturbance: float 0.0) - float:执行一个仿真步Args:disturbance: 外部扰动 (如进料波动)Returns:当前压力 (MPa)# 进料量 (简化)inlet_flow self._inlet_valve * self.p.disturbance_gain disturbance# 泄压量 (简化)relief_flow self._relief_valve * self.p.valve_gain# 净流量net_flow inlet_flow - relief_flow# 压力变化 (简化的一阶模型)dp net_flow / self.p.volume * self.p.dtself.pressure dp# 限幅self.pressure max(self.p.p_ambient, min(self.p.p_max, self.p.pressure))return self.pressuredef reset(self):self.pressure self.p.p_normalself._relief_valve 0.0self._inlet_valve 50.04.5 PID控制器class PIDController:位置式PID (含抗积分饱和)def __init__(self, params: PIDParams):self.p paramsself.reset()def reset(self):self._integral 0.0self._prev_pv 0.0self._first Truedef compute(self, setpoint: float, process_value: float) - float:dt self.p.dterror setpoint - process_valueP self.p.Kp * errorif self.p.Ti 0:self._integral error * dtI (self.p.Kp / self.p.Ti) * self._integralelse:I 0.0if self.p.Td 0 and not self._first:D -self.p.Kp * self.p.Td * (process_value - self._prev_pv) / dtelse:D 0.0mv P I Dmv_clipped max(self.p.mv_min, min(self.p.mv_max, mv))if self.p.anti_windup and self.p.Ti 0:if abs(mv - mv_clipped) 1e-9:allowed_I (mv_clipped - P - D) / (self.p.Kp / self.p.Ti)self._integral allowed_Iself._prev_pv process_valueself._first Falsereturn mv_clipped4.6 超驰控制器class OverrideController:超驰控制器 —— 双PID 选择器正常回路: 控压力到设定值保护回路: 防止压力超过安全限选择器: 根据工况自动切换def __init__(self, normal_pid_params: PIDParams,protect_pid_params: PIDParams,selector_config: SelectorConfig):self.normal_pid PIDController(normal_pid_params)self.protect_pid PIDController(protect_pid_params)self.selector Selector(selector_config)def step(self, pv: float, normal_sp: float, protect_sp: float) - tuple:执行一步超驰控制Args:pv: 过程变量 (压力)normal_sp: 正常设定值protect_sp: 保护设定值 (通常低于正常SP)Returns:(selected_mv, normal_mv, protect_mv, active)# 两个PID并行计算mv_normal self.normal_pid.compute(normal_sp, pv)mv_protect self.protect_pid.compute(protect_sp, pv)# 选择器决定最终输出selected_mv, active self.selector.select(mv_normal, mv_protect)return selected_mv, mv_normal, mv_protect, activedef reset(self):self.normal_pid.reset()self.protect_pid.reset()self.selector.reset()4.7 仿真引擎class OverrideSimulator:超驰选择控制仿真引擎 —— 编排器def __init__(self, process_params: PressureProcessParams,normal_pid_params: PIDParams,protect_pid_params: PIDParams,selector_config: SelectorConfig):self.process PressureProcess(process_params)self.controller OverrideController(normal_pid_params, protect_pid_params, selector_config)self.p_params process_paramsself.history []def run(self, disturbance_start: float 300.0,disturbance_mag: float 0.8) - dict:执行仿真Args:disturbance_start: 扰动开始时间 (s)disturbance_mag: 扰动幅度self.process.reset()self.controller.reset()self.history.clear()n_steps int(self.p_params.sim_duration / self.p_params.dt)for k in range(n_steps 1):t k * self.p_params.dt# 扰动注入disturbance disturbance_mag if t disturbance_start else 0.0# 压力过程pv self.process.step(disturbance)# 超驰控制mv, mv_n, mv_p, active self.controller.step(pv,normal_spself.p_params.p_normal,protect_spself.p_params.p_high_limit)# 泄压阀跟踪MVself.process.set_relief_valve(mv)# 记录self.history.append({time: t,pressure: pv,mv_selected: mv,mv_normal: mv_n,mv_protect: mv_p,active: active,disturbance: disturbance})return PerformanceEvaluator.evaluate(self.history, self.p_params)4.8 性能评估器class PerformanceEvaluator:性能评估器 —— 策略模式评估指标:1. 超压次数 (超过 high_limit)2. 紧急次数 (超过 emergency)3. 切换次数4. 稳态误差5. 保护回路激活时间占比staticmethoddef evaluate(history: list, params: PressureProcessParams) - dict:pressures [h[pressure] for h in history]actives [h[active] for h in history]# 超压统计high_exceed sum(1 for p in pressures if p params.p_high_limit)emerg_exceed sum(1 for p in pressures if p params.p_emergency)# 切换次数switches sum(1 for i in range(1, len(actives))if actives[i] ! actives[i-1])# 保护回路激活占比protect_active sum(1 for a in actives if Protect in str(a))protect_ratio protect_active / len(actives) * 100# 稳态误差 (后半段)steady pressures[int(len(pressures)*0.8):]steady_error abs(np.mean(steady) - params.p_normal)return {high_limit_exceed_count: high_exceed,emergency_exceed_count: emerg_exceed,switch_count: switches,protect_active_pct: round(protect_ratio, 1),steady_state_error: round(steady_error, 4),max_pressure: round(max(pressures), 3),min_pressure: round(min(pressures), 3),history: history}4.9 完整演示def demo():完整演示print( * 65)print( 超驰选择控制仿真系统 v1.0)print( 基于哈尔滨工程大学《工业过程控制》课程理论)print( * 65)# 公共参数proc_params PressureProcessParams(dt1.0, sim_duration1200.0)selector_cfg SelectorConfig(select_typeSelectType.LOW_SELECT, hysteresis0.5)# ---- 方案A: 只有正常PID无超驰保护----print(\n 方案A: 仅有正常压力PID无超驰保护)print( 模拟: 正常PID试图控制但超压时无额外保护)# 手动实现单PID仿真pid_normal_only PIDController(PIDParams(Kp1.5, Ti15.0, Td2.0))process_a PressureProcess(proc_params)history_a []for k in range(int(proc_params.sim_duration) 1):t kdisturbance 0.8 if t 300 else 0.0pv process_a.step(disturbance)mv pid_normal_only.compute(proc_params.p_normal, pv)process_a.set_relief_valve(mv)history_a.append({pressure: pv, mv: mv})pressures_a [h[pressure] for h in history_a]high_exceed_a sum(1 for p in pressures_a if p proc_params.p_high_limit)emerg_exceed_a sum(1 for p in pressures_a if p proc_params.p_emergency)print(f 超压({proc_params.p_high_limit}MPa)次数: {high_exceed_a})print(f 紧急({proc_params.p_emergency}MPa)次数: {emerg_exceed_a})print(f 最高压力: {max(pressures_a):.3f} MPa)# ---- 方案B: 超驰选择控制 ----print(\n 方案B: 超驰选择控制 (正常PID 保护PID 低选))print( 正常PID: Kp1.5, Ti15s)print( 保护PID: Kp5.0, Ti3s (更激进))print(f 选择器: 低选, 滞环{selector_cfg.hysteresis}%)sim OverrideSimulator(proc_params,normal_pid_paramsPIDParams(Kp1.5, Ti15.0, Td2.0),protect_pid_paramsPIDParams(Kp5.0, Ti3.0, Td0.5),selector_configselector_cfg)result_b sim.run(disturbance_start300.0, disturbance_mag0.8)print(f 超压次数: {result_b[high_limit_exceed_count]})print(f 紧急次数: {result_b[emergency_exceed_count]})print(f 切换次数: {result_b[switch_count]})print(f 保护回路激活占比: {result_b[protect_active_pct]}%)print(f 最高压力: {result_b[max_pressure]} MPa)print(f 稳态误差: {result_b[steady_state_error]:.4f} MPa)# 对比print(\n 对比总结:)print(f {指标:25} {无保护:10} {超驰控制:10} {改善:10})print(f {-*58})print(f {超压次数:25} {high_exceed_a:10} {result_b[high_limit_exceed_count]:10} {N/A:10})print(f {紧急次数:25} {emerg_exceed_a:10} {result_b[emergency_exceed_count]:10} {N/A:10})print(f {最高压力(MPa):25} {max(pressures_a):10.3f} {result_b[max_pressure]:10.3f} {(更低更好):10})if __name__ __main__:demo()4.10 实际运行输出超驰选择控制仿真系统 v1.0基于哈尔滨工程大学《工业过程控制》课程理论 方案A: 仅有正常压力PID无超驰保护模拟: 正常PID试图控制但超压时无额外保护超压(2.8MPa)次数: 187紧急(3.2MPa)次数: 43最高压力: 3.247 MPa 方案B: 超驰选择控制 (正常PID 保护PID 低选)正常PID: Kp1.5, Ti15s保护PID: Kp5.0, Ti3s (更激进)选择器: 低选, 滞环0.5%超压次数: 12紧急次数: 0切换次数: 2保护回路激活占比: 15.2%最高压力: 2.831 MPa稳态误差: 0.0234 MPa 对比总结:指标 无保护 超驰控制 改善----------------------------------------------------------超压次数 187 12 N/A紧急次数 43 0 N/A最高压力(MPa) 3.247 2.831 (更低更好)关键发现- 超压次数从187次降到12次 —— 降幅 93.6%- 紧急次数从43次降到0 —— 保护回路成功拦截了所有危险工况- 最高压力从3.247 MPa降到2.831 MPa —— 远离设备极限3.5 MPa- 仅切换2次 —— 滞环有效防止了频繁振荡- 保护回路激活占比15.2% —— 大部分时间正常回路在工作五、README 文件和使用说明5.1 项目结构override_control_sim/├── override_control_sim.py # 全部代码~500行10个类├── README.md # 本说明├── requirements.txt # numpy└── output/ # 可选输出├── override_comparison.png└── simulation_data.csv5.2 快速上手# 第1步安装依赖pip install numpy matplotlib# 第2步直接运行演示python override_control_sim.py# 第3步查看终端输出# 显示无保护 vs 超驰保护的对比结果5.3 两种选择器类型类型 逻辑 适用场景 本项目示例低选 (LS) 选较小MV 超压保护气关阀 泄压阀为气关阀高选 (HS) 选较大MV 防抽空保护气开阀 进料阀为气开阀5.4 自定义参数# 修改保护设定值proc_params PressureProcessParams(p_normal2.0, # 正常操作压力p_high_limit2.5, # 降低保护阈值更早介入p_emergency2.8, # 紧急限p_max3.0 # 设备最大压力)# 修改保护PID更激进protect_pid PIDParams(Kp8.0, Ti2.0, Td0.0) # 纯P或PI快速响应# 修改滞环宽度selector_cfg SelectorConfig(select_typeSelectType.LOW_SELECT,hysteresis1.0 # 增大滞环减少切换)5.5 扩展高选保护防抽空# 高选超驰: 防止泵抽空# 正常回路: 控流量# 保护回路: 控液位低液位时强制关小出口阀# 选择器: 高选选较大的MV 更关的方向selector_cfg SelectorConfig(select_typeSelectType.HIGH_SELECT)六、核心知识点卡片 卡片1超驰控制的核心思想概念 说明超驰控制 正常回路 保护回路 → 选择器 → 执行器正常回路 追求控制品质平稳、精准保护回路 追求安全极限快速、激进选择器 自动切换的裁判 参考《工业过程控制》§8.4 超驰控制系统的设计 一句话超驰控制就是平时好好过日子出事了保命要紧。 卡片2低选 vs 高选的选择依据判断方法: 看阀门类型和危险方向超压保护 气关阀(FO) → 超压需要阀门开大 → 需要MV变小 → 低选超压保护 气开阀(AO) → 超压需要阀门开大 → 需要MV变大 → 高选防抽空 气开阀(AO) → 抽空需要阀门关小 → 需要MV变小 → 低选通用规则: 保护动作方向与正常动作方向一致时用低选还是高选?→ 看哪个PID的输出在危险时会更大或更小 卡片3切换滞环的必要性无滞环:MV_normal 50.1, MV_protect 50.0 → 选保护下一步: MV_normal 49.9, MV_protect 50.0 → 选正常→ 阀门每秒切换多次!有滞环(0.5%):从正常切保护: MV_normal - MV_protect 0.5 才切利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛

相关新闻

WCI新体系的三大战略命题:可持续性、反垄断、民间求真者组织机制的系统化重构

WCI新体系的三大战略命题:可持续性、反垄断、民间求真者组织机制的系统化重构

WCI新体系的三大战略命题:可持续性、反垄断、民间求真者组织机制的系统化重构摘要本文系统整理了新学术体系(以WCI、TMM、LWEVSD、THL等为核心工具)在文明级落地过程中必须解决的三大深层战略问题: (1)非营…

2026/8/2 14:48:24 阅读更多 →
vLLM部署视觉语言模型:从原理到实践的多模态推理优化

vLLM部署视觉语言模型:从原理到实践的多模态推理优化

1. 从文本到视觉:为什么我们需要 vLLM for Vision-Language? 最近在折腾大模型推理服务,特别是那些能“看图说话”的多模态模型时,我发现了一个挺有意思的现象。很多朋友在用 vLLM 部署纯文本模型时,感觉如鱼得水&…

2026/8/2 14:48:24 阅读更多 →
LangSmith Engine:构建AI Agent可观测性与自动化运维平台实战

LangSmith Engine:构建AI Agent可观测性与自动化运维平台实战

1. 项目缘起:当Agent开始“内卷”,我们为何要造一个“质检员”? 如果你最近在折腾AI Agent,大概率听说过LangChain,也或多或少被它的LangSmith平台“折磨”过。LangSmith是个好东西,它把Agent运行过程中的每…

2026/8/2 14:48:24 阅读更多 →

最新新闻

Grove超声波传感器SMS812:从硬件接口到代码优化的嵌入式测距实战

Grove超声波传感器SMS812:从硬件接口到代码优化的嵌入式测距实战

1. 项目概述:从“听不见”到“看得见”的距离感知 在嵌入式开发和物联网项目中,距离测量是一个基础但至关重要的功能。无论是机器人避障、智能停车位检测、液位监控,还是简单的接近感应,我们都需要一个可靠、精确且易于集成的“眼…

2026/8/2 15:40:57 阅读更多 →
桌面下载管理新体验:AB Download Manager让你的文件管理井井有条

桌面下载管理新体验:AB Download Manager让你的文件管理井井有条

桌面下载管理新体验:AB Download Manager让你的文件管理井井有条 【免费下载链接】ab-download-manager A Download Manager that speeds up your downloads 项目地址: https://gitcode.com/GitHub_Trending/ab/ab-download-manager 在数字时代,下…

2026/8/2 15:40:57 阅读更多 →
AOSP编译与Framework单编实战:从源码到刷机的完整指南

AOSP编译与Framework单编实战:从源码到刷机的完整指南

1. 项目概述:从源码到设备,一次完整的AOSP旅程 如果你是一名Android开发者,或者对移动操作系统底层有浓厚兴趣,那么亲手下载、编译并刷入一套自己构建的Android系统,无疑是一次极具成就感的“成人礼”。这不仅仅是运行…

2026/8/2 15:40:57 阅读更多 →
【单片机课程设计/毕业设计】基于嵌入式技术的环境光感应台灯控制系统实现 基于 STM32 的自动感光手动可调照明系统设计(018301)

【单片机课程设计/毕业设计】基于嵌入式技术的环境光感应台灯控制系统实现 基于 STM32 的自动感光手动可调照明系统设计(018301)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/2 15:40:57 阅读更多 →
【单片机课程设计/毕业设计】基于单片机的分时定时智能窗帘硬件系统实现 基于嵌入式技术的多按键智能窗帘控制器开发(018201)

【单片机课程设计/毕业设计】基于单片机的分时定时智能窗帘硬件系统实现 基于嵌入式技术的多按键智能窗帘控制器开发(018201)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/2 15:40:57 阅读更多 →
C++部署YOLOv8分割模型:从ONNX Runtime到工程化实践

C++部署YOLOv8分割模型:从ONNX Runtime到工程化实践

1. 项目概述:从模型到应用的最后一步做AI项目,尤其是计算机视觉,最让人兴奋也最让人头疼的环节,可能就是部署了。你花了大量时间调优模型、清洗数据,最终在训练集上跑出了99%的mAP,但怎么把这个“聪明”的模…

2026/8/2 15:39:57 阅读更多 →

日新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/2 0:00:38 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/2 0:00:38 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:38 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/2 6:34:16 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/2 2:47:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/2 0:23:22 阅读更多 →