通过编程方式创建活动图
自 R2026a 起
本示例演示了如何通过编程方式创建活动图。活动图描述系统行为,它通过受控动作序列对从输入到输出的令牌流进行建模。您可以使用活动图来构建系统的概念模型,通过动作或决策可视化功能流,并了解系统组件之间是如何相互交互的。如需进一步了解如何绘制活动图,请参阅绘制简单的活动图。
在此示例中,您将创建一个活动图,以说明下单、检查库存可用性以及在商品缺货时取消订单的各个步骤。

创建新活动图
使用 systemcomposer.createActivity 函数创建一个名为 AuthorActivity 的新活动图。
activityName = 'AuthorActivity';
adModel = systemcomposer.createActivity(activityName,true);
activity = adModel.Activity;添加初始节点和动作节点
使用 addNode 函数添加一个初始节点和所需的动作节点。
init1 = addNode(activity,'init1','initial'); action1 = addNode(activity,'Place Order','action'); action2 = addNode(activity,'Authorize Payment','action'); action3 = addNode(activity,'Check Inventory','action'); action4 = addNode(activity,'Cancel Order','action'); action5 = addNode(activity,'Fulfill Order','action');
定义动作节点的行为并添加引脚
使用 setBehaviorType 函数 . 为动作节点添加行为类型。对于行为类型为 MATLAB 的动作节点,您可以通过 BehaviorDefinition 属性指定 MATLAB® 函数。
setBehaviorType(action1,'MATLAB'); action1.BehaviorDefinition = 'PlaceOrder'; setBehaviorType(action2,'Activity'); setBehaviorType(action3,'MATLAB'); action3.BehaviorDefinition = 'CheckInventory';
您可以使用 addNode 函数在动作节点上添加引脚。有关引脚的详细信息,请参阅Pin。
outPin1 = addPin(action1,'order','out'); inPin1 = addPin(action2,'order1','in'); outPin2 = addPin(action2,'order2','out'); inPin2 = addPin(action3,'order3','in'); outPin3 = addPin(action3,'order4','out'); inPin1.IsStreaming = true; outPin2.IsStreaming = true;
创建嵌套活动
您可以为行为类型为 Activity 的动作节点创建一个嵌套活动。
childActivity = action2.ChildActivity; childAction1 = addNode(childActivity,'Enter Card Details','action'); childAction2 = addNode(childActivity,'Authenticate Details','action');
添加控制节点
添加一个连接节点或分支节点,以及一个合并节点或决策节点。有关控制节点的详细信息,请参阅systemcomposer.activity.ControlNode。
jfork = addNode(activity,"jfork","joinfork"); decMerge1 = addNode(activity,"decMerge1","mergedecision"); decMerge2 = addNode(activity,"decMerge2","mergedecision");
添加流终止节点和活动终止节点
添加一个流终止节点和一个活动终止节点。
ffinal = addNode(activity,"ffinal","flowfinal"); afinal = addNode(activity,"afinal","activityfinal");
连接流
将流连接起来,以完成活动图。您可以为从决策节点输出的流创建守护表达式。
flow1 = connect(init1,action1); flow2 = connect(outPin1,jfork); flow3 = connect(jfork,inPin1); flow4 = connect(jfork,inPin2); flow5 = connect(outPin2,decMerge1); flow6 = connect(outPin3,decMerge2); flow7 = connect(decMerge2,action5); flow8 = connect(decMerge2,action4); flow9 = connect(decMerge1,action5); flow10 = connect(decMerge1,action4); flow11 = connect(action4,ffinal); flow12 = connect(action5,afinal);
为从决策节点输出的数据流创建 guard 表达式。
flow7.Guard = 'token == 1'; flow8.Guard = 'token == 0';
您可以使用 Simulink.BlockDiagram.arrangeSystem 函数来优化活动图模型的布局。
Simulink.BlockDiagram.arrangeSystem('AuthorActivity');另请参阅
函数
systemcomposer.createActivity|addNode|addParameter|getNode|getNodes|getFlow|connect|getParameter|getParameters|getPin|getPins|addPin|getParentPin|applyStereotype|removeStereotype|getStereotype|destroy|setBehaviorType
对象
systemcomposer.activity.Action|systemcomposer.activity.Activity|systemcomposer.activity.ActivityNode|systemcomposer.activity.ActivityFinal|systemcomposer.activity.ControlNode|systemcomposer.activity.Flow|systemcomposer.activity.FlowFinal|systemcomposer.activity.Model|systemcomposer.activity.JoinFork|systemcomposer.activity.Initial|systemcomposer.activity.MergeDecision|systemcomposer.activity.Parameter|systemcomposer.activity.Pin
工具
模块
- Initial Node | Action Node | Pin | Parameter Node | Decision or Merge Node | Join or Fork Node | Flow Final Node | Activity Final Node