⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sb2slspr.m

📁 数字通信第四版原书的例程
💻 M
字号:
function sb2slspr(blkname,in,fl,cod,timer)
%SB2SLSPR converts spring-mass-damper blocks to SIMULINK.
%	SB2SLSPR(BLKNAME,IN,FL,COD,TIMER) converts a SystemBuild block
%       to a SIMULINK block.  BLKNAME is a string containing the name of
%       the block. The parameters are set up for this block based on the
%       SystemBuild file coding integer IN and real number FL.
%
%       COD is a three dimensional vector. The first element indicates
%       whether it is a continuous (0) or discrete (1) time system.
%       The second element indicates whether it does not need (0) or
%       does need (1) a mask. The third element indicates the
%       orientation of the block.
%
%       TIMER is designed for discrete time only. The first element of
%       TIMER is the sampling time. The second element is the initial time.

% Wes Wang 1/10/93
% Copyright (c) 1990-93 by The MathWorks, Inc.
% $Revision: 1.16 $  $Date: 1993/06/10 18:42:14 $

% in = [8, code1 code2, input, output, state,....
%   (input - 1)/output - 1 = highest order resettable   
% This block is designed for discrete and continuous systems.OB
%
% This block works for the case of in(2) == 4
% and                              in(3) == 10

% findout whether it is a zero initial condition or not.
x0=[0 0];
if in(35) ~= 0
 for i=1:in(35)
  x0(in(35+in(35)+i)) = fl(i);
 end;
end;

if cod(1) == 0
  %     Subsystem  'Continuous Spring Cart'.
  set_param([blkname,'/output2'],...
	'Port','2',...
	'position',[430,100,450,120])
  set_param([blkname,'/output1'],...
	'position',[430,55,450,75])
  set_param([blkname,'/input4'],...
	'orientation',2,...
	'Port','4',...
	'position',[420,165,440,185])
  add_block('built-in/Integrator',[blkname,'/Integrator1'])
  set_param([blkname,'/Integrator1'],...
	'Initial','x0(2)',...
	'position',[340,55,360,75])
  set_param([blkname,'/input3'],...
	'orientation',2,...
	'Port','3',...
	'position',[325,115,345,135])
  add_block('built-in/Integrator',[blkname,'/Integrator'])
  set_param([blkname,'/Integrator'],...
	'Initial','x0(1)',...
	'position',[260,55,280,75])
  add_block('built-in/Product',[blkname,'/Product1'])
  set_param([blkname,'/Product1'],...
	'position',[195,49,220,76])
  set_param([blkname,'/input2'],...
	'Port','2',...
	'position',[140,60,160,80])
  add_block('built-in/Product',[blkname,'/Product3'])
  set_param([blkname,'/Product3'],...
	'orientation',2,...
	'position',[210,154,240,181])
  add_block('built-in/Product',[blkname,'/Product2'])
  set_param([blkname,'/Product2'],...
	'orientation',2,...
	'position',[210,104,240,131])
  add_block('built-in/Sum',[blkname,'/Sum'])
  set_param([blkname,'/Sum'],...
	'inputs','+--',...
	'position',[95,37,115,73])
  set_param([blkname,'/input1'],...
	'position',[30,35,50,55])
  autoline(blkname,'input1/1','Sum/1');
  autoline(blkname,'Product2/1','Sum/2',[],[2,0]);
  autoline(blkname,'Product3/1','Sum/3',[],[2,0]);
  autoline(blkname,'Sum/1','Product1/1');
  autoline(blkname,'input2/1','Product1/2');
  autoline(blkname,'Product1/1','Integrator/1');
  autoline(blkname,'Integrator/1','Integrator1/1');
  autoline(blkname,'Integrator1/1','output1/1');
  autoline(blkname,'Integrator/1','output2/1');
  autoline(blkname,'input3/1','Product2/2',[],[2,2]);
  autoline(blkname,'Integrator/1','Product2/1',[],[0,2]);
  autoline(blkname,'input4/1','Product3/2',[],[2,2]);
  autoline(blkname,'Integrator1/1','Product3/1',[],[0,2]);
  set_param(blkname,'Mask Display',...
     'Time-Varying\nDifferential\nEquation');
%    'u1=u2x''''+u3x''+u4x\ny1=x\ny2=x''');
%   'plot(0,0,20,20,[1,1],[1,19],[1,4],[5,5],[7,4,4,7],[7,7,3,3],[5,5],[4,6],[5,10],[5,5],[1,3.5,4,5,6,7,8,8.5,10],[15,15,18,12,18,12,18,15,15],[9,19],[2,2],[10,10,18,18],[2,17,17,2],[12,12,14,16,16],[4,15,10,15,4])')
  set_param(blkname,'Mask Type','Spring Mass Damper',...
	'Mask Dialogue','Spring Mass Damper\nFor input u1,u2,u3,u4, output y1,y2.\nu1=u2*x''''+u3*x''+u4*x; y1=x; y2=x''.|Initial conditions:',...
	'Mask Translate','x0=@1')
  set_param(blkname,...
   'Mask Help','SPRING MASS DAMPER The Spring Mass Damper solves the second-order differential equation with time-varying coefficients:\nu1=u2*d(dx/dt)/dt+u3*dx/dt+u4*x; the outputs of the block are: y1=x; y2=dx/dt.',...
	'Mask Entries',[mat2str(x0) '\/'])
else  %discrete time case
  T = timer(1);
  %     Subsystem  'Discrete Spring Cart'.
  set_param([blkname,'/input1'],...
		'position',[30,35,50,55])
  add_block('built-in/Sum',[blkname,'/Sum'])
  set_param([blkname,'/Sum'],...
		'inputs','+--',...
		'position',[95,37,115,73])
  set_param([blkname,'/input2'],...
		'Port','2',...
		'position',[140,60,160,80])
  add_block('built-in/Product',[blkname,'/Product1'])
  set_param([blkname,'/Product1'],...
		'position',[195,49,220,76])
  add_block('built-in/Gain',[blkname,'/Gain'])
  set_param([blkname,'/Gain'],...
		'Gain','T',...
		'position',[250,55,270,75])
  add_block('built-in/Sum',[blkname,'/Sum1'])
  set_param([blkname,'/Sum1'],...
		'position',[300,60,320,80])
  add_block('built-in/Gain',[blkname,'/Gain1'])
  set_param([blkname,'/Gain1'],...
		'Gain','T',...
		'position',[380,60,400,80])
  add_block('built-in/Sum',[blkname,'/Sum2'])
  set_param([blkname,'/Sum2'],...
		'position',[425,65,445,85])
  set_param([blkname,'/input4'],...
		'orientation',2,...
		'Port','4',...
		'position',[290,210,310,230])
  set_param([blkname,'/input3'],...
		'orientation',2,...
		'Port','3',...
		'position',[285,160,305,180])
  add_block('built-in/Product',[blkname,'/Product2'])
  set_param([blkname,'/Product2'],...
		'orientation',2,...
		'position',[210,149,240,176])
  add_block('built-in/Product',[blkname,'/Product3'])
  set_param([blkname,'/Product3'],...
		'orientation',2,...
		'position',[210,199,240,226])
  add_block('built-in/Unit Delay',[blkname,'/Unit Delay'])
  set_param([blkname,'/Unit Delay'],...
		'orientation',2,...
		'x0','x0(1)',...
		'Sample time','T',...
		'position',[300,110,330,130])
  add_block('built-in/Unit Delay',[blkname,'/Unit Delay1'])
  set_param([blkname,'/Unit Delay1'],...
		'orientation',2,...
		'x0','x0(2)',...
		'Sample time','T',...
		'position',[425,110,455,130])
  set_param([blkname,'/output1'],...
		'position',[525,65,545,85])
  set_param([blkname,'/output2'],...
		'Port','2',...
		'position',[530,145,550,165])
  autoline(blkname,'input1/1','Sum/1');
  autoline(blkname,'Product2/1','Sum/2',[],[2,0]);
  autoline(blkname,'Product3/1','Sum/3',[],[2,0]);
  autoline(blkname,'Sum/1','Product1/1');
  autoline(blkname,'input2/1','Product1/2');
  autoline(blkname,'Product1/1','Gain/1');
  autoline(blkname,'Gain/1','Sum1/1');
  autoline(blkname,'Unit Delay/1','Sum1/2',[],[2,0]);
  autoline(blkname,'Sum1/1','Gain1/1');
  autoline(blkname,'Sum1/1','output2/1');
  autoline(blkname,'Sum1/1','Unit Delay/1',[],[0,2]);
  autoline(blkname,'Gain1/1','Sum2/1');
  autoline(blkname,'Sum2/1','output1/1');
  autoline(blkname,'Unit Delay1/1','Sum2/2',[],[2,0]);
  autoline(blkname,'Sum2/1','Unit Delay1/1',[],[0,2]);
  autoline(blkname,'input3/1','Product2/1',[],[2,2]);
  autoline(blkname,'Sum1/1','Product2/2',[],[0,2]);
  autoline(blkname,'input4/1','Product3/1',[],[2,2]);
  autoline(blkname,'Sum2/1','Product3/2',[],[0,2]);
  set_param(blkname,'Mask Display',...
     'Time-Varying\nDifferential\nEquation');
%    'u1=u2x''''+u3x''+u4x\ny1=x\ny2=x''');
%   'plot(0,0,20,20,[1,1],[1,19],[1,4],[5,5],[7,4,4,7],[7,7,3,3],[5,5],[4,6],[5,10],[5,5],[1,3.5,4,5,6,7,8,8.5,10],[15,15,18,12,18,12,18,15,15],[9,19],[2,2],[10,10,18,18],[2,17,17,2],[12,12,14,16,16],[4,15,10,15,4])')
  set_param(blkname,...
    'Mask Type','Spring Mass Damper',...
    'Mask Dialogue','Discretisized Spring Mass Damper\nBlock input u1,u2,u3,u4, output y1,y2.\nu1=u2*d(dx)+u3*dx+u4*x; y1=x; y2=dx.|Initial condition:|Sampling time:',...
    'Mask Translate','x0=@1;T=@2;')
  set_param(blkname,'Mask Type','Spring Mass Damper',...
	'Mask Dialogue','Spring Mass Damper\nFor input u1,u2,u3,u4, output y1,y2.\nu1=u2*x''''+u3*x''+u4*x; y1=x; y2=x''.|Initial conditions:|Sampling Time:',...
	'Mask Translate','x0=@1;T=@2')
  set_param(blkname,...
   'Mask Help','DISCRETE SPRING MASS DAMPER The Spring Mass Damper solves the second-order differential equation with time-varying coefficients:\nu1=u2*d(dx/dt)/dt+u3*dx/dt+u4*x; the outputs of the block are: y1=x; y2=dx/dt.',...
   'Mask Entries',[mat2str(x0) '\/' num2str(T) '\/'])
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -