新闻详情

新闻详情

首页 / 资讯中心 / 详情

PLECS C-Script+PI控制器:从微分方程到闭环仿真

发布时间:2026/9/28 17:09:01来源:尧图网络
PLECS C-Script+PI控制器:从微分方程到闭环仿真
做电力电子仿真这些年我自己在PLECS里搭过的PI控制器少说也有几十种场景。一开始用自带的加法器、比例积分模块拼装图省事拼多了就烦信号名对不上、参数没法批量调、想加个积分限幅还得拖一堆模块。后来换成C-Script模块直接写PI控制器等于把微分方程和控制器设计这条线彻底打通了。这篇就来完整拆一遍怎么从被控对象的微分方程出发用PLECS的C-Script模块搭出一个干净的PI控制器闭环仿真模型顺便把编译、采样、积分限幅这些坑也一并说清楚。适合正在做电源、电机、储能仿真的朋友新手跟着复现也不是问题。1. 为什么要把PI控制器写进C-Script1.1 从微分方程到仿真落地的完整链条先说一个很多新手没想明白的点仿真模型到底在解什么其实PLECS仿真过程本质上就是在数值求解一组微分方程。你从库里拖出来的电感、电容、开关对应的是电路微分方程里的状态变量和拓扑约束你拖出来的控制器对应的是控制方程。传统做法里控制器解析表达式是在纸上写好然后到PLECS里去拼模块中间隔着一层翻译拼出来的结构和原始方程往往对不上。我见过不少同事搭控制器的时候比例项、积分项分着放然后又是一堆增益模块配成一堆改参数只能挨个点开模块去调。这种模型不是不能跑但耦合关系不清晰改一个参数很容易漏掉另一处。用C-Script模块写控制器状态方程长什么样、代码就长什么样模型和公式之间能直接对应。而且PLECS里数值求解器本身就在解微分方程你把控制器写成C代码它就作为被控对象微分方程右端项的一部分参与求解两者合在一起才是完整的闭环系统。1.2 C-Script模块到底解决了什么问题PLECS的C-Script模块本质上是在仿真主循环里插入一段用户自定义的C程序。它最大的价值是打破框图模块的边界让你可以把任意数学算法写进一个模块里。比如PI控制、谐振控制、滑模控制、状态观测器只要你写得出来就能放进仿真里。它的解决思路可以概括成三点。第一是参数集中化Kp、Ki、限幅值、采样时间全部通过模块参数传入调参就像调一个黑盒的旋钮不用再去模型里找到底哪个增益对应哪个模块。第二是逻辑表达自然积分限幅、防饱和补偿、绝对值的判断这些用C语言三五行就写清楚用框图模块搭要绕好大一圈。第三是可迁移性仿真里的C代码稍加适配就能移植到DSP或FPGA的代码框架里方便做后续的半实物验证。当然它也不是万能的。C-Script适合写控制算法不适合写需要在线改动拓扑结构的模型复杂的C代码写多了如果没做好模块划分一样会混乱。这个后面我会专门讲。1.3 用PLECS而不是Simulink来搭控制器这个选择我斟酌过很久最后在项目里选定PLECS核心原因是两个。一个是仿真速度PLECS对开关变换器做了高度优化自带理想开关电气模型同规模Buck电路模型PLECS往往比Simulink里搭同样的模型要快出不少。另一个是代码生成链路PLECS的C-Script语法和嵌入式C写起来很像你在仿真里验证的算法拿到DSP工程里改动很小而Simulink里如果用S-FunctionC MEX S-Function的写法比PLECS的C-Script复杂一些学习成本更高。对比维度PLECS C-ScriptSimulink S-Function搭建速度拖拽模块加写C代码链路短模板较多配置复杂电力电子元件库原生开关、磁件模型丰富依赖Simscape或第三方库离散控制实现代码直接执行直观需额外配置仿真目标工具成本需PLECS授权需MATLAB及额外工具箱授权这表格不是说Simulink不行而是就“快速验证电力电子控制器”这件事而言PLECS更顺手。如果你做的是大型多域系统需要和别的工具联动那Simulink生态可能更合适。工具选择本来就没有绝对答案关键是清楚自己的使用场景。2. 动手之前必须理清的原理2.1 从被控对象微分方程说起要写出一个像样的PI控制器首先要清楚被控对象是什么。我就拿最常见的Buck变换器举例子。忽略开关纹波后连续导通模式下的状态平均模型可以写成两个一阶微分方程di_L/dt (d * V_in - V_out) / LdV_out/dt (i_L - V_out / R) / C其中d是占空比V_in是输入电压V_out是输出电压i_L是电感电流R是负载电阻。这就是一组二阶微分方程。从它可以得到从控制量占空比d到输出量输出电压V_out的传递函数通常是一个带谐振峰的二阶环节。这些式子看着复杂但对理解控制器怎么设计帮助很大因为PI调节直接作用在这个对象上Kp、Ki的物理含义都是围绕这个对象来定的。许多教程会直接从传递函数开环Bode图切入然后让你去算PI参数。这么做没有问题但我建议至少把方程在纸上写一遍理解电感电流和电容电压如何交替更新。有了这个图景你到PLECS里搭电路的时候心里会踏实很多也知道为什么PI输出要接到PWM的调制信号上。工程里很多人做仿真做得很溜但问一句“你的控制器到底在对哪个对象起作用”就答不上来多半是没有回到微分方程这一步去想过。2.2 连续域PI表达与频域直觉在连续域PI控制器的传递函数是C(s) Kp Ki / s对应时域方程为u(t) Kp * e(t) Ki * ∫e(τ)dτ这个式子很好理解比例项负责快速响应误差大了立刻给出力积分项负责消除稳态误差把长期累积的误差变成持续调整量。所以调参的基本盘是Kp决定响应速度和稳定性裕度Ki决定低频增益和稳态精度。两个参数相互影响不能孤立调。频域直觉也很重要。积分项在低频提供的增益可以做到无穷大这样闭环稳态误差就趋近于零比例项则在整个频带内提供一定的相位裕度。电源控制里常说的带宽指的就是开环穿越频率。工程上一般把环路带宽取在开关频率的1/10到1/5比如50kHz开关频率带宽放到5kHz到10kHz是一个推荐范围。但这里还要压一压如果被控对象本身有LC谐振峰比如谐振频率只有1.6kHz那你把带宽放到5kHz很容易让系统在谐振频点附近震荡。所以实际取带宽要看被控对象的频响不能只盯开关频率。这个分寸靠经验更多过靠公式。2.3 离散化前向欧拉、后向欧拉与梯形法仿真模型最终要对应到数字控制器而数字控制器是基于离散时刻运算的所以必须把连续积分器离散化。常见的三种离散化方法前向欧拉x[n1] x[n] Ts * x_dot[n]后向欧拉x[n1] x[n] Ts * x_dot[n1]梯形法x[n1] x[n] 0.5 * Ts * (x_dot[n] x_dot[n1])前向欧拉实现最简单但是当采样频率不够高时可能不稳定后向欧拉与梯形法更稳梯形法精度最高。实际设计PI控制器时梯形法用得比较多因为积分环节用梯形法离散后相当于s域到z域的Tustin变换低频段的频响畸变很小。在C代码里我们事先声明一个static变量保存上一次误差然后每次step都做integral_acc Ts * (error error_prev) * 0.5;这正是梯形积分公式。与单纯累加error*Ts相比对斜坡输入的估计更准确环路不容易出现周期性误差抖动。如果你搞不清这三种方法也可以用PLECS自带的连续积分器模块先跑通再回头拆解C-Script代码。这里刻意强调三种方法的差异是因为很多奇怪的低频振荡和水波纹根源往往在离散化方法选得不对。2.4 采样时间的工程考量C-Script模块的采样时间Ts与开关频率必须匹配。我常用的两个经验值是控制器采样频率至少是开关频率的两倍实际上取5到10倍更稳采样时间最好是开关周期的整数分之一否则仿真中控制更新和PWM载波相位会逐渐错开产生类似差拍的成分。举个具体数字Buck开关频率50kHz周期20微秒。控制器采样时间如果取20微秒每个开关周期控制一次动态响应偏慢实现最简单取5微秒或10微秒控制更细腻计算负担也随之增加。工程上我最常用的是10微秒对应100kHz采样频率带宽放到几kHz都还有余量。在代码里这个Ts不仅要作为模块参数传入还必须和求解器的最大步长合理匹配否则控制器看起来在跑实际行为却和预期脱节。3. PLECS C-Script模块实操全流程3.1 添加模块并定义输入输出参数在PLECS的库浏览器里找到C-Script模块把它拖到画布上。双击打开编辑器你会看到几个区域Inputs、Outputs、Parameters、Constants和Code。下面是我自己的填写习惯。输入in[0]接电压参考值in[1]接实际反馈电压。 输出out[0]是PI调节器的输出也就是占空比命令。 参数par_kp、par_ki、par_imax、par_ts分别对应比例系数、积分系数、积分限幅和采样时间。这些名字可以自己定义但代码里的par_前缀是PLECS的固定约定用来引用模块参数。没有定义就引用会直接编译报错。我个人的习惯是参数名和实际控制器设计文档里的变量名保持一致这样后来接手的人看代码不懵。输入输出数量也要提前想好因为代码里访问in[1]之前模块对话框里必须定义了至少两个输入否则越界错误会在仿真跑到一半的时候才炸出来。3.2 完整C代码实现与逐段说明下面给出一段可以直接在C-Script模块里跑的PI控制器代码。这是我最常用的一套带梯形积分和积分限幅能应付绝大多数Buck、Boost、全桥场景。#include math.h static float integral_acc; static float error_prev; void init(void) { integral_acc 0.0f; error_prev 0.0f; } void step(void) { float error; float kp par_kp; float ki par_ki; float ts par_ts; float imax par_imax; error in[0] - in[1]; integral_acc (error error_prev) * 0.5f * ts; integral_acc fmaxf(-imax, fminf(imax, integral_acc)); out[0] kp * error ki * integral_acc; error_prev error; }init函数在整个仿真开始前调用一次作用是清零状态量。这一步很多人容易忽略特别是在同一个模型里反复修改参数重启仿真时残留的积分值会导致第一次输出跳变最直观的现象就是开机瞬间占空比猛冲一下。step函数在每次离散采样点被调用。注意这里用的是in[0]-in[1]对应参考值减反馈值。如果你把输入顺序接反了开始仿真后控制器输出会直接跑到某个极限值这是非常经典的手滑错误。积分限幅用了两次fmaxf/fminf如果觉得双层嵌套不直观可以自己写个clamp函数。限幅范围的选择等于设计者对积分器最大“记忆量”的控制过大会让超调变大过小会让稳态误差抬升一般先给满量程的20%到30%再根据波形微调。3.3 编译与求解器配置写好代码后在PLECS的模型工具里触发编译或者直接运行仿真PLECS会先自动编译。如果代码语法有问题编译窗口会给出错误信息修正后重新编译即可。编译通过后C-Script模块会变成一个带端口的自定义元件与普通模块一样参与仿真。这个“自动编译”的流程很顺滑但代价是代码写错时错误信息要耐心看因为它不一定能精确到C语言的哪一行。与控制器配套的是求解器配置。我通常将仿真类型设置为变步长最大步长给开关周期的1/10到1/20。比如50kHz的开关频率周期20微秒最大步长设1微秒到2微秒这样既能捕捉开关动作又不会因为步长过小而拖慢仿真。C-Script模块的采样时间在模块对话框里设为Ts10us和代码里的par_ts保持一致。注意这里参数要真实匹配否则代码里算积分用的采样周期和实际调用间隔就对不上了。3.4 调试小技巧加探针与打印中间量写C-Script最大的困扰是仿真里模块像黑盒出了问题不知道内部发生了什么。我的做法是在模块里临时增加额外的输出通道把积分项或者误差项引出来接到示波器上看。比如在out[1]输出integral_acc仿真结束后观察这个波形是否在限幅边界附近来回撞如果撞得很频繁说明Ki偏大或者限幅偏小。另一个思路是在代码里做本地累加计数比如统计积分项顶到限幅的次数再通过一个输出口发出来。这个信息比单纯看波形更直观。PLECS支持在C-Script里调用一些文件接口导出数据但那是比较重度的用法平时临时调试我更习惯直接加输出口加探针速度最快。等调试结束后再把临时输出口删掉保持模型整洁。4. 搭一个Buck闭环仿真验证控制器4.1 Buck电路的微分方程与PLECS电路搭建在PLECS里搭建Buck主电路大概只需要几分钟左侧放置直流电压源中间放一个理想开关和一个二极管右侧串联电感和电容电容两端并上负载电阻。再添加一个PWM发生器将控制器的输出作为调制波输入比较器就会产生对应的开关信号。然后从输出端拉一个电压表反馈到C-Script模块的in[1]参考值用一个Step信号源从12V跳到12.5V或者从10V跳到12V模拟指令变化。电路参数可以用之前提过的例子V_in12VL100uHC100uFR5Ω开关频率50kHz。这个Buck的LC谐振频率大概是1/(2π√(LC)) 1/(2π√(100e-6 * 100e-6)) 1.6kHz远低于开关频率符合平均模型成立的前提。PI环路带宽放在1kHz到2kHz之间比较稳妥既能保证响应速度又不会去激励那个1.6kHz的谐振峰。这些数字对新手来说直接照抄就能复现。4.2 闭环连接与PWM调制闭环回路的连接没有太多玄机参考值信号源接in[0]输出电压反馈接in[1]out[0]接到PWM调制模块的“调制度”输入。有一点要重点提醒out[0]输出的是占空比命令范围必须在0到1之间。如果控制器输出跑到负数或者超过1PWM模块的行为在PLECS里会有不同处理有些版本会直接限幅有些版本则可能导致比较结果异常所以最好在C代码里把输出也做一次限幅out[0] fmaxf(0.0f, fminf(1.0f, kp * error ki * integral_acc));这个习惯对实际项目有直接意义因为真实DSP里PWM模块的占空比寄存器本身也有上下限提前在仿真里把边界摸清楚后面做实物时才能少踩坑。4.3 参数整定我先P后I的经验顺序调参顺序上我强烈建议先P后I别一上来就带积分。第一步把Ki设成0Kp从小往大加。观察阶跃响应如果输出电压软绵绵、响应慢就继续加Kp如果出现明显振铃和振荡说明Kp过大。我一般从0.1开始每次翻倍看到波形从“拖泥带水”变成“有攻击性”但还没有明显振荡就停在那个量级附近。这个“有攻击性”的感觉很主观但多试几次就有手感了。第二步把Ki从很小的值开始加。比如先给500看稳态误差是否消除、响应是否有超调。如果稳态误差消不掉继续加Ki如果出现低频摆动就减Ki。同时注意积分限幅Ki很大而限幅很大时积分会积得飞快最容易产生大超调。第三步微调。给负载来一个突增或突减观察恢复时间。电源控制里系统能在几十到几百微秒内恢复到稳态就基本合格。这里没有万能公式最后都得在示波器波形上找感觉尤其是积分限幅的大小和负载范围强相关。4.4 波形结果怎么看仿真跑通后把输出电压波形、电感电流波形、控制器的积分项波形放在一起看。正常情况下启动阶段输出电压应单调上升没有明显过冲负载突变时电压先掉一块然后恢复恢复过程没有持续的振荡。我习惯看的三个指标超调量不超过5%到10%调节时间在几百微秒级稳态纹波符合设计预期。如果积分项在稳态时是一根平直的线说明控制器已经工作在线性区如果积分项在长时间内反复顶到限幅边界说明参数还有很大调整空间。另外一个容易忽略的点是看电感电流是否连续因为微分方程模型建立在连续导通模式上如果负载轻到进入断续模式控制对象特性会变化PI参数可能需要重新整定。5. 常见问题与排错实录5.1 编译报错类问题新手在C-Script模块里最容易踩的第一类坑就是编译不过。常见错误包括引用了没有定义的参数比如代码里写par_kp但模块Parameters区没有添加Kp变量类型没匹配PLECS的仿真环境对类型敏感有时候需要显式加float强转头文件缺失或函数名拼错。排查方法很直观看PLECS编译窗口的报错行号对应到代码里去看。我见过最多的情况就是参数名不一致因为代码里可以用任意前缀的变量名但PLECS只把par前缀参数作为模块参数没有定义却引用编译器马上就会告诉你。如果你把参数太多建议统一在模块Parameters区写清楚注释或者在代码顶部集中做一个声明段别零散地到处引用。5.2 仿真发散与积分饱和仿真发散一般有两类原因。一类是数值步长太大导致求解器在开关时刻附近没有足够分辨率表现为波形出现尖峰和NaN。解决办法是适当减小最大步长或者改用更小误差容限的求解器配置。我习惯把最大步长先减半看到波形恢复平滑再进一步收敛。另一类是积分饱和这是PI控制器特有的问题。当输出被限幅后积分项仍然持续累积等到误差反向时积分值还顶在极限上系统就会反应迟钝出现很大的超调。解决办法就是我前文代码里做的基本积分限幅。更高级一点的是条件积分法也就是只有当输出未饱和时才累加积分输出饱和时把积分冻结float u_pi kp * error ki * integral_acc; if (u_pi 1.0f || u_pi 0.0f) { /* 输出饱和积分器保持不变 */ } else { integral_acc (error error_prev) * 0.5f * ts; }这两种防饱和策略我都在实际项目里用过条件积分法在带负载突变时表现更稳推荐优先考虑。仿真阶段就把这个逻辑做成可切换的后续做实物时就不用再改结构。5.3 输出毛刺与采样不同步有时候仿真波形会在开关切换的时刻出现细小毛刺乍一看像数值问题其实是因为C-Script模块的采样点与PWM载波比较时刻没有对齐。这种情况下控制器更新的瞬间PWM比较器同时翻转开关噪声就会进入采样值。工程里常见的对策是把采样点放在PWM载波峰顶或谷底处也就是“中值采样”。PLECS里可以通过把控制器的采样时间设置为载波周期的一半来实现或者用触发模块在特定相位处触发C-Script的执行。如果只是出仿真波形毛刺不作为主要问题但要迁移到DSP里就必须重视采样相位否则实机表现会和仿真差很多。还有一个细节如果仿真里反馈信号直接取的是开关节点后的瞬时电压建议先加一个一阶低通或平均处理再接进控制器这样更接近实际采样电路拿到的信号控制器也不会对开关纹波太敏感。5.4 离散化引起的控制器相位滞后刚才我在2.3提到离散化方法这里用实际现象说得更具体。如果你把连续PI模块换成C-Script离散PI其他条件不变你会发现相位裕度会略变差闭环可能从稳定变成振荡。这是因为数字控制在采样时刻执行、在一个采样周期内保持输出相当于在回路里插入了半个采样周期的延迟。采样频率越低这个延迟占比越高相位滞后越明显。解决思路有两个一个是提高采样频率让延迟影响变小另一个是设计参数时预留相位裕度别把穿越频率卡得太靠近系统极限。仿真阶段把这两点做了后面做实物时才不会心慌。我遇到过一个案例连续模型里稳定得很离散化之后一直低频振荡最后发现是采样频率只比带宽高5倍相位裕度被吃掉太多提高到10倍之后问题消失。6. 从PI控制器向更复杂控制的扩展6.1 双向储能与LLC中的PI闭环PI控制器的应用远不止单机Buck。双向储能变换器通常有母线电压外环和电感电流内环两个PI环串在一起LLC全桥谐振变换器常用PFM方式但也可以通过输出电压误差经PI调节频率或移相角。这些场景的控制核心还是PI只是被控对象传递函数更复杂。比如LLC存在增益曲线非单调等问题需要加前馈或者切换到不同工作点。C-Script代码在这些场景里改动并不大大多是换输入输出定义、换参数初值、增加模式判断。我记得做双向储能那个项目时就是把单向Buck的PI代码扩展成了双向模式加一个电流方向判断再增加一组负向限幅参数代码量只多了十行左右但功能上完全够用。这种“一套骨架多处复用”的感觉是C-Script模块最容易带来的价值。6.2 在C-Script里实现PR、谐振与前馈用C-Script写PI时你其实已经掌握了写任何线性控制器的方法写出控制律的时域方程离散化转成递推代码。做单相逆变器时常用的比例谐振控制器PR传递函数里有谐振项把它离散化后放进C-Script同样很自然。三相电机控制里的电流PI、锁相环、坐标变换也完全可以全部塞进一个C-Script模块里让模型外观保持整洁运算逻辑集中在一个地方。我的建议是不要为了秀操作而把所有算法塞进一个巨大的step函数里而是按功能拆成几个小函数比如clark_transform、park_transform、current_pi、pll_update这样调试时可以利用PLECS的断点或者逐步跟踪一眼看出是坐标变换写错还是PI参数不合适。到了这一步你已经不是在“搭PI控制器”而是在用C语言快速实现控制算法的原型。6.3 后续可以走的方向代码生成与半实物PLECS的一个重要优势在于它的C-Script模块和代码生成功能配合可以直接生成面向嵌入式平台的控制代码。仿真阶段调好的参数和逻辑生成C代码后几乎原样搬到DSP里调试。更进一步的是把控制器放在外部硬件上运行用半实物仿真检验跟真实功率级的接口时序。这条路我从电源项目里走过效果比较理想也是PLECS在复杂场景下真正值回票价的地方。仿真和实物的差异主要出现在采样时序、接口量化、驱动死区这些细节上而这些恰恰可以在半实物仿真里提前暴露出来。我建议在仿真阶段就尽量把C-Script代码写成“可生成”的风格避免用平台相关的库函数多用标准C的数学函数这样后续无论是做代码生成还是在DSP里重写成本都很低。说实话C-Script写PI控制器这件事难度不在于C语言本身而在于把控制系统背后的微分方程、离散化、采样时间这些概念理清楚。我自己在几个项目里踩过不少次坑最大的体会是代码越简洁越容易调试参数尽量集中到模块顶部积分限幅和输出限幅一定不要省。你只要把这一套框架跑通后面无论遇到Buck、Boost还是LLC、储能系统控制器代码的骨架都不会变变的只是参数和那几行定义被控对象的微分方程而已。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Stable Diffusion+ComfyUI+OpenClaw AI漫剧量产:结构化Prompt与负面词脱敏配置全方案 2026/9/28 18:38:23

Stable Diffusion+ComfyUI+OpenClaw AI漫剧量产:结构化Prompt与负面词脱敏配置全方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Android Studio 安装 Continue 插件:TaoToken 统一 Key 接入与 config.toml 配置骨架 2026/9/28 18:38:23

Android Studio 安装 Continue 插件:TaoToken 统一 Key 接入与 config.toml 配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Jev模型:AI结构化决策框架的实践指南 2026/9/28 18:38:23

Jev模型:AI结构化决策框架的实践指南

最近好几个做AI应用的朋友都来问我同一个问题:Jev模型到底是个什么东西?TypeSafe AI 搞的这个结构化决策模型,是不是又是提了个新词来包装旧方案?这个问题问得多了,我干脆把我在项目里实践这套模型的理解、踩过的坑和一…

阅读更多 →
Jev决策引擎:从架构拆解到生产落地完整指南 2026/9/28 18:38:23

Jev决策引擎:从架构拆解到生产落地完整指南

1. 先搞清楚定位:Jev 到底解决的是哪一类决策问题这两年大模型圈子里冒出来一个尴尬的现象:模型参数越堆越大,Demo 越做越炫,但真正敢把模型放到生产环境里做决策的系统,掰着手指头都能数过来。大多数团队把 LLM 接进来…

阅读更多 →
Android 联系人及群组数据库操作:用 TaoToken 统一 Key 打通 AI 辅助开发配置 2026/9/28 18:38:16

Android 联系人及群组数据库操作:用 TaoToken 统一 Key 打通 AI 辅助开发配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
用Codex做自媒体,这10个Skill一定要用上!附TaoToken统一Key配置 2026/9/28 18:38:16

用Codex做自媒体,这10个Skill一定要用上!附TaoToken统一Key配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉