数组索引到组件
如果你的模型包含块与底层数组的组件,您可能希望访问单个数组成员,例如,设置操作点目标或情节记录仿真数据为特定节点。这可以通过使用命令行接口索引的数组组件和数据记录节点构造的路径或一个操作点的特定成员的目标。
以下规则适用于:
通过使用MATLAB访问数组成员®矩阵索引技术。有关更多信息,请参见数组索引。
访问标量元素通过正则路径(点号分隔或斜杠分隔)索引。
路径索引不能交叉nonscalar元素。
路径索引不能结合矩阵索引。
最后两个规则意味着你可能需要在多个步骤构建路径通过定义中间变量,如这些例子所示。
数组成员策划了模拟数据组件
如果你的模型包含块与底层数组的组件,您可以使用Simscape™检查员查看记录结果Explorer或模拟数据仿真数据对个人数组成员。有关更多信息,请参见数据日志记录组件阵列。
您还可以使用命令行界面组件的数组索引,例如,情节记录仿真数据为特定数组成员。
假设您有一个模型,CompArrayExample
,包含一个子系统,BatteryPack
,在这一块,命名ResistorArray
底层的数组电阻器
组件。你想把当前第二电阻阵列。
在插图,Simscape Explorer显示记录的仿真数据结果树结构(在左边窗格中)和当前的情节,我
通过第二个电阻器(在右窗格中)。
对于编程访问相同的节点,您必须使用索引构造节点的路径。因为路径指数不能遍历一个数组,第一个电阻阵列通过使用点构造路径索引:
r = simlog.BatteryPack.ResistorArray.resistor
r = 1×5节点数组属性:id可节省的出口
接下来,使用矩阵索引来访问数组的第二个组件:
r2 = r (2)
r2 =节点属性:id:“电阻”可节省的:1出口:0 power_dissipated:(1×1 simscape.logging。节点)我:[1×1 simscape.logging。节点)v: [1×1 simscape.logging。节点]p: [1×1 simscape.logging。节点)n (1×1 simscape.logging.Node):
最后,再次使用点索引访问节点为当前,我
通过第二个电阻:
i = r2.i
我=节点属性:id:“我”可节省的:1出口:0系列:[1×1 simscape.logging.Series]
图的节点:
情节(我)
设置操作点目标组件的数组成员
在上一个示例中,讨论的模型数组成员策划了模拟数据组件获取和设置操作点的数组成员个人目标。
创建一个OperatingPoint
对象命名人事处
从模拟记录数据在5秒后开始模拟:
op = simscape.op。创建(simlog 5)
op = OperatingPoint有孩子:OperatingPoints: ChildId大小______________________ ____的交流电压源1 x1的BatteryPack 1 x1的电流传感器1 x1的电子参考1 x1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
设置一个新的操作点目标电压,v
在积极的节点p
数组,第二个电阻器的遵循过程类似于一个描述在上一个示例中,使用临时对象构建路径通过数据树。
首先,提取操作点数据数组的电阻:
r =得到(op,“BatteryPack / ResistorArray /电阻”)
r = 1×5 OperatingPoint数组属性:标识符ChildIds孩子属性
接下来,获取目标电压。使用矩阵索引来访问数组的第二个组件,然后从该组件定期斜杠分隔路径建设目标:
t = get (r (2),“p / v”)
t =目标字段值:2.8228 e-12: V优先级:没有一个属性:容器。地图描述:电压
设置一个新值为目标:
V1 = simscape.Value (2.0000 e-12,“V”);t。值= V1
t =目标字段值:2.0000 e-12: V优先级:没有一个属性:容器。地图描述:电压
最后,反向操作的流程设置新的目标点对象为整个模型:
(2)=组(r (2),“p / v”t);op =集(凤凰社,“BatteryPack / ResistorArray /电阻”,r);
初始化模型的新的操作点。观察仿真结果相比改变了先前的例子。
另请参阅
simscape.op.OperatingPoint
|simscape.op.Target
|simscape.Value