任何逻辑端口交替使用(?)
Anylogic ports alternate use (?)
在使用预定义的库创建了几个模型之后,我正在从头开始构建模型。在这个模型中,我需要几个不同的代理在它们之间交换信息,我使使用动态变量成为可能,并使它们从上层代理可见。连接器将连接块。在图片中我所做的和我的意思的一个例子。
因为我有很多信息要交换,所以我使用“数组”选项并使用适当的维度,为输入创建了一个变量,为输出创建了一个变量。
我想知道是否可以使用端口使它们看起来更干净并具有更好的功能。我看到它们连接到现有的库组件,但从未在从头开始制作的代理中看到过。在我读到的文档中,我可以使用命令“port.send(obj)”和“port.receive(obj)”,但我无法做任何工作。
所以我的问题是:是否可以使用端口在代理之间通过代码(可能是代理,或动态变量或其他)发送对象?如果是,如何在目标代理中触发接收动作?
非常感谢!
P
通常,您可以向对象添加端口,甚至可以创建自定义端口类型,如 here 所述。然而,为了向端口发送消息/从端口发送消息,消息必须扩展 Agent 并且端口必须通过连接器连接。实现模式为:
- 内部发件人代理:有一个 Enter 块连接到端口
- Inside Receiver 代理:有一个端口连接到 Exit 块
- 在主代理中:将发送方端口连接到接收方端口
- 内部发件人:创建一个
msg
代理并使用 enter.take(msg)
- 上面会执行:Enter -> Sender port -> Receiver port -> Exit
- 在 Receiver
中的 Exit 块的 on Exit
属性 中执行某些操作
我终于明白如何按照我的想法去做了。
端口能够仅通过一个连接器发送和接收数据。正如@Artem 所建议的,不再需要后续块,但他的回答给了我正确的建议来找到我自己的解决方案。
当端口在它们之间交换消息时,当他们收到消息时,他们称之为“msg”;所以“msg”可以被提供给函数,或者它可以用于解决内部字段(即:msg.custom_field)。
要充分利用端口,应通过启用开发人员模式来实现低级使用细节。为此,请遵循以下指示:
工具 -> 首选项 -> 开发 -> 库开发者模式。
选择这个声音,现在端口在点击时有那些新的声音:
端口现在可以配置为“in”和“out”消息类型(如果需要它们也可以不同),并且可以在端口接收或发送消息时关联回调函数。
例如,在图 1 中,我设置了一个“doSomething”函数,它接受收到的消息 class 并对其执行一些操作。
要发送消息,应使用“port.send(something)”代码,发送前将考虑 OnSend 函数。
也可以创建继承端口 class 类型的自定义端口,但我没有把自己逼到白兔洞那么深,抱歉。
在图 2 中,有一个我用(工作)端口创建的小型测试平台。我希望这个小指南可以帮助到大家,即使这种用途只是为了非常特殊的需要。
在使用预定义的库创建了几个模型之后,我正在从头开始构建模型。在这个模型中,我需要几个不同的代理在它们之间交换信息,我使使用动态变量成为可能,并使它们从上层代理可见。连接器将连接块。在图片中我所做的和我的意思的一个例子。
因为我有很多信息要交换,所以我使用“数组”选项并使用适当的维度,为输入创建了一个变量,为输出创建了一个变量。 我想知道是否可以使用端口使它们看起来更干净并具有更好的功能。我看到它们连接到现有的库组件,但从未在从头开始制作的代理中看到过。在我读到的文档中,我可以使用命令“port.send(obj)”和“port.receive(obj)”,但我无法做任何工作。 所以我的问题是:是否可以使用端口在代理之间通过代码(可能是代理,或动态变量或其他)发送对象?如果是,如何在目标代理中触发接收动作? 非常感谢! P
通常,您可以向对象添加端口,甚至可以创建自定义端口类型,如 here 所述。然而,为了向端口发送消息/从端口发送消息,消息必须扩展 Agent 并且端口必须通过连接器连接。实现模式为:
- 内部发件人代理:有一个 Enter 块连接到端口
- Inside Receiver 代理:有一个端口连接到 Exit 块
- 在主代理中:将发送方端口连接到接收方端口
- 内部发件人:创建一个
msg
代理并使用enter.take(msg)
- 上面会执行:Enter -> Sender port -> Receiver port -> Exit
- 在 Receiver 中的 Exit 块的
on Exit
属性 中执行某些操作
我终于明白如何按照我的想法去做了。 端口能够仅通过一个连接器发送和接收数据。正如@Artem 所建议的,不再需要后续块,但他的回答给了我正确的建议来找到我自己的解决方案。
当端口在它们之间交换消息时,当他们收到消息时,他们称之为“msg”;所以“msg”可以被提供给函数,或者它可以用于解决内部字段(即:msg.custom_field)。
要充分利用端口,应通过启用开发人员模式来实现低级使用细节。为此,请遵循以下指示: 工具 -> 首选项 -> 开发 -> 库开发者模式。 选择这个声音,现在端口在点击时有那些新的声音:
端口现在可以配置为“in”和“out”消息类型(如果需要它们也可以不同),并且可以在端口接收或发送消息时关联回调函数。 例如,在图 1 中,我设置了一个“doSomething”函数,它接受收到的消息 class 并对其执行一些操作。
要发送消息,应使用“port.send(something)”代码,发送前将考虑 OnSend 函数。
也可以创建继承端口 class 类型的自定义端口,但我没有把自己逼到白兔洞那么深,抱歉。
在图 2 中,有一个我用(工作)端口创建的小型测试平台。我希望这个小指南可以帮助到大家,即使这种用途只是为了非常特殊的需要。