- 博客(99)
- 收藏
- 关注
原创 监控状态流图中的测试点
此示例展示了如何将数据或状态指定为测试点,你可以在仿真过程中使用浮动范围绘制这些测试点或将其记录到MATLAB基本工作区。关于状态流图中的测试点Stateflow测试点是您可以在模拟过程中观察到的信号,例如,通过使用浮动范围块。您可以使用这些属性指定状态或本地数据作为测试点:Size -标量、一维或二维Type -除ml之外的任何数据类型Location -状态流程图的子状态。
2024-08-21 15:24:03
249
原创 SIL 和 PIL模拟
使用Embedded Coder,您可以运行模型的软件在环(SIL)和处理器在环(PIL)仿真。这些模拟为顶部模型或模型的一部分生成源代码。SIL模拟在您的开发计算机上编译并运行生成的代码。PIL模拟在您的开发计算机上交叉编译源代码,然后在目标处理器或等效的指令集模拟器上下载并运行目标代码。通过SIL和PIL模拟,你可以:测试你的模型和生成的代码在数值上是否相等。注意代码覆盖率。执行代码执行分析。
2024-08-19 10:35:56
802
原创 什么是硬件在环仿真?
硬件在环Hardware-in-the-loop(HIL)仿真是一种实时仿真。您可以使用HIL模拟来测试您的控制器设计。HIL模拟显示了控制器如何实时响应逼真的虚拟刺激。您还可以使用HIL来确定您的物理系统(设备)模型是否有效。在HIL模拟中,您使用实时计算机作为设备模型的虚拟表示和控制器的真实版本。该图显示了典型的HIL模拟设置。台式计算机(开发硬件)包含控制器和设备的实时模型。开发硬件还包含一个接口,用于控制设备的虚拟输入。控制器硬件包含根据控制器模型生成的控制器软件。
2024-08-19 09:00:36
263
原创 使用连接结点表示多条路径
冲突转换是模拟过程中状态流图中来自同一源的两条同样有效的路径。在发生冲突的情况下,Stateflow软件会根据图表中的排序模式(显式或隐式)评估同样有效的转换。对于显式排序(默认模式),冲突转换的评估将根据您为每个转换指定的顺序进行。对于C图表中的隐式排序,冲突转换的评估是基于隐式排序中描述的内部规则进行的。
2024-08-15 15:21:11
753
原创 Moore图的设计考虑
你无法在Moore图表中定义数据存储内存(DSM),因为图表外部的对象会修改DSM对象。状态流程图使用数据存储内存与Simulink®模型共享数据。数据存储内存充当全局数据。包含图表的Simulink层次结构中的其他块和模型可以修改DSM。Moore图不得访问可能发生不可预测变化的数据。
2024-08-14 14:02:16
543
原创 Mealy图的设计考虑
您无法在Mealy图表中定义数据存储内存(DSM),因为DSM对象可以被图表外部的对象修改。状态流程图使用数据存储内存与Simulink模型共享数据。数据存储内存充当全局数据,可以由包含图表的Simulink层次结构中的其他块和模型修改。Mealy图表不应访问可能发生不可预测变化的数据。
2024-08-14 09:01:18
584
原创 Mealy和Moore状态机概述
Mealy和Moore状态机的语义学Mealy和Moore通常被认为是建模有限状态机的基本行业标准范式。通常在状态机模型中,下一个状态是当前状态及其输入的函数,如下所示:状态是本地数据和图表活动的组合。因此,计算状态意味着更新本地数据并从当前活动状态转换到新状态。状态从一个阶段延续到另一个阶段。在这种情况下,Mealy和Moore状态机都有明确的语义。
2024-08-13 16:34:03
342
原创 使用默认转换执行控制图
历史节点记录了状态B4是超级状态B的先前活动子状态的情况。当状态A最初处于活动状态时,此序列完成了与事件E_one关联的Stateflow®图表的执行。6 状态B检测到向状态B.B1的有效默认转换。此示例显示了从OR状态到具有异或分解的超状态的转换,其中定义了到子状态的默认转换。从状态A到超状态B存在有效的转换。当状态A最初处于活动状态时,此序列完成了与事件E_one关联的此状态流程图的执行。从状态A到超状态B有一个有效的转换。历史节点表明子状态B.B4是最后一个活动子状态,它将成为转换的目的地。
2024-08-12 15:47:56
745
原创 Simulink函数如何绑定到状态
当状态A1在t=5时变为非活动状态时,Simulink函数保持计数器值。当A1在t=7时再次激活时,计数器的值与t=5时的值相同。当状态A1在t=5时变为非活动状态时,Simulink函数不保存计数器值。如果Simulink函数绑定到状态,则可以将子系统变量保持在上次执行时的值,也可以将变量重置为初始值。当Simulink函数位于某个状态内时,该函数会绑定到该状态。例如,以下Stateflow图表显示了绑定到状态的Simulink函数。此示例显示了Simulink函数在绑定到状态时的行为。
2024-08-09 14:25:04
404
原创 真值表编程
打开真值表进行编辑在图表中创建并标记真值表后,您可以指定其逻辑行为。要打开真值表,请双击真值表函数。默认情况下,真值表包含一个条件表和一个动作表,每个表都有一行。条件表包含一个决策列D1和一个动作行。
2024-08-08 16:42:14
857
原创 通过定义真值表函数重用组合逻辑
1、在对象选项板中,单击真值表函数图标。将指针移动到图表中新真值表函数的位置。2 输入函数的签名标签,如声明函数参数和返回值中所述。3 对真值表函数进行编程。4 在模型资源管理器中,展开图表对象并选择真值表函数。函数签名的参数和返回值显示为属于函数的数据项。参数的作用域为Input。返回值的作用域为Output。5 在每个参数和返回值的“data properties”对话框中,指定数据属性。6 创建你的函数所需的任何其他数据项。你的函数可以访问自己的数据或属于父状态或图表的数据。
2024-08-07 17:01:34
691
原创 并行状态的广播事件
平行状态的广播事件此示例显示了并行状态下事件广播操作的行为。最初,图表处于休眠状态。并行子状态A.A1.A1a和A.A2.A2a处于活动状态。事件E_one发生并唤醒图表,图表从根向下通过层次结构处理事件:1 图表根会检查根级别是否存在E_one导致的有效转换。不存在有效的转换。2 状态A during actions (durA()) 执行并完成。3 状态A的子状态是平行(AND)状态。因为隐式排序适用,所以状态是从左到右、从上到下进行评估和执行的。首先评估状态A.A1。
2024-08-04 17:21:25
613
原创 事件如何驱动图表运行
由于图表在单个线程上运行,因此基于事件发生的操作对该事件是原子性的。图表中由事件引起的所有活动都在执行返回到接收事件之前发生的活动之前完成。事件的父级通常决定谁可以触发该事件(具有接收权限)。注意:Simulink模型中的输出边缘触发事件执行相当于在1和0之间切换输出数据值的值。1 如果事件的接收器处于活动状态,则执行。(事件接收器是事件的父级, 除非使用send()函数进行定向事件广播。您可以使用事件通过广播事件来控制图表的处理。3 在广播事件后,广播者根据导致事件的动作语句类型执行早返回逻辑。
2024-07-29 17:30:51
296
原创 事件广播的早返回逻辑
C状态现在是其图表中唯一活跃的子状态。状态流程图无法返回到从状态A到状态B的转换,并在广播事件F的条件操作后继续(步骤3)。其次,如果图表允许转换,状态B将成为图表的第二个活动子状态。因此,该图表使用早期返回逻辑并停止从状态A到状态B的转换。可以看到untitled_c3_untitled函数中使用了递归,但是在递归中有switch判断,函数直接会跳到untitled_event_F这个条件中,从而执行untitled_IN_C图表中的内容,完成后break跳出函数,从而不会陷入无限的函数递归中。
2024-07-29 15:47:28
693
原创 使用绑定操作控制 Function-Call 子系统
你Bind 状态中的操作将指定的数据和事件绑定到该状态。绑定到一个状态的事件只能通过该状态或其子状态的行为进行广播。你还可以将函数调用事件绑定到状态,以启用或禁用事件触发的函数调用子系统。函数调用子系统在进入具有绑定事件的状态时启用,在退出该状态时禁用。函数调用子系统的执行完全绑定到调用它的状态的活动。
2024-07-26 17:12:34
593
原创 通过 Function-Call Input Events启用图表中的控制状态
如果图表的父级是Model Root,则将“States When Enabling”设置为“Inherit ”相当于将属性设置为“Held”。当函数调用输入事件重新启用图表时,图表会保留其状态的最新值。在模拟过程中,当函数调用输入事件在t=20和t=40时重新启用图表时,输出y保持其最新值。在由function-call input event启用的图表中,可以通过设置启用图表时的状态属性来控制状态的行为。根据此属性的值,当输入事件重新启用图表时,状态要么保持其最新值,要么恢复为初始值。
2024-07-26 15:11:36
387
原创 通过发送input event激活状态流图
input event 发生在Stateflow®图表之外,但仅在该图表中可见。这种类型的事件使其他Simulink®块(包括其他状态流程图)能够通知其外部发生的特定事件图表。要定义输入事件:将事件添加到状态流程图中。将事件的Scope属性设置为Input from Simulink。在Simulink模型中,Stateflow块的顶部出现一个触发端口。输入事件可以通过控制信号(边缘触发器)的变化或Simulink块的函数调用来激活状态流程图。
2024-07-26 14:17:23
883
原创 同步状态的广播事件
定向活动广播你可以直接将事件从一个状态广播到另一个状态,以同步同一图表中的并行(AND)状态。以下规则适用:在事件广播期间,接收状态必须处于活动状态。一个图表中的操作无法将事件广播到另一个图表的状态。与无定向广播相比,使用定向本地事件广播有以下好处:防止模拟过程中出现不必要的递归。提高生成代码的效率。
2024-07-24 18:22:44
312
原创 使用Bus Editor创建总线对象
要以交互方式创建总线对象及其元素,请使用Simulink®总线编辑器。使用总线编辑器创建的总线对象存储在MATLAB®基本工作区中。要模拟使用总线对象的块,总线对象必须位于基本工作区或数据字典中。要保存与模型关联的总线对象定义,请将总线对象从基本工作空间导出到MATLAB代码文件或MAT文件中。可以在定义总线对象之前或之后将总线对象指定为块的数据类型。但是,在模拟模型之前,总线对象和相应的总线信号必须具有相同数量、相同顺序的总线元素。此外,总线对象和模型中相应信号中的每个总线元素必须具有相同的属性。
2024-07-24 10:44:23
751
原创 在状态流图中重用自定义C代码
要输入定义两个常量的自定义代码:打开“Model Configuration Parameters”对话框。选择“Simulation Target”窗格。在“Header file”子面板中,输入#define和#include语句。例如,在这个例子中,您使用以下代码定义全局常量:#定义TRUE 1然后搭建以下模型,编译一下,编译通过。此示例显示了如何使用自定义C代码定义适用于模式中所有图表的常量、变量和函数。该图表访问名为myglobal的自定义变量,并调用名为fun的自定义函数。
2024-07-19 11:34:40
523
1
原创 Stateflow中的状态转换表
Stateflow软件会根据您创建的状态转换表自动生成只读状态转换图。当您向状态转换表输入更改时,Stateflow也会增量更新图表。不要在Stateflow®图表中以图形方式绘制状态和转换,而是使用状态转换表以表格格式表示模态逻辑。状态转换表支持使用MATLAB®和C作为动作语言。在图表中添加或删除状态时,必须重新排列状态、转换和连接。在状态转换表中添加或删除状态时,不必重新排列任何图形对象。状态转换表支持状态流程图中最常用元素的子集。状态转换表必须至少有一个状态行和一个转换列。
2024-07-18 15:59:26
530
原创 状态流在编辑时检测的建模规则
Stateflow®编辑器通过以红色或橙色突出显示对象来显示潜在的错误和警告。为了显示语法错误,Stateflow用红色波浪线突出显示错误。通过在设计图表时修复这些问题,可以避免潜在的编译或运行时警告和错误。要查看详细信息和可能的修复,请将光标放在对象上并单击徽章。要关闭编辑时间检查和语法错误突出显示,请清除Display > Error & Warnings。更改相应配置参数的诊断级别时,编辑时诊断级别也会更改。
2024-07-17 16:34:33
1038
原创 从图表访问Data Store Memory
Simulink®模型将全局变量实现为数据存储,可以是数据存储内存块,也可以是Simulink.Signal的实例。您可以使用数据存储在多个Simulink块之间共享数据,而无需显式的输入或输出连接来将数据从一个块传递到另一个块。Stateflow®图表通过符号化地读取和写入数据存储内存,与Simulink模型共享全局数据。要从图表中访问全局数据,请将Stateflow数据对象绑定到Simulink数据存储。创建绑定后,Stateflow数据对象将成为Simulink数据存储内存的符号表示。
2024-07-17 14:32:17
496
原创 带有数据存储内存块的数据存储
然后,如果数据表中显示的数据存储读取或数据存储写入块引用由信号对象定义的数据存储,则该表包括与该对象对应的行。您可以在数据存储读取和数据存储写入块中使用此名称,就像它是数据存储内存块的数据存储名称一样。对于本地数据存储,对于下面列出的每个参数,您可以显式设置值,也可以让数据存储从数据存储写入和数据存储读取块继承值。数据存储名称属性指定数据存储写入和数据存储读取阻止访问的数据存储的名称。要定义仅在特定子系统及其包含的子系统中可见,但在模型块中不可见的数据存储,请将数据存储内存块拖动到子系统中。
2024-07-16 15:07:23
993
原创 通过定义图形函数重用逻辑模式
Inline ——如果你不将函数导出到其他图表,并且它不是递归的一部分,则内联你的函数。调用图形函数的语法与函数签名相同,实际参数会替换签名中指定的形式参数。函数的位置决定了它的作用域,即可以调用函数的状态和转换集。如果要从模型中的任何图表调用函数,请将图形函数放在图表级别,并启用图表级别图形函数的导出。函数签名标签指定了函数的名称及其参数和返回值的正式名称。要将整个图表窗口专门用于函数编程,请双击函数框,访问子章节图形函数中的流程图。如果你想在图表中的任何地方调用该函数,请将你的图形函数放在图表级别。
2024-07-15 14:10:20
444
原创 编程建模文件
你可以在MATLAB®命令提示符下以编程方式执行大多数Simulink®建模基础。与基本建模操作(如创建模型、向模型添加块和设置参数)相对应的命令列在“模型编辑基础知识”的“功能”部分中。这些示例显示了其中一些命令以及如何使用它们。
2024-07-04 15:38:33
301
原创 将图表划分为单独的单元
假设您有以下模型,并且图表有两种状态:假设您要单独编辑状态A,而其他人正在编辑状态B。您可以将状态A转换为原子子部件,以存储在库模型中。将状态A替换为链接的原子子部件后,可以在库中单独进行更改。这些更改会自动传播到包含链接的原子子表的图表中。
2024-06-28 15:03:57
301
原创 使用原子子表创建可重用的子组件
原子子表是一个图形对象,可帮助您在Stateflow®图表中创建独立的子部件。原子子表允许:对具有多个状态或层次结构的图表进行微小更改后,模拟速度更快。在多个图表和模型中重复使用相同的状态或子表。易于团队开发,适用于在同一图表的不同部分工作的人员。为图表中的特定状态或子表手动检查生成的代码。原子子表看起来不透明,并且在左上角包含标签“Atomic ”。如果使用库中链接的原子子表,则标签Link 将显示在左上角。
2024-06-27 16:49:33
550
原创 使用隐式事件执行控制图
隐式事件是图表执行时发生的内置事件:图表唤醒进入一个状态退出状态分配给内部数据对象的值这些事件是隐式的,因为您没有显式地定义或触发它们。隐式事件是它们发生的图表的子级,仅在父图表中可见。
2024-06-26 16:34:12
286
原创 使用内部转换处理事件
因为[C_two]为真,所以到结然后到状态A.A2的内部转换是有效的。因为[C_two]为真,所以到结然后到状态A.A2的内部转换是有效的。当存在到历史连接的内部转换并且状态a.A1处于活动状态时,此序列完成与事件E_one相关联的此状态流程图的执行。当状态A2处于活动状态且条件[C_two]为true时,此序列完成与事件E_one相关联的此状态流程图的执行。检测到从状态A到状态B的潜在有效转换。当状态A1处于活动状态且条件[C_two]为true时,此序列完成与事件E_one相关联的此状态流程图的执行。
2024-06-26 13:47:43
1032
原创 Inner Transitions
当事件“Reset”发生时,到历史连接的内部转换是有效的。如果[c1>0]为true,则向A1的转换是有效的。如果[c2>0]为真,则向A2的转换是有效的。如果[c1>0]和[c2>0]都不为真,则向A3的转换是有效的。转换的目的地由[c1>0]和[c2>0]确定。如果[c2>0]为真,则向A2的转换是有效的。如果[c1>0]和[c2>0]都不为真,则向A3的转换是有效的。A1、A2和A3之间的转换由E、[c1>0]和[c2>0]确定。转换的目的地由[c1>0]和[c2>0]确定。使用内部转换到历史节点。
2024-06-26 10:02:26
436
原创 控制状态流程图中的消息活动
消息是一个Stateflow®对象,用于在本地或图表之间进行数据通信。从发件人图表中,您可以发送或转发邮件。在接收图表中,队列接收消息并将其保存,直到图表能够对其进行评估。使用Stateflow运算符,您可以访问消息数据,并发送、接收、丢弃或转发消息。您还可以确定消息是否有效,并查找队列中的消息数。
2024-05-15 14:50:23
876
原创 使用in运算符检查状态活动
在具有并行状态分解的Stateflow®图表中,子状态可以同时处于活动状态。如果检查状态活动,则可以在两个平行状态下同步子状态。例如,此图表有两个平行的状态:Place和Tracker。Tracker中的转换会在适当的位置检查状态活动,并保持子状态同步。原地活动子状态的更改会导致跟踪器中活动子状态相应的更改。如果R变为“ in Place”中的活动子状态,则Moved_Right变为“in Tracker”中的激活子状态。
2024-05-11 17:28:09
875
原创 状态分解定义互斥和并行模式练习
首先我使用互斥状态来搭建一个模型,默认先执行FAN1的程序,当温度大于120度时,开启风扇1,当温度小于等120度时,关闭风扇1。当状态拥有互斥 (OR) 分解时,一次只能有一个子状态激活。当状态拥有并行 (AND) 分解时,所有子状态同时激活。可以看到FAN1和FAN2已经是并行的状态了,都可以执行到,执行顺序是按照图表右上角的数字标号来执行的,即FAN1先执行,然后FAN2执行。我们应该使用并行状态来搭建模型,将FAN1和FAN2改为并行模式,图表方框就变为虚线了,然后生成下代码看看。
2024-05-10 10:17:18
292
原创 Simulink Function
当使用函数调用程序块调用函数时,函数调用程序中的参数function prototype必须与您在Simulink函数块上指定的函数接口完全匹配。Simulink功能块是一个子系统块,预配置为用Simulink®块图形定义功能的起点。例如,Simulink Function块使用x和y参数,而Stateflow转换使用x2和y2参数来调用函数。例如,在Simulink函数块的表面输入y=myfunction(u),会在子系统中添加一个参数输入块(u)和一个参数输出块(y)。这是一个直接的函数调用。
2024-05-09 16:19:22
513
原创 使用Simulink function块和导出的Stateflow函数
1 以图形方式,使用Simulink function块中的Simulink块,或从Stateflow图表导出的图形功能中的Stateflow状态转换。1 设置Simulink函数块,通过函数调用方的输入参数接收数据。将输入参数乘以2,然后通过输出参数将计算值传回。Simulink® functions 有一个与编程语言类似的带有输入和输出参数的接口。2 将用户定义函数库中的Simulink函数块添加到模型中。4 添加增益块,并将增益参数设置为123。3 双击块打开定义功能的子系统。
2024-05-09 10:22:21
425
原创 评估Transitions
Stateflow®使用图表中的转换从一种OR状态移动到另一种OR状态。对于图表执行的输入和执行工作流,Stateflow评估转换以确定它们是否有效。有效转换是条件标签为true且路径以状态结束的转换。如果转换有效,则Stateflow将从源状态退出并进入目标状态。
2024-05-08 13:35:57
912
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人