【CPN TOOLS建模学习】设置变迁的属性

使用Tab键在属性之间进行切换

与一个变迁相关联的四个铭文,均为可选项:

  • 变迁名称
  • 守卫(Guard)
  • 时间
  • 代码段

变迁延迟 必须是一个正整数表达式。该表达式前面加上@+,这意味着时间铭文的形式为@+ delayexpr。在添加时间铭文之前,铭文的默认文本为@+。时间延迟始终相对于当前时间添加。例如,如果当前时间为10,而时间延迟为@+2,则发送到输出库所的令牌的时间戳将为12。缺失的时间铭文等同于零延迟。尽管弧的延迟存在,变迁的延迟仍适用于所有输出令牌。在只有一个输出弧的情况下也是如此。例如。

点击sim面板里的"执行一个变迁":

点击三次后,流程执行完如下图所示:

guard 是一个CPN ML布尔表达式,其值为真或假。在添加guard之前,铭文的默认文本为[ ]。guard可以是单个布尔表达式,也可以是布尔表达式的列表[b-exp1, b-exp2, ..., b-expn]。只有在guard为真时,变迁才会触发,而guard限制了输入令牌token的选择。例如:

执行完流程后:

此外,guard 允许通过将来自不同库所的令牌参数组合在表达式中进行比较。以下片段模拟了从以太网段提取帧的过程:

执行完:

根据变迁"get"的表达式"#1 f = addr",只有某令牌"addr=2=f中的第一个属性"时,此令牌才能通过。

工作站的自身地址存储在库所"own"中。它只进行检查,因此使用了双向弧。

每个变迁可以附带一个代码段,其中包含ML代码。当其父变迁发生时,代码段将被执行。代码段可以使用CPN变量,并可以绑定位于输出弧上的、未在其他地方绑定的CPN变量。每个代码段可以包含:

• 输入模式(可选)

• 输出模式(可选)

• 代码动作(强制)

输入模式是一个CPN变量的元组,以关键字"input"开头。输入模式列出了可以在代码动作中使用的CPN变量。代码动作可以使用这些CPN变量的值,但不能更改它们。即使在声明节点中声明了同名的ML标识符,输入模式中列出的CPN变量也可以在代码动作中使用。如果省略输入子句,则意味着在代码动作中不能使用任何CPN变量。

输出模式是一个CPN变量的元组,以关键字"output"开头。输出模式列出了由于执行代码动作而需要更改的CPN变量。输出模式必须是一个CPN变量或没有重复的CPN变量元组。如果省略输出子句,则意味着没有计算任何CPN变量。

代码动作是一个以关键字"action"开头的ML表达式。代码动作不能包含任何颜色集、CPN变量或引用变量的声明。然而,它可以应用用户声明和预声明的常量、操作和函数。此外,可以通过let-in-end为局部使用定义新的函数和常量。代码动作作为一个局部声明在包含输入模式中指定的CPN变量的环境中执行。这保证了代码动作不能直接更改任何CPN变量,而只能更改它们的局部副本。当代码动作执行完毕后,其结果用于绑定输出模式中的CPN变量。当在包含输入模式变量的环境中评估代码动作时,必须生成与输出模式相同类型的结果。如果没有给出输出模式,则其类型被假定为unit。代码段用于对输入令牌进行更复杂的处理。令牌求和示例可以使用代码段表示为:

执行一次变迁:

执行两次:

执行完:

相关推荐
东林知识库20 分钟前
2024年10月HarmonyOS应用开发者基础认证全新题库
学习·华为·harmonyos
随便取个六字30 分钟前
C++学习:类和对象(二)
c++·学习
OMGmyhair1 小时前
【 C++ 】C++11的初步学习
开发语言·c++·学习
l1x1n02 小时前
【IT基础中英笔记】符号系统与数据类型 | CompTIA ITF+
笔记·学习
大只因bug2 小时前
基于Springboot的在线考试与学习交流平台的设计与实现
java·spring boot·后端·学习·mysql·vue·在线考试与学习交流平台系统
黄交大彭于晏3 小时前
第五天学习总结:C语言学习笔记 - 数组篇
c语言·笔记·学习
cl°3 小时前
WPF中视觉树和逻辑树的区别和联系
经验分享·学习·c#·wpf
Ylucius3 小时前
14天速成前端 ------学习日志(已完结)------ 后端程序员学习了解前端
java·开发语言·前端·vue.js·学习·状态模式·1024程序员节
MogulNemenis4 小时前
随机题两题
java·后端·学习·算法
懒惰才能让科技进步4 小时前
从零学习大模型(九)-----P-Tuning(下)
人工智能·深度学习·学习·chatgpt·prompt·transformer