【问题标题】:Fixed blocks in simulink diagramsimulink图中的固定块
【发布时间】:2013-10-07 13:20:20
【问题描述】:

是否有任何解决方案可以修复 simulink 图中的块,以禁用块的移动/调整大小? 是否有任何解决方案可以在 simulink(空矩形)中绘制某种形状? 我的目的是在模型中固定一个区域,这样用户就不能在这个区域之外设计模型。 我尝试使用回调函数没有成功。

感谢您的帮助。

【问题讨论】:

    标签: matlab callback block simulink


    【解决方案1】:

    据我所知,这只是一种妥协。

    正如另一个答案中提到的,您需要创建一个子系统。在阻止参数中您可以设置ReadOnly,因此所有内容都已固定并显示为灰色,如您所愿,或者NoReadOrWrite 访问,因此完全被阻止。此解决方案仅适用于“天真”用户,因为他们仍然可以更改属性以再次获得访问权限。也许你找到了阻止用户进入属性菜单的方法。

    安全方式要复杂得多:protected Models

    关于你关于矩形的问题:我试图找到一个解决方案很长时间,我会说没有办法“绘制”一些东西,虽然背景实际上被称为“画布”;)

    对于您的其他评论:子系统有什么问题?您可以阻止除您希望用户使用的块之外的所有内容。它在一个新的选项卡/窗口中打开,一切都没有关系。那样的话,你想要的可能是不可能的。

    【讨论】:

    • 感谢thewaywewalk的回答,我会深入尝试子系统方法。
    • 这也是我的想法,我需要换个角度思考。谢谢
    【解决方案2】:

    您可以在某种程度上使用回调函数来实现这一点。例如让我们将LoadFcn 设为:

    A=get_param(gcb, 'Position');
    

    MoveFcn

    try                           
        set_param(gcb, 'Position', A);
    catch                         
    end
    

    这将禁止移动和调整大小,但不能剪切或删除。显然,这会污染工作空间,因此您需要想办法管理它。如果你想为很多块添加这个位置,你可以通过

    将位置添加到块currBlockuserData 属性中
    set_param(currBlock, 'UserData', get_param(currBlock, 'Position'));
    

    然后将其添加到块的 MoveFcn 回调中

    try                                                    
        set_param(gcb, 'Position', get_param(gcb, 'UserData'));
    catch                                                  
    end
    

    您甚至可以通过编程方式完成此操作

    moveFcn = sprintf([...
        'try\n' ...
        '    set_param(gcb, ''Position'', get_param(gcb, ''UserData''));\n' ...
        'catch\n' ...
        'end\n']);
    set_param(currBlock, ...
        'UserData', get_param(currBlock, 'Position'), ...
        'MoveFcn', moveFcn);
    

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 感谢多人游戏,我已经尝试过了,但是块仍然可以调整大小/可移动,目标是修复一种矩形背景作为设计模型的表面。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多