Proteus: Computing Disjunctive Loop Summary via Path Dependency Analysis 通过路径依赖分析计算析取形式的循环总结

【AI方案集】AI与人机协作相结合的智能法律咨询系统.docx AI技术方案以算力、算法、数据三角协同为核心,通过搭建标准化的数据预处理、模型训练与边缘云端协同部署流程,将计算机视觉、自然语言处理、机器学习等核心能力深度融入业务场景,既实现自动化流程降本提效,又通过精准的模式识别与预测分析为管理层提供数据驱动的决策支撑,最终完成从通用AI技术到行业定制化场景的适配落地,为企业数字化转型提供可落地的技术路径。 立即下载

摘要

对于程序分析来说,循环是非常难以处理的结构,特别是多种路径相互交错的复杂循环。
文章首先基于在循环条件中的变量的更新和循环路径的执行顺序对多路径的循环进行分类,进而来理解循环的复杂性。
之后,文章提出分析框架Proteus。该框架把循环和我们感兴趣的变量集合作为输入,然后通过分析,可以得到关于这些变量经过循环之后的变化情况的摘要。

文章主要的贡献是利用路径依赖自动机(path dependency automaton, PDA)来捕获路径之间的执行依赖。然后利用DFS遍历PDA来对所有可行的执行路径的影响进行摘要。

实验结果说明Proteus在三个方面有非常重大的应用:

  • 能分析出比现有的循环边界分析技术更精确的循环边界
  • 显著优于最先进的循环验证工具
  • 在1秒钟内对非常深的循环产生测试样例,KLEE或者Pex面对这样的循环时可能会花费更多时间或者失败。

概览

相关定义

循环的流图,flowgraph of the loop

是一个元组:G=(V,E,vs,vt,ve,l)G=(V,E,v_s,v_t,v_e,l)G=(V,E,vs​,vt​,ve​,l)

  • V:节点的集合
  • E:V × V是一个边的集合,链接两个顶点
  • 顶点vs,vt∈Vv_s, v_t \in Vvs​,vt​∈V,是两个虚拟的节点,用来表示每次循环开始时的开始节点和结束节点
  • vev_eve​是一个虚拟节点,代表退出循环
  • lll是一个函数,为每一条边e∈Ee\in Ee∈E分配一个指令l(e)l(e)l(e)

如果一个节点的出度是2,并且在这两条边上的指令是布尔条件,那么我们称这个节点为分支节点。

循环路径,loop path

GGG中的一条循环路径π\piπ是一个有限的节点序列<v1v2⋯vk>\lt v_1 v_2 \cdots v_k\gt<v1​v2​⋯vk​>,其中k≥1k \ge 1k≥1, (vi,vi+1)∈E,1≤i<k,v1=vs(v_i,v_{i+1}) \in E, 1\le i < k, v_1 = v_s(vi​,vi+1​)∈E,1≤i<k,v1​=vs​并且vk∈{vt,ve}v_k \in \lbrace v_t, v_e \rbracevk​∈{vt​,ve​}。
一个路径被叫做迭代路径(iterative path),如果vk=vrv_k=v_rvk​=vr​。
θπ\theta_\piθπ​表示路径π\piπ的条件,实际上是该路径到达该点之前,所有边上的分支条件的合取。
给定流图G,用ΠG\Pi _GΠG​来表示G中所有边的集合

归纳变量,induction variable

给定流图G,一个变量x被称为归纳变量,如果∀π∈ΠG\forall \pi \in \Pi_G∀π∈ΠG​,对于路径π\piπ的任意的ith,jthi^{th},j^{th}ith,jth次迭代,有Δπix=Δπjx\Delta^{i}_\pi x =\Delta_{\pi}^jxΔπi​x=Δπj​x,否则,我们就称x是非归纳变量。

条件分类

每一条路径的条件都可以被转换成E∼0E \sim 0E∼0。这里EEE是一个表达式,∼∈{<,≤,>,≥,=}\sim \in \lbrace <, \le, >, \ge, =\rbrace∼∈{<,≤,>,≥,=}。

  • IV Condition。如果E是一个归纳变量,那么这是一个IV体哦阿健
  • NIV Condition。如果E不是一个归纳变量

循环执行,loop execution

给定流图G和前置条件,循环执行ρG\rho_GρG​是一个路径序列<π1,π2,⋯ ,πi,⋯>\lt \pi_1, \pi_2,\cdots,\pi_i, \cdots\gt<π1​,π2​,⋯,πi​,⋯>,且∀i≥1,πi∈ΠG\forall i \ge 1, \pi_i \in \Pi_G∀i≥1,πi​∈ΠG​。

  • 我们用πi…∗πj\pi_i \ldots * \pi_jπi​…∗πj​表示在ρG\rho_GρG​中从πi\pi_iπi​到πj\pi_jπj​的部分。
  • 我们使用循环执行(loop execution)的概念去定义路径间交互的模式。循环的前置条件说明了在进入循环前,变量的所满足的一些约束。在不同的前置条件下,循环可能会有不同的执行。
  • 如果存在i≠ji \neq ji​=j,πi→∗πj→∗πi\pi_i \rightarrow * \pi_j \rightarrow * \pi_iπi​→∗πj​→∗πi​是ρG\rho_GρG​的自己,那么ρG\rho_GρG​包含了一个环
    • 这个环是**周期的(periodic)**如果执行有类似于<πki,⋯ ,πkj,⋯>+\lt \pi^{k_i},\cdots,\pi^{k_j},\cdots \gt^+<πki​,⋯,πkj​,⋯>+(循环周期是<πki,⋯ ,πkj,⋯>\lt \pi^{k_i},\cdots,\pi^{k_j},\cdots \gt<πki​,⋯,πkj​,⋯>)这里kik_iki​和kjk_jkj​是常量值,表示πi\pi_iπi​和πj\pi_jπj​的执行次数
  • 给定循环流图G,我们可以将循环执行ρG\rho_GρG​分成三种类型:
    • 序列执行(Sequential Execution)。如果ρG\rho_GρG​不包含任何环,他是序列执行
    • 周期执行(Periodic Execution)。如果ρG\rho_GρG​中的所有环都是周期的,那么他是周期执行。
    • 不规律执行(Irregular Execution)。如果一个循环执行既不是周期的又不是序列的,那么我们把他叫做不规律的执行。这种情况下,循环包括环,但是路径之间相互作用的模式不能被静态的决定,所以,我们不能很容易的知道每条路径的循环次数。

循环分类,Loop classification

循环可以进行如下分类:

IV condition(∀\forall∀)NIV condition(∃\exists∃)
SequentialType 1Type3
PeriodicType1Type3
IrregularType2Type4

Path Dependency Automaton

Path dependency automaton(PDA)是一个4元组M=(S, init, accept ,↪)M=(S, \text { init, accept }, \hookrightarrow)M=(S, init, accept ,↪)

  • S是一个有限的状态(state)集合,其中每一个元素都代表了ΠG\Pi_GΠG​中的一条路径。每个状态是一个三元组(πs,θs,ΔsX)(\pi_s,\theta_s,\Delta_sX)(πs​,θs​,Δs​X),其中πs∈ΠG\pi_s \in \Pi_Gπs​∈ΠG​代表了对应的路径,θs\theta_sθs​是πs\pi_sπs​的路径条件,ΔsX\Delta_sXΔs​X代表所有归纳变量在执行完一次πs\pi_sπs​之后数值变化情况的集合。

  • init⊆Sinit \subseteq Sinit⊆S是一个初始状态的集合。

  • accept⊆Saccept \subseteq Saccept⊆S是accepting state的集合,他们没有后继节点。一个accepting state被叫做exit state,如果他表示一条退出路径;被叫做terminal state如果代表了一条迭代路径。

  • ↪⊆S×S\hookrightarrow \subseteq S\times S↪⊆S×S是有限的状态转换的集合。我们使用si↪sjs_i \hookrightarrow s_jsi​↪sj​来表示变换(si,sj)⊆↪(s_i,s_j) \subseteq \hookrightarrow(si​,sj​)⊆↪,并且引入一个变量kijk_{ij}kij​来作为状态计数(state counter),用来表示kijk_{ij}kij​次执行sis_isi​之后,可以从sis_isi​转换到sjs_jsj​。
    形如si↪sjs_i \hookrightarrow s_jsi​↪sj​的转换都会有一个三元组的转移谓词作为注释(ϕij,ψij,Uij)(\phi_{ij}, \psi_{ij},U_{ij})(ϕij​,ψij​,Uij​)。其中:

    • ϕij\phi_{ij}ϕij​是关于kijk_{ij}kij​的约束
    • ψij\psi_{ij}ψij​是guard condition,当si↪sjs_i \hookrightarrow s_jsi​↪sj​将被触发时将被满足。

    这里ϕij,ψij都时变量在进入\phi_{ij}, \psi_{ij}都时变量在进入ϕij​,ψij​都时变量在进入s_i$之前的条件, UijU_{ij}Uij​是计算X′X'X′的函数,X′X'X′表示变量XXX在执行kijk_{ij}kij​次状态sis_isi​后的值。也就是说,X′=Uij(X,kij)X'=U_{ij}(X,k_{ij})X′=Uij​(X,kij​)。

在这里插入图片描述
对于上面的例子,(b)中展示的就是从程序生成的PDA。在这个PDA中:
S={s1.s2,s3}S=\lbrace s_1.s_2,s_3 \rbraceS={s1​.s2​,s3​},代表图中的三条路径。
init={s1,s2,s3}init=\lbrace s_1, s_2, s_3 \rbraceinit={s1​,s2​,s3​}代表了初始的状态(标记为红色),并且accept={s3}accept=\lbrace s_3 \rbraceaccept={s3​}代表了退出循环的一条路径。
对于s1s_1s1​,它代表路径π1\pi_1π1​,并且路径条件θs1\theta_{s_1}θs1​​是x<n∧z>xx<n \wedge z > xx<n∧z>x。
变量经过π1\pi_1π1​之后的变化Δs1{x,z,n}={1,0,0}\Delta_{s_1} \lbrace x,z,n\rbrace=\lbrace 1,0,0\rbraceΔs1​​{x,z,n}={1,0,0}(这里忽略了经过迭代之后不会变化的变量)。
转换上面的表格表示了转换的谓词。对于转换s1↪s2s_1 \hookrightarrow s_2s1​↪s2​,它表明执行k12k_{12}k12​次s1s_1s1​后,状态将变成s2s_2s2​。
第一行表明了对k12k_{12}k12​的约束,第二行是guard condition ϕ12\phi_{12}ϕ12​,z<nz<nz<n表明当z<nz<nz<n满足时,s1s_1s1​将在执行了k12k_{12}k12​次之后,转换为s2s_2s2​。
方程U12U_{12}U12​为{x′.z′,n′}={z,z,n}\lbrace x'.z',n' \rbrace=\lbrace z,z,n \rbrace{x′.z′,n′}={z,z,n},表明执行之后,x,z,n分别编程类z,z和n。这里表格中的变量x,n,z不是循环前的初始值,而是表示执行转换的源状态之前的值。

PDA构建算法

在这里插入图片描述
继续使用例子:
在这里插入图片描述
考虑转换s1↪s2s_1 \hookrightarrow s_2s1​↪s2​。让k12k_{12}k12​为变量计数,第k12−1k_{12}-1k12​−1和第k12k_{12}k12​次执行π1\pi_1π1​时,变量的状态分别是Xk12−1′:{x′=x+k12−1,n′=n,z′=z}X'_{k_{12}-1}:\lbrace x'=x+k_{12} - 1,n'=n,z'=z\rbraceXk12​−1′​:{x′=x+k12​−1,n′=n,z′=z},Xk12′:{x′=x+k12,n′=n,z′=z}X'_{k_{12}}:\lbrace x'=x+k_{12},n'=n,z'=z\rbraceXk12​′​:{x′=x+k12​,n′=n,z′=z}。接下来,我们将两个路径条件θs1\theta_{s_1}θs1​​和θs2\theta_{s_2}θs2​​中的XXX分别用Xk12−1′,Xk12′X'_{k_{12}-1},X'_{k_{12}}Xk12​−1′​,Xk12​′​进行替换,之后再进行合取,可以得到cond为:
(x+k12−1<n)∧(z>x+k12−1)∧(x+k12<n)∧(z≤x+k12)(x+k_{12}-1<n) \wedge (z>x+k_{12} - 1) \wedge (x + k_{12}<n) \wedge (z \le x + k_{12})(x+k12​−1<n)∧(z>x+k12​−1)∧(x+k12​<n)∧(z≤x+k12​)
经过不等式化简之后,我们可以得到:
ϕij:z−x≤k12<z−x+1\phi_{ij}:z-x\le k_{12} < z - x + 1ϕij​:z−x≤k12​<z−x+1
利用这个信息,可以进一步得到简化的cond:
z<n(φ12)z<n(\varphi_{12})z<n(φ12​)
更新方程U12U_{12}U12​为:
{x′,n′,z′}={x+1×k12,n+0×k12,z+0×k12}={z,n,z}\lbrace x',n',z'\rbrace=\lbrace x+1\times k_{12},n+0\times k_{12},z+0 \times k_{12}\rbrace=\lbrace z,n,z \rbrace{x′,n′,z′}={x+1×k12​,n+0×k12​,z+0×k12​}={z,n,z}
同理,可以得到φ21=x<n\varphi_{21}=x<nφ21​=x<n对于转换s2↪s1s_2 \hookrightarrow s_1s2​↪s1​,并且φ21\varphi_{21}φ21​可以被简化为truetruetrue因为θs2\theta_{s_2}θs2​​蕴含x<nx<nx<n。

分离形式的循环摘要

DLS

给定PDA M,和一些归纳变量X某一条trace τ∈M\tau \in Mτ∈M的摘要可以被表示为(tcτ,Xτ)(t_{c_{\tau}},X_{\tau})(tcτ​​,Xτ​)。这里:

  • tcτt_{c_{\tau}}tcτ​​是当trace τ\tauτ有效时需要满足的条件
  • XτX_{\tau}Xτ​是在执行完这条trace之后,变量的值

M的循环摘要SMS_MSM​为∪τ∈EM{(tcτ,Xτ)}\cup_{\tau \in E_{M}} \lbrace(t_{c_{\tau}},X_{\tau})\rbrace∪τ∈EM​​{(tcτ​​,Xτ​)},即将所有trace的摘要进行union。

对Type 1型循环的摘要

在这里插入图片描述
算法2是对Type 1型循环做摘要的更细节的程序。
使用循环M的PDA作为输入,在进入循环前的前置条件,并且返回摘要SMS_MSM​。
设X为归纳变量,包含了我们感兴趣的变量,rec是记录当前trace(从初始状态到现在状态)的摘要的map。
算法2对每个初始状态进行遍历,并且对初始状态开始的所有有效的trace做摘要。

算法3使用深度优先搜索来总结每个trace重的每一个转换,直到它到达accepting state。输入时当前的状态sis_isi​,当前的trace在DFS到达当前状态之前的条件τC\tau_CτC​,和变量的值X′X'X′在之前的循环摘要中,以及摘要map rec。
如果sis_isi​在rec中存在,那么说明存在环,我们要通过周期对其进行摘要。如果sis_isi​是accepting state,那么对一条trace的摘要就完成了。
如果accepting state是退出状态,兵团且tCt_CtC​满足当前路径的条件,那么X′X'X′会在最后被更新为ΔsiX′\Delta_{s_{i}}X'Δsi​​X′。如果sis_isi​是终止状态,那么当前的trace代表无限的执行。所以X′X'X′会被更新为Δsi∞X′\Delta_{s_i}^{\infty}X'Δsi​∞​X′。实现时,文章用了符号无限值(symbolic infinite value)去代表无穷的更新。

另一方面,如果sis_isi​不是accepting state,那么算法会继续对sis_isi​和他的后继进行摘要。程序会检查当前状态能否转化成它的后续状态,如果可以,那么就进行更新。

PDAinfo
在这里插入图片描述从初始状态s3s_3s3​开始,程序退出,变量没有变化,所以trace s3s_3s3​的摘要是(x≥n,x′=x∧z′=z∧n′=n)(x\ge n,x'=x\wedge z'=z \wedge n'=n)(x≥n,x′=x∧z′=z∧n′=n);从初始状态s1s_1s1​开始,初始条件是x<n∧z>xx<n\wedge z>xx<n∧z>x,如果处理后继s3s_3s3​,那么trace condition变成x<n∧z>x∧z≥nx<n\wedge z>x \wedge z \ge nx<n∧z>x∧z≥n,化简为x<n≤zx<n\le zx<n≤z.变量被更新为{x′=n∧z′=z∧n′=n}\lbrace x'=n \wedge z'=z \wedge n' = n \rbrace{x′=n∧z′=z∧n′=n}所以,s1↪s3s_1 \hookrightarrow s_3s1​↪s3​的摘要为(x<n≤z,k13=n=x∧x′=n∧z′=z∧n′=n)(x<n\le z, k_{13}=n=x \wedge x'=n \wedge z'=z \wedge n' = n)(x<n≤z,k13​=n=x∧x′=n∧z′=z∧n′=n)

环型摘要

在这里插入图片描述

多重相互链接的环如(a)被视为irregular execution。对于(b)这种有周期的环,实际执行路径如©所示。执行包括两部分

  • k(≥0)k(\ge0)k(≥0)次执行整个环
  • 一次执行剩余的部分,蓝色部分
    红色部分会被抽象成一个状态,它的执行表示kl,⋯ ,kj,⋯ ,kik_l,\cdots,k_j,\cdots,k_ikl​,⋯,kj​,⋯,ki​次执行状态sl,⋯ ,sj,sis_l,\cdots,s_j,s_isl​,⋯,sj​,si​
PDAsummary
在这里插入图片描述在这里插入图片描述

从第三行,我们可以得到k12=k21=1k_{12}=k_{21}=1k12​=k21​=1,并且s1s_1s1​已经出现过。所以我们找到了一个环。下面是对该状态进行缩点之后的结果。将循环变成s0s_0s0​。
在这里插入图片描述

最后我们可以得到s1↪(s2↪s1)+↪s3s_1 \hookrightarrow ( s_2 \hookrightarrow s_1)^+\hookrightarrow s_3s1​↪(s2​↪s1​)+↪s3​的摘要是:
x<z<n,k12=z−x∧k03=n−z∧x′=n∧z′=n∧n′=nx<z<n,k_{12}=z-x \wedge k_{03}=n-z \wedge x'=n \wedge z'=n \wedge n'= nx<z<n,k12​=z−x∧k03​=n−z∧x′=n∧z′=n∧n′=n

对Type 2,3,4类型的摘要

对这些类型提供一些近似方法,使得在某些情况下仍然有效。

NIV Condition

  • 如果条件中的变量单调递增或者递减,并且我们只关心路径依赖(例如,在循环边界分析或者终止性分析中),我们将数值的变化都变成加1或者减1。这种近似可以让变量变成一个归纳变量,这样摘要可以用来获得一些安全的结果。

    例如程序:
    在这里插入图片描述
    i永远是递增的,如果我们想找到这个循环的边界,我们将i每次都增加1,这样我们可以得到bound LINT,并且这是一个safe 的bound。

  • 一些NIV条件来自于数据结构的遍历,这非常难以进行摘要。在边界分析中,文章采用了基于模式的方法来解决这一类问题中的一部分。

    例如将

     for(;li! = null;li = li ->next)
    

    转换为:

    for(;li < size(li);li++)
    
  • 对于基于输入的NIV条件,他们总是可以满足任何迭代,因为他们的值基于输入或者上下文而不是循环的执行,所以我们将他们抽象成true。

    例如将

     assume(i > 0); while(i >= 0&&v[i] > key) i−−; 
    

    由于v[i]>key是一个NIV条件,我们将其转换为true,可以得到:

    assume(i > 0); while(i >= 0&&true) i−−; 
    

    这样对于路径π1:{}\pi_1:\lbrace \rbraceπ1​:{}
    我们可以都得到:
    这时候,结果仍然是精确的,但是当数据结构在循环之间或循环内更新的时候,可能会导致错误。

  • 对于Irregular执行,相互作用的模式非常难以决定,所以不考虑任何两条路径之间的相互作用,而是考虑循环整体的影响。对每一条路径πi\pi_iπi​引入一个计数变量kik_iki​,用来计算归纳变量在kik_iki​次执行之后的值。
    直觉上,假设πi\pi_iπi​可以转移到exit path,那么∀j≠i\forall j \ne i∀j​=i,在迭代kjk_jkj​次πj\pi_jπj​和ki−1k_i - 1ki​−1次πi\pi_iπi​之后,恰好满足退出的条件;在迭代kjk_jkj​次πj\pi_jπj​和kik_iki​次πi\pi_iπi​之后,将不能满足退出条件。

    对于程序:
    在这里插入图片描述
    这个例子有随你挑不规则的执行。我们引入k1,k2,k3k_1,k_2,k_3k1​,k2​,k3​表示他们的执行次数。
    变量经过循环之后可以被表示为x1′=x1−k1,x2′=x2−k2,x3′=x3−k3x'_1=x_1- k_1,x'_2=x_2-k_2,x'_3=x_3-k_3x1′​=x1​−k1​,x2′​=x2​−k2​,x3′​=x3​−k3​
    对于能够到达exit path的π1\pi_1π1​,假设k1−1k_1-1k1​−1次执行能满足退出路径的条件,k1k_1k1​次不满足,那么我们可以得到:
    x1′−(k1−1)>0∧x2′>0∧x3′>0∧x1′≤0∧x2′>0∧x3′>0x'_1-(k_1-1)>0 \wedge x'_2>0 \wedge x'_3>0 \wedge x'_1 \le 0 \wedge x'_2 >0 \wedge x'_3 > 0x1′​−(k1​−1)>0∧x2′​>0∧x3′​>0∧x1′​≤0∧x2′​>0∧x3′​>0
    这样我们可以得到x1′=0∧x2′>0∧x3′>0x'_1=0 \wedge x'_2 >0 \wedge x'_3>0x1′​=0∧x2′​>0∧x3′​>0
    同样的,如果最后一次执行是π2\pi_2π2​或者π3\pi_3π3​,那么可以得到x2′=0x'_2=0x2′​=0或者x3′=0x'_3=0x3′​=0。
    这个摘要可以被用来验证循环结束之后的性质。

讨论

精度

对于Type 1的摘要是精确的。对其他类型是不精确的,因为引入了不归纳的变量,然而在某些应用下,仍然是精确的。

限制

文章主要关注Type 1的摘要。对于非归纳变量的摘要不能很好的处理。

评估

实验的目标是:

  • 了解不同类型的循环在真实世界中的分布
    在这里插入图片描述

  • 证明在实际应用中的准确度和效果。

    • loop bound analysis 在这里插入图片描述

    • program verification
      在这里插入图片描述

    • Test Case Generation
      在这里插入图片描述

结论

提出了多路径循环的分类,类了解循环的复杂性。基于分类,构建了路径依赖自动机,和循环分析架构来对不同类型的循环产生摘要。

Automatic Loop Summarization via Path Dependency Analysis 立即下载

相关推荐

picture again

picture again

Proteus 8 Professional 仿真流水灯以及数码管显示数字

实验环境 windows10 Proteus 8 Professional 需要安装包的可以看一下一下文章: https://blog.youkuaiyun.com/liz_lalala/article/details/106128441 实现功能 流水灯(LED):当开关全开时从左向右进行流水灯,当开关全闭合时从右向左进行流水灯 数码管(7SEG-COM-CAT-BLUE):当只打开一个灯时显示该灯的位置,当打开多个灯时显示数字0 仿真整体图 仿真文件及代码: 链接:https://pan.baidu.com/s/1

做个废材继续可爱的博客 1万+

计算机二级通关宝典1计算机二级通关宝典

计算机二级通关宝典1计算机二级通关宝典

【51单片机】基于proteus的流水灯实验(汇编语言)

实验要求 利用proteus实现流水灯实验的仿真,要求每次只点亮一个灯,来回循环显示。 电路连接 元件清单 80C52、LED-BIBY、电阻res 实验代码 org 00h main: mov a,#7fh loop: mov r0,#8h loop1: rl a mov p0,a acall delay djnz r0,loop1 mov r0,#7h mov a,#07fh loop2: rr a mov p0,a .

qq_45639829的博客 3380

MobaXterm终端工具个人学习版安装包及常用配置备份

资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

Proteus使用指南

【Proteus】—{使用指南}—{快捷键}一、快捷键二、proteus元件库对照表1.Analog Ics2.Capacitors:3 .CMOS 4000 series4.Connectors 接头5.Data Converters 数据转化器6.Debugging TOOls 调试工具7.Diodes 二极管8.Inductors 电感9.Laplace Primitives 拉普拉斯模型10.Memory ICs 存储器芯片(包括常用的I2C,SPI芯片)杂项(Miscellaneous)无子类无子

#法外狂徒张三的博客 5736

科技中介服务机构如何借助平台提升技术撮合服务的专业性与响应速度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

angular 指定components的路径_通过路径相关性分析自动进行循环汇总

引用:X. Xie, B. Chen, L. Zou, Y. Liu, W. Le and X. Li, "Automatic Loop Summarization via Path Dependency Analysis," in IEEE Transactions on Software Engineering, vol. 45, no. 6, pp. 537-557, 1 June 2019...

weixin_39882589的博客 194

产业园区如何利用AI技术提升科技成果转化服务的响应速度与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

11232131231231是的

11232131231231是的

Proteus 暂态分析 transient analysis 帮助文档翻译

全文使用百度翻译 看到工程模板中的一副暂态分析图,开始了暂态分析的学习 文档位置 暂态分析 ANALOG TRANSIENT ANALYSIS(模拟暂态分析) DIGITAL TRANSIENT ANALYSIS(数字暂态分析) MIXED MODE TRANSIENT ANALYSIS(混合模式暂态分析) ANALOG TRANSIENT ANALYSIS(模拟暂态分析) 概述 此...

weixin_46180926的博客 3059

基于双向Buck-Boost电路的锂电池储能充电+放电控制Simulink仿真

内容概要:本文档详细介绍了一种基于双向Buck-Boost电路的锂电池储能系统充放电控制的Simulink仿真模型,重点实现了充电与放电过程中双向能量流动的精确控制。通过Simulink平台构建完整的电路拓扑与控制系统,采用电压、电流双闭环控制策略,有效提升了系统的稳定性与能量转换效率。文档不仅提供了详细的仿真建模方法,还结合参考文献增强了理论支撑,具有较高的科研与工程应用价值。此外,文中列举了大量电力电子领域的相关仿真资源,涵盖LLC谐振变换器、PFC电路、PWM整流器、状态估计等多种技术方向,形成了一个综合性强、覆盖面广的技术资料库,便于研究人员拓展学习和复用设计。; 适合人群:电气工程、自动化、新能源等相关专业的研究生、科研人员及从事电力电子系统设计的工程师。; 使用场景及目标:①研究锂电池储能系统的双向能量管理与高效充放电控制策略;②掌握基于Simulink的电力电子系统建模与闭环控制器设计方法;③为科研项目、毕业设计或工程开发提供可复现的仿真案例与技术支持。; 阅读建议:建议结合文档中提供的参考文献与外部资源链接,系统性地学习Buck-Boost电路的工作原理与控制理论,优先理解基础拓扑运行机制后再深入双闭环控制策略的设计与参数整定,同时可参照同系列其他仿真案例进行对比分析与拓展实践。

分支结构和循环结构总结(经典案例解析)

阶乘计算 输入一个正整数n,计算n的阶乘。 求和 计算1 - 1/3 + 1/5 - 1/7+.......共n项之和。 判断是否为素数 判断一个正整n是否为素数。 打印九九乘法表 九九乘法表相信大家都不陌生吧!利用循环打印出一个九九乘法表。

小马同学 4329

【Trans论文复现】基于Agent的电力市场深度决策梯度(深度强化学习)算法建模研究(Python代码实现)

内容概要:本文详细介绍了“Plecs全桥LLC谐振变换器仿真模型”这一技术资源,聚焦于利用PLECS仿真工具对隔离型全桥LLC谐振变换器进行建模、参数设计与性能分析。该资源系统阐述了LLC谐振变换器的工作原理,涵盖谐振参数设计、软开关实现机制、效率优化等关键技术环节,并配套提供了完整的仿真模型、设计报告与计算书,便于用户深入理解其在高效率、软开关功率转换中的优势与应用。研究内容不仅支持理论学习,还可用于控制策略的验证与优化设计,具有较强的工程实践价值。; 适合人群:具备电力电子技术基础知识,从事开关电源、高频功率变换器研发及相关领域研究的工程技术人员与高校研究生。; 使用场景及目标:①用于全桥LLC谐振变换器的教学演示与原理学习;②支持科研人员开展高效DC-DC变换器的建模、仿真与优化设计;③为掌握PLECS在电力电子系统仿真中的高级应用提供详实案例。; 阅读建议:建议结合PLECS仿真软件进行实际操作,通过运行仿真模型并对照设计文档,深入理解电路各模块功能、参数设置依据及软开关实现条件,重点关注谐振腔参数对系统效率与动态响应的影响,以全面提升对LLC变换器工作特性的认知水平与工程设计能力。

三电平维也纳VIENNA双闭环控制整流器仿真(Simulink仿真实现)

内容概要:本文档系统介绍了“三电平维也纳VIENNA双闭环控制整流器”的Simulink仿真资源,重点涵盖电压电流双闭环控制、中点电位平衡控制及SVPWM调制等核心技术,服务于高精度电力电子系统的建模与优化。资源包不仅包含三相维也纳整流器、双有源桥DAB变换器、LLC谐振变换器等多种典型拓扑的仿真模型,还整合了Mathcad计算书、参考文献、MATLAB代码及设计报告等配套材料,突出科研复现与工程设计双重价值。特别针对控制策略优化、软开关技术实现、最小应力控制等前沿方向提供顶级EI期刊级别的复现案例,强化理论深度与实践指导意义。; 适合人群:面向具备电力电子、自动控制或电气工程等相关专业背景的研究生、科研人员及从事新能源、电力变换系统开发的工程技术人员,尤其适合正在进行高性能整流器与DC-DC变换器研究的专业人士。; 使用场景及目标:①支持高校与科研机构在三电平整流器、功率因数校正(PFC)、DC-DC变换器等领域开展控制系统建模与算法验证;②助力高质量学术论文复现(如EI/SCI期刊)、硕士/博士课题研究、毕业设计及企业级项目开发;③深入掌握SVPWM调制、双闭环动态调节、中点电位平衡控制等关键电力电子控制技术的实现机制与参数整定方法。; 阅读建议:建议结合提供的完整资源目录循序渐进地学习,优先研读控制框图与数学建模部分,理解控制逻辑与参数设计原理后,再通过Simulink平台进行仿真实验与参数调试,注重理论推导与仿真结果的对比分析,全面提升科研创新能力与工程实践能力。

储能双向Buck-Boost+模型预测电流控制+电压下垂控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台构建的储能双向Buck-Boost变换器仿真模型,重点实现了模型预测电流控制(MPC)与电压下垂控制相结合的先进控制策略。该系统通过精确预测电感电流与动态调节母线电压,有效提升了储能系统在充放电切换过程中的动态响应速度、运行稳定性与抗扰动能力。模型充分考虑了实际应用场景中的非理想因素,结合参考文献进行了算法优化与参数设计,增强了方案的技术可行性与工程实用价值,适用于微电网、分布式能源系统及多储能单元并联运行的能量协调管理。; 适合人群:电气工程、自动化、新能源技术及相关领域的科研人员、研究生以及从事电力电子变换器与智能电网控制系统研发的工程师。; 使用场景及目标:①深入研究双向DC-DC变换器在储能系统中的高性能控制方法;②掌握模型预测控制与下垂控制的协同设计原理及其在复杂工况下的动态调节机制;③为微电网能量管理、多源协同控制、电压频率支撑等关键技术提供可靠的仿真验证平台。; 阅读建议:建议结合提供的Simulink模型与参考文献进行系统学习,重点关注控制器结构设计、预测模型建立及控制参数整定过程,可通过调整负载突变、设定不同工作模式等方式开展仿真实验,深入理解控制策略的鲁棒性与适应性表现。

jp-host-release.apk

jp-host-release.apk

上一篇: 命题逻辑的基本概念
下一篇: Effective C++阅读笔记(一)
Cross_Entropy
博客等级 码龄7年 69粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值