主要内容

图书馆模块使用转发表保持兼容

转发表允许您检查更改块在图书馆不失模型如果你救了一个旧版本的模型库。转发表帮助你保持兼容性图书馆块当你改变的路径或名称库,或添加、删除或重命名的参数在图书馆。看到的更多信息,创建自定义库

创建一个转发表条目映射旧图书馆阻塞新图书馆。当你打开模型时,旧图书馆的链接是自动更新,而不丢失数据块或功能。转发表执行当您打开一个模式,一个模型,或当你执行完成add_blockreplace_block命令。

当你创建一个转发表条目:

  • 重命名一个街区。

  • 一块从一个库移动到另一个库。

  • 添加或删除参数。

  • 分裂的功能块。

转发为一块重命名表条目

考虑一个例子,块名称在图书馆testlib重命名的魔法石,第1章ss2

  1. 打开锁库Lib1

  2. 在图书馆窗口,在图书馆选项卡上,单击锁库。图书馆现在打开进行编辑。

  3. 建模选项卡上,单击图书馆的性质。的图书馆的性质对话框打开。

  4. 单击转发表选项卡。

  5. 点击添加新条目。转发表中添加一个新行。

  6. 指定的旧街区的名字旧块路径和相应的新块路径新的块路径。如果你不知道路径,选择的块模型和点击得到gcb按钮。块的路径自动填充在相应的列。

旧的映射路径转发表中创建新的路径。现在,打开一个模型,该模型包含链接到图书馆。老图书馆的链接块模型的自动更新。您可以使用上面的搜索栏表过滤表的内容。你可以列按升序或降序排序。你也可以组列的值。

将版本号分配给图书馆

版本列,您可以指定一个版本号为图书馆。

如果旧街区的名字是一样的新的块名称,自动转发表填充版本号。的初始值库版本LibraryVersion来源于ModelVersion当时的图书馆图书馆创建链接。任何后续更新库块将更新库版本匹配模型版本的库。

版本号:

  • 必须是数值。

  • 一定的格式< major_version >< minor_version >当旧的和新的块路径是一样的。

  • 不能有多个点符号。例如,1.3的版本号是可以接受的。1.3.1版本号是不能接受的。

  • 格式不重要,当你使用一个表转发给图书馆图书馆块从一个移动到另一个。

将块从一个到另一个库

考虑一个例子一个街区的地方魔法石,第1章就是从testlib1testlib2”。转发表条目在这种情况下所示:

块从一个移动到另一个库

添加或删除参数

考虑一个例子获得参数的魔法石,第1章在图书馆testlib删除,和另外两个参数吗初始条件延迟的长度被添加到它。

添加或删除参数

处理这种改变我们使用转换函数。转换函数修正新老之间的不匹配的参数库链接,确保图书馆链接继续工作。您可以定义一个转换函数使用。m在MATLAB函数文件路径,然后调用的函数转换函数列的转发表

连接块包含块的一个实例参数名称参数实例化的形式。这个实例数据传递给变换函数InstanceData随着转发条目。这个数据存储结构体字段。

当您创建版本的库,添加或删除的参数InstanceData。在这个例子中,InstanceData删除之前的获得参数和初始条件和延迟长度后是这个样子的

之前:

“RTWMemSecFuncInitTerm”“继承模式”“RTWMemSecFuncExecute”“继承模式”“RTWMemSecDataConstants”“继承模式”“RTWMemSecDataInternal”“继承模式”“RTWMemSecDataParameters”“继承模式”“ContentPreviewEnabled”“上”“获得”' 0 '

后:

“RTWMemSecFuncInitTerm”“继承模式”“RTWMemSecFuncExecute”“继承模式”“RTWMemSecDataConstants”“继承模式”“RTWMemSecDataInternal”“继承模式”“RTWMemSecDataParameters”“继承模式”“ContentPreviewEnabled”“上”“DelayLength”' 1 '“InitialCondition”' 0 '

这是转换函数的语法。

函数outData = TransformationFcn (inData)

在这个函数的语法:

  • inData是一个结构域ForwardingTableEntryInstanceDataForwardingTableEntry也是一个结构。

    • ForwardingTableEntry旧名称,新名字,旧的路径,一个街区的新路径。参考代码访问的成员ForwardingTableEntry

  • outData是一个结构域NewInstanceDataNewBlockPath

添加或删除从一块参数:

  1. 获取实例数据和转发表条目。

  2. 提取的名称-值对列表和块的名字。

  3. 旧的和新的块名称。

  4. 检查旧的和新的块名称是否相同。如果是这样,那么提取物体的版本。

  5. 检查旧的版本是1.1,新版本是1.2。然后,删除获得参数和添加参数延迟的长度初始条件

请注意

你可以只有一个变换函数库或块。然而,您可以有多个功能。

添加或删除参数,用这个转换函数。

函数[outData] = txFcnTestlib outData (inData)。NewBlockPath =;outData。NewInstanceData = [];%得到实例数据块和转发条目有关%函数被调用instanceData = inData.InstanceData;forwardingTableEntry = inData.ForwardingTableEntry;%的名称值对列表和块的名字[ParamNames{1:长度(instanceData)}] = instanceData.Name;%得到新老块路径或简单的名字oldName = forwardingTableEntry。(“__slOldName__”);新名称= forwardingTableEntry。(“__slNewName__”);%如果块相同名称及其中高块自由如果比较字符串(oldName新名称)%得到新老阻止版本表转发oldVer = forwardingTableEntry。(“__slOldVersion__”);newVer = forwardingTableEntry。(“__slNewVersion__”);%每个转发条目可以有单独的不同版本%条目。在这里,一个条目在表即转发。% 1.2 - > 1.3或1.3 - > 2.0,我们有单独的转换% TX Fcn库或块。如果比较字符串(oldName“testlib(魔法石,第1章”)与相同的块名魔法石,第1章%转发如果oldVer = =“1.1”& & newVer = =“1.2”%去除获得参数如果(ismember (“获得”,ParamNames))(i = 1:长度(instanceData))如果(比较字符串(instanceData . name(我),“获得”)= = true) instanceData (i) = [];打破;结束结束结束%添加延迟长度参数如果(ismember (“DelayLength”,ParamNames))(i = 1:长度(instanceData))如果(比较字符串(instanceData . name(我),“价值”)= = true) instanceData(我)。值=“5”;打破;结束结束其他的instanceData(+ 1)结束。Name =“DelayLength”;instanceData(结束)。值=' 1 ';结束%添加初始条件参数如果(ismember (“InitialCondition”,ParamNames))(i = 1:长度(instanceData))如果(比较字符串(instanceData . name(我),“InitialCondition”)= = true) instanceData(我)。值=' 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(新名称,“testlib2 / newblk”)%块搬到新图书馆还是块中重命名相同%的图书馆,这里没有版本检查。做转换%要求即是块已被修改而重命名或移动%的新自由。elseif比较字符串(oldName“testlib / blkX”)& & isempty(新名称)%我们把块分成两个不同的街区。因此,保持%新名称空前轮驱动表中。使用的块参数之一%实例数据(这是所有块参数的名称-值对)%决定如何划分。%的指数参数我们感兴趣即参数X我找=(包含({instanceData.Name},“X”),真正的);%根据其价值,做块分裂开关(instanceData(我)value)情况下“op1”新名称=“newlibX / blkX”;%删除现有的参数或添加新的参数或修改现有的%参数等。情况下“《凤凰社》第2章”新名称=“newlibY / blkX”;否则新名称= oldName;结束结束%返回新实例数据和新的块路径outData。NewInstanceData = instanceData;outData。NewBlockPath =新名称;结束

分割块功能

分裂一个街区的功能包括添加、删除或修改现有的参数的块并将它添加到新的块。分裂的功能块:

  1. 离开新名称参数是空的。

  2. 得到参数的指数和价值。

  3. 将块基于其价值。

  4. 返回NewBlockPath与更新的InstanceData如果需要。

创建蒙版参数别名

如果你重命名一个面具参数,您必须确保现有的MATLAB®脚本使用旧的参数名称,继续工作。检查兼容性,您可以创建一个别名面具参数名称。别名允许你改变一个面具的名称参数在图书馆块无需重新创建链接块在现有模型。

考虑一个蒙面块包含一个编辑参数。面具参数名称编辑参数是p1

MaskObj = 金宝appSimulink.Mask.get (gcb));hEdit = MaskObj.getParameter (“p1”);hEdit =% MaskParameter属性:类型:“编辑”TypeOptions:{0×1细胞}名称:“p1”提示:“p1”值:' 0 '评估:“上”可调:“上”NeverSave:“关闭”隐藏:“关闭”启用:“上”可见:“上”提示:“上”回调函数:别名:

请注意,编辑面具参数没有别名。添加别名的面具参数,设定一个值别名面具参数属性。

MaskObj。别名=“爸爸”

你可以使用掩码参数名称或别名面具参数的函数调用。例如,您可以使用set_param (gcb,“p1”, 10)(掩模参数名称)或set_param (gcb, pa, 10)(掩模参数别名)设置的值编辑面具参数。

相关的话题