qq_45603563 2023-05-23 20:01 采纳率: 90%
浏览 31
已结题

matlab中s-function函数编写

img

img


请问大家,我在将s-function的名称改为Newton_ILC之后,电机确认之后,出现第二张图片,这是为什么呢?知道的麻烦告诉我下!非常感谢

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-28 01:06
    关注

    回答:通过参考资料中的段落0和段落1可知,在S-Function函数编写时,可以通过修改S-Function name来修改函数名称,且只需要修改这个参数即可。因此,将函数名称由默认的“Untitled”改为“Newton_ILC”的方法是在S-Function属性窗口中将S-Function name从“Untitled”修改为“Newton_ILC”即可。根据提供的信息和错误提示,可能是在修改后没有正确保存导致的错误,请确保更改后及时保存代码。此外,如果编写的S-Function函数本身存在其他语法错误,则也可能会导致类似的错误提示。如果不确定错误原因,可以尝试检查其他语法错误,并按照参考资料中的段落2和段落4使用S-Function Builder或在Simulink中添加S-Function来进行编写。以下是一个可能的示例代码,用于将S-Function name修改为“Newton_ILC”:

    function Newton_ILC(block)
      setup(block);
    
    % ----------------------------------------------------------------------
    
    function setup(block)
      % Register number of input and output ports
      block.NumInputPorts  = 1;
      block.NumOutputPorts = 1;
    
      % Set up functional port properties to dynamically
      % inherited.
      block.SetPreCompInpPortInfoToDynamic;
      block.SetPreCompOutPortInfoToDynamic;
    
      % Override input port properties
      block.InputPort(1).Dimensions  = 1;
      block.InputPort(1).DatatypeID  = 0;  % double
      block.InputPort(1).Complexity  = 'Real';
      block.InputPort(1).DirectFeedthrough = true;
    
      % Override output port properties
      block.OutputPort(1).Dimensions  = 1;
      block.OutputPort(1).DatatypeID  = 0; % double
      block.OutputPort(1).Complexity  = 'Real';
    
      % Register parameters
      block.NumDialogPrms     = 0;
    
      % Register sample times
      %  [0 offset]            : Continuous sample time
      %  [positive_num offset] : Discrete sample time
      %
      %  [-1, 0]               : Inherited sample time
      %  [-2, 0]               : Variable sample time
      block.SampleTimes = [0 0];
    
      % Specify the block simStateCompliance. The allowed values are:
      %    'UnknownSimState', < The default setting; warn and assume DefaultSimState
      %    'DefaultSimState', < Same sim state as a built-in block
      %    'HasNoSimState',   < No sim state
      %    'CustomSimState',  < Has GetSimState and SetSimState methods
      %    'DisallowSimState' < Error out when saving or restoring the model sim state
      block.SimStateCompliance = 'DefaultSimState';
    
      % Register methods
      block.RegBlockMethod('Outputs', @Outputs);  
      block.RegBlockMethod('Terminate', @Terminate);    
    
    % ----------------------------------------------------------------------
    function Outputs(block)
      f_in = block.InputPort(1).Data;
    
      % Newton Iteration
      if (abs(f_in)>0.001)
          f_out = f_in - (sin(f_in)-0.5*cos(f_in))/(cos(f_in)+0.5*sin(f_in));
      else
          f_out = 0.001;
      end
      % set output
      block.OutputPort(1).Data = f_out;
    
    function Terminate(~)
      % Terminate function
      disp('Terminating the block');
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月30日
  • 已采纳回答 6月22日
  • 创建了问题 5月23日

悬赏问题

  • ¥20 无法创建新的堆栈防护界面
  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework),并且基于qt实现打开一个web
  • ¥30 AD9854 为什么输出波形幅度受限,AI机器人勿扰
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework
  • ¥15 数据库原理及应用上机练习题
  • ¥15 如何联系真正的开发者而非公司
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,