【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。代码段用于对输入令牌进行更复杂的处理。令牌求和示例可以使用代码段表示为:

执行一次变迁:

执行两次:

执行完:

相关推荐
西岸行者13 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意13 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码13 天前
嵌入式学习路线
学习
毛小茛13 天前
计算机系统概论——校验码
学习
babe小鑫13 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms13 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下13 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。13 天前
2026.2.25监控学习
学习
im_AMBER13 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J13 天前
从“Hello World“ 开始 C++
c语言·c++·学习