没有合适的资源?快使用搜索试试~ 我知道了~
网址:http://www.elsevier.nl/locate/entcs/volume62.html13页在多语言环境中部署和验证反应式系统*AgatheMercerona,1,Mon icaMüllerburgb,2,G. Michele Pinnac,3aLIAFA-Universit'eDenisDiderot,法国bGMD - Forschungszentrum Informationstechnik,德国cDipartimentodiMatematica,Universita`diSiena,Italy摘要多语言环境S IE支持设计和正式验证同步反应系统。它集成了三种同步语言和三种指定属性的方法:带有未来操作符CTL的时态逻辑,带有过去操作符Past TL的时态逻辑和观察者,这是特定的同步程序。有人认为,这种多语言的功能提供了一个答案,正式验证的两个主要问题:设施的形式化属性和设施的大型系统验证。时间触发协议的案例研究说明了这种方法1介绍反应式系统是实时系统,它不断地对来自环境的刺激做出反应。它们由软件、硬件和机电组件组成,因此结合了离散和连续行为。反应式系统是我们日常生活中的重要组成部分,无论是汽车安全气囊控制器等控制系统,还是洗衣机和手机等消费品。同步语言已经被提出来设计和形式化地描述反应式实时系统。同步范例被认为是特别适合的,因为可以保证性能,如反应性和满足时间约束反应性意味着系统*由TOSCA项目部分支助的工作。1电子邮件地址:agathe@liafa.jussieu.fr2电子邮件地址:muellerburg@gmd.de3电子邮件地址:pinna@unisi.it2002年由ElsevierScienceB出版。 V. 操作访问根据C CB Y-NC-N D许可证进行。2总是对输入做出反应,并且独特的反应在固定的时间内终止。 同步范例将系统运行视为一个序列由计算步骤和交换步骤组成的事件系统的各个组件与其环境之间的信号(可能带有数据)。同步语言基于同步假设[2],该假设规定计算进行得足够快,以便对于环境,输出信号似乎与输入同步。因此,时间被划分为反应发生的非重叠瞬间。值得注意的是,同步系统是确定性的,尽管它可以由几个并行组件组成几种同步语言已经被开发出来(参见[8]的调查):ARGOS,一种图形化语言[13],ESTEREL,一种命令式语言[3],都是基于状态的,因此非常适合于建模离散行为而LUSTRE是一种数据流语言[5],连续的行为。将这三种语言集成在一起,设计:每个系统组件都可以使用最能捕捉这种行为的语言来建模。工作台S IE[21,20,24]提供了这样的集成。它被扩展到包括面向对象的方面,其他集成平台包括SCADE[22]和ESTEREL的扩展[7]。时态逻辑,特别是CTL(计算树逻辑)[6],已经很好地建立了用于指定反应系统的属性,并且模型检查器可以用于它们的验证[25,14]。检查指定为以适当的时序逻辑编写的公式的属性是否被系统满足,一个自动的过程。模型检查器搜索可达性空间以推断检查是否通过。然而,有两个问题:(1)在时态逻辑中指定属性对于某些类型的属性可能是笨拙的;(2)大可达空间的状态爆炸问题使得实际证明在许多情况下不可行。本文讨论了如何在多语言环境中进行验证,并使用案例研究(即时间触发通信协议[26,10])展示了如何应对这些限制(时间触发协议在运输行业中受到特别关注,其中电子系统,即所谓的“线控”系统,取代了在S IE(简称SWB一个公共的语义模型来实现的,称为同步组件[21]。SWB将以上述任何语言编写的模块编译到该模型中。布尔自动机是同步部件的核心部分。布尔自动机(Boolean Automaton,简称BA)是一种由一组布尔方程编码的有限状态机。它用于表示瞬时反应的计算:给定环境提供的一组输入信号,它计算要反馈到环境的一组输出信号。工作台的所有工具,如反应性检查器(它检查是否3←或者程序不是反应性的,即,给定输入,存在唯一反应),则仿真器和代码生成器在该公共模型上工作BA由于SWB支持CTL,因此基于transmartemporal逻辑的验证是可能的。但是,SWB提供了额外的方法来证明属性。一种方法是使用带有过去时态运算符的逻辑,我们称之为过去TL,特别适合于指定安全属性[12]。另一种原始的,对许多从业者来说,更简单的指定安全属性的方法是通过观察者[9]。观测器是另一个同步程序,它观测同步系统接收和发射的信号。一旦同步系统违反了观测器所观测到的特性,观测器就会发出一个特殊的误差信号。因为观察者是同步程序,所以用于对系统建模的相同语言由于SWB提供了一种以上的同步语言,因此可以使用其中的任何一种。因此,SWB不仅提供了多风格的设计,而且还提供了多风格的验证,这有助于使形式属性的指定成为一个更自然和方便的过程。状态爆炸问题的一个解决方案是模块化验证[11]。它使整个自动验证过程更容易,对于大型系统来说,完全可行。多语言环境SWB为模块化设计和模块化验证提供了全面支持[17]。本文的结构如下:在下一节中,我们简要讨论了布尔自动机在多语言环境中的作用,然后,在第3节中,我们说明了如何进行验证。最后,我们在第4节中举例说明案例研究。2布尔自动机SWB中的一致性是通过将所有组件转换为一种称为BA的关于BA的BAsφ:如果满足条件φ,则发出信号s,另一个用于定义寄存器以表示持久信息hφ:如果满足φ,则控制寄存器h在下一时刻为真(或“置位”)。在上面的语句中,φ是一个在信号和寄存器上定义的布尔表达式。操作语义由两个连续的阶段定义:给定值v,为每个寄存器分配真值(真或假),并输入4[详细]关于我们(直观上是自由变量),反应是系统方程的解Sφ;这个解决方案扩展了v以覆盖所有信号,并且使用来计算分配Hφ以产生机器的下一个状态。所有输入模式和可达状态的信号方程的一种解法必须证明在编译时存在,以保证程序是反应性的,因为它可以响应任何输入激励。此外,解决方案必须是唯一的,以保证程序是确定性的。下面的BA表示应用程序的切换器,见图。2:它有两种状态(关闭和打开),并且在接收到打开和停止信号时从一种状态切换到另一种状态。根据状态和接收到的信号,它发出start:从阿瓦隆出发,a off←α(a off<$on)(aonstop)aon←(aoffon)(a on<$stop)如果自动机处于状态aoff并且存在信号on,则发出信号start。寄存器aoff在初始反应中被设置,由特殊信号α表示,或者如果自动机处于状态a off而信号on不存在,或者如果自动机处于状态a on而信号stop存在。如果自动机处于状态a关闭且存在信号on,或者处于状态a开启且不存在停止,则设置寄存器a on。系统的每个组件都被转换成一个BA,这些组件使用(除其他外)两个相关操作进行组合:并行组合和细化。把BA精化需要更多的东西:初始信号α必须被精化状态的起始条件所取代,并且必须加上其抢占条件的否定[24]。转换成BA首先,它允许组合用各种同步语言编写的模块,每种语言都可以翻译成BA第二,它使多种风格的验证成为可能,正如我们接下来看到的。3多语言环境下的规格说明与验证在SWB中,属性可以在时间逻辑CTL和Past TL中指定,或作为任何受支持的同步语言中的观察者。CTL是一个带有未来操作符的分支时间时态逻辑,而Past TL是一个只使用过去操作符的线性时间时态逻辑。观察者是同步程序。CTL广泛用于自动验证,因为它可用于模型5→等待_o跳棋它通常使用时间运算符,如G,它被解释为在以后的每个瞬间;运算符X,下一个,解释为在下一个瞬间;F,未来,解释为在以后的某个瞬间。它还使用了两个路径量化器:A表示所有,E表示存在。以属性“start总是在某个时间之后被stop”为例。在CTL中,它被写为:AG(开始F停止)。 这个性质关系到将来会发生的一些事情,(活性性质),CTL是非常好的适合表达这种性质。然而,CTL可能难以表达安全特性。例如,考虑“停止总是在开始之前”,这是一个由应用程序验证的属性。要用CTL表示它,必须使用未来运算符将其转换为一种形式,例如“如果没有开始,那么以后就没有停止”。 相比之下,它很容易使用时态逻辑与过去运算符,如过去TL。Past TL提供了运算符Once,它被解释为存在某个在前的时刻。在停止的每个瞬间,重新计算存在,则存在存在开始的前一瞬间,这仍然是非常直观的,给出了过去TL公式:AG(停止→一旦开始)。涉及信号序列中特定模式的属性很难用时态逻辑(CTL或PastTL)来表达 一个说明性的例子是“启动和停止交替和启动开始”。相比之下,这样的属性很容易被公式化为观察者,例如。如图所示,用ARGOS写成1.一、- 启动-停止停止/e开始启动/e停止- 启动-停止开始停止/e/电子邮件- 启动-停止图1.一、启动和停止的自动机交替启动。在这些形式主义中,表达像“开始和停止是排他性的”这样的不变量这个属性可以表示为观察员在LUSTRE:nodeMutExcl(start,stop:bool)returns(e:bool); lete =开始和停止;电话在CTL、Past TL中表达的属性或作为使用同步语言的观察者的属性的验证在SWB中是自动的。BA可以被变换成用于可用模型检查器的输入。因此,使用模型检查器来验证CTL公式。我们可以将直接用BA表示的观察者与过去的TL属性联系起来,如[4]所示。表示为观察者等待_sinit误差6∀∀∀∀简单地包括再次使用模型检查器在与观测器并行构成的程序的状态空间上检查简单安全属性AG note,其中e虽然通过模型检查进行形式验证非常有吸引力,但它有一个严重的缺点:当状态数量急剧增加时,这是不可行的,这是大型系统的情况。模块化验证是状态爆炸问题的一个答案,它使整个验证变得更容易,并且对于大型系统来说,完全可行在SWB中,模块是由设计给出的:它们是并行的,细化的和细化的组件,它们一起构成了程序。模块化验证只有在它是保守的时候才有意义,也就是说,如果为一个组件证明的性质对整个程序也成立。幸运的是,对于并行合成,已经有了一些很好的结果,可以应用于SWB。在这些结果中,我们感兴趣的是那些有关的性质表示为CTL公式。CTL公式是仅使用量化器(即A)的CTL公式。在我们的设置中,即布尔自动机和SWB,可以将结果转换如下:假设模块的输出信号集不相交,在模块上证明的表示为CTL公式的属性对于通过用另一个模块精化模块或将其与另一个模块并行而获得的完整程序也是正确的(如[15,17]所示)。 值得注意的是,结果不适用于细化模块。其他结果涉及使用其他时态逻辑或观察者[9]。虽然观察者比像CTL这样的逻辑更受限制,因为它们只能表达安全属性,但对于模块化验证,可以获得更强的结果。假设模块的输出信号集是不相交的,在模块上证明的表示为观察者或过去TL公式的性质也适用于完整的程序;模块是精化模块、精化模块还是并行模块都无关紧要[17,16]。用不同的形式主义来表达属性在许多方面都具有灵活性:如何正式指定属性(最合适的形式主义可以根据上面所示的特定属性来使用);谁正式指定属性(不仅时序逻辑专家可以指定属性,使用同步语言的设计者也可以通过观察者指定属性);最后,何时正式指定属性(要验证的核心属性是非正式系统需求的一部分,可以在非常早期的阶段正式化,可能在设计开始之前。然而,随着设计者的前进,更多值得验证的特性可能识别)。 因此,属性的形式化指定可以与系统的设计和编程一起继续,这是一种类似于[1]中提出的用于测试的极限编程的方法。74案例研究:时间触发协议[26]中提出的汽车应用协议是一种时间触发协议[10],它允许固定数量的站通过共享总线进行通信。信息通过公共汽车广播到所有车站。参与通信的每个站在适当的时候发送消息。因此,对总线的访问由协议生成的全球时间控制的时分多址(TDMA)模式确定。TDMA周期被划分为多个时间片。站被排序,并且时间片被分配给站,他们的命令。在它的时间片内,一个站具有独占的消息发送权。专注于控制,我们认为一个时间片是由包括两部分:一个包含站点标识的帧和一个确认窗口。该协议是容错的。如果消息没有被正确接收,则注意到传输错误的站在应答窗口中发送否决,并且所有站从正常模式改变为错误模式如果故障发送站不能恢复,则将其排除。为了使容错算法正常工作,每个工作站都维护一个成员服务,该服务指示哪些工作站处于正常模式。为了参与通信,站以初始化模式启动。一旦成功与其他站同步,它就进入正常模式。假设站i想要通信。它必须弄清楚什么时候是它访问总线的时候。因此,它首先在初始化模式一旦进入,它就将其定时器设置为时间T1。在这段时间里,它听着公共汽车上的交通一旦它意识到有效帧,即,其“ACK窗口”不具有任何否决权的帧,它知道哪个站正在发送。因此,它可以推断何时必须发送,因为时间片是静态分配的。它将重新启动并进入正常模式,为任何有效帧更新其成员服务。如果站i是第一个需要通信的站,则它当时间T1过去时,它发送一个帧并将其定时器设置为T2i,对于i=j的任何站j,时间与任何T2j不同。通信需要至少两个伙伴,因此站i将在时间T2i期间继续监听该传输,当T2i过去时发送消息并将其定时器重置为T2i。 如果第二站,比如站j,也需要为了通信,它也进入初始化模式。 因为T2i和T2j是不同的,所以最终两个站中的一个将识别有效帧并同步,从而切换到正常模式。 它在自己的时间片内发送消息,允许第二个站也同步。请注意,在协议建立期间,可能会发生冲突,例如,如果两个站在同一时刻启动,因为T1对于每个人都是相同除了其时间触发方面之外,该协议的一个相关特征是8≤≤允许模式的快速改变和成员资格服务,其在消息长度和消息数量方面具有最小的开销4.1方案的正式描述本文简要介绍了系统的总体结构和部分实现的协议。对形式证明中涉及的部分给出了一些细节。更多的细节可以在[18]中找到。同步方法免费提供全局时钟。协议的时间单位是其同步实现的反应时间。该协议由多个站点建模,在实际实现中有三个站点(1i3),并行运行。 总线是隐式建模的 作为全局消息的集合,即,不是任何站本地的那些消息。由站i发送的帧由两个信号bframe-i和bframe-i来建模。eframe-i:第一个表示站开始发送帧,和第二这次行动的结束在实际实现中,它们在两个连续的瞬间出现。一个时间片有三个时间单位(时刻):前两个是帧,第三个是确认窗口。利用ARGOS的图形风格及其细化运算符对于状态,协议的顶层由并行的单状态自动机组成:一个用于每个站,一个用于冲突控制器。Colli- sion控制器检查总线上的信号是否冲突。如果由站i发送的帧不与任何其它帧冲突并且它被其它站接受,则它在时间片的第三时刻发射信号rframe-i所有国家都在进一步完善。车站的状态由相同的A RGOS自动机定义,称为车站,如图所示。二、只有作为信号的参数会发生变化。在站内,站f表示第一个跟随站,站s表示第二个跟随站,而特定于站f的信号x称为x f。站的ARGOS自动机(图2)由三个并行com组成。ponents。 每个组件又是一个ARGOS自动机。 述自动机应用程序模拟工作站的状态,该状态为“关闭”或“打开(说明a开)。自动机引擎表示站的协议引擎,其或者空闲或者工作。工作状态由图1中部分显示的ARGOS自动机3.第三章。自动机定时器负责计算初始化模式中的时刻。启动具有并行组件的自动机,进入所有并行初始状态,因此启动图2中的自动机,进入三个并行初始状态a off、idle、to。此外,由于同步性假设和信号的广播,当电台需要它的协议引擎。根据环境的请求(通过9停止空闲start/set_t1发动机停止a_off打开/启动应用程序站工作a_on定时器同步机+synchro_sT1t0set_t1set_t2同步机+synchro_sT2启动、停止、同步、同步、set_t1、set_t2、超时图二. 一种RGOS车站自动机输入信号ON),自动机应用程序发出信号START并进入状态AON。发动机立即接收到启动信号,发动机变为工作状态,发射设置为-t1的信号,该信号又被 定时器使其变为状态t1,用于对第一时间(T1)进行计数。 一旦定时器接收到synchro−f或synchro−s(表示与其他两个站中的一个同步成功),它就会回到初始状态。如果站在时间T1内没有成功同步,则计数器在计数结束时发出超时信号,定时器开始计数(在状态T2),并执行另一次同步尝试的计数器周期性地复位到T2,直到同步成功。引擎的工作状态由三个并行运行的自动机来定义:stationIsOn对协议引擎的状态进行建模,该状态是初始化还是运行,stateVector对成员服务进行建模,而sliceDistributor决定是否轮到站点发送其帧(见图10)3)。协议引擎处于初始化模式或操作模式,其中操作模式包括正常模式和错误模式。因此,自动机stationIsOn由初始化和运行两种状态组成。这两种状态都被A RGOS自动机进一步细化。图图3显示了状态初始化是如何细化的。对成员服务进行建模的自动机stateVector仅由一个由LUSTRE节点定义的状态组成,如图所示。3.第三章。aux1,aux 2,包括f,并包括s的方程进行了评估,在para-quantity。例如,变量aux1在第一个瞬间的值为false,在所有其他瞬间,它的值都是包含f的前一个瞬间的值。 状态向量表示系统被感知时的状态通过站:每个站知道哪些站正在参与游戏,即哪些站被包括在内。不包括在内的车站有10rframe+rframe_fde_sstationsIsOn工作include_f,included_f,exclude_f,include_s,include_s,exclude_s切片分配器SD4- 否决权SD5SD6否决SD3SD7/my_sliceSD8同步机SD2同步机SD1初始化A3/set_t2/eframeA1超时/bframeA2node statev(include_f,exclude_f,include_s,exclude_s:bool)返回(included_f,included_s:bool)var aux1,aux2:bool;让return false -> pre(i);included_f =((include_f or aux1)and notexclude_f); aux2 = false -> pre(included_s);included_s =((include_s or aux1)and notexclude_s); tel状态向量STV初始化_f/synchro_e_s/同步f,包括_s,包括操作图3.第三章。一 个RGOS自动机细化状态工作忽视sliceDistributor决定是否轮到站发送它的帧。因此,它跟踪时间片,并在发送帧的时间片到达时发出信号my-slice。此外,它还注意到由另一个站(比如说站f)发送的帧是否被拒绝。在这种情况下,它发出信号exclude f,导致stateVector排除站f。这是通过一个LUSTRE程序来完成的,该程序对状态sd6和sd8进行了细化,这里不再进一步讨论。4.2协议属性的规范和验证以下三项财产被确定为特别重要:属性1:站点将同步。特性2:公交车上没有发生碰撞。属性3:成员服务功能正常。为了降低复杂性,属性已尽可能模块化地验证。属性1:站点将同步这个属性指的是将来会发生的好事(活性属性)。因此,最好使用带有未来运算符的时态逻辑来指定它,因此CTL。11⇒⇒⇒如果(1)站能够发送帧,并且(2)如果是想要同步或者已经同步的另一个站nized。该属性分两部分证明。 如果站点处于关闭状态并且存在on,则它将始终发送其帧。对于第二部分,则它将同步,因此必须发射连续的R帧F(或R帧S)。如果站f和站s不都处于状态a关闭,则将是这种情况。因此,第二个属性是用公平性约束rframef或rframe s来证明的。对于证明的两个部分,假设off仍然不存在,这是安全的,因为off仅在错误模式中发出,而不是在初始化中发出。CTL公式为:AG( ( aoffandon ) )AFbframe ) 和 AG ( ( offandon ) AF(synchroforsynchro s))。 时态运算符AF代表永远在未来。把这些财产-可以推断站将同步。 该属性已在模块站上得到证明,该模块站丢弃了用于sliceDistributor、stateVector和operating的细化组件,因为这些组件与该属性中涉及的信号无关。性质二:公交车上没有发生碰撞此属性要求任何两个站永远不会在同一时刻发送帧。如果他们的片分发器没有在同一瞬间。这是很容易形式化为一个LUSTRE观察者。下面的等式确保了任意两个站点站点1和站点2的属性:e=我的切片1和我的切片2。性质AG note被证明为真。属性3:成员资格服务功能正常为了证明这个属性,它表明StateVector的LUSTRE节点是正确的。证明分两步完成首先,如果站f被包括在站的状态向量中,则它一直被包括,因为信号包括f已经被发射。该属性最好使用带有过去运算 符 的 逻 辑 来 形 式 化 : AG ( includedf ( includedfSinceincludef))。此外,如果未包括工作站,则该工作站从未被包括,或者该工作站自发出排除后未被包括。同样,这是最好的形式化的过去TL公式:AG(不包括f)(P不包括f)或(不包括f由于排除f))其中P应该是红色的,因为总是在过去 性质3仅在模块stateVector上证明。引用[1] Beck,K.,[2] Benveniste,A.和G.贝瑞,反应和真实的同步方法12时间系统,IEEE79(1991)会议记录。[3] Berry,G.和G. Gonthier,The Esterel synchronous programming language:Design,semantics,implementation,Science of Computer Programming19(1992)。87比152[4] 布德河和A. Merceron,安全属性布尔接受器的生成器,在:第五届澳大利亚并行和实时系统会议(第98部分45-56[5] Caspi,P.,D. Pilaud,N. Halbwachs和J. Plaice,Lustre:一种用于编程同步系统的声明性语言,见:第14届ACM编程语言原理会议,ACM出版社,1987年,第14页。178比188[6] Clarke,E. M.,E. Allen Emerson和A. Prasad Sistla,使用时序逻辑规范自动验证有限状态并发系统,ACM编程语言与系统学报8(1986)。244-263。[7] Esterel主页,http://www.esterel.org。[8] Halbwachs , N. , “Synchronous Programming of Reactive Systems,” KluwerAcademic Publishers,[9] Halbwachs,N.,F. Lagnier和P. Raymond,同步观测器和反应系统的验证,第三届国际代数方法学和软件技术会议,AMAST'93,计算研讨会,Springer-Verlag,1993年[10] Kopetz,H.和G.Grünsteidl ,Atimetrigge reedp rocolforautomotiveapplications, Researchr eport16/92 , IncubutfurürTe chnis cheInformatik ,Technis cheUni versitüatWien,维也纳,奥地利(1992).[11] Kupferman,O.和M. Y。王志华,模块化模型检验,载于:计算机科学学报,第1536期,1998。[12] 曼纳角,巴西-地和A. Pnueli,[13] Maraninchi , F. , ARGOSlanguage : Graphical representation of auto mataand description of reactive systems , in : IEEE Workshop on VisualLanguages,IEEE Society Press,1991.[14] McMillan , K. L. , “Symbolic Model Checking , ”Kluwer AcademicPublishers,1993.[15] Merceron,A.和G.Michele Pinna,ARGOS程序的模块化验证,第六届澳大利亚并行和实时系统会议(第99部分),Springer- Verlag,1999年,第100367-376.[16] Merceron,A.和G. Michele Pinna,Refinement and modular verification withobservers , 第 一 届 亚 太 质 量 软 件 会 议 ( APAQS 2000 ) , IEEE SocietyPress,2000,pp.104-11413[17] Merceron,A. 和G. Michele 耳廓,基于组件核查是同步设置,International Journal of Software Engineering& Knowledge Engineering 11(2001),pp. 181-203.[18] Merceron,A.,M. 米勒堡和G. 陈文,一种基于时间触发的多语言通信协议的实现,载于:《计算机科学讲义》,第1516期,第1998-1999页。185-195.[19] Poign'e,A. 和L. Holenderski,B ool eanautomataforimplementing ESTERE L,Arbeitspapiere der GMD 964,GMD(1995).[20] Poign'e,A. 和L. Holenderski, Onthe combination offsynch ronouslanguages , in : Compositionality : The Significant Difference , Lecture Notes inComputer Science 1536,Springer-Verlag,1999,pp 490 - 514.[21] Poign'e,A. ,M.Morley,O.马埃湖 Holenderski和R. 1998年,《系统设计中的形式化方法》,第12期,第13页。163-187。[22] SCADE主页,http://www.telelogic.com/products/scade/。[23] sE主页,http://set.gmd.de/ees/synchronie/doc/lang.html。[24] S公司主页,http://set.gmd.de/ees/synchronie/swb.html。[25] VIS集团,VIS:验证与综合系统,载于:Proc.第8届计算机辅助验证国际会议,计算机科学讲义1102,Springer-Verlag,1996,pp. 428-432[26] 诉Hanxleden,R.,约翰·博恩湖Lavagno和A.陈建民,一种容错通信协议的硬件/软件协同设计,载于:IEEE嵌入式容错系统国际研讨会论文集,达拉斯,1996年。
下载后可阅读完整内容,剩余1页未读,立即下载
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 保险服务门店新年工作计划PPT.pptx
- 车辆安全工作计划PPT.pptx
- ipqc工作总结PPT.pptx
- 车间员工上半年工作总结PPT.pptx
- 保险公司员工的工作总结PPT.pptx
- 报价工作总结PPT.pptx
- 冲压车间实习工作总结PPT.pptx
- ktv周工作总结PPT.pptx
- 保育院总务工作计划PPT.pptx
- xx年度现代教育技术工作总结PPT.pptx
- 出纳的年终总结PPT.pptx
- 贝贝班班级工作计划PPT.pptx
- 变电值班员技术个人工作总结PPT.pptx
- 大学生读书活动策划书PPT.pptx
- 财务出纳月工作总结PPT.pptx
- 大学生“三支一扶”服务期满工作总结(2)PPT.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)