转发表允许您检查对库中块的更改是否会破坏模型,如果您已经保存了使用旧版本的库块的模型。转发表可以帮助用户在修改库块的路径、名称、添加、删除、重命名参数时,保持库块的兼容性。欲了解更多信息,创建自定义库.
创建一个转发表条目,用于将旧的库块映射到新的库块。当您打开模型时,到旧库块的链接将自动更新,而不会丢失数据或功能。转发表在打开模型、关闭模型或执行add_block
或replace_block
命令。
创建转发表条目时:
重命名一个块。
将一个块从一个库移动到另一个库。
从块中添加或删除参数。
拆分块的功能。
考虑一个例子,其中块名在库中testlib
被重命名为魔法石,第1章
来ss2
.
打开上锁的图书馆Lib1
.
在“库”窗口中的图书馆选项卡上,单击锁库.库现在已解锁,可以进行编辑。
在建模选项卡上,单击图书馆的性质.的图书馆的性质对话框。
单击转发表选项卡。
单击添加新条目。转发表中新增一行。
中指定旧块的名称旧块路径中对应的新块路径新建块路径.如果您不知道路径,请选择模型中的块,然后单击得到gcb按钮。块的路径会自动填充到相应的列中。
在转发表中创建旧路径到新路径的映射。现在,打开一个包含到库的链接的模型。到模型中旧库块的链接将自动更新。可以使用表上方的搜索栏筛选表内容。您可以按升序或降序对列进行排序。还可以根据列的值对列进行分组。
为库块分配版本号
在版本列时,可以为库块指定版本号。
如果旧块名和新块名相同,转发表自动填充版本号。库版本的初始值LibraryVersion
是由ModelVersion
属性在创建库链接时的。对库块的任何后续更新都将更新库版本以匹配库的模型版本。
版本号:
必须为数值。
必须是格式的吗< major_version >
.< minor_version >
当新旧块路径相同时。
不能有多个点符号。例如,版本号1.3是可以接受的。版本号1.3.1是不可接受的。
当使用转发表将一个库块从一个库移动到另一个库时,格式并不重要。
考虑一个例子,其中块魔法石,第1章
从testlib1
来testlib2
”。本例中的转发表条目如下所示:
考虑一个例子,其中获得参数的魔法石,第1章
在图书馆testlib
和其他两个参数初始条件
而且延迟的长度
都加进去了。
为了处理这个变化,我们使用转换函数。转换函数纠正了新旧库链接之间参数的不匹配,从而确保库链接继续工作。定义转换函数可以使用.m
的函数文件,然后调用转换函数的列转发表.
链接块包含以名称-值参数形式的块参数实例,以实例化块。此实例数据传递给转换函数为InstanceData
连同转发表入口。此数据存储为结构体
字段。
创建库块的版本时,参数将从InstanceData
.在本例中,InstanceData
在拆卸获得参数,加上初始条件和延迟长度后,看起来像这样
之前:
“RTWMemSecFuncInitTerm”“从模型继承”“RTWMemSecFuncExecute”“从模型继承”“RTWMemSecDataConstants”“从模型继承”“RTWMemSecDataInternal”“从模型继承”“RTWMemSecDataParameters”“从模型继承”“ContentPreviewEnabled”“上”“获得”' 0 '
后:
“RTWMemSecFuncInitTerm”“从模型继承”“RTWMemSecFuncExecute”“从模型继承”“RTWMemSecDataConstants”“从模型继承”“RTWMemSecDataInternal”“从模型继承”“RTWMemSecDataParameters”“从模型继承”“ContentPreviewEnabled”“上”“DelayLength”' 1 '“InitialCondition”' 0 '
这就是变换函数的语法。
函数outData = TransformationFcn(inData)
在这个函数语法中:
inData
结构是否包含字段ForwardingTableEntry
而且InstanceData
.ForwardingTableEntry
也是一种结构。
的ForwardingTableEntry
包含块的旧名称、新名称、旧路径和新路径。类的成员,请参考该代码访问ForwardingTableEntry
.
outData
结构是否包含字段NewInstanceData
而且NewBlockPath
.
从块中添加或删除参数:
获取实例数据和转发表表项。
提取名称-值对和块名称的列表。
获取旧的和新的块名称。
检查新旧块名称是否相同。如果是,则提取该块的版本。
检查旧版本是否为1.1,新版本是否为1.2。然后,删除获得
参数并添加参数延迟的长度
而且初始条件
.
请注意
对于一个库或块,只能有一个转换函数。但是,您可以有多个函数。
要添加或删除参数,请使用此转换函数。
函数[outData] = txFcnTestlib(inData) outData.使用实例NewBlockPath =”;outData。NewInstanceData = [];获取其中的链接块实例数据和转发表项函数被调用instanceData = inData.InstanceData;forwardingTableEntry = inData.ForwardingTableEntry;获取名称值对和块名称列表[ParamNames{1:length(instanceData)}] = instanceData. name;获取新旧块路径或简单名称oldName = forwardingTableEntry。(“__slOldName__”);newName = forwardingTableEntry。(“__slNewName__”);%如果块名称相同,并且它的子系统块在库中如果比较字符串(oldName新名称)从转发表中获取新旧块版本oldVer = forwardingTableEntry。(“__slOldVersion__”);newVer = forwardingTableEntry。(“__slNewVersion__”);不同版本的转发表项可以有单独的%条目。这里,对于转发表中的单个条目,即。% 1.2->1.3或1.3->2.0,我们有单独的转换做一个% TX Fcn用于一个库或块。如果比较字符串(oldName“testlib(魔法石,第1章”)%转发相同的块名ss1如果oldVer = =“1.1”&& newVer ==“1.2”移除增益参数如果(ismember (“获得”, ParamNames))为(i = 1:length(instanceData))如果(比较字符串(instanceData(我)。的名字,“获得”) == true) instanceData(i) = [];打破;结束结束结束添加延迟长度参数如果(ismember (“DelayLength”, ParamNames))为(i = 1:length(instanceData))如果(比较字符串(instanceData(我)。的名字,“价值”) == true) instanceData(i)。值=“5”;打破;结束结束其他的instanceData(+ 1)结束。Name =“DelayLength”;instanceData(结束)。值=' 1 ';结束添加初始条件参数如果(ismember (“InitialCondition”, ParamNames))为(i = 1:length(instanceData))如果(比较字符串(instanceData(我)。的名字,“InitialCondition”) == true) instanceData(i)。值=' 0 ';打破;结束结束其他的instanceData(+ 1)结束。Name =“InitialCondition”;instanceData(结束)。值=' 0 ';结束elseif(oldVer = =“1.2”&& newVer ==“1.3”)做1.2到1.3版本的特定更改elseif(oldVer = =“1.3”&& newVer ==“2.0”)做1.3到2.0版本的特定更改其他的%做不适用于任何版本的默认更改%要求结束elseif比较字符串(oldName“ss2 testlib /”)版本升级后的块ss2转发结束elseif比较字符串(oldName“testlib / oldblk”) && strcmp(newName,“testlib2 / newblk”)%块移动到新库或只是块在相同的重命名% library,这里没有选中版本。做变换是%要求,即是块已修改,而重命名或移动%到新库。elseif比较字符串(oldName“testlib / blkX”) && isempty(newName)我们将区块分成2个不同的区块。因此,保持fwd表中% newName为空。使用其中一个块参数%实例数据(所有块参数的名称-值对)决定如何分配以及分配什么。获取我们感兴趣的参数的索引,即参数Xi = find(contains({实例数据。名称},“X”),真正的);%根据它的值,进行块分割开关(instanceData(我)value)情况下“op1”新名称=“newlibX / blkX”;删除现有参数或添加新参数或修改现有参数%参数等等。情况下“《凤凰社》第2章”新名称=“newlibY / blkX”;否则newName = oldName;结束结束返回新的实例数据和新的块路径outData。NewInstanceData = instanceData;outData。NewBlockPath = newName;结束
拆分块的功能包括添加、删除或修改块的现有参数,并将其添加到新的块中。拆分一个块的功能:
离开新名称
参数是空的。
获取参数的索引和值。
根据块的值拆分块。
返回NewBlockPath
随着更新InstanceData
如果需要。
如果重命名掩码参数,则必须确保现有的MATLAB®使用旧参数名的脚本将继续工作。为了检查兼容性,可以为掩码参数名称创建别名。别名允许您更改库块中掩码参数的名称,而不必在现有模型中重新创建到该块的链接。
对象的掩码块编辑参数。此参数的掩码参数名编辑参数是p1
.
MaskObj = 金宝appSimulink.Mask.get(gcb));hEdit = MaskObj.getParameter(“p1”);hEdit =%带有属性的MaskParameter:类型:“编辑”TypeOptions: {0×1 cell}“p1”提示:“p1”值:' 0 '评估:“上”可调:“上”NeverSave:“关闭”隐藏:“关闭”启用:“上”可见:“上”提示:“上”回调函数:”别名:”
注意编辑掩码参数没有别名。要为掩码参数添加别名,请为别名
掩码参数属性。
MaskObj。别名=“爸爸”
您可以使用掩码参数名称或别名对掩码参数进行函数调用。例如,你可以使用Set_param (gcb, 'p1, '10)
(掩码参数名)或Set_param (gcb, 'pa, '10)
(掩码参数别名)来设置编辑面具参数。