问题标签 [statechart]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
simulink - 状态机/状态图周期内转换
如果定期调用状态机(在 MatLAB Simulink 或 PLC 程序中),是否可以在同一 plc 循环/simulink 步骤期间在状态之间转换?
在 Twincat 3 (PLC) 中有一个“循环内部”选项,如下链接所示: https ://infosys.beckhoff.com/content/1033/tf1910_tc3_uml/63050395607969163.html
使用这种选项有什么限制吗?该系统是否仍然具有实时能力?
编辑因为我不能写长评论:
1-在您的示例中,如果状态是循环内状态并且负责为电机生成设定点,直到达到所需的设定点(因此需要很多时间)。程序可能会“卡”在这种状态下,从而导致任务超限,并违反实时约束。建议的解决方案:控制最大值。带有变量“最大 DO 循环调用”的此状态的调用次数: https : //infosys.beckhoff.com/english.php?content=../content/1033/tf1910_tc3_uml/63050395607969163.html&id=可能/更好地在单独的 PLC 任务中执行此任务?
2- 对于没有循环内状态的状态图,程序停止执行图,保存状态,并在对当前活动状态进行一次评估后执行程序的其余部分。如果图表中的所有状态都是 In-Cycle,程序在哪里停止执行图表以执行程序的其余部分?
唯一的解决方案是设置一些非循环内的状态并确保它们足够快地达到而不会导致任务溢出?
gis - 如何向居住在一个特定 GIS 区域的人员代理发送命令?考虑有几个 GIS 区域
假设 4 (a,b,c,d) GIS 区域有 1000 个人代理。在某个事件中,我想与居住在 GIS 区域 "a" 内的所有代理进行通信。在“a”区域中,我们有 200 个人员代理。如果我向人员状态图发送消息或命令,我如何确保只有居住在该特定 GIS 区域“a”的 200 个人员代理收到我的命令?有什么方法可以建模吗?
view - 是否可以在执行期间同时显示来自不同代理的所有状态图?
我有几个代理。在每个代理中,我都制作了一个状态图。一些州与其他代理人的其他州重叠。通过我的模拟,我想显示代理当前处于哪个状态。是否可以同时显示所有状态图(在执行期间)?例如,通过 viewArea?我只在状态图已经在 main 中时才在 AnylogicHelp 中找到示例,但如果它们在代理中则不会。我对每一个答案都很满意,非常感谢。
新的 感谢你的快速回复。我不清楚地提出了我的问题。我从“三天内的 AnyLogic”或“仿真建模大书”中知道您建议的解决方案。我的意思是我想在 Main 中并排显示所有代理的状态图。我不能只是将这些状态图拖到 main 中,因为有些代码不再起作用了。所以我有几个具有某些属性(参数等)的不同代理。在每个代理中,我都创建了一个状态图。我的子目标之一是通过状态图(在 Main 中)同时显示所有代理的进程。我想看看代理在模拟执行期间处于哪个状态。在执行期间,您可以通过选择代理来显示状态图,请参见插入图。我想主要同时显示所有状态图,但在某种程度上,它们仍留在各自的代理中。对不起……我的英语不是很好。非常感谢。:)
repeat - 如何在特定条件下重复状态图?
如何在特定条件下重复状态图?我不想转换回第一个状态。
例如,代理 A 有一个状态图。并且代理 B 也有一个状态图。代理 A 中的最后一个状态包含在代理 B 的状态图的开头。代理 B 在此之后列出其他状态。在代理 A 的状态下,代码创建代理 B。直到满足特定条件。
如果我在代理 B 中进行转换(如果需要,使用消息)从最后一个状态返回到第一个状态,则会创建新的代理,并且所有状态都会一次又一次地运行。现在我希望重复代理 b 中的状态图。有人有想法吗?
(顺便说一句,我已经转换回代理 A 中的状态,但这是需要的)。
我对每一次帮助感到高兴。:)
新的更多细节***** 代理 A 是一台机器。相应的状态图描述了机器中当前发生的情况,例如填充、压制、弹出。在例如“按下”的状态下,代理B被创建。它是一种产品。产品应离开机器。因此,与代理 A 一样,它也具有“按下”状态和“弹出”状态。代理 B 中的“弹出”状态被划分为更详细的级别。
产品是在“新闻”状态下创建的。因此,Agent B 的第一个状态以“pressed”开始。公共状态同时运行。不同之处在于机器的“弹出”,例如描述机器部件的运动。而产品中的“弹出”描述了例如产品在机器中的运动,即“向上运动”等。制造状态出现两次的原因是我想尽可能详细地描述代理。
代理 A:当“Eject”完成时,转换返回填充状态,因为机器继续工作直到满足某个条件。例如,直到没有更多的原材料。
代理B:“弹出”后,产品仍在处理中,例如收集在容器中,一段时间后进行检查等。在最后一个状态之后,只有一个“最终状态”出现。原因:产品不是一次又一次地走同样的步骤,而是一次又一次地创造出一个新产品。
当我运行模拟时,机器一次又一次地运行这些步骤。这是所希望的。但是我的产品只通过它的状态图一次并且保持在它的最终状态。但这是错误的。例如,如果我想统计掉到容器中的产品,则集合中只显示一个 1。但是应该有很多。
我希望你能打开照片在这里输入图片描述
c++ - 嵌套状态机 C++
第一次在 Stackoverflow!我是 C++ 和 OOP 的新手,目前在尝试用 C++ 设计 StateChart 时遇到问题。
我找到了一些解释如何创建具有 n 状态的状态机的文档,以及一个模拟红绿灯中红-绿-黄转换的代码示例。
我报告以下代码:
标题
cpp
我的问题是:我想用每个上层状态的子状态来扩展这个例子,例如 Red_1、Red_2、Red_3、Green_1、Green_2、Green_3、Yellow_1、Yellow_2、Yellow_3 ......
现在,我想到的最简单的事情是“考虑”同一级别的所有状态并使用上面报告的结构。就个人而言,我不喜欢这个解决方案,我想知道是否可以实现更好的设计。我尝试修改代码如下(我只报告“红色”类):
我在cpp中添加了以下内容:
我收到以下错误消息: undefined reference to 'vtable for myTLRed_internal1'
老实说,不知道那是什么,也不知道这是否是正确的方法。任何帮助将非常感激。非常感谢,很抱歉这么长的帖子。
对所有指出存在大量内存泄漏的人进行编辑:您是完全正确的,我知道这一点,但为了简单起见,只报告了我找到的代码。避免内存泄漏的下一个改进是使用智能指针,这是我的计划。
javascript - 使用 xstate,是否可以配置一个适用于所有状态并在所有状态和子状态中以相同方式处理的事件?
我是 xstate 的新手,我正在尝试在应用程序中使用它,用户可以根据父状态和/或子状态在应用程序中请求不同的东西。但是,无论应用程序处于什么状态/子状态,用户都应该能够提出一些请求。对这些事件的响应是相同的,无论之前的状态是什么。如何配置此事件,以便不必在所有状态/子状态下重复定义它?
state - 是否可以同时在一个状态图中运行多个状态?
是否可以同时在一个状态图中运行多个状态?
我的模拟模型是基于代理的。
A) 目前,为了简单起见,我认为我的流程是一条连续的链。这意味着只有当产品从机器中弹出时,该过程才能重新启动。机器的各个站以状态表示。
B)现在我想代表以下内容:机器应该能够在一次运行中同时运行多个状态。示例:如果制成品刚从机器中弹出,则灌装站和压制站同时有原料。这意味着在最佳时间生产的产品比我在 A 中查看过程时生产的产品更多。
我会很高兴有任何帮助。:)
anylogic - 我们如何根据状态图更改 3D 动画对象(代理表示)颜色?
我有一个人代理,他有一个人的 3D 表示(来自 anylogic 的人的默认 3D 图片)。我们可以根据状态改变那个 3D 人物代理的颜色吗?例如,当一个代理从状态 A 移动到 B 时,它的颜色会从黄色变为红色。怎么做?我尝试使用 shapeFillColor,但 anylogic 没有检测到 3D 人体表示为形状(如多边形、三角形),状态图没有接受我的命令。如果代理是用一些多边形手动绘制的,我们是否只能更改代理的颜色?将不胜感激任何反馈。谢谢,
parameters - 如何在删除之前将代理的选定参数发送/复制到其他代理?
我有一个代理 A。代理有一些参数。代理正在执行一项任务。当他完成时,代理被删除。
与此同时,在其他代理 (BD) 中会进行进一步的处理。在处理代理 (E) 的最后一步中创建。代码将在某个状态(其状态图)中执行。为此,必须访问已删除代理的参数。
如何将代理 A 的参数发送/复制到中间代理,然后中间代理将参数发送给代理 E。感谢您的帮助。:)
uml - 状态图 - entry 和 do 有什么区别?
我知道 action 在entry时开始执行,并且只要它处于状态,动作就会执行do 。
但我认为entry缺乏定义,它是否类似于do或动作在进入状态时执行并且即使在离开状态后仍继续执行?