介绍
如果能够很好地实现库所的排队规则和堆栈规则的仿真,如:TCP通道上的通信等,那将非常有用。虽然,目前CPN Tools还不支持这个,但是建模者可以很容易地做到。
示例
这是一个很简单的模型,其中只有发出者和接收者。
发出者,将信息包发出到网络中去。
接收者从网络中接收信息包。
堆栈
我们想要网络具有后进先出的行为(这有点不现实,但是我们只是介绍一个示例)。
我们将库所的类型从“T”改变为“List
T”,使输入弧引起的变换依次从前排列在库所队列中,输出弧引起的变换依次从库所队列头部移出。
在示例中执行上述操作时,可以得到下图所示结果:
声明的变化
- 增加新的类型"PACKAGEs",也即"list PACKAGE"
- 增加新类型"PACKAGEs"的新变量。
网络中库所的变化
- 将库所的类型从"PACKAGE" 改为"PACKAGEs"
- 增加/改变列表的初始标识。在这个示例中初始标识是空标识,所以增加空列表"[]"。如果初始标识不为空,如:"1`1++2`4",此时需要将列表的初始标识改为"[1, 4, 1]"
弧的变化(输入和输出)
- 将弧的标注从"p"变为"p::ps",这里"ps"是指新类型"PACKAGEs"的一个新变量。
- 在相反的方向增加一个新弧,且弧的标注为"ps"。
队列
我们想要网络具有先进先出的行为,就像TCP流的行为。
我们将库所的类型从“T”改变为“List
T”,使输入弧引起的变换依次添加到队列中,输出弧引起的变换依次从库所队列头部移出。
区别于堆栈的唯一不同点是:输入弧引起的变换是依次添加到队列中去,而不是追加到队列的前面。在示例中执行上述操作时,可以得到下图所示结果:
声明的变化
- 增加新的类型 "PACKAGEs",也即 "list PACKAGE"
- 增加新类型 "PACKAGEs"的新变量。
网络库所的变化
- 将库所的类型从 "PACKAGE" 改为 "PACKAGEs"
- 增加/改变列表的初始标识。在这个示例中初始标识是空标识,所以增加空列表 "[]"。如果初始标识不为空,如: "1`1++2`4",此时需要将列表的初始标识改为 "[1, 4, 1]"
输出弧的变化
- 将弧的标注从 "p"变为 "p::ps",这里 "ps"是指新类型 "PACKAGEs"的一个新变量。
- 在相反的方向增加一个新弧,且弧的标注为 "ps"。
输入弧的变化
- 将弧的标注从 "p"变为"ps^^[p]",这里"ps"是指新类型 "PACKAGEs"的一个新变量。
- 在相反的方向增加一个新弧,且弧的标注为 "ps"。
优先排队
我们想要网络具有优先排队的行为,也即包的优先度决定了它被处理的次序。类似于IP中的服务品质选项,在这个选项中从八个层面的优先度来确认数据包。
我们将库所的类型从“T”改变为“List
T”,根据输入弧引起变换元素优先度的不同将其分别插入到列表中去,输出弧引起的变换元素依次从列表头部移出。
区别于先进先出队列的不同点是:输入弧引起的变换元素不是依次添加到列表中去,而是根据它们优先度的不同分别加入到列表中去。在示例中执行上述操作时,可以得到下图所示结果:
声明的变化
- 增加新的类型 "PACKAGEs",也即 "list PACKAGE"
- 增加新类型 "PACKAGEs"的新变量
- 增加"higherPriority"函数来决定当前包是否比其它包具有更高的优先度
- 增加"pinsert"函数,处理依据包的优先度的不同插入到列表中去的事项
网络库所的变化
- 将库所的类型从 "PACKAGE" 改为 "PACKAGEs"
- 增加/改变列表的初始标识。在这个示例中初始标识是空标识,所以增加空列表 "[]"。如果初始标识不为空,如: "1`1++2`4",此时需要将列表的初始标识改为 "[4,
1, 1]"
输出弧的变化
- 将弧的标注从 "p"变为 "p::ps",这里 "ps"是指新类型 "PACKAGEs"的一个新变量。
- 在相反的方向增加一个新弧,且弧的标注为 "ps"。
输入弧的变化
- 将弧的标注从 "p"变为 "pinsert p ps",这里 "ps"是指新类型 "PACKAGEs"的一个新变量。
- 在相反的方向增加一个新弧,且弧的标注为 "ps"。
示例
下述示例可以下载到: