没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记127(2005)145-162www.elsevier.com/locate/entcs分布式事件图:形式化基于事件的建模与仿真Juan de Lara1EscuelaPolit'ecnicaSupreiorIngenier'ıaInform'aticaUniversidadAut'onomadeMadrid西班牙马德里摘要在这项工作中,扩展到离散事件模拟的经典事件图形式主义给出 扩展面向基于组件的模型的规范。 抽象语法是通过元建模定义的。几个方法论问题进行了讨论,关于使用两个不同的元建模水平或崩溃的语言成 一个单一的,其中通过图变换定义了操作语义。这种形式化的定义使得在从模型生成代码之前就可以进行分析可视化对象的语法和语义语言已经在多范式工具AToM3中实现,同时还有一个代码生成器,可以生成能够实时运行分析模型的独立应用程序关键词:元建模,图转换,建模与仿真,组件框架,事件图。1介绍传统上,仿真被分为连续、离散或混合。在离散事件建模和模拟中[13],在有限的时间间隔内有有限数量的事件。有几种方法(称为在流程交互视图中,描述的是模型实体的生命周期(活动的顺序),而在事件调度视图中,事件是模型的基本元素在1电子邮件:Juan. ii.uam.es1571-0661 © 2005 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2004.08.052146J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145在后一种方法中,事件类是用事件对系统状态和未来(因为可以安排新事件)。 之一 事件调度建模语言是事件图[11]。事件图模型是类似于图的,其中节点表示事件。这些指定了事件发生时执行的操作(系统状态的更改)。事件通过转换关联,转换表示源事件发生时目标事件的调度。过渡可以指定要调度的目标事件的时间量和条件虽然众所周知的仿真社区,这种形式主义是不适合的面向对象和基于组件的仿真,其中系统状态被划分在组件,实现自己的行为,并通过端口进行交互。基于模型的建模解决了扩展问题,因为模型通过分区变得更简单,可以有许多定义组件的实例,这些实例更适合分布和并行化。在目前的工作中,事件图的扩展,提出了为了考虑通过端口发送事件的进程的通信。我们称之为新的形式主义分布式事件图(DEG)。在这项工作中,我们使用元建模的DEG的定义,而操作语义是通过图变换。在DEGs模型中,定义过程和行为类的规范级别两个元建模的替代方案-语法和语义的形式化定义使得能够使用图变换的理论结果来分析DEG模型[9]。我们使用元建模工具AToM3 [7]来实现这些想法。AToM3是与蒙特利尔麦吉尔大学的Hans Vangheluwe合作建造的该工具允许通过元建模来描述可视化语言的语法根据这些高级描述,自动生成定制的建模环境。我们已经为DEG创建了一个建模环境,并使用代码生成器扩展了它,该代码生成器可以生成独立的应用程序。通过这种方式,应用程序首先在AToM3中进行可视化建模和分析,然后可以从中生成代码本文的其余部分组织如下:第2节介绍了用于定义视觉语言的Meta建模和图转换;第3节通过元建模定义DEG语法;第4节涉及其操作语义的定义;第5节介绍了在AToM3工具中实现的示例,其中我们在通过模拟验证后从DEG模型生成代码;第6节讨论了相关的J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145147最后,第7节以结论和未来工作结束2视觉语言定义的元建模和图变换视觉语言传统上使用元模型或图形语法来描述[9]。元建模允许通过定义其(通常是抽象的)语法的模型来定义可接受模型的结构。这个模型被称为元模型。当元模型配备了额外的信息因此,在元建模方法中,有几个元级别。在每一个层次中,模型都是某个模型在更高Meta层次上的实例.此外,在严格的元建模方法中,每个模型元素都是定义语言的相应模型中另一个元素的实例,在更高的元级别上。例如,在UML图族的定义中[12]定义了四个元级别。在第三个Meta层次(M3)中,人们发现了不同形式主义(如DEG)的模型(即元模型) 在第二个元级别中,有以下实例(模型):不同的M3元模型。在M4层中,我们可以放置用于描述M3形式主义的形式主义(我们称之为元形式主义)的描述(元元模型)。例如,我们可以在这里放置核心UML的描述,或者元对象工具(MOF)。最后,在M1级别,我们有执行数据。图文法[9]也可以用来描述视觉语言。它们是由规则组成的,每个规则的左右两边都有图(LHS和RHS)。为了将规则应用于图(称为主机图),必须在规则的LHS和部分之间找到态射的host graph。如果找到这样的态射,则可以用RHS中的元素替换宿主图中的元素。规则还可能具有消极应用条件(NAC),这些模式不应可以在主机图中找到,以使规则适用。在代数方法[9]中,规则被描述为图类别中的推出。有两种主要的方法来描述规则:双推出(DPO)和单推出(SPO)。在DPO方法中,LHS和宿主图之间的态射必须满足悬挂和识别条件。悬挂条件规定,如果不删除边,则应保留其源节点和目标节点。识别条件规定,如果LHS中的两个节点或边被映射到LHS中的单个节点或边,148J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145、、RG◦H主机图(通过非内射态射),则两者都应保留。在SPO方法中,生产被表示为从LHS到RHS的单个(部分)映射。如果应用,则由于标识条件而导致的悬挂边和节点或冲突边将被删除。因此,在SPO方法中,规则可能具有次要影响。这是我们在本文中遵循的方法不,、、、LRn/,mm,zJrJ图1.一、一个规则在SPO方法中对图G的应用在定义视觉语言的图语法方法[3]中,这些是由生成或解析语法定义的第一种语法能够生成语言的所有有效模型。第二类文法可以将语言的有效模型简化为一个初始符号。在[2]中,对两种方法的结合做了一些初步工作其思想是在图转换规则中使用元模型继承层次结构中的信息。这样,如果一个抽象节点出现在一个规则的LHS中,那么这个规则(称为抽象规则)就等价于由它的继承族中的具体节点对这个节点进行有效替换而产生的所有规则(称为具体规则)。这种技术极大地简化了规则,并在本工作中使用,以指定语言的一致性检查规则(由元模型定义)。3分布式事件图的为了描述DEG,我们首先需要描述过程网络。这有两个层次。在第一个层次(规范层次)中,描述了过程的类。在此规范中,我们包括端口类型(输入或输出),规范这些端口之间允许的连接以及它们可以产生和接收的事件类型。 稍后我们将通过DEG定义过程类的行为。在第二层(实例层)中,我们指定进程(某些进程类的实例),它们的引脚(端口的实例)和它们的连接性。图2显示了一个示例,其中声明了两个流程类和三个实例。所有端口都产生和接收“ar-rival”类型的事件 为简单起见,我们假设所有引脚的连接性为“0..*",但我们可以在端口中包含此信息,在规范级别。有两种方法来定义这种两级语言。 第一个是将每个级别放在单独的元级别中[1]。第二个是LJ. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145149图二、一个过程网络主要元素的例子将两个级别放在同一元级别中,并通过“实例”关系明确地关联两个级别中的元素这里我们使用第二种选择,尽管在AToM3工具[7]中,两种方法都是可能的。第二种方法更灵活,因为它允许在运行时修改规范级别(可能使用图转换规则)。此外,由于行为是使用DEG在规范级别定义的,因此可以使用图形转换规则执行。在这两种方法中,必须确保模型在每个级别上的一致性(级别内一致性)以及规范和实例级别之间的一致性(级别间一致性)。例如,在后一种情况下,我们必须确保对于实例级别的某个进程,其所有引脚都是规范级别的相应端口的实例。此外,我们必须检查实例级别的引脚连接是否在规范级别上被允许。而对于两个单独的元级别,两个级别之间的一致性是通过构造来保证的,对于一个元级别,必须通过使用文本(例如以OCL的形式)或图形约束(以图形转换规则的形式)来确保一致性,这些约束在用户构建模型时进行评估。对于规范级别的级别内一致性,我们必须检查输入端口不能从输出端口接收连接,这些连接生成输入端口不能处理的事件图3显示了流程网络的元模型。流程类可能有许多行为,但在某个时刻只有一个是活动的。当过程接收到一个特殊事件(称为“INVOKE”)时,过程会更改其执行的行为事件队列存储模拟执行期间生成的事件。队列中的事件按执行时间排序。当前时间和最终时间由一个独特的“GlobalTime”类型的实体DEG的模拟器消耗规范级别电缆OutPortName:<<流程类>>名称:到达输入端口Name:life's agame电缆<<工艺类>>产品名称:机器外埠Name:zhangcheng<信道<<工艺流程>>产品名称:发电机1信道<<工艺流程>>产品名称:1号机<<工艺流程>>产品名称:1号机输出引脚InPin输出引脚输入引脚输出引脚实例级EventTypeName:<<<<<<<150J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145端口+ name:0..*端口类型<1<>电缆InputPortOutputPort 1 1.. *1. *0..*0..*1. *11过程类+ name:String1. *eventType+ name:String1. *0..*输入引脚频道1..*1. *输出引脚0..*<0..* 1过程+ name:String10..*0..*当前行为1. *1动态模型+ name:String下10..10..*10..10..*事件0..1事件队列0.. 1first + name:Stringreceiver_process + time:浮点数0..*销+ 时间:浮点+ finalTime:Float全球时间图三. 过程网事件,并根据行为规范创建新事件。这是离散事件模拟中的标准过程。事件也有一个指向接收事件的流程实例的指针图4显示了前面提到的一致性规则前三个规则是层间一致性规则,检查引脚是否正确实例化(关于类型和数量)和连接。如果一致性检查失败(也就是说,如果可以应用规则),则所有规则都会产生错误。前两个规则是抽象规则,因为我们感兴趣的是检查引脚和端口,而不考虑它们是输入还是输出。例如,第一个规则检查管脚是否是端口的正确实例。如前一节所述,这个抽象规则等价于两个具体规则,这两个具体规则是由抽象类pin和port在它们的继承族中的有效替换产生的。第二条规则检查进程的每个端口是否至少有一个引脚。同样,为了简单起见,我们允许每个端口有几个引脚,尽管可以在规范级别设置最小值和最大值的限制。最后,第三条规则检查引脚是否正确连接。第四个规则是层内一致性规则,它检查在指定层中是否有某个输入端口接收可能产生不允许事件的连接。用户可以在建模阶段的任何时候执行图形转换规则,并且一旦可以应用其中一个规则(即,当发现一致性错误时),它们就停止执行。请注意,在AToM3中,这种检查也可以通过<J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145151CheckPinch-TypeLHSRHS端口工艺类>>Name:life'sa game端口工艺类>>Name:life'sa game<> instance_of>> instance_of>> ErrorEventmsg=y+”不是“+c2”的实例品品条件c1!= C2检查密码-号码NAC端口1LHSRHS端口1端口1<>实例_of>>222销msg=“进程中缺少引脚“+yCheckPinConnectivityNACLHS<<工艺类>>名称:c1外埠RHS外埠输入端口输入端口输出端口输入端口1 21 2<<工艺类>>产品名称:c2<>实例_of>><<工艺类>>1 2名称:c2<><<实例_of>><<<工艺流程>>产品名称:x<<<工艺流程>>产品名称:x输出引脚输入引脚<<>OutPin InPin<<工艺流程>>Name:life'sa gamemsg=“无法连接引脚”CheckPortConnectivityNAC外埠12输入端口3LHS外埠12输入端口3RHS外埠1输入端口3444ErrorEventmsg=“Port cannot receive events ofType”+ETEventType事件类型Name:life's a<<工艺流程>>产品名称:x<<工艺类>>名称:c1<<工艺流程>>产品名称:YErrorEvent<<工艺流程>>产品名称:Y<<工艺类>>名称:c1<<工艺流程>>产品名称:Y<<工艺类>>名称:c1<<工艺流程>>产品名称:Y<<工艺类>>名称:c1Name:life's aName:life's aErrorEvent文本约束。 这些是允许或拒绝执行用户事件(创建、编辑、连接等)的前置条件和后置条件。<<工艺类>>名称:c1<<实例e_of>><<工艺流程>>产品名称:Y见图4。 一些一致性规则原则上,行为规范的语言是开放的(即使我们可以用不同的语言来规范组件),但在图6中,我们为此定义了DEG。常规事件图的主要元素如图5所示。事件表示为图中的节点,它们在括号中描述了事件发生时应该发生的状态更改(通常变量为-)。事件通过转换关联,转换可以有时间表达式和条件。这意味着当转换的事件源发生时,如果满足条件,则目标事件将在指定时间之后调度与 常 规 事 件 图 一 样 , DEG 由 事 件 ( 在元 模 型 中 称 为 DEGEvent-Type)组成,其中可以指定操作在ATOM3 ac中-152J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)1451接收器0.. 1ExecutionPointer0..*0.. 10个.. 10..10..*事件到过程下一事件0..*0..* 目标源0..*+ condition:ConditionExpression+ time:TimeExpression+ port_name:String过渡+ isInitial:布尔值+ isExternal:Boolean+ action:隐藏表达式DEG事件类型+ portName:String+ name:String过程(from过程Meta−模型)+ name:StringeventType(from过程Meta−模型)DEvent图+ name:String动态模型(from过程Meta−模型)(条件)事件1时间事件2【状态变更】【状态变更】图五、事件图的主要元素tions被指定为Python代码,可以访问公共(在所有进程之间共享)或私有的变量。转换与事件图的转换类似,但它们也可以指定端口。 在这种情况下,目标事件被称为外部事件,并通过端口发送。否则,它将在内部生成到自己的进程。一致性规则必须确保在转换中指定的端口为None或有效端口。另一个规则应该验证在每个行为中最多有一个初始类型的事件。 所有进程的当前行为的所有初始事件都被调度在时间0。当一个进程改变其行为时,它的初始事件也被安排在当前时间。一个事件的多个传出转换可能满足它们的条件。在这种情况下,所有目标事件都安排好了如下一节所示,在模拟期间,将创建一个“ExecutionPointer”类型的辅助实体。该元素指向被消费的事件(通过关系“事件到过程”)和所有被调度的事件(通过关系“下一个事件”)。下一节将通过图形转换规则给出模拟器行为的精确说明。见图6。 分布式事件图图7显示了一个使用AToM3工具构建的示例模型,在元模型中为元素提供了具体的语法之后。 模型的上半部分显示了指定部分,其中机器有两个端口,输入端口J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145153(到达过程的DEG规定,到达事件将以10到港口到达的固定时间间隔生成。 机器的DEG指定每台机器有两个局部变量:idle(表示机器是否空闲)和queue(存储等待处理的工件数量)。这两个变量都在行为的初始事件(Init)中初始化。在工件到达时,队列增加,如果机器空闲,则它会安排在当前时间发生Start Proc事件当启动过程发生时,状态变为忙,队列减少。在10个时间步长之后,计划结束过程。当此事件发生时,将立即通过OutPiece端口生成一个到达事件,如果队列不为零,将立即调度一个StartProc。下面定义了这些过程类的几个实例,并通过关系“实例”与它们相关,如虚线箭头所示。一个全局事件队列,由所有进程共享,显示在图片的底部。这个队列总是至少有两个事件(底部和顶部),它们标志着模拟的开始和结束,并被保留以使模拟器的规范更容易。名为“machine 2”的机器见图7。 的示例模型154J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)1454模拟分布式事件图在本节中,我们使用图转换规则为DEG建模模拟器。在模拟中有两个步骤,它们在单独的图转换中建模。第一个是初始化,其中每个进程的当前行为的初始事件被调度在时间0。图7所示的模型就是应用这个初始化语法的结果。第二个转换是主要的模拟循环,它的一些规则如图8所示。第一个规则消耗队列中的第一个事件(“底部”事件之后的事件)并将当前时间提前。该规则还创建了一个当应用规则时,执行DEG事件中指定的操作(使用Python)如果已经存在执行指针,则该规则不适用如前所述,操作 可 以 引 用 共 享 ( 全 局 ) 或 局 部 变 量 。 前 一 个 变 量 的 名 称 前 面有%glob%,并且为模型中的所有进程创建一个变量。手工编码的解析器(由函数parse调用)执行状态操作。创建了一个与此规则类似的规则,用于从DEG规范中没有DEGEventType第二条规则搜索所有离开上次执行的事件的传出转换。如果转换条件为真,则调度新事件并将其放置在事件队列中。 转换指定应生成事件的引脚。新调度的事件指向接收它的进程。如果有几个进程连接到产生事件的进程的输出引脚,规则会随机选择一个。这是定义语言时的设计决策。其他选择可能是为每个连接的进程生成一个事件。为了丢弃通过未连接的引脚发送的事件,定义了与此类似的规则。规则3与前一条类似,但在转换中没有指定端口时执行。在这种情况下,事件被定向到生成它的进程。这是一种表示法的便利,因为可以将一个进程的一个输出引脚连接到其一个输入引脚,并使用规则2生成内部事件。规则4处理改变进程行为的事件。规则计划(在当前时间)行为的初始事件。对于行为没有初始事件的情况,也定义了类似的规则。最后,规则5删除执行指针。该规则利用J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145155规则1.− ConsumeEventLHSNACRHS行为:B名称:SisExternal:False行为:B第5条-删除指针名称:SisExternal:FalseLHS RHS执行指针<当前行为<当前行为时间=Tact最终=Tf执行指针ST1时间=t1最终=Tf执行指针条件(t1= Tf)规则2.− GenerateEvent行动exec parse(Action)NAC执行指针1LHSOutPort端口行为:BName:lifeRHSOutPort端口行为:BName:life<当前行为如果cDo:100经t通过端口2<当前行为如果cDo:100经t通过端口211产品名称:S12产品名执行指针Do:100执行指针S1Tact+tDo:100Do:100S2T1S2T1时间=Tact时间=Tact最终=Tf最终=Tf条件(t1= Tact+t = t2)AND eval(c)规则3.− GenerateEventInternalNAC LHSRHS执行指针1行为:BName:行为:BName:<当前行为如果cDo:100经t通过<如果cDo:100经t通过12产品名称:当前行为12产品名称:2产品名执行指针Do:100执行指针Do:100Do:100时间=Tact最终=TfS2T1S3T2时间=Tact最终=TfS2T1S1Tact+t条件(t1= Tact+t = t2)AND eval(c)规则4. -ChangeBehaviourNAC LHSRHS行为:B行为:B1行为:B行为:B1执行指针<<Name:lifeisInitial:TrueName:lifeisInitial:TrueDo:Do:<<工艺流程>>产品名称:Y<<工艺类>>名称:x<<工艺流程>>产品名称:Y<<工艺类>>名称:xS3T2<<工艺流程>>产品名称:Y<<工艺类>>名称:x<<工艺流程>>产品名称:Y<<工艺类>>名称:xS3T2S3T2<<工艺流程>>产品<<工艺类>>名称:x<<工艺流程>>产品名称:Y<<工艺类>>名称:x<<工艺流程>>产品名称:Y<<工艺类>>名称:x<<工艺流程>>产品名称:Y<<工艺类>>名称:x<<工艺流程>>产品名称:z<<工艺流程>>产品名称:zS1T2底部−1底部−1发票B1T1S1T2底部−1ST1S1T2底部−1S1T2图8.第八条。DEG仿真规则SPO重写的属性(关于悬挂边),删除指针的所有传入和传出边。图9显示了图7中模型执行的一些步骤。在第一步中,使用到达事件并创建执行指针。在第二步中生成到达事件,最后在第三步中删除执行指针模拟继续进行,<<156J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145处理队列中的第一个init事件。图9.第九条。执行模型的一些步骤5AToM3中的一个示例:代码生成本节展示了新定义的形式主义的有用性及其在AToM3工具中的实现的另一个例子。如前所述,AToM3允许通过元建模定义视觉语言,并通过图形转换规则对其进行操作。图重写引擎可以被配置为在DPO或SPO方法中工作,并且能够应用并行规则[8](在合并与共享的意义上)。图10显示了编辑规则“ConsumeEvent”过程中的AToM3从LHS到RHS的映射通过用数字标记图元素来给出。在RHS中,我们可以包含Python代码来指定属性值,或者从LHS中的原像元素复制它们。在AToM3中,我们可以利用Python的解释性质,Python是工具的实现语言。在生成的DEG建模环境(如图7所示)中,我们可以在如果:真之后:10.0DO:空闲=1IF:idleAFTER:0.0DO:queue−−idle=时间=0最终=100IF:idleAFTER:0.0DO:queue−−idle=时间=0最终=100开始进程如果:真之后:10.0DO:空闲=1开始进程通过IF:trueAFTER:0通过到达到来(初次)到达(外部)队列=0初始化(初通过到来执行:队列++IF:queue>0AFTER:0IF:trueAFTER:到来通过( 对外)队列=0初始化(初如果:真之后:10.0到达通过( 对外)行为机器DO:空闲IF:trueAFTER:0通过到达到来(初次)到达(外部)到来执行:队列++IF:queue>0AFTER:0结束过程IF:trueAFTER:0.0结束过程行为机器DO:空闲IF:trueAFTER:0.0到达流程到达流程外埠输入端口到来In _Piece<<流程类>>名称:到货<<工艺类>>产品名称:机床输出端口输出_件外埠输入端口到来In _Piece<<流程类>>名称:到货<<工艺类>>产品名称:机床输出端口输出_件Name:zhangName:zhang当前行为当前行为当前行为当前行为当前行为当前行为<<工艺流程>>名称:到<<工艺流程>>产品名称:1<<工艺流程>>产品名称:2<<工艺流程>>名称:到<<工艺流程>>产品名称:1<<工艺流程>>产品名称:2输出输出输出执行指针出来在于出来底部−1到达0初始初始100.0分底部−1初始初始100.0分如果:真之后:10.0DO:空闲=1IF:idleAFTER:0.0DO:queue−−idle=时间=0最终=100DO:queue−−idle=开始进程如果:真之后:10.0DO:空闲=1IF:idleAFTER:0.0时间=0最终=100开始进程通过IF:trueAFTER:10通过到达到来(初次)到达(外部)队列=0初始化(初通过到来执行:队列++IF:queue>0AFTER:0IF:trueAFTER:到来IF:trueAFTER:10通过到达到来(初次)到达(外部)队列=0初始化(初到来执行:队列++IF:queue>0AFTER:0如果:真之后:10.0到来通过( 对外)通过(对外)结束过程结束过程行为机器IF:trueAFTER:0.0DO:空闲=1THROUGHOut_Piece行为机器IF:trueAFTER:0.0DO:空闲=1THROUGHOut_Piece到达流程到达流程外埠输入输出输入端口到来单件到货In _Piece<<流程类>>名称:到货<<工艺类>>产品名称:机床输出端口输出_件<<流程类>>名称:到货<<工艺类>>产品名称:机床输出端口输出_件Name:zhangName:zhang当前行为当前行为当前行为当前行为当前行为当前行为<<工艺流程>>名称:到<<工艺流程>>产品名称:1<<工艺流程>>产品名称:2<<工艺流程>>名称:到<<工艺流程>>产品名称:1<<工艺流程>>产品名称:2执行指针于于出来于于出来底部−1初始初始抵达10抵达10100.0分底部−1初始初始抵达10抵达10100.0分消费事件DeletePointerGenerateEventGenerateEventInternalJ. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145157图10个。在AToM3中编辑图形语法规则。事件发生时执行的DEGEventType操作。通过这种方式,DEG的形式主义可以用于可视化建模的(文本)事件驱动的编程环境,如Visual Basic的风格的应用程序。例如,这允许在初始事件中为每个组件构建(手动)用户界面,并在其他事件中修改它。通过这种方式,模型的用户界面由AToM3内部的模拟器驱动。或者,我们构建了一个代码生成器,它从DEG模型中生成Python代码。通过这种方式,模型可以在AToM3之外运行,并与其他代码集成,以形成完整的应用程序。我们为进程和DEG模拟器使用一些手工编码的基类。请注意,模拟器作为图转换规则的形式(和视觉)定义是如何作为Python编写的模拟器的可执行规范的。生成的类从这些基类继承. AToM3为每个流程类创建一个Python类。这个类具有存储不同端口(和连接的进程),行为和组件可以处理的事件的结构。对于每个(非外部)事件类,在生成的类中创建一个方法。当组件使用相应类型的事件时,将调用该方法。为模型生成另一个Python类。此类创建并连接流程实例,并运行模拟。有两种方法可以运行模拟。在第一种情况下,模拟“尽可能快地”运行,以这种方式,事件中的计时并不代表实时。在第二种情况下,模拟是“实时”运行的的158J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145如果在执行一个事件后,下一个事件将在10秒内发生,则暂停执行10秒。很容易修改生成的代码,以便使生成的应用程序的界面中的用户动作产生事件,这些事件包括在事件队列中,被定向到适当的组件(通过在每个进程中调用适当的事件方法通过这种方式,可以遵循下一系列步骤,以生成应用程序并验证其正确性。第一步是对AToM3中的应用组件进行建模,如图7所示。在这一步中,仍然没有在状态操作(“DO”属性)中包含关于用户界面的信息。一旦模型完成,在第二步中,我们可以模拟模型,它对应于主要的应用程序逻辑。今后将采用进一步的分析技术(见结论部分)。在第三步中,可以在“DO”事件属性中包含Python代码,以便执行其他操作,例如构建用户界面。在第四步中,可以在AToM3中模拟模型(使用用户界面)。最后,可以生成应用程序,并可以添加其他代码,例如将用户界面事件与模型事件链接起来。这项任务的自动化取决于未来的工作。图11显示了一个示例(仅在规范级别),其中我们定义了两个组件,一个Cell具有一个名为color的属性和四个行为:空闲(不做任何事情)、移位(在接收到事件时,改变颜色并延迟转发事件)、耗尽(改变颜色但不转发事件)和延迟(转发事件但不改变颜色)。单元格组件与能够改变单元格行为的控制器组件(稍后将链接到用户界面中的按钮)相关联。此外,该模型有一个实例层,我们连接了五个细胞(最后一个连接到第一个)及其各自的控制器。图12显示了最终的应用程序。我们已经将可变颜色画布与细胞组件相关联。画布还显示组件当前行为的名称。我们已经将鼠标单击事件与生成更改事件的方法绑定在一起。 我们已经关联了一个按钮(标记为“更改!”)与每个控制器组件绑定,并将鼠标点击与生成CLICK事件的方法绑定。总的来说,手工添加的代码量(在模型中的状态操作中,以及在代码生成之后)可以忽略不计。J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145159图十一岁在AToM 3中模拟见图12。 生成的6相关工作关于形式主义,已经有一些方法来扩展事件图。在[4]中报告了两个扩展:取消边缘和参数传递。在[5]中,事件图被用来描述单个组件的行为,但是没有机制来表达通过特定端口在组件之间传递的事件。据作者所知,没有扩展已提出适应事件图基于组件的仿真。定义的框架有点类似于DEVS(离散事件系统规范)[13]。在DEVS中,原子模型通过定义内部和外部事件的转换函数以及输出函数和设置所花费时间量的时间提前函数来指定在每个状态下(如果没有外部事件发生)。 原子DEVS可以耦合到以形成复合DEV。在这种情况下,有一些函数可以将事件名称从输出端口转换到输入端口。这允许更容易地重用160J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145件.在我们的框架中,这种转换可以通过包含双端口组件(“转换器”)来完成我们还允许组件具有不同的行为,并且不限制用于指定每个组件的模拟语言的类型(对于每个组件可能是不同的),如果其语义是基于图转换的话。利用图变换的理论结果可以研究多形式模型的性质这项工作也与UML 2.0 [12]中的组件概念有某些相似之处。在这个新版本的UML中,组件有端口,它们中的每一个都可以声明所需的和所提供的接口,这些接口指定了组件可以发送和接收的消息的类型。在形式主义的定义技术方面,图变换已被广泛用于形式主义的操作语义的定义我们可以找到两个主要的方法。在第一种方法中,结构和行为都是用一些视觉语言来指定的,并且使用图形语法来“解释”这种行为。目前的工作是这种方法的一个例子。在第二种方法中,结构描述与以前的可视化语言,但行为是直接实现的图形重写规则的手段。也就是说,模型中没有任何东西告诉我们关于行为的信息:所有的信息都在规则中。这种方法的例子可以在[6]中找到,其中带有端口的进程网络7结论在这项工作中,我们扩展了经典的事件图,使其在基于组件的模型中使用语言的定义已经通过元建模和图形转换正式完成该语言有一个规范级(在此定义进程类、端口和行为)和一个实例级(在此实例化不同的类)。定义规则是为了检查层内和层间的一致性。语言的形式化定义(通过Meta建模和图形转换)和代码生成的结合允许在生成应用程序之前分析模型。在我们的例子中,我们只实现了一个模拟器与图形变换,但进一步的模型属性可以使用图形变换的理论结果进行调查。其中包括对并行性、死锁、非确定性、函数行为等的分析。J. de Lara/Electronic Notes in Theoretical Computer Science 127(2005)145161在未来,我们计划将目前的工作扩展到分布式离散事件仿真模型。为此目的,私有事件队列是必要的,以及协议的模型(以规则的形式)。进一步计划的扩展包括,例如,测试事件到达组件的端口的可能性,通过多个端口发送事件以及事件层次结构的定义。后一种可能性允许在规范中包含抽象事件,以使其更加紧凑。最后,框架的其他扩展,使其更适合基于代理的模拟也在考虑之中。对于这个应用程序域,需要一种在运行时更改模型结构的方法。这包括创建和删除新组件,以及更改它们的连接。确认我引用[1] 阿特金森,C., Kühne,T. 2002年。 读取一个检查UML基础结构的chit。 ACMTtransactions onModeling and Computer Simulation,2009年12月(4),页:290-321。[2] 巴多尔河,Ehrig,H.,de Lara J.,和Taentzer,G. 2004. 将Meta建模与图形转换相结合,以实现高效的视觉语言定义和模型操作。在ETAPS/FASE214-228[3] 巴多尔河2002. 视觉语言的视觉环境。计算机程序设计科学44页:181-203. 另见GENGED主页:http://tfs.cs.tu-berlin.de/∼genged/.[4] Buss,A. 2001. 基本事件图建模模拟欧洲新闻,第31期,技术说明。页:1比6[5] Buss,A. 2000. 2000年冬季仿真会议的基于虚拟机的仿真建模程序,页:964-971[6] Degano,P.,蒙塔纳里湾1987. 基于图重写Journal of the ACM,34(2),April,pp.:411-449[7] de Lara,J.,Vangheluwe,H. 2002. AToM3:一个多形式主义建模和Meta的做模特。在Proc.FASE '02,Springer LNCS 2306,pp. 174 - 188。另请参见AToM3主页,http://atom3.cs.mcgill.ca[8] de Lara,J.,Erme
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Aspose资源包:转PDF无水印学习工具
- Go语言控制台输入输出操作教程
- 红外遥控报警器原理及应用详解下载
- 控制卷筒纸侧面位置的先进装置技术解析
- 易语言加解密例程源码详解与实践
- SpringMVC客户管理系统:Hibernate与Bootstrap集成实践
- 深入理解JavaScript Set与WeakSet的使用
- 深入解析接收存储及发送装置的广播技术方法
- zyString模块1.0源码公开-易语言编程利器
- Android记分板UI设计:SimpleScoreboard的简洁与高效
- 量子网格列设置存储组件:开源解决方案
- 全面技术源码合集:CcVita Php Check v1.1
- 中军创易语言抢购软件:付款功能解析
- Python手动实现图像滤波教程
- MATLAB源代码实现基于DFT的量子传输分析
- 开源程序Hukoch.exe:简化食谱管理与导入功能
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功