如何在Matlab中调整block.outputport.data的大小?

时间:2015-12-03 08:43:48

标签: matlab simulink clock

我试图生成方形脉冲时钟。但它给出了错误。我试过这个:

function pll( block)

setup(block);

function setup(block)

% Register number of ports
block.NumInputPorts  = 1;
block.NumOutputPorts = 1;


% Override input port properties
block.InputPort(1).Dimensions        = 1;
block.InputPort(1).DatatypeID  = 8;  % boolean
block.InputPort(1).Complexity  = 'Real';
block.InputPort(1).DirectFeedthrough = false;


% Override output port properties

block.OutputPort(1).Dimensions       = 1;
block.OutputPort(1).DatatypeID  = 0; %double
block.OutputPort(1).Complexity  = 'Real';

  block.NumDialogPrms     = 1;
  block.DialogPrmsTunable = 0;
ts = 1/24000000'; %'
block.sample times= [ts 0];
block.SimStateCompliance = 'DefaultSimState'
function Outputs(block)
t = [0:1/(24000000):0.000001];
l = 0.1*exp(-6);

c = 220*exp(-9) + 60*exp(-9);


f = 1/(2*pi*sqrt(l*c));

block.OutputPort(1).Data = square(2*pi*f*t);

function Terminate(block)

但它给了我错误

  

"评估注册方法'输出'时出错M-S-Function' pll'在   '无标题/ Level-2 M-file S-Function'。无效的作业   '无标题/ Level-2 M文件S-Function':尝试分配矢量   宽度24001到宽度为1的向量。"

错误表示在行

block.OutputPort(1).Data = square(2*pi*f*t);

那么可以做些什么来克服这个错误?

1 个答案:

答案 0 :(得分:1)

从您的示例来看,您似乎并不熟悉Simulink的工作方式。在每个时间步,Simulink模型中的每个块输出对应于 当前 模拟时间的值(即块的输出值)。在您的情况下,在block.Output函数中,您尝试在 每个 输出 所有 时间点模拟时间步。

看来你真正想要的是替换

t = [0:1/(24000000):0.000001];

t = block.CurrentTime;

并替换

block.OutputPort(1).Data = square(2*pi*f*t);

block.OutputPort(1).Data = sign(sin(2*pi*f*t));

此外,还需要考虑其他一些事项:

  1. 您似乎没有使用以下方法注册块的输出方法:

    block.RegBlockMethod( '输出',@输出);

  2. 为什么在没有输入的情况下将块定义为输入?

  3. 为什么你在S-Function中执行此操作时,从工作区块(或许多其他方法获取数据到模型中)似乎更有意义?